BOSS 7.1.1
BESIII Offline Software System
Loading...
Searching...
No Matches
IniMdcCalib Class Reference

#include <IniMdcCalib.h>

+ Inheritance diagram for IniMdcCalib:

Public Member Functions

 IniMdcCalib ()
 
 ~IniMdcCalib ()
 
void initialize (TObjArray *hlist, IMdcGeomSvc *mdcGeomSvc, IMdcCalibFunSvc *mdcFunSvc, IMdcUtilitySvc *mdcUtilitySvc)
 
void setParam (MdcCalParams &param)
 
int fillHist (MdcCalEvent *event)
 
int updateConst (MdcCalibConst *calconst)
 
void printCut () const
 
void clear ()
 
- Public Member Functions inherited from MdcCalib
 MdcCalib ()
 
virtual ~MdcCalib ()
 

Detailed Description

Definition at line 13 of file IniMdcCalib.h.

Constructor & Destructor Documentation

◆ IniMdcCalib()

IniMdcCalib::IniMdcCalib ( )

Definition at line 32 of file IniMdcCalib.cxx.

32 {
33}

◆ ~IniMdcCalib()

IniMdcCalib::~IniMdcCalib ( )

Definition at line 35 of file IniMdcCalib.cxx.

35 {
36}

Member Function Documentation

◆ clear()

void IniMdcCalib::clear ( )
virtual

Implements MdcCalib.

Definition at line 38 of file IniMdcCalib.cxx.

38 {
39 int iEs;
40 for(int lay=0; lay<MdcCalNLayer; lay++){
41 delete m_hlaymapT[lay];
42 delete m_htdc[lay];
43 delete m_htraw[lay];
44 for(iEs=0; iEs<m_param.nEsFlag; iEs++){
45 delete m_htdcTes[lay][iEs];
46 delete m_htrawTes[lay][iEs];
47 }
48
49 delete m_hlaymapQ[lay];
50 delete m_hqraw[lay];
51 }
52
53 for(int wir=0; wir<MdcCalTotCell; wir++){
54 delete m_htrawCel[wir];
55 delete m_hqrawCel[wir];
56 }
57
58 delete m_hLayerHitmapT;
59 delete m_hWireHitMapT;
60
61 delete m_hLayerHitmapQ;
62 delete m_hWireHitMapQ;
63 for(iEs=0; iEs<m_param.nEsFlag; iEs++) delete m_hTes[iEs];
64 delete m_hTesAllFlag;
65 delete m_hTesAll;
66 delete m_hTesCal;
67 delete m_hTesFlag;
68
69 delete m_fdcom;
70 delete m_fdTmap;
71 delete m_fdTraw;
72 delete m_fdTrawCel;
73 delete m_fdTrawTes;
74 delete m_fdQmap;
75 delete m_fdQraw;
76 delete m_fdQrawCel;
77}
const int MdcCalNLayer
Definition MdcCalParams.h:6
const int MdcCalTotCell
Definition MdcCalParams.h:9

◆ fillHist()

int IniMdcCalib::fillHist ( MdcCalEvent * event)
virtual

Implements MdcCalib.

Definition at line 211 of file IniMdcCalib.cxx.

