/home/bes3soft/bes3soft/Boss/7.0.2/dist/7.0.2/Calibration/CalibSvc/CalibTreeCnv/CalibTreeCnv-00-01-18/src/cnv/TreeTofCalibDataCnv.cxx

Go to the documentation of this file.
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"    //maybe
00021 #include "CalibDataSvc/ICalibMetaCnvSvc.h"
00022 
00023 // Temporary.  Hope to find a better way to do this
00024 #include "CalibData/CalibModel.h"
00025 using namespace CalibData;
00026 //static CnvFactory<TreeTofCalibDataCnv> TofCal_factory;
00027 //const  ICnvFactory& TreeTofCalibDataCnvFactory = TofCal_factory;
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         // Read in the object
00129         int cnt;
00130         // read btoftree ------------------------------------------------------------
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         //read etoftree
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         //read etftree
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         //read etftree
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         //read bTofCommonCalibBase
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 

Generated on Tue Nov 29 22:57:52 2016 for BOSS_7.0.2 by  doxygen 1.4.7