BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
TreeDedxCalibDataCnv Class Reference

#include <TreeDedxCalibDataCnv.h>

Inheritance diagram for TreeDedxCalibDataCnv:

Public Member Functions

const CLID & objType () const
 TreeDedxCalibDataCnv (ISvcLocator *svc)
virtual ~TreeDedxCalibDataCnv ()
virtual long repSvcType () const
Public Member Functions inherited from TreeCalBaseCnv
virtual ~TreeCalBaseCnv ()
virtual StatusCode initialize ()
virtual StatusCode finalize ()
virtual StatusCode createObj (IOpaqueAddress *addr, DataObject *&refpObject)
ICalibTreeSvcgetCalibTreeSvc ()
 TreeCalBaseCnv (ISvcLocator *svc, const CLID &clid)
virtual StatusCode createRoot (const std::string &fname, CalibData::CalibBase1 *pTDSObj)
Public Member Functions inherited from Converter< Ty1, Ty2 >
destinationoperator (const source &) const
destinationoperator (const source &) const
destinationoperator (const source &) const

Static Public Member Functions

static const CLID & classID ()
Static Public Member Functions inherited from TreeCalBaseCnv
static const unsigned char storageType ()

Protected Member Functions

virtual StatusCode i_createObj (IOpaqueAddress *address, DataObject *&refpObject)
Protected Member Functions inherited from TreeCalBaseCnv
virtual StatusCode internalCreateObj (DataObject *&refpObject, IOpaqueAddress *address)
virtual StatusCode i_processObj (DataObject *pObject, IOpaqueAddress *address)
 In case there is additional work to do on the created object.
virtual StatusCode fillRoot (CalibData::CalibBase *pTDSObj, TObject *pRootObj)
void setBaseInfo (CalibData::CalibBase1 *pObj)
 Another utility for derived classes to use.
Protected Member Functions inherited from Converter< Ty1, Ty2 >
virtual destinationconvert (const source &) const =0
virtual destinationconvert (const source &) const =0
virtual destinationconvert (const source &) const =0

Friends

class CnvFactory< TreeDedxCalibDataCnv >

Additional Inherited Members

Public Types inherited from Converter< Ty1, Ty2 >
typedef Ty1 source
typedef Ty2 destination
typedef Ty1 source
typedef Ty2 destination
typedef Ty1 source
typedef Ty2 destination
Protected Attributes inherited from TreeCalBaseCnv
ICalibTreeSvcm_treeSvc
ICalibMetaCnvSvcm_metaSvc
IInstrumentNamem_instrSvc
int m_serNo
int m_runfrm
int m_runto
TFile * m_outFile
TTree * m_ttree
TFile * m_inFile
TDirectory * m_saveDir

Detailed Description

Base class for CAL calibration converters from Ttrees to TCDS. All such converters need to do certain things, which are handled here. Methods common to all calibrations are in the base class TreeCalBaseCnv

Author
huang bin

Definition at line 20 of file TreeDedxCalibDataCnv.h.

Constructor & Destructor Documentation

◆ TreeDedxCalibDataCnv()

TreeDedxCalibDataCnv::TreeDedxCalibDataCnv ( ISvcLocator * svc)

Definition at line 29 of file TreeDedxCalibDataCnv.cxx.

TreeCalBaseCnv(ISvcLocator *svc, const CLID &clid)

◆ ~TreeDedxCalibDataCnv()

virtual TreeDedxCalibDataCnv::~TreeDedxCalibDataCnv ( )
inlinevirtual

Definition at line 29 of file TreeDedxCalibDataCnv.h.

29{};

Member Function Documentation

◆ classID()

const CLID & TreeDedxCalibDataCnv::classID ( )
static

Definition at line 34 of file TreeDedxCalibDataCnv.cxx.

34{ return CLID_Calib_DedxCal; }

Referenced by CalibTreeCnvSvc::createConverter().

◆ i_createObj()

StatusCode TreeDedxCalibDataCnv::i_createObj ( IOpaqueAddress * address,
DataObject *& refpObject )
protectedvirtual

This creates the transient representation of an object from the corresponding ROOT object. This actually does the "new" operation and deals with the attributes of the node. This base class implementation does nothing; it should not normally be called because it doesn't correspond to any TCDS class. Instead, i_createObj of some derived class will be called.

Parameters
fnameThe ROOT file to be read in to be used to builds the object
refpObjectthe object to be built
Returns
status depending on the completion of the call

Reimplemented from TreeCalBaseCnv.

Definition at line 36 of file TreeDedxCalibDataCnv.cxx.

