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

#include <QtMdcCalib.h>

Inheritance diagram for QtMdcCalib:

Public Member Functions

 QtMdcCalib ()
 ~QtMdcCalib ()
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 ()

Static Public Member Functions

static Double_t qtFun (Double_t *x, Double_t *par)

Detailed Description

Definition at line 8 of file QtMdcCalib.h.

Constructor & Destructor Documentation

◆ QtMdcCalib()

QtMdcCalib::QtMdcCalib ( )

Definition at line 21 of file QtMdcCalib.cxx.

21 {
22 m_vdr = 0.03;
23
24 m_nlayer = MdcCalNLayer;
25 m_qtorder = MdcCalQtOrd;
26 m_nbin = MdcCalNQBin;
27 m_innNLay = MdcCalInnNLay;
28}
const int MdcCalNLayer
Definition MdcCalParams.h:6
const int MdcCalQtOrd
const int MdcCalNQBin
const int MdcCalInnNLay
Definition MdcCalParams.h:7

◆ ~QtMdcCalib()

QtMdcCalib::~QtMdcCalib ( )

Definition at line 30 of file QtMdcCalib.cxx.

30{}

Member Function Documentation

◆ clear()

void QtMdcCalib::clear ( )
virtual

Implements MdcCalib.

Definition at line 32 of file QtMdcCalib.cxx.

32 {
33 int bin;
34 for ( int lay = 0; lay < MdcCalNLayer; lay++ )
35 {
36 delete m_hqhit[lay];
37 delete m_grqt[lay];
38 delete m_grqdt[lay];
39 for ( bin = 0; bin < MdcCalQtOrd; bin++ ) { delete m_hqt[lay][bin]; }
40 }
41 delete m_fdQt;
42 delete m_fdQ_T;
43
45}
*******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
virtual void clear()=0
Definition MdcCalib.cxx:83

◆ fillHist()

int QtMdcCalib::fillHist ( MdcCalEvent * event)
virtual

Implements MdcCalib.

Definition at line 107 of file QtMdcCalib.cxx.

107 {
108 IMessageSvc* msgSvc;
109 Gaudi::svcLocator()->service( "MessageSvc", msgSvc );
110 MsgStream log( msgSvc, "QtMdcCalib" );
111 log << MSG::DEBUG << "QtMdcCalib::fillHist()" << endmsg;
112
113 MdcCalib::fillHist( event );
114
115 // get EsTimeCol
116 bool esCutFg = event->getEsCutFlag();
117 if ( !esCutFg ) return -1;
118
119 int i;
120 int k;
121 int bin;
122 int lay;
123
124 double doca;
125 double dmeas;
126
127 int ntrk;
128 int nhit;
129
130 bool fgHitLay[MdcCalNLayer];
131
132 MdcCalRecTrk* rectrk;
133 MdcCalRecHit* rechit;
134
135 ntrk = event->getNTrk();
136 for ( i = 0; i < ntrk; i++ )
137 {
138 rectrk = event->getRecTrk( i );
139 nhit = rectrk->getNHits();
140
141 // dr cut
142 double dr = rectrk->getDr();
143 if ( fabs( dr ) > m_param.drCut ) continue;
144
145 // dz cut
146 double dz = rectrk->getDz();
147 if ( fabs( dz ) > m_param.dzCut ) continue;
148
149 // momentum cut
150 double p = rectrk->getP();
151 if ( ( fabs( p ) < m_param.pCut[0] ) || ( fabs( p ) > m_param.pCut[1] ) ) continue;
152
153 for ( lay = 0; lay < MdcCalNLayer; lay++ ) fgHitLay[lay] = false;
154 for ( k = 0; k < nhit; k++ )
155 {
156 rechit = rectrk->getRecHit( k );
157 lay = rechit->getLayid();
158 fgHitLay[lay] = true;
159 }
160
161 int nhitlay = 0;
162 for ( lay = 0; lay < MdcCalNLayer; lay++ )
163 if ( fgHitLay[lay] ) nhitlay++;
164 if ( nhitlay < m_param.nHitLayCut ) continue;
165
166 bool fgNoise = rectrk->getFgNoiseRatio();
167 if ( m_param.noiseCut && ( !fgNoise ) ) continue;
168
169 for ( k = 0; k < nhit; k++ )
170 {
171 rechit = rectrk->getRecHit( k );
172 lay = rechit->getLayid();
173 doca = rechit->getDocaInc();
174 dmeas = rechit->getDmeas();
175 m_resi = rechit->getResiInc();
176 m_qhit = rechit->getQhit();
177
178 m_hqhit[lay]->Fill( m_qhit );
179
180 bin = (int)( ( m_qhit - m_qmin[lay] ) / m_qbinw[lay] );
181 if ( ( bin >= 0 ) && ( bin < m_nbin ) ) { m_hqt[lay][bin]->Fill( m_resi ); }
182 }
183 }
184 return 1;
185}
IMessageSvc * msgSvc()
double getDmeas() const
double getDocaInc() const
double getQhit() const
int getLayid() const
double getResiInc() const
MdcCalRecHit * getRecHit(int index) const
double getP() const
double getDz() const
int getNHits() const
bool getFgNoiseRatio() const
double getDr() const
virtual int fillHist(MdcCalEvent *event)=0
Definition MdcCalib.cxx:767

