#ifndef SQL_CRSR
# define SQL_CRSR
struct sql_cursor
{
unsigned int curocn;
void *ptr1;
void *ptr2;
unsigned int magic;
};
typedef struct sql_cursor sql_cursor;
typedef struct sql_cursor SQL_CURSOR;
#endif /* SQL_CRSR */
typedef void * sql_context;
typedef void * SQL_CONTEXT;
struct sqltvn
{
unsigned char *tvnvsn;
unsigned short tvnvsnl;
unsigned char *tvnnm;
unsigned short tvnnml;
unsigned char *tvnsnm;
unsigned short tvnsnml;
};
typedef struct sqltvn sqltvn;
struct sqladts
{
unsigned int adtvsn;
unsigned short adtmode;
unsigned short adtnum;
sqltvn adttvn[1];
};
typedef struct sqladts sqladts;
static struct sqladts sqladt = {
1,1,0,
};
struct sqltdss
{
unsigned int tdsvsn;
unsigned short tdsnum;
unsigned char *tdsval[1];
};
typedef struct sqltdss sqltdss;
static struct sqltdss sqltds =
{
1,
0,
};
struct sqlcxp
{
unsigned short fillen;
char filnam[14];
};
static const struct sqlcxp sqlfpn =
{
13,
"hgeomoraio.pc"
};
static unsigned int sqlctx = 590787;
static struct sqlexd {
unsigned int sqlvsn;
unsigned int arrsiz;
unsigned int iters;
unsigned int offset;
unsigned short selerr;
unsigned short sqlety;
unsigned int occurs;
const short *cud;
unsigned char *sqlest;
const char *stmt;
sqladts *sqladtp;
sqltdss *sqltdsp;
void **sqphsv;
unsigned int *sqphsl;
int *sqphss;
void **sqpind;
int *sqpins;
unsigned int *sqparm;
unsigned int **sqparc;
unsigned short *sqpadto;
unsigned short *sqptdso;
unsigned int sqlcmax;
unsigned int sqlcmin;
unsigned int sqlcincr;
unsigned int sqlctimeout;
unsigned int sqlcnowait;
int sqfoff;
unsigned int sqcmod;
unsigned int sqfmod;
void *sqhstv[19];
unsigned int sqhstl[19];
int sqhsts[19];
void *sqindv[19];
int sqinds[19];
unsigned int sqharm[19];
unsigned int *sqharc[19];
unsigned short sqadto[19];
unsigned short sqtdso[19];
} sqlstm = {12,19};
extern "C" {
void sqlcxt (void **, unsigned int *,
struct sqlexd *, const struct sqlcxp *);
void sqlcx2t(void **, unsigned int *,
struct sqlexd *, const struct sqlcxp *);
void sqlbuft(void **, char *);
void sqlgs2t(void **, char *);
void sqlorat(void **, unsigned int *, void *);
}
static const int IAPSUCC = 0;
static const int IAPFAIL = 1403;
static const int IAPFTL = 535;
extern "C" { void sqliem(char *, int *); }
static const char *sq0002 =
"select comp_z ,comp_a ,comp_weight from hgeom.material_compositions_all whe\
re composition_id=:b0 ";
static const char *sq0003 =
"select ppckov ,absco ,effic ,rindex from hgeom.optical_prop_data where prop\
erty_id=:b0 ";
static const char *sq0008 =
"select object_name ,mother_name ,medium_name ,geant3_shape ,volume_id ,trans\
_id from hgeom.volume_data_for_ana where entry_id=:b0 ";
static const char *sq0009 =
"select point_num ,x ,y ,z from hgeom.volume_points where volume_id=:b0 \
";
static const char *sq0010 =
"select ref_obj_name ,x ,y ,z ,r11 ,r12 ,r13 ,r21 ,r22 ,r23 ,r31 ,r32 ,r33 f\
rom hgeom.volume_transform_for_ana where trans_id=:b0 ";
typedef struct { unsigned short len; unsigned char arr[1]; } VARCHAR;
typedef struct { unsigned short len; unsigned char arr[1]; } varchar;
static const short sqlcud0[] =
{12,4130,1,0,0,
5,0,0,1,197,0,4,196,0,0,8,0,0,1,0,2,9,0,0,2,3,0,0,2,4,0,0,2,3,0,0,2,3,0,0,2,4,
0,0,2,4,0,0,2,3,0,0,
52,0,0,2,108,0,9,266,0,0,1,1,0,1,0,1,3,0,0,
71,0,0,2,0,0,13,267,0,0,3,0,0,1,0,2,3,0,0,2,4,0,0,2,4,0,0,
98,0,0,2,0,0,15,286,0,0,0,0,0,1,0,
113,0,0,3,98,0,9,317,0,0,1,1,0,1,0,1,3,0,0,
132,0,0,3,0,0,13,318,0,0,4,0,0,1,0,2,4,0,0,2,4,0,0,2,4,0,0,2,4,0,0,
163,0,0,3,0,0,15,329,0,0,0,0,0,1,0,
178,0,0,4,190,0,4,364,0,0,5,0,0,1,0,2,9,0,0,2,3,0,0,2,3,0,0,2,4,0,0,2,4,0,0,
213,0,0,5,436,0,4,441,0,0,7,3,0,1,0,2,3,0,0,2,3,0,0,2,3,0,0,2,3,0,0,1,3,0,0,1,
3,0,0,1,3,0,0,
256,0,0,6,67,0,4,540,0,0,1,0,0,1,0,2,3,0,0,
275,0,0,7,434,0,4,541,0,0,8,4,0,1,0,2,3,0,0,2,3,0,0,2,3,0,0,2,3,0,0,1,3,0,0,1,
3,0,0,1,3,0,0,1,3,0,0,
322,0,0,8,141,0,9,623,0,0,1,1,0,1,0,1,3,0,0,
341,0,0,8,0,0,13,624,0,0,6,0,0,1,0,2,9,0,0,2,9,0,0,2,9,0,0,2,9,0,0,2,3,0,0,2,3,
0,0,
380,0,0,9,82,0,9,750,0,0,1,1,0,1,0,1,3,0,0,
399,0,0,9,0,0,13,751,0,0,4,0,0,1,0,2,3,0,0,2,4,0,0,2,4,0,0,2,4,0,0,
430,0,0,9,0,0,15,761,0,0,0,0,0,1,0,
445,0,0,9,0,0,15,764,0,0,0,0,0,1,0,
460,0,0,10,140,0,9,819,0,0,1,1,0,1,0,1,3,0,0,
479,0,0,10,0,0,13,820,0,0,13,0,0,1,0,2,9,0,0,2,4,0,0,2,4,0,0,2,4,0,0,2,4,0,0,2,
4,0,0,2,4,0,0,2,4,0,0,2,4,0,0,2,4,0,0,2,4,0,0,2,4,0,0,2,4,0,0,
546,0,0,10,0,0,15,856,0,0,0,0,0,1,0,
561,0,0,10,0,0,15,863,0,0,0,0,0,1,0,
576,0,0,10,0,0,15,866,0,0,0,0,0,1,0,
591,0,0,11,217,0,4,898,0,0,7,1,0,1,0,2,9,0,0,2,3,0,0,2,9,0,0,2,3,0,0,2,4,0,0,2,
4,0,0,1,97,0,0,
634,0,0,12,91,0,6,950,0,0,4,4,0,1,0,1,97,0,0,1,97,0,0,1,97,0,0,2,3,0,0,
665,0,0,13,147,0,6,1004,0,0,10,10,0,1,0,1,3,0,0,1,97,0,0,1,4,0,0,1,3,0,0,1,3,0,
0,1,3,0,0,1,4,0,0,1,4,0,0,1,3,0,0,2,3,0,0,
720,0,0,14,109,0,3,1060,0,0,5,5,0,1,0,1,3,0,0,1,3,0,0,1,3,0,0,1,4,0,0,1,4,0,0,
755,0,0,15,112,0,3,1105,0,0,6,6,0,1,0,1,3,0,0,1,3,0,0,1,4,0,0,1,4,0,0,1,4,0,0,
1,4,0,0,
794,0,0,16,210,0,6,1176,0,0,19,19,0,1,0,1,3,0,0,1,97,0,0,1,97,0,0,1,97,0,0,1,
97,0,0,1,97,0,0,1,4,0,0,1,4,0,0,1,4,0,0,1,4,0,0,1,4,0,0,1,4,0,0,1,4,0,0,1,4,0,
0,1,4,0,0,1,4,0,0,1,4,0,0,1,4,0,0,2,3,0,0,
885,0,0,17,90,0,3,1242,0,0,5,5,0,1,0,1,3,0,0,1,3,0,0,1,4,0,0,1,4,0,0,1,4,0,0,
920,0,0,18,58,0,4,1307,0,0,2,1,0,1,0,2,3,0,0,1,3,0,0,
943,0,0,19,89,0,6,1331,0,0,3,3,0,1,0,1,97,0,0,1,97,0,0,2,3,0,0,
970,0,0,20,132,0,3,1375,0,0,6,6,0,1,0,1,3,0,0,1,3,0,0,1,97,0,0,1,3,0,0,1,4,0,0,
1,4,0,0,
};
#include "hgeomoraio.h"
#include "hgeomoraconn.h"
#include "hgeommedia.h"
#include "hgeommedium.h"
#include "hgeomset.h"
#include "hgeomnode.h"
#include "hgeominterface.h"
#include "hgeomhit.h"
#include "hgeomshapes.h"
#include "hgeombasicshape.h"
#include "hgeomtof.h"
#include "TList.h"
#define SQLCA_STORAGE_CLASS extern
#define ORACA_STORAGE_CLASS extern
#include <oraca.h>
#include <sqlca.h>
ClassImp(HGeomOraIo)
#define NMAX_GEOLARGE 2500
#define NMAX_GEOMEDIUM 500
#define NMAX_GEOSMALL 100
#define NMAX_GEOTINY 20
HGeomOraIo::HGeomOraIo() {
pConn=new HGeomOraConn();
detVersions=0;
maxSince=-1;
minUntil=-1;
}
HGeomOraIo::~HGeomOraIo() {
close();
if (pConn) {
delete pConn;
pConn=0;
}
}
Bool_t HGeomOraIo::open() {
close();
return pConn->open();
}
Bool_t HGeomOraIo::open(const Char_t* connName,const Text_t* status) {
close();
TString s(connName);
Bool_t isConnected=kFALSE;
Int_t n=s.First('@');
if (n>0) {
TString userName=s(0,n);
TString dbName=s(n+1,s.Length()-n-1);
isConnected=pConn->open((Char_t*)dbName.Data(),(Char_t*)userName.Data());
} else isConnected=pConn->open((Char_t*)connName);
return isConnected;
}
void HGeomOraIo::close() {
pConn->close();
if (detVersions) {
detVersions->Delete();
delete detVersions;
detVersions=0;
}
maxSince=-1;
minUntil=-1;
}
void HGeomOraIo::print() {
pConn->print();
}
Bool_t HGeomOraIo::isOpen() {
return pConn->isOpen();
}
Bool_t HGeomOraIo::isWritable() {
return pConn->isWritable();
}
Bool_t HGeomOraIo::setSimulRefRun(const Char_t* runName) {
return pConn->setSimulRefRun(runName);
}
const Char_t* HGeomOraIo::getSimulRefRun() {
return pConn->getSimulRefRun();
}
Bool_t HGeomOraIo::setRunId(Int_t id) {
return pConn->setRunId(id);
}
Int_t HGeomOraIo::getCurrentRunId() {
return pConn->getActRunId();
}
Bool_t HGeomOraIo::setHistoryDate(const Char_t* s) {
if (strlen(s)==0) return kTRUE;
else return pConn->setHistoryDate(s);
}
const Char_t* HGeomOraIo::getHistoryDate() {
return pConn->getHistoryDate();
}
Bool_t HGeomOraIo::readGeomConfig(HGeomInterface* interface) {
if (interface==0||pConn->getActRunId()==-1) return kFALSE;
Int_t n=0;
if (!detVersions) n=readGeomSetup();
if (n>0&&detVersions) {
TListIter iter(detVersions);
HOraDetVers* vers;
cout<<"*---------------------------------*\n";
cout<<"| Initialization from database: |\n";
cout<<"*---------------------------------*\n";
cout<<"Run Id \t"<<pConn->getActRunId()<<'\n';
while((vers=(HOraDetVers*)iter.Next())) {
TString detFile=vers->GetName();
cout<<detFile<<" \tVersion: "<<vers->geomVersion<<'\n';
detFile+="_gdb";
interface->addInputFile(detFile);
}
cout<<"*---------------------------------*\n";
return kTRUE;
} else {
return kFALSE;
Error("readGeomConfig(HGeomInterface*)","No versions found in database");
}
}
Bool_t HGeomOraIo::read(HGeomMedia* media) {
if (media==0||pConn->getActRunId()==-1) return kFALSE;
Bool_t rc=kTRUE;
TObjArray* pMat=0;
TObjArray* pOpt=0;
Int_t nMed=0, nMat=0, nOpt=0;
struct {
struct { unsigned short len; unsigned char arr[82]; } p_name[500];
int p_compos_id[NMAX_GEOMEDIUM];
double p_density[NMAX_GEOMEDIUM];
int p_isvol[NMAX_GEOMEDIUM];
int p_ifield[NMAX_GEOMEDIUM];
double p_fieldm[NMAX_GEOMEDIUM];
double p_epsil[NMAX_GEOMEDIUM];
int p_optic_id[NMAX_GEOMEDIUM];
} med;
struct {
short p_name_Ind[NMAX_GEOMEDIUM];
short p_compos_id_Ind[NMAX_GEOMEDIUM];
short p_density_Ind[NMAX_GEOMEDIUM];
short p_isvol_Ind[NMAX_GEOMEDIUM];
short p_ifield_Ind[NMAX_GEOMEDIUM];
short p_fieldm_Ind[NMAX_GEOMEDIUM];
short p_epsil_Ind[NMAX_GEOMEDIUM];
short p_optic_id_Ind[NMAX_GEOMEDIUM];
} med_Ind;
{
struct sqlexd sqlstm;
sqlorat((void **)0, &sqlctx, &oraca);
sqlstm.sqlvsn = 12;
sqlstm.arrsiz = 8;
sqlstm.sqladtp = &sqladt;
sqlstm.sqltdsp = &sqltds;
sqlstm.stmt = "select medium_name ,composition_id ,density ,isvol ,ifield \
,fieldm ,epsil ,optical_prop_id into :s1:s2 ,:s3:s4 ,:s5:s6 ,:s7:s8 ,:s9:s10 ,\
:s11:s12 ,:s13:s14 ,:s15:s16 from hgeom.media_at_histdate ";
sqlstm.iters = (unsigned int )500;
sqlstm.offset = (unsigned int )5;
sqlstm.selerr = (unsigned short)1;
sqlstm.cud = sqlcud0;
sqlstm.sqlest = (unsigned char *)&sqlca;
sqlstm.sqlety = (unsigned short)256;
sqlstm.occurs = (unsigned int )0;
sqlstm.sqhstv[0] = ( void *)med.p_name;
sqlstm.sqhstl[0] = (unsigned int )83;
sqlstm.sqhsts[0] = ( int )84;
sqlstm.sqindv[0] = ( void *)med_Ind.p_name_Ind;
sqlstm.sqinds[0] = ( int )sizeof(short);
sqlstm.sqharm[0] = (unsigned int )0;
sqlstm.sqharc[0] = (unsigned int *)0;
sqlstm.sqadto[0] = (unsigned short )0;
sqlstm.sqtdso[0] = (unsigned short )0;
sqlstm.sqhstv[1] = ( void *)med.p_compos_id;
sqlstm.sqhstl[1] = (unsigned int )sizeof(int);
sqlstm.sqhsts[1] = ( int )sizeof(int);
sqlstm.sqindv[1] = ( void *)med_Ind.p_compos_id_Ind;
sqlstm.sqinds[1] = ( int )sizeof(short);
sqlstm.sqharm[1] = (unsigned int )0;
sqlstm.sqharc[1] = (unsigned int *)0;
sqlstm.sqadto[1] = (unsigned short )0;
sqlstm.sqtdso[1] = (unsigned short )0;
sqlstm.sqhstv[2] = ( void *)med.p_density;
sqlstm.sqhstl[2] = (unsigned int )sizeof(double);
sqlstm.sqhsts[2] = ( int )sizeof(double);
sqlstm.sqindv[2] = ( void *)med_Ind.p_density_Ind;
sqlstm.sqinds[2] = ( int )sizeof(short);
sqlstm.sqharm[2] = (unsigned int )0;
sqlstm.sqharc[2] = (unsigned int *)0;
sqlstm.sqadto[2] = (unsigned short )0;
sqlstm.sqtdso[2] = (unsigned short )0;
sqlstm.sqhstv[3] = ( void *)med.p_isvol;
sqlstm.sqhstl[3] = (unsigned int )sizeof(int);
sqlstm.sqhsts[3] = ( int )sizeof(int);
sqlstm.sqindv[3] = ( void *)med_Ind.p_isvol_Ind;
sqlstm.sqinds[3] = ( int )sizeof(short);
sqlstm.sqharm[3] = (unsigned int )0;
sqlstm.sqharc[3] = (unsigned int *)0;
sqlstm.sqadto[3] = (unsigned short )0;
sqlstm.sqtdso[3] = (unsigned short )0;
sqlstm.sqhstv[4] = ( void *)med.p_ifield;
sqlstm.sqhstl[4] = (unsigned int )sizeof(int);
sqlstm.sqhsts[4] = ( int )sizeof(int);
sqlstm.sqindv[4] = ( void *)med_Ind.p_ifield_Ind;
sqlstm.sqinds[4] = ( int )sizeof(short);
sqlstm.sqharm[4] = (unsigned int )0;
sqlstm.sqharc[4] = (unsigned int *)0;
sqlstm.sqadto[4] = (unsigned short )0;
sqlstm.sqtdso[4] = (unsigned short )0;
sqlstm.sqhstv[5] = ( void *)med.p_fieldm;
sqlstm.sqhstl[5] = (unsigned int )sizeof(double);
sqlstm.sqhsts[5] = ( int )sizeof(double);
sqlstm.sqindv[5] = ( void *)med_Ind.p_fieldm_Ind;
sqlstm.sqinds[5] = ( int )sizeof(short);
sqlstm.sqharm[5] = (unsigned int )0;
sqlstm.sqharc[5] = (unsigned int *)0;
sqlstm.sqadto[5] = (unsigned short )0;
sqlstm.sqtdso[5] = (unsigned short )0;
sqlstm.sqhstv[6] = ( void *)med.p_epsil;
sqlstm.sqhstl[6] = (unsigned int )sizeof(double);
sqlstm.sqhsts[6] = ( int )sizeof(double);
sqlstm.sqindv[6] = ( void *)med_Ind.p_epsil_Ind;
sqlstm.sqinds[6] = ( int )sizeof(short);
sqlstm.sqharm[6] = (unsigned int )0;
sqlstm.sqharc[6] = (unsigned int *)0;
sqlstm.sqadto[6] = (unsigned short )0;
sqlstm.sqtdso[6] = (unsigned short )0;
sqlstm.sqhstv[7] = ( void *)med.p_optic_id;
sqlstm.sqhstl[7] = (unsigned int )sizeof(int);
sqlstm.sqhsts[7] = ( int )sizeof(int);
sqlstm.sqindv[7] = ( void *)med_Ind.p_optic_id_Ind;
sqlstm.sqinds[7] = ( int )sizeof(short);
sqlstm.sqharm[7] = (unsigned int )0;
sqlstm.sqharc[7] = (unsigned int *)0;
sqlstm.sqadto[7] = (unsigned short )0;
sqlstm.sqtdso[7] = (unsigned short )0;
sqlstm.sqphsv = sqlstm.sqhstv;
sqlstm.sqphsl = sqlstm.sqhstl;
sqlstm.sqphss = sqlstm.sqhsts;
sqlstm.sqpind = sqlstm.sqindv;
sqlstm.sqpins = sqlstm.sqinds;
sqlstm.sqparm = sqlstm.sqharm;
sqlstm.sqparc = sqlstm.sqharc;
sqlstm.sqpadto = sqlstm.sqadto;
sqlstm.sqptdso = sqlstm.sqtdso;
sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
if (sqlca.sqlcode < 0) goto errorfound;
}
nMed=sqlca.sqlerrd[2];
pMat=new TObjArray(nMed);
pOpt=new TObjArray(nMed);
if (nMed>0) {
for(Int_t i=0;i<nMed;i++) {
if (med_Ind.p_name_Ind[i]!=-1) {
med.p_name[i].arr[med.p_name[i].len]='\0';
HGeomMedium* medium=new HGeomMedium((Char_t*)(med.p_name[i].arr));
medium->setMediumPar(med.p_isvol[i],med.p_ifield[i],med.p_fieldm[i],
med.p_epsil[i],0.,0.,0.,0.);
medium->setDensity(med.p_density[i]);
media->addMedium(medium);
pMat->AddAt(new HOraObj(medium,med.p_compos_id[i]),nMat);
nMat++;
if (med_Ind.p_optic_id_Ind[i]!=-1) {
pOpt->AddAt(new HOraObj(medium,med.p_optic_id[i]),nOpt);
nOpt++;
}
}
}
rc=readMaterialComposition(media,pMat,nMat);
if (rc&&nOpt>0) rc=readOpticalProperties(media,pOpt,nOpt);
} else {
rc=kFALSE;
Error("read(Int_t,HGeomMedia*)","No media found in database");
}
if (pMat) {
pMat->Delete();
delete pMat;
pMat=0;
}
if (pOpt) {
pOpt->Delete();
delete pOpt;
pOpt=0;
}
return rc;
errorfound:
pConn->showSqlError("read(Int_t,HGeomMedia*)");
return kFALSE;
}
Bool_t HGeomOraIo::readMaterialComposition(HGeomMedia* media,TObjArray* pMaterials,
Int_t nMaterials) {
if (pMaterials==0||nMaterials==0) return kFALSE;
int id;
struct {
int cz[NMAX_GEOSMALL];
double ca[NMAX_GEOSMALL];
double cw[NMAX_GEOSMALL];
} pmat;
Bool_t rc=kTRUE;
for(Int_t i=0;i<nMaterials&&rc;i++) {
HOraObj* p=(HOraObj*)pMaterials->At(i);
HGeomMedium* medium=(HGeomMedium*)p->pObj;
id=p->oraId;
{
struct sqlexd sqlstm;
sqlorat((void **)0, &sqlctx, &oraca);
sqlstm.sqlvsn = 12;
sqlstm.arrsiz = 8;
sqlstm.sqladtp = &sqladt;
sqlstm.sqltdsp = &sqltds;
sqlstm.stmt = sq0002;
sqlstm.iters = (unsigned int )1;
sqlstm.offset = (unsigned int )52;
sqlstm.selerr = (unsigned short)1;
sqlstm.cud = sqlcud0;
sqlstm.sqlest = (unsigned char *)&sqlca;
sqlstm.sqlety = (unsigned short)256;
sqlstm.occurs = (unsigned int )0;
sqlstm.sqcmod = (unsigned int )0;
sqlstm.sqhstv[0] = ( void *)&id;
sqlstm.sqhstl[0] = (unsigned int )sizeof(int);
sqlstm.sqhsts[0] = ( int )0;
sqlstm.sqindv[0] = ( void *)0;
sqlstm.sqinds[0] = ( int )0;
sqlstm.sqharm[0] = (unsigned int )0;
sqlstm.sqadto[0] = (unsigned short )0;
sqlstm.sqtdso[0] = (unsigned short )0;
sqlstm.sqphsv = sqlstm.sqhstv;
sqlstm.sqphsl = sqlstm.sqhstl;
sqlstm.sqphss = sqlstm.sqhsts;
sqlstm.sqpind = sqlstm.sqindv;
sqlstm.sqpins = sqlstm.sqinds;
sqlstm.sqparm = sqlstm.sqharm;
sqlstm.sqparc = sqlstm.sqharc;
sqlstm.sqpadto = sqlstm.sqadto;
sqlstm.sqptdso = sqlstm.sqtdso;
sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
if (sqlca.sqlcode < 0) goto errorfound;
}
{
struct sqlexd sqlstm;
sqlorat((void **)0, &sqlctx, &oraca);
sqlstm.sqlvsn = 12;
sqlstm.arrsiz = 8;
sqlstm.sqladtp = &sqladt;
sqlstm.sqltdsp = &sqltds;
sqlstm.iters = (unsigned int )100;
sqlstm.offset = (unsigned int )71;
sqlstm.selerr = (unsigned short)1;
sqlstm.cud = sqlcud0;
sqlstm.sqlest = (unsigned char *)&sqlca;
sqlstm.sqlety = (unsigned short)256;
sqlstm.occurs = (unsigned int )0;
sqlstm.sqfoff = ( int )0;
sqlstm.sqfmod = (unsigned int )2;
sqlstm.sqhstv[0] = ( void *)pmat.cz;
sqlstm.sqhstl[0] = (unsigned int )sizeof(int);
sqlstm.sqhsts[0] = ( int )sizeof(int);
sqlstm.sqindv[0] = ( void *)0;
sqlstm.sqinds[0] = ( int )0;
sqlstm.sqharm[0] = (unsigned int )0;
sqlstm.sqharc[0] = (unsigned int *)0;
sqlstm.sqadto[0] = (unsigned short )0;
sqlstm.sqtdso[0] = (unsigned short )0;
sqlstm.sqhstv[1] = ( void *)pmat.ca;
sqlstm.sqhstl[1] = (unsigned int )sizeof(double);
sqlstm.sqhsts[1] = ( int )sizeof(double);
sqlstm.sqindv[1] = ( void *)0;
sqlstm.sqinds[1] = ( int )0;
sqlstm.sqharm[1] = (unsigned int )0;
sqlstm.sqharc[1] = (unsigned int *)0;
sqlstm.sqadto[1] = (unsigned short )0;
sqlstm.sqtdso[1] = (unsigned short )0;
sqlstm.sqhstv[2] = ( void *)pmat.cw;
sqlstm.sqhstl[2] = (unsigned int )sizeof(double);
sqlstm.sqhsts[2] = ( int )sizeof(double);
sqlstm.sqindv[2] = ( void *)0;
sqlstm.sqinds[2] = ( int )0;
sqlstm.sqharm[2] = (unsigned int )0;
sqlstm.sqharc[2] = (unsigned int *)0;
sqlstm.sqadto[2] = (unsigned short )0;
sqlstm.sqtdso[2] = (unsigned short )0;
sqlstm.sqphsv = sqlstm.sqhstv;
sqlstm.sqphsl = sqlstm.sqhstl;
sqlstm.sqphss = sqlstm.sqhsts;
sqlstm.sqpind = sqlstm.sqindv;
sqlstm.sqpins = sqlstm.sqinds;
sqlstm.sqparm = sqlstm.sqharm;
sqlstm.sqparc = sqlstm.sqharc;
sqlstm.sqpadto = sqlstm.sqadto;
sqlstm.sqptdso = sqlstm.sqtdso;
sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
if (sqlca.sqlcode < 0) goto errorfound;
}
Int_t nComp=sqlca.sqlerrd[2];
Int_t wFac=1;
if (medium&&nComp>0) {
if (nComp>1) {
Double_t wSum=0.;
for(Int_t k=0;k<nComp;k++) wSum+=pmat.cw[k];
if (wSum>1.01) wFac=-1;
}
medium->setNComponents(nComp*wFac);
for(Int_t k=0;k<nComp;k++) {
if (pmat.cz[k]==0) medium->setComponent(k,1.e-16,1.e-16,1.);
else medium->setComponent(k,(Double_t)pmat.ca[k],pmat.cz[k],pmat.cw[k]);
}
if (nComp==1) rc=medium->calcRadiationLength();
} else {
rc=kFALSE;
}
}
{
struct sqlexd sqlstm;
sqlorat((void **)0, &sqlctx, &oraca);
sqlstm.sqlvsn = 12;
sqlstm.arrsiz = 8;
sqlstm.sqladtp = &sqladt;
sqlstm.sqltdsp = &sqltds;
sqlstm.iters = (unsigned int )1;
sqlstm.offset = (unsigned int )98;
sqlstm.cud = sqlcud0;
sqlstm.sqlest = (unsigned char *)&sqlca;
sqlstm.sqlety = (unsigned short)256;
sqlstm.occurs = (unsigned int )0;
sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
if (sqlca.sqlcode < 0) goto errorfound;
}
return rc;
errorfound:
pConn->showSqlError("readMaterialComposition");
return kFALSE;
}
Bool_t HGeomOraIo::readOpticalProperties(HGeomMedia* media,TObjArray* pOptical,
Int_t nOptical) {
if (nOptical==0) return kTRUE;
int id;
struct {
double cp[NMAX_GEOSMALL];
double ca[NMAX_GEOSMALL];
double ce[NMAX_GEOSMALL];
double cr[NMAX_GEOSMALL];
} popt;
Bool_t rc=kTRUE;
for(Int_t i=0;i<nOptical&&rc;i++) {
HOraObj* p=(HOraObj*)pOptical->At(i);
HGeomMedium* medium=(HGeomMedium*)p->pObj;
id=p->oraId;
{
struct sqlexd sqlstm;
sqlorat((void **)0, &sqlctx, &oraca);
sqlstm.sqlvsn = 12;
sqlstm.arrsiz = 8;
sqlstm.sqladtp = &sqladt;
sqlstm.sqltdsp = &sqltds;
sqlstm.stmt = sq0003;
sqlstm.iters = (unsigned int )1;
sqlstm.offset = (unsigned int )113;
sqlstm.selerr = (unsigned short)1;
sqlstm.cud = sqlcud0;
sqlstm.sqlest = (unsigned char *)&sqlca;
sqlstm.sqlety = (unsigned short)256;
sqlstm.occurs = (unsigned int )0;
sqlstm.sqcmod = (unsigned int )0;
sqlstm.sqhstv[0] = ( void *)&id;
sqlstm.sqhstl[0] = (unsigned int )sizeof(int);
sqlstm.sqhsts[0] = ( int )0;
sqlstm.sqindv[0] = ( void *)0;
sqlstm.sqinds[0] = ( int )0;
sqlstm.sqharm[0] = (unsigned int )0;
sqlstm.sqadto[0] = (unsigned short )0;
sqlstm.sqtdso[0] = (unsigned short )0;
sqlstm.sqphsv = sqlstm.sqhstv;
sqlstm.sqphsl = sqlstm.sqhstl;
sqlstm.sqphss = sqlstm.sqhsts;
sqlstm.sqpind = sqlstm.sqindv;
sqlstm.sqpins = sqlstm.sqinds;
sqlstm.sqparm = sqlstm.sqharm;
sqlstm.sqparc = sqlstm.sqharc;
sqlstm.sqpadto = sqlstm.sqadto;
sqlstm.sqptdso = sqlstm.sqtdso;
sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
if (sqlca.sqlcode < 0) goto errorfound;
}
{
struct sqlexd sqlstm;
sqlorat((void **)0, &sqlctx, &oraca);
sqlstm.sqlvsn = 12;
sqlstm.arrsiz = 8;
sqlstm.sqladtp = &sqladt;
sqlstm.sqltdsp = &sqltds;
sqlstm.iters = (unsigned int )100;
sqlstm.offset = (unsigned int )132;
sqlstm.selerr = (unsigned short)1;
sqlstm.cud = sqlcud0;
sqlstm.sqlest = (unsigned char *)&sqlca;
sqlstm.sqlety = (unsigned short)256;
sqlstm.occurs = (unsigned int )0;
sqlstm.sqfoff = ( int )0;
sqlstm.sqfmod = (unsigned int )2;
sqlstm.sqhstv[0] = ( void *)popt.cp;
sqlstm.sqhstl[0] = (unsigned int )sizeof(double);
sqlstm.sqhsts[0] = ( int )sizeof(double);
sqlstm.sqindv[0] = ( void *)0;
sqlstm.sqinds[0] = ( int )0;
sqlstm.sqharm[0] = (unsigned int )0;
sqlstm.sqharc[0] = (unsigned int *)0;
sqlstm.sqadto[0] = (unsigned short )0;
sqlstm.sqtdso[0] = (unsigned short )0;
sqlstm.sqhstv[1] = ( void *)popt.ca;
sqlstm.sqhstl[1] = (unsigned int )sizeof(double);
sqlstm.sqhsts[1] = ( int )sizeof(double);
sqlstm.sqindv[1] = ( void *)0;
sqlstm.sqinds[1] = ( int )0;
sqlstm.sqharm[1] = (unsigned int )0;
sqlstm.sqharc[1] = (unsigned int *)0;
sqlstm.sqadto[1] = (unsigned short )0;
sqlstm.sqtdso[1] = (unsigned short )0;
sqlstm.sqhstv[2] = ( void *)popt.ce;
sqlstm.sqhstl[2] = (unsigned int )sizeof(double);
sqlstm.sqhsts[2] = ( int )sizeof(double);
sqlstm.sqindv[2] = ( void *)0;
sqlstm.sqinds[2] = ( int )0;
sqlstm.sqharm[2] = (unsigned int )0;
sqlstm.sqharc[2] = (unsigned int *)0;
sqlstm.sqadto[2] = (unsigned short )0;
sqlstm.sqtdso[2] = (unsigned short )0;
sqlstm.sqhstv[3] = ( void *)popt.cr;
sqlstm.sqhstl[3] = (unsigned int )sizeof(double);
sqlstm.sqhsts[3] = ( int )sizeof(double);
sqlstm.sqindv[3] = ( void *)0;
sqlstm.sqinds[3] = ( int )0;
sqlstm.sqharm[3] = (unsigned int )0;
sqlstm.sqharc[3] = (unsigned int *)0;
sqlstm.sqadto[3] = (unsigned short )0;
sqlstm.sqtdso[3] = (unsigned short )0;
sqlstm.sqphsv = sqlstm.sqhstv;
sqlstm.sqphsl = sqlstm.sqhstl;
sqlstm.sqphss = sqlstm.sqhsts;
sqlstm.sqpind = sqlstm.sqindv;
sqlstm.sqpins = sqlstm.sqinds;
sqlstm.sqparm = sqlstm.sqharm;
sqlstm.sqparc = sqlstm.sqharc;
sqlstm.sqpadto = sqlstm.sqadto;
sqlstm.sqptdso = sqlstm.sqtdso;
sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
if (sqlca.sqlcode < 0) goto errorfound;
}
Int_t nComp=sqlca.sqlerrd[2];
if (medium&&nComp>0) {
medium->setNpckov(nComp);
for(Int_t k=0;k<nComp;k++) {
medium->setCerenkovPar(k,popt.cp[k],popt.ca[k],popt.ce[k],popt.cr[k]);
}
} else {
rc=kFALSE;
}
}
{
struct sqlexd sqlstm;
sqlorat((void **)0, &sqlctx, &oraca);
sqlstm.sqlvsn = 12;
sqlstm.arrsiz = 8;
sqlstm.sqladtp = &sqladt;
sqlstm.sqltdsp = &sqltds;
sqlstm.iters = (unsigned int )1;
sqlstm.offset = (unsigned int )163;
sqlstm.cud = sqlcud0;
sqlstm.sqlest = (unsigned char *)&sqlca;
sqlstm.sqlety = (unsigned short)256;
sqlstm.occurs = (unsigned int )0;
sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
if (sqlca.sqlcode < 0) goto errorfound;
}
return rc;
errorfound:
pConn->showSqlError("readOpticalProperties");
return kFALSE;
}
Int_t HGeomOraIo::readGeomSetup() {
Int_t runStart=pConn->getActRunStart();
if (runStart==-1) return 0;
if (detVersions) {
if (runStart>=maxSince&&runStart<=minUntil) return detVersions->GetSize();
else detVersions->Delete();
} else detVersions=new TList;
maxSince=-1;
minUntil=-1;
struct {
struct { unsigned short len; unsigned char arr[14]; } p_name[20];
int p_id[NMAX_GEOTINY];
int p_vers[NMAX_GEOTINY];
double p_since[NMAX_GEOTINY];
double p_until[NMAX_GEOTINY];
} setup;
struct {
short p_name_Ind[NMAX_GEOTINY];
short p_id_Ind[NMAX_GEOTINY];
short p_vers_Ind[NMAX_GEOTINY];
short p_since_Ind[NMAX_GEOTINY];
short p_until_Ind[NMAX_GEOTINY];
} setup_Ind;
{
struct sqlexd sqlstm;
sqlorat((void **)0, &sqlctx, &oraca);
sqlstm.sqlvsn = 12;
sqlstm.arrsiz = 8;
sqlstm.sqladtp = &sqladt;
sqlstm.sqltdsp = &sqltds;
sqlstm.stmt = "select detector_name ,det_part_id ,geom_vers ,hdate.to_ansi\
time(valid_since) ,hdate.to_ansitime(valid_until) into :s1:s2 ,:s3:s4 ,:s5:s6 \
,:s7:s8 ,:s9:s10 from hgeom.geom_setup_at_histdate ";
sqlstm.iters = (unsigned int )20;
sqlstm.offset = (unsigned int )178;
sqlstm.selerr = (unsigned short)1;
sqlstm.cud = sqlcud0;
sqlstm.sqlest = (unsigned char *)&sqlca;
sqlstm.sqlety = (unsigned short)256;
sqlstm.occurs = (unsigned int )0;
sqlstm.sqhstv[0] = ( void *)setup.p_name;
sqlstm.sqhstl[0] = (unsigned int )13;
sqlstm.sqhsts[0] = ( int )16;
sqlstm.sqindv[0] = ( void *)setup_Ind.p_name_Ind;
sqlstm.sqinds[0] = ( int )sizeof(short);
sqlstm.sqharm[0] = (unsigned int )0;
sqlstm.sqharc[0] = (unsigned int *)0;
sqlstm.sqadto[0] = (unsigned short )0;
sqlstm.sqtdso[0] = (unsigned short )0;
sqlstm.sqhstv[1] = ( void *)setup.p_id;
sqlstm.sqhstl[1] = (unsigned int )sizeof(int);
sqlstm.sqhsts[1] = ( int )sizeof(int);
sqlstm.sqindv[1] = ( void *)setup_Ind.p_id_Ind;
sqlstm.sqinds[1] = ( int )sizeof(short);
sqlstm.sqharm[1] = (unsigned int )0;
sqlstm.sqharc[1] = (unsigned int *)0;
sqlstm.sqadto[1] = (unsigned short )0;
sqlstm.sqtdso[1] = (unsigned short )0;
sqlstm.sqhstv[2] = ( void *)setup.p_vers;
sqlstm.sqhstl[2] = (unsigned int )sizeof(int);
sqlstm.sqhsts[2] = ( int )sizeof(int);
sqlstm.sqindv[2] = ( void *)setup_Ind.p_vers_Ind;
sqlstm.sqinds[2] = ( int )sizeof(short);
sqlstm.sqharm[2] = (unsigned int )0;
sqlstm.sqharc[2] = (unsigned int *)0;
sqlstm.sqadto[2] = (unsigned short )0;
sqlstm.sqtdso[2] = (unsigned short )0;
sqlstm.sqhstv[3] = ( void *)setup.p_since;
sqlstm.sqhstl[3] = (unsigned int )sizeof(double);
sqlstm.sqhsts[3] = ( int )sizeof(double);
sqlstm.sqindv[3] = ( void *)setup_Ind.p_since_Ind;
sqlstm.sqinds[3] = ( int )sizeof(short);
sqlstm.sqharm[3] = (unsigned int )0;
sqlstm.sqharc[3] = (unsigned int *)0;
sqlstm.sqadto[3] = (unsigned short )0;
sqlstm.sqtdso[3] = (unsigned short )0;
sqlstm.sqhstv[4] = ( void *)setup.p_until;
sqlstm.sqhstl[4] = (unsigned int )sizeof(double);
sqlstm.sqhsts[4] = ( int )sizeof(double);
sqlstm.sqindv[4] = ( void *)setup_Ind.p_until_Ind;
sqlstm.sqinds[4] = ( int )sizeof(short);
sqlstm.sqharm[4] = (unsigned int )0;
sqlstm.sqharc[4] = (unsigned int *)0;
sqlstm.sqadto[4] = (unsigned short )0;
sqlstm.sqtdso[4] = (unsigned short )0;
sqlstm.sqphsv = sqlstm.sqhstv;
sqlstm.sqphsl = sqlstm.sqhstl;
sqlstm.sqphss = sqlstm.sqhsts;
sqlstm.sqpind = sqlstm.sqindv;
sqlstm.sqpins = sqlstm.sqinds;
sqlstm.sqparm = sqlstm.sqharm;
sqlstm.sqparc = sqlstm.sqharc;
sqlstm.sqpadto = sqlstm.sqadto;
sqlstm.sqptdso = sqlstm.sqtdso;
sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
if (sqlca.sqlcode < 0) goto errorfound;
}
for(Int_t i=0;i<sqlca.sqlerrd[2];i++) {
if (setup_Ind.p_name_Ind[i]!=-1) {
setup.p_name[i].arr[setup.p_name[i].len]='\0';
HOraDetVers* d=new HOraDetVers((Char_t*)(setup.p_name[i].arr));
d->detectorId=setup.p_id[i];
d->geomVersion=setup.p_vers[i];
detVersions->Add(d);
if (setup.p_since[i]>maxSince) maxSince=setup.p_since[i];
if (minUntil==-1||setup.p_until[i]<minUntil) minUntil=setup.p_until[i];
}
}
return sqlca.sqlerrd[2];
errorfound:
pConn->showSqlError("readGeomSetup(Int_t)");
return 0;
}
Bool_t HGeomOraIo::read(HGeomSet* pSet,HGeomMedia* media) {
if (pSet==0||media==0||pConn->getActRunId()==-1) return kFALSE;
Int_t numVers=readGeomSetup();
if (numVers==0) return kFALSE;
TString detName=pSet->GetName();
detName.ToUpper();
Int_t detId=-1, detVers=-1;
Int_t minId=-1, maxId=-1, minLevel=-1, nObj=-1, n=0;
HOraDetVers* v=(HOraDetVers*)(detVersions->FindObject(detName));
if (v) detVers=v->geomVersion;
detId=v->detectorId;
if (detVers<=0||detId<0) return kFALSE;
if (detName.CompareTo("TARGET")==0) return readTarget(pSet,media,detId,detVers);
else if (detName.CompareTo("CAVE")==0) {
minId=0;
maxId=0;
minLevel=1;
} else if (detName.CompareTo("SECT")==0) {
minId=1;
maxId=6;
minLevel=2;
} else {
minId=7;
maxId=99999999;
if (pSet->getMaxSectors()>0) minLevel=3;
else minLevel=2;
}
Int_t maxKeepin=pSet->getMaxKeepinVolumes();
Int_t maxModules=pSet->getMaxModules();
TList* volumes=pSet->getListOfVolumes();
TObjArray* pObj=0;
Bool_t rc=kTRUE;
int p_det_id;
int p_det_vers;
int p_max_id;
struct {
int lev[NMAX_GEOLARGE];
int obj_id[NMAX_GEOLARGE];
int mo_id[NMAX_GEOLARGE];
int entry_id[NMAX_GEOLARGE];
} ptree;
struct {
short lev[NMAX_GEOLARGE];
short obj_id[NMAX_GEOLARGE];
short mo_id[NMAX_GEOLARGE];
short entry_id[NMAX_GEOLARGE];
} ptree_Ind;
p_det_id=detId;
p_det_vers=detVers;
p_max_id=maxId;
{
struct sqlexd sqlstm;
sqlorat((void **)0, &sqlctx, &oraca);
sqlstm.sqlvsn = 12;
sqlstm.arrsiz = 8;
sqlstm.sqladtp = &sqladt;
sqlstm.sqltdsp = &sqltds;
sqlstm.stmt = "select level ,object_id ,mother_id ,id into :s1:s2 ,:s3:s4 \
,:s5:s6 ,:s7:s8 from (select object_id ,mother_id ,id from hgeom.geom_objec\
t_data where (((((det_part_id=0 or det_part_id=4) or det_part_id=:b2) and :b3 \
between geom_vers_min and geom_vers_max) and hades_oper.run_query.get_history_\
date between date_create and invalid_since) and object_id<=:b4)) start with o\
bject_id=0 connect by (prior object_id=mother_id and level<=20) ";
sqlstm.iters = (unsigned int )2500;
sqlstm.offset = (unsigned int )213;
sqlstm.selerr = (unsigned short)1;
sqlstm.cud = sqlcud0;
sqlstm.sqlest = (unsigned char *)&sqlca;
sqlstm.sqlety = (unsigned short)256;
sqlstm.occurs = (unsigned int )0;
sqlstm.sqhstv[0] = ( void *)ptree.lev;
sqlstm.sqhstl[0] = (unsigned int )sizeof(int);
sqlstm.sqhsts[0] = ( int )sizeof(int);
sqlstm.sqindv[0] = ( void *)ptree_Ind.lev;
sqlstm.sqinds[0] = ( int )sizeof(short);
sqlstm.sqharm[0] = (unsigned int )0;
sqlstm.sqharc[0] = (unsigned int *)0;
sqlstm.sqadto[0] = (unsigned short )0;
sqlstm.sqtdso[0] = (unsigned short )0;
sqlstm.sqhstv[1] = ( void *)ptree.obj_id;
sqlstm.sqhstl[1] = (unsigned int )sizeof(int);
sqlstm.sqhsts[1] = ( int )sizeof(int);
sqlstm.sqindv[1] = ( void *)ptree_Ind.obj_id;
sqlstm.sqinds[1] = ( int )sizeof(short);
sqlstm.sqharm[1] = (unsigned int )0;
sqlstm.sqharc[1] = (unsigned int *)0;
sqlstm.sqadto[1] = (unsigned short )0;
sqlstm.sqtdso[1] = (unsigned short )0;
sqlstm.sqhstv[2] = ( void *)ptree.mo_id;
sqlstm.sqhstl[2] = (unsigned int )sizeof(int);
sqlstm.sqhsts[2] = ( int )sizeof(int);
sqlstm.sqindv[2] = ( void *)ptree_Ind.mo_id;
sqlstm.sqinds[2] = ( int )sizeof(short);
sqlstm.sqharm[2] = (unsigned int )0;
sqlstm.sqharc[2] = (unsigned int *)0;
sqlstm.sqadto[2] = (unsigned short )0;
sqlstm.sqtdso[2] = (unsigned short )0;
sqlstm.sqhstv[3] = ( void *)ptree.entry_id;
sqlstm.sqhstl[3] = (unsigned int )sizeof(int);
sqlstm.sqhsts[3] = ( int )sizeof(int);
sqlstm.sqindv[3] = ( void *)ptree_Ind.entry_id;
sqlstm.sqinds[3] = ( int )sizeof(short);
sqlstm.sqharm[3] = (unsigned int )0;
sqlstm.sqharc[3] = (unsigned int *)0;
sqlstm.sqadto[3] = (unsigned short )0;
sqlstm.sqtdso[3] = (unsigned short )0;
sqlstm.sqhstv[4] = ( void *)&p_det_id;
sqlstm.sqhstl[4] = (unsigned int )sizeof(int);
sqlstm.sqhsts[4] = ( int )sizeof(int);
sqlstm.sqindv[4] = ( void *)0;
sqlstm.sqinds[4] = ( int )0;
sqlstm.sqharm[4] = (unsigned int )0;
sqlstm.sqadto[4] = (unsigned short )0;
sqlstm.sqtdso[4] = (unsigned short )0;
sqlstm.sqhstv[5] = ( void *)&p_det_vers;
sqlstm.sqhstl[5] = (unsigned int )sizeof(int);
sqlstm.sqhsts[5] = ( int )sizeof(int);
sqlstm.sqindv[5] = ( void *)0;
sqlstm.sqinds[5] = ( int )0;
sqlstm.sqharm[5] = (unsigned int )0;
sqlstm.sqadto[5] = (unsigned short )0;
sqlstm.sqtdso[5] = (unsigned short )0;
sqlstm.sqhstv[6] = ( void *)&p_max_id;
sqlstm.sqhstl[6] = (unsigned int )sizeof(int);
sqlstm.sqhsts[6] = ( int )sizeof(int);
sqlstm.sqindv[6] = ( void *)0;
sqlstm.sqinds[6] = ( int )0;
sqlstm.sqharm[6] = (unsigned int )0;
sqlstm.sqadto[6] = (unsigned short )0;
sqlstm.sqtdso[6] = (unsigned short )0;
sqlstm.sqphsv = sqlstm.sqhstv;
sqlstm.sqphsl = sqlstm.sqhstl;
sqlstm.sqphss = sqlstm.sqhsts;
sqlstm.sqpind = sqlstm.sqindv;
sqlstm.sqpins = sqlstm.sqinds;
sqlstm.sqparm = sqlstm.sqharm;
sqlstm.sqparc = sqlstm.sqharc;
sqlstm.sqpadto = sqlstm.sqadto;
sqlstm.sqptdso = sqlstm.sqtdso;
sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
if (sqlca.sqlcode < 0) goto errorfound;
}
nObj=sqlca.sqlerrd[2];
pObj=new TObjArray(nObj);
for (Int_t i=0;i<nObj;i++) {
if (ptree.obj_id[i]>=minId) {
Int_t l=ptree.lev[i]-minLevel;
HGeomNode* node=new HGeomNode;
volumes->Add(node);
pObj->AddAt(new HOraObj(node,ptree.entry_id[i]),n);
n++;
if (detName.CompareTo("CAVE")==0) {
node->setVolumeType(kHGeomTopNode);
node->setActive();
} else if (detName.CompareTo("TOF")==0) {
((HGeomTof*)pSet)->setNodeType(node);
} else if (maxKeepin>0) {
switch(l) {
case 0: {
node->setVolumeType(kHGeomKeepin);
break;
}
case 1: {
node->setVolumeType(kHGeomModule);
break;
}
default: {
node->setVolumeType(kHGeomElement);
}
}
} else {
if (maxModules>0) {
switch(l) {
case 0: {
node->setVolumeType(kHGeomModule);
break;
}
default: {
node->setVolumeType(kHGeomElement);
}
}
}
}
}
}
if (n>0) {
rc=readVolumes(pSet,media,pObj,n);
pSet->addRefNodes();
} else {
Error("read(Int_t,HGeomSet*,HGeomMedia*)","Do data found");
rc=kFALSE;
}
if (pObj) {
pObj->Delete();
delete pObj;
pObj=0;
}
return rc;
errorfound:
pConn->showSqlError("read(Int_t,HGeomSet*,HGeomMedia*)");
return kFALSE;
}
Bool_t HGeomOraIo::readTarget(HGeomSet* pSet,HGeomMedia* media,Int_t detId,Int_t detVers) {
Int_t nObj=-1, n=0;
TObjArray* pObj=0;
Bool_t rc=kTRUE;
TList* volumes=pSet->getListOfVolumes();
int p_det_id;
int p_det_vers;
int p_mo_id;
struct {
int lev[NMAX_GEOLARGE];
int obj_id[NMAX_GEOLARGE];
int mo_id[NMAX_GEOLARGE];
int entry_id[NMAX_GEOLARGE];
} ptree;
struct {
short lev[NMAX_GEOLARGE];
short obj_id[NMAX_GEOLARGE];
short mo_id[NMAX_GEOLARGE];
short entry_id[NMAX_GEOLARGE];
} ptree_Ind;
p_det_id=detId;
p_det_vers=detVers;
{
struct sqlexd sqlstm;
sqlorat((void **)0, &sqlctx, &oraca);
sqlstm.sqlvsn = 12;
sqlstm.arrsiz = 8;
sqlstm.sqladtp = &sqladt;
sqlstm.sqltdsp = &sqltds;
sqlstm.stmt = "select id into :b0 from hgeom.geom_object where object_nam\
e='RTAM'";
sqlstm.iters = (unsigned int )1;
sqlstm.offset = (unsigned int )256;
sqlstm.selerr = (unsigned short)1;
sqlstm.cud = sqlcud0;
sqlstm.sqlest = (unsigned char *)&sqlca;
sqlstm.sqlety = (unsigned short)256;
sqlstm.occurs = (unsigned int )0;
sqlstm.sqhstv[0] = ( void *)&p_mo_id;
sqlstm.sqhstl[0] = (unsigned int )sizeof(int);
sqlstm.sqhsts[0] = ( int )0;
sqlstm.sqindv[0] = ( void *)0;
sqlstm.sqinds[0] = ( int )0;
sqlstm.sqharm[0] = (unsigned int )0;
sqlstm.sqadto[0] = (unsigned short )0;
sqlstm.sqtdso[0] = (unsigned short )0;
sqlstm.sqphsv = sqlstm.sqhstv;
sqlstm.sqphsl = sqlstm.sqhstl;
sqlstm.sqphss = sqlstm.sqhsts;
sqlstm.sqpind = sqlstm.sqindv;
sqlstm.sqpins = sqlstm.sqinds;
sqlstm.sqparm = sqlstm.sqharm;
sqlstm.sqparc = sqlstm.sqharc;
sqlstm.sqpadto = sqlstm.sqadto;
sqlstm.sqptdso = sqlstm.sqtdso;
sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
if (sqlca.sqlcode < 0) goto errorfound;
}
{
struct sqlexd sqlstm;
sqlorat((void **)0, &sqlctx, &oraca);
sqlstm.sqlvsn = 12;
sqlstm.arrsiz = 8;
sqlstm.sqladtp = &sqladt;
sqlstm.sqltdsp = &sqltds;
sqlstm.stmt = "select level ,object_id ,mother_id ,id into :s1:s2 ,:s3:s4 \
,:s5:s6 ,:s7:s8 from (select object_id ,mother_id ,id from hgeom.geom_objec\
t_data where (((object_id=:b2 and invalid_since=hdate.high_date) or (det_part_\
id=:b3 and hades_oper.run_query.get_history_date between date_create and inval\
id_since)) and :b4 between geom_vers_min and geom_vers_max)) start with objec\
t_id=:b2 connect by (prior object_id=mother_id and level<=20) ";
sqlstm.iters = (unsigned int )2500;
sqlstm.offset = (unsigned int )275;
sqlstm.selerr = (unsigned short)1;
sqlstm.cud = sqlcud0;
sqlstm.sqlest = (unsigned char *)&sqlca;
sqlstm.sqlety = (unsigned short)256;
sqlstm.occurs = (unsigned int )0;
sqlstm.sqhstv[0] = ( void *)ptree.lev;
sqlstm.sqhstl[0] = (unsigned int )sizeof(int);
sqlstm.sqhsts[0] = ( int )sizeof(int);
sqlstm.sqindv[0] = ( void *)ptree_Ind.lev;
sqlstm.sqinds[0] = ( int )sizeof(short);
sqlstm.sqharm[0] = (unsigned int )0;
sqlstm.sqharc[0] = (unsigned int *)0;
sqlstm.sqadto[0] = (unsigned short )0;
sqlstm.sqtdso[0] = (unsigned short )0;
sqlstm.sqhstv[1] = ( void *)ptree.obj_id;
sqlstm.sqhstl[1] = (unsigned int )sizeof(int);
sqlstm.sqhsts[1] = ( int )sizeof(int);
sqlstm.sqindv[1] = ( void *)ptree_Ind.obj_id;
sqlstm.sqinds[1] = ( int )sizeof(short);
sqlstm.sqharm[1] = (unsigned int )0;
sqlstm.sqharc[1] = (unsigned int *)0;
sqlstm.sqadto[1] = (unsigned short )0;
sqlstm.sqtdso[1] = (unsigned short )0;
sqlstm.sqhstv[2] = ( void *)ptree.mo_id;
sqlstm.sqhstl[2] = (unsigned int )sizeof(int);
sqlstm.sqhsts[2] = ( int )sizeof(int);
sqlstm.sqindv[2] = ( void *)ptree_Ind.mo_id;
sqlstm.sqinds[2] = ( int )sizeof(short);
sqlstm.sqharm[2] = (unsigned int )0;
sqlstm.sqharc[2] = (unsigned int *)0;
sqlstm.sqadto[2] = (unsigned short )0;
sqlstm.sqtdso[2] = (unsigned short )0;
sqlstm.sqhstv[3] = ( void *)ptree.entry_id;
sqlstm.sqhstl[3] = (unsigned int )sizeof(int);
sqlstm.sqhsts[3] = ( int )sizeof(int);
sqlstm.sqindv[3] = ( void *)ptree_Ind.entry_id;
sqlstm.sqinds[3] = ( int )sizeof(short);
sqlstm.sqharm[3] = (unsigned int )0;
sqlstm.sqharc[3] = (unsigned int *)0;
sqlstm.sqadto[3] = (unsigned short )0;
sqlstm.sqtdso[3] = (unsigned short )0;
sqlstm.sqhstv[4] = ( void *)&p_mo_id;
sqlstm.sqhstl[4] = (unsigned int )sizeof(int);
sqlstm.sqhsts[4] = ( int )sizeof(int);
sqlstm.sqindv[4] = ( void *)0;
sqlstm.sqinds[4] = ( int )0;
sqlstm.sqharm[4] = (unsigned int )0;
sqlstm.sqadto[4] = (unsigned short )0;
sqlstm.sqtdso[4] = (unsigned short )0;
sqlstm.sqhstv[5] = ( void *)&p_det_id;
sqlstm.sqhstl[5] = (unsigned int )sizeof(int);
sqlstm.sqhsts[5] = ( int )sizeof(int);
sqlstm.sqindv[5] = ( void *)0;
sqlstm.sqinds[5] = ( int )0;
sqlstm.sqharm[5] = (unsigned int )0;
sqlstm.sqadto[5] = (unsigned short )0;
sqlstm.sqtdso[5] = (unsigned short )0;
sqlstm.sqhstv[6] = ( void *)&p_det_vers;
sqlstm.sqhstl[6] = (unsigned int )sizeof(int);
sqlstm.sqhsts[6] = ( int )sizeof(int);
sqlstm.sqindv[6] = ( void *)0;
sqlstm.sqinds[6] = ( int )0;
sqlstm.sqharm[6] = (unsigned int )0;
sqlstm.sqadto[6] = (unsigned short )0;
sqlstm.sqtdso[6] = (unsigned short )0;
sqlstm.sqhstv[7] = ( void *)&p_mo_id;
sqlstm.sqhstl[7] = (unsigned int )sizeof(int);
sqlstm.sqhsts[7] = ( int )sizeof(int);
sqlstm.sqindv[7] = ( void *)0;
sqlstm.sqinds[7] = ( int )0;
sqlstm.sqharm[7] = (unsigned int )0;
sqlstm.sqadto[7] = (unsigned short )0;
sqlstm.sqtdso[7] = (unsigned short )0;
sqlstm.sqphsv = sqlstm.sqhstv;
sqlstm.sqphsl = sqlstm.sqhstl;
sqlstm.sqphss = sqlstm.sqhsts;
sqlstm.sqpind = sqlstm.sqindv;
sqlstm.sqpins = sqlstm.sqinds;
sqlstm.sqparm = sqlstm.sqharm;
sqlstm.sqparc = sqlstm.sqharc;
sqlstm.sqpadto = sqlstm.sqadto;
sqlstm.sqptdso = sqlstm.sqtdso;
sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
if (sqlca.sqlcode < 0) goto errorfound;
}
nObj=sqlca.sqlerrd[2];
pObj=new TObjArray(nObj);
for (Int_t i=0;i<nObj;i++) {
if (ptree.lev[i]>1) {
HGeomNode* node=new HGeomNode;
node->setVolumeType(kHGeomElement);
node->setActive(kTRUE);
volumes->Add(node);
pObj->AddAt(new HOraObj(node,ptree.entry_id[i]),n);
n++;
}
}
if (n>0) {
rc=readVolumes(pSet,media,pObj,n);
} else {
Error("readTarget","No data found");
rc=kFALSE;
}
if (pObj) {
pObj->Delete();
delete pObj;
pObj=0;
}
return rc;
errorfound:
pConn->showSqlError("readTarget");
return kFALSE;
}
Bool_t HGeomOraIo::readVolumes(HGeomSet* pSet,HGeomMedia* media,
TObjArray* pTree,Int_t nVol) {
if (pSet==0||media==0||pTree==0) return kFALSE;
int id;
struct {
struct { unsigned short len; unsigned char arr[11]; } p_name;
struct { unsigned short len; unsigned char arr[11]; } p_mother;
struct { unsigned short len; unsigned char arr[81]; } p_medium;
struct { unsigned short len; unsigned char arr[5]; } p_shape;
int p_vol_id;
int p_trans_id;
} vol;
struct {
short p_name_Ind;
short p_mother_Ind;
short p_medium_Ind;
short p_shape_Ind;
short p_vol_id_Ind;
short p_trans_id_Ind;
} vol_Ind;
Bool_t rc=kTRUE;
TList pTrans;
TObjArray* pPoint=new TObjArray(nVol);
Int_t nTrans=0, nPoint=0;
TList refVolumes;
TString detName=pSet->GetName();
detName.ToUpper();
for(Int_t i=0;i<nVol&&rc;i++) {
HOraObj* p=(HOraObj*)pTree->At(i);
HGeomNode* node=(HGeomNode*)p->pObj;
id=p->oraId;
{
struct sqlexd sqlstm;
sqlorat((void **)0, &sqlctx, &oraca);
sqlstm.sqlvsn = 12;
sqlstm.arrsiz = 8;
sqlstm.sqladtp = &sqladt;
sqlstm.sqltdsp = &sqltds;
sqlstm.stmt = sq0008;
sqlstm.iters = (unsigned int )1;
sqlstm.offset = (unsigned int )322;
sqlstm.selerr = (unsigned short)1;
sqlstm.cud = sqlcud0;
sqlstm.sqlest = (unsigned char *)&sqlca;
sqlstm.sqlety = (unsigned short)256;
sqlstm.occurs = (unsigned int )0;
sqlstm.sqcmod = (unsigned int )0;
sqlstm.sqhstv[0] = ( void *)&id;
sqlstm.sqhstl[0] = (unsigned int )sizeof(int);
sqlstm.sqhsts[0] = ( int )0;
sqlstm.sqindv[0] = ( void *)0;
sqlstm.sqinds[0] = ( int )0;
sqlstm.sqharm[0] = (unsigned int )0;
sqlstm.sqadto[0] = (unsigned short )0;
sqlstm.sqtdso[0] = (unsigned short )0;
sqlstm.sqphsv = sqlstm.sqhstv;
sqlstm.sqphsl = sqlstm.sqhstl;
sqlstm.sqphss = sqlstm.sqhsts;
sqlstm.sqpind = sqlstm.sqindv;
sqlstm.sqpins = sqlstm.sqinds;
sqlstm.sqparm = sqlstm.sqharm;
sqlstm.sqparc = sqlstm.sqharc;
sqlstm.sqpadto = sqlstm.sqadto;
sqlstm.sqptdso = sqlstm.sqtdso;
sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
if (sqlca.sqlcode < 0) goto errorfound;
}
{
struct sqlexd sqlstm;
sqlorat((void **)0, &sqlctx, &oraca);
sqlstm.sqlvsn = 12;
sqlstm.arrsiz = 8;
sqlstm.sqladtp = &sqladt;
sqlstm.sqltdsp = &sqltds;
sqlstm.iters = (unsigned int )1;
sqlstm.offset = (unsigned int )341;
sqlstm.selerr = (unsigned short)1;
sqlstm.cud = sqlcud0;
sqlstm.sqlest = (unsigned char *)&sqlca;
sqlstm.sqlety = (unsigned short)256;
sqlstm.occurs = (unsigned int )0;
sqlstm.sqfoff = ( int )0;
sqlstm.sqfmod = (unsigned int )2;
sqlstm.sqhstv[0] = ( void *)&vol.p_name;
sqlstm.sqhstl[0] = (unsigned int )13;
sqlstm.sqhsts[0] = ( int )0;
sqlstm.sqindv[0] = ( void *)&vol_Ind.p_name_Ind;
sqlstm.sqinds[0] = ( int )0;
sqlstm.sqharm[0] = (unsigned int )0;
sqlstm.sqadto[0] = (unsigned short )0;
sqlstm.sqtdso[0] = (unsigned short )0;
sqlstm.sqhstv[1] = ( void *)&vol.p_mother;
sqlstm.sqhstl[1] = (unsigned int )13;
sqlstm.sqhsts[1] = ( int )0;
sqlstm.sqindv[1] = ( void *)&vol_Ind.p_mother_Ind;
sqlstm.sqinds[1] = ( int )0;
sqlstm.sqharm[1] = (unsigned int )0;
sqlstm.sqadto[1] = (unsigned short )0;
sqlstm.sqtdso[1] = (unsigned short )0;
sqlstm.sqhstv[2] = ( void *)&vol.p_medium;
sqlstm.sqhstl[2] = (unsigned int )83;
sqlstm.sqhsts[2] = ( int )0;
sqlstm.sqindv[2] = ( void *)&vol_Ind.p_medium_Ind;
sqlstm.sqinds[2] = ( int )0;
sqlstm.sqharm[2] = (unsigned int )0;
sqlstm.sqadto[2] = (unsigned short )0;
sqlstm.sqtdso[2] = (unsigned short )0;
sqlstm.sqhstv[3] = ( void *)&vol.p_shape;
sqlstm.sqhstl[3] = (unsigned int )7;
sqlstm.sqhsts[3] = ( int )0;
sqlstm.sqindv[3] = ( void *)&vol_Ind.p_shape_Ind;
sqlstm.sqinds[3] = ( int )0;
sqlstm.sqharm[3] = (unsigned int )0;
sqlstm.sqadto[3] = (unsigned short )0;
sqlstm.sqtdso[3] = (unsigned short )0;
sqlstm.sqhstv[4] = ( void *)&vol.p_vol_id;
sqlstm.sqhstl[4] = (unsigned int )sizeof(int);
sqlstm.sqhsts[4] = ( int )0;
sqlstm.sqindv[4] = ( void *)&vol_Ind.p_vol_id_Ind;
sqlstm.sqinds[4] = ( int )0;
sqlstm.sqharm[4] = (unsigned int )0;
sqlstm.sqadto[4] = (unsigned short )0;
sqlstm.sqtdso[4] = (unsigned short )0;
sqlstm.sqhstv[5] = ( void *)&vol.p_trans_id;
sqlstm.sqhstl[5] = (unsigned int )sizeof(int);
sqlstm.sqhsts[5] = ( int )0;
sqlstm.sqindv[5] = ( void *)&vol_Ind.p_trans_id_Ind;
sqlstm.sqinds[5] = ( int )0;
sqlstm.sqharm[5] = (unsigned int )0;
sqlstm.sqadto[5] = (unsigned short )0;
sqlstm.sqtdso[5] = (unsigned short )0;
sqlstm.sqphsv = sqlstm.sqhstv;
sqlstm.sqphsl = sqlstm.sqhstl;
sqlstm.sqphss = sqlstm.sqhsts;
sqlstm.sqpind = sqlstm.sqindv;
sqlstm.sqpins = sqlstm.sqinds;
sqlstm.sqparm = sqlstm.sqharm;
sqlstm.sqparc = sqlstm.sqharc;
sqlstm.sqpadto = sqlstm.sqadto;
sqlstm.sqptdso = sqlstm.sqtdso;
sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
if (sqlca.sqlcode < 0) goto errorfound;
}
if (vol_Ind.p_name_Ind!=-1) {
vol.p_name.arr[vol.p_name.len]='\0';
TString nName=(Char_t*)(vol.p_name.arr);
node->SetName(nName);
if (nName.Length()>4) {
TString refName=nName(0,4);
HGeomOraCopyNode* refNode=(HGeomOraCopyNode*)refVolumes.FindObject(refName);
if (!refNode) {
refVolumes.Add(new HGeomOraCopyNode(refName.Data(),node));
} else {
HGeomNode* cn=refNode->pNode;
node->setCopyNode(cn);
}
}
if (detName.CompareTo("TOF")==0) ((HGeomTof*)pSet)->setNodeType(node);
if (node->isModule()) {
Int_t a=pSet->getModule(pSet->getSecNumInMod(nName),pSet->getModNumInMod(nName));
if (a>0) node->setActive(kTRUE);
else node->setActive(kFALSE);
}
if (vol_Ind.p_mother_Ind!=-1) {
vol.p_mother.arr[vol.p_mother.len]='\0';
Char_t* pM=(Char_t*)(vol.p_mother.arr);
HGeomNode* mother=0;
if (node->isKeepin()) {
mother=pSet->getMasterNode(pM);
} else if (node->isModule()) {
mother=pSet->getMasterNode(pM);
if (!mother) mother=pSet->getVolume(pM);
if (node->isActive()&&mother) mother->setActive();
} else {
mother=pSet->getVolume(pM);
if (!mother) mother=pSet->getMasterNode(pM);
if (mother) {
if (mother->isActive()) {
node->setActive();
} else if (mother->isModule()) {
Int_t m=pSet->getModNumInMod(mother->GetName());
Bool_t containsActiveModule=kFALSE;
for (Int_t s=0;s<pSet->getMaxSectors();s++) {
if (pSet->getModule(s,m)) containsActiveModule=kTRUE;
}
node ->setActive(containsActiveModule);
}
}
}
node->setMother(mother);
if (!mother) Warning("readVolumeParams","Mother volume %s not found!",pM);
}
if (vol_Ind.p_medium_Ind!=-1) {
vol.p_medium.arr[vol.p_medium.len]='\0';
HGeomMedium* medium=media->getMedium((Char_t*)(vol.p_medium.arr));
if (medium) node->setMedium(medium);
else {
Error("readVolumes","Medium %s not found in list of media",
(Char_t*)(vol.p_medium.arr));
rc=kFALSE;
}
}
if (vol_Ind.p_shape_Ind!=-1) {
vol.p_shape.arr[vol.p_shape.len]='\0';
HGeomBasicShape* sh=pSet->getShapes()->selectShape((Char_t*)(vol.p_shape.arr));
if (sh) node->setShape(sh);
else {
Error("readVolumes","Shape %s not found",
(Char_t*)(vol.p_shape.arr));
rc=kFALSE;
}
}
if (vol_Ind.p_trans_id_Ind!=-1) {
pTrans.Add(new HOraTransObj(node,vol.p_trans_id));
nTrans++;
}
if (vol_Ind.p_vol_id_Ind!=-1) {
pPoint->AddAt(new HOraObj(node,vol.p_vol_id),nPoint);
nPoint++;
}
} else {
Error("readVolumes","Object %s not found",
(Char_t*)(vol.p_name.arr));
rc=kFALSE;
}
}
if (nPoint>0) {
rc=readPoints(pPoint,nPoint);
if (rc&&nTrans>0)rc=readTransform(&pTrans);
} else {
rc=kFALSE;
Error("readVolumes","No volumes found in database");
}
pTrans.Delete();
if (pPoint) {
pPoint->Delete();
delete pPoint;
pPoint=0;
}
return rc;
errorfound:
pConn->showSqlError("readVolumes");
return kFALSE;
}
Bool_t HGeomOraIo::readPoints(TObjArray* pVol,Int_t nVol) {
int id;
struct {
int c[NMAX_GEOSMALL];
double x[NMAX_GEOSMALL];
double y[NMAX_GEOSMALL];
double z[NMAX_GEOSMALL];
} p3d;
Bool_t allFound=kTRUE;
for(Int_t i=0;i<nVol&&allFound;i++) {
HOraObj* p=(HOraObj*)pVol->At(i);
HGeomVolume* node=(HGeomVolume*)p->pObj;
id=p->oraId;
{
struct sqlexd sqlstm;
sqlorat((void **)0, &sqlctx, &oraca);
sqlstm.sqlvsn = 12;
sqlstm.arrsiz = 8;
sqlstm.sqladtp = &sqladt;
sqlstm.sqltdsp = &sqltds;
sqlstm.stmt = sq0009;
sqlstm.iters = (unsigned int )1;
sqlstm.offset = (unsigned int )380;
sqlstm.selerr = (unsigned short)1;
sqlstm.cud = sqlcud0;
sqlstm.sqlest = (unsigned char *)&sqlca;
sqlstm.sqlety = (unsigned short)256;
sqlstm.occurs = (unsigned int )0;
sqlstm.sqcmod = (unsigned int )0;
sqlstm.sqhstv[0] = ( void *)&id;
sqlstm.sqhstl[0] = (unsigned int )sizeof(int);
sqlstm.sqhsts[0] = ( int )0;
sqlstm.sqindv[0] = ( void *)0;
sqlstm.sqinds[0] = ( int )0;
sqlstm.sqharm[0] = (unsigned int )0;
sqlstm.sqadto[0] = (unsigned short )0;
sqlstm.sqtdso[0] = (unsigned short )0;
sqlstm.sqphsv = sqlstm.sqhstv;
sqlstm.sqphsl = sqlstm.sqhstl;
sqlstm.sqphss = sqlstm.sqhsts;
sqlstm.sqpind = sqlstm.sqindv;
sqlstm.sqpins = sqlstm.sqinds;
sqlstm.sqparm = sqlstm.sqharm;
sqlstm.sqparc = sqlstm.sqharc;
sqlstm.sqpadto = sqlstm.sqadto;
sqlstm.sqptdso = sqlstm.sqtdso;
sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
if (sqlca.sqlcode < 0) goto errorfound;
}
{
struct sqlexd sqlstm;
sqlorat((void **)0, &sqlctx, &oraca);
sqlstm.sqlvsn = 12;
sqlstm.arrsiz = 8;
sqlstm.sqladtp = &sqladt;
sqlstm.sqltdsp = &sqltds;
sqlstm.iters = (unsigned int )100;
sqlstm.offset = (unsigned int )399;
sqlstm.selerr = (unsigned short)1;
sqlstm.cud = sqlcud0;
sqlstm.sqlest = (unsigned char *)&sqlca;
sqlstm.sqlety = (unsigned short)256;
sqlstm.occurs = (unsigned int )0;
sqlstm.sqfoff = ( int )0;
sqlstm.sqfmod = (unsigned int )2;
sqlstm.sqhstv[0] = ( void *)p3d.c;
sqlstm.sqhstl[0] = (unsigned int )sizeof(int);
sqlstm.sqhsts[0] = ( int )sizeof(int);
sqlstm.sqindv[0] = ( void *)0;
sqlstm.sqinds[0] = ( int )0;
sqlstm.sqharm[0] = (unsigned int )0;
sqlstm.sqharc[0] = (unsigned int *)0;
sqlstm.sqadto[0] = (unsigned short )0;
sqlstm.sqtdso[0] = (unsigned short )0;
sqlstm.sqhstv[1] = ( void *)p3d.x;
sqlstm.sqhstl[1] = (unsigned int )sizeof(double);
sqlstm.sqhsts[1] = ( int )sizeof(double);
sqlstm.sqindv[1] = ( void *)0;
sqlstm.sqinds[1] = ( int )0;
sqlstm.sqharm[1] = (unsigned int )0;
sqlstm.sqharc[1] = (unsigned int *)0;
sqlstm.sqadto[1] = (unsigned short )0;
sqlstm.sqtdso[1] = (unsigned short )0;
sqlstm.sqhstv[2] = ( void *)p3d.y;
sqlstm.sqhstl[2] = (unsigned int )sizeof(double);
sqlstm.sqhsts[2] = ( int )sizeof(double);
sqlstm.sqindv[2] = ( void *)0;
sqlstm.sqinds[2] = ( int )0;
sqlstm.sqharm[2] = (unsigned int )0;
sqlstm.sqharc[2] = (unsigned int *)0;
sqlstm.sqadto[2] = (unsigned short )0;
sqlstm.sqtdso[2] = (unsigned short )0;
sqlstm.sqhstv[3] = ( void *)p3d.z;
sqlstm.sqhstl[3] = (unsigned int )sizeof(double);
sqlstm.sqhsts[3] = ( int )sizeof(double);
sqlstm.sqindv[3] = ( void *)0;
sqlstm.sqinds[3] = ( int )0;
sqlstm.sqharm[3] = (unsigned int )0;
sqlstm.sqharc[3] = (unsigned int *)0;
sqlstm.sqadto[3] = (unsigned short )0;
sqlstm.sqtdso[3] = (unsigned short )0;
sqlstm.sqphsv = sqlstm.sqhstv;
sqlstm.sqphsl = sqlstm.sqhstl;
sqlstm.sqphss = sqlstm.sqhsts;
sqlstm.sqpind = sqlstm.sqindv;
sqlstm.sqpins = sqlstm.sqinds;
sqlstm.sqparm = sqlstm.sqharm;
sqlstm.sqparc = sqlstm.sqharc;
sqlstm.sqpadto = sqlstm.sqadto;
sqlstm.sqptdso = sqlstm.sqtdso;
sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
if (sqlca.sqlcode < 0) goto errorfound;
}
Int_t nPoints=sqlca.sqlerrd[2];
if (nPoints<=0) allFound=kFALSE;
else {
node->createPoints(nPoints);
for(Int_t i=0;i<nPoints;i++) {
node->setPoint((p3d.c[i]-1),p3d.x[i],p3d.y[i],p3d.z[i]);
}
}
}
{
struct sqlexd sqlstm;
sqlorat((void **)0, &sqlctx, &oraca);
sqlstm.sqlvsn = 12;
sqlstm.arrsiz = 8;
sqlstm.sqladtp = &sqladt;
sqlstm.sqltdsp = &sqltds;
sqlstm.iters = (unsigned int )1;
sqlstm.offset = (unsigned int )430;
sqlstm.cud = sqlcud0;
sqlstm.sqlest = (unsigned char *)&sqlca;
sqlstm.sqlety = (unsigned short)256;
sqlstm.occurs = (unsigned int )0;
sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
if (sqlca.sqlcode < 0) goto errorfound;
}
return allFound;
errorfound:
{
struct sqlexd sqlstm;
sqlorat((void **)0, &sqlctx, &oraca);
sqlstm.sqlvsn = 12;
sqlstm.arrsiz = 8;
sqlstm.sqladtp = &sqladt;
sqlstm.sqltdsp = &sqltds;
sqlstm.iters = (unsigned int )1;
sqlstm.offset = (unsigned int )445;
sqlstm.cud = sqlcud0;
sqlstm.sqlest = (unsigned char *)&sqlca;
sqlstm.sqlety = (unsigned short)256;
sqlstm.occurs = (unsigned int )0;
sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
if (sqlca.sqlcode < 0) goto errorfound;
}
pConn->showSqlError("readPoints");
return kFALSE;
}
Bool_t HGeomOraIo::readTransform(TList* pVol) {
int id;
struct {
struct { unsigned short len; unsigned char arr[11]; } tref;
double tx;
double ty;
double tz;
double r11;
double r12;
double r13;
double r21;
double r22;
double r23;
double r31;
double r32;
double r33;
} tr;
struct {
short tref_Ind;
short tx_Ind;
short ty_Ind;
short tz_Ind;
short r11_Ind;
short r12_Ind;
short r13_Ind;
short r21_Ind;
short r22_Ind;
short r23_Ind;
short r31_Ind;
short r32_Ind;
short r33_Ind;
} tr_Ind;
Bool_t allFound=kTRUE;
Double_t t[3];
Double_t r[9];
TIter next(pVol);
HOraTransObj* p;
while ((p=(HOraTransObj*)next())&&allFound) {
id=p->oraId;
{
struct sqlexd sqlstm;
sqlorat((void **)0, &sqlctx, &oraca);
sqlstm.sqlvsn = 12;
sqlstm.arrsiz = 8;
sqlstm.sqladtp = &sqladt;
sqlstm.sqltdsp = &sqltds;
sqlstm.stmt = sq0010;
sqlstm.iters = (unsigned int )1;
sqlstm.offset = (unsigned int )460;
sqlstm.selerr = (unsigned short)1;
sqlstm.cud = sqlcud0;
sqlstm.sqlest = (unsigned char *)&sqlca;
sqlstm.sqlety = (unsigned short)256;
sqlstm.occurs = (unsigned int )0;
sqlstm.sqcmod = (unsigned int )0;
sqlstm.sqhstv[0] = ( void *)&id;
sqlstm.sqhstl[0] = (unsigned int )sizeof(int);
sqlstm.sqhsts[0] = ( int )0;
sqlstm.sqindv[0] = ( void *)0;
sqlstm.sqinds[0] = ( int )0;
sqlstm.sqharm[0] = (unsigned int )0;
sqlstm.sqadto[0] = (unsigned short )0;
sqlstm.sqtdso[0] = (unsigned short )0;
sqlstm.sqphsv = sqlstm.sqhstv;
sqlstm.sqphsl = sqlstm.sqhstl;
sqlstm.sqphss = sqlstm.sqhsts;
sqlstm.sqpind = sqlstm.sqindv;
sqlstm.sqpins = sqlstm.sqinds;
sqlstm.sqparm = sqlstm.sqharm;
sqlstm.sqparc = sqlstm.sqharc;
sqlstm.sqpadto = sqlstm.sqadto;
sqlstm.sqptdso = sqlstm.sqtdso;
sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
if (sqlca.sqlcode < 0) goto errorfound;
}
{
struct sqlexd sqlstm;
sqlorat((void **)0, &sqlctx, &oraca);
sqlstm.sqlvsn = 12;
sqlstm.arrsiz = 13;
sqlstm.sqladtp = &sqladt;
sqlstm.sqltdsp = &sqltds;
sqlstm.iters = (unsigned int )1;
sqlstm.offset = (unsigned int )479;
sqlstm.selerr = (unsigned short)1;
sqlstm.cud = sqlcud0;
sqlstm.sqlest = (unsigned char *)&sqlca;
sqlstm.sqlety = (unsigned short)256;
sqlstm.occurs = (unsigned int )0;
sqlstm.sqfoff = ( int )0;
sqlstm.sqfmod = (unsigned int )2;
sqlstm.sqhstv[0] = ( void *)&tr.tref;
sqlstm.sqhstl[0] = (unsigned int )13;
sqlstm.sqhsts[0] = ( int )0;
sqlstm.sqindv[0] = ( void *)&tr_Ind.tref_Ind;
sqlstm.sqinds[0] = ( int )0;
sqlstm.sqharm[0] = (unsigned int )0;
sqlstm.sqadto[0] = (unsigned short )0;
sqlstm.sqtdso[0] = (unsigned short )0;
sqlstm.sqhstv[1] = ( void *)&tr.tx;
sqlstm.sqhstl[1] = (unsigned int )sizeof(double);
sqlstm.sqhsts[1] = ( int )0;
sqlstm.sqindv[1] = ( void *)&tr_Ind.tx_Ind;
sqlstm.sqinds[1] = ( int )0;
sqlstm.sqharm[1] = (unsigned int )0;
sqlstm.sqadto[1] = (unsigned short )0;
sqlstm.sqtdso[1] = (unsigned short )0;
sqlstm.sqhstv[2] = ( void *)&tr.ty;
sqlstm.sqhstl[2] = (unsigned int )sizeof(double);
sqlstm.sqhsts[2] = ( int )0;
sqlstm.sqindv[2] = ( void *)&tr_Ind.ty_Ind;
sqlstm.sqinds[2] = ( int )0;
sqlstm.sqharm[2] = (unsigned int )0;
sqlstm.sqadto[2] = (unsigned short )0;
sqlstm.sqtdso[2] = (unsigned short )0;
sqlstm.sqhstv[3] = ( void *)&tr.tz;
sqlstm.sqhstl[3] = (unsigned int )sizeof(double);
sqlstm.sqhsts[3] = ( int )0;
sqlstm.sqindv[3] = ( void *)&tr_Ind.tz_Ind;
sqlstm.sqinds[3] = ( int )0;
sqlstm.sqharm[3] = (unsigned int )0;
sqlstm.sqadto[3] = (unsigned short )0;
sqlstm.sqtdso[3] = (unsigned short )0;
sqlstm.sqhstv[4] = ( void *)&tr.r11;
sqlstm.sqhstl[4] = (unsigned int )sizeof(double);
sqlstm.sqhsts[4] = ( int )0;
sqlstm.sqindv[4] = ( void *)&tr_Ind.r11_Ind;
sqlstm.sqinds[4] = ( int )0;
sqlstm.sqharm[4] = (unsigned int )0;
sqlstm.sqadto[4] = (unsigned short )0;
sqlstm.sqtdso[4] = (unsigned short )0;
sqlstm.sqhstv[5] = ( void *)&tr.r12;
sqlstm.sqhstl[5] = (unsigned int )sizeof(double);
sqlstm.sqhsts[5] = ( int )0;
sqlstm.sqindv[5] = ( void *)&tr_Ind.r12_Ind;
sqlstm.sqinds[5] = ( int )0;
sqlstm.sqharm[5] = (unsigned int )0;
sqlstm.sqadto[5] = (unsigned short )0;
sqlstm.sqtdso[5] = (unsigned short )0;
sqlstm.sqhstv[6] = ( void *)&tr.r13;
sqlstm.sqhstl[6] = (unsigned int )sizeof(double);
sqlstm.sqhsts[6] = ( int )0;
sqlstm.sqindv[6] = ( void *)&tr_Ind.r13_Ind;
sqlstm.sqinds[6] = ( int )0;
sqlstm.sqharm[6] = (unsigned int )0;
sqlstm.sqadto[6] = (unsigned short )0;
sqlstm.sqtdso[6] = (unsigned short )0;
sqlstm.sqhstv[7] = ( void *)&tr.r21;
sqlstm.sqhstl[7] = (unsigned int )sizeof(double);
sqlstm.sqhsts[7] = ( int )0;
sqlstm.sqindv[7] = ( void *)&tr_Ind.r21_Ind;
sqlstm.sqinds[7] = ( int )0;
sqlstm.sqharm[7] = (unsigned int )0;
sqlstm.sqadto[7] = (unsigned short )0;
sqlstm.sqtdso[7] = (unsigned short )0;
sqlstm.sqhstv[8] = ( void *)&tr.r22;
sqlstm.sqhstl[8] = (unsigned int )sizeof(double);
sqlstm.sqhsts[8] = ( int )0;
sqlstm.sqindv[8] = ( void *)&tr_Ind.r22_Ind;
sqlstm.sqinds[8] = ( int )0;
sqlstm.sqharm[8] = (unsigned int )0;
sqlstm.sqadto[8] = (unsigned short )0;
sqlstm.sqtdso[8] = (unsigned short )0;
sqlstm.sqhstv[9] = ( void *)&tr.r23;
sqlstm.sqhstl[9] = (unsigned int )sizeof(double);
sqlstm.sqhsts[9] = ( int )0;
sqlstm.sqindv[9] = ( void *)&tr_Ind.r23_Ind;
sqlstm.sqinds[9] = ( int )0;
sqlstm.sqharm[9] = (unsigned int )0;
sqlstm.sqadto[9] = (unsigned short )0;
sqlstm.sqtdso[9] = (unsigned short )0;
sqlstm.sqhstv[10] = ( void *)&tr.r31;
sqlstm.sqhstl[10] = (unsigned int )sizeof(double);
sqlstm.sqhsts[10] = ( int )0;
sqlstm.sqindv[10] = ( void *)&tr_Ind.r31_Ind;
sqlstm.sqinds[10] = ( int )0;
sqlstm.sqharm[10] = (unsigned int )0;
sqlstm.sqadto[10] = (unsigned short )0;
sqlstm.sqtdso[10] = (unsigned short )0;
sqlstm.sqhstv[11] = ( void *)&tr.r32;
sqlstm.sqhstl[11] = (unsigned int )sizeof(double);
sqlstm.sqhsts[11] = ( int )0;
sqlstm.sqindv[11] = ( void *)&tr_Ind.r32_Ind;
sqlstm.sqinds[11] = ( int )0;
sqlstm.sqharm[11] = (unsigned int )0;
sqlstm.sqadto[11] = (unsigned short )0;
sqlstm.sqtdso[11] = (unsigned short )0;
sqlstm.sqhstv[12] = ( void *)&tr.r33;
sqlstm.sqhstl[12] = (unsigned int )sizeof(double);
sqlstm.sqhsts[12] = ( int )0;
sqlstm.sqindv[12] = ( void *)&tr_Ind.r33_Ind;
sqlstm.sqinds[12] = ( int )0;
sqlstm.sqharm[12] = (unsigned int )0;
sqlstm.sqadto[12] = (unsigned short )0;
sqlstm.sqtdso[12] = (unsigned short )0;
sqlstm.sqphsv = sqlstm.sqhstv;
sqlstm.sqphsl = sqlstm.sqhstl;
sqlstm.sqphss = sqlstm.sqhsts;
sqlstm.sqpind = sqlstm.sqindv;
sqlstm.sqpins = sqlstm.sqinds;
sqlstm.sqparm = sqlstm.sqharm;
sqlstm.sqparc = sqlstm.sqharc;
sqlstm.sqpadto = sqlstm.sqadto;
sqlstm.sqptdso = sqlstm.sqtdso;
sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
if (sqlca.sqlcode < 0) goto errorfound;
}
if (tr_Ind.tref_Ind==-1) allFound=kFALSE;
else {
tr.tref.arr[tr.tref.len]='\0';
Char_t* refObj=(Char_t*)(tr.tref.arr);
t[0]=tr.tx;
t[1]=tr.ty;
t[2]=tr.tz;
r[0]=tr.r11;
r[1]=tr.r12;
r[2]=tr.r13;
r[3]=tr.r21;
r[4]=tr.r22;
r[5]=tr.r23;
r[6]=tr.r31;
r[7]=tr.r32;
r[8]=tr.r33;
HGeomNode* node=(HGeomNode*)p->pObj;
if (strcmp(refObj,"CAVE")==0) {
HGeomTransform tt;
tt.setTransVector(t);
tt.setRotMatrix(r);
node->setLabTransform(tt);
} else {
p->refObj=refObj;
p->refTransform.setTransVector(t);
p->refTransform.setRotMatrix(r);
TString mo=node->getMother();
HGeomTransform& tn=node->getTransform();
tn=p->refTransform;
if (mo.CompareTo(refObj)!=0) {
HOraTransObj* mr=(HOraTransObj*)pVol->FindObject(mo);
if (mr&&strcmp(refObj,mr->refObj)==0) {
tn.transTo(mr->refTransform);
} else {
Error("readTransform","Mother %s not found",mo.Data());
{
struct sqlexd sqlstm;
sqlorat((void **)0, &sqlctx, &oraca);
sqlstm.sqlvsn = 12;
sqlstm.arrsiz = 13;
sqlstm.sqladtp = &sqladt;
sqlstm.sqltdsp = &sqltds;
sqlstm.iters = (unsigned int )1;
sqlstm.offset = (unsigned int )546;
sqlstm.cud = sqlcud0;
sqlstm.sqlest = (unsigned char *)&sqlca;
sqlstm.sqlety = (unsigned short)256;
sqlstm.occurs = (unsigned int )0;
sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
if (sqlca.sqlcode < 0) goto errorfound;
}
return kFALSE;
}
}
}
}
}
{
struct sqlexd sqlstm;
sqlorat((void **)0, &sqlctx, &oraca);
sqlstm.sqlvsn = 12;
sqlstm.arrsiz = 13;
sqlstm.sqladtp = &sqladt;
sqlstm.sqltdsp = &sqltds;
sqlstm.iters = (unsigned int )1;
sqlstm.offset = (unsigned int )561;
sqlstm.cud = sqlcud0;
sqlstm.sqlest = (unsigned char *)&sqlca;
sqlstm.sqlety = (unsigned short)256;
sqlstm.occurs = (unsigned int )0;
sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
if (sqlca.sqlcode < 0) goto errorfound;
}
return allFound;
errorfound:
{
struct sqlexd sqlstm;
sqlorat((void **)0, &sqlctx, &oraca);
sqlstm.sqlvsn = 12;
sqlstm.arrsiz = 13;
sqlstm.sqladtp = &sqladt;
sqlstm.sqltdsp = &sqltds;
sqlstm.iters = (unsigned int )1;
sqlstm.offset = (unsigned int )576;
sqlstm.cud = sqlcud0;
sqlstm.sqlest = (unsigned char *)&sqlca;
sqlstm.sqlety = (unsigned short)256;
sqlstm.occurs = (unsigned int )0;
sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
if (sqlca.sqlcode < 0) goto errorfound;
}
pConn->showSqlError("readTransform");
return kFALSE;
}
Bool_t HGeomOraIo::read(HGeomHit* hits) {
if (hits==0||pConn->getActRunId()==-1) return kFALSE;
Int_t nComp=0;
cout<<"Read hit definition for "<<hits->getDetectorName()<<endl;
char* part;
struct {
struct { unsigned short len; unsigned char arr[6]; } sn[100];
int cn[NMAX_GEOSMALL];
struct { unsigned short len; unsigned char arr[6]; } chn[100];
int nbi[NMAX_GEOSMALL];
float ori[NMAX_GEOSMALL];
float fac[NMAX_GEOSMALL];
} gh;
struct {
short sn[NMAX_GEOSMALL];
short cn[NMAX_GEOSMALL];
short chn[NMAX_GEOSMALL];
short nbi[NMAX_GEOSMALL];
short ori[NMAX_GEOSMALL];
short fac[NMAX_GEOSMALL];
} gh_Ind;
part=(Char_t*)hits->getDetectorName();
{
struct sqlexd sqlstm;
sqlorat((void **)0, &sqlctx, &oraca);
sqlstm.sqlvsn = 12;
sqlstm.arrsiz = 13;
sqlstm.sqladtp = &sqladt;
sqlstm.sqltdsp = &sqltds;
sqlstm.stmt = "select hit_set_name ,comp_num ,comp_chnamh ,comp_nbitsh ,co\
mp_orig ,comp_fact into :s1:s2 ,:s3:s4 ,:s5:s6 ,:s7:s8 ,:s9:s10 ,:s11:s12 fr\
om hgeom.geant_hit_at_histdate where detector_name=UPPER(:b2) order by comp_nu\
m ";
sqlstm.iters = (unsigned int )100;
sqlstm.offset = (unsigned int )591;
sqlstm.selerr = (unsigned short)1;
sqlstm.cud = sqlcud0;
sqlstm.sqlest = (unsigned char *)&sqlca;
sqlstm.sqlety = (unsigned short)256;
sqlstm.occurs = (unsigned int )0;
sqlstm.sqhstv[0] = ( void *)gh.sn;
sqlstm.sqhstl[0] = (unsigned int )7;
sqlstm.sqhsts[0] = ( int )8;
sqlstm.sqindv[0] = ( void *)gh_Ind.sn;
sqlstm.sqinds[0] = ( int )sizeof(short);
sqlstm.sqharm[0] = (unsigned int )0;
sqlstm.sqharc[0] = (unsigned int *)0;
sqlstm.sqadto[0] = (unsigned short )0;
sqlstm.sqtdso[0] = (unsigned short )0;
sqlstm.sqhstv[1] = ( void *)gh.cn;
sqlstm.sqhstl[1] = (unsigned int )sizeof(int);
sqlstm.sqhsts[1] = ( int )sizeof(int);
sqlstm.sqindv[1] = ( void *)gh_Ind.cn;
sqlstm.sqinds[1] = ( int )sizeof(short);
sqlstm.sqharm[1] = (unsigned int )0;
sqlstm.sqharc[1] = (unsigned int *)0;
sqlstm.sqadto[1] = (unsigned short )0;
sqlstm.sqtdso[1] = (unsigned short )0;
sqlstm.sqhstv[2] = ( void *)gh.chn;
sqlstm.sqhstl[2] = (unsigned int )7;
sqlstm.sqhsts[2] = ( int )8;
sqlstm.sqindv[2] = ( void *)gh_Ind.chn;
sqlstm.sqinds[2] = ( int )sizeof(short);
sqlstm.sqharm[2] = (unsigned int )0;
sqlstm.sqharc[2] = (unsigned int *)0;
sqlstm.sqadto[2] = (unsigned short )0;
sqlstm.sqtdso[2] = (unsigned short )0;
sqlstm.sqhstv[3] = ( void *)gh.nbi;
sqlstm.sqhstl[3] = (unsigned int )sizeof(int);
sqlstm.sqhsts[3] = ( int )sizeof(int);
sqlstm.sqindv[3] = ( void *)gh_Ind.nbi;
sqlstm.sqinds[3] = ( int )sizeof(short);
sqlstm.sqharm[3] = (unsigned int )0;
sqlstm.sqharc[3] = (unsigned int *)0;
sqlstm.sqadto[3] = (unsigned short )0;
sqlstm.sqtdso[3] = (unsigned short )0;
sqlstm.sqhstv[4] = ( void *)gh.ori;
sqlstm.sqhstl[4] = (unsigned int )sizeof(float);
sqlstm.sqhsts[4] = ( int )sizeof(float);
sqlstm.sqindv[4] = ( void *)gh_Ind.ori;
sqlstm.sqinds[4] = ( int )sizeof(short);
sqlstm.sqharm[4] = (unsigned int )0;
sqlstm.sqharc[4] = (unsigned int *)0;
sqlstm.sqadto[4] = (unsigned short )0;
sqlstm.sqtdso[4] = (unsigned short )0;
sqlstm.sqhstv[5] = ( void *)gh.fac;
sqlstm.sqhstl[5] = (unsigned int )sizeof(float);
sqlstm.sqhsts[5] = ( int )sizeof(float);
sqlstm.sqindv[5] = ( void *)gh_Ind.fac;
sqlstm.sqinds[5] = ( int )sizeof(short);
sqlstm.sqharm[5] = (unsigned int )0;
sqlstm.sqharc[5] = (unsigned int *)0;
sqlstm.sqadto[5] = (unsigned short )0;
sqlstm.sqtdso[5] = (unsigned short )0;
sqlstm.sqhstv[6] = ( void *)part;
sqlstm.sqhstl[6] = (unsigned int )0;
sqlstm.sqhsts[6] = ( int )0;
sqlstm.sqindv[6] = ( void *)0;
sqlstm.sqinds[6] = ( int )0;
sqlstm.sqharm[6] = (unsigned int )0;
sqlstm.sqadto[6] = (unsigned short )0;
sqlstm.sqtdso[6] = (unsigned short )0;
sqlstm.sqphsv = sqlstm.sqhstv;
sqlstm.sqphsl = sqlstm.sqhstl;
sqlstm.sqphss = sqlstm.sqhsts;
sqlstm.sqpind = sqlstm.sqindv;
sqlstm.sqpins = sqlstm.sqinds;
sqlstm.sqparm = sqlstm.sqharm;
sqlstm.sqparc = sqlstm.sqharc;
sqlstm.sqpadto = sqlstm.sqadto;
sqlstm.sqptdso = sqlstm.sqtdso;
sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
if (sqlca.sqlcode < 0) goto errorfound;
}
nComp=sqlca.sqlerrd[2];
if (nComp>0&&gh_Ind.sn[0]!=-1) {
gh.sn[0].arr[gh.sn[0].len]='\0';
hits->SetName((Char_t*)(gh.sn[0].arr));
hits->setNh(nComp);
for(Int_t i=0;i<nComp;i++) {
if (gh_Ind.chn[i]!=-1) {
gh.chn[i].arr[gh.chn[i].len]='\0';
hits->fill(gh.cn[i]-1,(Char_t*)gh.chn[i].arr,gh.nbi[i],gh.ori[i],gh.fac[i]);
}
}
return kTRUE;
} else {
Error("read(HGeomHit*)","Hit definition for %s not found in database",part);
return kFALSE;
}
errorfound:
pConn->showSqlError("read(HGeomHit*)");
return kFALSE;
}
Int_t HGeomOraIo::createVersion(const Char_t* part,TString& pAuthor,
TString& pDescription) {
if (pAuthor.IsNull()) {
Error("createVersion",
"author of % not defined",part);
return -1;
}
if (strlen(pDescription)==0) {
Error("createVersion",
"description of % not defined",part);
return -1;
}
int vers=-1;
char* pP;
char* pA;
char* pD;
pP=(Char_t*)part;
pA=(Char_t*)pAuthor.Data();
pD=(Char_t*)pDescription.Data();
{
struct sqlexd sqlstm;
sqlorat((void **)0, &sqlctx, &oraca);
sqlstm.sqlvsn = 12;
sqlstm.arrsiz = 13;
sqlstm.sqladtp = &sqladt;
sqlstm.sqltdsp = &sqltds;
sqlstm.stmt = "declare BEGIN hgeom . geom_load_public . insert_version ( :\
pP , :pA , :pD , :vers ) ; END ;";
sqlstm.iters = (unsigned int )1;
sqlstm.offset = (unsigned int )634;
sqlstm.cud = sqlcud0;
sqlstm.sqlest = (unsigned char *)&sqlca;
sqlstm.sqlety = (unsigned short)256;
sqlstm.occurs = (unsigned int )0;
sqlstm.sqhstv[0] = ( void *)pP;
sqlstm.sqhstl[0] = (unsigned int )0;
sqlstm.sqhsts[0] = ( int )0;
sqlstm.sqindv[0] = ( void *)0;
sqlstm.sqinds[0] = ( int )0;
sqlstm.sqharm[0] = (unsigned int )0;
sqlstm.sqadto[0] = (unsigned short )0;
sqlstm.sqtdso[0] = (unsigned short )0;
sqlstm.sqhstv[1] = ( void *)pA;
sqlstm.sqhstl[1] = (unsigned int )0;
sqlstm.sqhsts[1] = ( int )0;
sqlstm.sqindv[1] = ( void *)0;
sqlstm.sqinds[1] = ( int )0;
sqlstm.sqharm[1] = (unsigned int )0;
sqlstm.sqadto[1] = (unsigned short )0;
sqlstm.sqtdso[1] = (unsigned short )0;
sqlstm.sqhstv[2] = ( void *)pD;
sqlstm.sqhstl[2] = (unsigned int )0;
sqlstm.sqhsts[2] = ( int )0;
sqlstm.sqindv[2] = ( void *)0;
sqlstm.sqinds[2] = ( int )0;
sqlstm.sqharm[2] = (unsigned int )0;
sqlstm.sqadto[2] = (unsigned short )0;
sqlstm.sqtdso[2] = (unsigned short )0;
sqlstm.sqhstv[3] = ( void *)&vers;
sqlstm.sqhstl[3] = (unsigned int )sizeof(int);
sqlstm.sqhsts[3] = ( int )0;
sqlstm.sqindv[3] = ( void *)0;
sqlstm.sqinds[3] = ( int )0;
sqlstm.sqharm[3] = (unsigned int )0;
sqlstm.sqadto[3] = (unsigned short )0;
sqlstm.sqtdso[3] = (unsigned short )0;
sqlstm.sqphsv = sqlstm.sqhstv;
sqlstm.sqphsl = sqlstm.sqhstl;
sqlstm.sqphss = sqlstm.sqhsts;
sqlstm.sqpind = sqlstm.sqindv;
sqlstm.sqpins = sqlstm.sqinds;
sqlstm.sqparm = sqlstm.sqharm;
sqlstm.sqparc = sqlstm.sqharc;
sqlstm.sqpadto = sqlstm.sqadto;
sqlstm.sqptdso = sqlstm.sqtdso;
sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
if (sqlca.sqlcode == 1403) goto error_found;
if (sqlca.sqlcode < 0) goto error_found;
}
cout<<"****************************************************************\n";
cout<<"***** Inserts in Oracle \n";
cout<<"****************************************************************\n";
cout<<"Part: "<<part<<'\n';
cout<<"Version: "<<vers<<'\n';
return vers;
error_found:
pConn->showSqlError("createVersion");
pConn->rollback();
return -1;
};
Bool_t HGeomOraIo::write(HGeomMedia* media) {
if (!pConn->isOpen()||!pConn->isWritable()) return kFALSE;
Int_t version=createVersion("media",media->getAuthor(),
media->getDescription());
if (version<=0) return kFALSE;
int vers;
char* medName;
double dens;
int ncomp;
int sens;
int fldflag;
double fld;
double eps;
int nopt;
int id=-1;
vers=version;
TList* medList=media->getListOfMedia();
TListIter iter(medList);
HGeomMedium* medium;
Bool_t rc=kTRUE;
Int_t n=0;
while(rc&&(medium=(HGeomMedium*)iter.Next())) {
n++;
medName=(Char_t*)medium->GetName();
dens=medium->getDensity();
ncomp=medium->getNComponents();
sens=medium->getSensitivityFlag();
fldflag=medium->getFieldFlag();
fld=medium->getField();
eps=medium->getEpsil();
nopt=medium->getNpckov();
{
struct sqlexd sqlstm;
sqlorat((void **)0, &sqlctx, &oraca);
sqlstm.sqlvsn = 12;
sqlstm.arrsiz = 13;
sqlstm.sqladtp = &sqladt;
sqlstm.sqltdsp = &sqltds;
sqlstm.stmt = "declare BEGIN hgeom . geom_load_public . insert_medium ( \
:vers , :medName , :dens , :ncomp , :sens , :fldflag , :fld , :eps , :nopt , :\
id ) ; END ;";
sqlstm.iters = (unsigned int )1;
sqlstm.offset = (unsigned int )665;
sqlstm.cud = sqlcud0;
sqlstm.sqlest = (unsigned char *)&sqlca;
sqlstm.sqlety = (unsigned short)256;
sqlstm.occurs = (unsigned int )0;
sqlstm.sqhstv[0] = ( void *)&vers;
sqlstm.sqhstl[0] = (unsigned int )sizeof(int);
sqlstm.sqhsts[0] = ( int )0;
sqlstm.sqindv[0] = ( void *)0;
sqlstm.sqinds[0] = ( int )0;
sqlstm.sqharm[0] = (unsigned int )0;
sqlstm.sqadto[0] = (unsigned short )0;
sqlstm.sqtdso[0] = (unsigned short )0;
sqlstm.sqhstv[1] = ( void *)medName;
sqlstm.sqhstl[1] = (unsigned int )0;
sqlstm.sqhsts[1] = ( int )0;
sqlstm.sqindv[1] = ( void *)0;
sqlstm.sqinds[1] = ( int )0;
sqlstm.sqharm[1] = (unsigned int )0;
sqlstm.sqadto[1] = (unsigned short )0;
sqlstm.sqtdso[1] = (unsigned short )0;
sqlstm.sqhstv[2] = ( void *)&dens;
sqlstm.sqhstl[2] = (unsigned int )sizeof(double);
sqlstm.sqhsts[2] = ( int )0;
sqlstm.sqindv[2] = ( void *)0;
sqlstm.sqinds[2] = ( int )0;
sqlstm.sqharm[2] = (unsigned int )0;
sqlstm.sqadto[2] = (unsigned short )0;
sqlstm.sqtdso[2] = (unsigned short )0;
sqlstm.sqhstv[3] = ( void *)&ncomp;
sqlstm.sqhstl[3] = (unsigned int )sizeof(int);
sqlstm.sqhsts[3] = ( int )0;
sqlstm.sqindv[3] = ( void *)0;
sqlstm.sqinds[3] = ( int )0;
sqlstm.sqharm[3] = (unsigned int )0;
sqlstm.sqadto[3] = (unsigned short )0;
sqlstm.sqtdso[3] = (unsigned short )0;
sqlstm.sqhstv[4] = ( void *)&sens;
sqlstm.sqhstl[4] = (unsigned int )sizeof(int);
sqlstm.sqhsts[4] = ( int )0;
sqlstm.sqindv[4] = ( void *)0;
sqlstm.sqinds[4] = ( int )0;
sqlstm.sqharm[4] = (unsigned int )0;
sqlstm.sqadto[4] = (unsigned short )0;
sqlstm.sqtdso[4] = (unsigned short )0;
sqlstm.sqhstv[5] = ( void *)&fldflag;
sqlstm.sqhstl[5] = (unsigned int )sizeof(int);
sqlstm.sqhsts[5] = ( int )0;
sqlstm.sqindv[5] = ( void *)0;
sqlstm.sqinds[5] = ( int )0;
sqlstm.sqharm[5] = (unsigned int )0;
sqlstm.sqadto[5] = (unsigned short )0;
sqlstm.sqtdso[5] = (unsigned short )0;
sqlstm.sqhstv[6] = ( void *)&fld;
sqlstm.sqhstl[6] = (unsigned int )sizeof(double);
sqlstm.sqhsts[6] = ( int )0;
sqlstm.sqindv[6] = ( void *)0;
sqlstm.sqinds[6] = ( int )0;
sqlstm.sqharm[6] = (unsigned int )0;
sqlstm.sqadto[6] = (unsigned short )0;
sqlstm.sqtdso[6] = (unsigned short )0;
sqlstm.sqhstv[7] = ( void *)&eps;
sqlstm.sqhstl[7] = (unsigned int )sizeof(double);
sqlstm.sqhsts[7] = ( int )0;
sqlstm.sqindv[7] = ( void *)0;
sqlstm.sqinds[7] = ( int )0;
sqlstm.sqharm[7] = (unsigned int )0;
sqlstm.sqadto[7] = (unsigned short )0;
sqlstm.sqtdso[7] = (unsigned short )0;
sqlstm.sqhstv[8] = ( void *)&nopt;
sqlstm.sqhstl[8] = (unsigned int )sizeof(int);
sqlstm.sqhsts[8] = ( int )0;
sqlstm.sqindv[8] = ( void *)0;
sqlstm.sqinds[8] = ( int )0;
sqlstm.sqharm[8] = (unsigned int )0;
sqlstm.sqadto[8] = (unsigned short )0;
sqlstm.sqtdso[8] = (unsigned short )0;
sqlstm.sqhstv[9] = ( void *)&id;
sqlstm.sqhstl[9] = (unsigned int )sizeof(int);
sqlstm.sqhsts[9] = ( int )0;
sqlstm.sqindv[9] = ( void *)0;
sqlstm.sqinds[9] = ( int )0;
sqlstm.sqharm[9] = (unsigned int )0;
sqlstm.sqadto[9] = (unsigned short )0;
sqlstm.sqtdso[9] = (unsigned short )0;
sqlstm.sqphsv = sqlstm.sqhstv;
sqlstm.sqphsl = sqlstm.sqhstl;
sqlstm.sqphss = sqlstm.sqhsts;
sqlstm.sqpind = sqlstm.sqindv;
sqlstm.sqpins = sqlstm.sqinds;
sqlstm.sqparm = sqlstm.sqharm;
sqlstm.sqparc = sqlstm.sqharc;
sqlstm.sqpadto = sqlstm.sqadto;
sqlstm.sqptdso = sqlstm.sqtdso;
sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
if (sqlca.sqlcode == 1403) goto error_found;
if (sqlca.sqlcode < 0) goto error_found;
}
rc=insertMaterialData(id,medium);
if (rc&&nopt>0) insertOpticalData(id,medium);
}
if (rc) {
cout<<"Number of inserts: "<<n<<'\n';
pConn->commit();
cout<<"****************************************************************\n";
return kTRUE;
}
return kFALSE;
error_found:
if (medium) {
TString s("error in medium ");
s.Append(medium->GetName());
pConn->showSqlError("write(HGeomMedia*)",s );
}
else pConn->showSqlError("write(HGeomMedia*)","No media written");
pConn->rollback();
return kFALSE;
}
Bool_t HGeomOraIo::insertMaterialData(Int_t medId,HGeomMedium* medium) {
if (!medium||medId<=0) return kFALSE;
int id[NMAX_GEOSMALL];
int comp[NMAX_GEOSMALL];
double a[NMAX_GEOSMALL];
int z[NMAX_GEOSMALL];
double w[NMAX_GEOSMALL];
int rowsToInsert;
rowsToInsert=medium->getNComponents();
if (rowsToInsert>NMAX_GEOSMALL) {
Error("insertMaterialData","Number of components in medium %s exceeds %n\n",
medium->GetName(),NMAX_GEOSMALL);
return kFALSE;
}
Double_t p[3];
for (Int_t i=0;i<rowsToInsert;i++) {
id[i]=medId;
comp[i]=i+1;
medium->getComponent(i,p);
a[i]=p[0];
z[i]=(Int_t)(p[1]);
w[i]=p[2];
}
{
struct sqlexd sqlstm;
sqlorat((void **)0, &sqlctx, &oraca);
sqlstm.sqlvsn = 12;
sqlstm.arrsiz = 13;
sqlstm.sqladtp = &sqladt;
sqlstm.sqltdsp = &sqltds;
sqlstm.stmt = "insert into hgeom.material_data_load (med_id,comp_num,comp_\
z,comp_a,comp_weight) values (:b1,:b2,:b3,:b4,:b5)";
sqlstm.iters = (unsigned int )rowsToInsert;
sqlstm.offset = (unsigned int )720;
sqlstm.cud = sqlcud0;
sqlstm.sqlest = (unsigned char *)&sqlca;
sqlstm.sqlety = (unsigned short)256;
sqlstm.occurs = (unsigned int )0;
sqlstm.sqhstv[0] = ( void *)id;
sqlstm.sqhstl[0] = (unsigned int )sizeof(int);
sqlstm.sqhsts[0] = ( int )sizeof(int);
sqlstm.sqindv[0] = ( void *)0;
sqlstm.sqinds[0] = ( int )0;
sqlstm.sqharm[0] = (unsigned int )0;
sqlstm.sqharc[0] = (unsigned int *)0;
sqlstm.sqadto[0] = (unsigned short )0;
sqlstm.sqtdso[0] = (unsigned short )0;
sqlstm.sqhstv[1] = ( void *)comp;
sqlstm.sqhstl[1] = (unsigned int )sizeof(int);
sqlstm.sqhsts[1] = ( int )sizeof(int);
sqlstm.sqindv[1] = ( void *)0;
sqlstm.sqinds[1] = ( int )0;
sqlstm.sqharm[1] = (unsigned int )0;
sqlstm.sqharc[1] = (unsigned int *)0;
sqlstm.sqadto[1] = (unsigned short )0;
sqlstm.sqtdso[1] = (unsigned short )0;
sqlstm.sqhstv[2] = ( void *)z;
sqlstm.sqhstl[2] = (unsigned int )sizeof(int);
sqlstm.sqhsts[2] = ( int )sizeof(int);
sqlstm.sqindv[2] = ( void *)0;
sqlstm.sqinds[2] = ( int )0;
sqlstm.sqharm[2] = (unsigned int )0;
sqlstm.sqharc[2] = (unsigned int *)0;
sqlstm.sqadto[2] = (unsigned short )0;
sqlstm.sqtdso[2] = (unsigned short )0;
sqlstm.sqhstv[3] = ( void *)a;
sqlstm.sqhstl[3] = (unsigned int )sizeof(double);
sqlstm.sqhsts[3] = ( int )sizeof(double);
sqlstm.sqindv[3] = ( void *)0;
sqlstm.sqinds[3] = ( int )0;
sqlstm.sqharm[3] = (unsigned int )0;
sqlstm.sqharc[3] = (unsigned int *)0;
sqlstm.sqadto[3] = (unsigned short )0;
sqlstm.sqtdso[3] = (unsigned short )0;
sqlstm.sqhstv[4] = ( void *)w;
sqlstm.sqhstl[4] = (unsigned int )sizeof(double);
sqlstm.sqhsts[4] = ( int )sizeof(double);
sqlstm.sqindv[4] = ( void *)0;
sqlstm.sqinds[4] = ( int )0;
sqlstm.sqharm[4] = (unsigned int )0;
sqlstm.sqharc[4] = (unsigned int *)0;
sqlstm.sqadto[4] = (unsigned short )0;
sqlstm.sqtdso[4] = (unsigned short )0;
sqlstm.sqphsv = sqlstm.sqhstv;
sqlstm.sqphsl = sqlstm.sqhstl;
sqlstm.sqphss = sqlstm.sqhsts;
sqlstm.sqpind = sqlstm.sqindv;
sqlstm.sqpins = sqlstm.sqinds;
sqlstm.sqparm = sqlstm.sqharm;
sqlstm.sqparc = sqlstm.sqharc;
sqlstm.sqpadto = sqlstm.sqadto;
sqlstm.sqptdso = sqlstm.sqtdso;
sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
if (sqlca.sqlcode == 1403) goto error_found;
if (sqlca.sqlcode < 0) goto error_found;
}
return kTRUE;
error_found:
TString s("error in medium ");
s.Append(medium->GetName());
pConn->showSqlError("insertMaterialData",s);
pConn->rollback();
return kFALSE;
}
Bool_t HGeomOraIo::insertOpticalData(Int_t medId,HGeomMedium* medium) {
if (!medium||medId<=0) return kFALSE;
int id[NMAX_GEOSMALL];
int no[NMAX_GEOSMALL];
double pp[NMAX_GEOSMALL];
double ab[NMAX_GEOSMALL];
double ef[NMAX_GEOSMALL];
double ri[NMAX_GEOSMALL];
int rowsToInsert;
rowsToInsert=medium->getNpckov();
if (rowsToInsert==0) return kTRUE;
else if (rowsToInsert>NMAX_GEOSMALL) {
Error("insertOpticalData",
"Number of optical components in medium %s exceeds %n\n",
medium->GetName(),NMAX_GEOSMALL);
return kFALSE;
}
Double_t p[4];
for (Int_t i=0;i<rowsToInsert;i++) {
id[i]=medId;
no[i]=i+1;
medium->getCerenkovPar(i,p);
pp[i]=p[0];
ab[i]=p[1];
ef[i]=p[2];
ri[i]=p[3];
}
{
struct sqlexd sqlstm;
sqlorat((void **)0, &sqlctx, &oraca);
sqlstm.sqlvsn = 12;
sqlstm.arrsiz = 13;
sqlstm.sqladtp = &sqladt;
sqlstm.sqltdsp = &sqltds;
sqlstm.stmt = "insert into hgeom.optical_data_load (med_id,prop_num,ppckov\
,absco,effic,rindex) values (:b1,:b2,:b3,:b4,:b5,:b6)";
sqlstm.iters = (unsigned int )rowsToInsert;
sqlstm.offset = (unsigned int )755;
sqlstm.cud = sqlcud0;
sqlstm.sqlest = (unsigned char *)&sqlca;
sqlstm.sqlety = (unsigned short)256;
sqlstm.occurs = (unsigned int )0;
sqlstm.sqhstv[0] = ( void *)id;
sqlstm.sqhstl[0] = (unsigned int )sizeof(int);
sqlstm.sqhsts[0] = ( int )sizeof(int);
sqlstm.sqindv[0] = ( void *)0;
sqlstm.sqinds[0] = ( int )0;
sqlstm.sqharm[0] = (unsigned int )0;
sqlstm.sqharc[0] = (unsigned int *)0;
sqlstm.sqadto[0] = (unsigned short )0;
sqlstm.sqtdso[0] = (unsigned short )0;
sqlstm.sqhstv[1] = ( void *)no;
sqlstm.sqhstl[1] = (unsigned int )sizeof(int);
sqlstm.sqhsts[1] = ( int )sizeof(int);
sqlstm.sqindv[1] = ( void *)0;
sqlstm.sqinds[1] = ( int )0;
sqlstm.sqharm[1] = (unsigned int )0;
sqlstm.sqharc[1] = (unsigned int *)0;
sqlstm.sqadto[1] = (unsigned short )0;
sqlstm.sqtdso[1] = (unsigned short )0;
sqlstm.sqhstv[2] = ( void *)pp;
sqlstm.sqhstl[2] = (unsigned int )sizeof(double);
sqlstm.sqhsts[2] = ( int )sizeof(double);
sqlstm.sqindv[2] = ( void *)0;
sqlstm.sqinds[2] = ( int )0;
sqlstm.sqharm[2] = (unsigned int )0;
sqlstm.sqharc[2] = (unsigned int *)0;
sqlstm.sqadto[2] = (unsigned short )0;
sqlstm.sqtdso[2] = (unsigned short )0;
sqlstm.sqhstv[3] = ( void *)ab;
sqlstm.sqhstl[3] = (unsigned int )sizeof(double);
sqlstm.sqhsts[3] = ( int )sizeof(double);
sqlstm.sqindv[3] = ( void *)0;
sqlstm.sqinds[3] = ( int )0;
sqlstm.sqharm[3] = (unsigned int )0;
sqlstm.sqharc[3] = (unsigned int *)0;
sqlstm.sqadto[3] = (unsigned short )0;
sqlstm.sqtdso[3] = (unsigned short )0;
sqlstm.sqhstv[4] = ( void *)ef;
sqlstm.sqhstl[4] = (unsigned int )sizeof(double);
sqlstm.sqhsts[4] = ( int )sizeof(double);
sqlstm.sqindv[4] = ( void *)0;
sqlstm.sqinds[4] = ( int )0;
sqlstm.sqharm[4] = (unsigned int )0;
sqlstm.sqharc[4] = (unsigned int *)0;
sqlstm.sqadto[4] = (unsigned short )0;
sqlstm.sqtdso[4] = (unsigned short )0;
sqlstm.sqhstv[5] = ( void *)ri;
sqlstm.sqhstl[5] = (unsigned int )sizeof(double);
sqlstm.sqhsts[5] = ( int )sizeof(double);
sqlstm.sqindv[5] = ( void *)0;
sqlstm.sqinds[5] = ( int )0;
sqlstm.sqharm[5] = (unsigned int )0;
sqlstm.sqharc[5] = (unsigned int *)0;
sqlstm.sqadto[5] = (unsigned short )0;
sqlstm.sqtdso[5] = (unsigned short )0;
sqlstm.sqphsv = sqlstm.sqhstv;
sqlstm.sqphsl = sqlstm.sqhstl;
sqlstm.sqphss = sqlstm.sqhsts;
sqlstm.sqpind = sqlstm.sqindv;
sqlstm.sqpins = sqlstm.sqinds;
sqlstm.sqparm = sqlstm.sqharm;
sqlstm.sqparc = sqlstm.sqharc;
sqlstm.sqpadto = sqlstm.sqadto;
sqlstm.sqptdso = sqlstm.sqtdso;
sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
if (sqlca.sqlcode == 1403) goto error_found;
if (sqlca.sqlcode < 0) goto error_found;
}
return kTRUE;
error_found:
TString s("error in medium ");
s.Append(medium->GetName());
pConn->showSqlError("insertOpticalData",s.Data() );
pConn->rollback();
return kFALSE;
}
Bool_t HGeomOraIo::write(HGeomSet* set) {
if (!pConn->isOpen()||!pConn->isWritable()) return kFALSE;
Int_t version=createVersion(set->GetName(),set->getAuthor(),
set->getDescription());
if (version<=0) return kFALSE;
int vers;
char* volName;
char* moName;
char* medName;
char* shape;
char* refPosObj;
double x;
double y;
double z;
double r11;
double r12;
double r13;
double r21;
double r22;
double r23;
double r31;
double r32;
double r33;
int id=-1;
vers=version;
TList* volList=set->getListOfVolumes();
TListIter iter(volList);
HGeomNode* node;
Bool_t rc=kTRUE;
Int_t n=0;
HGeomTransform transform;
while(rc&&(node=(HGeomNode*)iter.Next())) {
n++;
volName=(Char_t*)node->GetName();
moName=(Char_t*)(node->getMother().Data());
medName=(Char_t*)(node->getMedium()->GetName());
shape=(Char_t*)(node->getShape().Data());
refPosObj=(Char_t*)calcRefTransform(node,transform);
if (refPosObj) {
const HGeomVector& pos=transform.getTransVector();
x=pos(0);
y=pos(1);
z=pos(2);
const HGeomRotation& rot=transform.getRotMatrix();
r11=rot(0);
r12=rot(1);
r13=rot(2);
r21=rot(3);
r22=rot(4);
r23=rot(5);
r31=rot(6);
r32=rot(7);
r33=rot(8);
{
struct sqlexd sqlstm;
sqlorat((void **)0, &sqlctx, &oraca);
sqlstm.sqlvsn = 12;
sqlstm.arrsiz = 19;
sqlstm.sqladtp = &sqladt;
sqlstm.sqltdsp = &sqltds;
sqlstm.stmt = "declare BEGIN hgeom . geom_load_public . insert_volume \
( :vers , :volName , :moName , :medName , :shape , :refPosObj , :x , :y , :z ,\
:r11 , :r12 , :r13 , :r21 , :r22 , :r23 , :r31 , :r32 , :r33 , :id ) ; END ;";
sqlstm.iters = (unsigned int )1;
sqlstm.offset = (unsigned int )794;
sqlstm.cud = sqlcud0;
sqlstm.sqlest = (unsigned char *)&sqlca;
sqlstm.sqlety = (unsigned short)256;
sqlstm.occurs = (unsigned int )0;
sqlstm.sqhstv[0] = ( void *)&vers;
sqlstm.sqhstl[0] = (unsigned int )sizeof(int);
sqlstm.sqhsts[0] = ( int )0;
sqlstm.sqindv[0] = ( void *)0;
sqlstm.sqinds[0] = ( int )0;
sqlstm.sqharm[0] = (unsigned int )0;
sqlstm.sqadto[0] = (unsigned short )0;
sqlstm.sqtdso[0] = (unsigned short )0;
sqlstm.sqhstv[1] = ( void *)volName;
sqlstm.sqhstl[1] = (unsigned int )0;
sqlstm.sqhsts[1] = ( int )0;
sqlstm.sqindv[1] = ( void *)0;
sqlstm.sqinds[1] = ( int )0;
sqlstm.sqharm[1] = (unsigned int )0;
sqlstm.sqadto[1] = (unsigned short )0;
sqlstm.sqtdso[1] = (unsigned short )0;
sqlstm.sqhstv[2] = ( void *)moName;
sqlstm.sqhstl[2] = (unsigned int )0;
sqlstm.sqhsts[2] = ( int )0;
sqlstm.sqindv[2] = ( void *)0;
sqlstm.sqinds[2] = ( int )0;
sqlstm.sqharm[2] = (unsigned int )0;
sqlstm.sqadto[2] = (unsigned short )0;
sqlstm.sqtdso[2] = (unsigned short )0;
sqlstm.sqhstv[3] = ( void *)medName;
sqlstm.sqhstl[3] = (unsigned int )0;
sqlstm.sqhsts[3] = ( int )0;
sqlstm.sqindv[3] = ( void *)0;
sqlstm.sqinds[3] = ( int )0;
sqlstm.sqharm[3] = (unsigned int )0;
sqlstm.sqadto[3] = (unsigned short )0;
sqlstm.sqtdso[3] = (unsigned short )0;
sqlstm.sqhstv[4] = ( void *)shape;
sqlstm.sqhstl[4] = (unsigned int )0;
sqlstm.sqhsts[4] = ( int )0;
sqlstm.sqindv[4] = ( void *)0;
sqlstm.sqinds[4] = ( int )0;
sqlstm.sqharm[4] = (unsigned int )0;
sqlstm.sqadto[4] = (unsigned short )0;
sqlstm.sqtdso[4] = (unsigned short )0;
sqlstm.sqhstv[5] = ( void *)refPosObj;
sqlstm.sqhstl[5] = (unsigned int )0;
sqlstm.sqhsts[5] = ( int )0;
sqlstm.sqindv[5] = ( void *)0;
sqlstm.sqinds[5] = ( int )0;
sqlstm.sqharm[5] = (unsigned int )0;
sqlstm.sqadto[5] = (unsigned short )0;
sqlstm.sqtdso[5] = (unsigned short )0;
sqlstm.sqhstv[6] = ( void *)&x;
sqlstm.sqhstl[6] = (unsigned int )sizeof(double);
sqlstm.sqhsts[6] = ( int )0;
sqlstm.sqindv[6] = ( void *)0;
sqlstm.sqinds[6] = ( int )0;
sqlstm.sqharm[6] = (unsigned int )0;
sqlstm.sqadto[6] = (unsigned short )0;
sqlstm.sqtdso[6] = (unsigned short )0;
sqlstm.sqhstv[7] = ( void *)&y;
sqlstm.sqhstl[7] = (unsigned int )sizeof(double);
sqlstm.sqhsts[7] = ( int )0;
sqlstm.sqindv[7] = ( void *)0;
sqlstm.sqinds[7] = ( int )0;
sqlstm.sqharm[7] = (unsigned int )0;
sqlstm.sqadto[7] = (unsigned short )0;
sqlstm.sqtdso[7] = (unsigned short )0;
sqlstm.sqhstv[8] = ( void *)&z;
sqlstm.sqhstl[8] = (unsigned int )sizeof(double);
sqlstm.sqhsts[8] = ( int )0;
sqlstm.sqindv[8] = ( void *)0;
sqlstm.sqinds[8] = ( int )0;
sqlstm.sqharm[8] = (unsigned int )0;
sqlstm.sqadto[8] = (unsigned short )0;
sqlstm.sqtdso[8] = (unsigned short )0;
sqlstm.sqhstv[9] = ( void *)&r11;
sqlstm.sqhstl[9] = (unsigned int )sizeof(double);
sqlstm.sqhsts[9] = ( int )0;
sqlstm.sqindv[9] = ( void *)0;
sqlstm.sqinds[9] = ( int )0;
sqlstm.sqharm[9] = (unsigned int )0;
sqlstm.sqadto[9] = (unsigned short )0;
sqlstm.sqtdso[9] = (unsigned short )0;
sqlstm.sqhstv[10] = ( void *)&r12;
sqlstm.sqhstl[10] = (unsigned int )sizeof(double);
sqlstm.sqhsts[10] = ( int )0;
sqlstm.sqindv[10] = ( void *)0;
sqlstm.sqinds[10] = ( int )0;
sqlstm.sqharm[10] = (unsigned int )0;
sqlstm.sqadto[10] = (unsigned short )0;
sqlstm.sqtdso[10] = (unsigned short )0;
sqlstm.sqhstv[11] = ( void *)&r13;
sqlstm.sqhstl[11] = (unsigned int )sizeof(double);
sqlstm.sqhsts[11] = ( int )0;
sqlstm.sqindv[11] = ( void *)0;
sqlstm.sqinds[11] = ( int )0;
sqlstm.sqharm[11] = (unsigned int )0;
sqlstm.sqadto[11] = (unsigned short )0;
sqlstm.sqtdso[11] = (unsigned short )0;
sqlstm.sqhstv[12] = ( void *)&r21;
sqlstm.sqhstl[12] = (unsigned int )sizeof(double);
sqlstm.sqhsts[12] = ( int )0;
sqlstm.sqindv[12] = ( void *)0;
sqlstm.sqinds[12] = ( int )0;
sqlstm.sqharm[12] = (unsigned int )0;
sqlstm.sqadto[12] = (unsigned short )0;
sqlstm.sqtdso[12] = (unsigned short )0;
sqlstm.sqhstv[13] = ( void *)&r22;
sqlstm.sqhstl[13] = (unsigned int )sizeof(double);
sqlstm.sqhsts[13] = ( int )0;
sqlstm.sqindv[13] = ( void *)0;
sqlstm.sqinds[13] = ( int )0;
sqlstm.sqharm[13] = (unsigned int )0;
sqlstm.sqadto[13] = (unsigned short )0;
sqlstm.sqtdso[13] = (unsigned short )0;
sqlstm.sqhstv[14] = ( void *)&r23;
sqlstm.sqhstl[14] = (unsigned int )sizeof(double);
sqlstm.sqhsts[14] = ( int )0;
sqlstm.sqindv[14] = ( void *)0;
sqlstm.sqinds[14] = ( int )0;
sqlstm.sqharm[14] = (unsigned int )0;
sqlstm.sqadto[14] = (unsigned short )0;
sqlstm.sqtdso[14] = (unsigned short )0;
sqlstm.sqhstv[15] = ( void *)&r31;
sqlstm.sqhstl[15] = (unsigned int )sizeof(double);
sqlstm.sqhsts[15] = ( int )0;
sqlstm.sqindv[15] = ( void *)0;
sqlstm.sqinds[15] = ( int )0;
sqlstm.sqharm[15] = (unsigned int )0;
sqlstm.sqadto[15] = (unsigned short )0;
sqlstm.sqtdso[15] = (unsigned short )0;
sqlstm.sqhstv[16] = ( void *)&r32;
sqlstm.sqhstl[16] = (unsigned int )sizeof(double);
sqlstm.sqhsts[16] = ( int )0;
sqlstm.sqindv[16] = ( void *)0;
sqlstm.sqinds[16] = ( int )0;
sqlstm.sqharm[16] = (unsigned int )0;
sqlstm.sqadto[16] = (unsigned short )0;
sqlstm.sqtdso[16] = (unsigned short )0;
sqlstm.sqhstv[17] = ( void *)&r33;
sqlstm.sqhstl[17] = (unsigned int )sizeof(double);
sqlstm.sqhsts[17] = ( int )0;
sqlstm.sqindv[17] = ( void *)0;
sqlstm.sqinds[17] = ( int )0;
sqlstm.sqharm[17] = (unsigned int )0;
sqlstm.sqadto[17] = (unsigned short )0;
sqlstm.sqtdso[17] = (unsigned short )0;
sqlstm.sqhstv[18] = ( void *)&id;
sqlstm.sqhstl[18] = (unsigned int )sizeof(int);
sqlstm.sqhsts[18] = ( int )0;
sqlstm.sqindv[18] = ( void *)0;
sqlstm.sqinds[18] = ( int )0;
sqlstm.sqharm[18] = (unsigned int )0;
sqlstm.sqadto[18] = (unsigned short )0;
sqlstm.sqtdso[18] = (unsigned short )0;
sqlstm.sqphsv = sqlstm.sqhstv;
sqlstm.sqphsl = sqlstm.sqhstl;
sqlstm.sqphss = sqlstm.sqhsts;
sqlstm.sqpind = sqlstm.sqindv;
sqlstm.sqpins = sqlstm.sqinds;
sqlstm.sqparm = sqlstm.sqharm;
sqlstm.sqparc = sqlstm.sqharc;
sqlstm.sqpadto = sqlstm.sqadto;
sqlstm.sqptdso = sqlstm.sqtdso;
sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
if (sqlca.sqlcode == 1403) goto error_found;
if (sqlca.sqlcode < 0) goto error_found;
}
rc=insertVolumePoints(id,node);
} else rc=kFALSE;
}
if (rc) {
cout<<"Number of inserts: "<<n<<'\n';
pConn->commit();
cout<<"****************************************************************\n";
return kTRUE;
}
return kFALSE;
error_found:
if (node) {
TString s("error in volume ");
s.Append(node->GetName());
pConn->showSqlError("write(HGeomSet*)",s );
}
else pConn->showSqlError("write(HGeomSet*)","No volumes written");
pConn->rollback();
return kFALSE;
}
Bool_t HGeomOraIo::insertVolumePoints(Int_t volId,HGeomNode* node) {
if (!node||volId<=0) return kFALSE;
int id[NMAX_GEOSMALL];
int no[NMAX_GEOSMALL];
double px[NMAX_GEOSMALL];
double py[NMAX_GEOSMALL];
double pz[NMAX_GEOSMALL];
int rowsToInsert;
rowsToInsert=node->getNumPoints();
if (rowsToInsert<3) {
Error("insertVolumePoints","Too few points for volume %s\n",
node->GetName());
return kFALSE;
}
if (rowsToInsert>NMAX_GEOSMALL) {
Error("insertVolumePoints","Number of points of volume %s exceeds %n\n",
node->GetName(),NMAX_GEOSMALL);
return kFALSE;
}
for (Int_t i=0;i<rowsToInsert;i++) {
id[i]=volId;
no[i]=i+1;
HGeomVector* p=node->getPoint(i);
if (!p) {
Error("insertVolumePoints","Point %i for volume %s is NULL\n",
i,node->GetName());
return kFALSE;
}
px[i]=(*p)(0);
py[i]=(*p)(1);
pz[i]=(*p)(2);
}
{
struct sqlexd sqlstm;
sqlorat((void **)0, &sqlctx, &oraca);
sqlstm.sqlvsn = 12;
sqlstm.arrsiz = 19;
sqlstm.sqladtp = &sqladt;
sqlstm.sqltdsp = &sqltds;
sqlstm.stmt = "insert into hgeom.volume_points_load (obj_id,point_num,x,y,\
z) values (:b1,:b2,:b3,:b4,:b5)";
sqlstm.iters = (unsigned int )rowsToInsert;
sqlstm.offset = (unsigned int )885;
sqlstm.cud = sqlcud0;
sqlstm.sqlest = (unsigned char *)&sqlca;
sqlstm.sqlety = (unsigned short)256;
sqlstm.occurs = (unsigned int )0;
sqlstm.sqhstv[0] = ( void *)id;
sqlstm.sqhstl[0] = (unsigned int )sizeof(int);
sqlstm.sqhsts[0] = ( int )sizeof(int);
sqlstm.sqindv[0] = ( void *)0;
sqlstm.sqinds[0] = ( int )0;
sqlstm.sqharm[0] = (unsigned int )0;
sqlstm.sqharc[0] = (unsigned int *)0;
sqlstm.sqadto[0] = (unsigned short )0;
sqlstm.sqtdso[0] = (unsigned short )0;
sqlstm.sqhstv[1] = ( void *)no;
sqlstm.sqhstl[1] = (unsigned int )sizeof(int);
sqlstm.sqhsts[1] = ( int )sizeof(int);
sqlstm.sqindv[1] = ( void *)0;
sqlstm.sqinds[1] = ( int )0;
sqlstm.sqharm[1] = (unsigned int )0;
sqlstm.sqharc[1] = (unsigned int *)0;
sqlstm.sqadto[1] = (unsigned short )0;
sqlstm.sqtdso[1] = (unsigned short )0;
sqlstm.sqhstv[2] = ( void *)px;
sqlstm.sqhstl[2] = (unsigned int )sizeof(double);
sqlstm.sqhsts[2] = ( int )sizeof(double);
sqlstm.sqindv[2] = ( void *)0;
sqlstm.sqinds[2] = ( int )0;
sqlstm.sqharm[2] = (unsigned int )0;
sqlstm.sqharc[2] = (unsigned int *)0;
sqlstm.sqadto[2] = (unsigned short )0;
sqlstm.sqtdso[2] = (unsigned short )0;
sqlstm.sqhstv[3] = ( void *)py;
sqlstm.sqhstl[3] = (unsigned int )sizeof(double);
sqlstm.sqhsts[3] = ( int )sizeof(double);
sqlstm.sqindv[3] = ( void *)0;
sqlstm.sqinds[3] = ( int )0;
sqlstm.sqharm[3] = (unsigned int )0;
sqlstm.sqharc[3] = (unsigned int *)0;
sqlstm.sqadto[3] = (unsigned short )0;
sqlstm.sqtdso[3] = (unsigned short )0;
sqlstm.sqhstv[4] = ( void *)pz;
sqlstm.sqhstl[4] = (unsigned int )sizeof(double);
sqlstm.sqhsts[4] = ( int )sizeof(double);
sqlstm.sqindv[4] = ( void *)0;
sqlstm.sqinds[4] = ( int )0;
sqlstm.sqharm[4] = (unsigned int )0;
sqlstm.sqharc[4] = (unsigned int *)0;
sqlstm.sqadto[4] = (unsigned short )0;
sqlstm.sqtdso[4] = (unsigned short )0;
sqlstm.sqphsv = sqlstm.sqhstv;
sqlstm.sqphsl = sqlstm.sqhstl;
sqlstm.sqphss = sqlstm.sqhsts;
sqlstm.sqpind = sqlstm.sqindv;
sqlstm.sqpins = sqlstm.sqinds;
sqlstm.sqparm = sqlstm.sqharm;
sqlstm.sqparc = sqlstm.sqharc;
sqlstm.sqpadto = sqlstm.sqadto;
sqlstm.sqptdso = sqlstm.sqtdso;
sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
if (sqlca.sqlcode == 1403) goto error_found;
if (sqlca.sqlcode < 0) goto error_found;
}
return kTRUE;
error_found:
TString s("error in volume ");
s.Append(node->GetName());
pConn->showSqlError("insertVolumePoints",s);
pConn->rollback();
return kFALSE;
}
const Char_t* HGeomOraIo::calcRefTransform(HGeomNode* node,
HGeomTransform& refTransform) {
if (!node) return 0;
refTransform.clear();
if (node->isTopNode()) {
refTransform.clear();
return node->GetName();
}
if (node->isModule()) {
const Char_t* moName=node->getMother().Data();
if (strncmp(moName,"TFN",3)==0) {
refTransform=node->getTransform();
return moName;
} else {
HGeomTransform* t=node->getLabTransform();
if (t) {
refTransform=*t;
return "CAVE";
} else return 0;
}
}
HGeomNode* currNode=node;
refTransform=node->getTransform();
HGeomNode* pm;
while (currNode) {
pm=currNode->getMotherNode();
if (!pm) {
Error("calcRefTransform","Mother volume of %s not found!",
node->GetName());
return 0;
}
if (pm->isModule()||pm->isTopNode()) break;
refTransform.transFrom(pm->getTransform());
currNode=pm;
}
return pm->GetName();
}
Int_t HGeomOraIo::checkRunidExistence(Int_t run) {
if (run<=0||!pConn->isOpen()) return 1;
if (!pConn) return 0;
int id;
int pout;
id=run;
{
struct sqlexd sqlstm;
sqlorat((void **)0, &sqlctx, &oraca);
sqlstm.sqlvsn = 12;
sqlstm.arrsiz = 19;
sqlstm.sqladtp = &sqladt;
sqlstm.sqltdsp = &sqltds;
sqlstm.stmt = "select 1 into :b0 from hanal.all_run_ids where run_id=:b1";
sqlstm.iters = (unsigned int )1;
sqlstm.offset = (unsigned int )920;
sqlstm.selerr = (unsigned short)1;
sqlstm.cud = sqlcud0;
sqlstm.sqlest = (unsigned char *)&sqlca;
sqlstm.sqlety = (unsigned short)256;
sqlstm.occurs = (unsigned int )0;
sqlstm.sqhstv[0] = ( void *)&pout;
sqlstm.sqhstl[0] = (unsigned int )sizeof(int);
sqlstm.sqhsts[0] = ( int )0;
sqlstm.sqindv[0] = ( void *)0;
sqlstm.sqinds[0] = ( int )0;
sqlstm.sqharm[0] = (unsigned int )0;
sqlstm.sqadto[0] = (unsigned short )0;
sqlstm.sqtdso[0] = (unsigned short )0;
sqlstm.sqhstv[1] = ( void *)&id;
sqlstm.sqhstl[1] = (unsigned int )sizeof(int);
sqlstm.sqhsts[1] = ( int )0;
sqlstm.sqindv[1] = ( void *)0;
sqlstm.sqinds[1] = ( int )0;
sqlstm.sqharm[1] = (unsigned int )0;
sqlstm.sqadto[1] = (unsigned short )0;
sqlstm.sqtdso[1] = (unsigned short )0;
sqlstm.sqphsv = sqlstm.sqhstv;
sqlstm.sqphsl = sqlstm.sqhstl;
sqlstm.sqphss = sqlstm.sqhsts;
sqlstm.sqpind = sqlstm.sqindv;
sqlstm.sqpins = sqlstm.sqinds;
sqlstm.sqparm = sqlstm.sqharm;
sqlstm.sqparc = sqlstm.sqharc;
sqlstm.sqpadto = sqlstm.sqadto;
sqlstm.sqptdso = sqlstm.sqtdso;
sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
if (sqlca.sqlcode == 1403) goto notfound;
if (sqlca.sqlcode < 0) goto errorfound;
}
return pout;
notfound:
return 0;
errorfound:
pConn->showSqlError("checkRunidExistence");
return 1;
}
Int_t HGeomOraIo::createHitVersion(const Char_t* part,const Char_t* hitSet) {
if (strlen(part)==0||strlen(hitSet)==0) return kFALSE;
int vers=-1;
char* pP;
char* pH;
pP=(Char_t*)part;
pH=(Char_t*)hitSet;
{
struct sqlexd sqlstm;
sqlorat((void **)0, &sqlctx, &oraca);
sqlstm.sqlvsn = 12;
sqlstm.arrsiz = 19;
sqlstm.sqladtp = &sqladt;
sqlstm.sqltdsp = &sqltds;
sqlstm.stmt = "declare BEGIN hgeom . geom_load_public . insert_hit_version\
( :pP , :pH , :vers ) ; END ;";
sqlstm.iters = (unsigned int )1;
sqlstm.offset = (unsigned int )943;
sqlstm.cud = sqlcud0;
sqlstm.sqlest = (unsigned char *)&sqlca;
sqlstm.sqlety = (unsigned short)256;
sqlstm.occurs = (unsigned int )0;
sqlstm.sqhstv[0] = ( void *)pP;
sqlstm.sqhstl[0] = (unsigned int )0;
sqlstm.sqhsts[0] = ( int )0;
sqlstm.sqindv[0] = ( void *)0;
sqlstm.sqinds[0] = ( int )0;
sqlstm.sqharm[0] = (unsigned int )0;
sqlstm.sqadto[0] = (unsigned short )0;
sqlstm.sqtdso[0] = (unsigned short )0;
sqlstm.sqhstv[1] = ( void *)pH;
sqlstm.sqhstl[1] = (unsigned int )0;
sqlstm.sqhsts[1] = ( int )0;
sqlstm.sqindv[1] = ( void *)0;
sqlstm.sqinds[1] = ( int )0;
sqlstm.sqharm[1] = (unsigned int )0;
sqlstm.sqadto[1] = (unsigned short )0;
sqlstm.sqtdso[1] = (unsigned short )0;
sqlstm.sqhstv[2] = ( void *)&vers;
sqlstm.sqhstl[2] = (unsigned int )sizeof(int);
sqlstm.sqhsts[2] = ( int )0;
sqlstm.sqindv[2] = ( void *)0;
sqlstm.sqinds[2] = ( int )0;
sqlstm.sqharm[2] = (unsigned int )0;
sqlstm.sqadto[2] = (unsigned short )0;
sqlstm.sqtdso[2] = (unsigned short )0;
sqlstm.sqphsv = sqlstm.sqhstv;
sqlstm.sqphsl = sqlstm.sqhstl;
sqlstm.sqphss = sqlstm.sqhsts;
sqlstm.sqpind = sqlstm.sqindv;
sqlstm.sqpins = sqlstm.sqinds;
sqlstm.sqparm = sqlstm.sqharm;
sqlstm.sqparc = sqlstm.sqharc;
sqlstm.sqpadto = sqlstm.sqadto;
sqlstm.sqptdso = sqlstm.sqtdso;
sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
if (sqlca.sqlcode == 1403) goto error_found;
if (sqlca.sqlcode < 0) goto error_found;
}
cout<<"****************************************************************\n";
cout<<"***** Inserts in Oracle \n";
cout<<"****************************************************************\n";
cout<<"Part: "<<part<<'\n';
cout<<"Version: "<<vers<<'\n';
return vers;
error_found:
pConn->showSqlError("createHitVersion");
pConn->rollback();
return -1;
};
Bool_t HGeomOraIo::write(HGeomHit* hits) {
if (!hits||!pConn->isOpen()||!pConn->isWritable()) return kFALSE;
Int_t version=createHitVersion(hits->getDetectorName(),hits->GetName());
if (version<=0) return kFALSE;
int vers[NMAX_GEOSMALL];
int cnum[NMAX_GEOSMALL];
char chn[NMAX_GEOSMALL][5];
int nbi[NMAX_GEOSMALL];
float ori[NMAX_GEOSMALL];
float fac[NMAX_GEOSMALL];
int nComp;
nComp = hits->getNh();
Char_t* chnamh=hits->getChnamh();
for (Int_t i=0;i<nComp;i++) {
vers[i]=version;
cnum[i]=i+1;
memcpy(chn[i],&chnamh[i*5],5);
}
memcpy((Char_t*)nbi,(Char_t*)hits->getNbitsh(),nComp*sizeof(Int_t));
memcpy((Char_t*)ori,(Char_t*)hits->getOrig(),nComp*sizeof(Float_t));
memcpy((Char_t*)fac,(Char_t*)hits->getFact(),nComp*sizeof(Float_t));
{
struct sqlexd sqlstm;
sqlorat((void **)0, &sqlctx, &oraca);
sqlstm.sqlvsn = 12;
sqlstm.arrsiz = 19;
sqlstm.sqladtp = &sqladt;
sqlstm.sqltdsp = &sqltds;
sqlstm.stmt = "insert into hgeom.geant_hit_component (hit_id,comp_num,comp\
_chnamh,comp_nbitsh,comp_orig,comp_fact) values (:b1,:b2,:b3,:b4,:b5,:b6)";
sqlstm.iters = (unsigned int )nComp;
sqlstm.offset = (unsigned int )970;
sqlstm.cud = sqlcud0;
sqlstm.sqlest = (unsigned char *)&sqlca;
sqlstm.sqlety = (unsigned short)256;
sqlstm.occurs = (unsigned int )0;
sqlstm.sqhstv[0] = ( void *)vers;
sqlstm.sqhstl[0] = (unsigned int )sizeof(int);
sqlstm.sqhsts[0] = ( int )sizeof(int);
sqlstm.sqindv[0] = ( void *)0;
sqlstm.sqinds[0] = ( int )0;
sqlstm.sqharm[0] = (unsigned int )0;
sqlstm.sqharc[0] = (unsigned int *)0;
sqlstm.sqadto[0] = (unsigned short )0;
sqlstm.sqtdso[0] = (unsigned short )0;
sqlstm.sqhstv[1] = ( void *)cnum;
sqlstm.sqhstl[1] = (unsigned int )sizeof(int);
sqlstm.sqhsts[1] = ( int )sizeof(int);
sqlstm.sqindv[1] = ( void *)0;
sqlstm.sqinds[1] = ( int )0;
sqlstm.sqharm[1] = (unsigned int )0;
sqlstm.sqharc[1] = (unsigned int *)0;
sqlstm.sqadto[1] = (unsigned short )0;
sqlstm.sqtdso[1] = (unsigned short )0;
sqlstm.sqhstv[2] = ( void *)chn;
sqlstm.sqhstl[2] = (unsigned int )5;
sqlstm.sqhsts[2] = ( int )5;
sqlstm.sqindv[2] = ( void *)0;
sqlstm.sqinds[2] = ( int )0;
sqlstm.sqharm[2] = (unsigned int )0;
sqlstm.sqharc[2] = (unsigned int *)0;
sqlstm.sqadto[2] = (unsigned short )0;
sqlstm.sqtdso[2] = (unsigned short )0;
sqlstm.sqhstv[3] = ( void *)nbi;
sqlstm.sqhstl[3] = (unsigned int )sizeof(int);
sqlstm.sqhsts[3] = ( int )sizeof(int);
sqlstm.sqindv[3] = ( void *)0;
sqlstm.sqinds[3] = ( int )0;
sqlstm.sqharm[3] = (unsigned int )0;
sqlstm.sqharc[3] = (unsigned int *)0;
sqlstm.sqadto[3] = (unsigned short )0;
sqlstm.sqtdso[3] = (unsigned short )0;
sqlstm.sqhstv[4] = ( void *)ori;
sqlstm.sqhstl[4] = (unsigned int )sizeof(float);
sqlstm.sqhsts[4] = ( int )sizeof(float);
sqlstm.sqindv[4] = ( void *)0;
sqlstm.sqinds[4] = ( int )0;
sqlstm.sqharm[4] = (unsigned int )0;
sqlstm.sqharc[4] = (unsigned int *)0;
sqlstm.sqadto[4] = (unsigned short )0;
sqlstm.sqtdso[4] = (unsigned short )0;
sqlstm.sqhstv[5] = ( void *)fac;
sqlstm.sqhstl[5] = (unsigned int )sizeof(float);
sqlstm.sqhsts[5] = ( int )sizeof(float);
sqlstm.sqindv[5] = ( void *)0;
sqlstm.sqinds[5] = ( int )0;
sqlstm.sqharm[5] = (unsigned int )0;
sqlstm.sqharc[5] = (unsigned int *)0;
sqlstm.sqadto[5] = (unsigned short )0;
sqlstm.sqtdso[5] = (unsigned short )0;
sqlstm.sqphsv = sqlstm.sqhstv;
sqlstm.sqphsl = sqlstm.sqhstl;
sqlstm.sqphss = sqlstm.sqhsts;
sqlstm.sqpind = sqlstm.sqindv;
sqlstm.sqpins = sqlstm.sqinds;
sqlstm.sqparm = sqlstm.sqharm;
sqlstm.sqparc = sqlstm.sqharc;
sqlstm.sqpadto = sqlstm.sqadto;
sqlstm.sqptdso = sqlstm.sqtdso;
sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
if (sqlca.sqlcode == 1403) goto error_found;
if (sqlca.sqlcode < 0) goto error_found;
}
cout<<nComp<<" rows inserted\n";
pConn->commit();
return kTRUE;
error_found:
pConn->showSqlError("write(HGeomHit*)");
pConn->rollback();
return kFALSE;
}
Last change: Sat May 22 12:56:29 2010
Last generated: 2010-05-22 12:56
This page has been automatically generated. If you have any comments or suggestions about the page layout send a mail to ROOT support, or contact the developers with any questions or problems regarding ROOT.