//_HADES_CLASS_DESCRIPTION ////////////////////////////////////////////////////////////////////////////// // HFRpcParOra2Io // // Interface class to database Oracle for input/output of parameters needed // by the FWDET for runs since 2019 // (uses the Oracle C/C++ precompiler) // ////////////////////////////////////////////////////////////////////////////// using namespace std; #include "hfrpcparora2io.h" #include "hparora2set.h" #include "hfrpctrb3lookup.h" #include "hfrpcgeompar.h" #include "hfrpccalpar.h" #include "hfrpcstrippar.h" #include "hgeomcompositevolume.h" #include "hora2geomdetversion.h" #include "hora2geomobj.h" //#include "fwdetdef.h" // JAM2019 - here we have const int instead defines. does this work for precompiler arrays? // better redefine it here: #define FRPC_MAX_SECTORS 4 #define FRPC_MAX_MODULES 1 #define FRPC_MAX_COLUMNS 2 #define FRPC_MAX_STRIPS 32 #define FRPC_MAX_NFCONF 2 #define FRPC_MAX_GLOBALCELLS \ FRPC_MAX_SECTORS * FRPC_MAX_COLUMNS * FRPC_MAX_STRIPS * FRPC_MAX_NFCONF // = 512 #define FRPC_MAX_GLOBAL_LAYERS FRPC_MAX_SECTORS * FRPC_MAX_MODULES * FRPC_MAX_COLUMNS #define FRPC_MAX_LAYER_CELLS FRPC_MAX_STRIPS * FRPC_MAX_NFCONF #define FRPC_STRIPPAR_ZONES 25 // redefine here to avoid trouble with const int arrays and ora precompiler JAM22 #include "TClass.h" #include "TList.h" #include #include #include #define SQLCA_STORAGE_CLASS extern #define ORACA_STORAGE_CLASS extern // Oracle communication area #include // SQL Communications Area #include ClassImp(HFRpcParOra2Io) HFRpcParOra2Io::HFRpcParOra2Io(HOra2Conn* pC) : HDetParOra2Io(pC) { // constructor // sets the name of the I/O class "HFRpcParIo" // gets the pointer to the connection class fName="HFRpcParIo"; initModules=new TArrayI(FRPC_MAX_GLOBAL_LAYERS); geomVers=0; sensVolume=0; } HFRpcParOra2Io::~HFRpcParOra2Io(void) { // destructor if (initModules) delete initModules; if (geomVers) delete geomVers; if (sensVolume) delete sensVolume; } Bool_t HFRpcParOra2Io::init(HParSet* pPar,Int_t* set) { // calls special read-function for each parameter container if (getRunStart(pPar)<0) { pPar->setInputVersion(-1,inputNumber); return kFALSE; } const Text_t* name=pPar->IsA()->GetName(); if (strcmp(name,"HFRpcTrb3Lookup")==0) return read(((HFRpcTrb3Lookup*)pPar)); if (strcmp(name,"HFRpcCalPar")==0) return read(((HFRpcCalPar*)pPar)); if (strcmp(name,"HFRpcStripPar")==0) return read(((HFRpcStripPar*)pPar)); if (strcmp(name,"HFRpcGeomPar")==0) return read(((HFRpcGeomPar*)pPar),set); cout<<"No read-interface to Oracle for parameter container " <GetName()<IsA()->GetName(); cout <<"HFRpcParOra2Io::write("<GetName()<contextId==-1 || runStart==-1) { pPar->setInputVersion(-1,inputNumber); version=-1; return kFALSE; } Int_t contVers=pPar->getInputVersion(inputNumber); if (contVers!=-1 && runStart>=oraSet->versDate[0] && runStart<=oraSet->versDate[1]) { version=contVers; return kFALSE; } const Char_t* containerClass=pPar->IsA()->GetName(); oraSet->clearVersDate(); EXEC SQL BEGIN DECLARE SECTION; int context; int vers; double since; double until; EXEC SQL END DECLARE SECTION; context=oraSet->contextId; EXEC SQL WHENEVER SQLERROR DO showSqlError("getVersion(HParSet*,Int_t&)"); EXEC SQL WHENEVER NOT FOUND GOTO notfound; if (strcmp(containerClass,"HFRpcTrb3Lookup")==0) { EXEC SQL SELECT version, hanadate.date_to_number(valid_since), hanadate.date_to_number(valid_until) INTO :vers, :since, :until FROM fwdet_ana2.frpc_trb3lookup_vers_at_date WHERE context_id = :context; } else if (strcmp(containerClass,"HFRpcCalPar")==0) { EXEC SQL SELECT version, hanadate.date_to_number(valid_since), hanadate.date_to_number(valid_until) INTO :vers, :since, :until FROM fwdet_ana2.frpc_calpar_vers_at_date WHERE context_id = :context; } else if (strcmp(containerClass,"HFRpcStripPar")==0) { EXEC SQL SELECT version, hanadate.date_to_number(valid_since), hanadate.date_to_number(valid_until) INTO :vers, :since, :until FROM fwdet_ana2.frpc_strippar_vers_at_date WHERE context_id = :context; } else {} version=vers; oraSet->versDate[0]=since; oraSet->versDate[1]=until; return kTRUE; notfound: pPar->setInputVersion(-1,inputNumber); version=-1; return kFALSE; }; Bool_t HFRpcParOra2Io::read(HFRpcTrb3Lookup* pPar) { // reads the lookup table for the Trb3 unpacker and fill the container FRpcTrb3Lookup Int_t oraVersion=-1; Bool_t rc=getVersion(pPar,oraVersion); if (oraVersion<0) return kFALSE; if (oraVersion>=0&&rc==kFALSE) return kTRUE; pPar->clear(); EXEC SQL BEGIN DECLARE SECTION; int vers; struct { int address[FRPC_MAX_GLOBALCELLS]; int channel[FRPC_MAX_GLOBALCELLS]; int sector[FRPC_MAX_GLOBALCELLS]; int column[FRPC_MAX_GLOBALCELLS]; int strip[FRPC_MAX_GLOBALCELLS]; char side[FRPC_MAX_GLOBALCELLS][2]; } lookup; struct { short address_Ind[FRPC_MAX_GLOBALCELLS]; short chan_Ind[FRPC_MAX_GLOBALCELLS]; short sector_Ind[FRPC_MAX_GLOBALCELLS]; short col_Ind[FRPC_MAX_GLOBALCELLS]; short strip_Ind[FRPC_MAX_GLOBALCELLS]; short side_Ind[FRPC_MAX_GLOBALCELLS]; } lookup_Ind; EXEC SQL END DECLARE SECTION; vers=oraVersion; EXEC SQL WHENEVER SQLERROR DO showSqlError("read(HFRpcTrb3Lookup*)"); EXEC SQL WHENEVER NOT FOUND CONTINUE; EXEC SQL SELECT trbnet_address, channel, module, layer, strip, side INTO :lookup INDICATOR :lookup_Ind FROM fwdet_ana2.frpc_trb3lookup_data_view WHERE vers_id = :vers; Int_t nData=sqlca.sqlerrd[2]; for (Int_t i=0;ifill(lookup.address[i],lookup.channel[i], lookup.sector[i]-1,lookup.column[i]-1, lookup.strip[i]-1, s); } rc=kTRUE; if (nData>0) { setChanged(pPar,oraVersion); cout<GetName()<<" initialized from Oracle"<setInputVersion(-1,inputNumber); rc=kFALSE; } return rc; } // //// TODO JAM // Bool_t HFRpcParOra2Io::read(HFRpcCalPar* pPar) { // reads the lookup table for the Trb3 unpacker and fill the container FRpcTrb3Lookup Int_t oraVersion=-1; Bool_t rc=getVersion(pPar,oraVersion); if (oraVersion<0) return kFALSE; if (oraVersion>=0&&rc==kFALSE) return kTRUE; pPar->clear(); EXEC SQL BEGIN DECLARE SECTION; int vers; int globalstrip; struct { int sector[FRPC_MAX_GLOBALCELLS]; int layer[FRPC_MAX_GLOBALCELLS]; int strip[FRPC_MAX_GLOBALCELLS]; float q_threshold_n[FRPC_MAX_GLOBALCELLS]; float q_threshold_f[FRPC_MAX_GLOBALCELLS]; float time_offset[FRPC_MAX_GLOBALCELLS]; float pos_offset[FRPC_MAX_GLOBALCELLS]; float prop_corr[FRPC_MAX_GLOBALCELLS]; float twc_par_0[FRPC_MAX_GLOBALCELLS]; float twc_par_1[FRPC_MAX_GLOBALCELLS]; float twc_par_2[FRPC_MAX_GLOBALCELLS]; } cal; struct { short sector[FRPC_MAX_GLOBALCELLS]; short layer[FRPC_MAX_GLOBALCELLS]; short strip[FRPC_MAX_GLOBALCELLS]; short q_threshold_n[FRPC_MAX_GLOBALCELLS]; short q_threshold_f[FRPC_MAX_GLOBALCELLS]; short time_offset[FRPC_MAX_GLOBALCELLS]; short pos_offset[FRPC_MAX_GLOBALCELLS]; short prop_corr[FRPC_MAX_GLOBALCELLS]; short twc_par_0[FRPC_MAX_GLOBALCELLS]; short twc_par_1[FRPC_MAX_GLOBALCELLS]; short twc_par_2[FRPC_MAX_GLOBALCELLS]; } cal_Ind; EXEC SQL END DECLARE SECTION; vers=oraVersion; EXEC SQL WHENEVER SQLERROR DO showSqlError("read(HFRpcCalPar*,Int_t*)"); EXEC SQL WHENEVER NOT FOUND CONTINUE; EXEC SQL SELECT sector, column_number, strip_number, q_threshold_n, q_threshold_f, time_offset, pos_offset, prop_corr, twc_par_0, twc_par_1, twc_par_2 INTO :cal INDICATOR :cal_Ind FROM fwdet_ana2.frpc_calpar_data_view WHERE vers_id = :vers; Int_t nData=sqlca.sqlerrd[2]; Int_t sec=-1, mod=-1, pos=-1; for(Int_t i=0;iAddAt(1,pos); } } Bool_t allFound=kTRUE; // if (nData>0) { // for(Int_t i=0;iAt(i)==0) allFound=kFALSE; // } // } else allFound=kFALSE; // if (allFound) { setChanged(pPar,oraVersion); printInfo(pPar->GetName()); } else { pPar->setInputVersion(-1,inputNumber); } return allFound; } Bool_t HFRpcParOra2Io::read(HFRpcStripPar* pPar) { // reads the lookup table for the Trb3 unpacker and fill the container FRpcTrb3Lookup Int_t oraVersion=-1; Bool_t rc=getVersion(pPar,oraVersion); if (oraVersion<0) return kFALSE; if (oraVersion>=0&&rc==kFALSE) return kTRUE; pPar->clear(); EXEC SQL BEGIN DECLARE SECTION; int vers; int globalstrip; struct { int sector[FRPC_MAX_GLOBALCELLS]; int layer[FRPC_MAX_GLOBALCELLS]; int strip[FRPC_MAX_GLOBALCELLS]; // JAM 28.05. not clever, but don't know if oracle precompiler can handle 2d array... float strip_par_00[FRPC_MAX_GLOBALCELLS]; float strip_par_01[FRPC_MAX_GLOBALCELLS]; float strip_par_02[FRPC_MAX_GLOBALCELLS]; float strip_par_03[FRPC_MAX_GLOBALCELLS]; float strip_par_04[FRPC_MAX_GLOBALCELLS]; float strip_par_05[FRPC_MAX_GLOBALCELLS]; float strip_par_06[FRPC_MAX_GLOBALCELLS]; float strip_par_07[FRPC_MAX_GLOBALCELLS]; float strip_par_08[FRPC_MAX_GLOBALCELLS]; float strip_par_09[FRPC_MAX_GLOBALCELLS]; float strip_par_10[FRPC_MAX_GLOBALCELLS]; float strip_par_11[FRPC_MAX_GLOBALCELLS]; float strip_par_12[FRPC_MAX_GLOBALCELLS]; float strip_par_13[FRPC_MAX_GLOBALCELLS]; float strip_par_14[FRPC_MAX_GLOBALCELLS]; float strip_par_15[FRPC_MAX_GLOBALCELLS]; float strip_par_16[FRPC_MAX_GLOBALCELLS]; float strip_par_17[FRPC_MAX_GLOBALCELLS]; float strip_par_18[FRPC_MAX_GLOBALCELLS]; float strip_par_19[FRPC_MAX_GLOBALCELLS]; float strip_par_20[FRPC_MAX_GLOBALCELLS]; float strip_par_21[FRPC_MAX_GLOBALCELLS]; float strip_par_22[FRPC_MAX_GLOBALCELLS]; float strip_par_23[FRPC_MAX_GLOBALCELLS]; float strip_par_24[FRPC_MAX_GLOBALCELLS]; } cal; struct { short sector[FRPC_MAX_GLOBALCELLS]; short layer[FRPC_MAX_GLOBALCELLS]; short strip[FRPC_MAX_GLOBALCELLS]; short strip_par_00[FRPC_MAX_GLOBALCELLS]; short strip_par_01[FRPC_MAX_GLOBALCELLS]; short strip_par_02[FRPC_MAX_GLOBALCELLS]; short strip_par_03[FRPC_MAX_GLOBALCELLS]; short strip_par_04[FRPC_MAX_GLOBALCELLS]; short strip_par_05[FRPC_MAX_GLOBALCELLS]; short strip_par_06[FRPC_MAX_GLOBALCELLS]; short strip_par_07[FRPC_MAX_GLOBALCELLS]; short strip_par_08[FRPC_MAX_GLOBALCELLS]; short strip_par_09[FRPC_MAX_GLOBALCELLS]; short strip_par_10[FRPC_MAX_GLOBALCELLS]; short strip_par_11[FRPC_MAX_GLOBALCELLS]; short strip_par_12[FRPC_MAX_GLOBALCELLS]; short strip_par_13[FRPC_MAX_GLOBALCELLS]; short strip_par_14[FRPC_MAX_GLOBALCELLS]; short strip_par_15[FRPC_MAX_GLOBALCELLS]; short strip_par_16[FRPC_MAX_GLOBALCELLS]; short strip_par_17[FRPC_MAX_GLOBALCELLS]; short strip_par_18[FRPC_MAX_GLOBALCELLS]; short strip_par_19[FRPC_MAX_GLOBALCELLS]; short strip_par_20[FRPC_MAX_GLOBALCELLS]; short strip_par_21[FRPC_MAX_GLOBALCELLS]; short strip_par_22[FRPC_MAX_GLOBALCELLS]; short strip_par_23[FRPC_MAX_GLOBALCELLS]; short strip_par_24[FRPC_MAX_GLOBALCELLS]; } cal_Ind; EXEC SQL END DECLARE SECTION; vers=oraVersion; EXEC SQL WHENEVER SQLERROR DO showSqlError("read(HFRpcCalPar*,Int_t*)"); EXEC SQL WHENEVER NOT FOUND CONTINUE; EXEC SQL SELECT sector, column_number, strip_number, strip_par_00, strip_par_01, strip_par_02, strip_par_03, strip_par_04, strip_par_05, strip_par_06, strip_par_07, strip_par_08, strip_par_09, strip_par_10, strip_par_11, strip_par_12, strip_par_13, strip_par_14, strip_par_15, strip_par_16, strip_par_17, strip_par_18, strip_par_19, strip_par_20, strip_par_21, strip_par_22, strip_par_23, strip_par_24 INTO :cal INDICATOR :cal_Ind FROM fwdet_ana2.frpc_strippar_data_view WHERE vers_id = :vers; Int_t nData=sqlca.sqlerrd[2]; Int_t sec=-1, mod=-1, pos=-1; Float_t data[FRPC_STRIPPAR_ZONES]; for(Int_t i=0;iAddAt(1,pos); } } Bool_t allFound=kTRUE; // if (nData>0) { // for(Int_t i=0;iAt(i)==0) allFound=kFALSE; // } // } else allFound=kFALSE; // if (allFound) { setChanged(pPar,oraVersion); printInfo(pPar->GetName()); } else { pPar->setInputVersion(-1,inputNumber); } return allFound; } /////////////////////////// GEOMETRY follows /////////////////////////////////// Bool_t HFRpcParOra2Io::read(HFRpcGeomPar* pPar, Int_t* set) { // reads the geometry of the FRpc and fills the FRpcGeomPar container Bool_t allFound=kTRUE; Int_t detId=-1; if (!geomVers) { detId=getDetectorId(pPar->getDetectorName()); //std::cout<< "HFRpcParOra2Io::read HFRpcGeomPar got id"<getDetectorName() << std::endl; geomVers=new HOra2GeomDetVersion(pPar->getDetectorName(),detId); } else { detId=geomVers->getDetectorId(); } if (detId<=0) { allFound=kFALSE; delete geomVers; geomVers=0; } if (detId>0&&pPar->isFirstInitialization()) { if (!readModGeomNames(pPar,set) || !readCompGeomNames(pPar,set)) { allFound=kFALSE; pPar->clear(); //std::cout<< "HFRpcParOra2Io::read HStsGeomPar failed after readModGeomNames or readCompGeomNames"<< std::endl; } else addGeomOraSet(pPar); } if (allFound) allFound=readDetectorGeometry(pPar,set,geomVers); //std::cout<< "HFRpcParOra2Io::read HStsGeomPar returns"<Reset(); for(Int_t i=0;igetModule(s); //std::cout<< "HFRpcParOra2Io::readModGeomNames has set[s]="<SetName((Char_t*)(mods.oname[i].arr)); initModules->AddAt(s+1,s); // JAM- this will be done twice, but does not hurt in the end // TODO: clarify meaning of reference module in this example! // for the moment, take first module in setup as reference module? HGeomCompositeVolume* refMod=pPar->getRefVolume(0); if (refMod==0) { strcpy(ref,(Char_t*)(mods.oname[i].arr)); refMod=new HGeomCompositeVolume(pPar->getNumComponents()); refMod->SetName(ref); pPar->addRefVolume(refMod,0); } pMod->setVolume(refMod); pMod->setRefName(ref); } } } Bool_t allFound=kTRUE; //for(Int_t i=0;i0 && initModules->At(i)==0) allFound=kFALSE; } //std::cout<< "HFRpcParOra2Io:readModGeomNames returns"<< allFound<< std::endl; return allFound; } Bool_t HFRpcParOra2Io::readCompGeomNames(HFRpcGeomPar* pPar,Int_t* set) { // reads the names of all cells in the geometry tables EXEC SQL BEGIN DECLARE SECTION; struct { int cell_index[FRPC_MAX_LAYER_CELLS]; varchar oname[FRPC_MAX_LAYER_CELLS][9]; } lrecG; EXEC SQL END DECLARE SECTION; EXEC SQL WHENEVER SQLERROR DO showSqlError("readCompGeomNames(...)"); EXEC SQL WHENEVER NOT FOUND CONTINUE; EXEC SQL SELECT cell_index, geom_obj_name INTO :lrecG FROM fwdet_ana2.frpc_layer_cell WHERE geom_obj_name IS NOT NULL; Int_t nCells=sqlca.sqlerrd[2]; Int_t cell=-1; for(Int_t k=0;kgetCompNum(cName); // JAM2021: note that we do _not_ use the Oracle internal cell_index, but a more dense index for TObjArray here //std::cout<< "FRpcParOra2Io::readCompGeomNames got cell"<getRefVolume(0); if(pRefMod==0){ std::cout<<"FRpcParOra2Io::readCompGeomNames ERROR: no reference module for index"<getComponent(cell); if (volu){ volu->SetName(cName); // JAM - this will also be done twice here, since we have same name for both lr_side. does not matter. } else { Error("readCompGeomNames","Index for cell %s not found",cName.Data()); return kFALSE; } } //std::cout<< "FRpcParOra2Io::readCompGeomNames has read"<0) ? kTRUE : kFALSE; } Int_t HFRpcParOra2Io::createVers(HParSet* pPar) { // creates a new version for parameters // returns the new version cout<<"--------------- "<GetName()<<" ---------------\n"; if (strlen(pPar->getAuthor())==0) { Error("createVers(HParSet*)", "author of parameters not defined"); return -1; } if (strlen(pPar->getDescription())==0) { Error("createVers(HParSet*)", "descriction of parameters not defined"); return -1; } const Char_t* contName=pPar->IsA()->GetName(); EXEC SQL BEGIN DECLARE SECTION; int vers=-1; int context; int run; char* creator; char* descript; EXEC SQL END DECLARE SECTION; context = getContextId(contName,pPar->getParamContext()); if (context==-1) return -1; run=getActRunId(); creator=(Char_t*)pPar->getAuthor(); descript=(Char_t*)pPar->getDescription(); EXEC SQL WHENEVER SQLERROR GOTO not_found; EXEC SQL WHENEVER NOT FOUND GOTO not_found; if (strcmp(contName,"HFRpcTrb3Lookup")==0) { EXEC SQL EXECUTE BEGIN SELECT fwdet_ana2.frpc_par_query.next_version INTO :vers FROM DUAL; INSERT INTO fwdet_ana2.frpc_trb3lookup_vers (vers_id, orig_context_id, run_id, author, description) VALUES (:vers, :context, :run, :creator, :descript); END; END-EXEC; } else if (strcmp(contName,"HFRpcCalPar")==0) { EXEC SQL EXECUTE BEGIN SELECT fwdet_ana2.frpc_par_query.next_version INTO :vers FROM DUAL; INSERT INTO fwdet_ana2.frpc_calpar_vers (vers_id, orig_context_id, run_id, author, description) VALUES (:vers, :context, :run, :creator, :descript); END; END-EXEC; } else if (strcmp(contName,"HFRpcStripPar")==0) { EXEC SQL EXECUTE BEGIN SELECT fwdet_ana2.frpc_par_query.next_version INTO :vers FROM DUAL; INSERT INTO fwdet_ana2.frpc_strippar_vers (vers_id, orig_context_id, run_id, author, description) VALUES (:vers, :context, :run, :creator, :descript); END; END-EXEC; } else { } cout<<"Oracle version for "<GetName()<<" created: "<getArrayOffset(); for(Int_t t=0;tgetSize();t++) { HFRpcTrb3LookupTdc* tdc=(*pPar)[t]; if (tdc) { nChan=0; for(Int_t c=0;cgetSize();c++) { HFRpcTrb3LookupChan& rChan=(*tdc)[c]; if (rChan.getSector()!=-1 && rChan.getColumn()!=-1 && rChan.getStrip()!=-1 && rChan.getSide()!=-1) { vers[nChan]=version; address[nChan]=arrayOffset+t; channel[nChan]=c; sector[nChan]=rChan.getSector() +1; column[nChan]=rChan.getColumn() +1; strip[nChan]=rChan.getStrip() +1; side[nChan][0]=rChan.getSide(); if (side[nChan][0]!='\0') { side[nChan][1]='\0'; side_Ind[nChan]=0; } else { side_Ind[nChan]=-1; } nChan++; } } rows_to_insert=nChan; EXEC SQL WHENEVER SQLERROR GOTO errorfound; EXEC SQL WHENEVER NOT FOUND GOTO errorfound; EXEC SQL FOR :rows_to_insert INSERT INTO fwdet_ana2.frpc_trb3lookup_data (vers_id, trbnet_address, channel_id, cell_id) VALUES (:vers, :address, :channel, fwdet_ana2.frpc_par_query.get_cell_id(:sector, :column, :strip, :side:side_Ind) ); cout<<"Trbnet-address "<<"0x"<setChanged(kFALSE); return version; errorfound: showSqlError("writePar(HFRpcTrb3Lookup*)"); rollback(); pPar->setChanged(kFALSE); return -1; } Int_t HFRpcParOra2Io::writePar(HFRpcCalPar* pPar) { // creates a new version and writes the lookup table to Oracle Int_t version=createVers(pPar); if (version==-1) return -1; EXEC SQL BEGIN DECLARE SECTION; int sector[FRPC_MAX_GLOBALCELLS]; int globcell[FRPC_MAX_GLOBALCELLS]; int layer[FRPC_MAX_GLOBALCELLS]; int strip[FRPC_MAX_GLOBALCELLS]; char side[FRPC_MAX_GLOBALCELLS][2]; short side_Ind[FRPC_MAX_GLOBALCELLS]; int vers[FRPC_MAX_GLOBALCELLS]; float q_threshold_n[FRPC_MAX_GLOBALCELLS]; float q_threshold_f[FRPC_MAX_GLOBALCELLS]; float time_offset[FRPC_MAX_GLOBALCELLS]; float pos_offset[FRPC_MAX_GLOBALCELLS]; float prop_corr[FRPC_MAX_GLOBALCELLS]; float twc_par_0[FRPC_MAX_GLOBALCELLS]; float twc_par_1[FRPC_MAX_GLOBALCELLS]; float twc_par_2[FRPC_MAX_GLOBALCELLS]; int rows_to_insert; EXEC SQL END DECLARE SECTION; Int_t nRod=0; for(Int_t s=0; sgetSize(); s++) { HFRpcCalParSec& rSec= (*pPar)[s]; for(Int_t c=0; csetChanged(kFALSE); return version; not_found: showSqlError("writePar(HFRpcCalPar*)"); rollback(); pPar->setChanged(kFALSE); return -1; } Int_t HFRpcParOra2Io::writePar(HFRpcStripPar* pPar) { // creates a new version and writes the lookup table to Oracle Int_t version=createVers(pPar); if (version==-1) return -1; EXEC SQL BEGIN DECLARE SECTION; int sector[FRPC_MAX_GLOBALCELLS]; int globcell[FRPC_MAX_GLOBALCELLS]; int layer[FRPC_MAX_GLOBALCELLS]; int strip[FRPC_MAX_GLOBALCELLS]; char side[FRPC_MAX_GLOBALCELLS][2]; short side_Ind[FRPC_MAX_GLOBALCELLS]; int vers[FRPC_MAX_GLOBALCELLS]; // JAM TODO 28.05. float strip_par_00[FRPC_MAX_GLOBALCELLS]; float strip_par_01[FRPC_MAX_GLOBALCELLS]; float strip_par_02[FRPC_MAX_GLOBALCELLS]; float strip_par_03[FRPC_MAX_GLOBALCELLS]; float strip_par_04[FRPC_MAX_GLOBALCELLS]; float strip_par_05[FRPC_MAX_GLOBALCELLS]; float strip_par_06[FRPC_MAX_GLOBALCELLS]; float strip_par_07[FRPC_MAX_GLOBALCELLS]; float strip_par_08[FRPC_MAX_GLOBALCELLS]; float strip_par_09[FRPC_MAX_GLOBALCELLS]; float strip_par_10[FRPC_MAX_GLOBALCELLS]; float strip_par_11[FRPC_MAX_GLOBALCELLS]; float strip_par_12[FRPC_MAX_GLOBALCELLS]; float strip_par_13[FRPC_MAX_GLOBALCELLS]; float strip_par_14[FRPC_MAX_GLOBALCELLS]; float strip_par_15[FRPC_MAX_GLOBALCELLS]; float strip_par_16[FRPC_MAX_GLOBALCELLS]; float strip_par_17[FRPC_MAX_GLOBALCELLS]; float strip_par_18[FRPC_MAX_GLOBALCELLS]; float strip_par_19[FRPC_MAX_GLOBALCELLS]; float strip_par_20[FRPC_MAX_GLOBALCELLS]; float strip_par_21[FRPC_MAX_GLOBALCELLS]; float strip_par_22[FRPC_MAX_GLOBALCELLS]; float strip_par_23[FRPC_MAX_GLOBALCELLS]; float strip_par_24[FRPC_MAX_GLOBALCELLS]; int rows_to_insert; EXEC SQL END DECLARE SECTION; Int_t nRod=0; Float_t fData[FRPC_STRIPPAR_ZONES]; for(Int_t s=0; sgetSize(); s++) { HFRpcStripParSec& rSec= (*pPar)[s]; for(Int_t c=0; csetChanged(kFALSE); return version; not_found: showSqlError("writePar(HFRpcStripPar*)"); rollback(); pPar->setChanged(kFALSE); return -1; } void HFRpcParOra2Io::printInfo(const Char_t* contName) { // prints the sectors initialized from Oracle Bool_t first=kTRUE; for(Int_t i=0;iAt(i)) { if (first) { cout<