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

#include <GrXtMdcCalib.h>

Inheritance diagram for GrXtMdcCalib:

Public Member Functions

 GrXtMdcCalib ()
 ~GrXtMdcCalib ()
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 ()
int findXtEntr (int lay, int iEntr, int lr) const
Public Member Functions inherited from MdcCalib
 MdcCalib ()
virtual ~MdcCalib ()

Static Public Member Functions

static Double_t xtfun (Double_t *x, Double_t *par)
static Double_t xtedge (Double_t *x, Double_t *par)

Detailed Description

Definition at line 12 of file GrXtMdcCalib.h.

Constructor & Destructor Documentation

◆ GrXtMdcCalib()

GrXtMdcCalib::GrXtMdcCalib ( )

Definition at line 22 of file GrXtMdcCalib.cxx.

22 {
23 m_maxNhit = 5000;
24 m_fgIni = false;
25}

◆ ~GrXtMdcCalib()

GrXtMdcCalib::~GrXtMdcCalib ( )

Definition at line 27 of file GrXtMdcCalib.cxx.

27{}

Member Function Documentation

◆ clear()

void GrXtMdcCalib::clear ( )
virtual

Implements MdcCalib.

Definition at line 29 of file GrXtMdcCalib.cxx.

29 {
30 cout << "~GrXtMdcCalib" << endl;
31 for ( int lay = 0; lay < MdcCalNLayer; lay++ )
32 {
33 for ( int iEntr = 0; iEntr < MdcCalNENTRXT; iEntr++ )
34 {
35 for ( int iLR = 0; iLR < MdcCalLR; iLR++ ) { delete m_grxt[lay][iEntr][iLR]; }
36 }
37 }
38 delete m_haxis;
39 delete m_fdXt;
40
42}
const int MdcCalNLayer
Definition MdcCalParams.h:6
const int MdcCalNENTRXT
const int MdcCalLR
virtual void clear()=0
Definition MdcCalib.cxx:83

◆ fillHist()

int GrXtMdcCalib::fillHist ( MdcCalEvent * event)
virtual

Implements MdcCalib.

Definition at line 89 of file GrXtMdcCalib.cxx.