211 {
212 IMessageSvc* msgSvc;
213 Gaudi::svcLocator() -> service("MessageSvc", msgSvc);
214 MsgStream log(msgSvc, "IniMdcCalib");
215 log << MSG::DEBUG << "IniMdcCalib::fillHist()" << endreq;
216
217 int lay;
218 int cel;
219 int wir;
220 int digiId;
221 unsigned fgOverFlow;
222 double tdc;
223 double traw;
224 double adc;
225 double qraw;
226 Identifier id;
227
228 IDataProviderSvc* eventSvc = NULL;
229 Gaudi::svcLocator()->service("EventDataSvc", eventSvc);
230
231 SmartDataPtr<Event::EventHeader> eventHeader(eventSvc,"/Event/EventHeader");
232 if (!eventHeader) {
233 log << MSG::FATAL << "Could not find Event Header" << endreq;
234 return( StatusCode::FAILURE);
235 }
236 int iRun = eventHeader->runNumber();
237 int iEvt = eventHeader->eventNumber();
238
239 // get EsTimeCol
240 double tes = -9999.0;
241 int esTimeflag = -1;
242 SmartDataPtr<RecEsTimeCol> aevtimeCol(eventSvc,"/Event/Recon/RecEsTimeCol");
243 if( (!aevtimeCol) || (aevtimeCol->size()==0) ){
244 tes = -9999.0;
245 esTimeflag = -1;
246 }else{
247 RecEsTimeCol::iterator iter_evt = aevtimeCol->begin();
248 for(; iter_evt!=aevtimeCol->end(); iter_evt++){
249 tes = (*iter_evt)->getTest();
250 esTimeflag = (*iter_evt)->getStat();
251// cout << "tes " << tes << endl;
252 }
253 }
254 m_hTesAllFlag->Fill(esTimeflag);
255 m_hTesAll->Fill(tes);
256 m_hTesFlag->Fill(esTimeflag);
257 int nTesFlag = -1;
258 for(int iEs=0; iEs<m_param.nEsFlag; iEs++){
259 if(esTimeflag == m_param.esFlag[iEs]){
260 m_hTes[iEs]->Fill(tes);
261 nTesFlag = iEs;
262 break;
263 }
264 }
265 bool fgFillTes = false;
266 if( !m_param.esCut){
267 fgFillTes = true;
268 } else if( (nTesFlag > -1) && (tes > m_param.tesMin) && (tes < m_param.tesMax) ){
269 fgFillTes = true;
270 }
271
272 if(fgFillTes) m_hTesCal->Fill(tes);
273
274// cout << setw(10) << iRun << setw(10) << iEvt << setw(10) << tes << endl;
275
276 // retrieve Mdc digi
277 SmartDataPtr<MdcDigiCol> mdcDigiCol(eventSvc,"/Event/Digi/MdcDigiCol");
278 if (!mdcDigiCol) {
279 log << MSG::FATAL << "Could not find event" << endreq;
280 }
281
282 MdcDigiCol::iterator iter = mdcDigiCol->begin();
283 digiId = 0;
284 for(; iter != mdcDigiCol->end(); iter++, digiId++) {
285 MdcDigi *aDigi = (*iter);
286 id = (aDigi)->identify();
287
288 lay = MdcID::layer(id);
289 cel = MdcID::wire(id);
290 wir = m_mdcGeomSvc->Wire(lay, cel)->Id();
291
292 tdc = (aDigi) -> getTimeChannel();
293 adc = (aDigi) -> getChargeChannel();
294 fgOverFlow = (aDigi) -> getOverflow();
295
296 if ( ((fgOverFlow & 1) !=0 ) || ((fgOverFlow & 12) != 0) ||
297 (aDigi->getTimeChannel() == 0x7FFFFFFF) ||
298 (aDigi->getChargeChannel() == 0x7FFFFFFF) ) continue;
299
300 traw = tdc * MdcCalTdcCnv;
301 qraw = adc * MdcCalAdcCnv;
302
303 m_hLayerHitmapT -> Fill(lay);
304 m_hWireHitMapT -> Fill(wir);
305 m_hlaymapT[lay] -> Fill(cel);
306
307 m_hLayerHitmapQ -> Fill(lay);
308 m_hWireHitMapQ -> Fill(wir);
309 m_hlaymapQ[lay] -> Fill(cel);
310
311 if(fgFillTes){
312 traw -= tes;
313 traw += m_param.timeShift;
314
315 m_htdc[lay] -> Fill(tdc);
316 m_htraw[lay] -> Fill(traw);
317 m_hqraw[lay] -> Fill(qraw);
318
319 if(nTesFlag>-1){
320 m_htdcTes[lay][nTesFlag] -> Fill(tdc);
321 m_htrawTes[lay][nTesFlag] -> Fill(traw);
322 }
323
324 m_htrawCel[wir] -> Fill(traw);
325 m_hqrawCel[wir] -> Fill(qraw);
326 }
327 }
328 return 1;
329}
curve Fill()
EvtStreamInputIterator< typename Generator::result_type > iter(Generator gen, int N=0)
const double MdcCalTdcCnv
const double MdcCalAdcCnv
IMessageSvc * msgSvc()
#define NULL
virtual const MdcGeoWire *const Wire(unsigned id)=0
double timeShift
int esFlag[50]
int Id(void) const
Definition MdcGeoWire.h:127
static int layer(const Identifier &id)
Values of different levels (failure returns 0)
Definition MdcID.cxx:49
static int wire(const Identifier &id)
Definition MdcID.cxx:54
unsigned int getChargeChannel() const
Definition RawData.cxx:45
unsigned int getTimeChannel() const
Definition RawData.cxx:40

◆ initialize()

void IniMdcCalib::initialize ( TObjArray * hlist,
IMdcGeomSvc * mdcGeomSvc,
IMdcCalibFunSvc * mdcFunSvc,
IMdcUtilitySvc * mdcUtilitySvc )
virtual

Implements MdcCalib.

Definition at line 79 of file IniMdcCalib.cxx.

80 {
81 IMessageSvc* msgSvc;
82 Gaudi::svcLocator() -> service("MessageSvc", msgSvc);
83 MsgStream log(msgSvc, "IniMdcCalib");
84 log << MSG::INFO << "IniMdcCalib::initialize()" << endreq;
85
86 m_hlist = hlist;
87 m_mdcGeomSvc = mdcGeomSvc;
88 m_mdcFunSvc = mdcFunSvc;
89 m_mdcUtilitySvc = mdcUtilitySvc;
90
91 int lay;
92 int cel;
93 int wir;
94 int ncel;
95 char hname[200];
96
97 m_nWire = m_mdcGeomSvc -> getWireSize();
98 m_nLayer = m_mdcGeomSvc -> getLayerSize();
99
100 m_fdcom = new TFolder("Common", "Common");
101 m_hlist->Add(m_fdcom);
102
103 m_fdTmap = new TFolder("Thitmap", "Thitmap");
104 m_hlist->Add(m_fdTmap);
105
106 m_fdTraw = new TFolder("Traw", "Traw");
107 m_hlist->Add(m_fdTraw);
108
109 m_fdTrawCel = new TFolder("TrawCell", "TrawCell");
110 m_hlist->Add(m_fdTrawCel);
111
112 m_fdTrawTes = new TFolder("TrawTes", "TrawTes");
113 m_hlist->Add(m_fdTrawTes);
114
115 m_fdQmap = new TFolder("Qhitmap", "Qhitmap");
116 m_hlist->Add(m_fdQmap);
117
118 m_fdQraw = new TFolder("Qraw", "Qraw");
119 m_hlist->Add(m_fdQraw);
120
121 m_fdQrawCel = new TFolder("QrawCell", "QrawCell");
122 m_hlist->Add(m_fdQrawCel);
123
124 m_hLayerHitmapT = new TH1F("T_Hitmap_Layer", "", 43, -0.5, 42.5);
125 m_fdcom->Add(m_hLayerHitmapT);
126
127 m_hWireHitMapT = new TH1F("T_Hitmap_Wire", "", 6796, -0.5, 6795.5);
128 m_fdcom->Add(m_hWireHitMapT);
129
130 m_hLayerHitmapQ = new TH1F("Q_Hitmap_Layer", "", 43, -0.5, 42.5);
131 m_fdcom->Add(m_hLayerHitmapQ);
132
133 m_hWireHitMapQ = new TH1F("Q_Hitmap_Wire", "", 6796, -0.5, 6795.5);
134 m_fdcom->Add(m_hWireHitMapQ);
135
136 int iEs;
137 for(iEs=0; iEs<m_param.nEsFlag; iEs++){
138 sprintf(hname, "Tes_%d", m_param.esFlag[iEs]);
139 m_hTes[iEs] = new TH1F(hname, "", 2000, 0, 2000);
140 m_fdcom->Add(m_hTes[iEs]);
141 }
142
143 m_hTesAllFlag = new TH1F("TesAllFlag", "", 300, -0.5, 299.5);
144 m_fdcom -> Add(m_hTesAllFlag);
145
146 m_hTesAll = new TH1F("TesAll", "", 2000, 0, 2000);
147 m_fdcom->Add(m_hTesAll);
148
149 m_hTesCal = new TH1F("TesCal", "", 2000, 0, 2000);
150 m_fdcom->Add(m_hTesCal);
151
152 m_hTesFlag = new TH1F("Tes_Flag", "", 300, -0.5, 299.5);
153 m_fdcom->Add(m_hTesFlag);
154
155 int tdcNbin = 1000;
156 double tdcmin = 0;
157 double tdcmax = 20000;
158
159 int trawNbin = 1000;
160 double trawmin = 0;
161 double trawmax = 2000;
162
163 for(lay=0; lay<m_nLayer; lay++){
164 ncel = m_mdcGeomSvc->Layer(lay)->NCell();
165
166 sprintf(hname, "T_hitmap_Lay%02d", lay);
167 m_hlaymapT[lay] = new TH1F(hname, "", ncel, -0.5, (float)ncel-0.5);
168 m_fdTmap -> Add(m_hlaymapT[lay]);
169
170 sprintf(hname, "TDC_Lay%02d", lay);
171 m_htdc[lay] = new TH1F(hname, "", tdcNbin, tdcmin, tdcmax);
172 m_fdTraw -> Add(m_htdc[lay]);
173
174 sprintf(hname, "Traw_Lay%02d", lay);
175 m_htraw[lay] = new TH1F(hname, "", trawNbin, trawmin, trawmax);
176 m_fdTraw -> Add(m_htraw[lay]);
177
178 for(iEs=0; iEs<m_param.nEsFlag; iEs++){
179 sprintf(hname, "TDC_Lay%02d_Tes%d", lay, m_param.esFlag[iEs]);
180 m_htdcTes[lay][iEs] = new TH1F(hname, "", tdcNbin, tdcmin, tdcmax);
181 m_fdTrawTes -> Add(m_htdcTes[lay][iEs]);
182
183 sprintf(hname, "Traw_Lay%02d_Tes%d", lay, m_param.esFlag[iEs]);
184 m_htrawTes[lay][iEs] = new TH1F(hname, "", trawNbin, trawmin, trawmax);
185 m_fdTrawTes -> Add(m_htrawTes[lay][iEs]);
186 }
187
188 sprintf(hname, "Q_hitmap_Lay%02d", lay);
189 m_hlaymapQ[lay] = new TH1F(hname, "", ncel, -0.5, (float)ncel-0.5);
190 m_fdQmap -> Add(m_hlaymapQ[lay]);
191
192 sprintf(hname, "Qraw_Lay%02d", lay);
193 m_hqraw[lay] = new TH1F(hname, "", 2000, 0, 4000);
194 m_fdQraw -> Add(m_hqraw[lay]);
195 }
196
197 for(wir=0; wir<MdcCalTotCell; wir++){
198 lay = m_mdcGeomSvc -> Wire(wir) -> Layer();
199 cel = m_mdcGeomSvc -> Wire(wir) -> Cell();
200
201 sprintf(hname, "Traw_%02d_%03d_%04d", lay, cel, wir);
202 m_htrawCel[wir] = new TH1F(hname, "", trawNbin, trawmin, trawmax);
203 m_fdTrawCel -> Add(m_htrawCel[wir]);
204
205 sprintf(hname, "Qraw_%02d_%03d_%04d", lay, cel, wir);
206 m_hqrawCel[wir] = new TH1F(hname, "", 2000, 0, 4000);
207 m_fdQrawCel -> Add(m_hqrawCel[wir]);
208 }
209}
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)
mg Add(gr3)
virtual const MdcGeoLayer *const Layer(unsigned id)=0
int NCell(void) const

