00001
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"
00021 #include "CalibDataSvc/ICalibMetaCnvSvc.h"
00022
00023
00024 #include "CalibData/CalibModel.h"
00025 using namespace CalibData;
00026
00027
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
00058 int i;
00059 int nentries;
00060
00061
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
00088 StatusCode sc = openWrite(fname);
00089 if(!sc)
00090 { log<<MSG::ERROR<<"unable to open files"<<endreq;
00091 }
00092
00093 CalibData::EmcCalibData* tmpObject = dynamic_cast<CalibData::EmcCalibData*>(pTDSObj);
00094 int tmpNo;
00095 double EmcCalibConst;
00096 int EmcIxtalNumber;
00097 int i;
00098
00099
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 }