◆ initialize()

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

Implements MdcCalib.

Definition at line 47 of file QtMdcCalib.cxx.

48 {
49 IMessageSvc* msgSvc;
50 Gaudi::svcLocator()->service( "MessageSvc", msgSvc );
51 MsgStream log( msgSvc, "QtMdcCalib" );
52 log << MSG::INFO << "QtMdcCalib::initialize()" << endmsg;
53
54 m_hlist = hlist;
55 m_mdcGeomSvc = mdcGeomSvc;
56 m_mdcFunSvc = mdcFunSvc;
57 m_mdcUtilitySvc = mdcUtilitySvc;
58
59 MdcCalib::initialize( m_hlist, m_mdcGeomSvc, m_mdcFunSvc, m_mdcUtilitySvc );
60
61 int bin;
62 int lay;
63 double qbinw;
64 char hname[200];
65
66 for ( lay = 0; lay < m_nlayer; lay++ )
67 {
68 m_qmin[lay] = m_param.qmin[lay];
69 m_qmax[lay] = m_param.qmax[lay];
70 m_qbinw[lay] = ( m_qmax[lay] - m_qmin[lay] ) / (double)m_nbin;
71 }
72
73 m_fdQt = new TFolder( "fdQt", "fdQt" );
74 m_fdQ_T = new TFolder( "QtPlot", "QtPlot" );
75 m_hlist->Add( m_fdQt );
76 m_hlist->Add( m_fdQ_T );
77
78 for ( lay = 0; lay < m_nlayer; lay++ )
79 {
80 sprintf( hname, "HQ_Layer%02d", lay );
81 m_hqhit[lay] = new TH1F( hname, "", 1500, 0, 3000 );
82 m_fdQt->Add( m_hqhit[lay] );
83
84 sprintf( hname, "HQT_Plot_lay%02d", lay );
85 m_grqt[lay] = new TGraphErrors();
86 m_grqt[lay]->SetName( hname );
87 m_grqt[lay]->SetMarkerStyle( 20 );
88 m_grqt[lay]->SetMarkerColor( 1 );
89 m_fdQ_T->Add( m_grqt[lay] );
90
91 sprintf( hname, "HQdelT_Plot_lay%02d", lay );
92 m_grqdt[lay] = new TGraphErrors();
93 m_grqdt[lay]->SetName( hname );
94 m_grqdt[lay]->SetMarkerStyle( 10 );
95 m_grqdt[lay]->SetMarkerColor( 1 );
96 m_fdQ_T->Add( m_grqdt[lay] );
97
98 for ( bin = 0; bin < m_nbin; bin++ )
99 {
100 sprintf( hname, "HQT_Lay%02d_Bin%02d", lay, bin );
101 m_hqt[lay][bin] = new TH1F( hname, "", 200, -1, 1 );
102 m_fdQt->Add( m_hqt[lay][bin] );
103 }
104 }
105}
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 QtMdcCalib::printCut ( ) const
virtual

Implements MdcCalib.

Definition at line 187 of file QtMdcCalib.cxx.

virtual void printCut() const =0

◆ qtFun()

Double_t QtMdcCalib::qtFun ( Double_t * x,
Double_t * par )
static

Definition at line 283 of file QtMdcCalib.cxx.

283 {
284 double tw = par[1] / sqrt( x[0] ) + par[0];
285 return tw;
286}
Double_t x[10]

