/home/bes3soft/bes3soft/Boss/7.0.2/dist/7.0.2/Calibration/CalibSvc/CalibROOTCnv/CalibROOTCnv-00-01-13/src/cnv/RootEstTofCalibDataCnv.cxx

Go to the documentation of this file.
00001 // $Header: /bes/bes/BossCvs/Calibration/CalibSvc/CalibROOTCnv/src/cnv/RootEstTofCalibDataCnv.cxx,v 1.8 2016/02/15 08:13:48 sunss Exp $
00002 #include "GaudiKernel/MsgStream.h"
00003 #include "RootEstTofCalibDataCnv.h"
00004 #include "CalibData/Tof/TofCalibData.h"
00005 #include "CalibData/Tof/bTofCalibBase.h"
00006 #include "CalibData/Tof/eTofCalibBase.h"
00007 #include "CalibData/Tof/etfCalibBase.h"
00008 #include "CalibDataSvc/IInstrumentName.h"
00009 
00010 #include "TFile.h"
00011 #include "TTree.h"
00012 #include "TDirectory.h"
00013 #include "TObject.h"
00014 
00015 #include "GaudiKernel/CnvFactory.h"
00016 #include "GaudiKernel/IOpaqueAddress.h"
00017 #include "GaudiKernel/DataObject.h"
00018 #include "GaudiKernel/IAddressCreator.h"
00019 #include "GaudiKernel/IDataProviderSvc.h"
00020 #include "GaudiKernel/IConversionSvc.h"
00021 #include "GaudiKernel/GenericAddress.h"
00022 
00023 #include "CalibDataSvc/ICalibRootSvc.h"    //maybe
00024 #include "CalibDataSvc/ICalibMetaCnvSvc.h"
00025 
00026 // Temporary.  Hope to find a better way to do this
00027 #include "CalibData/CalibModel.h"
00028 using namespace CalibData;
00029 //static CnvFactory<RootEstTofCalibDataCnv> TofCalib_factory;
00030 //const  ICnvFactory& RootEstTofCalibDataCnvFactory = TofCalib_factory;
00031 
00032 const unsigned int nBarPar    = 10;
00033 const unsigned int nBarParOff = 20;
00034 const unsigned int nEndPar    = 8;
00035 const unsigned int nEtfPar    = 20;
00036 const unsigned int nBarOffset = 2;
00037 
00038 RootEstTofCalibDataCnv::RootEstTofCalibDataCnv( ISvcLocator* svc) :
00039   RootCalBaseCnv(svc, CLID_Calib_EstTofCal) { 
00040  }
00041 
00042 
00043 const CLID& RootEstTofCalibDataCnv::objType() const {
00044   return CLID_Calib_EstTofCal;
00045 }
00046 
00047 const CLID& RootEstTofCalibDataCnv::classID() {
00048   return CLID_Calib_EstTofCal;
00049 }
00050 
00051 StatusCode RootEstTofCalibDataCnv::i_createObj(const std::string& fname,
00052                                        DataObject*& refpObject) {
00053 
00054   MsgStream log(msgSvc(), "RootEstTofCalibDataCnv");
00055   log<<MSG::DEBUG<<"SetProperty"<<endreq;
00056  
00057  // open the file
00058   StatusCode sc = openRead(fname);
00059   if(!sc)
00060     { log<<MSG::ERROR<<"unable to open files"<<endreq;
00061     }
00062  
00063   CalibData::bTofCalibBase bTof;
00064   CalibData::eTofCalibBase eTof;
00065   CalibData::etfCalibBase  etf;
00066   CalibData::bTofCommonCalibBase bTofCommon;
00067   CalibData::tofCalibInfoBase tofinfo;
00068 
00069   std::vector<CalibData::bTofCalibBase> tmpbTof;
00070   std::vector<CalibData::eTofCalibBase> tmpeTof;
00071   std::vector<CalibData::etfCalibBase>  tmpetf;
00072   std::vector<CalibData::bTofCommonCalibBase> tmpbTofCommon;
00073   std::vector<CalibData::tofCalibInfoBase> tofinfoCol;
00074 
00075   // Read in the object
00076   int cnt;
00077   // read btoftree ------------------------------------------------------------
00078   double cnvBarPar1[nBarPar];
00079   double cnvBarPar2[nBarPar];
00080   double cnvBarParOff1_bunch0[nBarParOff];
00081   double cnvBarParOff2_bunch0[nBarParOff];
00082   double cnvBarParOff1_bunch1[nBarParOff];
00083   double cnvBarParOff2_bunch1[nBarParOff];
00084   double cnvBarParOff1_bunch2[nBarParOff];
00085   double cnvBarParOff2_bunch2[nBarParOff];
00086   double cnvBarParOff1_bunch3[nBarParOff];
00087   double cnvBarParOff2_bunch3[nBarParOff];
00088 
00089   TTree *btoftree = (TTree*)m_inFile -> Get("BarTofPar");
00090 
00091   char brname[10];
00092   for( unsigned int i=0; i<nBarPar; i++ ) {
00093     sprintf( brname, "P%i", i );
00094     btoftree -> SetBranchAddress( brname, &cnvBarPar1[i] );    
00095   }
00096   for( unsigned int i=0; i<nBarPar; i++ ) {
00097     sprintf( brname, "P%i", i+nBarPar );
00098     btoftree -> SetBranchAddress( brname, &cnvBarPar2[i] );    
00099   }
00100   for( unsigned int i=0; i<nBarParOff; i++ ) {
00101     sprintf( brname, "Bunch0_Poff%i", i );
00102     btoftree -> SetBranchAddress( brname, &cnvBarParOff1_bunch0[i] );    
00103   }
00104   for( unsigned int i=0; i<nBarParOff; i++ ) {
00105     sprintf( brname, "Bunch0_Poff%i", i+nBarParOff );
00106     btoftree -> SetBranchAddress( brname, &cnvBarParOff2_bunch0[i] );    
00107   }
00108   for( unsigned int i=0; i<nBarParOff; i++ ) {
00109     sprintf( brname, "Bunch1_Poff%i", i );
00110     btoftree -> SetBranchAddress( brname, &cnvBarParOff1_bunch1[i] );
00111   }
00112   for( unsigned int i=0; i<nBarParOff; i++ ) {
00113     sprintf( brname, "Bunch1_Poff%i", i+nBarParOff );
00114     btoftree -> SetBranchAddress( brname, &cnvBarParOff2_bunch1[i] );
00115   }
00116   for( unsigned int i=0; i<nBarParOff; i++ ) {
00117     sprintf( brname, "Bunch2_Poff%i", i );
00118     btoftree -> SetBranchAddress( brname, &cnvBarParOff1_bunch2[i] );
00119   }
00120   for( unsigned int i=0; i<nBarParOff; i++ ) {
00121     sprintf( brname, "Bunch2_Poff%i", i+nBarParOff );
00122     btoftree -> SetBranchAddress( brname, &cnvBarParOff2_bunch2[i] );
00123   }
00124   for( unsigned int i=0; i<nBarParOff; i++ ) {
00125     sprintf( brname, "Bunch3_Poff%i", i );
00126     btoftree -> SetBranchAddress( brname, &cnvBarParOff1_bunch3[i] );
00127   }
00128   for( unsigned int i=0; i<nBarParOff; i++ ) {
00129     sprintf( brname, "Bunch3_Poff%i", i+nBarParOff );
00130     btoftree -> SetBranchAddress( brname, &cnvBarParOff2_bunch3[i] );
00131   }
00132 
00133   for(cnt=0; cnt<176; cnt++){
00134     btoftree -> GetEntry(cnt);
00135     bTof.setP1( cnvBarPar1 );
00136     bTof.setP2( cnvBarPar2 );
00137     bTof.setPoff1_bunch0( cnvBarParOff1_bunch0 );
00138     bTof.setPoff2_bunch0( cnvBarParOff2_bunch0 );
00139     bTof.setPoff1_bunch1( cnvBarParOff1_bunch1 );
00140     bTof.setPoff2_bunch1( cnvBarParOff2_bunch1 );
00141     bTof.setPoff1_bunch2( cnvBarParOff1_bunch2 );
00142     bTof.setPoff2_bunch2( cnvBarParOff2_bunch2 );
00143     bTof.setPoff1_bunch3( cnvBarParOff1_bunch3 );
00144     bTof.setPoff2_bunch3( cnvBarParOff2_bunch3 );
00145     tmpbTof.push_back( bTof );
00146   }
00147 
00148   //read etoftree
00149   double cnvEndPar[nEndPar];
00150 
00151   TTree *etoftree = (TTree*)m_inFile -> Get("EndTofPar");
00152 
00153   char ecname[10];
00154   for( unsigned int i=0; i<nEndPar; i++ ) {
00155     sprintf( ecname, "P%i", i );
00156     etoftree -> SetBranchAddress( ecname, &cnvEndPar[i] );
00157   }
00158    
00159   for(cnt=0; cnt<96; cnt++){
00160     etoftree->GetEntry(cnt);
00161     eTof.setP( cnvEndPar );
00162     tmpeTof.push_back(eTof);
00163   }
00164 
00165   //read etftree
00166   double cnvEtfPar[nEtfPar];
00167   double cnvEtfPar1[nEtfPar];
00168   double cnvEtfPar2[nEtfPar];
00169 
00170   if( NULL!=m_inFile->Get("EtfTofPar") ) {
00171     TTree *etftree = (TTree*)m_inFile -> Get("EtfTofPar");
00172 
00173     char etfname[10];
00174     for( unsigned int i=0; i<nEtfPar; i++ ) {
00175       sprintf( etfname, "P%i", i );
00176       etftree -> SetBranchAddress( etfname, &cnvEtfPar[i] );    
00177     }
00178     for( unsigned int i=0; i<nEtfPar; i++ ) {
00179       sprintf( etfname, "P%i", i+nEtfPar );
00180       etftree -> SetBranchAddress( etfname, &cnvEtfPar1[i] );    
00181     }
00182     for( unsigned int i=0; i<nEtfPar; i++ ) {
00183       sprintf( etfname, "P%i", i+2*nEtfPar );
00184       etftree -> SetBranchAddress( etfname, &cnvEtfPar2[i] );    
00185     }
00186 
00187     for(cnt=0; cnt<(72*12); cnt++){
00188       etftree -> GetEntry(cnt);
00189       etf.setP( cnvEtfPar );
00190       etf.setP1( cnvEtfPar1 );
00191       etf.setP2( cnvEtfPar2 );
00192       tmpetf.push_back(etf);
00193     }
00194   }
00195 
00196   //read bTofCommonCalibBase
00197   double cnvBarOffset[nBarOffset];
00198   TTree *btofcommontree = (TTree*)m_inFile -> Get("BarTofParCommon");
00199   for( unsigned int i=0; i<nBarOffset; i++ ) {
00200     sprintf( brname, "t0offset%i", i );
00201     btofcommontree-> SetBranchAddress( brname, &cnvBarOffset[i]);
00202   }
00203 
00204   int entries = btofcommontree->GetEntries();
00205   for(cnt=0;cnt<entries;cnt++){
00206     btofcommontree->GetEntry(cnt);
00207     bTofCommon.setOffset( cnvBarOffset );
00208     tmpbTofCommon.push_back(bTofCommon);   
00209   }
00210 
00211   CalibData::TofCalibData *tmpObject = new CalibData::TofCalibData(&tmpbTof,&tmpbTofCommon,&tmpeTof,&tmpetf,&tofinfoCol);
00212 
00213   refpObject=tmpObject;
00214 
00215   return StatusCode::SUCCESS;
00216 }
00217 
00218 StatusCode RootEstTofCalibDataCnv::createRoot(const std::string& fname, 
00219                                         CalibData::CalibBase1* pTDSObj) {
00220   MsgStream log(msgSvc(), "RootEstTofCalibDataCnv");
00221 
00222   // Open the file, create the branch
00223   StatusCode sc = openWrite(fname);
00224   if(!sc)
00225     { log<<MSG::ERROR<<"unable to open files"<<endreq;
00226     }
00227   // write the Data in the TCDS to RootFile
00228   CalibData::TofCalibData* btof = dynamic_cast<CalibData::TofCalibData*>(pTDSObj);
00229 
00230   // write  btoftree----------------------------------------------------------------
00231   double cnvBarPar1[nBarPar];
00232   double cnvBarPar2[nBarPar];
00233 
00234   char brname[8], ibrname[8];
00235   TTree *btoftree = new TTree("BarTofPar", "BarTofPar");
00236   for( unsigned int i=0; i<nBarPar; i++ ) {
00237     sprintf(  brname, "P%i",   i );
00238     sprintf( ibrname, "P%i/D", i );
00239     btoftree -> Branch( brname, &cnvBarPar1[i], ibrname );
00240   }
00241 
00242   for( int i=0; i<176; i++ ) {
00243     for( int j=0;j<static_cast<int>(nBarPar);j++){
00244       cnvBarPar1[j] = btof->getBTofPleft(i,j);
00245       cnvBarPar2[j] = btof->getBTofPright(i,j);
00246     }
00247     btoftree -> Fill();
00248   }
00249      
00250  //write  etoftree----------------------------------------------------------------
00251   double cnvEndPar[nEndPar];
00252 
00253   char ecname[8], iecname[8];
00254   TTree *etoftree = new TTree("EndTofPar", "EndTofPar");
00255   for( unsigned int i=0; i<nEndPar; i++ ) {
00256     sprintf(  ecname, "P%i",   i );
00257     sprintf( iecname, "P%i/D", i );
00258     etoftree -> Branch( ecname, &cnvEndPar[i], iecname );
00259   }
00260 
00261   for(int i=0; i<96; i++){
00262     for(int j=0;j<static_cast<int>(nEndPar);j++){
00263       cnvEndPar[j] = btof->getETofP(i,j);
00264     }
00265     etoftree->Fill();
00266   }
00267 
00268  //write  etftree----------------------------------------------------------------
00269   double cnvEtfPar[nEtfPar];
00270   double cnvEtfPar1[nEtfPar];
00271   double cnvEtfPar2[nEtfPar];
00272 
00273   char etfname[8], ietfname[8];
00274   TTree *etftree = new TTree("EtfTofPar", "EtfTofPar");
00275   for( unsigned int i=0; i<nEtfPar; i++ ) {
00276     sprintf(  etfname, "P%i",   i );
00277     sprintf( ietfname, "P%i/D", i );
00278     etftree -> Branch( etfname, &cnvEtfPar[i], ietfname );
00279   }
00280   for( unsigned int i=0; i<nEtfPar; i++ ) {
00281     sprintf(  etfname, "P%i",   i+nEtfPar );
00282     sprintf( ietfname, "P%i/D", i+nEtfPar );
00283     etftree -> Branch( etfname, &cnvEtfPar1[i], ietfname );
00284   }
00285   for( unsigned int i=0; i<nEtfPar; i++ ) {
00286     sprintf(  etfname, "P%i",   i+2*nEtfPar );
00287     sprintf( ietfname, "P%i/D", i+2*nEtfPar );
00288     etftree -> Branch( etfname, &cnvEtfPar2[i], ietfname );
00289   }
00290 
00291   for( int i=0; i<72; i++ ) {
00292     for( int k=0; k<12; k++ ) {
00293       for(int j=0;j<static_cast<int>(nEtfPar);j++){
00294         cnvEtfPar[j] = btof->getEtfPcombine(i,k,j);
00295         cnvEtfPar1[j] = btof->getEtfPleft(i,k,j);
00296         cnvEtfPar2[j] = btof->getEtfPright(i,k,j);
00297       }
00298       etftree -> Fill();
00299     }
00300   }
00301 
00302   //  write all the trees
00303   btoftree -> Write();
00304   etoftree -> Write();
00305   etftree -> Write();
00306   delete btoftree;
00307   delete etoftree;
00308   delete etftree;
00309   closeWrite();
00310   log<<MSG::INFO<<"successfully create RootFile"<<endreq;
00311   
00312   return sc;
00313 }

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