BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
TreeDedxCalibDataCnv.cxx
Go to the documentation of this file.
2#include "CalibData/Dedx/DedxCalibData.h"
3#include "CalibDataSvc/IInstrumentName.h"
4#include "CalibMySQLCnvSvc/TreeAddress.h"
5#include "GaudiKernel/MsgStream.h"
6#include "TBuffer.h"
7#include "TBufferFile.h"
8#include "TDirectory.h"
9#include "TFile.h"
10#include "TObject.h"
11#include "TTree.h"
12
13#include "GaudiKernel/DataObject.h"
14#include "GaudiKernel/GenericAddress.h"
15#include "GaudiKernel/IAddressCreator.h"
16#include "GaudiKernel/IConversionSvc.h"
17#include "GaudiKernel/IDataProviderSvc.h"
18#include "GaudiKernel/IOpaqueAddress.h"
19
20#include "CalibDataSvc/ICalibMetaCnvSvc.h"
21#include "CalibDataSvc/ICalibTreeSvc.h" //maybe
22
23// Temporary. Hope to find a better way to do this
24#include "CalibData/CalibModel.h"
25using namespace CalibData;
26// static CnvFactory<TreeDedxCalibDataCnv> DedxCal_factory;
27// const ICnvFactory& TreeDedxCalibDataCnvFactory = DedxCal_factory;
28
31
33
35
36StatusCode TreeDedxCalibDataCnv::i_createObj( IOpaqueAddress* addr, DataObject*& refpObject ) {
37
38 MsgStream log( msgSvc(), "TreeDedxCalibDataCnv" );
39 log << MSG::DEBUG << "SetProperty" << endmsg;
40
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)
TreeCalBaseCnv(ISvcLocator *svc, const CLID &clid)
static const CLID & classID()
virtual StatusCode i_createObj(IOpaqueAddress *address, DataObject *&refpObject)
TreeDedxCalibDataCnv(ISvcLocator *svc)
const CLID & objType() const