257 {
258 MsgStream log(
msgSvc(), name() );
259 log << MSG::INFO << "DedxCalibDocaEAng::WriteHists()" << endmsg;
260
262 double Out_entryNo[totalNo] = { 0 }, Out_mean[totalNo] = { 0 }, Out_sigma[totalNo] = { 0 },
263 Out_fitmean[totalNo] = { 0 }, Out_fitmeanerr[totalNo] = { 0 },
264 Out_fitsigma[totalNo] = { 0 }, Out_gain[totalNo] = { 0 };
265 double Iner_entryNo[totalNo] = { 0 }, Iner_mean[totalNo] = { 0 },
266 Iner_sigma[totalNo] = { 0 }, Iner_fitmean[totalNo] = { 0 },
267 Iner_fitmeanerr[totalNo] = { 0 }, Iner_fitsigma[totalNo] = { 0 },
268 Iner_gain[totalNo] = { 0 };
269 double Id_doca[totalNo] = { 0 }, Ip_eangle[totalNo] = { 0 }, doca[totalNo] = { 0 },
270 eangle[totalNo] = { 0 }, chisq[totalNo] = { 0 };
271
272 double Norm( 0 ),
count( 0 );
274 {
276 {
280 int iE = 0, i = 0;
281 for ( ; i < 14; i++ )
282 {
283 if ( ip >= iE && ip < iE + Eangle_cut_bin[i] ) break;
284 iE = iE + Eangle_cut_bin[i];
285 }
286
288 Eangle_value_cut[i] + ( ip - iE + 0.5 ) *
289 ( Eangle_value_cut[i + 1] - Eangle_value_cut[i] ) /
290 Eangle_cut_bin[i];
291
292
293 Out_entryNo[
id *
NumSlicesEAng + ip] = m_docaeangle[id][ip]->GetEntries();
294 Out_mean[
id *
NumSlicesEAng + ip] = m_docaeangle[id][ip]->GetMean();
295 Out_sigma[
id *
NumSlicesEAng + ip] = m_docaeangle[id][ip]->GetRMS();
296
297
299
301 {
303 m_docaeangle[id][ip]->GetFunction( "mylan" )->GetParameter( 1 );
305 m_docaeangle[id][ip]->GetFunction( "mylan" )->GetParError( 1 );
307 m_docaeangle[id][ip]->GetFunction( "mylan" )->GetParameter( 2 );
308
309
311 ( m_docaeangle[id][ip]->GetFunction( "mylan" )->GetChisquare() ) /
312 ( m_docaeangle[id][ip]->GetFunction( "mylan" )->GetNDF() );
313 }
315 {
317 m_docaeangle[id][ip]->GetFunction( "landaun" )->GetParameter( 1 );
319 m_docaeangle[id][ip]->GetFunction( "landaun" )->GetParError( 1 );
321 m_docaeangle[id][ip]->GetFunction( "landaun" )->GetParameter( 2 );
323 ( m_docaeangle[id][ip]->GetFunction( "landaun" )->GetChisquare() ) /
324 ( m_docaeangle[id][ip]->GetFunction( "landaun" )->GetNDF() );
325 }
327 {
329 m_docaeangle[id][ip]->GetFunction( "Landau" )->GetParameter( 1 );
331 m_docaeangle[id][ip]->GetFunction( "Landau" )->GetParError( 1 );
333 m_docaeangle[id][ip]->GetFunction( "Landau" )->GetParameter( 2 );
335 ( m_docaeangle[id][ip]->GetFunction( "Landau" )->GetChisquare() ) /
336 ( m_docaeangle[id][ip]->GetFunction( "Landau" )->GetNDF() );
337 }
339 {
341 m_docaeangle[id][ip]->GetFunction( "Vavilov" )->GetParameter( 1 );
343 m_docaeangle[id][ip]->GetFunction( "Vavilov" )->GetParError( 1 );
345 m_docaeangle[id][ip]->GetFunction( "Vavilov" )->GetParameter( 2 );
347 ( m_docaeangle[id][ip]->GetFunction( "Vavilov" )->GetChisquare() ) /
348 ( m_docaeangle[id][ip]->GetFunction( "Vavilov" )->GetNDF() );
349 }
351 {
353 m_docaeangle[id][ip]->GetFunction( "AsymGauss" )->GetParameter( 1 );
355 m_docaeangle[id][ip]->GetFunction( "AsymGauss" )->GetParError( 1 );
357 m_docaeangle[id][ip]->GetFunction( "AsymGauss" )->GetParameter( 2 );
359 ( m_docaeangle[id][ip]->GetFunction( "AsymGauss" )->GetChisquare() ) /
360 ( m_docaeangle[id][ip]->GetFunction( "AsymGauss" )->GetNDF() );
361 }
362
363 m_DocaEAngAverdE->SetBinContent(
id + 1, ip + 1, Out_fitmean[
id *
NumSlicesEAng + ip] );
369 {
373 }
374 }
375 }
377 cout <<
"count= " <<
count <<
" average value of doca eangle bins: " << Norm << endl;
378 for ( Int_t i = 0; i < totalNo; i++ )
379 {
380 if ( Out_entryNo[i] > 10 && Out_fitmean[i] > 0 && Out_fitsigma[i] > 0 )
381 Out_gain[i] = Out_fitmean[i] / Norm;
382 else Out_gain[i] = 0;
383 }
384
385 log << MSG::INFO << "begin generating root file!!! " << endmsg;
386 TFile*
f =
new TFile(
m_rootfile.c_str(),
"recreate" );
388 {
389 for ( Int_t ip = 0; ip <
NumSlicesEAng; ip++ ) { m_docaeangle[id][ip]->Write(); }
390 }
391 m_DocaEAngAverdE->Write();
392
393 TTree* ddgcalib = new TTree( "ddgcalib", "ddgcalib" );
394 ddgcalib->Branch( "Out_hits", Out_entryNo, "Out_entryNo[1600]/D" );
395 ddgcalib->Branch( "Out_mean", Out_mean, "Out_mean[1600]/D" );
396 ddgcalib->Branch( "Out_sigma", Out_sigma, "Out_sigma[1600]/D" );
397 ddgcalib->Branch( "Out_fitmean", Out_fitmean, "Out_fitmean[1600]/D" );
398 ddgcalib->Branch( "Out_fitmeanerr", Out_fitmeanerr, "Out_fitmeanerr[1600]/D" );
399 ddgcalib->Branch( "Out_chi", Out_fitsigma, "Out_fitsigma[1600]/D" );
400 ddgcalib->Branch( "Out_gain", Out_gain, "Out_gain[1600]/D" );
401 ddgcalib->Branch( "Iner_hits", Iner_entryNo, "Iner_entryNo[1600]/D" );
402 ddgcalib->Branch( "Iner_mean", Iner_mean, "Iner_mean[1600]/D" );
403 ddgcalib->Branch( "Iner_sigma", Iner_sigma, "Iner_sigma[1600]/D" );
404 ddgcalib->Branch( "Iner_fitmean", Iner_fitmean, "Iner_fitmean[1600]/D" );
405 ddgcalib->Branch( "Iner_fitmeanerr", Iner_fitmeanerr, "Iner_fitmeanerr[1600]/D" );
406 ddgcalib->Branch( "Iner_chi", Iner_fitsigma, "Iner_fitsigma[1600]/D" );
407 ddgcalib->Branch( "Iner_gain", Iner_gain, "Iner_gain[1600]/D" );
408 ddgcalib->Branch( "Id_doca", Id_doca, "Id_doca[1600]/D" );
409 ddgcalib->Branch( "Ip_eangle", Ip_eangle, "Ip_eangle[1600]/D" );
410 ddgcalib->Branch( "chisq", chisq, "chisq[1600]/D" );
411 ddgcalib->Branch( "doca", doca, "doca[1600]/D" );
412 ddgcalib->Branch( "eangle", eangle, "eangle[1600]/D" );
413 ddgcalib->Fill();
414 ddgcalib->Write();
416
417 TCanvas c1( "c1", "canvas", 500, 400 );
420 {
422 {
423 m_docaeangle[id][ip]->Draw();
425 }
426 }
428
430 {
431 for ( Int_t ip = 0; ip <
NumSlicesEAng; ip++ ) {
delete m_docaeangle[id][ip]; }
432 }
433 delete m_DocaEAngAverdE;
434}
DOUBLE_PRECISION count[3]