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

Go to the documentation of this file.
00001 // $Header: /bes/bes/BossCvs/Calibration/CalibSvc/CalibROOTCnv/src/cnv/RootMucCalibDataCnv.cxx,v 1.4 2008/10/22 06:33:46 huangb Exp $
00002 #include <iostream>
00003 
00004 #include "GaudiKernel/MsgStream.h"
00005 #include "RootMucCalibDataCnv.h"
00006 #include "CalibData/Muc/MucCalibData.h"
00007 #include "CalibDataSvc/IInstrumentName.h"
00008 
00009 #include "TFile.h"
00010 #include "TTree.h"
00011 #include "TH1F.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 using CalibData::MucCalibData;
00030 using CalibData::MucIdTransform;
00031 
00032 using namespace std;
00033 
00034 //static CnvFactory<RootMucCalibDataCnv> MucCal_factory;
00035 //const  ICnvFactory& RootMucCalibDataCnvFactory = MucCal_factory;
00036 
00037 
00038 
00039 RootMucCalibDataCnv::RootMucCalibDataCnv( ISvcLocator* svc) :
00040   RootCalBaseCnv(svc, CLID_Calib_MucCal) { 
00041     m_ptrIdTr = new MucIdTransform();
00042 }
00043 
00044 
00045 const CLID& RootMucCalibDataCnv::objType() const {
00046   return CLID_Calib_MucCal;
00047 }
00048 
00049 const CLID& RootMucCalibDataCnv::classID() {
00050   return CLID_Calib_MucCal;
00051 }
00052 
00053 StatusCode RootMucCalibDataCnv::i_createObj(const std::string& fname,
00054                                        DataObject*& refpObject) {
00055 
00056   MsgStream log(msgSvc(), "RootMucCalibDataCnv");
00057   log<<MSG::DEBUG<<"SetProperty"<<endreq;
00058  
00059   StatusCode sc = openRead(fname);
00060   if(!sc)
00061     { log<<MSG::ERROR<<"unable to open files"<<endreq;
00062       return StatusCode::FAILURE;
00063     }
00064  
00065   MucCalibData *tmpObject = new MucCalibData() ;
00066   // Read in our object
00067  // int i;
00068  // int nentries;
00069   
00070   // read DigiCalibConst ------------------------------------------------------------
00071 
00072         Double_t lay_eff, box_eff, str_eff;
00073   Double_t lay_cnt, box_cnt, str_cnt;
00074   Double_t lay_nos, box_nos, str_nos;
00075   Double_t lay_nos_ratio, box_nos_ratio, str_nos_ratio;
00076   lay_eff = box_eff = str_eff = 0.0;
00077   lay_cnt = box_cnt = str_cnt = 0.0;
00078   lay_nos = box_nos = str_nos = 0.0;
00079   lay_nos_ratio = box_nos_ratio = str_nos_ratio = 0.0;
00080 
00081         char name[60];
00082         
00083         TTree* tr_Lvl[3];
00084   //TTree* tr_ClstPro[2];
00085         
00086   //TTree *ddgtree = (TTree*)m_inFile -> Get("ddgcalib");
00087         tr_Lvl[0] = (TTree*)m_inFile->Get("LayConst");
00088         tr_Lvl[0]->SetBranchAddress("layer_eff", &lay_eff);
00089         tr_Lvl[0]->SetBranchAddress("layer_cnt", &lay_cnt);
00090         tr_Lvl[0]->SetBranchAddress("layer_noise", &lay_nos);
00091   tr_Lvl[0]->SetBranchAddress("layer_nosratio", &lay_nos_ratio);
00092         
00093         tr_Lvl[1] = (TTree*)m_inFile->Get("BoxConst");
00094         tr_Lvl[1]->SetBranchAddress("box_eff", &box_eff);       
00095         tr_Lvl[1]->SetBranchAddress("box_cnt", &box_cnt);       
00096         tr_Lvl[1]->SetBranchAddress("box_noise", &box_nos);     
00097   tr_Lvl[1]->SetBranchAddress("box_nosratio", &box_nos_ratio);
00098   
00099         tr_Lvl[2] = (TTree*)m_inFile->Get("StrConst");
00100         tr_Lvl[2]->SetBranchAddress("strip_eff", &str_eff);
00101         tr_Lvl[2]->SetBranchAddress("strip_cnt", &str_cnt);
00102         tr_Lvl[2]->SetBranchAddress("strip_noise", &str_nos);
00103   tr_Lvl[2]->SetBranchAddress("strip_nosratio", &str_nos_ratio);
00104   //tr_ClstPro[0] = (TTree*)m_inFile->Get("LayClstPro");
00105   //tr_ClstPro[1] = (TTree*)m_inFile->Get("BoxClstPro");
00106                         
00107   int part, segment, layer, strip;
00108   part = segment = layer = strip = 0;
00109   for(int i=0; i<LAYER_MAX; i++)
00110   {
00111 
00112     tr_Lvl[0]->GetEntry(i);
00113     tmpObject->setLayerEff(lay_eff, i);
00114     tmpObject->setLayerCnt(lay_cnt, i);
00115     tmpObject->setLayerNos(lay_nos, i);
00116     tmpObject->setLayerNosRatio(lay_nos_ratio, i);
00117 
00118     sprintf(name,"LayClstPro");
00119     //tr_ClstPro[0] = (TTree*)m_inFile->Get(name);
00120     for(int j=0; j<CLST_MAX; j++) {
00121       //if( tr_ClstPro[0] != NULL ) tmpObject->setLayerClstPro(tr_ClstPro[0]->GetBinContent(j),i,j);
00122       //else tmpObject->setLayerClstPro(DEFAULT_CLST_PRO[j],i,j);
00123       tmpObject->setLayerClstPro(DEFAULT_CLST_PRO[j],i,j);
00124     }
00125     //log<<MSG::DEBUG<<"layer: " << i << "\t" << lay_eff <<endreq;              
00126   }
00127   
00128   for(int i=0; i<BOX_MAX; i++)
00129   {
00130     m_ptrIdTr->SetBoxPos( i, &part, &segment, &layer );
00131     tr_Lvl[1]->GetEntry(i);             
00132     tmpObject->setBoxEff(box_eff, part, segment, layer);
00133     tmpObject->setBoxCnt(box_cnt, part, segment, layer);
00134     tmpObject->setBoxNos(box_nos, part, segment, layer);
00135     tmpObject->setBoxNosRatio(box_nos_ratio, part, segment, layer);
00136 
00137     sprintf(name,"BoxClstPro_B%d",i);
00138     //tr_ClstPro[1] = (TTree*)m_inFile->Get(name);
00139     for(int j=0; j<CLST_MAX; j++) {
00140       //if( tr_ClstPro[1] != NULL ) tmpObject->setBoxClstPro(tr_ClstPro[1]->GetBinContent(j),part,segment,layer,j);
00141       //else tmpObject->setBoxClstPro(DEFAULT_CLST_PRO[j],part,segment,layer,j);
00142       tmpObject->setBoxClstPro(DEFAULT_CLST_PRO[j],part,segment,layer,j);
00143     }
00144     //log<<MSG::DEBUG<<"box: " << i << "\t" << box_eff <<endreq;               
00145   }
00146   
00147   for(int i=0; i<STRIP_MAX; i++)
00148   {   
00149     m_ptrIdTr->SetStripPos( i, &part, &segment, &layer, &strip );
00150     tr_Lvl[2]->GetEntry(i);
00151     tmpObject->setStripEff(str_eff, part, segment, layer, strip);
00152     tmpObject->setStripCnt(str_cnt, part, segment, layer, strip);
00153     tmpObject->setStripNos(str_nos, part, segment, layer, strip);
00154     tmpObject->setStripNosRatio(str_nos_ratio, part, segment, layer, strip);
00155     //log<<MSG::DEBUG<<"strip: " << i << "\t" << str_eff <<endreq;
00156   }
00157   refpObject=tmpObject;
00158 
00159   return StatusCode::SUCCESS;
00160 }
00161 
00162 StatusCode RootMucCalibDataCnv::createRoot(const std::string& fname, 
00163                                         CalibData::CalibBase1* pTDSObj) {
00164  
00165   MsgStream log(msgSvc(), "RootMucCalibDataCnv");
00166 
00167  // Open the file, create the branch
00168 /*   StatusCode sc = openWrite(fname);
00169   if(!sc)
00170     { log<<MSG::ERROR<<"unable to open files"<<endreq;
00171     }
00172   // write the Data in the TCDS to RootFile
00173      CalibData::MucCalibData* tmpObject = dynamic_cast<CalibData::MucCalibData*>(pTDSObj);
00174      int tmpNo;
00175      double MucCalibConst;
00176      double EnCoeff;
00177      double PosCoeff;
00178      int i;
00179 
00180      //DigiCalibConst------------------------------------------------------------------
00181      TTree *Digitree = new TTree("DigiCalibConst", "DigiCalibConst");
00182      Digitree -> Branch("DigiCalibConst", &MucCalibConst, "MucCalibConst/D");
00183      tmpNo = tmpObject -> getDigiCalibConstNo();
00184      for(i=0; i<tmpNo; i++){
00185           MucCalibConst = tmpObject -> getDigiCalibConst(i);
00186           Digitree -> Fill();
00187      }
00188 
00189        
00190      //EnCoeff-------------------------------------------------------------------------
00191      TTree *Entree = new TTree("EnCoeff", "EnCoeff");
00192      Entree -> Branch("EnCoeff", &EnCoeff, "EnCoeff/D");
00193      tmpNo = tmpObject -> getEnCoeffNo();
00194      for(i=0; i<tmpNo; i++){
00195           EnCoeff = tmpObject -> getEnCoeff(i);
00196           Entree -> Fill();
00197      }
00198 
00199     //PosCoeff-------------------------------------------------------------------------
00200      TTree *Postree = new TTree("PosCoeff", "PosCoeff");
00201      Postree -> Branch("PosCoeff", &PosCoeff, "PosCoeff/D");
00202      tmpNo = tmpObject -> getPosCoeffNo();
00203      for(i=0; i<tmpNo; i++){
00204           PosCoeff = tmpObject -> getPosCoeff(i);
00205           Postree -> Fill();
00206      }
00207 
00208      
00209      Digitree -> Write();
00210      Entree -> Write();
00211      Postree -> Write();
00212 
00213    
00214      delete Digitree;
00215      delete Entree;
00216      delete Postree;
00217     
00218      closeWrite();
00219      log<<MSG::INFO<<"successfully create RootFile"<<endreq;
00220   */
00221      return StatusCode::SUCCESS;
00222 
00223 }

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