BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
calib_endcap_sigma.cxx
Go to the documentation of this file.
2#include "TF1.h"
3
4calib_endcap_sigma::calib_endcap_sigma( const unsigned int nrbin )
5 : TofCalibFit( false, nEndcapSigma ) {
6
7 nKind = 1; // 0:tleft
8 nBinPerCounter = nrbin;
9
12 CanvasPerCounterName.push_back( static_cast<string>( "Endcap-offset" ) );
13 CanvasPerCounterName.push_back( static_cast<string>( "Endcap-sigma" ) );
14
15 nGraphPerCanvasPerCounter.push_back( 1 );
16 nGraphPerCanvasPerCounter.push_back( 1 );
17
18 nHistogram = 0;
19 nCanvas = 0;
20
21 int numGraphs = 0;
22 std::vector<unsigned int>::iterator iter = nGraphPerCanvasPerCounter.begin();
23 for ( ; iter != nGraphPerCanvasPerCounter.end(); iter++ )
24 { numGraphs = numGraphs + ( *iter ); }
25 if ( numGraphs != nGraphEcSigma )
26 {
27 cout << "tofcalgsec::calib_endcap_sigma: the number of Graphs is NOT reasonable!!!"
28 << endl;
29 exit( 0 );
30 }
31
32 m_name = string( "calib_endcap_sigma" );
33
34 const int tbin = 150;
35 const double tbegin = -1.5;
36 const double tend = 1.5;
37
38 // histograms per counter
39 char hname[256];
40 for ( unsigned int i = 0; i < NEndcap; i++ )
41 {
42 m_result.push_back( HepVector( nEndcapSigma, 0 ) );
43 for ( unsigned int j = 0; j < nKind; j++ )
44 {
45 for ( unsigned int k = 0; k < nBinPerCounter; k++ )
46 {
47 sprintf( hname, "tleft-tofid%i-r%i", i, k );
48 m_histograms.push_back( new TH1F( hname, hname, tbin, tbegin, tend ) );
49
50 m_fitresult.push_back( HepVector( nParEcSigma, 0 ) );
51 }
52 }
53 }
54
55 rpos.resize( nBinPerCounter );
56 rposerr.resize( nBinPerCounter );
57 rstep = ( rtofend - rtofbegin ) / nBinPerCounter;
58 for ( unsigned int i = 0; i < nBinPerCounter; i++ )
59 {
60 rpos[i] = rtofbegin + ( i + 0.5 ) * rstep;
61 rposerr[i] = 0.5 * rstep;
62 }
63}
64
66 m_fitresult.clear();
67 rpos.clear();
68 rposerr.clear();
69}
70
71void calib_endcap_sigma::calculate( RecordSet*& data, unsigned int icounter ) {
72
73 std::cout << setiosflags( ios::left ) << setw( 10 ) << icounter << setw( 8 ) << data->size()
74 << setw( 30 ) << name() << std::endl;
75
76 if ( data->size() > 0 )
77 {
78 std::vector<Record*>::iterator iter = data->begin();
79 for ( ; iter != data->end(); iter++ ) { fillRecord( ( *iter ), icounter ); }
80 }
81 fitHistogram( icounter );
82 fillGraph( icounter );
83 fitGraph( icounter );
84
85 return;
86}
87
88void calib_endcap_sigma::fillRecord( const Record* r, unsigned int icounter ) {
89
90 double rhit = r->zrhit();
91 if ( rhit < rtofbegin || rhit > rtofend ) return;
92 int rbin = static_cast<int>( ( rhit - rtofbegin ) / rstep );
93 if ( rbin < 0 ) { rbin = 0; }
94 else if ( rbin > static_cast<int>( nBinPerCounter - 1 ) )
95 {
96 cout << "tofcalgsec::calib_endcap_sigma:fillRecord: rhit is out of range, rhit=" << rhit
97 << " rbin=" << rbin << endl;
98 return;
99 }
100
101 std::vector<TH1F*>::iterator iter =
102 m_histograms.begin() + icounter * nKind * nBinPerCounter + rbin;
103 ( *iter )->Fill( r->tleft() );
104
105 return;
106}
107
108void calib_endcap_sigma::fitHistogram( unsigned int icounter ) {
109 TF1* g = new TF1( "g", "gaus" );
110 g->SetLineColor( 2 );
111 g->SetLineWidth( 1 );
112
113 std::vector<TH1F*>::iterator iter1 =
114 m_histograms.begin() + icounter * nKind * nBinPerCounter;
115 std::vector<HepVector>::iterator iter2 =
116 m_fitresult.begin() + icounter * nKind * nBinPerCounter;
117 for ( unsigned int j = 0; j < nBinPerCounter; j++, iter1++, iter2++ )
118 {
119 ( *iter1 )->Fit( g, "Q" );
120 ( *iter2 )[0] = g->GetParameter( 1 );
121 ( *iter2 )[1] = g->GetParError( 1 );
122 ( *iter2 )[2] = g->GetParameter( 2 );
123 ( *iter2 )[3] = g->GetParError( 2 );
124 }
125
126 return;
127}
128
129void calib_endcap_sigma::fillGraph( unsigned int icounter ) {
130
131 char gname1[256], gname2[256];
132
133 // fill graphs per counter
134 // 4 canvas per counter,
135 // 1. offset of tleft vs z
136 // 2. sigma of tleft vs z
137 std::vector<double> toffset, toffseterr;
138 std::vector<double> tsigma, tsigmaerr;
139 toffset.resize( nBinPerCounter );
140 toffseterr.resize( nBinPerCounter );
141 tsigma.resize( nBinPerCounter );
142 tsigmaerr.resize( nBinPerCounter );
143
144 std::vector<HepVector>::iterator iter =
145 m_fitresult.begin() + icounter * nKind * nBinPerCounter;
146 for ( unsigned int k = 0; k < nBinPerCounter; k++ )
147 {
148 toffset[k] = ( *( iter + k ) )[0];
149 toffseterr[k] = ( *( iter + k ) )[1];
150 tsigma[k] = ( *( iter + k ) )[2];
151 tsigmaerr[k] = ( *( iter + k ) )[3];
152 }
153
154 sprintf( gname1, "endcap-offset-tofid-%i", icounter );
155 m_graphs.push_back( new TH1F( gname1, gname1, nBinPerCounter, rtofbegin, rtofend ) );
156 std::vector<TH1F*>::iterator itgraph = m_graphs.end() - 1;
157 ( *itgraph )->SetMarkerSize( 1.5 );
158 ( *itgraph )->SetMarkerStyle( 20 );
159 ( *itgraph )->SetMarkerColor( 2 );
160 for ( unsigned int k = 0; k < nBinPerCounter; k++ )
161 {
162 ( *itgraph )->SetBinContent( k + 1, toffset[k] );
163 ( *itgraph )->SetBinError( k + 1, toffseterr[k] );
164 }
165
166 sprintf( gname2, "endcap-sigma-tofid-%i", icounter );
167 m_graphs.push_back( new TH1F( gname2, gname2, nBinPerCounter, rtofbegin, rtofend ) );
168 itgraph = m_graphs.end() - 1;
169 ( *itgraph )->SetMarkerSize( 1.5 );
170 ( *itgraph )->SetMarkerStyle( 21 );
171 ( *itgraph )->SetMarkerColor( 4 );
172 for ( unsigned int k = 0; k < nBinPerCounter; k++ )
173 {
174 ( *itgraph )->SetBinContent( k + 1, tsigma[k] );
175 ( *itgraph )->SetBinError( k + 1, tsigmaerr[k] );
176 }
177
178 return;
179}
180
181void calib_endcap_sigma::fitGraph( unsigned int icounter ) {
182
183 TF1* p2 = new TF1( "p2", "pol2", rtofbegin, rtofend );
184
185 // std::vector<unsigned int>::iterator itnumber = nGraphPerCanvasPerCounter.begin();
186 std::vector<TH1F*>::iterator itgraph = m_graphs.begin() + icounter * nGraphEcSigma + 1;
187
188 ( *itgraph )->Fit( "p2", "Q" );
189 X = HepVector( m_npar, 0 );
190 X[0] = p2->GetParameter( 0 );
191 X[1] = p2->GetParameter( 1 );
192 X[2] = p2->GetParameter( 2 );
193
194 std::vector<HepVector>::iterator iter = m_result.begin() + icounter;
195 ( *iter ) = X;
196
197 return;
198}
double p2[4]
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 rtofend
Definition TofCalibFit.h:17
const double rtofbegin
Definition TofCalibFit.h:16
std::vector< Record * > RecordSet
Definition TofDataSet.h:97
const unsigned int NEndcap
Definition TofDataSet.h:13
const int nGraphEcSigma
const int nParEcSigma
const int nEndcapSigma
double tleft() const
Definition TofDataSet.h:59
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
std::vector< unsigned int > nGraphPerCanvasPerCounter
Definition TofCalibFit.h:45
unsigned int nCanvasPerCounter
Definition TofCalibFit.h:44
unsigned int nHistPerCounter
Definition TofCalibFit.h:43
HepVector X
Definition TofCalibFit.h:51
unsigned int nHistogram
Definition TofCalibFit.h:46
std::vector< TH1F * > m_graphs
Definition TofCalibFit.h:54
TofCalibFit(bool isbarrel, const int npar)
std::vector< string > CanvasPerCounterName
Definition TofCalibFit.h:57
calib_endcap_sigma(const unsigned int nrbin)
void calculate(RecordSet *&data, unsigned int icounter)