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

Go to the documentation of this file.
00001 // $Header: /bes/bes/BossCvs/Calibration/CalibSvc/CalibROOTCnv/src/cnv/RootEmcCalibDataCnv.cxx,v 1.7 2009/05/13 07:13:06 hem Exp $
00002 #include "GaudiKernel/MsgStream.h"
00003 #include "RootEmcCalibDataCnv.h"
00004 #include "CalibData/Emc/EmcCalibData.h"
00005 #include "CalibDataSvc/IInstrumentName.h"
00006 
00007 #include "TFile.h"
00008 #include "TTree.h"
00009 #include "TDirectory.h"
00010 #include "TObject.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/ICalibRootSvc.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<RootEmcCalibDataCnv> EmcCal_factory;
00027 //const  ICnvFactory& RootEmcCalibDataCnvFactory = EmcCal_factory;
00028 
00029 
00030 
00031 RootEmcCalibDataCnv::RootEmcCalibDataCnv( ISvcLocator* svc) :
00032   RootCalBaseCnv(svc, CLID_Calib_EmcCal) { 
00033 
00034 }
00035 
00036 
00037 const CLID& RootEmcCalibDataCnv::objType() const {
00038   return CLID_Calib_EmcCal;
00039 }
00040 
00041 const CLID& RootEmcCalibDataCnv::classID() {
00042   return CLID_Calib_EmcCal;
00043 }
00044 
00045 StatusCode RootEmcCalibDataCnv::i_createObj(const std::string& fname,
00046                                        DataObject*& refpObject) {
00047 
00048   MsgStream log(msgSvc(), "RootEmcCalibDataCnv");
00049   log<<MSG::DEBUG<<"SetProperty"<<endreq;
00050  
00051   StatusCode sc = openRead(fname);
00052   if(!sc)
00053     { log<<MSG::ERROR<<"unable to open files"<<endreq;
00054     }
00055  
00056   CalibData::EmcCalibData *tmpObject = new CalibData::EmcCalibData ;
00057   // Read in our object
00058   int i;
00059   int nentries;
00060   
00061   // read DigiCalibConst ------------------------------------------------------------
00062      double EmcCalibConst[6240];
00063      int EmcIxtalNumber[6240];
00064      vector<double> DigiCalibConst;
00065      vector<int> IxtalNumber;
00066      TTree *Digitree = (TTree*)m_inFile -> Get("DigiCalibConst");
00067      Digitree -> SetBranchAddress("DigiCalibConst", EmcCalibConst);
00068      Digitree -> SetBranchAddress("IxtalNumber", EmcIxtalNumber);
00069      Digitree -> GetEntry(0);
00070      for(i=0; i<6240; i++){
00071            DigiCalibConst.push_back(EmcCalibConst[i]);
00072            IxtalNumber.push_back(EmcIxtalNumber[i]); 
00073      }
00074      tmpObject -> setDigiCalibConst(&DigiCalibConst);
00075      tmpObject -> setIxtalNumber(&IxtalNumber);
00076     
00077     refpObject=tmpObject;
00078 
00079   return StatusCode::SUCCESS;
00080 }
00081 
00082 StatusCode RootEmcCalibDataCnv::createRoot(const std::string& fname, 
00083                                         CalibData::CalibBase1* pTDSObj) {
00084  
00085   MsgStream log(msgSvc(), "RootEmcCalibDataCnv");
00086 
00087  // Open the file, create the branch
00088    StatusCode sc = openWrite(fname);
00089   if(!sc)
00090     { log<<MSG::ERROR<<"unable to open files"<<endreq;
00091     }
00092   // write the Data in the TCDS to RootFile
00093      CalibData::EmcCalibData* tmpObject = dynamic_cast<CalibData::EmcCalibData*>(pTDSObj);
00094      int tmpNo;
00095      double EmcCalibConst;
00096      int EmcIxtalNumber;
00097      int i;
00098 
00099      //DigiCalibConst------------------------------------------------------------------
00100      TTree *Digitree = new TTree("DigiCalibConst", "DigiCalibConst");
00101      Digitree -> Branch("DigiCalibConst", &EmcCalibConst, "EmcCalibConst/D");
00102      Digitree -> Branch("IxtalNumber", &EmcIxtalNumber, "IxtalNumber/I");
00103      tmpNo = tmpObject -> getDigiCalibConstNo();
00104      for(i=0; i<tmpNo; i++){
00105           EmcCalibConst = tmpObject -> getDigiCalibConst(i);
00106           EmcIxtalNumber = tmpObject -> getIxtalNumber(i);
00107           Digitree -> Fill();
00108      }
00109 
00110      
00111      Digitree -> Write();
00112 
00113    
00114      delete Digitree;
00115     
00116      closeWrite();
00117      log<<MSG::INFO<<"successfully create RootFile"<<endreq;
00118      return sc;
00119 
00120 }

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