314 const char* filenamedata =
"/local/nova/users/lein/datadedxVgammaFineS15-05-22.root";
315 const char* filenamemc =
"/local/nova/users/lein/mcdedxVgammaFineS15-05-22.root";
317 const char* filenamedataP =
"/local/nova/users/lein/datadedxVgammaFineS15-05-22Proton.root";
318 const char* filenamemcP =
"/local/nova/users/lein/mcdedxVgammaFineS15-05-22Proton.root";
320 TFile* filedata =
new TFile(filenamedata,
"READ");
321 TFile* filemc =
new TFile(filenamemc,
"READ");
323 TFile* filedataP =
new TFile(filenamedataP,
"READ");
324 TFile* filemcP =
new TFile(filenamemcP,
"READ");
326 TH2F* dedxdata = (TH2F*)filedata->Get(
"DedxVx");
327 TH2F* dedxmc = (TH2F*)filemc->Get(
"DedxVx");
329 TH2F* dedxdataP = (TH2F*)filedataP->Get(
"DedxVx");
330 TH2F* dedxmcP = (TH2F*)filemcP->Get(
"DedxVx");
334 gStyle->SetOptStat(00000);
349 TCanvas* c0 =
new TCanvas(
"c0",
"c0");
350 dedxpeakdata->Draw();
351 dedxpeakmc->Draw(
"same");
352 dedxpeakmcP->Draw(
"same");
353 dedxpeakdataP->Draw(
"same");
354 dedxpeakmc->SetLineColor(
kRed);
355 dedxpeakmc->SetMarkerColor(
kRed);
356 dedxpeakmcP->SetLineColor(
kViolet);
357 dedxpeakmcP->SetMarkerColor(
kViolet);
358 dedxpeakdataP->SetLineColor(
kGreen+2);
359 dedxpeakdataP->SetMarkerColor(
kGreen+2);
360 dedxpeakdata->GetYaxis()->SetRangeUser(0.0,0.006);
361 dedxpeakdata->GetXaxis()->SetNoExponent();
363 TLegend* leg0 =
new TLegend(0.65,0.70,0.85,0.85);
364 leg0->AddEntry(dedxpeakdata,
"Muon Data",
"LE");
365 leg0->AddEntry(dedxpeakmc,
"Muon MC",
"LE");
366 leg0->AddEntry(dedxpeakdataP,
"Proton Data",
"LE");
367 leg0->AddEntry(dedxpeakmcP,
"Proton MC",
"LE");
369 c0->Print(
"dedxfine.pdf");
370 c0->Print(
"dedxfine.root");
372 TCanvas* c00 =
new TCanvas(
"c00",
"c00");
373 dedxdata->Draw(
"colz");
374 dedxpeakdata->Draw(
"same");
375 dedxdata->GetYaxis()->SetRangeUser(0.0,0.006);
376 dedxdata->GetXaxis()->SetNoExponent();
378 c00->Print(
"dedxDataMother.pdf");
380 TCanvas* c000 =
new TCanvas(
"c000",
"c000");
382 dedxmc->Draw(
"colz");
383 dedxpeakmc->Draw(
"same");
384 dedxmc->GetYaxis()->SetRangeUser(0.0,0.006);
385 dedxmc->GetXaxis()->SetNoExponent();
387 c000->Print(
"dedxMCMother.pdf");
389 TCanvas* c00P =
new TCanvas(
"c00P",
"c00P");
390 dedxdataP->Draw(
"colz");
391 dedxpeakdataP->Draw(
"same");
392 dedxdataP->GetYaxis()->SetRangeUser(0.0,0.006);
393 dedxdataP->GetXaxis()->SetNoExponent();
395 c00P->Print(
"dedxDataProtonMother.pdf");
397 TCanvas* c000P =
new TCanvas(
"c000P",
"c000P");
399 dedxmcP->Draw(
"colz");
400 dedxpeakmcP->Draw(
"same");
401 dedxmcP->GetYaxis()->SetRangeUser(0.0,0.006);
402 dedxmcP->GetXaxis()->SetNoExponent();
404 c000P->Print(
"dedxMCProtonMother.pdf");
408 double minscale = 0.95;
409 double maxscale = 1.05;
411 TH1F* chi2match =
new TH1F(
"chi2match",
";Scale Factor;#chi^{2}",nsteps,minscale,maxscale);
412 TH1F* chi2matchrestrict =
new TH1F(
"chi2matchrestrict",
";Scale Factor;#chi^{2}",nsteps,minscale,maxscale);
415 for(
int ibin = 1;
ibin <= chi2match->GetNbinsX(); ++
ibin){
417 double scalefactor = chi2match->GetXaxis()->GetBinCenter(
ibin);
421 for(
int jbin = 1; jbin <= dedxpeakdata->GetNbinsX(); ++jbin){
423 double dist = dedxpeakdata->GetXaxis()->GetBinCenter(jbin);
424 double expt = dedxpeakdata->GetBinContent(jbin);
425 double errdata = dedxpeakdata->GetBinError(jbin);
426 double errmc = dedxpeakmc->GetBinError(jbin);
427 double err2 = errdata*errdata+errmc*errmc;
428 double obsunscale = dedxpeakmc->GetBinContent(jbin);
429 double obs = scalefactor*dedxpeakmc->GetBinContent(jbin);
430 double diff = expt-obs;
433 if(expt < 0 || obsunscale < 0){
continue; }
434 chi2+=(diff*diff/err2);
436 if(dist>100 && dist < 200){
437 chi2rest+=(diff*diff/err2);
450 chi2match->SetBinContent(
ibin,chi2);
451 chi2matchrestrict->SetBinContent(
ibin,chi2rest);
455 TCanvas* c00a =
new TCanvas(
"c00a",
"c00a");
457 c00a->Print(
"chi2fine.pdf");
459 double optscale = chi2match->GetXaxis()->GetBinCenter(chi2match->GetMinimumBin());
462 TCanvas* c000a =
new TCanvas(
"c000a",
"c000a");
463 chi2matchrestrict->Draw();
464 c000a->Print(
"chi2restrictfine.pdf");
466 double optscalerestrict = chi2matchrestrict->GetXaxis()->GetBinCenter(chi2matchrestrict->GetMinimumBin());
469 TH1D* dedxpeakmcscale =
new TH1D(
"OptimalMatch",
"",dedxpeakmc->GetNbinsX(),dedxpeakmc->GetXaxis()->GetXbins()->GetArray());
470 dedxpeakmcscale->Add(dedxpeakmc);
471 dedxpeakmcscale->Scale(optscale);
473 TCanvas*
c2 =
new TCanvas(
"c2",
"c2");
474 dedxpeakdata->Draw();
475 dedxpeakmcscale->Draw(
"same");
476 dedxpeakmcscale->SetLineColor(
kRed);
477 dedxpeakmcscale->SetMarkerColor(
kRed);
478 dedxpeakdata->GetYaxis()->SetRangeUser(0.0014,0.0025);
479 dedxpeakdata->GetXaxis()->SetNoExponent();
481 TLegend* leg0 =
new TLegend(0.65,0.70,0.85,0.85);
482 leg0->AddEntry(dedxpeakdata,
"Data",
"LE");
483 leg0->AddEntry(dedxpeakmcscale,
"MC",
"LE");
485 c2->Print(
"dedxoptfine.pdf");
487 double nonoptscale = 0.97375;
489 TH1D* dedxpeakmcnonoptscale =
new TH1D(
"NonOptimalMatch",
"",dedxpeakmc->GetNbinsX(),dedxpeakmc->GetXaxis()->GetXbins()->GetArray());
490 dedxpeakmcnonoptscale->Add(dedxpeakmc);
491 dedxpeakmcnonoptscale->Scale(nonoptscale);
493 TCanvas*
c3 =
new TCanvas(
"c3",
"c3");
494 dedxpeakdata->Draw();
495 dedxpeakmcnonoptscale->Draw(
"same");
496 dedxpeakmcnonoptscale->SetLineColor(
kRed);
497 dedxpeakmcnonoptscale->SetMarkerColor(
kRed);
498 dedxpeakdata->GetYaxis()->SetRangeUser(0.0014,0.0025);
499 dedxpeakdata->GetXaxis()->SetNoExponent();
501 TLegend* leg0 =
new TLegend(0.65,0.70,0.85,0.85);
502 leg0->AddEntry(dedxpeakdata,
"Data",
"LE");
503 leg0->AddEntry(dedxpeakmcnonoptscale,
"MC",
"LE");
505 c3->Print(
"dedxnonoptfine.pdf");
508 TCanvas*
c4 =
new TCanvas(
"c4",
"c4");
509 TH1D* dedxratio =
MakeRatio(dedxpeakdata,dedxpeakmc,
"dedxratio");
510 TLine* unitline =
new TLine(-1,1,1001,1);
511 unitline->SetLineWidth(2);
512 unitline->SetLineStyle(7);
514 unitline->Draw(
"same");
515 dedxratio->GetYaxis()->SetRangeUser(0.9,1.1);
518 c5->Print(
"dedxratio.pdf");
TCanvas * MakeSplitRatio(TCanvas *top, TCanvas *bot, const char *name)
TH1D * PeakProjectionY(TH2F *hist, const char *name, double minrange=-1.0, double maxrange=-1.0, double lowsig=0.001, double highsig=0.001, bool useTruncate=true)
TH1D * MakeRatio(TH1D *num, TH1D *denom, const char *name)