89 {
90 IMessageSvc* msgSvc;
91 Gaudi::svcLocator()->service( "MessageSvc", msgSvc );
92 MsgStream log( msgSvc, "GrXtMdcCalib" );
93 log << MSG::DEBUG << "GrXtMdcCalib::fillHist()" << endmsg;
94
95 MdcCalib::fillHist( event );
96
97 // get EsTimeCol
98 bool esCutFg = event->getEsCutFlag();
99 if ( !esCutFg ) return -1;
100
101 int i;
102 int k;
103 int lay;
104 int iLR;
105 int iEntr;
106
107 double dr;
108 double dz;
109 double doca;
110 double tdr;
111 double resi;
112 double entrance;
113
114 int nhitlay;
115 bool fgHitLay[MdcCalNLayer];
116 bool fgTrk;
117
118 if ( !m_fgIni )
119 {
120 for ( lay = 0; lay < MdcCalNLayer; lay++ )
121 {
122 if ( lay < 8 ) m_docaMax[lay] = m_param.maxDocaInner;
123 else m_docaMax[lay] = m_param.maxDocaOuter;
124 }
125 m_fgIni = true;
126 }
127
128 MdcCalRecTrk* rectrk;
129 MdcCalRecHit* rechit;
130
131 int nhit;
132 int ntrk = event->getNTrk();
133 for ( i = 0; i < ntrk; i++ )
134 {
135 fgTrk = true;
136 rectrk = event->getRecTrk( i );
137 nhit = rectrk->getNHits();
138
139 // dr cut
140 dr = rectrk->getDr();
141 if ( fabs( dr ) > m_param.drCut ) continue;
142
143 // dz cut
144 dz = rectrk->getDz();
145 if ( fabs( dz ) > m_param.dzCut ) continue;
146
147 for ( lay = 0; lay < MdcCalNLayer; lay++ ) { fgHitLay[lay] = false; }
148
149 for ( k = 0; k < nhit; k++ )
150 {
151 rechit = rectrk->getRecHit( k );
152 lay = rechit->getLayid();
153 doca = rechit->getDocaInc();
154 resi = rechit->getResiInc();
155 fgHitLay[lay] = true;
156
157 // if( (fabs(doca) > m_docaMax[lay]) ||
158 // (fabs(resi) > m_param.resiCut[lay]) ){
159 // fgTrk = false;
160 // }
161 }
162 if ( !fgTrk ) continue;
163
164 nhitlay = 0;
165 for ( lay = 0; lay < MdcCalNLayer; lay++ )
166 {
167 if ( fgHitLay[lay] ) nhitlay++;
168 }
169 if ( nhitlay < m_param.nHitLayCut ) continue;
170
171 for ( k = 0; k < nhit; k++ )
172 {
173 rechit = rectrk->getRecHit( k );
174 lay = rechit->getLayid();
175 doca = rechit->getDocaInc();
176 resi = rechit->getResiInc();
177 iLR = rechit->getLR();
178 entrance = rechit->getEntra();
179 tdr = rechit->getTdrift();
180
181 if ( ( fabs( doca ) > m_docaMax[lay] ) || ( fabs( resi ) > m_param.resiCut[lay] ) )
182 { continue; }
183
184 if ( 0 == lay )
185 {
186 if ( !fgHitLay[1] ) continue;
187 }
188 else if ( 42 == lay )
189 {
190 if ( !fgHitLay[41] ) continue;
191 }
192 else
193 {
194 if ( ( !fgHitLay[lay - 1] ) && ( !fgHitLay[lay + 1] ) ) continue;
195 }
196
197 iEntr = m_mdcFunSvc->getXtEntrIndex( entrance );
198
199 if ( iLR < 2 )
200 {
201 if ( m_nhit[lay][iEntr][iLR] < m_maxNhit )
202 {
203 m_grxt[lay][iEntr][iLR]->SetPoint( m_nhit[lay][iEntr][iLR], tdr, fabs( doca ) );
204 m_nhit[lay][iEntr][iLR]++;
205 }
206 }
207
208 if ( m_nhit[lay][iEntr][2] < m_maxNhit )
209 {
210 m_grxt[lay][iEntr][2]->SetPoint( m_nhit[lay][iEntr][2], tdr, fabs( doca ) );
211 m_nhit[lay][iEntr][2]++;
212 }
213 } // hit loop
214 } // track loop
215 return 1;
216}
IMessageSvc * msgSvc()
double getDocaInc() const
double getTdrift() const
double getEntra() const
int getLayid() const
double getResiInc() const
int getLR() const
MdcCalRecHit * getRecHit(int index) const
double getDz() const
int getNHits() const
double getDr() const
virtual int fillHist(MdcCalEvent *event)=0
Definition MdcCalib.cxx:767

◆ findXtEntr()

int GrXtMdcCalib::findXtEntr ( int lay,
int iEntr,
int lr ) const

Definition at line 325 of file GrXtMdcCalib.cxx.

325 {
326 int id0 = 8;
327 int id1 = 9;
328 int idmax = 17;
329 int entrId = -1;
330 if ( iEntr <= id0 )
331 {
332 int id = -1;
333 for ( int i = iEntr; i <= id0; i++ )
334 {
335 if ( m_fgFit[lay][i][lr] )
336 {
337 id = i;
338 break;
339 }
340 }
341 if ( -1 != id ) entrId = id;
342 else
343 {
344 for ( int i = iEntr; i >= 0; i-- )
345 {
346 if ( m_fgFit[lay][i][lr] )
347 {
348 id = i;
349 break;
350 }
351 }
352 entrId = id;
353 }
354 }
355 else
356 {
357 int id = -1;
358 for ( int i = iEntr; i >= id1; i-- )
359 {
360 if ( m_fgFit[lay][i][lr] )
361 {
362 id = i;
363 break;
364 }
365 }
366 if ( -1 != id ) entrId = id;
367 else
368 {
369 for ( int i = iEntr; i < idmax; i++ )
370 {
371 if ( m_fgFit[lay][i][lr] )
372 {
373 id = i;
374 break;
375 }
376 }
377 entrId = id;
378 }
379 }
380 if ( -1 == entrId )
381 {
382 cout << "find EntrId error "
383 << "layer " << lay << " iEntr " << iEntr << " lr " << lr << endl;
384 }
385
386 return entrId;
387}

Referenced by updateConst().

◆ initialize()

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

Implements MdcCalib.

Definition at line 44 of file GrXtMdcCalib.cxx.

45 {
46 IMessageSvc* msgSvc;
47 Gaudi::svcLocator()->service( "MessageSvc", msgSvc );
48 MsgStream log( msgSvc, "GrXtMdcCalib" );
49 log << MSG::INFO << "GrXtMdcCalib::initialize()" << endmsg;
50
51 m_hlist = hlist;
52 m_mdcGeomSvc = mdcGeomSvc;
53 m_mdcFunSvc = mdcFunSvc;
54 m_mdcUtilitySvc = mdcUtilitySvc;
55
56 MdcCalib::initialize( m_hlist, m_mdcGeomSvc, m_mdcFunSvc, m_mdcUtilitySvc );
57
58 int lay;
59 int iLR;
60 int iEntr;
61 char hname[200];
62
63 m_fdXt = new TFolder( "fdXtGr", "fdXtGr" );
64 m_hlist->Add( m_fdXt );
65
66 m_haxis = new TH2F( "axis", "", 50, 0, 300, 50, 0, 9 );
67 m_haxis->SetStats( 0 );
68 m_fdXt->Add( m_haxis );
69
70 for ( lay = 0; lay < MdcCalNLayer; lay++ )
71 {
72 for ( iEntr = 0; iEntr < MdcCalNENTRXT; iEntr++ )
73 {
74 for ( iLR = 0; iLR < MdcCalLR; iLR++ )
75 {
76 m_nhit[lay][iEntr][iLR] = 0;
77
78 sprintf( hname, "grXt%02d_%02d_lr%01d", lay, iEntr, iLR );
79 m_grxt[lay][iEntr][iLR] = new TGraph();
80 m_grxt[lay][iEntr][iLR]->SetName( hname );
81 m_grxt[lay][iEntr][iLR]->SetMarkerStyle( 10 );
82 m_grxt[lay][iEntr][iLR]->SetLineColor( 10 );
83 m_fdXt->Add( m_grxt[lay][iEntr][iLR] );
84 }
85 }
86 }
87}
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)
virtual void initialize(TObjArray *hlist, IMdcGeomSvc *mdcGeomSvc, IMdcCalibFunSvc *mdcFunSvc, IMdcUtilitySvc *mdcUtilitySvc)=0
Definition MdcCalib.cxx:225

◆ printCut()

void GrXtMdcCalib::printCut ( ) const
virtual

Implements MdcCalib.

Definition at line 218 of file GrXtMdcCalib.cxx.

virtual void printCut() const =0

◆ setParam()

void GrXtMdcCalib::setParam ( MdcCalParams & param)
inlinevirtual

Implements MdcCalib.

Definition at line 53 of file GrXtMdcCalib.h.

53 {
54 MdcCalib::setParam( param );
55 m_param = param;
56}
virtual void setParam(MdcCalParams &param)=0
Definition MdcCalib.h:305

◆ updateConst()

int GrXtMdcCalib::updateConst ( MdcCalibConst * calconst)
virtual

Implements MdcCalib.

Definition at line 220 of file GrXtMdcCalib.cxx.

