45 if(t[0] > 0 &&
abs(y - t[0]) > 0.05)
return 999.;
50 TMarker *
m =
new TMarker (x, y,29);
51 m->SetMarkerColor(color);
54 TLatex * ltx =
new TLatex(x,y,pstr.Data());
55 ltx->SetTextAngle(45);
56 ltx->SetTextColor(color);
62 double minX = gr->GetX()[0];
63 double maxX = gr->GetX()[gr->GetN()];
65 TF1 *
f1 =
new TF1(
"sign",
signFunc,minX,maxX,1);
66 f1->SetParameter(0,sigma);
67 double xmin = f1->GetMinimumX(lowx,highx);
79 std::vector <SPoint > sig_range;
81 if(grname.Contains(
"dmsq")){
82 sig_range = {{0.,2.3,2.6},
83 {1,2.3,2.4},{1,2.4,2.6},
84 {2,2.2,2.5},{2,2.5,2.7}};
86 if(grname.Contains(
"th23")){
87 sig_range = {{0.,0,0.5},{0,0.5,0.7},{0,0.5,0.5001},
88 {1,0.3,0.45},{1,0.45,0.5},{1,0.5,0.515},{1,0.515,0.55},{1,0.55,0.7},
89 {2,0.3,0.5},{2,0.5,0.7}};
91 if(grname.Contains(
"delta")){
92 sig_range = {{0.,1., 2.},
93 {1., 0, 0.5},{1.,0.5, 1.},{1.,1, 1.7},{1.,1.7, 2.},
94 {2., 0, 0.5},{2.,0.5, 1.},{2.,1, 1.3},{2.,1.5, 2.},
95 {3., 0, 0.5}, {3,0.5,1.5}, {3,1.7,2.}};
99 for (
auto &
sr:sig_range){
100 if(
sr.sigma == 1 ) color =
kGreen + 1;
101 if(
sr.sigma == 2 ) color = kAzure ;
108 void MakeMaps ( std::vector <const IFitVar*> profvars,
109 std::map<const IFitVar*, TGraph*> &profMap,
110 std::vector <const ISyst* >
systs,
111 std::map<const ISyst*, TGraph*> &systMap)
115 profMap.insert(std::pair<const IFitVar*, TGraph*> (
var,
new TGraph()));
116 for (
const ISyst* syst : systs)
117 systMap.insert(std::pair<const ISyst*, TGraph*> (syst,
new TGraph()));
122 std::vector <const IFitVar*> profvars,
123 std::vector <TString > profnames,
124 std::map<const IFitVar*, TGraph*> &profMap,
125 std::vector <const ISyst* >
systs,
126 std::map<const ISyst*, TGraph*> &systMap)
128 TDirectory *
tmp = gDirectory;
130 for (
int i = 0;
i < (
int) profvars.size(); ++
i){
131 profMap[profvars[
i]]->Write((prefix +
"_" + profnames[
i]));
133 for (
const ISyst*
s : systs)
134 systMap[
s]->Write((prefix +
"_" +
s->ShortName()));
140 const double xmin = 0,
const double xmax = 2.){
143 c1->SetLeftMargin(0.14);
144 c1->SetBottomMargin(0.15);
146 if(slicename.Contains(
"delta")) {
147 title =
";delta;Significance (#sqrt{#Delta#chi^{2}})";
149 if(slicename.Contains(
"th23")) {
150 title =
";sin^{2}#theta_{23};Significance (#sqrt{#Delta#chi^{2}})";
152 if(slicename.Contains(
"dmsq")) {
153 title =
";|#Deltam^{2}_{32}| (10^{-3} eV^{2});Significance (#sqrt{#Delta#chi^{2}})";
155 auto axes =
new TH2F(
"",title, 100,
xmin,
xmax, 100, 0, ymax);
156 if(slicename.Contains(
"fccorr"))
axes->GetYaxis()->SetTitle(
"Significance (#sigma)");
163 axes->GetXaxis()->SetTitleOffset(0.8);
164 axes->GetYaxis()->SetTitleOffset(0.75);
172 if(isDelta) leg =
new TLegend(0.7, 0.6, 0.89,0.89);
173 else leg =
new TLegend(0.7, 0.2, 0.89, 0.49);
175 leg->SetFillStyle(0);
177 leg->AddEntry(gr.first,gr.second,
"l");
187 ltx->SetTextAlign(11);
195 g->GetPoint(g->GetN()-1,
x,
y);
196 g->SetPoint(0, x-2, y);
197 g->GetPoint(1, x, y);
198 g->SetPoint(g->GetN(), x+2,
y);
200 std::cout <<
"\n Added cyclic points " << 0 <<
" " << g->GetX()[0]<<
" " << g->GetY()[0]
201 <<
", " << g->GetN() << x+2 << y <<
"\n\n";
207 TGraph*
g =
new TGraph;
208 g->SetPoint(0, 0, 0);
209 for(
int i = 1;
i <= h->GetNbinsX(); ++
i)
210 g->SetPoint(
i, h->GetXaxis()->GetBinCenter(
i), h->GetBinContent(
i));
212 g->SetLineColor(h->GetLineColor());
220 int nbins = 80,
double minX = 0,
double maxX = 2,
231 bool useRoot =
false,
234 int nbins = gr0->GetN();
235 double minX = gr0->GetX()[0];
236 double maxX = gr0->GetX()[nbins-1];
238 minX = minX - (gr0->GetX()[1] - gr0->GetX()[0])/2;
239 maxX = maxX + (gr0->GetX()[1] - gr0->GetX()[0])/2;
242 if(isDelta && !useRoot){
247 std::cout <<
"Smooth " << nbins <<
" nbins " << minX <<
", " << maxX <<
"\n";
252 double val = gr0->Eval(hist->GetBinCenter(
i+1));
253 hist->SetBinContent(
i + 1, val * val);
255 if(useRoot) hist->Smooth(2);
261 hist->SetBinContent(
i,
sqrt(hist->GetBinContent(
i)));
264 else return new TGraph(hist);
268 bool fourierFit,
bool useRoot =
false,
bool fccol=
false)
270 bool th23plot = fcFileName.Contains(
"th23");
271 bool dmsqplot = fcFileName.Contains(
"dmsq");
272 TString hiername = fcFileName.Contains(
"NH")?
"NH":
"IH";
276 if (th23plot) {minX = 0.3; maxX = 0.7;}
278 minX = hiername==
"NH" ? 2
e-3 : -3
e-3;
279 maxX = hiername==
"NH" ? 3
e-3 : -2
e-3;
283 auto n= sqrtslice->GetN();
284 auto sliceXH =
new TGraph(
n);
285 for (
int i = 0;
i <
n;
i++ ){
286 sliceXH->SetPoint(
i,sqrtslice->GetX()[
i],
util::sqr(sqrtslice->GetY()[
i]));
295 TGraph* sigXH =
new TGraph;
296 TGraph* pcXH =
new TGraph;
298 for(
int i = 0;
i <
n; ++
i){
299 const double delta = sliceXH->GetX()[
i];
300 const double upXH = sliceXH->GetY()[
i];
303 if((!fcFileName.Contains(
"delta") && upXH > 11)){
304 sigXH->SetPoint(sigXH->GetN(),
delta,
sqrt(upXH));
321 bool createFile=
false,
322 bool corrSysts =
false,
324 bool th23slice =
false,
325 bool octantSlice =
true,
326 bool dmsqSlice =
false,
328 bool fourierFit =
false)
330 bool nueOnly =
options.Contains(
"nueOnly");
331 bool numuOnly =
options.Contains(
"numuOnly");
332 bool joint =
options.Contains(
"joint");
333 assert (nueOnly || numuOnly || joint);
335 bool fakeNHLO =
options.Contains(
"fakeNHLO");
336 bool fakeNHUO =
options.Contains(
"fakeNHUO");
337 bool fake2017 =
options.Contains(
"fake2017");
338 bool realData =
options.Contains(
"realData");
342 if(corrSysts) suffix+=
"_systs";
343 else suffix+=
"_stats";
345 if(th23slice) suffix+=
"_th23";
346 if(dmsqSlice) suffix+=
"_dmsq";
347 if(!octantSlice)suffix+=
"_noOct";
349 TString
outdir =
"/nova/ana/nu_e_ana/Ana2017/Results/slices/";
351 TString
outfilename (outdir +
"hist_slices_2017_" + suffix);
352 TString outFCfilename (outdir +
"slices_FCInput_2017_" + suffix);
353 if(joint && corrSysts && !th23slice && ! dmsqSlice)
354 outFCfilename = outdir +
"slices_FCInput_2017_" +
decomp;
357 std::vector<double> seeds;
361 std::vector <th23helper> th23seeds;
378 std::vector <const IPrediction * > preds;
379 std::vector <std::pair <TH1D*, double > >
cosmics;
380 std::vector <Spectrum * >
data;
381 std::vector <const IExperiment * > expts;
384 if(fakeNHLO)
SetFakeCalc(calc_fake, 0.404, 2.7
e-3, 1.48);
385 else if(fakeNHUO)
SetFakeCalc(calc_fake, 0.623, 2.7
e-3, 0.74);
386 else if(fake2017)
SetFakeCalc(calc_fake, 0.56, 2.43
e-3, 1.21);
387 else if(!realData) {
std::cerr <<
"need setting for data\n";
exit(1);}
398 preds.insert(preds.end(),numu_preds.begin(), numu_preds.end());
400 cosmics.insert(cosmics.end(),numu_cosmics.begin(), numu_cosmics.end());
409 data.insert(data.end(),numu_data.begin(), numu_data.end());
412 for(
int i = 0;
i < (
int) preds.size(); ++
i){
414 if(realData) thisdata = data[
i];
416 cosmics[i].first,cosmics[i].
second));
424 std::cout <<
"Adding WorldReactorConstraint2017\n";
427 std::cout <<
"Adding Dmsq32ConstraintPDG2017\n";
430 std::cout <<
"Creating Multiexperiment with a total of " 431 << expts.size() <<
" experiments\n\n" <<
std::endl;
437 std::cout <<
"Systematics for the fit:\n";
440 std::cout <<
"\n\nSystematic correlations...\n";
441 if(!nueOnly && ! numuOnly && corrSysts){
444 for(
int i =0;
i < nnumu; ++
i) exptThis->SetSystCorrelations(
i+1, notfornumu);
457 std::vector <SystShifts> seedShifts = {};
459 for (
double systshift:{+0.5,-0.5}){
461 seedShifts.push_back(tempShifts);
466 double minchi23 = 1E20;
468 for (
auto & thseed: th23seeds){
469 for(
int hie:{-1, 1}){
471 std::cout <<
"\n\nFinding best fit " << (hie > 0 ?
"NH " :
"IH ")
472 << thseed.label <<
", " 484 auto thisminchi = fit23.
Fit(calc, auxShifts,
487 { thseed.var, thseed.seeds },
490 minchi23=
min(minchi23, thisminchi);
495 TString
str =
"Best fit " ;
496 for (
auto &
v:fitvars){
500 shifts->SetTitle(str);
501 gPad->Print(outdir +
"debug_slice_shifts_bestfit_" + suffix +
502 (hie>0?
"NH":
"IH") + thseed.label +
".pdf");
512 TFile *
outfile =
new TFile(outfilename+
".root",
"recreate");
513 TFile * outFCfile =
new TFile(outFCfilename+
".root",
"recreate");
518 v.Write(
"overall_minchi");
524 for(
int hie: {-1, +1}){
529 std::cout <<
"Starting profile " << (hie>0?
"NH ":
"IH") <<
"\n\n";
535 std::vector <const IFitVar * > profvars;
536 std::vector <TString> profvarnames;
537 std::map <const IFitVar *, std::vector <double> >profseeds;
541 for(
auto const & thseed:th23seeds){
543 const IFitVar* kCurTheta23 = thseed.var;
545 if(!th23slice && !dmsqSlice){
550 profdef.profvarnames = {
"DmSq32",
"SinSq2Theta13",
"SinSqTheta23"};
551 profdef.profseeds = {{kCurTheta23, thseed.seeds}};
552 profdef.shortname=
"delta";
557 profdef.minX = (nueOnly ? 0:0.3);
558 profdef.maxX = (nueOnly ? 1:0.7);
560 profdef.profvarnames = {
"DmSq32",
"SinSq2Theta13",
"DeltaCPpi"};
562 profdef.shortname=
"th23";
567 profdef.minX = hie > 0 ? 2
e-3 : -3
e-3;
568 profdef.maxX = hie > 0 ? 3
e-3 : -2
e-3;
570 profdef.profvarnames = {
"SinSqTheta23",
"SinSq2Theta13",
"DeltaCPpi"};
571 profdef.profseeds = { {kCurTheta23, thseed.seeds},
573 profdef.shortname=
"dmsq";
576 std::map<const IFitVar*, TGraph*> profVarsMap;
577 std::map<const ISyst*, TGraph*> systMap;
580 std::cout <<
" Profile "<< thseed.label <<
"\n\n";
583 profdef.fitvar, steps, profdef.minX, profdef.maxX,
589 profVarsMap, systMap);
591 TString hieroctstr = (hie > 0 ?
"NH" :
"IH") + thseed.label;
594 slice->Write((TString )
"slice_" + profdef.shortname +
"_" + hieroctstr);
596 profdef.profvars, profdef.profvarnames, profVarsMap,
systs, systMap);
614 TFile *
infile =
new TFile (outfilename+
".root",
"read");
616 auto mins =* (
TVectorD*)infile->Get(
"overall_minchi");
617 double minchi23 = mins[0];
619 std::vector <TString> sliceNames = {};
620 if (!th23slice && ! dmsqSlice) sliceNames = {
"slice_delta_"};
621 if (th23slice) sliceNames = {
"slice_th23_"};
622 if (dmsqSlice) sliceNames = {
"slice_dmsq_"};
624 for(TString sliceName:sliceNames){
625 std::vector < std::pair <TGraph*, TString> >
graphs;
627 if(sliceName.Contains(
"delta")) {
628 for (TString hie:{
"NH",
"IH"}){
629 for(
auto const & thseed:th23seeds){
630 auto h = (TH1D*) infile ->
Get( sliceName + hie + thseed.label);
632 std::cerr <<
"Problem " << sliceName + hie + thseed.label <<
"\n";
641 for (TString hie:{
"NH",
"IH"}) {
642 for(
auto const & thseed:th23seeds){
643 auto h = (TH1D*) infile ->
Get( sliceName + hie + thseed.label);
644 if(!
h) {
std::cerr <<
"Problem " << sliceName + hie + thseed.label <<
"\n"; }
645 graphs.push_back({
new TGraph(
h),hie +
" " + thseed.label});
649 if(sliceName.Contains(
"th23")) {
651 (nueOnly ? 0 : 0.32), (nueOnly ? 1 : 0.72));
654 if(sliceName.Contains(
"dmsq")) {
660 if(!joint || !corrSysts || decomp !=
"combo")
663 TString fcFolder=
"/nova/ana/nu_e_ana/Ana2017/FC/";
664 for (
auto &gr:graphs) {
665 TString fcSliceN =
"FCCol_";
666 fcSliceN += gr.second ;
667 if(th23slice) fcSliceN +=
"_slice_ssth23";
668 else if(dmsqSlice) fcSliceN +=
"_slice_dmsq32";
669 else fcSliceN +=
"_slice_delta";
670 fcSliceN.ReplaceAll (
" LO",
"_LO");
671 fcSliceN.ReplaceAll (
" UO",
"_UO");
672 fcSliceN.ReplaceAll (
" ",
"");
673 bool useFourier = (fcSliceN.Contains(
"delta") &&
674 (fcSliceN.Contains(
"IH") )) ;
675 gr.first =
FCCorrectSlice(gr.first, fcFolder + fcSliceN +
".root",
676 fourierFit, !useFourier,
true);
681 for (
auto &gr:graphs) {
682 if(gr.second.Contains(
"IH")) gr.first->SetLineColor(
kPrimColorIH);
684 if(gr.second.Contains(
"UO")) gr.first->SetLineStyle(7);
685 gr.first->SetLineWidth(3);
687 for (
int i =0;
i < gr.first->GetN(); ++
i){
688 gr.first->SetPoint(
i,1000*
fabs(gr.first->GetX()[
i]),gr.first->GetY()[
i]);
691 gr.first->Draw(
"l same");
701 for(TString
ext: {
".pdf",
".root"}) {
702 gPad->Print(outdir +
"slice_" + suffix +
703 (fccorr?
"_fccorr":
"") +
704 (fourierFit?
"_smooth":
"") +
711 for (
auto &gr:graphs) {
716 gPad->Print(outdir +
"points_slice_" + suffix +
717 (fccorr?
"_fccorr":
"") +
718 (fourierFit?
"_smooth":
"") +
728 TFile * inFCfile =
new TFile(outFCfilename+
".root",
"read");
731 std::vector <TString> strprof = {
"DmSq32",
"SinSq2Theta13",
"SinSqTheta23"};
732 if(th23slice) strprof = {
"DmSq32",
"SinSq2Theta13",
"DeltaCPpi"};
733 if(dmsqSlice) strprof = {
"SinSqTheta23",
"SinSq2Theta13",
"DeltaCPpi"};
738 strprof.push_back(
s->ShortName());
741 for(
auto const &
str:strprof){
743 double miny=-1.5,
maxy=1.5;
744 if(
str==
"DeltaCPpi") {miny=0;
maxy=2;}
745 if(
str==
"DmSq32") {miny=2.2;
maxy=2.8;}
746 if(
str==
"SinSq2Theta13") {miny=0.080;
maxy=0.086;}
747 if(
str==
"SinSqTheta23") {miny=0.4;
maxy=0.6;}
749 auto axes =
new TH2F(
"",
";#delta_{CP}/#pi;" +
str, 100, 0, 2, 100, miny,
maxy);
750 if(dmsqSlice)
axes =
new TH2F(
"",
";|#Deltam^{2}_{32}| (10^{-3} eV^{2});" +
str, 100, 2.2, 2.8, 100, miny,
maxy);
751 if(th23slice)
axes =
new TH2F(
"",
";sin^{2}#theta_{23};" +
str, 100, 0.3, 0.7, 100, miny,
maxy);
754 for (TString hie:{
"NH",
"IH"}){
755 for(
auto const & thseed:th23seeds){
756 auto gr = (TGraph*) inFCfile->Get(hie + thseed.label +
"_" +
str);
758 std::cerr <<
"Problem " << hie + thseed.label +
"_" +
str <<
"\n";
762 for (
int i = 0;
i < (
int) gr->GetN(); ++
i){
763 gr->SetPoint(
i, gr->GetX()[
i], 1000*
fabs(gr->GetY()[
i]));
767 for (
int i = 0;
i < (
int) gr->GetN(); ++
i){
768 gr->SetPoint(
i, 1000*
fabs(gr->GetX()[
i]), gr->GetY()[
i]);
772 if(thseed.label.Contains(
"UO")) gr->SetLineStyle(7);
774 gr->SetMarkerColor(gr->GetLineColor());
779 gPad->Print(outdir +
"debug_slice_prof_" + suffix +
"_"+
str +
".pdf");
const Color_t kPrimColorIH
void DrawSliceCanvas(TString slicename, const double ymax, const double xmin=0, const double xmax=2.)
Cuts and Vars for the 2020 FD DiF Study.
std::map< std::string, double > xmax
void ResetOscCalcToDefault(osc::IOscCalcAdjustable *calc)
Reset calculator to default assumptions for all parameters.
TH1 * PlotSystShifts(const SystShifts &shifts, bool sortName)
fvar< T > fabs(const fvar< T > &x)
const FitDmSq32 kFitDmSq32
Simple record of shifts applied to systematic parameters.
const Dmsq32Constraint kDmsq32ConstraintPDG2017(2.45e-3, 0.05e-3, 2.52e-3, 0.05e-3)
void MakeMaps(std::vector< const IFitVar * > profvars, std::map< const IFitVar *, TGraph * > &profMap, std::vector< const ISyst * > systs, std::map< const ISyst *, TGraph * > &systMap)
void XAxisDeltaCPLabels(TH1 *axes, bool t2kunits)
Label the x-axis with fractions of pi.
const FitSinSqTheta23UpperOctant kFitSinSqTheta23UpperOctant
void SaveMaps(TDirectory *out, std::map< std::string, IDecomp * > decomps_nominal, std::map< std::string, std::map< std::string, std::map< int, IDecomp * > > > decomps_shifted, std::map< std::string, PredictionNoExtrap * > predsNE_nominal, std::map< std::string, std::map< std::string, std::map< int, PredictionNoExtrap * > > > predsNE_shifted, std::map< std::string, PredictionSterile * > predsSt_nominal, std::map< std::string, std::map< std::string, std::map< int, PredictionSterile * > > > predsSt_shifted)
Save all of the objects in the input maps to the out directory/file.
cout<< "Opened file "<< fin<< " ixs= "<< ixs<< endl;if(ixs==0) hhh=(TH1F *) fff-> Get("h1")
void CenterTitles(TH1 *histo)
static SystShifts Nominal()
osc::IOscCalcAdjustable * DefaultOscCalc()
Create a new calculator with default assumptions for all parameters.
const FCBin * GetBin(int x, int y) const
T sqr(T x)
More efficient square function than pow(x,2)
Encapsulate code to systematically shift a caf::SRProxy.
virtual void SetDmsq32(const T &dmsq32)=0
void joint_fit_2017_slices(std::string decomp="prop", bool createFile=false, bool corrSysts=false, TString options="joint", bool th23slice=false, bool octantSlice=true, bool dmsqSlice=false, bool fccorr=false, bool fourierFit=false)
double SignificanceForUpValue(double up) const
TGraph * FCCorrectSlice(TGraph *sqrtslice, TString fcFileName, bool fourierFit, bool useRoot=false, bool fccol=false)
const XML_Char const XML_Char * data
static std::unique_ptr< FCSurface > LoadFromFile(const std::string &fname)
double PValueToSigma(double p)
Compute the equivalent number of gaussian sigma for a p-value.
string outfilename
knobs that need extra care
void SmoothWithFourierFit(TH1 *hist, int nbins=80, double minX=0, double maxX=2, int fourierFitN=3)
const Color_t k3SigmaConfidenceColorNH
virtual std::unique_ptr< IFitSummary > Fit(osc::IOscCalcAdjustable *seed, SystShifts &bestSysts=junkShifts, const SeedList &seedPts=SeedList(), const std::vector< SystShifts > &systSeedPts={}, Verbosity verb=kVerbose) const
Master fitting method. Depends on FitHelper and FitHelperSeeded.
void DrawSignMarker(double x, double y, int color)
const ReactorExperiment * WorldReactorConstraint2017()
Reactor constraint from PDG 2017.
virtual T GetDmsq32() const
TLegend * SliceLegend(std::vector< std::pair< TGraph *, TString > > &graphs, bool isDelta)
const ConstrainedFitVarWithPrior fitDmSq32Scaled_UniformPrior & kFitDmSq32Scaled
void Add(const FCPoint &pt, std::string plot)
void FindSignPoint(TGraph *gr, double sigma, double lowx=1, double highx=2, int color=kMagenta)
TGraph * HistoToCyclicGraph(TH1 *h)
static float min(const float a, const float b, const float c)
Combine multiple component experiments.
const double kAna2017FullDetEquivPOT
const NOvARwgtSyst kMECq0ShapeSyst2017("MECq0Shape","MEC q_{0} shape", novarwgt::kMECq0ShapeSyst2017)
const FitSinSqTheta23LowerOctant kFitSinSqTheta23LowerOctant
const ConstrainedFitVarWithPrior fitSsqTh23_UniformPriorSsqTh23 & kFitSinSqTheta23
void HighlightSignPoints(TGraph *gr, TString grname)
Double_t signFunc(Double_t *x, Double_t *t)
And supporting functions:
assert(nhit_max >=nhit_nbins)
Interface definition for fittable variables.
std::vector< std::pair< const ISyst *, const ISyst * > > GetCorrelations(bool isNue, bool isFHC, bool ptExtrap)
void Format(TGraph *gr, int lcol, int lsty, int lwid, int mcol, int msty, double msiz)
const Float_t kBlessedLabelFontSize
const FitSinSq2Theta13 kFitSinSq2Theta13
void AddCyclicPoints(TGraph *g)
const Float_t kBlessedTitleFontSize
const FitVarWithPrior fitDeltaInPiUnits_UniformPriordCP & kFitDeltaInPiUnits
std::vector< const ISyst * > GetJointFitSystematicList(bool corrSysts, bool nueExclusive=false, bool numuExclusive=false, bool isFHC=true, bool isRHC=true, bool intersection=true, bool ptExtrap=true)
static std::unique_ptr< FCCollection > LoadFromFile(const std::string &wildcard)
std::string UniqueName()
Return a different string each time, for creating histograms.
Pseudo-experiments, binned to match a log-likelihood surface.
Compare a single data spectrum to the MC + cosmics expectation.
TGraph * SqrtProfile(const IExperiment *expt, osc::IOscCalcAdjustable *calc, const IFitVar *v, int nbinsx, double minx, double maxx, double minchi, std::vector< const IFitVar * > profVars, std::vector< const ISyst * > profSysts, const SeedList &seedPts, const std::vector< SystShifts > &systSeedPts, std::map< const IFitVar *, TGraph * > &profVarsMap, std::map< const ISyst *, TGraph * > &systsMap, MinuitFitter::FitOpts opts)
Forward to Profile but sqrt the result for a crude significance.
Perform MINUIT fits in one or two dimensions.