4 #include "RooUnfoldResponse.h" 5 #include "RooUnfoldBayes.h" 9 TLatex*
prelim =
new TLatex(.22, .85, str);
10 prelim->SetTextColor(kBlack);
12 prelim->SetTextSize(0.05);
19 c1->SetLeftMargin(0.20);
20 c1->SetRightMargin(0.20);
21 if(setLog)c1->SetLogz();
22 hist->GetZaxis()->SetTitleOffset(1.10);
23 hist->GetXaxis()->CenterTitle();
24 hist->GetYaxis()->CenterTitle();
25 hist->GetZaxis()->CenterTitle();
28 sprintf(out,
"Plots/%s", outName.c_str());
144 TH3F*
eff = (TH3F*)num->Clone(
"eff");
167 RooUnfoldResponse ResponseMatrix(0,0,hResponse,
"ResponseMatrix");
169 ResponseMatrix.UseOverflowStatus() <<
std::endl;
170 if(!ResponseMatrix.UseOverflowStatus()){
171 ResponseMatrix.UseOverflow(1);
172 std::cout <<
"Using Overflow, now? : " <<
173 ResponseMatrix.UseOverflowStatus() <<
std::endl;
176 RooUnfoldBayes unfold(&ResponseMatrix, hMeasured, iter);
177 TH1F* hunfolded = (TH1F*)unfold.Hreco();
181 TCanvas *
c1 =
new TCanvas(
"c1",
"c1");
182 hResponse->SetMarkerColor(kBlack);
183 hResponse->Draw(
"COLZ TEXT");
184 gStyle->SetPaintTextFormat(
"4.f");
186 c1->SaveAs(
"Plots/response_matrix.png");
202 TCanvas *
c3 =
new TCanvas(
"c3",
"c3");
203 hunfolded->SetTitle(
"");
206 c3->SaveAs(
"Plots/unfolded_signal_estimate.png");
217 TFile*
outf =
new TFile(
"CrossSection_MCResults.root",
"update");
219 if(xsecResult ==
"energy"){
220 TH3F* hXSec = (TH3F*)hNumerator->Clone(
"hXSec");
225 TH1F* hXSec1D = (TH1F*)hXSec->ProjectionZ(
"hXSec1D");
226 TH1F* hTrueVar = (TH1F*)hXSec1D->Clone(
"clone");
228 hXSec1D->Divide(hFlux);
229 hXSec1D->Scale(1./numTargets);
230 hXSec1D->SetTitle(
"");
231 hXSec1D->GetXaxis()->SetTitle(
"Neutrino Energy, E_{#nu} (GeV)");
232 hXSec1D->GetYaxis()->SetTitle(
"#sigma (cm^{2}/nucleon)");
233 hXSec1D->GetXaxis()->CenterTitle();
234 hXSec1D->GetYaxis()->CenterTitle();
237 sprintf(name,
"%s_%s_%s_%s",
"mc", dataName.c_str(), xsecResult.c_str(),
239 hXSec1D->SetName(name);
241 sprintf(name,
"%s_%s_%s_%s",
"mc", dataName.c_str(), xsecResult.c_str(),
242 "truevar_eff_corrected");
243 hTrueVar->SetName(name);
245 sprintf(name,
"%s_%s_%s_%s",
"mc", dataName.c_str(), xsecResult.c_str(),
252 if(xsecResult ==
"electron"){
253 TH3F* hXSec = (TH3F*)hNumerator->Clone(
"hXSec");
257 TH1F* hXSec1D = (TH1F*)hXSec->ProjectionY(
"hXSec1D");
258 TH1F* hTrueVar = (TH1F*)hXSec1D->Clone(
"clone");
260 double fluxtot = hFlux->Integral();
261 hXSec1D->Scale(1./fluxtot);
262 hXSec1D->Scale(1./numTargets);
263 hXSec1D->Scale(1,
"width");
264 hXSec1D->SetTitle(
"");
265 hXSec1D->GetXaxis()->SetTitle(
"Electron Energy, E_{e} (GeV)");
266 hXSec1D->GetYaxis()->SetTitle(
"#sigma (cm^{2}/nucleon GeV)");
267 hXSec1D->GetXaxis()->CenterTitle();
268 hXSec1D->GetYaxis()->CenterTitle();
271 sprintf(name,
"%s_%s_%s_%s",
"mc", dataName.c_str(), xsecResult.c_str(),
273 hXSec1D->SetName(name);
276 sprintf(name,
"%s_%s_%s_%s",
"mc", dataName.c_str(), xsecResult.c_str(),
277 "truevar_eff_corrected");
278 hTrueVar->SetName(name);
280 sprintf(name,
"%s_%s_%s_%s",
"mc", dataName.c_str(), xsecResult.c_str(),
287 if(xsecResult ==
"cos"){
288 TH3F* hXSec = (TH3F*)hNumerator->Clone(
"hXSec");
293 TH1F* hXSec1D = (TH1F*)hXSec->ProjectionX(
"hXSec1D");
294 TH1F* hTrueVar = (TH1F*)hXSec1D->Clone(
"clone");
297 double fluxtot = hFlux->Integral();
298 hXSec1D->Scale(1./fluxtot);
299 hXSec1D->Scale(1./numTargets);
300 hXSec1D->Scale(1,
"width");
301 hXSec1D->SetTitle(
"");
302 hXSec1D->GetXaxis()->SetTitle(
"cos #theta_{e}");
303 hXSec1D->GetYaxis()->SetTitle(
"#sigma (cm^{2}/nucleon cos #theta)");
304 hXSec1D->GetXaxis()->CenterTitle();
305 hXSec1D->GetYaxis()->CenterTitle();
308 sprintf(name,
"%s_%s_%s_%s",
"mc", dataName.c_str(), xsecResult.c_str(),
310 hXSec1D->SetName(name);
313 sprintf(name,
"%s_%s_%s_%s",
"mc", dataName.c_str(), xsecResult.c_str(),
314 "truevar_eff_corrected");
315 hTrueVar->SetName(name);
317 sprintf(name,
"%s_%s_%s_%s",
"mc", dataName.c_str(), xsecResult.c_str(),
void CalculateXSec(TH3F *hNumerator, TH1F *hFlux, TH3F *hEff, std::string dataName, std::string xsecResult, double numTargets)
void Plot2D(TH2F *hist, std::string outName, bool setLog=false)
TH1F * DoUnfolding(TH1F *hMeasured, TH2F *hResponse, int iter)
void PrintChiSq(TString str)
TH3F * GetEfficiency(TH3F *num, TH3F *denom)
std::string UniqueName()
Return a different string each time, for creating histograms.