220 {
221 IMessageSvc* msgSvc;
222 Gaudi::svcLocator()->service( "MessageSvc", msgSvc );
223 MsgStream log( msgSvc, "GrXtMdcCalib" );
224 log << MSG::INFO << "GrXtMdcCalib::updateConst()" << endmsg;
225
226 MdcCalib::updateConst( calconst );
227
228 int ord;
229 double xtpar[MdcCalNLayer][MdcCalNENTRXT][MdcCalLR][8];
230 TF1* fxtDr = new TF1( "fxtDr", xtfun, 0, 300, 6 );
231 TF1* fxtEd = new TF1( "fxtEd", xtedge, 150, 500, 1 );
232 if ( 1 == m_param.fixXtC0 ) fxtDr->FixParameter( 0, 0 );
233
234 for ( int lay = 0; lay < MdcCalNLayer; lay++ )
235 {
236 for ( int iEntr = 0; iEntr < MdcCalNENTRXT; iEntr++ )
237 {
238 for ( int lr = 0; lr < MdcCalLR; lr++ )
239 {
240 m_fgFit[lay][iEntr][lr] = false;
241 if ( 0 == m_param.fgCalib[lay] ) continue;
242
243 if ( m_nhit[lay][iEntr][lr] > 1000 )
244 {
245 TMAX = calconst->getXtpar( lay, iEntr, lr, 6 );
246
247 m_grxt[lay][iEntr][lr]->Fit( "fxtDr", "Q+", "", 0, TMAX );
248
249 for ( ord = 0; ord < 6; ord++ )
250 { xtpar[lay][iEntr][lr][ord] = fxtDr->GetParameter( ord ); }
251 xtpar[lay][iEntr][lr][6] = TMAX;
252
253 DMAX = 0.0;
254 for ( ord = 0; ord < 6; ord++ )
255 DMAX += xtpar[lay][iEntr][lr][ord] * pow( TMAX, ord );
256
257 m_grxt[lay][iEntr][lr]->Fit( "fxtEd", "Q+", "", TMAX, TMAX + 300 );
258 xtpar[lay][iEntr][lr][7] = fxtEd->GetParameter( 0 );
259 if ( xtpar[lay][iEntr][lr][7] < 0.0 ) xtpar[lay][iEntr][lr][7] = 0.0;
260 m_fgFit[lay][iEntr][lr] = true;
261
262 // for(ord=0; ord<8; ord++){
263 // calconst -> resetXtpar(lay, iEntr, lr, ord, xtpar[ord]);
264 // }
265 }
266
267 } // end of lr loop
268 } // end of entrance angle loop
269 } // end of layer loop
270
271 ofstream fxtlog( "xtlog" );
272 for ( int lay = 0; lay < MdcCalNLayer; lay++ )
273 {
274 for ( int iEntr = 0; iEntr < MdcCalNENTRXT; iEntr++ )
275 {
276 for ( int lr = 0; lr < MdcCalLR; lr++ )
277 {
278 fxtlog << setw( 3 ) << lay << setw( 3 ) << iEntr << setw( 3 ) << lr;
279
280 int fgUpdate = -1;
281 if ( m_fgFit[lay][iEntr][lr] )
282 {
283 fgUpdate = 1;
284 for ( ord = 0; ord < 8; ord++ )
285 calconst->resetXtpar( lay, iEntr, lr, ord, xtpar[lay][iEntr][lr][ord] );
286 }
287 else
288 {
289 int iEntrNew = findXtEntr( lay, iEntr, lr );
290 if ( -1 != iEntrNew )
291 {
292 fgUpdate = 2;
293 for ( ord = 0; ord < 8; ord++ )
294 { calconst->resetXtpar( lay, iEntr, lr, ord, xtpar[lay][iEntrNew][lr][ord] ); }
295 }
296 }
297 fxtlog << setw( 3 ) << fgUpdate;
298 for ( ord = 0; ord < 8; ord++ )
299 {
300 double par = calconst->getXtpar( lay, iEntr, lr, ord );
301 fxtlog << setw( 14 ) << par;
302 }
303 fxtlog << endl;
304 }
305 }
306 }
307 fxtlog.close();
308
309 cout << "Xt update finished. File xtlog was written." << endl;
310 delete fxtDr;
311 delete fxtEd;
312}
int findXtEntr(int lay, int iEntr, int lr) const
static Double_t xtedge(Double_t *x, Double_t *par)
static Double_t xtfun(Double_t *x, Double_t *par)
void resetXtpar(int lay, int entr, int lr, int order, double val)
double getXtpar(int lay, int entr, int lr, int order)
virtual int updateConst(MdcCalibConst *calconst)=0

◆ xtedge()

Double_t GrXtMdcCalib::xtedge ( Double_t * x,
Double_t * par )
static

Definition at line 320 of file GrXtMdcCalib.cxx.

320 {
321 double val = DMAX + ( x[0] - TMAX ) * par[0];
322 return val;
323}
Double_t x[10]

Referenced by updateConst().

◆ xtfun()

Double_t GrXtMdcCalib::xtfun ( Double_t * x,
Double_t * par )
static

Definition at line 314 of file GrXtMdcCalib.cxx.

314 {
315 Double_t val = 0.0;
316 for ( Int_t ord = 0; ord < 6; ord++ ) { val += par[ord] * pow( x[0], ord ); }
317 return val;
318}

Referenced by updateConst().


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