BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
QtCalib.cpp
Go to the documentation of this file.
1#include "include/QtCalib.h"
2#include "TF1.h"
3#include "include/fun.h"
4#include <cmath>
5
6QtCalib::QtCalib() { cout << "Calibration type: QtCalib" << endl; }
7
9
10void QtCalib::init( TObjArray* hlist, MdcCosGeom* pGeom ) {
11 CalibBase::init( hlist, pGeom );
12 m_pGeom = pGeom;
13
14 char hname[200];
15 for ( int lay = 0; lay < NLAYER; lay++ )
16 {
17 m_qmin[lay] = gQmin[lay];
18 m_qmax[lay] = gQmax[lay];
19 m_qbinw[lay] = ( m_qmax[lay] - m_qmin[lay] ) / (double)NQBin;
20 }
21
22 m_fdQt = new TFolder( "mfdQt", "fdQt" );
23 m_fdQ_T = new TFolder( "mQtPlot", "QtPlot" );
24 hlist->Add( m_fdQt );
25 hlist->Add( m_fdQ_T );
26
27 for ( int lay = 0; lay < NLAYER; lay++ )
28 {
29 sprintf( hname, "mHQ_Layer%02d", lay );
30 m_hqhit[lay] = new TH1F( hname, "", 1500, 0, 3000 );
31 m_fdQt->Add( m_hqhit[lay] );
32
33 sprintf( hname, "mHQT_Plot_lay%02d", lay );
34 m_grqt[lay] = new TGraphErrors();
35 m_grqt[lay]->SetName( hname );
36 m_grqt[lay]->SetMarkerStyle( 20 );
37 m_grqt[lay]->SetMarkerColor( 1 );
38 m_grqt[lay]->SetLineColor( 10 );
39 m_fdQ_T->Add( m_grqt[lay] );
40
41 sprintf( hname, "mHQdelT_Plot_lay%02d", lay );
42 m_grqdt[lay] = new TGraphErrors();
43 m_grqdt[lay]->SetName( hname );
44 m_grqdt[lay]->SetMarkerStyle( 10 );
45 m_grqdt[lay]->SetMarkerColor( 1 );
46 m_grqdt[lay]->SetLineColor( 10 );
47 m_fdQ_T->Add( m_grqdt[lay] );
48
49 for ( int bin = 0; bin < NQBin; bin++ )
50 {
51 sprintf( hname, "mHQT_Lay%02d_Bin%02d", lay, bin );
52 m_hqt[lay][bin] = new TH1F( hname, "", 200, -1, 1 );
53 m_fdQt->Add( m_hqt[lay][bin] );
54 }
55 }
56}
57
58void QtCalib::mergeHist( TFile* fhist ) {
59 CalibBase::mergeHist( fhist );
60
61 char hname[200];
62 TH1F* hist;
63 TFolder* fdQt = (TFolder*)fhist->Get( "fdQt" );
64 for ( int lay = 0; lay < NLAYER; lay++ )
65 {
66 sprintf( hname, "HQ_Layer%02d", lay );
67 hist = (TH1F*)fdQt->FindObjectAny( hname );
68 m_hqhit[lay]->Add( hist );
69
70 for ( int bin = 0; bin < NQBin; bin++ )
71 {
72 sprintf( hname, "HQT_Lay%02d_Bin%02d", lay, bin );
73 hist = (TH1F*)fdQt->FindObjectAny( hname );
74 m_hqt[lay][bin]->Add( hist );
75 }
76 }
77}
78
79void QtCalib::calib( MdcCalibConst* calconst, TObjArray* newXtList, TObjArray* r2tList ) {
80 CalibBase::calib( calconst, newXtList, r2tList );
81
82 double vdr = 0.03;
83 Stat_t entry;
84 double qtpar;
85 double qbcen;
86 double tw;
87 double deltw;
88 double qterr;
89 TF1* funQt = new TF1( "funQt", qtFun, 200, 2000, 2 );
90
91 ofstream fqtlog( "qtlog" );
92 for ( int lay = 0; lay < NLAYER; lay++ )
93 {
94 if ( 0 == gFgCalib[lay] ) continue;
95
96 fqtlog << "Layer" << lay << endl;
97 double qtini[2];
98 for ( int ord = 0; ord < QtOrd; ord++ ) qtini[ord] = calconst->getQtpar( lay, ord );
99 for ( int bin = 0; bin < NQBin; bin++ )
100 {
101 entry = m_hqt[lay][bin]->GetEntries();
102 if ( entry > 300 )
103 {
104 deltw = m_hqt[lay][bin]->GetMean();
105 qterr = ( m_hqt[lay][bin]->GetRMS() ) / sqrt( (double)entry );
106 deltw /= vdr;
107 qterr /= vdr;
108 }
109 else { continue; }
110
111 qbcen = ( (double)bin + 0.5 ) * m_qbinw[lay] + m_qmin[lay];
112 // tw = qtFun(qbcen, m_qtpar[lay]) + deltw;
113 // tw = (m_mdcFunSvc->getTimeWalk(lay, qbcen)) + deltw;
114 tw = qtini[1] / sqrt( qbcen ) + qtini[0] + deltw;
115
116 m_grqt[lay]->SetPoint( bin, qbcen, tw );
117 m_grqt[lay]->SetPointError( bin, 0, qterr );
118
119 m_grqdt[lay]->SetPoint( bin, qbcen, deltw );
120 m_grqdt[lay]->SetPointError( bin, 0, qterr );
121
122 fqtlog << setw( 3 ) << bin << setw( 12 ) << deltw << setw( 12 ) << tw << setw( 12 )
123 << qbcen << setw( 12 ) << qterr << endl;
124 }
125
126 m_grqt[lay]->Fit( "funQt", "Q+", "", m_qmin[lay], m_qmax[lay] );
127
128 fqtlog << "Qtpar: ";
129 for ( int ord = 0; ord < QtOrd; ord++ )
130 {
131 qtpar = funQt->GetParameter( ord );
132 qterr = funQt->GetParError( ord );
133 calconst->resetQtpar( lay, ord, qtpar );
134
135 fqtlog << setw( 12 ) << qtpar << setw( 12 ) << qterr << endl;
136 }
137 } // end of layer loop
138 fqtlog.close();
139 renameHist();
140 delete funQt;
141}
142
143Double_t QtCalib::qtFun( Double_t* x, Double_t* par ) {
144 Double_t tw = par[1] / sqrt( x[0] ) + par[0];
145 return tw;
146}
147
148void QtCalib::renameHist() {
149 char hname[200];
150 m_fdQt->SetName( "fdQt" );
151 m_fdQ_T->SetName( "QtPlot" );
152 for ( int lay = 0; lay < NLAYER; lay++ )
153 {
154 sprintf( hname, "HQ_Layer%02d", lay );
155 m_hqhit[lay]->SetName( hname );
156
157 sprintf( hname, "HQT_Plot_lay%02d", lay );
158 m_grqt[lay]->SetName( hname );
159
160 sprintf( hname, "HQdelT_Plot_lay%02d", lay );
161 m_grqdt[lay]->SetName( hname );
162
163 for ( int bin = 0; bin < NQBin; bin++ )
164 {
165 sprintf( hname, "HQT_Lay%02d_Bin%02d", lay, bin );
166 m_hqt[lay][bin]->SetName( hname );
167 }
168 }
169}
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
Definition FoamA.h:85
virtual void init(TObjArray *hlist, MdcCosGeom *pGeom)=0
Definition CalibBase.cpp:12
virtual void mergeHist(TFile *fhist)=0
virtual void calib(MdcCalibConst *calconst, TObjArray *newXtList, TObjArray *r2tList)=0
double getQtpar(int lay, int order) const
void resetQtpar(int lay, int order, double val)
QtCalib()
Definition QtCalib.cpp:6
void calib(MdcCalibConst *calconst, TObjArray *newXtList, TObjArray *r2tList)
Definition QtCalib.cpp:79
static Double_t qtFun(Double_t *x, Double_t *par)
Definition QtCalib.cpp:143
~QtCalib()
Definition QtCalib.cpp:8
void init(TObjArray *hlist, MdcCosGeom *pGeom)
Definition QtCalib.cpp:10
void mergeHist(TFile *fhist)
Definition QtCalib.cpp:58