00001 #include "GaudiKernel/MsgStream.h"
00002 #include "TreeTofCalibDataCnv.h"
00003 #include "CalibData/Tof/TofCalibData.h"
00004 #include "CalibDataSvc/IInstrumentName.h"
00005 #include "CalibMySQLCnv/TreeAddress.h"
00006 #include "TFile.h"
00007 #include "TTree.h"
00008 #include "TDirectory.h"
00009 #include "TObject.h"
00010 #include "TBuffer.h"
00011
00012 #include "GaudiKernel/CnvFactory.h"
00013 #include "GaudiKernel/IOpaqueAddress.h"
00014 #include "GaudiKernel/DataObject.h"
00015 #include "GaudiKernel/IAddressCreator.h"
00016 #include "GaudiKernel/IDataProviderSvc.h"
00017 #include "GaudiKernel/IConversionSvc.h"
00018 #include "GaudiKernel/GenericAddress.h"
00019
00020 #include "CalibDataSvc/ICalibTreeSvc.h"
00021 #include "CalibDataSvc/ICalibMetaCnvSvc.h"
00022
00023
00024 #include "CalibData/CalibModel.h"
00025 using namespace CalibData;
00026
00027
00028
00029 const unsigned int nBarAtten = 8;
00030 const unsigned int nBarSpeed = 2;
00031 const unsigned int nBarPar = 10;
00032 const unsigned int nBarParOff = 20;
00033 const unsigned int nBarSigma = 5;
00034 const unsigned int nBarSigCnt = 10;
00035
00036 const unsigned int nBarSigCor = 8;
00037 const unsigned int nBarOffset = 2;
00038
00039 const unsigned int nEndAtten = 5;
00040 const unsigned int nEndSpeed = 4;
00041 const unsigned int nEndPar = 8;
00042 const unsigned int nEndSigma = 5;
00043
00044 const unsigned int nEtfSpeed = 4;
00045 const unsigned int nEtfPar = 20;
00046 const unsigned int nEtfBunch = 4;
00047
00048 TreeTofCalibDataCnv::TreeTofCalibDataCnv( ISvcLocator* svc) :
00049 TreeCalBaseCnv(svc, CLID_Calib_TofCal) {
00050
00051 }
00052
00053
00054 const CLID& TreeTofCalibDataCnv::objType() const {
00055 return CLID_Calib_TofCal;
00056 }
00057
00058 const CLID& TreeTofCalibDataCnv::classID() {
00059 return CLID_Calib_TofCal;
00060 }
00061
00062 StatusCode TreeTofCalibDataCnv::i_createObj(IOpaqueAddress* addr,
00063 DataObject*& refpObject) {
00064
00065 MsgStream log(msgSvc(), "TreeTofCalibDataCnv");
00066 log<<MSG::DEBUG<<"SetProperty"<<endreq;
00067
00068 TreeAddress* add = dynamic_cast<TreeAddress*>(addr);
00069
00070 DatabaseRecord *records=add->pp();
00071
00072 TBufferFile *buf1 = new TBufferFile(TBuffer::kRead);
00073 TBufferFile *buf2 = new TBufferFile(TBuffer::kRead);
00074 TBufferFile *buf3 = new TBufferFile(TBuffer::kRead);
00075 TBufferFile *buf4 = new TBufferFile(TBuffer::kRead);
00076 TBufferFile *buf5 = 0;
00077 TBufferFile *buf6 = 0;
00078
00079 buf1->SetBuffer((*records)["BarTofPar"],512000,kFALSE);
00080 buf2->SetBuffer((*records)["EndTofPar"],512000,kFALSE);
00081 buf3->SetBuffer((*records)["TofConPar"],512000,kFALSE);
00082 buf4->SetBuffer((*records)["BarTof"], 512000,kFALSE);
00083 if( (*records)["EtfTofPar"]!=0 ) {
00084 buf5 = new TBufferFile(TBuffer::kRead);
00085 buf5->SetBuffer((*records)["EtfTofPar"],512000,kFALSE);
00086 }
00087 if( (*records)["EtfTofBunch"]!=0 ) {
00088 buf6 = new TBufferFile(TBuffer::kRead);
00089 buf6->SetBuffer((*records)["EtfTofBunch"],512000,kFALSE);
00090 }
00091
00092 std::cout<<" SftVer is "<<(*records)["SftVer"];
00093 std::cout<<" CalVerSft is "<<(*records)["CalParVer"];
00094 std::cout<<" File name is "<<(*records)["FileName"]<<std::endl;
00095
00096 TTree *btoftree = new TTree();
00097 TTree *etoftree = new TTree();
00098 TTree *etftree = new TTree();
00099 TTree *etfbunchtree = new TTree();
00100 TTree *btofcommontree = new TTree();
00101 TTree *CalibInfo = new TTree();
00102
00103 btoftree->Streamer(*buf1);
00104 etoftree->Streamer(*buf2);
00105 btofcommontree->Streamer(*buf3);
00106 CalibInfo->Streamer(*buf4);
00107 if( buf5 ) {
00108 etftree->Streamer(*buf5);
00109 }
00110 if( buf6 ) {
00111 etfbunchtree->Streamer(*buf6);
00112 }
00113
00114 CalibData::bTofCalibBase bTof;
00115 CalibData::eTofCalibBase eTof;
00116 CalibData::etfCalibBase etf;
00117 CalibData::etfBunchCalibBase etfBunch;
00118 CalibData::bTofCommonCalibBase bTofCommon;
00119 CalibData::tofCalibInfoBase tofinfo;
00120
00121 std::vector<CalibData::bTofCalibBase> tmpbTof;
00122 std::vector<CalibData::eTofCalibBase> tmpeTof;
00123 std::vector<CalibData::etfCalibBase> tmpetf;
00124 std::vector<CalibData::etfBunchCalibBase> tmpetfBunch;
00125 std::vector<CalibData::bTofCommonCalibBase> tmpbTofCommon;
00126 std::vector<CalibData::tofCalibInfoBase> tofinfoCol;
00127
00128
00129 int cnt;
00130
00131 double cnvBarAtten[nBarAtten];
00132 double cnvBarSpeed[nBarSpeed];
00133 double cnvBarPar1[nBarPar];
00134 double cnvBarPar2[nBarPar];
00135 double cnvBarParOff1_bunch0[nBarParOff];
00136 double cnvBarParOff2_bunch0[nBarParOff];
00137 double cnvBarParOff1_bunch1[nBarParOff];
00138 double cnvBarParOff2_bunch1[nBarParOff];
00139 double cnvBarParOff1_bunch2[nBarParOff];
00140 double cnvBarParOff2_bunch2[nBarParOff];
00141 double cnvBarParOff1_bunch3[nBarParOff];
00142 double cnvBarParOff2_bunch3[nBarParOff];
00143 double cnvFLeft[nBarSigma];
00144 double cnvFRight[nBarSigma];
00145 double cnvFCount[nBarSigCnt];
00146
00147 char brname[10];
00148 for( unsigned int i=0; i<nBarAtten; i++ ) {
00149 sprintf( brname, "Atten%i", i );
00150 btoftree -> SetBranchAddress( brname, &cnvBarAtten[i] );
00151 }
00152 for( unsigned int i=0; i<nBarSpeed; i++ ) {
00153 sprintf( brname, "Speed%i", i );
00154 btoftree -> SetBranchAddress( brname, &cnvBarSpeed[i] );
00155 }
00156 for( unsigned int i=0; i<nBarPar; i++ ) {
00157 sprintf( brname, "P%i", i );
00158 btoftree -> SetBranchAddress( brname, &cnvBarPar1[i] );
00159 }
00160 for( unsigned int i=0; i<nBarPar; i++ ) {
00161 sprintf( brname, "P%i", i+nBarPar );
00162 btoftree -> SetBranchAddress( brname, &cnvBarPar2[i] );
00163 }
00164 for( unsigned int i=0; i<nBarParOff; i++ ) {
00165 sprintf( brname, "Bunch0_Poff%i", i );
00166 btoftree -> SetBranchAddress( brname, &cnvBarParOff1_bunch0[i] );
00167 }
00168 for( unsigned int i=0; i<nBarParOff; i++ ) {
00169 sprintf( brname, "Bunch0_Poff%i", i+nBarParOff );
00170 btoftree -> SetBranchAddress( brname, &cnvBarParOff2_bunch0[i] );
00171 }
00172 for( unsigned int i=0; i<nBarParOff; i++ ) {
00173 sprintf( brname, "Bunch1_Poff%i", i );
00174 btoftree -> SetBranchAddress( brname, &cnvBarParOff1_bunch1[i] );
00175 }
00176 for( unsigned int i=0; i<nBarParOff; i++ ) {
00177 sprintf( brname, "Bunch1_Poff%i", i+nBarParOff );
00178 btoftree -> SetBranchAddress( brname, &cnvBarParOff2_bunch1[i] );
00179 }
00180 for( unsigned int i=0; i<nBarParOff; i++ ) {
00181 sprintf( brname, "Bunch2_Poff%i", i );
00182 btoftree -> SetBranchAddress( brname, &cnvBarParOff1_bunch2[i] );
00183 }
00184 for( unsigned int i=0; i<nBarParOff; i++ ) {
00185 sprintf( brname, "Bunch2_Poff%i", i+nBarParOff );
00186 btoftree -> SetBranchAddress( brname, &cnvBarParOff2_bunch2[i] );
00187 }
00188 for( unsigned int i=0; i<nBarParOff; i++ ) {
00189 sprintf( brname, "Bunch3_Poff%i", i );
00190 btoftree -> SetBranchAddress( brname, &cnvBarParOff1_bunch3[i] );
00191 }
00192 for( unsigned int i=0; i<nBarParOff; i++ ) {
00193 sprintf( brname, "Bunch3_Poff%i", i+nBarParOff );
00194 btoftree -> SetBranchAddress( brname, &cnvBarParOff2_bunch3[i] );
00195 }
00196 for( unsigned int i=0; i<nBarSigma; i++ ) {
00197 sprintf( brname, "FLeft%i", i );
00198 btoftree -> SetBranchAddress( brname, &cnvFLeft[i] );
00199 }
00200 for( unsigned int i=0; i<nBarSigma; i++ ) {
00201 sprintf( brname, "FRight%i", i );
00202 btoftree -> SetBranchAddress( brname, &cnvFRight[i] );
00203 }
00204 for( unsigned int i=0; i<nBarSigCnt; i++ ) {
00205 sprintf( brname, "FCounter%i", i );
00206 btoftree -> SetBranchAddress( brname, &cnvFCount[i] );
00207 }
00208
00209 for(cnt=0; cnt<176; cnt++){
00210 btoftree -> GetEntry(cnt);
00211 bTof.setAtten( cnvBarAtten );
00212 bTof.setSpeed( cnvBarSpeed );
00213 bTof.setP1( cnvBarPar1 );
00214 bTof.setP2( cnvBarPar2 );
00215 bTof.setPoff1_bunch0( cnvBarParOff1_bunch0 );
00216 bTof.setPoff2_bunch0( cnvBarParOff2_bunch0 );
00217 bTof.setPoff1_bunch1( cnvBarParOff1_bunch1 );
00218 bTof.setPoff2_bunch1( cnvBarParOff2_bunch1 );
00219 bTof.setPoff1_bunch2( cnvBarParOff1_bunch2 );
00220 bTof.setPoff2_bunch2( cnvBarParOff2_bunch2 );
00221 bTof.setPoff1_bunch3( cnvBarParOff1_bunch3 );
00222 bTof.setPoff2_bunch3( cnvBarParOff2_bunch3 );
00223 bTof.setFPleft( cnvFLeft );
00224 bTof.setFPright( cnvFRight );
00225 bTof.setFPcounter( cnvFCount );
00226 tmpbTof.push_back(bTof);
00227 }
00228
00229
00230 double cnvEndAtten[nEndAtten];
00231 double cnvEndSpeed[nEndSpeed];
00232 double cnvEndPar[nEndPar];
00233 double cnvEndFPar[nEndSigma];
00234
00235 char ecname[10];
00236 for( unsigned int i=0; i<nEndAtten; i++ ) {
00237 sprintf( ecname, "Atten%i", i );
00238 etoftree -> SetBranchAddress( ecname, &cnvEndAtten[i] );
00239 }
00240 for( unsigned int i=0; i<nEndSpeed; i++ ) {
00241 sprintf( ecname, "Speed%i", i );
00242 etoftree -> SetBranchAddress( ecname, &cnvEndSpeed[i] );
00243 }
00244 for( unsigned int i=0; i<nEndPar; i++ ) {
00245 sprintf( ecname, "P%i", i );
00246 etoftree -> SetBranchAddress( ecname, &cnvEndPar[i] );
00247 }
00248 for( unsigned int i=0; i<nEndSigma; i++ ) {
00249 sprintf( ecname, "FCounter%i", i );
00250 etoftree -> SetBranchAddress( ecname, &cnvEndFPar[i] );
00251 }
00252
00253 for(cnt=0; cnt<96; cnt++){
00254 etoftree -> GetEntry(cnt);
00255 eTof.setAtten( cnvEndAtten );
00256 eTof.setSpeed( cnvEndSpeed );
00257 eTof.setP( cnvEndPar );
00258 eTof.setFP( cnvEndFPar );
00259 tmpeTof.push_back(eTof);
00260 }
00261
00262
00263
00264 if( etftree->GetEntries() != 0 ) {
00265
00266 double cnvEtfSpeed[nEtfSpeed];
00267 double cnvEtfPar[nEtfPar];
00268 double cnvEtfPar1[nEtfPar];
00269 double cnvEtfPar2[nEtfPar];
00270
00271 char etfname[10];
00272 for( unsigned int i=0; i<nEtfSpeed; i++ ) {
00273 sprintf( etfname, "Speed%i", i );
00274 etftree -> SetBranchAddress( etfname, &cnvEtfSpeed[i] );
00275 }
00276 for( unsigned int i=0; i<nEtfPar; i++ ) {
00277 sprintf( etfname, "P%i", i );
00278 etftree -> SetBranchAddress( etfname, &cnvEtfPar[i] );
00279 sprintf( etfname, "P%i", nEtfPar+i );
00280 etftree -> SetBranchAddress( etfname, &cnvEtfPar1[i] );
00281 sprintf( etfname, "P%i", 2*nEtfPar+i );
00282 etftree -> SetBranchAddress( etfname, &cnvEtfPar2[i] );
00283 }
00284
00285 for(cnt=0; cnt<(72*12); cnt++){
00286 etftree -> GetEntry(cnt);
00287 etf.setSpeed( cnvEtfSpeed );
00288 etf.setP( cnvEtfPar );
00289 etf.setP1( cnvEtfPar1 );
00290 etf.setP2( cnvEtfPar2 );
00291 tmpetf.push_back(etf);
00292 }
00293
00294 }
00295
00296
00297
00298 if( etfbunchtree->GetEntries() != 0 ) {
00299 double cnvEtfBunchP[nEtfBunch];
00300 char etfbunchname[10];
00301 for( unsigned int i=0; i<nEtfBunch; i++ ) {
00302 sprintf( etfbunchname, "pbunch%i", i );
00303 etfbunchtree -> SetBranchAddress( etfbunchname, &cnvEtfBunchP[i] );
00304 }
00305 int entries= etfbunchtree->GetEntries();
00306 for(cnt=0;cnt<entries;cnt++){
00307 etfbunchtree -> GetEntry(cnt);
00308 etfBunch.setPBunch( cnvEtfBunchP );
00309 tmpetfBunch.push_back( etfBunch );
00310 }
00311 }
00312
00313
00314
00315 double cnvBarSigCor[nBarSigCor];
00316 double cnvBarOffset[nBarOffset];
00317 for( unsigned int i=0; i<nBarSigCor; i++ ) {
00318 sprintf( brname, "sigmaCorr%i", i );
00319 btofcommontree-> SetBranchAddress( brname, &cnvBarSigCor[i] );
00320 }
00321 for( unsigned int i=0; i<nBarOffset; i++ ) {
00322 sprintf( brname, "t0offset%i", i );
00323 btofcommontree-> SetBranchAddress( brname, &cnvBarOffset[i]);
00324 }
00325
00326 int entries = btofcommontree->GetEntries();
00327 for(cnt=0;cnt<entries;cnt++){
00328 btofcommontree->GetEntry(cnt);
00329 bTofCommon.setSigmaCorr( cnvBarSigCor );
00330 bTofCommon.setOffset( cnvBarOffset );
00331 tmpbTofCommon.push_back(bTofCommon);
00332 }
00333
00334
00335 int m_run1, m_run2, m_version;
00336 int m_qCorr, m_qElec, m_misLable;
00337 int m_tofidEast[5], m_tofidWest[5], m_tofidEndcap[5];
00338
00339 CalibInfo->SetBranchAddress("Run1",&m_run1);
00340 CalibInfo->SetBranchAddress("Run2",&m_run2);
00341 CalibInfo->SetBranchAddress("Version",&m_version);
00342 CalibInfo->SetBranchAddress("ebrId0",&m_tofidEast[0]);
00343 CalibInfo->SetBranchAddress("ebrId1",&m_tofidEast[1]);
00344 CalibInfo->SetBranchAddress("ebrId2",&m_tofidEast[2]);
00345 CalibInfo->SetBranchAddress("ebrId3",&m_tofidEast[3]);
00346 CalibInfo->SetBranchAddress("ebrId4",&m_tofidEast[4]);
00347 CalibInfo->SetBranchAddress("ecId0",&m_tofidEndcap[0]);
00348 CalibInfo->SetBranchAddress("ecId1",&m_tofidEndcap[1]);
00349 CalibInfo->SetBranchAddress("ecId2",&m_tofidEndcap[2]);
00350 CalibInfo->SetBranchAddress("ecId3",&m_tofidEndcap[3]);
00351 CalibInfo->SetBranchAddress("ecId4",&m_tofidEndcap[4]);
00352 CalibInfo->SetBranchAddress("wbrId0",&m_tofidWest[0]);
00353 CalibInfo->SetBranchAddress("wbrId1",&m_tofidWest[1]);
00354 CalibInfo->SetBranchAddress("wbrId2",&m_tofidWest[2]);
00355 CalibInfo->SetBranchAddress("wbrId3",&m_tofidWest[3]);
00356 CalibInfo->SetBranchAddress("wbrId4",&m_tofidWest[4]);
00357 CalibInfo->SetBranchAddress("misLable",&m_misLable);
00358 CalibInfo->SetBranchAddress("qCorr",&m_qCorr);
00359 CalibInfo->SetBranchAddress("qElec",&m_qElec);
00360
00361 entries= CalibInfo->GetEntries();
00362 for(cnt=0;cnt<entries;cnt++){
00363 CalibInfo->GetEntry(cnt);
00364 tofinfo.setRunBegin(m_run1);
00365 tofinfo.setRunEnd(m_run2);
00366 tofinfo.setVersion(m_version);
00367 tofinfo.setQCorr(m_qCorr);
00368 tofinfo.setQElec(m_qElec);
00369 tofinfo.setMisLable(m_misLable);
00370 tofinfo.setBrEast(m_tofidEast);
00371 tofinfo.setBrWest(m_tofidWest);
00372 tofinfo.setEndcap(m_tofidEndcap);
00373 tofinfoCol.push_back(tofinfo);
00374 }
00375
00376 CalibData::TofCalibData *tmpObject = new CalibData::TofCalibData(&tmpbTof,&tmpbTofCommon,&tmpeTof,&tmpetf,&tmpetfBunch,&tofinfoCol);
00377
00378 refpObject=tmpObject;
00379 delete btoftree;
00380 delete etoftree;
00381 delete etftree;
00382 delete etfbunchtree;
00383 delete btofcommontree;
00384 delete CalibInfo;
00385
00386 return StatusCode::SUCCESS;
00387 }
00388