5static double endcapQFunc(
double* x,
double* par ) {
7 double f = par[0] + par[1] * ( xx - 44.5 ) + par[2] * ( xx - 44.5 ) * ( xx - 44.5 );
28 static_cast<string>(
"Pulse Height Most Probable Value vs TOF Counter Number" ) );
29 CanvasName.push_back(
static_cast<string>(
"Pulse Height Sigma vs TOF Counter Number" ) );
36 { numGraphs1 = numGraphs1 + ( *iter ); }
39 cout <<
"tofcalgsec::calib_endcap_atten: the number of Graphs is NOT reasonable!!!"
48 cout <<
"tofcalgsec::calib_endcap_atten: the number of Graphs is NOT reasonable!!!"
53 m_name = string(
"calib_endcap_atten" );
56 const double qbegin = 0.0;
57 const double qend = 5000.0;
61 for (
unsigned int i = 0; i <
NEndcap; i++ )
64 for (
unsigned int k = 0; k < nrbin; k++ )
66 sprintf( hname,
"Q-id%i-r%i", i, k );
67 m_histograms.push_back(
new TH1F( hname, hname, qbin, qbegin, qend ) );
68 m_fitresult.push_back( HepVector(
nParEcAtten, 0 ) );
71 m_histograms.push_back(
new TH1F( hname, hname, qbin, qbegin, qend ) );
72 m_fitresult.push_back( HepVector(
nParEcAtten, 0 ) );
76 rposerr.resize( nrbin );
78 for (
unsigned int i = 0; i < nrbin; i++ )
80 rpos[i] =
rtofbegin + ( i + 0.5 ) * rstep;
81 rposerr[i] = 0.5 * rstep;
86 for (
unsigned int i = 0; i <
NEndcap; i++ )
103 std::cout << setiosflags( ios::left ) << setw( 10 ) << icounter << setw( 8 ) <<
data->size()
104 << setw( 30 ) <<
name() << std::endl;
106 if (
data->size() > 0 )
108 std::vector<Record*>::iterator
iter =
data->begin();
109 for ( ;
iter !=
data->end();
iter++ ) { fillRecord( ( *
iter ), icounter ); }
110 fitHistogram( icounter );
111 fillGraph( icounter );
112 fitGraph( icounter );
116 fillGraph( icounter );
119 if (
data->size() > 0 )
121 std::vector<Record*>::iterator
iter =
data->begin();
124 updateData( ( *
iter ), icounter );
125 fillRecordQ0( ( *
iter ), icounter );
127 fitHistogramQ0( icounter );
130 if ( icounter == (
NEndcap - 1 ) ) { fillGraphQ0(); }
135void calib_endcap_atten::fillRecord(
const Record* r,
unsigned int icounter ) {
137 double rhit = r->
zrhit();
138 if ( rhit < rtofbegin || rhit >
rtofend )
return;
139 int rbin =
static_cast<int>( ( rhit -
rtofbegin ) / rstep );
140 if ( rbin < 0 ) { rbin = 0; }
143 cout <<
"tofcalgsec::calib_endcap_atten:fillRecord: rhit is out of range, rhit=" << rhit
144 <<
" rbin=" << rbin << endl;
148 std::vector<TH1F*>::iterator
iter =
155void calib_endcap_atten::fitHistogram(
unsigned int icounter ) {
156 TF1* ld =
new TF1(
"ld",
"landau" );
157 ld->SetLineColor( 2 );
158 ld->SetLineWidth( 1 );
160 std::vector<TH1F*>::iterator iter1 =
162 std::vector<HepVector>::iterator iter2 =
164 for (
unsigned int j = 0; j <
nBinPerCounter - 1; j++, iter1++, iter2++ )
166 ( *iter1 )->Fit( ld,
"Q" );
167 ( *iter2 )[0] = ld->GetParameter( 1 );
168 ( *iter2 )[1] = ld->GetParError( 1 );
169 ( *iter2 )[2] = ld->GetParameter( 2 );
170 ( *iter2 )[3] = ld->GetParError( 2 );
176void calib_endcap_atten::fillGraph(
unsigned int icounter ) {
178 char gname1[256], gname2[256];
184 std::vector<double> toffset, toffseterr;
185 std::vector<double> tsigma, tsigmaerr;
191 std::vector<HepVector>::iterator
iter =
195 toffset[k] = log( ( *(
iter + k ) )[0] );
197 log( ( *(
iter + k ) )[0] ) * ( ( *(
iter + k ) )[1] ) / ( ( *(
iter + k ) )[0] );
198 tsigma[k] = ( *(
iter + k ) )[2];
199 tsigmaerr[k] = ( *(
iter + k ) )[3];
202 sprintf( gname1,
"Q MPV-tofid-%i", icounter );
204 std::vector<TH1F*>::iterator itgraph =
m_graphs.end() - 1;
205 ( *itgraph )->SetMarkerSize( 1.5 );
206 ( *itgraph )->SetMarkerStyle( 20 );
207 ( *itgraph )->SetMarkerColor( 2 );
210 ( *itgraph )->SetBinContent( k + 1, toffset[k] );
211 ( *itgraph )->SetBinError( k + 1, toffseterr[k] );
214 sprintf( gname2,
"Q sigma-tofid-%i", icounter );
217 ( *itgraph )->SetMarkerSize( 1.5 );
218 ( *itgraph )->SetMarkerStyle( 21 );
219 ( *itgraph )->SetMarkerColor( 4 );
222 ( *itgraph )->SetBinContent( k + 1, tsigma[k] );
223 ( *itgraph )->SetBinError( k + 1, tsigmaerr[k] );
229void calib_endcap_atten::fitGraph(
unsigned int icounter ) {
232 fsingleq->SetLineColor( 1 );
233 fsingleq->SetLineWidth( 1 );
234 fsingleq->SetParameters( 6.5, 0.0, 0.0 );
240 X[0] = fsingleq->GetParameter( 0 );
241 X[1] = fsingleq->GetParameter( 1 );
242 X[2] = fsingleq->GetParameter( 2 );
247 std::vector<HepVector>::iterator
iter =
m_result.begin() + icounter;
253void calib_endcap_atten::updateData(
Record* r,
unsigned int icounter ) {
254 double rhit = r->
zrhit();
256 double costheta =
abs( r->
theta() );
259 std::vector<HepVector>::iterator
iter =
m_result.begin() + icounter;
260 for (
unsigned int i = 0; i < 3; i++ ) { par[i] = ( *iter )[i]; }
263 double q0 =
q * costheta /
exp( endcapQFunc( &rhit, par ) );
269void calib_endcap_atten::fillRecordQ0(
const Record* r,
unsigned int icounter ) {
270 std::vector<TH1F*>::iterator
iter =
272 ( *iter )->Fill( r->
q0() );
277void calib_endcap_atten::fitHistogramQ0(
unsigned int icounter ) {
278 TF1* ld =
new TF1(
"ld",
"landau" );
279 ld->SetLineColor( 2 );
280 ld->SetLineWidth( 1 );
282 std::vector<TH1F*>::iterator iter1 =
284 std::vector<HepVector>::iterator iter2 =
286 ( *iter1 )->Fit( ld,
"Q" );
287 ( *iter2 )[0] = ld->GetParameter( 1 );
288 ( *iter2 )[1] = ld->GetParError( 1 );
289 ( *iter2 )[2] = ld->GetParameter( 2 );
290 ( *iter2 )[3] = ld->GetParError( 2 );
295void calib_endcap_atten::fillGraphQ0() {
296 char gname1[256], gname2[256];
302 std::vector<double> toffset, toffseterr;
303 std::vector<double> tsigma, tsigmaerr;
309 unsigned int number = 0;
310 std::vector<HepVector>::iterator iter1 = m_fitresult.begin() +
nBinPerCounter - 1;
311 std::vector<HepVector>::iterator iter2 =
m_result.begin();
312 for (
unsigned int i = 0; i <
NEndcap; i++ )
315 toffset[i] = ( *( iter1 + number ) )[0];
316 toffseterr[i] = ( *( iter1 + number ) )[1];
317 tsigma[i] = ( *( iter1 + number ) )[2];
318 tsigmaerr[i] = ( *( iter1 + number ) )[3];
320 ( *( iter2 + i ) )[3] = toffset[i] / toffset[0];
321 ( *( iter2 + i ) )[4] = toffset[i];
324 sprintf( gname1,
"Q0 MPV vs TOF Counter Number" );
326 std::vector<TH1F*>::iterator itgraph =
m_graphs.end() - 1;
327 ( *itgraph )->SetMarkerSize( 1.5 );
328 ( *itgraph )->SetMarkerStyle( 20 );
329 ( *itgraph )->SetMarkerColor( 2 );
332 ( *itgraph )->SetBinContent( k + 1, tsigma[k] );
333 ( *itgraph )->SetBinError( k + 1, tsigmaerr[k] );
335 for (
unsigned int i = 0; i <
NEndcap; i++ )
337 ( *itgraph )->SetBinContent( i + 1, toffset[i] );
338 ( *itgraph )->SetBinError( i + 1, toffseterr[i] );
341 sprintf( gname2,
"Q0 Sigma vs TOF Counter Number" );
344 ( *itgraph )->SetTitle( gname2 );
345 ( *itgraph )->SetMarkerSize( 1.5 );
346 ( *itgraph )->SetMarkerStyle( 21 );
347 ( *itgraph )->SetMarkerColor( 4 );
348 for (
unsigned int i = 0; i <
NEndcap; i++ )
350 ( *itgraph )->SetBinContent( i + 1, tsigma[i] );
351 ( *itgraph )->SetBinError( i + 1, tsigmaerr[i] );
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)
TFile f("ana_bhabha660a_dqa_mcPat_zy_old.root")
EvtComplex exp(const EvtComplex &c)
****INTEGER imax DOUBLE PRECISION m_pi *DOUBLE PRECISION m_amfin DOUBLE PRECISION m_Chfin DOUBLE PRECISION m_Xenph DOUBLE PRECISION m_sinw2 DOUBLE PRECISION m_GFermi DOUBLE PRECISION m_MfinMin DOUBLE PRECISION m_ta2 INTEGER m_out INTEGER m_KeyFSR INTEGER m_KeyQCD *COMMON c_Semalib $ !copy of input $ !CMS energy $ !beam mass $ !final mass $ !beam charge $ !final charge $ !smallest final mass $ !Z mass $ !Z width $ !EW mixing angle $ !Gmu Fermi $ alphaQED at q
std::vector< Record * > RecordSet
const unsigned int NEndcap
std::vector< HepVector > m_result
const std::string & name() const
std::vector< TH1F * > m_histograms
unsigned int nBinPerCounter
std::vector< unsigned int > nGraphPerCanvasPerCounter
unsigned int nCanvasPerCounter
unsigned int nHistPerCounter
std::vector< unsigned int > nGraphPerCanvas
std::vector< string > CanvasName
std::vector< TH1F * > m_graphs
TofCalibFit(bool isbarrel, const int npar)
std::vector< string > CanvasPerCounterName
calib_endcap_atten(const unsigned int nrbin)
void calculate(RecordSet *&data, unsigned int icounter)