BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
calib_barrel_common.cxx
Go to the documentation of this file.
2#include "TF1.h"
3
4calib_barrel_common::calib_barrel_common( const unsigned int nzbin )
5 : TofCalibFit( true, nBarrelCommon ) {
6
7 nKind = 4;
8 nBinPerCounter = nzbin;
9
13 nCanvas = 4;
14 CanvasName.push_back( static_cast<string>( "Offset" ) );
15 CanvasName.push_back( static_cast<string>( "Offset-PlusMinus" ) );
16 CanvasName.push_back( static_cast<string>( "Sigma" ) );
17 CanvasName.push_back( static_cast<string>( "Sigma-TCorrelation" ) );
18 nGraphPerCanvas.push_back( 2 );
19 nGraphPerCanvas.push_back( 2 );
20 nGraphPerCanvas.push_back( 2 );
21 nGraphPerCanvas.push_back( 3 );
22
23 int numGraphs = 0;
24 std::vector<unsigned int>::iterator iter = nGraphPerCanvas.begin();
25 for ( ; iter != nGraphPerCanvas.end(); iter++ ) { numGraphs = numGraphs + ( *iter ); }
26 if ( numGraphs != nGraphTotalCommon )
27 {
28 cout << "tofcalgsec::calib_barrel_common: the number of Graphs is NOT reasonable!!!"
29 << endl;
30 exit( 0 );
31 }
32
33 m_name = string( "calib_barrel_common" );
34
35 const int tbin = 150;
36 const double tbegin = -1.5;
37 const double tend = 1.5;
38
39 char hname[256];
40 // histograms
41 for ( unsigned int j = 0; j < nKind; j++ )
42 {
43 for ( unsigned int k = 0; k < nBinPerCounter; k++ )
44 {
45 if ( j == 0 ) { sprintf( hname, "tleft-z%i", k ); }
46 else if ( j == 1 ) { sprintf( hname, "tright-z%i", k ); }
47 else if ( j == 2 ) { sprintf( hname, "tplus-z%i", k ); }
48 else if ( j == 3 ) { sprintf( hname, "tminus-z%i", k ); }
49 m_fitresult.push_back( HepVector( nParCommon, 0 ) );
50 m_histograms.push_back( new TH1F( hname, hname, tbin, tbegin, tend ) );
51 }
52 }
53 sprintf( hname, "deltaT" );
54 m_fitresult.push_back( HepVector( nParCommon, 0 ) );
55 m_histograms.push_back( new TH1F( hname, hname, tbin, tbegin, tend ) );
56
57 zpos.resize( nBinPerCounter );
58 zposerr.resize( nBinPerCounter );
59 zstep = ( zend - zbegin ) / nBinPerCounter;
60 for ( unsigned int i = 0; i < nBinPerCounter; i++ )
61 {
62 zpos[i] = zbegin + ( i + 0.5 ) * zstep;
63 zposerr[i] = 0.5 * zstep;
64 }
65}
66
68 m_fitresult.clear();
69 zpos.clear();
70 zposerr.clear();
71}
72
73void calib_barrel_common::calculate( RecordSet*& data, unsigned int icounter ) {
74
75 std::cout << setiosflags( ios::left ) << setw( 10 ) << icounter << setw( 8 ) << data->size()
76 << setw( 30 ) << name() << std::endl;
77
78 if ( data->size() > 0 )
79 {
80 std::vector<Record*>::iterator iter = data->begin();
81 for ( ; iter != data->end(); iter++ ) { fillRecord( ( *iter ) ); }
82 }
83
84 if ( icounter == ( NBarrel - 1 ) )
85 {
86 fitHistogram();
87 fillGraph();
88 fitGraph();
89 }
90
91 return;
92}
93
94void calib_barrel_common::fillRecord( const Record* r ) {
95 double zhit = r->zrhit();
96 if ( zhit < zbegin || zhit > zend ) return;
97 int zbin = static_cast<int>( ( zhit - zbegin ) / zstep );
98 if ( ( zbin < 0 ) || ( zbin > static_cast<int>( nBinPerCounter - 1 ) ) )
99 {
100 cout << "tofcalgsec::calib_barrel_common: zhit is out of range, zhit=" << zhit
101 << " zbin=" << zbin << endl;
102 return;
103 }
104
105 std::vector<TH1F*>::iterator iter = m_histograms.begin();
106 ( *( iter + zbin ) )->Fill( r->tleft() );
107 ( *( iter + nBinPerCounter + zbin ) )->Fill( r->tright() );
108 ( *( iter + 2 * nBinPerCounter + zbin ) )->Fill( ( r->tleft() + r->tright() ) / 2.0 );
109 ( *( iter + 3 * nBinPerCounter + zbin ) )->Fill( ( r->tleft() - r->tright() ) / 2.0 );
110 ( *( iter + nKind * nBinPerCounter ) )->Fill( r->tleft() );
111 ( *( iter + nKind * nBinPerCounter ) )->Fill( r->tright() );
112
113 return;
114}
115
116void calib_barrel_common::fitHistogram() {
117 TF1* g = new TF1( "g", "gaus" );
118 g->SetLineColor( 2 );
119 g->SetLineWidth( 1 );
120
121 std::vector<TH1F*>::iterator iter1 = m_histograms.begin();
122 std::vector<HepVector>::iterator iter2 = m_fitresult.begin();
123 for ( ; iter1 != m_histograms.end(); iter1++, iter2++ )
124 {
125 ( *iter1 )->Fit( g, "Q" );
126 ( *iter2 )[0] = g->GetParameter( 1 );
127 ( *iter2 )[1] = g->GetParError( 1 );
128 ( *iter2 )[2] = g->GetParameter( 2 );
129 ( *iter2 )[3] = g->GetParError( 2 );
130 }
131
132 iter2 = m_fitresult.end() - 1;
133 X[2] = ( *iter2 )[0];
134 X[3] = ( *iter2 )[1];
135
136 return;
137}
138
139void calib_barrel_common::fillGraph() {
140
141 char gname1[256], gname2[256];
142 TH1F* gra[nGraphTotalCommon];
143
144 // 4 canvas all counter,
145 // 1. offset of tleft and tright vs z --- gra[0] and gra[1]
146 // 2. common of tleft and tright vs z --- gra[2] and gra[3]
147 // 3. offset of tplus and tminus vs z --- gra[4] and gra[5]
148 // 4. common of tplus, tminus and T_Correlation vs z
149 // --- gra[6], gra[7] and gra[8]
150
151 std::vector<double> toffset, toffseterr;
152 std::vector<double> tsigma, tsigmaerr;
153 toffset.resize( nBinPerCounter );
154 toffseterr.resize( nBinPerCounter );
155 tsigma.resize( nBinPerCounter );
156 tsigmaerr.resize( nBinPerCounter );
157
158 unsigned int number = 0;
159 std::vector<HepVector>::iterator iter = m_fitresult.begin();
160 for ( unsigned int j = 0; j < nKind; j++ )
161 {
162 if ( j == 0 )
163 {
164 sprintf( gname1, "tlefttright-offset" );
165 sprintf( gname2, "tlefttright-sigma" );
166 }
167 else if ( j == 1 )
168 {
169 sprintf( gname1, "tcommon-offset" );
170 sprintf( gname2, "tcommon-sigma" );
171 }
172 else if ( j == 2 )
173 {
174 sprintf( gname1, "tplusminus-offset" );
175 sprintf( gname2, "tplusminus-sigma" );
176 }
177 else if ( j == 3 )
178 {
179 sprintf( gname1, "tcorrelation-offset" );
180 sprintf( gname2, "tcorrelation-sigma" );
181 }
182
183 gra[j] = new TH1F( gname1, gname1, nBinPerCounter, zbegin, zend );
184 gra[j + 4] = new TH1F( gname2, gname2, nBinPerCounter, zbegin, zend );
185
186 for ( unsigned int k = 0; k < nBinPerCounter; k++ )
187 {
188 number = j * nBinPerCounter + k;
189 toffset[k] = ( *( iter + number ) )[0];
190 toffseterr[k] = ( *( iter + number ) )[1];
191 tsigma[k] = ( *( iter + number ) )[2];
192 tsigmaerr[k] = ( *( iter + number ) )[3];
193 gra[j]->SetBinContent( k + 1, toffset[k] );
194 gra[j]->SetBinError( k + 1, toffseterr[k] );
195 gra[j + 4]->SetBinContent( k + 1, tsigma[k] );
196 gra[j + 4]->SetBinError( k + 1, tsigmaerr[k] );
197 }
198 }
199
200 gra[nGraphTotalCommon - 1] = new TH1F( "Sigma", "Sigma", nBinPerCounter, zbegin, zend );
201 for ( unsigned int k = 0; k < nBinPerCounter; k++ )
202 {
203 number = ( nKind - 1 ) * nBinPerCounter + k;
204 double sigPlus = ( *( iter + number - nBinPerCounter ) )[2];
205 double sigMinus = ( *( iter + number ) )[2];
206 double sigErrPlus = ( *( iter + number - nBinPerCounter ) )[3];
207 double sigErrMinus = ( *( iter + number ) )[3];
208 if ( sigPlus > sigMinus ) { tsigma[k] = sqrt( sigPlus * sigPlus - sigMinus * sigMinus ); }
209 else { tsigma[k] = 0.0 - sqrt( sigMinus * sigMinus - sigPlus * sigPlus ); }
210 tsigmaerr[k] = sqrt( sigErrPlus * sigErrPlus + sigErrMinus * sigErrMinus );
211
212 gra[nGraphTotalCommon - 1]->SetBinContent( k + 1, tsigma[k] );
213 gra[nGraphTotalCommon - 1]->SetBinError( k + 1, tsigmaerr[k] );
214 }
215
216 for ( int j = 0; j < nGraphTotalCommon; j++, j++ )
217 {
218 gra[j]->SetMarkerSize( 1.5 );
219 gra[j]->SetMarkerStyle( 20 );
220 gra[j]->SetMarkerColor( 2 );
221 if ( j == 4 )
222 {
223 gra[j]->SetMaximum( 0.22 );
224 gra[j]->SetMinimum( 0.07 );
225 }
226 else if ( j == 6 )
227 {
228 gra[j]->SetMaximum( 0.20 );
229 gra[j]->SetMinimum( -0.02 );
230 }
231 }
232 for ( int j = 1; j < nGraphTotalCommon; j++, j++ )
233 {
234 gra[j]->SetMarkerSize( 1.5 );
235 gra[j]->SetMarkerStyle( 21 );
236 gra[j]->SetMarkerColor( 4 );
237 }
238 gra[nGraphTotalCommon - 1]->SetMarkerStyle( 4 );
239 gra[nGraphTotalCommon - 1]->SetMarkerColor( 6 );
240
241 for ( int j = 0; j < nGraphTotalCommon; j++ ) { m_graphs.push_back( gra[j] ); }
242
243 return;
244}
245
246void calib_barrel_common::fitGraph() {
247 TF1* p0 = new TF1( "p0", "pol0" );
248 p0->SetLineColor( 1 );
249 p0->SetLineWidth( 1 );
250
251 std::vector<TH1F*>::iterator iter = m_graphs.end() - 1;
252 ( *iter )->Fit( "p0", "Q" );
253 X[0] = p0->GetParameter( 0 );
254 X[1] = p0->GetParError( 0 );
255
256 m_result.push_back( X );
257 return;
258}
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)
TTree * data
EvtStreamInputIterator< typename Generator::result_type > iter(Generator gen, int N=0)
const double zend
Definition TofCalibFit.h:13
const double zbegin
Definition TofCalibFit.h:12
const int nBarrelCommon
Definition TofCalibFit.h:19
std::vector< Record * > RecordSet
Definition TofDataSet.h:97
const unsigned int NBarrel
Definition TofDataSet.h:12
const int nParCommon
const int nGraphTotalCommon
double tleft() const
Definition TofDataSet.h:59
double tright() const
Definition TofDataSet.h:60
double zrhit() const
Definition TofDataSet.h:61
string m_name
Definition TofCalibFit.h:50
std::vector< HepVector > m_result
Definition TofCalibFit.h:55
unsigned int nCanvas
Definition TofCalibFit.h:47
const std::string & name() const
Definition TofCalibFit.h:27
std::vector< TH1F * > m_histograms
Definition TofCalibFit.h:53
unsigned int nBinPerCounter
Definition TofCalibFit.h:41
unsigned int nKind
Definition TofCalibFit.h:40
unsigned int nCanvasPerCounter
Definition TofCalibFit.h:44
unsigned int nHistPerCounter
Definition TofCalibFit.h:43
HepVector X
Definition TofCalibFit.h:51
std::vector< unsigned int > nGraphPerCanvas
Definition TofCalibFit.h:48
std::vector< string > CanvasName
Definition TofCalibFit.h:58
unsigned int nHistogram
Definition TofCalibFit.h:46
std::vector< TH1F * > m_graphs
Definition TofCalibFit.h:54
TofCalibFit(bool isbarrel, const int npar)
calib_barrel_common(const unsigned int nzbin)
void calculate(RecordSet *&data, unsigned int icounter)