BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
RootEmcCalibDataCnv.cxx
Go to the documentation of this file.
1// $Header:
2// /bes/bes/BossCvs/Calibration/CalibSvc/CalibROOTCnv/src/cnv/RootEmcCalibDataCnv.cxx,v 1.7
3// 2009/05/13 07:13:06 hem Exp $
5#include "CalibData/Emc/EmcCalibData.h"
6#include "CalibDataSvc/IInstrumentName.h"
7#include "GaudiKernel/MsgStream.h"
8
9#include "TDirectory.h"
10#include "TFile.h"
11#include "TObject.h"
12#include "TTree.h"
13
14#include "GaudiKernel/DataObject.h"
15#include "GaudiKernel/GenericAddress.h"
16#include "GaudiKernel/IAddressCreator.h"
17#include "GaudiKernel/IConversionSvc.h"
18#include "GaudiKernel/IDataProviderSvc.h"
19#include "GaudiKernel/IOpaqueAddress.h"
20
21#include "CalibDataSvc/ICalibMetaCnvSvc.h"
22#include "CalibDataSvc/ICalibRootSvc.h" //maybe
23
24// Temporary. Hope to find a better way to do this
25#include "CalibData/CalibModel.h"
26using namespace CalibData;
27// static CnvFactory<RootEmcCalibDataCnv> EmcCal_factory;
28// const ICnvFactory& RootEmcCalibDataCnvFactory = EmcCal_factory;
29
32
33const CLID& RootEmcCalibDataCnv::objType() const { return CLID_Calib_EmcCal; }
34
36
37StatusCode RootEmcCalibDataCnv::i_createObj( const std::string& fname,
38 DataObject*& refpObject ) {
39
40 MsgStream log( msgSvc(), "RootEmcCalibDataCnv" );
41 log << MSG::DEBUG << "SetProperty" << endmsg;
42
43 StatusCode sc = openRead( fname );
44 if ( !sc ) { log << MSG::ERROR << "unable to open files" << endmsg; }
45
47 // Read in our object
48 int i;
49 int nentries;
50
51 // read DigiCalibConst ------------------------------------------------------------
52 double EmcCalibConst[6240];
53 int EmcIxtalNumber[6240];
54 vector<double> DigiCalibConst;
55 vector<int> IxtalNumber;
56 TTree* Digitree = (TTree*)m_inFile->Get( "DigiCalibConst" );
57 Digitree->SetBranchAddress( "DigiCalibConst", EmcCalibConst );
58 Digitree->SetBranchAddress( "IxtalNumber", EmcIxtalNumber );
59 Digitree->GetEntry( 0 );
60 for ( i = 0; i < 6240; i++ )
61 {
62 DigiCalibConst.push_back( EmcCalibConst[i] );
63 IxtalNumber.push_back( EmcIxtalNumber[i] );
64 }
65 tmpObject->setDigiCalibConst( &DigiCalibConst );
66 tmpObject->setIxtalNumber( &IxtalNumber );
67
68 refpObject = tmpObject;
69
70 return StatusCode::SUCCESS;
71}
72
73StatusCode RootEmcCalibDataCnv::createRoot( const std::string& fname,
74 CalibData::CalibBase1* pTDSObj ) {
75
76 MsgStream log( msgSvc(), "RootEmcCalibDataCnv" );
77
78 // Open the file, create the branch
79 StatusCode sc = openWrite( fname );
80 if ( !sc ) { log << MSG::ERROR << "unable to open files" << endmsg; }
81 // write the Data in the TCDS to RootFile
82 CalibData::EmcCalibData* tmpObject = dynamic_cast<CalibData::EmcCalibData*>( pTDSObj );
83 int tmpNo;
84 double EmcCalibConst;
85 int EmcIxtalNumber;
86 int i;
87
88 // DigiCalibConst------------------------------------------------------------------
89 TTree* Digitree = new TTree( "DigiCalibConst", "DigiCalibConst" );
90 Digitree->Branch( "DigiCalibConst", &EmcCalibConst, "EmcCalibConst/D" );
91 Digitree->Branch( "IxtalNumber", &EmcIxtalNumber, "IxtalNumber/I" );
92 tmpNo = tmpObject->getDigiCalibConstNo();
93 for ( i = 0; i < tmpNo; i++ )
94 {
95 EmcCalibConst = tmpObject->getDigiCalibConst( i );
96 EmcIxtalNumber = tmpObject->getIxtalNumber( i );
97 Digitree->Fill();
98 }
99
100 Digitree->Write();
101
102 delete Digitree;
103
104 closeWrite();
105 log << MSG::INFO << "successfully create RootFile" << endmsg;
106 return sc;
107}
Int_t nentries
IMessageSvc * msgSvc()
void setIxtalNumber(const vector< int > *IxtalNumber)
void setDigiCalibConst(const vector< double > *DigiCalibConst)
StatusCode openRead(const std::string &fname)
RootCalBaseCnv(ISvcLocator *svc, const CLID &clid)
StatusCode closeWrite()
virtual StatusCode openWrite(const std::string &fname)
virtual StatusCode i_createObj(const std::string &fname, DataObject *&refpObject)
const CLID & objType() const
virtual StatusCode createRoot(const std::string &fname, CalibData::CalibBase1 *pTDSObj)
RootEmcCalibDataCnv(ISvcLocator *svc)
static const CLID & classID()