2 #include "TDirectory.h" 52 TLegend*
leg =
new TLegend(x1, y1, x2, y2);
53 leg->SetBorderSize(0);
54 leg->SetFillColor(kWhite);
58 leg->SetTextSize(textsize);
82 Color_t
color,
double minchi, std::vector<const ISyst*>
systs = {});
95 int nbinsA,
double minA,
double maxA,
97 int nbinsB,
double minB,
double maxB,
99 std::vector<const IFitVar*>
vars,
100 std::vector<const ISyst*>
systs = {});
107 TH1::AddDirectory(0);
114 std::string loadLocation = folder + filenm +
".root";
115 std::string saveLocation =
"plot_" + filenm +
"_shape_2D_lower.root";
116 std::string textLocation =
"count_" + filenm +
"_shape_2D_lower.txt";
118 std::vector<const ISyst*>
systs = getAllNusFDSysts();
121 Spectrum*
intime = LoadFromFile<Spectrum>(
"$NOVA_ANA/steriles/Nus17/fout_nus17_box_opening_restricted.root",
"spec_nus_vise_numi").
release();
123 TH1 *hSpectrum = intime->
ToTH1(intime->
POT());
125 std::cout <<
"Data spectrum: " << data_spec.POT()
127 << data_spec.ToTH1(intime->
POT())->GetSumOfWeights()
130 TFile *
cos =
new TFile(
"$NOVA_ANA/steriles/Nus17/nus17_cosmic_background.root",
"read");
131 TH1 *hcosmic = (TH1*)cos->Get(
"cosall");
135 << cosmic.
ToTH1(cosmic.
POT())->GetSumOfWeights()
143 TFile* rootL =
new TFile(loadLocation.c_str(),
"UPDATE");
144 TDirectory* tmpL = gDirectory;
145 TDirectory* loadDir = gDirectory;
147 loadDir->cd((loadLocation +
":/nus17_predI").c_str());
158 Spectrum prediction = pred.get()->Predict(calc3f);
169 TFile* rootF =
new TFile(saveLocation.c_str(),
"RECREATE");
178 MultiExperiment multi9s({&s2th23Constraint, &dmsq32Constraint, &expt9s});
195 const Color_t kStatsFitCol = kBlack;
196 const Color_t kRateCol = kAzure+2;
197 const Color_t kShapeCol = kBlack;
199 const Color_t kFitColor =
kRed;
270 special =
"34vs24_9e20_shape";
274 avals.nbins34, avals.min34, avals.max34,
276 avals.nbins24, avals.min24, avals.max24,
278 {&kFitSinSqTheta23Sterile,
279 &kFitDelta24InPiUnitsSterile},
290 const IFitVar* var, std::vector<const IFitVar*> profVars,
294 double minchi, std::vector<const ISyst*>
systs)
301 TH1*
h = systs.size() > 0 ?
Profile(expt, calc, var, nbins, min, max, -1, profVars, systs) :
302 Profile(expt, calc, var, nbins, min, max, -1, profVars);
307 h->SetLineColor(color);
310 h->SetName(fullname.c_str());
311 rootOut->WriteTObject(h);
317 std::string htitle =
"#theta_{"+indices+
"} (deg.)";
318 h->GetXaxis()->SetTitle(htitle.c_str());
321 TCanvas*
c =
new TCanvas(cname.c_str(), ctitle.c_str(), 600, 500);
322 h->GetXaxis()->SetRangeUser(min+0.25,max);
329 if(indices.compare(
"34") == 0){
331 leg =
MakeLegend(0.135, 0.35, 0.435, 0.50, 0.037);
333 if(indices.compare(
"24") == 0)
334 leg =
MakeLegend(0.600, 0.35, 0.900, 0.50, 0.037);
335 if(indices.compare(
"23") == 0)
336 leg =
MakeLegend(0.350, 0.35, 0.650, 0.50, 0.037);
339 leg->AddEntry(h,
"syst.",
"L");
341 leg->AddEntry(h,
"stat.",
"L");
348 rootOut->WriteTObject(c);
358 std::string ctitle =
"Theta" + indices +
" ChiSq1Dcomp";
359 TCanvas*
c =
new TCanvas(cname.c_str(), ctitle.c_str(), 600, 500);
360 stats->GetXaxis()->SetRangeUser(min+0.25,max);
361 systs->GetXaxis()->SetRangeUser(min+0.25,max);
363 systs->Draw(
"l same");
371 if(indices.compare(
"34") == 0)
372 leg =
MakeLegend(0.135, 0.35, 0.435, 0.50, 0.037);
373 if(indices.compare(
"24") == 0)
374 leg =
MakeLegend(0.600, 0.35, 0.900, 0.50, 0.037);
375 if(indices.compare(
"23") == 0)
376 leg =
MakeLegend(0.350, 0.35, 0.650, 0.50, 0.037);
377 else leg =
MakeLegend(0.135, 0.35, 0.435, 0.50, 0.037);
378 leg->AddEntry(stats,
"stat.",
"L");
379 leg->AddEntry(systs,
"syst.",
"L");
381 rootOut->WriteTObject(c);
391 int nbinsA,
double minA,
double maxA,
393 int nbinsB,
double minB,
double maxB,
395 std::vector<const IFitVar*>
vars,
396 std::vector<const ISyst*>
systs)
405 std::string ctitle =
"Surface for Theta" + indices;
406 std::string ctitlestat =
"Surface for Theta" + indices +
" statC";
407 std::string ctitlesyst =
"Surface for Theta" + indices +
" systS";
410 varA, nbinsA, minA, maxA,
411 varB, nbinsB, minB, maxB,
417 varA, nbinsA, minA, maxA,
418 varB, nbinsB, minB, maxB,
423 TH1* hSurfStat = surfStat.
ToTH2();
424 hSurfStat->SetName(hnamestat.c_str());
425 rootOut->WriteTObject(hSurfStat);
427 TH1* hSurfSyst = surfSyst.
ToTH2();
428 hSurfSyst->SetName(hnamesyst.c_str());
429 rootOut->WriteTObject(hSurfSyst);
431 TCanvas*
c =
new TCanvas(cname.c_str(), ctitle.c_str());
439 TLegend* legcomp =
MakeLegend(0.500, 0.62, 0.800, 0.82, 0.037);
440 TH1*
dummy =
new TH1F(
"",
"",1,0,1);
442 dummy->SetLineColor(kAzure+2);
443 dummy->SetLineStyle(kDashed);
444 dummy->SetLineWidth(2);
445 legcomp->AddEntry(dummy->Clone(),
"68% C.L. (stat.)",
"L");
446 dummy->SetLineColor(kAzure+2);
447 dummy->SetLineStyle(kSolid);
448 legcomp->AddEntry(dummy->Clone(),
"90% C.L. (stat.)",
"L");
449 dummy->SetLineColor(kBlack);
450 dummy->SetLineStyle(kDashed);
451 legcomp->AddEntry(dummy->Clone(),
"68% C.L. (syst.)",
"L");
452 dummy->SetLineColor(kBlack);
453 dummy->SetLineStyle(kSolid);
454 legcomp->AddEntry(dummy->Clone(),
"90% C.L. (syst.)",
"L");
458 rootOut->WriteTObject(c);
461 TCanvas* cStat =
new TCanvas(cnamestat.c_str(), ctitlestat.c_str());
467 TLegend* legStat =
MakeLegend(0.500, 0.62, 0.800, 0.82, 0.037);
469 dummy->SetLineColor(kAzure+2);
470 dummy->SetLineStyle(kDashed);
471 dummy->SetLineWidth(2);
473 legStat->AddEntry(dummy->Clone(),
"68% C.L. (stat.)",
"L");
474 dummy->SetLineColor(kAzure+2);
475 dummy->SetLineStyle(kSolid);
476 legStat->AddEntry(dummy->Clone(),
"90% C.L. (stat.)",
"L");
481 rootOut->WriteTObject(cStat);
484 TCanvas* cSyst =
new TCanvas(cnamesyst.c_str(), ctitlesyst.c_str());
490 TLegend* legSyst =
MakeLegend(0.500, 0.62, 0.800, 0.82, 0.037);
491 dummy->SetLineColor(kBlack);
492 dummy->SetLineStyle(kDashed);
493 dummy->SetLineWidth(2);
494 legSyst->AddEntry(dummy->Clone(),
"68% C.L. (syst.)",
"L");
495 dummy->SetLineColor(kBlack);
496 dummy->SetLineStyle(kSolid);
497 legSyst->AddEntry(dummy->Clone(),
"90% C.L. (syst.)",
"L");
501 rootOut->WriteTObject(cSyst);
508 TLatex*
tex =
new TLatex();
510 tex->SetTextFont(42);
511 tex->SetTextSize(0.037);
512 tex->SetTextAlign(11);
513 tex->DrawLatex(xpos, start,
"NOvA 8.85 #times 10^{20} POT-equiv.");
514 tex->DrawLatex(xpos, start - 1*step,
"#Deltam^{2}_{32} = 2.67#times10^{-3} eV^{2}");
515 tex->DrawLatex(xpos, start - 2*step,
"#theta_{13} = 8.5#circ, ^{}sin^{2}#theta_{23} = 0.404");
516 tex->DrawLatex(xpos, start - 3*step,
"#Deltam^{2}_{41} = 0.5 eV^{2}, ^{}#delta_{13} = 1.48#pi");
521 const double xtex = 0.76;
522 const double y68 = 0.28;
523 const double y90 = 0.55;
525 TLatex *
tex =
new TLatex();
527 tex->SetTextFont(42);
528 tex->SetTextSize(0.037);
529 tex->SetTextAlign(11);
530 tex->DrawLatex(xtex, y68,
"68% C.L.");
531 tex->DrawLatex(xtex, y90,
"90% C.L.");
536 TLine* line68 =
new TLine();
537 TLine* line90 =
new TLine();
539 TLine* line05 =
new TLine();
541 line68->SetLineStyle(kDashed);
542 line90->SetLineStyle(kDashed);
544 line68->SetLineWidth(2);
545 line90->SetLineWidth(2);
546 line05->SetLineWidth(2);
547 line68->DrawLine(xmin, 1, xmax, 1);
548 line90->DrawLine(xmin, 2.71, xmax, 2.71);
549 line05->DrawLine(xmin, 5, xmax, 5);
563 calc->
SetDm(3, 7.53
e-5 + 2.67
e-3);
void PlotText(const double xpos, const double start, const double step)
TCut intime("tave>=217.0 && tave<=227.8")
TH2 * Gaussian90Percent1D(const FrequentistSurface &s)
Up-value surface for 90% confidence in 1D in gaussian approximation.
Cuts and Vars for the 2020 FD DiF Study.
void SetNFlavors(int nflavors)
std::map< std::string, double > xmax
void CompareSlices(TH1 *stats, TH1 *systs, std::string angle, TDirectory *rootOut, double xmin, double xmax)
Float_t y1[n_points_granero]
TH1D * ToTH1(double exposure, Color_t col=kBlack, Style_t style=kSolid, EExposureType expotype=kPOT, EBinType bintype=kBinContent) const
Histogram made from this Spectrum, scaled to some exposure.
A simple Gaussian constraint on an arbitrary IFitVar.
Float_t x1[n_points_granero]
void SetDelta(int i, int j, double delta)
Adapt the PMNS_Sterile calculator to standard interface.
const FitDmSq32Sterile kFitDmSq32Sterile
int stats(TString inputFilePath, Int_t firstRun, Int_t lastRun, Float_t thresh, TString myDet)
TGraph * Profile(const IExperiment *expt, osc::IOscCalcAdjustable *calc, const IFitVar *v, int nbinsx, double minx, double maxx, double input_minchi, const std::vector< const IFitVar * > &profVars, const std::vector< const ISyst * > &profSysts, const SeedList &seedPts, const std::vector< SystShifts > &systSeedPts, std::map< const IFitVar *, TGraph * > &profVarsMap, std::map< const ISyst *, TGraph * > &profSystsMap, MinuitFitter::FitOpts opts)
scan in one variable, profiling over all others
void CenterTitles(TH1 *histo)
const FitTheta24InDegreesSterile kFitTheta24InDegreesSterile
Representation of a spectrum in any variable, with associated POT.
void PlotNus17PredSystsData()
Log-likelihood scan across two parameters.
osc::OscCalcSterile * DefaultSterileCalc(int nflavors)
Create a sterile calculator with default assumptions for all parameters.
const double kAna2017Livetime
Sum up livetimes from individual cosmic triggers.
void DrawContour(TH2 *fc, Style_t style, Color_t color, double minchi=-1)
void SigmaLines(double xmin, double xmax)
void Plot2DSlice(IExperiment *expt1, IExperiment *expt2, osc::OscCalcSterile *calc, const IFitVar *varA, int nbinsA, double minA, double maxA, const IFitVar *varB, int nbinsB, double minB, double maxB, TDirectory *rootOut, std::string angles, std::vector< const IFitVar * > vars, std::vector< const ISyst * > systs={})
void ResetAngles(osc::OscCalcSterile *calc)
void ResetSterileCalcToDefault(osc::OscCalcSterile *calc)
Reset calculator to default assumptions for all parameters.
static float min(const float a, const float b, const float c)
TH2 * ToTH2(double minchi=-1) const
Combine multiple component experiments.
void SetAngle(int i, int j, double th)
TH1 * Plot1DSlice(IExperiment *expt, osc::OscCalcSterile *calc, const IFitVar *var, std::vector< const IFitVar * > vars, int nbins, double min, double max, TDirectory *rootOut, std::string name, std::string special, Color_t color, double minchi, std::vector< const ISyst * > systs={})
static std::unique_ptr< PredictionInterp > LoadFrom(TDirectory *dir, const std::string &name)
void SetDm(int i, double dm)
const FitSinSqTheta23Sterile kFitSinSqTheta23Sterile
Base class defining interface for experiments.
const FitTheta34InDegreesSterile kFitTheta34InDegreesSterile
Interface definition for fittable variables.
TLegend * MakeLegend(double x1, double y1, double x2, double y2, double textsize=0.03)
T max(sqlite3 *const db, std::string const &table_name, std::string const &column_name)
double Livetime() const
Seconds. For informational purposes only. No calculations use this.
TH2 * Gaussian68Percent1D(const FrequentistSurface &s)
Up-value surface for 68% confidence in 1D in gaussian approximation.
Compare a single data spectrum to the MC + cosmics expectation.