Referenced by updateConst().

◆ setParam()

void QtMdcCalib::setParam ( MdcCalParams & param)
inlinevirtual

Implements MdcCalib.

Definition at line 53 of file QtMdcCalib.h.

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

◆ updateConst()

int QtMdcCalib::updateConst ( MdcCalibConst * calconst)
virtual

Implements MdcCalib.

Definition at line 189 of file QtMdcCalib.cxx.

189 {
190 IMessageSvc* msgSvc;
191 Gaudi::svcLocator()->service( "MessageSvc", msgSvc );
192 MsgStream log( msgSvc, "QtMdcCalib" );
193 log << MSG::INFO << "QtMdcCalib::updateConst()" << endmsg;
194
195 MdcCalib::updateConst( calconst );
196
197 int lay;
198 int bin;
199 int ord;
200
201 Stat_t entry;
202 double qtpar;
203 double qbcen;
204 double tw;
205 double deltw;
206 double qterr;
207
208 TF1* funQt = new TF1( "funQt", qtFun, 200, 2000, 2 );
209
210 ofstream fqtlog( "qtlog" );
211 for ( lay = 0; lay < m_nlayer; lay++ )
212 {
213 if ( 0 == m_param.fgCalib[lay] ) continue;
214
215 fqtlog << "Layer" << lay << endl;
216
217 for ( ord = 0; ord < m_qtorder; ord++ )
218 { m_qtpar[lay][ord] = calconst->getQtpar( lay, ord ); }
219
220 for ( bin = 0; bin < m_nbin; bin++ )
221 {
222 entry = m_hqt[lay][bin]->GetEntries();
223
224 if ( entry > 300 )
225 {
226 deltw = m_hqt[lay][bin]->GetMean();
227 qterr = ( m_hqt[lay][bin]->GetRMS() ) / sqrt( (double)entry );
228 deltw /= m_vdr;
229 qterr /= m_vdr;
230 }
231 else { continue; }
232
233 qbcen = ( (double)bin + 0.5 ) * m_qbinw[lay] + m_qmin[lay];
234 // tw = qtFun(qbcen, m_qtpar[lay]) + deltw;
235 tw = ( m_mdcFunSvc->getTimeWalk( lay, qbcen ) ) + deltw;
236
237 m_grqt[lay]->SetPoint( bin, qbcen, tw );
238 m_grqt[lay]->SetPointError( bin, 0, qterr );
239
240 m_grqdt[lay]->SetPoint( bin, qbcen, deltw );
241 m_grqdt[lay]->SetPointError( bin, 0, qterr );
242
243 fqtlog << setw( 3 ) << bin << setw( 12 ) << deltw << setw( 12 ) << tw << setw( 12 )
244 << qbcen << setw( 12 ) << qterr << endl;
245 }
246
247 m_grqt[lay]->Fit( "funQt", "Q+", "", m_qmin[lay], m_qmax[lay] );
248
249 fqtlog << "Qtpar: ";
250 for ( ord = 0; ord < m_qtorder; ord++ )
251 {
252 qtpar = funQt->GetParameter( ord );
253 qterr = funQt->GetParError( ord );
254 calconst->resetQtpar( lay, ord, qtpar );
255
256 fqtlog << setw( 12 ) << qtpar << setw( 12 ) << qterr << endl;
257 }
258
259 // if( (0 == ierflg) && (3 == istat) ){
260 // for(ord=0; ord<m_qtorder; ord++){
261 // gmqt -> GetParameter(ord, qtpar, qterr);
262 // calconst -> resetQtpar(lay, ord, qtpar);
263
264 // fqtlog << setw(12) << qtpar
265 // << setw(12) << qterr
266 // << endl;
267 // }
268 // } else{
269 // fqtlog << setw(12) << m_qtpar[lay][0]
270 // << setw(12) << "0"
271 // << setw(12) << m_qtpar[lay][1]
272 // << setw(12) << "0"
273 // << endl;
274 // }
275
276 } // end of layer loop
277
278 fqtlog.close();
279 delete funQt;
280 return 1;
281}
double getQtpar(int lay, int order) const
void resetQtpar(int lay, int order, double val)
virtual int updateConst(MdcCalibConst *calconst)=0
static Double_t qtFun(Double_t *x, Double_t *par)

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