36 {
37
38 MsgStream log( msgSvc(), "TreeDedxCalibDataCnv" );
39 log << MSG::DEBUG << "SetProperty" << endmsg;
40
41 CalibData::DedxCalibData* tmpObject = new CalibData::DedxCalibData;
42 TreeAddress* add = dynamic_cast<TreeAddress*>( addr );
43 DatabaseRecord* records = add->pp();
44
45 /*TBuffer *buf1 = new TBuffer(TBuffer::kRead);
46 TBuffer *buf2 = new TBuffer(TBuffer::kRead);
47 TBuffer *buf3 = new TBuffer(TBuffer::kRead);
48 TBuffer *buf4 = new TBuffer(TBuffer::kRead);
49 TBuffer *buf5 = new TBuffer(TBuffer::kRead);
50 TBuffer *buf6 = new TBuffer(TBuffer::kRead);
51 TBuffer *buf7 = new TBuffer(TBuffer::kRead);
52 TBuffer *buf8 = new TBuffer(TBuffer::kRead);
53 TBuffer *buf9 = new TBuffer(TBuffer::kRead);*/
54
55 TBufferFile* buf1 = new TBufferFile( TBuffer::kRead );
56 TBufferFile* buf2 = new TBufferFile( TBuffer::kRead );
57 TBufferFile* buf3 = new TBufferFile( TBuffer::kRead );
58 TBufferFile* buf4 = new TBufferFile( TBuffer::kRead );
59 TBufferFile* buf5 = new TBufferFile( TBuffer::kRead );
60 TBufferFile* buf6 = new TBufferFile( TBuffer::kRead );
61 TBufferFile* buf7 = new TBufferFile( TBuffer::kRead );
62 TBufferFile* buf8 = new TBufferFile( TBuffer::kRead );
63 TBufferFile* buf9 = new TBufferFile( TBuffer::kRead );
64
65 buf1->SetBuffer( ( *records )["DriftDist"], 512000, kFALSE );
66 buf2->SetBuffer( ( *records )["EntranceAng"], 512000, kFALSE );
67 buf3->SetBuffer( ( *records )["MeanGain"], 512000, kFALSE );
68 buf4->SetBuffer( ( *records )["GasGain"], 512000, kFALSE );
69 buf5->SetBuffer( ( *records )["LayerGain"], 512000, kFALSE );
70 buf6->SetBuffer( ( *records )["Resolution"], 512000, kFALSE );
71 buf7->SetBuffer( ( *records )["WireGain"], 512000, kFALSE );
72 buf8->SetBuffer( ( *records )["ZDep"], 512000, kFALSE );
73 buf9->SetBuffer( ( *records )["RunGain"], 1024000, kFALSE );
74
75 std::cout << " SftVer is " << ( *records )["SftVer"];
76 std::cout << " CalVerSft is " << ( *records )["CalParVer"];
77 std::cout << " File name is " << ( *records )["FileName"] << std::endl;
78
79 TTree* ddgtree = new TTree();
80 ddgtree->Streamer( *buf1 );
81
82 TTree* entratree = new TTree();
83 entratree->Streamer( *buf2 );
84
85 TTree* gaintree = new TTree();
86 gaintree->Streamer( *buf3 );
87
88 TTree* ggstree = new TTree();
89 ggstree->Streamer( *buf4 );
90
91 TTree* layergtree = new TTree();
92 layergtree->Streamer( *buf5 );
93
94 TTree* resoltree = new TTree();
95 resoltree->Streamer( *buf6 );
96
97 TTree* wiregtree = new TTree();
98 wiregtree->Streamer( *buf7 );
99
100 TTree* zdeptree = new TTree();
101 zdeptree->Streamer( *buf8 );
102
103 TTree* rungtree = new TTree();
104 rungtree->Streamer( *buf9 );
105
106 double rungain;
107 double runmean;
108 int runno, evtfrom, evtto;
109 double runresol;
110
111 rungtree->SetBranchAddress( "rungain", &rungain );
112 rungtree->SetBranchAddress( "runmean", &runmean );
113 rungtree->SetBranchAddress( "runno", &runno );
114 rungtree->SetBranchAddress( "runresol", &runresol );
115 if ( rungtree->GetBranchStatus( "evtfrom" ) )
116 {
117 rungtree->SetBranchAddress( "evtfrom", &evtfrom );
118 rungtree->SetBranchAddress( "evtto", &evtto );
119 }
120 else
121 {
122 evtfrom = 0;
123 evtto = 1000000000;
124 }
125 int N = rungtree->GetEntries();
126 tmpObject->setrunNO( N );
127 for ( int i = 0; i < N; i++ )
128 {
129 rungtree->GetEntry( i );
130 tmpObject->setrung( rungain, 0 );
131 tmpObject->setrung( runmean, 1 );
132 tmpObject->setrung( runno, 2 );
133 tmpObject->setrung( runresol, 3 );
134 tmpObject->setrung( evtfrom, 4 );
135 tmpObject->setrung( evtto, 5 );
136 }
137
138 double ddg0[43];
139 double ddg1[43];
140 double ddg2[43];
141 double ddg3[43];
142 double id_doca[1600];
143 double iner_chi[1600];
144 double iner_gain[1600];
145 double iner_hits[1600];
146 double ip_eangle[1600];
147 double out_chi[1600];
148 double out_gain[1600];
149 double out_hits[1600];
150
151 ddgtree->SetBranchAddress( "ddg0", ddg0 );
152 ddgtree->SetBranchAddress( "ddg1", ddg1 );
153 ddgtree->SetBranchAddress( "ddg2", ddg2 );
154 ddgtree->SetBranchAddress( "ddg3", ddg3 );
155 TBranch* bbb = ddgtree->FindBranch( "Id_doca" );
156 if ( bbb )
157 {
158 ddgtree->SetBranchAddress( "Id_doca", id_doca );
159 ddgtree->SetBranchAddress( "Iner_chi", iner_chi );
160 ddgtree->SetBranchAddress( "Iner_gain", iner_gain );
161 ddgtree->SetBranchAddress( "Iner_hits", iner_hits );
162 ddgtree->SetBranchAddress( "Ip_eangle", ip_eangle );
163 ddgtree->SetBranchAddress( "Out_chi", out_chi );
164 ddgtree->SetBranchAddress( "Out_gain", out_gain );
165 ddgtree->SetBranchAddress( "Out_hits", out_hits );
166 }
167
168 ddgtree->GetEntry( 0 );
169 for ( int i = 0; i < 43; i++ )
170 {
171
172 tmpObject->setddg( ddg0[i], 0, i );
173 tmpObject->setddg( ddg1[i], 1, i );
174 tmpObject->setddg( ddg2[i], 2, i );
175 tmpObject->setddg( ddg3[i], 3, i );
176 }
177
178 for ( int i = 0; i < 1600; i++ )
179 {
180 if ( !bbb )
181 {
182 id_doca[i] = 0;
183 iner_chi[i] = 0;
184 iner_gain[i] = 0;
185 iner_hits[i] = 0;
186 ip_eangle[i] = 0;
187 out_chi[i] = 0;
188 out_gain[i] = 0;
189 out_hits[i] = 0;
190 }
191 tmpObject->set_id_doca( id_doca[i], i );
192 tmpObject->set_iner_chi( iner_chi[i], i );
193 tmpObject->set_iner_gain( iner_gain[i], i );
194 tmpObject->set_iner_hits( iner_hits[i], i );
195 tmpObject->set_ip_eangle( ip_eangle[i], i );
196 tmpObject->set_out_chi( out_chi[i], i );
197 tmpObject->set_out_gain( out_gain[i], i );
198 tmpObject->set_out_hits( out_hits[i], i );
199 }
200
201 double entra0[43];
202 double entra1[43];
203 double entra2[43];
204 double entra3[43];
205 double engle[100];
206 int engle_no;
207 entratree->SetBranchAddress( "entra0", entra0 );
208 entratree->SetBranchAddress( "entra1", entra1 );
209 entratree->SetBranchAddress( "entra2", entra2 );
210 entratree->SetBranchAddress( "entra3", entra3 );
211 entratree->SetBranchAddress( "1denangle", engle );
212 entratree->SetBranchAddress( "1denangle_entry", &engle_no );
213 entratree->GetEntry( 0 );
214 for ( int i = 0; i < 43; i++ )
215 {
216 tmpObject->setenta( entra0[i], 0, i );
217 tmpObject->setenta( entra1[i], 1, i );
218 tmpObject->setenta( entra2[i], 2, i );
219 tmpObject->setenta( entra3[i], 3, i );
220 }
221
222 tmpObject->set_enanglesize( engle_no );
223 for ( int i = 0; i < engle_no; i++ ) { tmpObject->set_enangle( engle[i], i ); }
224
225 // read ggscalib ------------------------------------------------------------
226 double ggs0[43];
227 double ggs1[43];
228 double ggs2[43];
229 double ggs3[43];
230 double gcostheta[80];
231 int hadron_entry;
232 double hadron[20];
233 ggstree->SetBranchAddress( "ggs0", ggs0 );
234 ggstree->SetBranchAddress( "ggs1", ggs1 );
235 ggstree->SetBranchAddress( "ggs2", ggs2 );
236 ggstree->SetBranchAddress( "ggs3", ggs3 );
237 ggstree->SetBranchAddress( "hadron", hadron );
238 ggstree->SetBranchAddress( "hadronNo", &hadron_entry );
239 if ( bbb ) { ggstree->SetBranchAddress( "costheta", gcostheta ); }
240 ggstree->GetEntry( 0 );
241 for ( int i = 0; i < 43; i++ )
242 {
243 tmpObject->setggs( ggs0[i], 0, i );
244 tmpObject->setggs( ggs1[i], 1, i );
245 tmpObject->setggs( ggs2[i], 2, i );
246 tmpObject->setggs( ggs3[i], 3, i );
247 }
248 for ( int i = 0; i < 80; i++ )
249 {
250 if ( !bbb ) gcostheta[i] = 0;
251 tmpObject->set_costheta( gcostheta[i], i );
252 }
253 if ( hadron_entry > 20 )
254 {
255 log << MSG::FATAL << "hadron entry is larger than 20, larger than designed" << endmsg;
256 return StatusCode::FAILURE;
257 }
258 tmpObject->set_hadronNo( hadron_entry );
259 for ( int i = 0; i < hadron_entry; i++ ) { tmpObject->set_hadron( hadron[i], i ); }
260
261 // read zdepcalib ------------------------------------------------------------
262 double zdep0[43];
263 double zdep1[43];
264 double zdep2[43];
265 double zdep3[43];
266 zdeptree->SetBranchAddress( "zdep0", zdep0 );
267 zdeptree->SetBranchAddress( "zdep1", zdep1 );
268 zdeptree->SetBranchAddress( "zdep2", zdep2 );
269 zdeptree->SetBranchAddress( "zdep3", zdep3 );
270 zdeptree->GetEntry( 0 );
271
272 for ( int i = 0; i < 43; i++ )
273 {
274 tmpObject->setzdep( zdep0[i], 0, i );
275 tmpObject->setzdep( zdep1[i], 1, i );
276 tmpObject->setzdep( zdep2[i], 2, i );
277 tmpObject->setzdep( zdep3[i], 3, i );
278 }
279 // read gain ------------------------------------------------------------
280 double gain;
281 double gt0[35], gdedx[35];
282 gaintree->SetBranchAddress( "gain", &gain );
283 if ( bbb )
284 {
285 gaintree->SetBranchAddress( "t0", gt0 );
286 gaintree->SetBranchAddress( "dedx", gdedx );
287 }
288 gaintree->GetEntry( 0 );
289 tmpObject->setgain( gain );
290 for ( int i = 0; i < 35; i++ )
291 {
292 if ( !bbb )
293 {
294 gt0[i] = 0;
295 gdedx[i] = 0;
296 }
297 tmpObject->set_t0( gt0[i], i );
298 tmpObject->set_dedx( gdedx[i], i );
299 }
300
301 // read resol----------------------------------------------------------------
302 double resol;
303 resoltree->SetBranchAddress( "resol", &resol );
304 resoltree->GetEntry( 0 );
305 tmpObject->setresol( resol );
306
307 // read wireg----------------------------------------------------------------
308 double wireg[6796];
309 wiregtree->SetBranchAddress( "wireg", wireg );
310 wiregtree->GetEntry( 0 );
311 for ( int i = 0; i < 6796; i++ )
312 {
313 if ( wireg[i] > 5 || wireg[i] < 0.2 ) wireg[i] = 0;
314 tmpObject->setwireg( wireg[i], i );
315 }
316
317 // read layerg----------------------------------------------------------------
318 double layerg[43];
319 layergtree->SetBranchAddress( "layerg", layerg );
320 layergtree->GetEntry( 0 );
321
322 for ( int i = 0; i < 43; i++ ) { tmpObject->setlayerg( layerg[i], i ); }
323
324 // Read in the object
325
326 refpObject = tmpObject;
327
328 delete ddgtree;
329 delete entratree;
330 delete gaintree;
331 delete ggstree;
332 delete layergtree;
333 delete resoltree;
334 delete wiregtree;
335 delete zdeptree;
336 delete rungtree;
337
338 return StatusCode::SUCCESS;
339}
IMessageSvc * msgSvc()
void setlayerg(const double layerg, int i)
void setggs(const double ggs, int i, int j)
void setenta(const double enta, int i, int j)
void setresol(const double resol)
void setddg(const double ddg, int i, int j)
void setwireg(const double wireg, int i)
void setgain(const double gain)
void setzdep(const double zdep, int i, int j)
void setrunNO(const int run_NO)
void setrung(const double rung, int i)

◆ objType()

const CLID & TreeDedxCalibDataCnv::objType ( ) const

Definition at line 32 of file TreeDedxCalibDataCnv.cxx.

32{ return CLID_Calib_DedxCal; }

◆ repSvcType()

virtual long TreeDedxCalibDataCnv::repSvcType ( ) const
inlinevirtual

Definition at line 34 of file TreeDedxCalibDataCnv.h.

◆ CnvFactory< TreeDedxCalibDataCnv >

friend class CnvFactory< TreeDedxCalibDataCnv >
friend

Definition at line 1 of file TreeDedxCalibDataCnv.h.


The documentation for this class was generated from the following files: