113 {
114
120
123 double chisq;
124 double ndf;
127 char funname[200];
128
129
130 TF1* ftminCosm[
NLAYER][2];
131 double t0FitCosm[
NLAYER][2];
132
133 bool fgT0Ini = false;
135 ifstream fparIni(
"fitT0_inival.txt" );
136 if ( fparIni.is_open() )
137 {
138 string strtmp;
139 for (
int lay = 0; lay <
NLAYER; lay++ )
140 {
141 fparIni >> strtmp >> strtmp;
142 for ( int i = 0; i < 6; i++ ) fparIni >> t0ParIni[lay][2][i];
143 }
144 fparIni.close();
145 fgT0Ini = true;
146 cout << "read initial values of T0 fit from fitT0_inival.txt" << endl;
147 }
148 if ( !fgT0Ini ) cout << "set initial values of T0 fit to default values" << endl;
149
151 for (
int lay = 0; lay <
NLAYER; lay++ )
152 {
153 for (
int lr = 0; lr <
NLR; lr++ )
154 {
155 fitTminFg[lay][lr] = 0;
156 chindfTmin[lay][lr] = -1;
157 sprintf( funname,
"ftmin%02d_%d", lay, lr );
158 ftmin[lay][lr] = new TF1( funname, funTmin, 0, 150, 6 );
159 if ( lr < 2 ) continue;
160
162 {
163
164
165
166
167
168
169 double c1Ini = ( m_hTrec[lay][lr]->GetMaximum() );
170
171 if ( fgT0Ini )
172 {
173 for ( int i = 0; i < 6; i++ )
174 {
175 if ( fabs( t0ParIni[lay][2][i] + 9999 ) < 0.01 ) continue;
176 ftmin[lay][lr]->SetParameter( i, t0ParIni[lay][2][i] );
177 }
178 }
179 else
180 {
181 ftmin[lay][lr]->SetParameter( 0, 0 );
182 ftmin[lay][lr]->SetParameter( 1, c1Ini );
183 ftmin[lay][lr]->SetParameter( 2, 0 );
184 ftmin[lay][lr]->SetParameter( 4, initT0 );
185 if ( lay < 4 ) ftmin[lay][lr]->SetParameter( 5, 4 );
186 else ftmin[lay][lr]->SetParameter( 5, 1.5 );
187 }
188
189 if ( lay < 4 ) m_hTrec[lay][lr]->Fit( funname, "Q", "", 0, 140 );
190 else
191 m_hTrec[lay][lr]->Fit( funname,
"Q",
"",
gTminFitRange[lay][0],
193 gStyle->SetOptFit( 11 );
194 chisq = ftmin[lay][lr]->GetChisquare();
195 ndf = ftmin[lay][lr]->GetNDF();
196 chindfTmin[lay][lr] = chisq / ndf;
197
198
199
200
201
202
203
204
205
207 {
208 fitTminFg[lay][lr] = 1;
209 t0Fit[lay][lr] = ftmin[lay][lr]->GetParameter( 4 );
212 for ( int i = 0; i < 6; i++ )
213 t0FitPar[lay][lr][i] = ftmin[lay][lr]->GetParameter( i );
214 }
215 }
216
217 if ( 0 == fitTminFg[lay][lr] )
218 {
219 int wir = m_pGeom->getWire( lay, 0 )->getWireId();
220 t0Cal[lay][lr] = calconst->
getT0( wir );
222 }
223 }
224
225 for ( int iud = 0; iud < 2; iud++ )
226 {
227 sprintf( funname,
"ftminCosm_%02d_%d", lay, iud );
228 ftminCosm[lay][iud] = new TF1( funname, funTmin, 0, 150, 6 );
229 ftminCosm[lay][iud]->SetParameter( 0, 0 );
230 ftminCosm[lay][iud]->SetParameter( 4, initT0 );
231 ftminCosm[lay][iud]->SetParameter( 5, 1 );
232 m_hTrecCosm[lay][iud]->Fit( funname,
"Q",
"",
gTminFitRange[lay][0],
234 gStyle->SetOptFit( 11 );
236 t0FitCosm[lay][iud] = ftminCosm[lay][iud]->GetParameter( 4 );
237 }
238 }
239
240
242 for (
int lay = 0; lay <
NLAYER; lay++ )
243 {
244 for (
int lr = 0; lr <
NLR; lr++ )
245 {
246 fitTmaxFg[lay][lr] = 0;
247 chindfTmax[lay][lr] = -1;
248 sprintf( funname,
"ftmax%02d_%d", lay, lr );
249 ftmax[lay][lr] = new TF1( funname, funTmax, 250, 500, 4 );
250
252 {
253 ftmax[lay][lr]->SetParameter( 2,
gInitTm[lay] );
254 ftmax[lay][lr]->SetParameter( 3, 10 );
255 m_hTrec[lay][lr]->Fit( funname,
"Q+",
"",
gTmaxFitRange[lay][0],
257 gStyle->SetOptFit( 11 );
258 chisq = ftmax[lay][lr]->GetChisquare();
259 ndf = ftmax[lay][lr]->GetNDF();
260 chindfTmax[lay][lr] = chisq / ndf;
262 {
263 fitTmaxFg[lay][lr] = 1;
264 tmax[lay][lr] = ftmax[lay][lr]->GetParameter( 2 );
265 }
266 }
267
268 if ( 0 == fitTmaxFg[lay][lr] )
269 { tmax[lay][lr] = ( calconst->
getXtpar( lay, 0, lr, 6 ) ) + t0Fit[lay][2]; }
270 }
271 }
272
273
275 for (
int lay = 0; lay <
NLAYER; lay++ )
276 {
277 ft0 << setw( 5 ) << lay << setw( 3 ) << fitTminFg[lay][2] << setw( 15 ) << t0Cal[lay][2]
278 << setw( 15 ) << t0Fit[lay][2] << setw( 15 ) << chindfTmin[lay][2] << endl;
279 }
280 ft0 << endl;
281 for (
int lay = 0; lay <
NLAYER; lay++ )
282 {
283 ft0 << setw( 5 ) << lay << setw( 3 ) << fitTmaxFg[lay][0] << setw( 10 ) << tmax[lay][0]
284 << setw( 10 ) << chindfTmax[lay][0] << setw( 3 ) << fitTmaxFg[lay][1] << setw( 10 )
285 << tmax[lay][1] << setw( 10 ) << chindfTmax[lay][1] << setw( 3 ) << fitTmaxFg[lay][2]
286 << setw( 10 ) << tmax[lay][2] << setw( 10 ) << chindfTmax[lay][2] << setw( 10 )
287 << tmax[lay][0] - t0Fit[lay][2] << setw( 10 ) << tmax[lay][1] - t0Fit[lay][2]
288 << setw( 10 ) << tmax[lay][2] - t0Fit[lay][2] << endl;
289 }
290 ft0 << endl;
291 for (
int lay = 0; lay <
NLAYER; lay++ )
292 {
293 ft0 << setw( 5 ) << lay << setw( 15 ) << chindfTmin[lay][2];
294 for ( int i = 0; i < 6; i++ ) ft0 << setw( 15 ) << t0FitPar[lay][2][i];
295 ft0 << endl;
296 }
297 ft0.close();
298 cout << "preT0.dat was written." << endl;
299
300
302 for (
int lay = 0; lay <
NLAYER; lay++ )
303 {
304 ft0cosm << setw( 5 ) << lay << setw( 15 ) << t0Fit[lay][2] << setw( 15 )
305 << t0FitCosm[lay][0] << setw( 15 ) << t0FitCosm[lay][1] << endl;
306 }
307 ft0cosm.close();
308
309
310 for (
int i = 0; i <
NWIRE; i++ )
311 {
312 int lay = m_pGeom->getWire( i )->getLayerId();
314 {
315 calconst->
resetT0( i, t0Cal[lay][2] );
317 }
318 }
319
320
322 {
323 double tm;
324 for (
int lay = 0; lay <
NLAYER; lay++ )
325 {
327
328 for (
int iEntr = 0; iEntr <
NENTRXT; iEntr++ )
329 {
330 for (
int lr = 0; lr <
NLR; lr++ )
331 {
332 tm = tmax[lay][lr] - t0Fit[lay][2];
335 { calconst->
resetXtpar( lay, iEntr, lr, 6, tm ); }
336 }
337 }
338 }
339 }
340
341 renameHist();
342 for (
int lay = 0; lay <
NLAYER; lay++ )
343 {
344 for (
int lr = 0; lr <
NLR; lr++ )
345 {
346 delete ftmin[lay][lr];
347 delete ftmax[lay][lr];
348 }
349 }
350}
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)
double gTminFitRange[NLAYER][2]
double gTmaxFitRange[NLAYER][2]
void resetXtpar(int lay, int entr, int lr, int order, double val)
double getT0(int wireid) const
void resetDelT0(int wireid, double val)
double getXtpar(int lay, int entr, int lr, int order)
void resetT0(int wireid, double val)