pl_all_CluRateRatio.C 6.12 KiB
void pl_all_CluRateRatio(Int_t iRef = 500,
Int_t iNSt = 3,
Double_t Tstart = 0.,
Double_t Tend = 800.,
Int_t iMode = 0,
Int_t iOpt = 0,
Double_t THR = 1.E5) {
// TCanvas *can = new TCanvas("can22","can22");
// can->Divide(2,2);
// TCanvas *can = new TCanvas("can","can",48,55,700,900);
TCanvas* can = new TCanvas("can", "can", 48, 56, 900, 900);
can->Divide(1, 2, 0.01, 0.01);
Float_t lsize = 0.06;
gPad->SetFillColor(0);
gStyle->SetPalette(1);
gStyle->SetLabelSize(lsize);
//gStyle->SetOptStat(kTRUE);
//gROOT->cd();
//gROOT->SetDirLevel(2);
gStyle->SetPadLeftMargin(0.2);
gStyle->SetTitleOffset(1.3, "y");
gStyle->SetOptStat(0);
TH1* h;
TH1* hRef;
TH1* hRat;
TH1* hDis;
TH2* h2;
const Int_t iTSR[11] = {500, 41, 31, 900, 901, 700, 921, 600, 601, 800, 801};
const Double_t dArea[11] = {
1., 18., 44.0, 896., 896., 896., 896., 280., 280., 32., 4.};
const Double_t dDist[11] = {
1., 353., 532.5, 386., 416., 416., 445., 478., 485., 517., 543.};
Int_t iCanv = 0;
// if (h!=NULL) h->Delete();
TString hname;
can->cd(1);
Int_t iRp = iRef % 10;
Int_t iSmType = (iRef - iRp) / 10;
Int_t iSm = iSmType % 10;
iSmType = (iSmType - iSm) / 10;
Int_t IndRef = 0;
for (IndRef = 0; IndRef < 11; IndRef++)
if (iTSR[IndRef] == iRef) break;
cout << "Reference counter " << iRef << " found at index " << IndRef << endl;
gROOT->cd();
switch (iMode) {
case 0:
hname = Form("cl_SmT%01d_sm%03d_rpc%03d_rate", iSmType, iSm, iRp);
break;
case 1:
hname = Form("cl_SmT%01d_sm%03d_rpc%03d_rate10s", iSmType, iSm, iRp);
break;
}
h = (TH1*) gROOT->FindObjectAny(hname);
if (h != NULL) {
hRef = (TH1*) h->Clone();
switch (iOpt) {
case 10:
case 0: //rate
hRef->Add(h, hRef, 0., 1.);
// hRef->SetMaximum(1.E5);
gPad->SetLogy();
break;
case 1: //rate/area
hRef->Add(h, hRef, 0., 1. / dArea[IndRef]);
hRef->SetMaximum(1.E3);
break;
case 2: //flux=rate/area*dist**2
hRef->Add(h, hRef, 0., dDist[IndRef] * dDist[IndRef] / dArea[IndRef]);
break;
}
hRef->GetXaxis()->SetRangeUser(Tstart, Tend);
hRef->Draw("histE");
hRef->Sumw2();
//hRef->UseCurrentStyle();
}
Int_t iCol = 1;
for (Int_t iSt = 0; iSt < iNSt; iSt++) {
iRp = iTSR[iSt] % 10;
iSmType = (iTSR[iSt] - iRp) / 10;
iSm = iSmType % 10;
iSmType = (iSmType - iSm) / 10;
gROOT->cd();
switch (iMode) {
case 0:
hname = Form("cl_SmT%01d_sm%03d_rpc%03d_rate", iSmType, iSm, iRp);
break;
case 1:
hname = Form("cl_SmT%01d_sm%03d_rpc%03d_rate10s", iSmType, iSm, iRp);
break;
}
h = (TH1*) gROOT->FindObjectAny(hname);
if (h != NULL) {
hDis = (TH1*) h->Clone();
hDis->SetName(Form("hDis_%d", iTSR[iSt]));
switch (iOpt) {
case 10:
case 0: //rate
hDis->Add(h, hDis, 0., 1.);
break;
case 1: //rate/area
cout << "Scale station " << iSt << " by " << 1. / dArea[iSt] << endl;
hDis->Add(h, hDis, 0., 1. / dArea[iSt]);
break;
case 2: //flux=rate/area*dist**2
hDis->Add(h, hDis, 0., dDist[iSt] * dDist[iSt] / dArea[iSt]);
break;
}
hDis->Draw("samehistE");
hDis->SetLineColor(iCol++);
if (iCol == 5) iCol++; // skip yellow
//h->UseCurrentStyle();
//gPad->SetLogy();
} else {
cout << "Histogram " << hname << " not existing. " << endl;
}
}
can->cd(2);
iCol = 1;
for (Int_t iSt = 0; iSt < iNSt; iSt++) {
iRp = iTSR[iSt] % 10;
iSmType = (iTSR[iSt] - iRp) / 10;
iSm = iSmType % 10;
iSmType = (iSmType - iSm) / 10;
gROOT->cd();
switch (iMode) {
case 0:
hname = Form("cl_SmT%01d_sm%03d_rpc%03d_rate", iSmType, iSm, iRp);
break;
case 1:
hname = Form("cl_SmT%01d_sm%03d_rpc%03d_rate10s", iSmType, iSm, iRp);
break;
}
h = (TH1*) gROOT->FindObjectAny(hname);
if (h != NULL) {
hRat = (TH1*) h->Clone();
h->Sumw2();
hRat->SetName(Form("hRat_%d", iTSR[iSt]));
hRat->SetTitle("ratio");
hRat->GetYaxis()->SetTitle("ratio");
switch (iOpt) {
case 0: //rate
hRat->Divide(h, hRef, 1., 1., "B");
break;
case 1: //rate/area
hRat->Divide(h, hRef, 1. / dArea[iSt], 1. / dArea[IndRef], "B");
break;
case 2: //flux=rate/area*dist**2
hRat->Divide(h,
hRef,
dDist[iSt] * dDist[iSt] / dArea[iSt],
dDist[IndRef] * dDist[IndRef] / dArea[IndRef],
"B");
break;
case 10: {
Double_t dVal = 0.;
Double_t dErr = 0.;
for (Int_t iBin = 0; iBin < h->GetNbinsX(); iBin++) {
if (iBin < 100)
cout << "h " << h->GetName() << " bin " << iBin << ", cts "
<< hRef->GetBinContent(iBin + 1) << ", val " << dVal << endl;
if (hRef->GetBinContent(iBin + 1) > THR) {
dVal = h->GetBinContent(iBin + 1) / hRef->GetBinContent(iBin + 1);
dErr =
TMath::Sqrt(TMath::Power(h->GetBinContent(iBin + 1), -0.5)
+ TMath::Power(hRef->GetBinContent(iBin + 1), -0.5))
* dVal;
} else {
dErr = 0.;
}
hRat->SetBinContent(iBin + 1, dVal);
hRat->SetBinError(iBin + 1, dErr);
}
} break;
}
if (iSt == 0) {
hRat->SetMinimum(1.E-2);
hRat->Draw("L E");
hRat->GetXaxis()->SetRangeUser(Tstart, Tend);
} else
hRat->Draw("L E SAME");
hRat->SetLineColor(iCol++);
if (iCol == 5) iCol++; // skip yellow
//h->UseCurrentStyle();
gPad->SetLogy();
} else {
cout << "Histogram " << hname << " not existing. " << endl;
}
}
can->SaveAs(Form("pl_all_CluRate.pdf"));
}