263 {
265 Gaudi::svcLocator()->service(
"MessageSvc",
msgSvc );
266 MsgStream log(
msgSvc,
"PreT0MdcCalib" );
267 log << MSG::DEBUG << "PreT0MdcCalib::updateConst()" << endmsg;
268
269
270
271
272 int lay;
273 int wir;
274 int lr;
278 double initT0 = m_param.initT0;
279
282 double chisq;
283 double ndf;
286 char funname[200];
287
288
291
293
294
296 {
298 {
299 fitTminFg[lay][lr] = 0;
300 chindfTmin[lay][lr] = -1;
301 sprintf( funname,
"ftmin%02d_%d", lay, lr );
302 ftmin[lay][lr] = new TF1( funname, funTmin, 0, 150, 6 );
303
304 if ( 1 == m_param.fgCalib[lay] )
305 {
306 Stat_t nEntryTot = 0;
307 for ( int ibin = 1; ibin <= 25; ibin++ )
308 {
309 Stat_t entry = m_hTrec[lay][lr]->GetBinContent( ibin );
310 nEntryTot += entry;
311 }
312 double c0Ini = (double)nEntryTot / 25.0;
313 double c1Ini = ( m_hTrec[lay][lr]->GetMaximum() ) - c0Ini;
314
315 ftmin[lay][lr]->SetParameter( 0, c0Ini );
316 ftmin[lay][lr]->SetParameter( 1, c1Ini );
317 ftmin[lay][lr]->SetParameter( 2, 0 );
318 ftmin[lay][lr]->SetParameter( 4, initT0 );
319 ftmin[lay][lr]->SetParameter( 5, 2 );
320
321 m_hTrec[lay][lr]->Fit( funname, "Q", "", m_param.tminFitRange[lay][0],
322 m_param.tminFitRange[lay][1] );
323 gStyle->SetOptFit( 11 );
324
325
326 chisq = ftmin[lay][lr]->GetChisquare();
327 ndf = ftmin[lay][lr]->GetNDF();
328 chindfTmin[lay][lr] = chisq / ndf;
329
330 if ( chindfTmin[lay][lr] < m_param.tminFitChindf )
331 {
332 fitTminFg[lay][lr] = 1;
333 t0Fit[lay][lr] = ftmin[lay][lr]->GetParameter( 4 );
334
335 t0Fit[lay][lr] += m_param.t0Shift;
336 t0Cal[lay][lr] = t0Fit[lay][lr] - m_param.timeShift;
337 }
338 }
339
340 if ( 0 == fitTminFg[lay][lr] )
341 {
342 wir = m_mdcGeomSvc->Wire( lay, 0 )->Id();
343 t0Cal[lay][lr] = calconst->
getT0( wir );
344 t0Fit[lay][lr] = t0Cal[lay][lr] + m_param.timeShift;
345 }
346 }
347
348 for ( int iud = 0; iud < 2; iud++ )
349 {
350 sprintf( funname,
"ftminCosm_%02d_%d", lay, iud );
351 ftminCosm[lay][iud] = new TF1( funname, funTmin, 0, 150, 6 );
352 ftminCosm[lay][iud]->SetParameter( 0, 0 );
353 ftminCosm[lay][iud]->SetParameter( 4, initT0 );
354 ftminCosm[lay][iud]->SetParameter( 5, 1 );
355 m_hTrecCosm[lay][iud]->Fit( funname, "Q", "", m_param.tminFitRange[lay][0],
356 m_param.tminFitRange[lay][1] );
357 gStyle->SetOptFit( 11 );
358 t0FitCosm[lay][iud] += m_param.t0Shift;
359 t0FitCosm[lay][iud] = ftminCosm[lay][iud]->GetParameter( 4 );
360 }
361 }
362
363
366 {
368 {
369 fitTmaxFg[lay][lr] = 0;
370 chindfTmax[lay][lr] = -1;
371 sprintf( funname,
"ftmax%02d_%d", lay, lr );
372 ftmax[lay][lr] = new TF1( funname, funTmax, 250, 500, 4 );
373
374 if ( 1 == m_param.fgCalib[lay] )
375 {
376 ftmax[lay][lr]->SetParameter( 2, m_param.initTm[lay] );
377 ftmax[lay][lr]->SetParameter( 3, 10 );
378 m_hTrec[lay][lr]->Fit( funname, "Q+", "", m_param.tmaxFitRange[lay][0],
379 m_param.tmaxFitRange[lay][1] );
380 gStyle->SetOptFit( 11 );
381 chisq = ftmax[lay][lr]->GetChisquare();
382 ndf = ftmax[lay][lr]->GetNDF();
383 chindfTmax[lay][lr] = chisq / ndf;
384 if ( chindfTmax[lay][lr] < m_param.tmaxFitChindf )
385 {
386 fitTmaxFg[lay][lr] = 1;
387 tmax[lay][lr] = ftmax[lay][lr]->GetParameter( 2 );
388 }
389 }
390
391 if ( 0 == fitTmaxFg[lay][lr] )
392 { tmax[lay][lr] = ( calconst->
getXtpar( lay, 0, lr, 6 ) ) + t0Fit[lay][2]; }
393 }
394 }
395
396
399 {
400 ft0 << setw( 5 ) << lay << setw( 3 ) << fitTminFg[lay][2] << setw( 15 ) << t0Cal[lay][2]
401 << setw( 15 ) << t0Fit[lay][2] << setw( 15 ) << chindfTmin[lay][2] << endl;
402 }
403 ft0 << endl;
405 {
406 ft0 << setw( 5 ) << lay << setw( 3 ) << fitTmaxFg[lay][0] << setw( 10 ) << tmax[lay][0]
407 << setw( 10 ) << chindfTmax[lay][0] << setw( 3 ) << fitTmaxFg[lay][1] << setw( 10 )
408 << tmax[lay][1] << setw( 10 ) << chindfTmax[lay][1] << setw( 3 ) << fitTmaxFg[lay][2]
409 << setw( 10 ) << tmax[lay][2] << setw( 10 ) << chindfTmax[lay][2] << setw( 10 )
410 << tmax[lay][0] - t0Fit[lay][2] << setw( 10 ) << tmax[lay][1] - t0Fit[lay][2]
411 << setw( 10 ) << tmax[lay][2] - t0Fit[lay][2] << endl;
412 }
413 ft0.close();
414 cout << "preT0.dat was written." << endl;
415
416
419 {
420 ft0cosm << setw( 5 ) << lay << setw( 15 ) << t0Fit[lay][2] << setw( 15 )
421 << t0FitCosm[lay][0] << setw( 15 ) << t0FitCosm[lay][1] << endl;
422 }
423 ft0cosm.close();
424
425
426 int i;
427 int nwire = m_mdcGeomSvc->getWireSize();
428 for ( i = 0; i < nwire; i++ )
429 {
430 lay = m_mdcGeomSvc->Wire( i )->Layer();
431 if ( 1 == m_param.fgCalib[lay] )
432 {
433 calconst->
resetT0( i, t0Cal[lay][2] );
435 }
436 }
437
438
439 if ( m_param.preT0SetTm )
440 {
441 int iEntr;
442 double tm;
444 {
445 if ( 1 != m_param.fgCalib[lay] ) continue;
446
448 {
450 {
451 tm = tmax[lay][lr] - t0Fit[lay][2];
452 if ( ( tmax[lay][lr] > m_param.tmaxFitRange[lay][0] ) &&
453 ( tmax[lay][lr] < m_param.tmaxFitRange[lay][1] ) )
454 { calconst->
resetXtpar( lay, iEntr, lr, 6, tm ); }
455 }
456 }
457 }
458 }
459
460
462 double sdpar = m_param.initSigma;
464 {
466 {
467 for ( lr = 0; lr < 2; lr++ )
468 {
471 }
472 }
473 }
474
475
477 {
479 {
480 delete ftmin[lay][lr];
481 delete ftmax[lay][lr];
482 }
483 }
484 return 1;
485}
void resetSdpar(int lay, int entr, int lr, int bin, double val)
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)