238 {
239 MsgStream log(
msgSvc(), name() );
240 log << MSG::INFO << "DedxCalibEAng::WriteHists()" << endmsg;
241
256
257 double Norm( 0 ), trunc_Norm( 0 );
259 for ( Int_t ip = 0; ip <
NumSlices; ip++ )
260 {
261 Ip_eangle[ip] = ip;
263
264 entryNo[ip] = m_eangle[ip]->Integral();
265 trunc_mean[ip] = m_trunc_eangle[ip]->GetMean();
266 trunc_sigma[ip] = m_trunc_eangle[ip]->GetRMS();
267 pos_entryNo[ip] = m_pos_eangle[ip]->Integral();
268 pos_mean[ip] = m_pos_eangle[ip]->GetMean();
269 pos_sigma[ip] = m_pos_eangle[ip]->GetRMS();
270 neg_entryNo[ip] = m_neg_eangle[ip]->Integral();
271 neg_mean[ip] = m_neg_eangle[ip]->GetMean();
272 neg_sigma[ip] = m_neg_eangle[ip]->GetRMS();
273 if ( entryNo[ip] < 10 || pos_entryNo[ip] < 10 || neg_entryNo[ip] < 10 ) continue;
274
276 {
277 fitmean[ip] = m_eangle[ip]->GetFunction( "mylan" )->GetParameter( 1 );
278 fitmeanerr[ip] = m_eangle[ip]->GetFunction( "mylan" )->GetParError( 1 );
279 fitsigma[ip] = m_eangle[ip]->GetFunction( "mylan" )->GetParameter( 2 );
280 chisq[ip] = ( m_eangle[ip]->GetFunction( "mylan" )->GetChisquare() ) /
281 ( m_eangle[ip]->GetFunction( "mylan" )->GetNDF() );
282
283 pos_fitmean[ip] = m_pos_eangle[ip]->GetFunction( "mylan" )->GetParameter( 1 );
284 pos_fitmeanerr[ip] = m_pos_eangle[ip]->GetFunction( "mylan" )->GetParError( 1 );
285 pos_fitsigma[ip] = m_pos_eangle[ip]->GetFunction( "mylan" )->GetParameter( 2 );
286 pos_chisq[ip] = ( m_pos_eangle[ip]->GetFunction( "mylan" )->GetChisquare() ) /
287 ( m_pos_eangle[ip]->GetFunction( "mylan" )->GetNDF() );
288
289 neg_fitmean[ip] = m_neg_eangle[ip]->GetFunction( "mylan" )->GetParameter( 1 );
290 neg_fitmeanerr[ip] = m_neg_eangle[ip]->GetFunction( "mylan" )->GetParError( 1 );
291 neg_fitsigma[ip] = m_neg_eangle[ip]->GetFunction( "mylan" )->GetParameter( 2 );
292 neg_chisq[ip] = ( m_neg_eangle[ip]->GetFunction( "mylan" )->GetChisquare() ) /
293 ( m_neg_eangle[ip]->GetFunction( "mylan" )->GetNDF() );
294 }
296 {
297 fitmean[ip] = m_eangle[ip]->GetFunction( "landaun" )->GetParameter( 1 );
298 fitmeanerr[ip] = m_eangle[ip]->GetFunction( "landaun" )->GetParError( 1 );
299 fitsigma[ip] = m_eangle[ip]->GetFunction( "landaun" )->GetParameter( 2 );
300 chisq[ip] = ( m_eangle[ip]->GetFunction( "landaun" )->GetChisquare() ) /
301 ( m_eangle[ip]->GetFunction( "mylan" )->GetNDF() );
302
303 pos_fitmean[ip] = m_pos_eangle[ip]->GetFunction( "landaun" )->GetParameter( 1 );
304 pos_fitmeanerr[ip] = m_pos_eangle[ip]->GetFunction( "landaun" )->GetParError( 1 );
305 pos_fitsigma[ip] = m_pos_eangle[ip]->GetFunction( "landaun" )->GetParameter( 2 );
306 pos_chisq[ip] = ( m_pos_eangle[ip]->GetFunction( "landaun" )->GetChisquare() ) /
307 ( m_pos_eangle[ip]->GetFunction( "landaun" )->GetNDF() );
308
309 neg_fitmean[ip] = m_neg_eangle[ip]->GetFunction( "landaun" )->GetParameter( 1 );
310 neg_fitmeanerr[ip] = m_neg_eangle[ip]->GetFunction( "landaun" )->GetParError( 1 );
311 neg_fitsigma[ip] = m_neg_eangle[ip]->GetFunction( "landaun" )->GetParameter( 2 );
312 neg_chisq[ip] = ( m_neg_eangle[ip]->GetFunction( "landaun" )->GetChisquare() ) /
313 ( m_neg_eangle[ip]->GetFunction( "landaun" )->GetNDF() );
314 }
316 {
317 fitmean[ip] = m_eangle[ip]->GetFunction( "Landau" )->GetParameter( 1 );
318 fitmeanerr[ip] = m_eangle[ip]->GetFunction( "Landau" )->GetParError( 1 );
319 fitsigma[ip] = m_eangle[ip]->GetFunction( "Landau" )->GetParameter( 2 );
320 chisq[ip] = ( m_eangle[ip]->GetFunction( "Landau" )->GetChisquare() ) /
321 ( m_eangle[ip]->GetFunction( "Landau" )->GetNDF() );
322
323 pos_fitmean[ip] = m_pos_eangle[ip]->GetFunction( "Landau" )->GetParameter( 1 );
324 pos_fitmeanerr[ip] = m_pos_eangle[ip]->GetFunction( "Landau" )->GetParError( 1 );
325 pos_fitsigma[ip] = m_pos_eangle[ip]->GetFunction( "Landau" )->GetParameter( 2 );
326 pos_chisq[ip] = ( m_pos_eangle[ip]->GetFunction( "Landau" )->GetChisquare() ) /
327 ( m_pos_eangle[ip]->GetFunction( "Landau" )->GetNDF() );
328
329 neg_fitmean[ip] = m_neg_eangle[ip]->GetFunction( "Landau" )->GetParameter( 1 );
330 neg_fitmeanerr[ip] = m_neg_eangle[ip]->GetFunction( "Landau" )->GetParError( 1 );
331 neg_fitsigma[ip] = m_neg_eangle[ip]->GetFunction( "Landau" )->GetParameter( 2 );
332 neg_chisq[ip] = ( m_neg_eangle[ip]->GetFunction( "Landau" )->GetChisquare() ) /
333 ( m_neg_eangle[ip]->GetFunction( "Landau" )->GetNDF() );
334 }
336 {
337 fitmean[ip] = m_eangle[ip]->GetFunction( "Vavilov" )->GetParameter( 1 );
338 fitmeanerr[ip] = m_eangle[ip]->GetFunction( "Vavilov" )->GetParError( 1 );
339 fitsigma[ip] = m_eangle[ip]->GetFunction( "Vavilov" )->GetParameter( 2 );
340 chisq[ip] = ( m_eangle[ip]->GetFunction( "Vavilov" )->GetChisquare() ) /
341 ( m_eangle[ip]->GetFunction( "Vavilov" )->GetNDF() );
342
343 pos_fitmean[ip] = m_pos_eangle[ip]->GetFunction( "Vavilov" )->GetParameter( 1 );
344 pos_fitmeanerr[ip] = m_pos_eangle[ip]->GetFunction( "Vavilov" )->GetParError( 1 );
345 pos_fitsigma[ip] = m_pos_eangle[ip]->GetFunction( "Vavilov" )->GetParameter( 2 );
346 pos_chisq[ip] = ( m_pos_eangle[ip]->GetFunction( "Vavilov" )->GetChisquare() ) /
347 ( m_pos_eangle[ip]->GetFunction( "Vavilov" )->GetNDF() );
348
349 neg_fitmean[ip] = m_neg_eangle[ip]->GetFunction( "Vavilov" )->GetParameter( 1 );
350 neg_fitmeanerr[ip] = m_neg_eangle[ip]->GetFunction( "Vavilov" )->GetParError( 1 );
351 neg_fitsigma[ip] = m_neg_eangle[ip]->GetFunction( "Vavilov" )->GetParameter( 2 );
352 neg_chisq[ip] = ( m_neg_eangle[ip]->GetFunction( "Vavilov" )->GetChisquare() ) /
353 ( m_neg_eangle[ip]->GetFunction( "Vavilov" )->GetNDF() );
354 }
356 {
357 fitmean[ip] = m_eangle[ip]->GetFunction( "AsymGauss" )->GetParameter( 1 );
358 fitmeanerr[ip] = m_eangle[ip]->GetFunction( "AsymGauss" )->GetParError( 1 );
359 fitsigma[ip] = m_eangle[ip]->GetFunction( "AsymGauss" )->GetParameter( 2 );
360 chisq[ip] = ( m_eangle[ip]->GetFunction( "AsymGauss" )->GetChisquare() ) /
361 ( m_eangle[ip]->GetFunction( "AsymGauss" )->GetNDF() );
362
363 pos_fitmean[ip] = m_pos_eangle[ip]->GetFunction( "AsymGauss" )->GetParameter( 1 );
364 pos_fitmeanerr[ip] = m_pos_eangle[ip]->GetFunction( "AsymGauss" )->GetParError( 1 );
365 pos_fitsigma[ip] = m_pos_eangle[ip]->GetFunction( "AsymGauss" )->GetParameter( 2 );
366 pos_chisq[ip] = ( m_pos_eangle[ip]->GetFunction( "AsymGauss" )->GetChisquare() ) /
367 ( m_pos_eangle[ip]->GetFunction( "AsymGauss" )->GetNDF() );
368
369 neg_fitmean[ip] = m_neg_eangle[ip]->GetFunction( "AsymGauss" )->GetParameter( 1 );
370 neg_fitmeanerr[ip] = m_neg_eangle[ip]->GetFunction( "AsymGauss" )->GetParError( 1 );
371 neg_fitsigma[ip] = m_neg_eangle[ip]->GetFunction( "AsymGauss" )->GetParameter( 2 );
372 neg_chisq[ip] = ( m_neg_eangle[ip]->GetFunction( "AsymGauss" )->GetChisquare() ) /
373 ( m_neg_eangle[ip]->GetFunction( "AsymGauss" )->GetNDF() );
374 }
375 if ( entryNo[ip] > 1500 && fitmean[ip] > 0 && fitmeanerr[ip] > 0 && fitmeanerr[ip] < 10 &&
376 fitsigma[ip] > 0 && fitsigma[ip] < 200 )
377 {
378 Norm += fitmean[ip];
379 trunc_Norm += trunc_mean[ip];
381 }
382 }
384 trunc_Norm = trunc_Norm /
count;
385
386 cout <<
"count= " <<
count <<
" average value: " << Norm <<
" truncted: " << trunc_Norm
387 << endl;
389 {
390 if ( entryNo[i] > 10 && fitmean[i] > 0 && fitsigma[i] > 0 ) gain[i] = fitmean[i] / Norm;
391 else gain[i] = 1;
392 if ( entryNo[i] > 10 ) trunc_gain[i] = trunc_mean[i] / trunc_Norm;
393 else trunc_mean[i] = 1;
394 if ( pos_entryNo[i] > 10 && pos_fitmean[i] > 0 && pos_fitsigma[i] > 0 )
395 pos_gain[i] = pos_fitmean[i] / Norm;
396 else pos_gain[i] = 1;
397 if ( neg_entryNo[i] > 10 && neg_fitmean[i] > 0 && neg_fitsigma[i] > 0 )
398 neg_gain[i] = neg_fitmean[i] / Norm;
399 else neg_gain[i] = 1;
400 if ( gain[i] != 1 )
401 {
402 m_EAngAverdE->SetBinContent( i + 1, gain[i] );
403 m_EAngAverdE->SetBinError( i + 1, fitmeanerr[i] / Norm );
404 }
405 if ( trunc_gain[i] != 1 )
406 {
407 m_trunc_EAngAverdE->SetBinContent( i + 1, trunc_gain[i] );
408 m_trunc_EAngAverdE->SetBinError( i + 1, trunc_sigma[i] / trunc_Norm );
409 }
410 if ( pos_gain[i] != 1 )
411 {
412 m_pos_EAngAverdE->SetBinContent( i + 1, pos_gain[i] );
413 m_pos_EAngAverdE->SetBinError( i + 1, pos_fitmeanerr[i] / Norm );
414 }
415 if ( neg_gain[i] != 1 )
416 {
417 m_neg_EAngAverdE->SetBinContent( i + 1, neg_gain[i] );
418 m_neg_EAngAverdE->SetBinError( i + 1, neg_fitmeanerr[i] / Norm );
419 }
420 }
421
422 log << MSG::INFO << "begin getting calibration constant!!! " << endmsg;
424 int denangle_entry[1] = { 100 };
425 m_EAngAverdE->Fit( "pol1", "r", "", -0.25, 0.25 );
426 double par0 = m_EAngAverdE->GetFunction( "pol1" )->GetParameter( 0 );
427 double par1 = m_EAngAverdE->GetFunction( "pol1" )->GetParameter( 1 );
428
429
430
431
432 for (
int i = 0; i <
NumSlices; i++ ) denangle[i] = gain[i];
433
434 log << MSG::INFO << "begin generating root file!!! " << endmsg;
435 TFile*
f =
new TFile(
m_rootfile.c_str(),
"recreate" );
436 for ( Int_t ip = 0; ip <
NumSlices; ip++ )
437 {
438 m_eangle[ip]->Write();
439 m_trunc_eangle[ip]->Write();
440 m_pos_eangle[ip]->Write();
441 m_neg_eangle[ip]->Write();
442 }
443 m_EAngAverdE->Write();
444 m_trunc_EAngAverdE->Write();
445 m_pos_EAngAverdE->Write();
446 m_neg_EAngAverdE->Write();
447
448 TTree* entracalib = new TTree( "entracalib", "entracalib" );
449 entracalib->Branch( "1denangle", denangle, "denangle[100]/D" );
450 entracalib->Branch( "1denangle_entry", denangle_entry, "denangle_entry[1]/I" );
451 entracalib->Fill();
452 entracalib->Write();
453
454 TTree* ddgcalib = new TTree( "ddgcalib", "ddgcalib" );
455 ddgcalib->Branch( "hits", entryNo, "entryNo[100]/D" );
456 ddgcalib->Branch( "truncmean", trunc_mean, "trunc_mean[100]/D" );
457 ddgcalib->Branch( "truncsigma", trunc_sigma, "trunc_sigma[100]/D" );
458 ddgcalib->Branch( "fitmean", fitmean, "fitmean[100]/D" );
459 ddgcalib->Branch( "fitmeanerr", fitmeanerr, "fitmeanerr[100]/D" );
460 ddgcalib->Branch( "chi", fitsigma, "fitsigma[100]/D" );
461 ddgcalib->Branch( "gain", gain, "gain[100]/D" );
462 ddgcalib->Branch( "truncgain", trunc_gain, "trunc_gain[100]/D" );
463 ddgcalib->Branch( "chisq", chisq, "chisq[100]/D" );
464 ddgcalib->Branch( "pos_hits", pos_entryNo, "pos_entryNo[100]/D" );
465 ddgcalib->Branch( "pos_mean", pos_mean, "pos_mean[100]/D" );
466 ddgcalib->Branch( "pos_sigma", pos_sigma, "pos_sigma[100]/D" );
467 ddgcalib->Branch( "pos_fitmean", pos_fitmean, "pos_fitmean[100]/D" );
468 ddgcalib->Branch( "pos_fitmeanerr", pos_fitmeanerr, "pos_fitmeanerr[100]/D" );
469 ddgcalib->Branch( "pos_chi", pos_fitsigma, "pos_fitsigma[100]/D" );
470 ddgcalib->Branch( "pos_gain", pos_gain, "pos_gain[100]/D" );
471 ddgcalib->Branch( "pos_chisq", pos_chisq, "pos_chisq[100]/D" );
472 ddgcalib->Branch( "neg_hits", neg_entryNo, "neg_entryNo[100]/D" );
473 ddgcalib->Branch( "neg_mean", neg_mean, "neg_mean[100]/D" );
474 ddgcalib->Branch( "neg_sigma", neg_sigma, "neg_sigma[100]/D" );
475 ddgcalib->Branch( "neg_fitmean", neg_fitmean, "neg_fitmean[100]/D" );
476 ddgcalib->Branch( "neg_fitmeanerr", neg_fitmeanerr, "neg_fitmeanerr[100]/D" );
477 ddgcalib->Branch( "neg_chi", neg_fitsigma, "neg_fitsigma[100]/D" );
478 ddgcalib->Branch( "neg_gain", neg_gain, "neg_gain[100]/D" );
479 ddgcalib->Branch( "neg_chisq", neg_chisq, "neg_chisq[100]/D" );
480 ddgcalib->Branch( "Ip_eangle", Ip_eangle, "Ip_eangle[100]/D" );
481 ddgcalib->Branch( "eangle", eangle, "eangle[100]/D" );
482 ddgcalib->Fill();
483 ddgcalib->Write();
485
486 TCanvas c1( "c1", "canvas", 500, 400 );
488 m_EAngAverdE->Draw();
490 m_trunc_EAngAverdE->Draw();
492 m_pos_EAngAverdE->Draw();
494 m_neg_EAngAverdE->Draw();
496 for ( Int_t ip = 0; ip <
NumSlices; ip++ )
497 {
498 m_eangle[ip]->Draw();
500 }
501 for ( Int_t ip = 0; ip <
NumSlices; ip++ )
502 {
503 m_trunc_eangle[ip]->Draw();
505 }
506 for ( Int_t ip = 0; ip <
NumSlices; ip++ )
507 {
508 m_pos_eangle[ip]->Draw();
510 }
511 for ( Int_t ip = 0; ip <
NumSlices; ip++ )
512 {
513 m_neg_eangle[ip]->Draw();
515 }
517
518 for ( Int_t ip = 0; ip <
NumSlices; ip++ )
519 {
520 delete m_eangle[ip];
521 delete m_trunc_eangle[ip];
522 delete m_pos_eangle[ip];
523 delete m_neg_eangle[ip];
524 }
525 delete m_EAngAverdE;
526 delete m_trunc_EAngAverdE;
527 delete m_pos_EAngAverdE;
528 delete m_neg_EAngAverdE;
529}
DOUBLE_PRECISION count[3]