3#include "GaudiKernel/Bootstrap.h"
4#include "GaudiKernel/IMessageSvc.h"
5#include "GaudiKernel/ISvcLocator.h"
6#include "GaudiKernel/MsgStream.h"
7#include "GaudiKernel/StatusCode.h"
50 Gaudi::svcLocator()->service(
"MessageSvc",
msgSvc );
51 MsgStream log(
msgSvc,
"QtMdcCalib" );
52 log << MSG::INFO <<
"QtMdcCalib::initialize()" << endmsg;
55 m_mdcGeomSvc = mdcGeomSvc;
56 m_mdcFunSvc = mdcFunSvc;
57 m_mdcUtilitySvc = mdcUtilitySvc;
66 for ( lay = 0; lay < m_nlayer; lay++ )
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;
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 );
78 for ( lay = 0; lay < m_nlayer; lay++ )
80 sprintf( hname,
"HQ_Layer%02d", lay );
81 m_hqhit[lay] =
new TH1F( hname,
"", 1500, 0, 3000 );
82 m_fdQt->Add( m_hqhit[lay] );
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] );
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] );
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] );
109 Gaudi::svcLocator()->service(
"MessageSvc",
msgSvc );
110 MsgStream log(
msgSvc,
"QtMdcCalib" );
111 log << MSG::DEBUG <<
"QtMdcCalib::fillHist()" << endmsg;
116 bool esCutFg =
event->getEsCutFlag();
117 if ( !esCutFg )
return -1;
135 ntrk =
event->getNTrk();
136 for ( i = 0; i < ntrk; i++ )
138 rectrk =
event->getRecTrk( i );
142 double dr = rectrk->
getDr();
143 if ( fabs( dr ) > m_param.drCut )
continue;
146 double dz = rectrk->
getDz();
147 if ( fabs( dz ) > m_param.dzCut )
continue;
150 double p = rectrk->
getP();
151 if ( ( fabs( p ) < m_param.pCut[0] ) || ( fabs( p ) > m_param.pCut[1] ) )
continue;
153 for ( lay = 0; lay <
MdcCalNLayer; lay++ ) fgHitLay[lay] =
false;
154 for ( k = 0; k < nhit; k++ )
158 fgHitLay[lay] =
true;
163 if ( fgHitLay[lay] ) nhitlay++;
164 if ( nhitlay < m_param.nHitLayCut )
continue;
167 if ( m_param.noiseCut && ( !fgNoise ) )
continue;
169 for ( k = 0; k < nhit; k++ )
178 m_hqhit[lay]->Fill( m_qhit );
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 ); }
191 Gaudi::svcLocator()->service(
"MessageSvc",
msgSvc );
192 MsgStream log(
msgSvc,
"QtMdcCalib" );
193 log << MSG::INFO <<
"QtMdcCalib::updateConst()" << endmsg;
208 TF1* funQt =
new TF1(
"funQt",
qtFun, 200, 2000, 2 );
210 ofstream fqtlog(
"qtlog" );
211 for ( lay = 0; lay < m_nlayer; lay++ )
213 if ( 0 == m_param.fgCalib[lay] )
continue;
215 fqtlog <<
"Layer" << lay << endl;
217 for ( ord = 0; ord < m_qtorder; ord++ )
218 { m_qtpar[lay][ord] = calconst->
getQtpar( lay, ord ); }
222 entry = m_hqt[lay][
bin]->GetEntries();
226 deltw = m_hqt[lay][
bin]->GetMean();
227 qterr = ( m_hqt[lay][
bin]->GetRMS() ) / sqrt( (
double)entry );
233 qbcen = ( (double)
bin + 0.5 ) * m_qbinw[lay] + m_qmin[lay];
235 tw = ( m_mdcFunSvc->getTimeWalk( lay, qbcen ) ) + deltw;
237 m_grqt[lay]->SetPoint(
bin, qbcen, tw );
238 m_grqt[lay]->SetPointError(
bin, 0, qterr );
240 m_grqdt[lay]->SetPoint(
bin, qbcen, deltw );
241 m_grqdt[lay]->SetPointError(
bin, 0, qterr );
243 fqtlog << setw( 3 ) <<
bin << setw( 12 ) << deltw << setw( 12 ) << tw << setw( 12 )
244 << qbcen << setw( 12 ) << qterr << endl;
247 m_grqt[lay]->Fit(
"funQt",
"Q+",
"", m_qmin[lay], m_qmax[lay] );
250 for ( ord = 0; ord < m_qtorder; ord++ )
252 qtpar = funQt->GetParameter( ord );
253 qterr = funQt->GetParError( ord );
256 fqtlog << setw( 12 ) << qtpar << setw( 12 ) << qterr << endl;
284 double tw = par[1] / sqrt( x[0] ) + par[0];
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)
*******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
double getDocaInc() const
double getResiInc() const
MdcCalRecHit * getRecHit(int index) const
bool getFgNoiseRatio() const
double getQtpar(int lay, int order) const
void resetQtpar(int lay, int order, double val)
virtual void printCut() const =0
virtual void initialize(TObjArray *hlist, IMdcGeomSvc *mdcGeomSvc, IMdcCalibFunSvc *mdcFunSvc, IMdcUtilitySvc *mdcUtilitySvc)=0
virtual int updateConst(MdcCalibConst *calconst)=0
virtual int fillHist(MdcCalEvent *event)=0
static Double_t qtFun(Double_t *x, Double_t *par)
void initialize(TObjArray *hlist, IMdcGeomSvc *mdcGeomSvc, IMdcCalibFunSvc *mdcFunSvc, IMdcUtilitySvc *mdcUtilitySvc)
int fillHist(MdcCalEvent *event)
int updateConst(MdcCalibConst *calconst)