◆ printCut()

void IniMdcCalib::printCut ( ) const
virtual

Implements MdcCalib.

Definition at line 331 of file IniMdcCalib.cxx.

331 {
332}

◆ setParam()

void IniMdcCalib::setParam ( MdcCalParams & param)
inlinevirtual

Implements MdcCalib.

Definition at line 76 of file IniMdcCalib.h.

76 {
77 MdcCalib::setParam(param);
78 m_param = param;
79}
virtual void setParam(MdcCalParams &param)=0
Definition MdcCalib.h:306

◆ updateConst()

int IniMdcCalib::updateConst ( MdcCalibConst * calconst)
virtual

Implements MdcCalib.

Definition at line 334 of file IniMdcCalib.cxx.

334 {
335 IMessageSvc* msgSvc;
336 Gaudi::svcLocator() -> service("MessageSvc", msgSvc);
337 MsgStream log(msgSvc, "IniMdcCalib");
338 log << MSG::DEBUG << "IniMdcCalib::updateConst()" << endreq;
339
340 int lay;
341 int wir;
342 double t0Fit[MdcCalNLayer];
343 double t0Cal[MdcCalNLayer];
344 double tmax[MdcCalNLayer];
345 double initT0 = m_param.initT0;
346
347 int fitTminFg[MdcCalNLayer];
348 int fitTmaxFg[MdcCalNLayer];
349 double chisq;
350 double ndf;
351 double chindfTmin[MdcCalNLayer];
352 double chindfTmax[MdcCalNLayer];
353 char funname[200];
354
355 // fit Tmin
356 TF1* ftmin[MdcCalNLayer];
357// sprintf(funname, "ftmin", lay);
358// TF1* ftmin = new TF1(funname, funTmin, 0, 150, 6);
359 for(lay=0; lay<m_nLayer; lay++){
360 fitTminFg[lay] = 0;
361 chindfTmin[lay] = -1;
362 sprintf(funname, "ftmin%02d", lay);
363 ftmin[lay] = new TF1(funname, funTmin, 0, 150, 6);
364
365 if(1 == m_param.fgCalib[lay]){
366 Stat_t nEntryTot = 0;
367 for(int ibin=1; ibin<=25; ibin++){
368 Stat_t entry = m_htraw[lay]->GetBinContent(ibin);
369 nEntryTot += entry;
370 }
371 double c0Ini = (double)nEntryTot / 25.0;
372 double c1Ini = (m_htraw[lay]->GetMaximum()) - c0Ini;
373
374 ftmin[lay] -> SetParameter(0, c0Ini);
375 ftmin[lay] -> SetParameter(1, c1Ini);
376 ftmin[lay] -> SetParameter(2, 0);
377 ftmin[lay] -> SetParameter(4, initT0);
378 ftmin[lay] -> SetParameter(5, 2);
379
380 m_htraw[lay] -> Fit(funname, "Q", "",
381 m_param.tminFitRange[lay][0],
382 m_param.tminFitRange[lay][1]);
383 chisq = ftmin[lay]->GetChisquare();
384 gStyle -> SetOptFit(11);
385 ndf = ftmin[lay]->GetNDF();
386 chindfTmin[lay] = chisq / ndf;
387 if(chindfTmin[lay] < m_param.tminFitChindf){
388 fitTminFg[lay] = 1;
389 t0Fit[lay] = ftmin[lay]->GetParameter(4);
390 t0Fit[lay] += m_param.t0Shift;
391 t0Cal[lay] = t0Fit[lay] - m_param.timeShift;
392 }
393 }
394
395 if(0 == fitTminFg[lay]){
396 wir = m_mdcGeomSvc->Wire(lay, 0)->Id();
397 t0Cal[lay] = calconst->getT0(wir);
398 t0Fit[lay] = t0Cal[lay] + m_param.timeShift;
399 }
400 }
401
402 // fit Tmax
403 TF1* ftmax[MdcCalNLayer];
404 for(lay=0; lay<m_nLayer; lay++){
405 fitTmaxFg[lay] = 0;
406 chindfTmax[lay] = -1;
407 sprintf(funname, "ftmax%02d", lay);
408 ftmax[lay] = new TF1(funname, funTmax, 250, 500, 4);
409
410 if(1 == m_param.fgCalib[lay]){
411 ftmax[lay] -> SetParameter(2, m_param.initTm[lay]);
412 ftmax[lay] -> SetParameter(3, 10);
413
414 m_htraw[lay] -> Fit(funname, "Q+", "",
415 m_param.tmaxFitRange[lay][0],
416 m_param.tmaxFitRange[lay][1]);
417 gStyle -> SetOptFit(11);
418 chisq = ftmax[lay]->GetChisquare();
419 ndf = ftmax[lay]->GetNDF();
420 chindfTmax[lay] = chisq / ndf;
421 if(chindfTmax[lay] < m_param.tmaxFitChindf){
422 fitTmaxFg[lay] = 1;
423 tmax[lay] = ftmax[lay]->GetParameter(2);
424 }
425 }
426
427 if(0 == fitTmaxFg[lay]){
428 tmax[lay] = (calconst->getXtpar(lay, 0, 0, 6)) + t0Fit[lay];
429 }
430 }
431
432 // output for check
433 ofstream ft0("iniT0.dat");
434 for(lay=0; lay<m_nLayer; lay++){
435 ft0 << setw(5) << lay << setw(3) << fitTminFg[lay]
436 << setw(12) << t0Cal[lay] << setw(12) << t0Fit[lay]
437 << setw(12) << chindfTmin[lay] << setw(5) << fitTmaxFg[lay]
438 << setw(12) << tmax[lay] << setw(12) << tmax[lay] - t0Fit[lay]
439 << setw(12) << chindfTmax[lay] << endl;
440 }
441 ft0.close();
442 cout << "iniT0.dat was written." << endl;
443
444 // set T0
445 int i;
446 int nwire = m_mdcGeomSvc -> getWireSize();
447 for(i=0; i<nwire; i++){
448 lay = m_mdcGeomSvc -> Wire(i) -> Layer();
449 if(1 == m_param.fgCalib[lay]){
450 calconst -> resetT0(i, t0Cal[lay]);
451 calconst -> resetDelT0(i, 0.0);
452 }
453 }
454
455 if(0 == m_param.fgIniCalConst){
456 // set X-T
457 int lr;
458 int iEntr;
459 int ord;
460 double xtpar;
461 double xtini[8] = {0, 0.03, 0, 0, 0, 0, 999.9, 0};
462 for(lay=0; lay<m_nLayer; lay++){
463 if(1 != m_param.fgCalib[lay]) continue;
464
465 for(iEntr=0; iEntr<MdcCalNENTRXT; iEntr++){
466 for(lr=0; lr<MdcCalLR; lr++){
467 for(ord=0; ord<MdcCalXtNPars; ord++){
468 if(6 == ord){
469 xtpar = tmax[lay] - t0Fit[lay];
470 } else{
471 xtpar = xtini[ord];
472 }
473 calconst -> resetXtpar(lay, iEntr, lr, ord, xtpar);
474 }
475 }
476 }
477 }
478
479 // set Q-T
480 for(lay=0; lay<m_nLayer; lay++){
481 calconst -> resetQtpar0(lay, 0.0);
482 calconst -> resetQtpar1(lay, 0.0);
483 }
484
485 // set S-D
486 int bin;
487 double sdpar = m_param.initSigma; // mm
488 for(lay=0; lay<m_nLayer; lay++){
489 for(iEntr=0; iEntr<MdcCalNENTRSD; iEntr++){
490 for(lr=0; lr<2; lr++){
491 for(bin=0; bin<MdcCalSdNBIN; bin++){
492 calconst -> resetSdpar(lay, iEntr, lr, bin, sdpar);
493 }
494 }
495 }
496 }
497 } else if(2 == m_param.fgIniCalConst){
498 int lr;
499 int iEntr;
500 double xtpar;
501 for(lay=0; lay<m_nLayer; lay++){
502 for(iEntr=0; iEntr<MdcCalNENTRXT; iEntr++){
503 for(lr=0; lr<MdcCalLR; lr++){
504 xtpar = tmax[lay] - t0Fit[lay];
505 calconst -> resetXtpar(lay, iEntr, lr, 6, xtpar);
506 }
507 }
508 }
509 }
510
511// delete ftmin;
512 for(lay=0; lay<MdcCalNLayer; lay++){
513 delete ftmin[lay];
514 delete ftmax[lay];
515 }
516 return 1;
517}
void Fit()
*******INTEGER m_nBinMax INTEGER m_NdiMax !No of bins in histogram for cell exploration division $ !Last vertex $ !Last active cell $ !Last cell in buffer $ !No of sampling when dividing cell $ !No of function total $ !Flag for random ceel for $ !Flag for type of for WtMax $ !Flag which decides whether vertices are included in the sampling $ entire domain is hyp !Maximum effective eevents per bin
Definition FoamA.h:85
const int MdcCalNENTRSD
const int MdcCalXtNPars
const int MdcCalSdNBIN
const int MdcCalNENTRXT
const int MdcCalLR
double initTm[MdcCalNLayer]
int fgCalib[MdcCalNLayer]
double tminFitRange[MdcCalNLayer][2]
double initSigma
double tminFitChindf
double tmaxFitChindf
double tmaxFitRange[MdcCalNLayer][2]
double getT0(int wireid) const
double getXtpar(int lay, int entr, int lr, int order)

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