BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
RootMucCalibDataCnv.cxx
Go to the documentation of this file.
1// $Header:
2// /bes/bes/BossCvs/Calibration/CalibSvc/CalibROOTCnv/src/cnv/RootMucCalibDataCnv.cxx,v 1.4
3// 2008/10/22 06:33:46 huangb Exp $
4#include <iostream>
5
6#include "CalibData/Muc/MucCalibData.h"
7#include "CalibDataSvc/IInstrumentName.h"
8#include "GaudiKernel/MsgStream.h"
10
11#include "TDirectory.h"
12#include "TFile.h"
13#include "TH1F.h"
14#include "TObject.h"
15#include "TTree.h"
16
17#include "GaudiKernel/DataObject.h"
18#include "GaudiKernel/GenericAddress.h"
19#include "GaudiKernel/IAddressCreator.h"
20#include "GaudiKernel/IConversionSvc.h"
21#include "GaudiKernel/IDataProviderSvc.h"
22#include "GaudiKernel/IOpaqueAddress.h"
23
24#include "CalibDataSvc/ICalibMetaCnvSvc.h"
25#include "CalibDataSvc/ICalibRootSvc.h" //maybe
26
27// Temporary. Hope to find a better way to do this
28#include "CalibData/CalibModel.h"
29// using namespace CalibData;
32
33using namespace std;
34
35// static CnvFactory<RootMucCalibDataCnv> MucCal_factory;
36// const ICnvFactory& RootMucCalibDataCnvFactory = MucCal_factory;
37
40 m_ptrIdTr = new MucIdTransform();
41}
42
43const CLID& RootMucCalibDataCnv::objType() const { return CLID_Calib_MucCal; }
44
46
47StatusCode RootMucCalibDataCnv::i_createObj( const std::string& fname,
48 DataObject*& refpObject ) {
49
50 MsgStream log( msgSvc(), "RootMucCalibDataCnv" );
51 log << MSG::DEBUG << "SetProperty" << endmsg;
52
53 StatusCode sc = openRead( fname );
54 if ( !sc )
55 {
56 log << MSG::ERROR << "unable to open files" << endmsg;
57 return StatusCode::FAILURE;
58 }
59
60 MucCalibData* tmpObject = new MucCalibData();
61 // Read in our object
62 // int i;
63 // int nentries;
64
65 // read DigiCalibConst ------------------------------------------------------------
66
67 Double_t lay_eff, box_eff, str_eff;
68 Double_t lay_cnt, box_cnt, str_cnt;
69 Double_t lay_nos, box_nos, str_nos;
70 Double_t lay_nos_ratio, box_nos_ratio, str_nos_ratio;
71 lay_eff = box_eff = str_eff = 0.0;
72 lay_cnt = box_cnt = str_cnt = 0.0;
73 lay_nos = box_nos = str_nos = 0.0;
74 lay_nos_ratio = box_nos_ratio = str_nos_ratio = 0.0;
75
76 char name[60];
77
78 TTree* tr_Lvl[3];
79 // TTree* tr_ClstPro[2];
80
81 // TTree *ddgtree = (TTree*)m_inFile -> Get("ddgcalib");
82 tr_Lvl[0] = (TTree*)m_inFile->Get( "LayConst" );
83 tr_Lvl[0]->SetBranchAddress( "layer_eff", &lay_eff );
84 tr_Lvl[0]->SetBranchAddress( "layer_cnt", &lay_cnt );
85 tr_Lvl[0]->SetBranchAddress( "layer_noise", &lay_nos );
86 tr_Lvl[0]->SetBranchAddress( "layer_nosratio", &lay_nos_ratio );
87
88 tr_Lvl[1] = (TTree*)m_inFile->Get( "BoxConst" );
89 tr_Lvl[1]->SetBranchAddress( "box_eff", &box_eff );
90 tr_Lvl[1]->SetBranchAddress( "box_cnt", &box_cnt );
91 tr_Lvl[1]->SetBranchAddress( "box_noise", &box_nos );
92 tr_Lvl[1]->SetBranchAddress( "box_nosratio", &box_nos_ratio );
93
94 tr_Lvl[2] = (TTree*)m_inFile->Get( "StrConst" );
95 tr_Lvl[2]->SetBranchAddress( "strip_eff", &str_eff );
96 tr_Lvl[2]->SetBranchAddress( "strip_cnt", &str_cnt );
97 tr_Lvl[2]->SetBranchAddress( "strip_noise", &str_nos );
98 tr_Lvl[2]->SetBranchAddress( "strip_nosratio", &str_nos_ratio );
99 // tr_ClstPro[0] = (TTree*)m_inFile->Get("LayClstPro");
100 // tr_ClstPro[1] = (TTree*)m_inFile->Get("BoxClstPro");
101
102 int part, segment, layer, strip;
103 part = segment = layer = strip = 0;
104 for ( int i = 0; i < LAYER_MAX; i++ )
105 {
106
107 tr_Lvl[0]->GetEntry( i );
108 tmpObject->setLayerEff( lay_eff, i );
109 tmpObject->setLayerCnt( lay_cnt, i );
110 tmpObject->setLayerNos( lay_nos, i );
111 tmpObject->setLayerNosRatio( lay_nos_ratio, i );
112
113 sprintf( name, "LayClstPro" );
114 // tr_ClstPro[0] = (TTree*)m_inFile->Get(name);
115 for ( int j = 0; j < CLST_MAX; j++ )
116 {
117 // if( tr_ClstPro[0] != NULL )
118 // tmpObject->setLayerClstPro(tr_ClstPro[0]->GetBinContent(j),i,j); else
119 // tmpObject->setLayerClstPro(DEFAULT_CLST_PRO[j],i,j);
120 tmpObject->setLayerClstPro( DEFAULT_CLST_PRO[j], i, j );
121 }
122 // log<<MSG::DEBUG<<"layer: " << i << "\t" << lay_eff <<endmsg;
123 }
124
125 for ( int i = 0; i < BOX_MAX; i++ )
126 {
127 m_ptrIdTr->SetBoxPos( i, &part, &segment, &layer );
128 tr_Lvl[1]->GetEntry( i );
129 tmpObject->setBoxEff( box_eff, part, segment, layer );
130 tmpObject->setBoxCnt( box_cnt, part, segment, layer );
131 tmpObject->setBoxNos( box_nos, part, segment, layer );
132 tmpObject->setBoxNosRatio( box_nos_ratio, part, segment, layer );
133
134 sprintf( name, "BoxClstPro_B%d", i );
135 // tr_ClstPro[1] = (TTree*)m_inFile->Get(name);
136 for ( int j = 0; j < CLST_MAX; j++ )
137 {
138 // if( tr_ClstPro[1] != NULL )
139 // tmpObject->setBoxClstPro(tr_ClstPro[1]->GetBinContent(j),part,segment,layer,j); else
140 // tmpObject->setBoxClstPro(DEFAULT_CLST_PRO[j],part,segment,layer,j);
141 tmpObject->setBoxClstPro( DEFAULT_CLST_PRO[j], part, segment, layer, j );
142 }
143 // log<<MSG::DEBUG<<"box: " << i << "\t" << box_eff <<endmsg;
144 }
145
146 for ( int i = 0; i < STRIP_MAX; i++ )
147 {
148 m_ptrIdTr->SetStripPos( i, &part, &segment, &layer, &strip );
149 tr_Lvl[2]->GetEntry( i );
150 tmpObject->setStripEff( str_eff, part, segment, layer, strip );
151 tmpObject->setStripCnt( str_cnt, part, segment, layer, strip );
152 tmpObject->setStripNos( str_nos, part, segment, layer, strip );
153 tmpObject->setStripNosRatio( str_nos_ratio, part, segment, layer, strip );
154 // log<<MSG::DEBUG<<"strip: " << i << "\t" << str_eff <<endmsg;
155 }
156 refpObject = tmpObject;
157
158 return StatusCode::SUCCESS;
159}
160
161StatusCode RootMucCalibDataCnv::createRoot( const std::string& fname,
162 CalibData::CalibBase1* pTDSObj ) {
163
164 MsgStream log( msgSvc(), "RootMucCalibDataCnv" );
165
166 // Open the file, create the branch
167 /* StatusCode sc = openWrite(fname);
168 if(!sc)
169 { log<<MSG::ERROR<<"unable to open files"<<endmsg;
170 }
171 // write the Data in the TCDS to RootFile
172 CalibData::MucCalibData* tmpObject = dynamic_cast<CalibData::MucCalibData*>(pTDSObj);
173 int tmpNo;
174 double MucCalibConst;
175 double EnCoeff;
176 double PosCoeff;
177 int i;
178
179 //DigiCalibConst------------------------------------------------------------------
180 TTree *Digitree = new TTree("DigiCalibConst", "DigiCalibConst");
181 Digitree -> Branch("DigiCalibConst", &MucCalibConst, "MucCalibConst/D");
182 tmpNo = tmpObject -> getDigiCalibConstNo();
183 for(i=0; i<tmpNo; i++){
184 MucCalibConst = tmpObject -> getDigiCalibConst(i);
185 Digitree -> Fill();
186 }
187
188
189 //EnCoeff-------------------------------------------------------------------------
190 TTree *Entree = new TTree("EnCoeff", "EnCoeff");
191 Entree -> Branch("EnCoeff", &EnCoeff, "EnCoeff/D");
192 tmpNo = tmpObject -> getEnCoeffNo();
193 for(i=0; i<tmpNo; i++){
194 EnCoeff = tmpObject -> getEnCoeff(i);
195 Entree -> Fill();
196 }
197
198 //PosCoeff-------------------------------------------------------------------------
199 TTree *Postree = new TTree("PosCoeff", "PosCoeff");
200 Postree -> Branch("PosCoeff", &PosCoeff, "PosCoeff/D");
201 tmpNo = tmpObject -> getPosCoeffNo();
202 for(i=0; i<tmpNo; i++){
203 PosCoeff = tmpObject -> getPosCoeff(i);
204 Postree -> Fill();
205 }
206
207
208 Digitree -> Write();
209 Entree -> Write();
210 Postree -> Write();
211
212
213 delete Digitree;
214 delete Entree;
215 delete Postree;
216
217 closeWrite();
218 log<<MSG::INFO<<"successfully create RootFile"<<endmsg;
219 */
220 return StatusCode::SUCCESS;
221}
sprintf(cut, "kal_costheta0_em>-0.93&&kal_costheta0_em<0.93&&kal_pxy0_em>=0.05+%d*0.1&&kal_" "pxy0_em<0.15+%d*0.1&&NGch>=2", j, j)
IMessageSvc * msgSvc()
void setLayerClstPro(const double layerpro, int i, int j)
void setBoxCnt(const double boxcnt, int i, int j, int k)
void setStripNos(const double stripnos, int i, int j, int k, int l)
void setBoxNosRatio(const double boxratio, int i, int j, int k)
void setStripEff(const double stripeff, int i, int j, int k, int l)
void setStripNosRatio(const double stripnosratio, int i, int j, int k, int l)
void setStripCnt(const double stripcnt, int i, int j, int k, int l)
void setBoxEff(const double boxeff, int i, int j, int k)
void setBoxNos(const double boxnos, int i, int j, int k)
void setBoxClstPro(const double boxpro, int i, int j, int k, int l)
StatusCode openRead(const std::string &fname)
RootCalBaseCnv(ISvcLocator *svc, const CLID &clid)
const CLID & objType() const
virtual StatusCode i_createObj(const std::string &fname, DataObject *&refpObject)
virtual StatusCode createRoot(const std::string &fname, CalibData::CalibBase1 *pTDSObj)
RootMucCalibDataCnv(ISvcLocator *svc)
static const CLID & classID()