AbsCexDriver.h
Go to the documentation of this file.
1 #ifndef ABSCEXDRIVER_hh
2 #define ABSCEXDRIVER_hh
3 
4 #include "ThinSliceDriver.h"
5 #include "TH2D.h"
6 #include "TFile.h"
7 #include "TSpline.h"
8 #include "TGraph2D.h"
9 #include "TGraph.h"
10 #include "TRandom3.h"
11 #include <map>
13 
14 namespace protoana {
15 class AbsCexDriver : public ThinSliceDriver {
16  public:
17  AbsCexDriver(const fhicl::ParameterSet & extra_options);
18  virtual ~AbsCexDriver();
19 
20  void FillMCEvents(
21  TTree * tree, std::vector<ThinSliceEvent> & events,
22  std::vector<ThinSliceEvent> & fake_data_events,
23  int & split_val, const bool & do_split) override;
24 
25  void BuildDataHists(
26  TTree * tree, ThinSliceDataSet & data_set, double & flux,
27  int split_val = 0) override;
28  void BuildFakeData(
29  TTree * tree,
30  std::map<int, std::vector<std::vector<ThinSliceSample>>> & samples,
31  const std::map<int, bool> & signal_sample_checks,
32  ThinSliceDataSet & data_set, double & flux,
33  std::map<int, std::vector<double>> & sample_scales,
34  std::vector<double> & beam_energy_bins,
35  int split_val = 0) override;
37  TTree * tree,
38  std::map<int, std::vector<std::vector<ThinSliceSample>>> & samples,
39  const std::map<int, bool> & signal_sample_checks,
40  ThinSliceDataSet & data_set, double & flux,
41  std::map<int, std::vector<double>> & sample_scales,
42  int split_val = 0);
44  TTree * tree,
45  std::map<int, std::vector<std::vector<ThinSliceSample>>> & samples,
46  const std::map<int, bool> & signal_sample_checks,
47  ThinSliceDataSet & data_set, double & flux,
48  std::map<int, std::vector<double>> & sample_scales,
49  int split_val = 0);
50  void FakeDataG4RW(
51  TTree * tree,
52  std::map<int, std::vector<std::vector<ThinSliceSample>>> & samples,
53  const std::map<int, bool> & signal_sample_checks,
54  ThinSliceDataSet & data_set, double & flux,
55  std::map<int, std::vector<double>> & sample_scales,
56  int split_val = 0);
57  void FakeDataG4RWGrid(
58  TTree * tree,
59  std::map<int, std::vector<std::vector<ThinSliceSample>>> & samples,
60  const std::map<int, bool> & signal_sample_checks,
61  ThinSliceDataSet & data_set, double & flux,
62  std::map<int, std::vector<double>> & sample_scales,
63  std::vector<double> & beam_energy_bins,
64  int split_val = 0);
65  void FakeDataEffVar(
66  TTree * tree,
67  std::map<int, std::vector<std::vector<ThinSliceSample>>> & samples,
68  const std::map<int, bool> & signal_sample_checks,
69  ThinSliceDataSet & data_set, double & flux,
70  std::map<int, std::vector<double>> & sample_scales,
71  int split_val = 0);
72 
73  void FakeDatadEdX(
74  TTree * tree,
75  std::map<int, std::vector<std::vector<ThinSliceSample>>> & samples,
76  const std::map<int, bool> & signal_sample_checks,
77  ThinSliceDataSet & data_set, double & flux,
78  std::map<int, std::vector<double>> & sample_scales,
79  int split_val = 0);
80 
81  void FakeDataPionAngle(
82  TTree * tree,
83  std::map<int, std::vector<std::vector<ThinSliceSample>>> & samples,
84  const std::map<int, bool> & signal_sample_checks,
85  ThinSliceDataSet & data_set, double & flux,
86  std::map<int, std::vector<double>> & sample_scales,
87  int split_val = 0);
88 
89  void FakeDataAngleVar(
90  TTree * tree,
91  std::map<int, std::vector<std::vector<ThinSliceSample>>> & samples,
92  const std::map<int, bool> & signal_sample_checks,
93  ThinSliceDataSet & data_set, double & flux,
94  std::map<int, std::vector<double>> & sample_scales,
95  int split_val = 0);
96  void FakeDataBeamWeight(
97  TTree * tree,
98  std::map<int, std::vector<std::vector<ThinSliceSample>>> & samples,
99  const std::map<int, bool> & signal_sample_checks,
100  ThinSliceDataSet & data_set, double & flux,
101  std::map<int, std::vector<double>> & sample_scales,
102  int split_val = 0);
103  void BuildMCSamples(
104  //TTree * tree,
105  const std::vector<ThinSliceEvent> & events,
106  std::map<int, std::vector<std::vector<ThinSliceSample>>> & samples,
107  const std::map<int, bool> & signal_sample_checks,
108  std::map<int, double> & nominal_fluxes,
109  std::map<int, std::vector<std::vector<double>>> & fluxes_by_sample,
110  std::vector<double> & beam_energy_bins) override;
111 
112  void RefillMCSamples(
113  //TTree * tree,
114  const std::vector<ThinSliceEvent> & events,
115  std::map<int, std::vector<std::vector<ThinSliceSample>>> & samples,
116  const std::map<int, bool> & signal_sample_checks,
117  std::vector<double> & beam_energy_bins,
118  const std::map<int, std::vector<double>> & signal_pars,
119  const std::map<int, double> & flux_pars,
120  const std::map<std::string, ThinSliceSystematic> & syst_pars,
121  bool fit_under_over, bool fill_incident = false) override;
122 
123  /*void BuildSystSamples(
124  TTree * tree,
125  std::map<int, std::vector<std::vector<ThinSliceSample>>> & samples,
126  const std::map<int, bool> & signal_sample_checks,
127  std::vector<double> & beam_energy_bins) override;*/
128 
129  void SetupSyst_G4RW(
130  const std::vector<ThinSliceEvent> & events,
131  std::map<int, std::vector<std::vector<ThinSliceSample>>> & samples,
132  const std::map<int, bool> & signal_sample_checks,
133  std::vector<double> & beam_energy_bins,
134  const std::map<std::string, ThinSliceSystematic> & pars,
135  TFile & output_file);
136 
137  void SetupSyst_dEdX_Cal(
138  const std::vector<ThinSliceEvent> & events,
139  std::map<int, std::vector<std::vector<ThinSliceSample>>> & samples,
140  const std::map<std::string, ThinSliceSystematic> & pars,
141  TFile & output_file);
143  const std::vector<ThinSliceEvent> & events,
144  std::map<int, std::vector<std::vector<ThinSliceSample>>> & samples,
145  const std::map<std::string, ThinSliceSystematic> & pars,
146  TFile & output_file);
147 
149  const std::vector<ThinSliceEvent> & events,
150  std::map<int, std::vector<std::vector<ThinSliceSample>>> & samples,
151  const std::map<std::string, ThinSliceSystematic> & pars,
152  TFile & output_file);
153 
154  std::pair<double, size_t> CalculateChi2(
155  std::map<int, std::vector<std::vector<ThinSliceSample>>> & samples,
156  ThinSliceDataSet & data_set) override;
157  void CompareSelections(
158  std::map<int, std::vector<std::vector<ThinSliceSample>>> & samples,
159  ThinSliceDataSet & data_set,
160  TFile & output_file,
161  std::vector<std::pair<int, int>> plot_style,
162  bool plot_rebinned,
163  bool post_fit, int nPars,
164  TDirectory * plot_dir) override;
165 
166  void GetCurrentHists(
167  std::map<int, std::vector<std::vector<ThinSliceSample>>> & samples,
168  ThinSliceDataSet & data_set,
169  std::map<int, std::vector<TH1*>> & throw_hists,
170  bool plot_rebinned) override;
171 
172  virtual void GetCurrentTruthHists(
173  std::map<int, std::vector<std::vector<ThinSliceSample>>> & samples,
174  std::map<int, std::vector<TH1*>> & hists,
175  std::map<int, std::vector<TH1*>> & inc_hists,
176  std::map<int, std::vector<TH1*>> & xsec_hists,
177  const std::vector<int> & incident_samples,
178  const std::map<int, std::vector<double>> & signal_bins) override;
179 
180  void PlotThrows(
181  ThinSliceDataSet & data_set, std::map<int, std::vector<TH1*>> & throw_hists,
182  std::map<int, std::vector<std::vector<ThinSliceSample>>> & samples,
183  size_t nThrows,
184  std::map<int, std::vector<TH1*>> & truth_throw_hists,
185  std::map<int, std::vector<TH1*>> & truth_inc_hists,
186  std::map<int, std::vector<TH1*>> & truth_xsec_hists,
187  std::map<int, TH1*> & best_fit_incs,
188  std::map<int, TH1*> & best_fit_xsecs,
189  std::map<int, TH1*> & nominal_incs,
190  std::map<int, TH1*> & nominal_xsecs,
191  TFile & output_file, bool plot_rebinned,
192  std::map<int, std::vector<double>> * sample_scales = 0x0) override;
193 
194  void SetupSysts(
195  const std::vector<ThinSliceEvent> & events,
196  std::map<int, std::vector<std::vector<ThinSliceSample>>> & samples,
197  const std::map<int, bool> & signal_sample_checks,
198  std::vector<double> & beam_energy_bins,
199  const std::map<std::string, ThinSliceSystematic> & pars,
200  TFile & output_file) override;
201 
202  /*void SetupSyst_BeamRes(
203  const std::vector<ThinSliceEvent> & events,
204  std::map<int, std::vector<std::vector<ThinSliceSample>>> & samples,
205  const std::map<std::string, ThinSliceSystematic> & pars,
206  TFile & output_file);*/
207  void SetupSyst_BeamShift(
208  const std::map<std::string, ThinSliceSystematic> & pars,
209  TFile & output_file);
211  const std::vector<ThinSliceEvent> & events,
212  std::map<int, std::vector<std::vector<ThinSliceSample>>> & samples,
213  const std::map<std::string, ThinSliceSystematic> & pars,
214  TFile & output_file);
215  /*void SetupSyst_BeamShift2D(
216  const std::map<std::string, ThinSliceSystematic> & pars,
217  TFile & output_file);*/
218  void SetupSyst_EffVar(
219  const std::vector<ThinSliceEvent> & events,
220  std::map<int, std::vector<std::vector<ThinSliceSample>>> & samples,
221  const std::map<std::string, ThinSliceSystematic> & pars,
222  TFile & output_file);
224  const std::map<std::string, ThinSliceSystematic> & pars);
226  const std::map<std::string, ThinSliceSystematic> & pars);
228  const std::map<std::string, ThinSliceSystematic> & pars);
230  const std::map<std::string, ThinSliceSystematic> & pars);
231 
232  /*double GetSystWeight_BeamRes(
233  const ThinSliceEvent & event,
234  const std::map<std::string, ThinSliceSystematic> & pars);*/
236  const ThinSliceEvent & event,
237  const std::map<std::string, ThinSliceSystematic> & pars);
238  /*double GetSystWeight_BeamShift2D(
239  const ThinSliceEvent & event,
240  const std::map<std::string, ThinSliceSystematic> & pars);*/
241  double GetSystWeight_G4RW(
242  const ThinSliceEvent & event,
243  const std::map<std::string, ThinSliceSystematic> & pars,
244  const ThinSliceSample & sample,
245  int selection_ID, double val);
246  double GetSystWeight_EffVar(
247  const ThinSliceEvent & event,
248  const std::map<std::string, ThinSliceSystematic> & pars);
249  double GetSystWeight_EDiv(
250  const ThinSliceEvent & event,
251  const std::map<std::string, ThinSliceSystematic> & pars);
252  double GetSystWeight_NoTrack(
253  const ThinSliceEvent & event,
254  const std::map<std::string, ThinSliceSystematic> & pars);
255  double GetSystWeight_BeamEffs(
256  const ThinSliceEvent & event,
257  const std::map<std::string, ThinSliceSystematic> & pars);
258  void WrapUpSysts(TFile & output_file) override;
260  const ThinSliceEvent & event,
261  double C_cal,
262  TProfile * prot_template);
263  double TruncatedMean(const std::vector<double> & dEdX);
264  private:
265  TH2D * fEndSlices;
266  TFile * fIn;
267  std::map<int, double> fMeans;
268 
269  double fEnergyFix;
271 
272  double fPitch;
273  double fZ0;
276  double fEndZCut;
277  double fTrajZStart;
280 
282 
283  //bool fStaticBeamResWidth = false;
284  //bool fStaticBeamResMean = false;
285  //double fBeamResMeanVal = 1.;
286  //double fBeamResWidthVal = 1.;
287  TTree /** fSystBeamResTree, */* fSystBeamShiftTree/*, * fSystBeamShift2DTree*/;
288  //double fSystBeamResWeight, fSystBeamResMeanOutput, fSystBeamResWidthOutput;
289  //double fSystBeamResWeightCap, fSystBeamResOutput;
291  bool /*fSetupSystBeamRes = false,*/ fSetupSystBeamShift = false,
292  /*fSetupSystBeamShift2D = false, */fSetupSystEffVar = false,
294  //double fSystBeamShift2DWeight, fSystBeamShift2DBVal, fSystBeamShift2DVal,
295  // fSystBeamShift2DR;
296  // double fEffVarSystVal;
297  TGraph2D * fSystBeamShiftMap; // , * fSystBeam2DMeans, * fSystBeam2DStdDevs;
299  //double fSystBeamShiftRatioLimitUp, fSystBeamShiftRatioLimitDown;
300  std::pair<double, double> fSystBeamShiftLimits;
302 
303  std::map<std::string, std::map<int, std::vector<TH1D*>>> fFullSelectionVars;
304  std::map<std::string, std::map<int, std::vector<TSpline3*>>> fFullSelectionSplines;
305 
306  std::map<std::string, std::map<int, std::vector<TH1D*>>> fG4RWSelectionVarsPlus;
307  std::map<std::string, std::map<int, std::vector<TH1D*>>> fG4RWSelectionVarsMinus;
308  std::vector<std::string> fActiveG4RWSysts;
309  TRandom3 fRNG = TRandom3(0);
310 
314 
315  std::vector<double> MakeTrueIncidentEnergies(
316  const std::vector<double> & true_beam_traj_Z,
317  const std::vector<double> & true_beam_traj_KE,
318  const std::vector<int> & true_beam_slices,
319  const std::vector<double> & true_beam_incidentEnergies);
320 
321 
322  int GetBeamBin(
323  const std::vector<double> & beam_energy_bins,
324  const double & true_beam_startP);
325 
327  std::vector<TSpline3*> fBeamShiftRatioSplines;
328 };
329 }
330 #endif
std::pair< double, double > fSystBeamShiftLimits
Definition: AbsCexDriver.h:300
double GetSystWeight_EffVar(const ThinSliceEvent &event, const std::map< std::string, ThinSliceSystematic > &pars)
void FakeDataG4RWGrid(TTree *tree, std::map< int, std::vector< std::vector< ThinSliceSample >>> &samples, const std::map< int, bool > &signal_sample_checks, ThinSliceDataSet &data_set, double &flux, std::map< int, std::vector< double >> &sample_scales, std::vector< double > &beam_energy_bins, int split_val=0)
void SetupSyst_BeamShiftSpline2(const std::vector< ThinSliceEvent > &events, std::map< int, std::vector< std::vector< ThinSliceSample >>> &samples, const std::map< std::string, ThinSliceSystematic > &pars, TFile &output_file)
void GetCurrentHists(std::map< int, std::vector< std::vector< ThinSliceSample >>> &samples, ThinSliceDataSet &data_set, std::map< int, std::vector< TH1 * >> &throw_hists, bool plot_rebinned) override
std::string string
Definition: nybbler.cc:12
void SetupSysts(const std::vector< ThinSliceEvent > &events, std::map< int, std::vector< std::vector< ThinSliceSample >>> &samples, const std::map< int, bool > &signal_sample_checks, std::vector< double > &beam_energy_bins, const std::map< std::string, ThinSliceSystematic > &pars, TFile &output_file) override
std::map< std::string, std::map< int, std::vector< TSpline3 * > > > fFullSelectionSplines
Definition: AbsCexDriver.h:304
double GetSystWeight_BeamEffs(const ThinSliceEvent &event, const std::map< std::string, ThinSliceSystematic > &pars)
struct vector vector
std::vector< double > MakeTrueIncidentEnergies(const std::vector< double > &true_beam_traj_Z, const std::vector< double > &true_beam_traj_KE, const std::vector< int > &true_beam_slices, const std::vector< double > &true_beam_incidentEnergies)
void FakeDataBeamWeight(TTree *tree, std::map< int, std::vector< std::vector< ThinSliceSample >>> &samples, const std::map< int, bool > &signal_sample_checks, ThinSliceDataSet &data_set, double &flux, std::map< int, std::vector< double >> &sample_scales, int split_val=0)
void FakeDatadEdX(TTree *tree, std::map< int, std::vector< std::vector< ThinSliceSample >>> &samples, const std::map< int, bool > &signal_sample_checks, ThinSliceDataSet &data_set, double &flux, std::map< int, std::vector< double >> &sample_scales, int split_val=0)
std::map< std::string, std::map< int, std::vector< TH1D * > > > fG4RWSelectionVarsMinus
Definition: AbsCexDriver.h:307
int GetBeamBin(const std::vector< double > &beam_energy_bins, const double &true_beam_startP)
std::map< int, double > fMeans
Definition: AbsCexDriver.h:267
void FakeDataAngleVar(TTree *tree, std::map< int, std::vector< std::vector< ThinSliceSample >>> &samples, const std::map< int, bool > &signal_sample_checks, ThinSliceDataSet &data_set, double &flux, std::map< int, std::vector< double >> &sample_scales, int split_val=0)
void FakeDataSampleScales(TTree *tree, std::map< int, std::vector< std::vector< ThinSliceSample >>> &samples, const std::map< int, bool > &signal_sample_checks, ThinSliceDataSet &data_set, double &flux, std::map< int, std::vector< double >> &sample_scales, int split_val=0)
int RecalculateSelectionID(const ThinSliceEvent &event, double C_cal, TProfile *prot_template)
void SetupSyst_BeamEffsWeight(const std::map< std::string, ThinSliceSystematic > &pars)
double GetSystWeight_BeamShift(const ThinSliceEvent &event, const std::map< std::string, ThinSliceSystematic > &pars)
void SetupSyst_BeamShiftSpline(const std::vector< ThinSliceEvent > &events, std::map< int, std::vector< std::vector< ThinSliceSample >>> &samples, const std::map< std::string, ThinSliceSystematic > &pars, TFile &output_file)
double GetSystWeight_EDiv(const ThinSliceEvent &event, const std::map< std::string, ThinSliceSystematic > &pars)
void WrapUpSysts(TFile &output_file) override
double dEdX(double KE, const simb::MCParticle *part)
void SetupSyst_dEdX_Cal(const std::vector< ThinSliceEvent > &events, std::map< int, std::vector< std::vector< ThinSliceSample >>> &samples, const std::map< std::string, ThinSliceSystematic > &pars, TFile &output_file)
void FakeDataPionAngle(TTree *tree, std::map< int, std::vector< std::vector< ThinSliceSample >>> &samples, const std::map< int, bool > &signal_sample_checks, ThinSliceDataSet &data_set, double &flux, std::map< int, std::vector< double >> &sample_scales, int split_val=0)
void SetupSyst_EffVarWeight(const std::map< std::string, ThinSliceSystematic > &pars)
void SetupSyst_EDivWeight(const std::map< std::string, ThinSliceSystematic > &pars)
std::vector< TSpline3 * > fBeamShiftRatioSplines
Definition: AbsCexDriver.h:327
void BuildDataHists(TTree *tree, ThinSliceDataSet &data_set, double &flux, int split_val=0) override
void FakeDataBinnedScales(TTree *tree, std::map< int, std::vector< std::vector< ThinSliceSample >>> &samples, const std::map< int, bool > &signal_sample_checks, ThinSliceDataSet &data_set, double &flux, std::map< int, std::vector< double >> &sample_scales, int split_val=0)
double GetSystWeight_NoTrack(const ThinSliceEvent &event, const std::map< std::string, ThinSliceSystematic > &pars)
virtual void GetCurrentTruthHists(std::map< int, std::vector< std::vector< ThinSliceSample >>> &samples, std::map< int, std::vector< TH1 * >> &hists, std::map< int, std::vector< TH1 * >> &inc_hists, std::map< int, std::vector< TH1 * >> &xsec_hists, const std::vector< int > &incident_samples, const std::map< int, std::vector< double >> &signal_bins) override
ProtoDUNETrackUtils fTrackUtil
Definition: AbsCexDriver.h:313
void PlotThrows(ThinSliceDataSet &data_set, std::map< int, std::vector< TH1 * >> &throw_hists, std::map< int, std::vector< std::vector< ThinSliceSample >>> &samples, size_t nThrows, std::map< int, std::vector< TH1 * >> &truth_throw_hists, std::map< int, std::vector< TH1 * >> &truth_inc_hists, std::map< int, std::vector< TH1 * >> &truth_xsec_hists, std::map< int, TH1 * > &best_fit_incs, std::map< int, TH1 * > &best_fit_xsecs, std::map< int, TH1 * > &nominal_incs, std::map< int, TH1 * > &nominal_xsecs, TFile &output_file, bool plot_rebinned, std::map< int, std::vector< double >> *sample_scales=0x0) override
double TruncatedMean(const std::vector< double > &dEdX)
void BuildMCSamples(const std::vector< ThinSliceEvent > &events, std::map< int, std::vector< std::vector< ThinSliceSample >>> &samples, const std::map< int, bool > &signal_sample_checks, std::map< int, double > &nominal_fluxes, std::map< int, std::vector< std::vector< double >>> &fluxes_by_sample, std::vector< double > &beam_energy_bins) override
double GetSystWeight_G4RW(const ThinSliceEvent &event, const std::map< std::string, ThinSliceSystematic > &pars, const ThinSliceSample &sample, int selection_ID, double val)
void SetupSyst_EffVar(const std::vector< ThinSliceEvent > &events, std::map< int, std::vector< std::vector< ThinSliceSample >>> &samples, const std::map< std::string, ThinSliceSystematic > &pars, TFile &output_file)
auto selection_ID
std::string fSliceMethod
Definition: AbsCexDriver.h:278
std::map< std::string, std::map< int, std::vector< TH1D * > > > fG4RWSelectionVarsPlus
Definition: AbsCexDriver.h:306
std::map< std::string, std::map< int, std::vector< TH1D * > > > fFullSelectionVars
Definition: AbsCexDriver.h:303
std::vector< std::string > fActiveG4RWSysts
Definition: AbsCexDriver.h:308
void SetupSyst_NoTrackWeight(const std::map< std::string, ThinSliceSystematic > &pars)
void FakeDataEffVar(TTree *tree, std::map< int, std::vector< std::vector< ThinSliceSample >>> &samples, const std::map< int, bool > &signal_sample_checks, ThinSliceDataSet &data_set, double &flux, std::map< int, std::vector< double >> &sample_scales, int split_val=0)
void SetupSyst_BeamShiftRatio(const std::vector< ThinSliceEvent > &events, std::map< int, std::vector< std::vector< ThinSliceSample >>> &samples, const std::map< std::string, ThinSliceSystematic > &pars, TFile &output_file)
void FillMCEvents(TTree *tree, std::vector< ThinSliceEvent > &events, std::vector< ThinSliceEvent > &fake_data_events, int &split_val, const bool &do_split) override
void FakeDataG4RW(TTree *tree, std::map< int, std::vector< std::vector< ThinSliceSample >>> &samples, const std::map< int, bool > &signal_sample_checks, ThinSliceDataSet &data_set, double &flux, std::map< int, std::vector< double >> &sample_scales, int split_val=0)
void CompareSelections(std::map< int, std::vector< std::vector< ThinSliceSample >>> &samples, ThinSliceDataSet &data_set, TFile &output_file, std::vector< std::pair< int, int >> plot_style, bool plot_rebinned, bool post_fit, int nPars, TDirectory *plot_dir) override
void SetupSyst_BeamShift(const std::map< std::string, ThinSliceSystematic > &pars, TFile &output_file)
void SetupSyst_G4RW(const std::vector< ThinSliceEvent > &events, std::map< int, std::vector< std::vector< ThinSliceSample >>> &samples, const std::map< int, bool > &signal_sample_checks, std::vector< double > &beam_energy_bins, const std::map< std::string, ThinSliceSystematic > &pars, TFile &output_file)
std::pair< double, size_t > CalculateChi2(std::map< int, std::vector< std::vector< ThinSliceSample >>> &samples, ThinSliceDataSet &data_set) override
void BuildFakeData(TTree *tree, std::map< int, std::vector< std::vector< ThinSliceSample >>> &samples, const std::map< int, bool > &signal_sample_checks, ThinSliceDataSet &data_set, double &flux, std::map< int, std::vector< double >> &sample_scales, std::vector< double > &beam_energy_bins, int split_val=0) override
TGraph2D * fSystBeamShiftMap
Definition: AbsCexDriver.h:297
void RefillMCSamples(const std::vector< ThinSliceEvent > &events, std::map< int, std::vector< std::vector< ThinSliceSample >>> &samples, const std::map< int, bool > &signal_sample_checks, std::vector< double > &beam_energy_bins, const std::map< int, std::vector< double >> &signal_pars, const std::map< int, double > &flux_pars, const std::map< std::string, ThinSliceSystematic > &syst_pars, bool fit_under_over, bool fill_incident=false) override
AbsCexDriver(const fhicl::ParameterSet &extra_options)
Event finding and building.