Public Member Functions | Static Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
ana::SpectrumLoader Class Reference

Collaborates with Spectrum and OscillatableSpectrum to fill spectra from CAF files. More...

#include "/cvmfs/nova-development.opensciencegrid.org/novasoft/releases/N20-10-20/CAFAna/Core/SpectrumLoader.h"

Inheritance diagram for ana::SpectrumLoader:
ana::SpectrumLoaderBase ana::ASCIIMaker ana::CSVMaker ana::SpectrumLoaderNuTreeSpillCuts ana::TreeMaker CAFTreeMaker CAFTreeMaker DecTreeLoader

Public Member Functions

 SpectrumLoader (const std::string &wildcard)
 
 SpectrumLoader (const std::vector< std::string > &fnames)
 
 SpectrumLoader (SpectrumLoader &&)=default
 
SpectrumLoaderoperator= (SpectrumLoader &&)=default
 
virtual ~SpectrumLoader ()
 
virtual void Go () override
 Load all the registered spectra. More...
 
void SetSpillCut (const SpillCut &cut)
 
virtual void AddSpectrum (Spectrum &spect, const Var &var, const Cut &cut, const SystShifts &shift, const Var &wei=kUnweighted)
 For use by the Spectrum constructor. More...
 
virtual void AddSpectrum (Spectrum &spect, const MultiVar &var, const Cut &cut, const SystShifts &shift, const Var &wei=kUnweighted)
 For use by the Spectrum constructor. More...
 
virtual void AddSpectrum (Spectrum &spect, const NuTruthVar &var, const NuTruthCut &cut, const SystShifts &shift, const NuTruthVar &wei=kNuTruthUnweighted)
 For use by the Spectrum constructor. More...
 
virtual void AddReweightableSpectrum (ReweightableSpectrum &spect, const Var &xvar, const Var &yvar, const Cut &cut, const SystShifts &shift, const Var &wei)
 For use by the constructors of ReweightableSpectrum subclasses. More...
 
virtual void AddSpillHistogram (TH1 *h, const SpillVar &var, const SpillCut &cut, const SpillVar &wei=kSpillUnweighted)
 Uses include counting the total POT or spills in a run. More...
 
virtual bool Gone () const
 Indicate whether or not Go has been called. More...
 
double GetWeightedPOT ()
 

Static Public Member Functions

static SpectrumLoader FromSAMProject (const std::string &proj, int fileLimit=-1)
 Named constructor for SAM projects. More...
 

Protected Member Functions

 SpectrumLoader ()
 
 SpectrumLoader (const SpectrumLoader &)=delete
 
SpectrumLoaderoperator= (const SpectrumLoader &)=delete
 
void AccumulateExposures (const caf::SRSpillProxy *spill) override
 
virtual void HandleFile (TFile *f, Progress *prog=0)
 
virtual void HandleRecord (caf::SRProxy *sr)
 
IFileSourceWildcardOrSAMQuery (const std::string &str) const
 Figure out if str is a wildcard or SAM query and return a source. More...
 
int NFiles () const
 Forwards to fFileSource. More...
 
TFile * GetNextFile ()
 Forwards to fFileSource but also accumulates POT and livetime. More...
 
WeightApplierGetSinkSCW (const SystShifts &shift, const Cut &cut, const Var &wei)
 

Protected Attributes

std::string fWildcard
 
std::unique_ptr< IFileSourcefFileSource
 
bool fGone
 Has Go() been called? Can't add more histograms after that. More...
 
double fPOT
 Accumulated by calls to GetNextFile. More...
 
double fRunPOT
 Crude measure, not including spill cuts. More...
 
double fSinglePOT
 
double fBeamNue
 
double fSingleNue
 
double fWeightedPOT
 
std::set< IRecordSink * > fSpectrumSinks
 
std::unordered_map< std::tuple< int, int, int >, WeightApplier * > fSinksSCW
 
std::unordered_map< std::pair< int, int >, CutApplier * > fSinksSC
 
std::unordered_map< int, SystApplier * > fSinksS
 
RecordMultiSink fSink
 
ExposureSource fExposureSource
 
std::list< SpillHistDeffSpillHistDefs
 
std::list< NuHistDeffNuHistDefs
 
std::unique_ptr< SpillCutfSpillCut
 Cut applied to the spill branch for every event. More...
 

Detailed Description

Collaborates with Spectrum and OscillatableSpectrum to fill spectra from CAF files.

The outside user should just pass a filename, wildcard, SAM dataset name, or query to the constructor. Then construct all the spectra you need. They will register with this loader. Finally, calling Go will cause all the spectra to be filled at once. After this the loader may not be used again.

Definition at line 21 of file SpectrumLoader.h.

Constructor & Destructor Documentation

ana::SpectrumLoader::SpectrumLoader ( const std::string &  wildcard)

Definition at line 26 of file SpectrumLoader.cxx.

28  {
29  }
std::vector< std::string > wildcard(const std::string &wildcardString)
Definition: convert.C:9
SpectrumLoaderBase()
Component of other constructors.
ana::SpectrumLoader::SpectrumLoader ( const std::vector< std::string > &  fnames)

Definition at line 32 of file SpectrumLoader.cxx.

33  : SpectrumLoaderBase(fnames)
34  {
35  }
SpectrumLoaderBase()
Component of other constructors.
ana::SpectrumLoader::SpectrumLoader ( SpectrumLoader &&  )
default
ana::SpectrumLoader::~SpectrumLoader ( )
virtual

Definition at line 53 of file SpectrumLoader.cxx.

54  {
55  }
ana::SpectrumLoader::SpectrumLoader ( )
protected

Definition at line 38 of file SpectrumLoader.cxx.

39  {
40  }
ana::SpectrumLoader::SpectrumLoader ( const SpectrumLoader )
protecteddelete

Member Function Documentation

void ana::SpectrumLoader::AccumulateExposures ( const caf::SRSpillProxy spill)
overrideprotectedvirtual

Implements ana::SpectrumLoaderBase.

Reimplemented in ana::SpectrumLoaderNuTreeSpillCuts.

Definition at line 191 of file SpectrumLoader.cxx.

References ana::SpectrumLoaderBase::fExposureSource, and ana::ExposureSource::HandleSpill().

Referenced by ana::SpectrumLoaderNuTreeSpillCuts::AccumulateExposures().

192  {
194  }
void HandleSpill(const caf::SRSpillProxy *spill) override
void ana::SpectrumLoaderBase::AddReweightableSpectrum ( ReweightableSpectrum spect,
const Var xvar,
const Var yvar,
const Cut cut,
const SystShifts shift,
const Var wei 
)
virtualinherited

For use by the constructors of ReweightableSpectrum subclasses.

Reimplemented in ana::NullLoader.

Definition at line 201 of file SpectrumLoaderBase.cxx.

References ana::RecordMultiSink::AddSink(), ana::ExposureSource::AddSink(), om::cerr, allTimeWatchdog::endl, ana::SpectrumLoaderBase::fExposureSource, ana::SpectrumLoaderBase::fGone, ana::SpectrumLoaderBase::fSink, ana::SpectrumLoaderBase::fSpectrumSinks, and ana::SpectrumLoaderBase::GetSinkSCW().

Referenced by ana::FluxReweight::FluxReweight(), ana::NoReweight::NoReweight(), and ana::RecoReweight::RecoReweight().

207  {
208  if(fGone){
209  std::cerr << "Error: can't add Spectra after the call to Go()" << std::endl;
210  abort();
211  }
212 
213  ReweightableSpectrumSink* sink = new ReweightableSpectrumSink(xvar, yvar, &spect);
214  fSpectrumSinks.insert(sink);
215  GetSinkSCW(shift, cut, wei)->AddSink(sink);
216  fExposureSource.AddSink(cut, sink);
217  fSink.AddSink(sink);
218  }
bool fGone
Has Go() been called? Can&#39;t add more histograms after that.
OStream cerr
Definition: OStream.cxx:7
void AddSink(const Cut &cut, IExposureSink *s)
std::set< IRecordSink * > fSpectrumSinks
void AddSink(IRecordSink *s)
WeightApplier * GetSinkSCW(const SystShifts &shift, const Cut &cut, const Var &wei)
const Cut cut
Definition: exporter_fd.C:30
void ana::SpectrumLoaderBase::AddSpectrum ( Spectrum spect,
const Var var,
const Cut cut,
const SystShifts shift,
const Var wei = kUnweighted 
)
virtualinherited

For use by the Spectrum constructor.

Reimplemented in ana::NullLoader, and ana::SpectrumLoaderNuTreeSpillCuts.

Definition at line 154 of file SpectrumLoaderBase.cxx.

References ana::RecordMultiSink::AddSink(), ana::ExposureSource::AddSink(), om::cerr, allTimeWatchdog::endl, ana::SpectrumLoaderBase::fExposureSource, ana::SpectrumLoaderBase::fGone, ana::SpectrumLoaderBase::fSpectrumSinks, and ana::SpectrumLoaderBase::GetSinkSCW().

Referenced by ana::SpectrumLoaderNuTreeSpillCuts::AddSpectrum(), and ana::TrivialExtrap::TrivialExtrap().

159  {
160  if(fGone){
161  std::cerr << "Error: can't add Spectra after the call to Go()" << std::endl;
162  abort();
163  }
164 
165  SpectrumSink* sink = new SpectrumSink(var, &spect);
166  fSpectrumSinks.insert(sink);
167  GetSinkSCW(shift, cut, wei)->AddSink(sink);
168  fExposureSource.AddSink(cut, sink);
169  }
bool fGone
Has Go() been called? Can&#39;t add more histograms after that.
OStream cerr
Definition: OStream.cxx:7
void AddSink(const Cut &cut, IExposureSink *s)
std::set< IRecordSink * > fSpectrumSinks
void AddSink(IRecordSink *s)
WeightApplier * GetSinkSCW(const SystShifts &shift, const Cut &cut, const Var &wei)
const Cut cut
Definition: exporter_fd.C:30
void ana::SpectrumLoaderBase::AddSpectrum ( Spectrum spect,
const MultiVar var,
const Cut cut,
const SystShifts shift,
const Var wei = kUnweighted 
)
virtualinherited

For use by the Spectrum constructor.

Reimplemented in ana::NullLoader, and ana::SpectrumLoaderNuTreeSpillCuts.

Definition at line 172 of file SpectrumLoaderBase.cxx.

References ana::RecordMultiSink::AddSink(), ana::ExposureSource::AddSink(), om::cerr, allTimeWatchdog::endl, ana::SpectrumLoaderBase::fExposureSource, ana::SpectrumLoaderBase::fGone, ana::SpectrumLoaderBase::fSpectrumSinks, and ana::SpectrumLoaderBase::GetSinkSCW().

177  {
178  if(fGone){
179  std::cerr << "Error: can't add Spectra after the call to Go()" << std::endl;
180  abort();
181  }
182 
183  MultiVarSpectrumSink* sink = new MultiVarSpectrumSink(var, &spect);
184  fSpectrumSinks.insert(sink);
185  GetSinkSCW(shift, cut, wei)->AddSink(sink);
186  fExposureSource.AddSink(cut, sink);
187  }
bool fGone
Has Go() been called? Can&#39;t add more histograms after that.
OStream cerr
Definition: OStream.cxx:7
void AddSink(const Cut &cut, IExposureSink *s)
std::set< IRecordSink * > fSpectrumSinks
void AddSink(IRecordSink *s)
WeightApplier * GetSinkSCW(const SystShifts &shift, const Cut &cut, const Var &wei)
const Cut cut
Definition: exporter_fd.C:30
void ana::SpectrumLoaderBase::AddSpectrum ( Spectrum spect,
const NuTruthVar var,
const NuTruthCut cut,
const SystShifts shift,
const NuTruthVar wei = kNuTruthUnweighted 
)
virtualinherited

For use by the Spectrum constructor.

Reimplemented in ana::NullLoader, and ana::SpectrumLoaderNuTreeSpillCuts.

Definition at line 190 of file SpectrumLoaderBase.cxx.

References ana::SpectrumLoaderBase::fNuHistDefs.

195  {
196  // TODO - implement with the same source/sink deal as regular spectra
197  fNuHistDefs.emplace_back(spect, var, cut, shift, wei);
198  }
const Cut cut
Definition: exporter_fd.C:30
std::list< NuHistDef > fNuHistDefs
void ana::SpectrumLoaderBase::AddSpillHistogram ( TH1 *  h,
const SpillVar var,
const SpillCut cut,
const SpillVar wei = kSpillUnweighted 
)
virtualinherited
SpectrumLoader ana::SpectrumLoader::FromSAMProject ( const std::string &  proj,
int  fileLimit = -1 
)
static

Named constructor for SAM projects.

Definition at line 43 of file SpectrumLoader.cxx.

References ana::SpectrumLoaderBase::fFileSource, ana::SpectrumLoaderBase::fWildcard, proj, and runNovaSAM::ret.

Referenced by test_sam_project().

45  {
47  ret.fWildcard = "project "+proj;
48  ret.fFileSource = std::unique_ptr<IFileSource>(new SAMProjectSource(proj, fileLimit));
49  return ret;
50  }
fileLimit
Definition: ProjMan.py:109
Float_t proj
Definition: plot.C:35
TFile * ana::SpectrumLoaderBase::GetNextFile ( )
protectedinherited

Forwards to fFileSource but also accumulates POT and livetime.

Definition at line 237 of file SpectrumLoaderBase.cxx.

References ana::SpectrumLoaderBase::AccumulateExposures(), ana::assert(), caf::SRProxySystController::BeginTransaction(), om::cout, fillBadChanDBTables::det, allTimeWatchdog::endl, MakeMiniprodValidationCuts::f, ana::SpectrumLoaderBase::fBeamNue, ana::SpectrumLoaderBase::fFileSource, ana::SpectrumLoaderBase::fNuHistDefs, genie::utils::style::Format(), ana::SpectrumLoaderBase::fPOT, ana::SpectrumLoaderBase::fRunPOT, ana::SpectrumLoaderBase::fSingleNue, ana::SpectrumLoaderBase::fSinglePOT, ana::SpectrumLoaderBase::fSpillCut, ana::SpectrumLoaderBase::fSpillHistDefs, ana::SpectrumLoaderBase::fWildcard, hd, isFHC, make_mec_shifts_plots::isRHC, findDuplicateFiles::key, caf::kUNKNOWN, getGoodRuns4SAM::n, cacheDefinitionData::prog, caf::SRProxySystController::Rollback(), ana::Progress::SetProgress(), caf_analysis::spill, and febshutoff_auto::val.

Referenced by Go(), and ana::FileReducer::Go().

238  {
239  TFile* f = fFileSource->GetNextFile();
240  if(!f) return 0; // out of files
241 
242  if(f->IsZombie()){
243  std::cout << "Bad file (zombie): " << f->GetName() << std::endl;
244  abort();
245  }
246 
247  // Crude way to count POT, at a file level without referring to spill cuts
248  TH1* hPOT = (TH1*)f->Get("TotalPOT");
249 
250  if(!hPOT){
251  std::cout << "Bad file (no POT tree): " << f->GetName() << std::endl;
252  abort();
253  }
254 
255  fRunPOT += hPOT->Integral();
256 
257  TKey *key = f->FindKey("TotalSinglePOT");
258 
259  // Initialise and only fill these histos if they exist
260  // We know they exist for nue overlay files
261  TH1* hSinglePOT = 0;
262  TH1* hTotalTrueSingleNue = 0;
263  TH1* hTotalTrueNonswapNue = 0;
264  if(key != 0){
265  hSinglePOT = (TH1*)f->Get("TotalSinglePOT");
266  assert(hSinglePOT);
267  fSinglePOT = hSinglePOT->Integral();
268 
269  hTotalTrueNonswapNue = (TH1*)f->Get("TotalTrueNonswapNue");
270  assert(hTotalTrueNonswapNue);
271  fBeamNue = hTotalTrueNonswapNue->Integral();
272 
273  hTotalTrueSingleNue = (TH1*)f->Get("TotalTrueSingleNue");
274  assert(hTotalTrueSingleNue);
275  fSingleNue = hTotalTrueSingleNue->Integral();
276  }
277  else{
278  delete hSinglePOT;
279  delete hTotalTrueSingleNue;
280  delete hTotalTrueNonswapNue;
281  }
282 
283  // Test for flat (trees are inside a directory) or nested (tree is at top
284  // level) cases.
285  TDirectory* spillDir = 0;
286  TTree* spillTree = 0;
287 
288  TObject* obj = f->Get("spillTree");
289  assert(obj); // Must exist in one form or the other
290 
291  // It might seem like you could use GetObject() to do the type-checking
292  // directly, but that method seems to have a memory leak in the case that
293  // the types don't match.
294  if(obj->ClassName() == std::string("TTree")){
295  // nested case
296  spillTree = (TTree*)obj;
297  }
298  else{
299  // FlatCAF case
300  spillDir = (TDirectory*)obj;
301  spillTree = (TTree*)spillDir->Get("spill");
302  assert(spillTree);
303  }
304 
305  // These aren't set in SRNeutrino, but we need them for flux systs, so
306  // learn them from SRSpill and copy them over.
307  //
308  // TODO TODO - remove this hack (and the equivalent in SpectrumLoader.cxx
309  // once they're available in the CAFs
310  bool isFHC = false, is0HC = false, isRHC = false;
312 
313  long n = 0;
314  caf::SRSpillProxy spill(spillDir, spillTree, "spill", n, 0);
315 
316  // FloatingExceptionOnNaN fpnan;
317 
318  // With multiple files exposure counting alternates with histogram filling,
319  // but with one file they deserve to be reported as two separate steps.
320  Progress* prog = 0;
321  if(fFileSource->NFiles() == 1)
322  prog = new Progress(TString::Format("Counting exposure from 1 file matching '%s'", fWildcard.c_str()).Data());
323 
324  const int Nentries = spillTree->GetEntries();
325 
326  double totFilePOT = 0;
327 
328  for(n = 0; n < Nentries; ++n){
329  if(!spillDir) spillTree->LoadTree(n); // nested mode
330 
331  if(!fSpillCut || (*fSpillCut)(&spill)){
333 
334  totFilePOT += spill.spillpot;
335 
336  // Only learn from good spills (bad spill could have bad beam?), and
337  // only once (efficiency)
338  if(!isFHC && !is0HC && !isRHC){
339  isFHC = spill.isFHC;
340  is0HC = spill.is0HC;
341  isRHC = spill.isRHC;
342  }
343  if (det == caf::kUNKNOWN)
344  det = spill.det;
345 
346  for(const SpillHistDef& hd: fSpillHistDefs){
347  // No cut, or cut passes
348  if(hd.cut(&spill)){
349  const double wei = hd.wei(&spill);
350  if(wei){
351  const double val = hd.var(&spill);
352  hd.h->Fill(val, wei);
353  }
354  } // end if(cut passes)
355  } // end for hd
356  }
357 
358  if(prog && n%100 == 0) prog->SetProgress(double(n)/Nentries);
359  } // end for n
360 
361  // The POT we want to use is either the singles POT in case of overlay files
362  // i.e the singlepot histo exists, or the standard after spill cuts
363  // Note: must be sure to run spill cuts for the overlays otherwise this gets
364  // reset to the fRunPOT
365  if(key != 0) fPOT += fSinglePOT;
366  else fPOT += totFilePOT;
367 
368  delete prog;
369  prog = 0;
370 
371  if(!fNuHistDefs.empty()){
372  // Test for flat (trees are inside a directory) or nested (tree is at top
373  // level) cases.
374 
375  TDirectory* nuDir = 0;
376  TTree* nuTree = 0;
377 
378  TObject* obj = f->Get("nuTree");
379  assert(obj); // Must exist in one form or the other
380 
381  // It might seem like you could use GetObject() to do the type-checking
382  // directly, but that method seems to have a memory leak in the case that
383  // the types don't match.
384  if(obj->ClassName() == std::string("TTree")){
385  // nested case
386  nuTree = (TTree*)obj;
387  }
388  else{
389  // FlatCAF case
390  nuDir = (TDirectory*)obj;
391  nuTree = (TTree*)spillDir->Get("nu");
392  assert(nuTree);
393  }
394 
395  const int NNuEntries = nuTree->GetEntries();
396 
397  long n = 0;
398  caf::SRNeutrinoProxy nu(nuDir, nuTree, nuDir ? "nu" : "mc.nu", n, 0);
399 
400  if(fFileSource->NFiles() == 1)
401  prog = new Progress(TString::Format("Filling from nuTree from 1 file matching '%s'", fWildcard.c_str()).Data());
402 
403 
404  for(n = 0; n < NNuEntries; ++n){
405  if(!nuDir) nuTree->LoadTree(n); // nested mode
406 
407  nu.isFHC = isFHC;
408  nu.is0HC = is0HC;
409  nu.isRHC = isRHC;
410  nu.det = det;
411 
412  for(const NuHistDef& hd: fNuHistDefs){
414 
415  double systWeight = 1;
416  // Can special-case nominal to not pay cost of Shift()
417  if(!hd.shift.IsNominal()){
418  hd.shift.Shift(&nu, systWeight);
419  }
420 
421  if(hd.cut(&nu)){
422  const double wei = hd.wei(&nu)*systWeight;
423  if(wei){
424  const double val = hd.var(&nu);
425  hd.spect.Fill(val, wei);
426  }
427  }
428 
429  // Return SRNeutrino to its unshifted form ready for the next
430  // histogram.
432  } // end for hd
433 
434  if(prog && n%10000 == 0) prog->SetProgress(double(n)/NNuEntries);
435  } // end for n
436 
437  for(const NuHistDef& hd: fNuHistDefs) hd.spect.fPOT += totFilePOT;
438 
439  delete prog;
440  } // end if NuHistDefs
441 
442  return f;
443  }
Unknown detector.
Definition: SREnums.h:9
Det_t
Which NOvA detector?
Definition: SREnums.h:7
double fRunPOT
Crude measure, not including spill cuts.
std::unique_ptr< SpillCut > fSpillCut
Cut applied to the spill branch for every event.
virtual void AccumulateExposures(const caf::SRSpillProxy *spill)=0
std::list< SpillHistDef > fSpillHistDefs
static bool isFHC
OStream cout
Definition: OStream.cxx:6
::xsd::cxx::tree::string< char, simple_type > string
Definition: Database.h:154
std::unique_ptr< IFileSource > fFileSource
assert(nhit_max >=nhit_nbins)
void Format(TGraph *gr, int lcol, int lsty, int lwid, int mcol, int msty, double msiz)
Definition: Style.cxx:154
double fPOT
Accumulated by calls to GetNextFile.
std::list< NuHistDef > fNuHistDefs
TH1F * hd
Definition: Xdiff_gwt.C:57
WeightApplier * ana::SpectrumLoaderBase::GetSinkSCW ( const SystShifts shift,
const Cut cut,
const Var wei 
)
protectedinherited

Definition at line 123 of file SpectrumLoaderBase.cxx.

References ana::RecordMultiSink::AddSink(), PandAna.Demos.tute_pid_validation::cid, ana::SpectrumLoaderBase::fSink, ana::SpectrumLoaderBase::fSinksS, ana::SpectrumLoaderBase::fSinksSC, ana::SpectrumLoaderBase::fSinksSCW, ana::SystShifts::ID(), ana::_Var< T >::ID(), and ana::_Cut< T >::ID().

Referenced by ana::SpectrumLoaderBase::AddReweightableSpectrum(), and ana::SpectrumLoaderBase::AddSpectrum().

126  {
127  const int sid = shift.ID();
128  const int cid = cut.ID();
129  const int wid = wei.ID();
130 
131  const std::pair<int, int> sc(sid, cid);
132  const std::tuple<int, int, int> scw(sid, cid, wid);
133 
134  if(fSinksS.find(sid) == fSinksS.end()){
135  SystApplier* sa = new SystApplier(shift);
136  fSinksS[sid] = sa;
137  fSink.AddSink(sa);
138  }
139  if(fSinksSC.find(sc) == fSinksSC.end()){
140  CutApplier* ca = new CutApplier(cut);
141  fSinksS[sid]->AddSink(ca);
142  fSinksSC[sc] = ca;
143  }
144  if(fSinksSCW.find(scw) == fSinksSCW.end()){
145  WeightApplier* wa = new WeightApplier(wei);
146  fSinksSC[sc]->AddSink(wa);
147  fSinksSCW[scw] = wa;
148  }
149 
150  return fSinksSCW[scw];
151  }
void AddSink(IRecordSink *s)
std::unordered_map< int, SystApplier * > fSinksS
std::unordered_map< std::pair< int, int >, CutApplier * > fSinksSC
const Cut cut
Definition: exporter_fd.C:30
std::unordered_map< std::tuple< int, int, int >, WeightApplier * > fSinksSCW
double ana::SpectrumLoaderBase::GetWeightedPOT ( )
inherited
void ana::SpectrumLoader::Go ( )
overridevirtual

Load all the registered spectra.

Implements ana::SpectrumLoaderBase.

Reimplemented in ana::CSVMaker.

Definition at line 66 of file SpectrumLoader.cxx.

References om::cerr, caf::SRBranchRegistry::clear(), om::cout, ana::Progress::Done(), allTimeWatchdog::endl, MakeMiniprodValidationCuts::f, ana::SpectrumLoaderBase::fExposureSource, ana::SpectrumLoaderBase::fGone, ana::ExposureSource::Finalize(), ana::SpectrumLoaderBase::fNuHistDefs, genie::utils::style::Format(), ana::SpectrumLoaderBase::fRunPOT, ana::SpectrumLoaderBase::fSink, ana::SpectrumLoaderBase::fSinksS, ana::SpectrumLoaderBase::fSinksSC, ana::SpectrumLoaderBase::fSinksSCW, ana::SpectrumLoaderBase::fSpectrumSinks, ana::SpectrumLoaderBase::fSpillHistDefs, ana::SpectrumLoaderBase::fWildcard, ana::SpectrumLoaderBase::GetNextFile(), HandleFile(), it, ana::SpectrumLoaderBase::NFiles(), ana::RecordMultiSink::NSinks(), cacheDefinitionData::prog, ana::ExposureSource::ReportExposures(), ana::Progress::SetProgress(), and sum.

Referenced by Ana2017_box_opening_macro(), Ana2017_sb_opening_macro(), Ana2018_box_opening_macro(), AnaResultsLoad(), angle(), bdtstudyspectrums(), BlessedPlotsLoad(), caf_nue_data_mc(), caf_numu_fd_validation_data(), caf_numu_fd_validation_MC(), caf_numu_fd_validation_MC_no_tau(), caf_numu_nd_cutflow(), caf_numu_nuenergy_vs_xy(), caf_numu_reco_minus_true(), caf_numu_sensitivity(), caf_numu_sensitivity_no_tau(), caf_numu_validation(), caf_numu_vars(), CalcCutVals(), ccpiinc_mc_studies(), compare_cos_numi(), Compare_Spectra(), ComparisonPlots_Data(), containmentstudy(), CosmicPred(), CreateAndFillSpectra(), CutFlow_Cosmic(), CutFlow_Data(), CutFlow_NearDet(), CutTableLoad(), CVNphoton(), CVNphotonSplit(), datamc_ND_numu_kinematics(), datamc_ND_numu_kinematics_FHC(), datamc_ND_numu_kinematics_FHC_pTBins(), datamc_ND_numu_kinematics_FHC_REW(), datamc_ND_numu_kinematics_FHC_REW_pTBins(), datamc_ND_numu_kinematics_REW(), datamc_ND_numu_kinematics_RHC(), datamc_ND_numu_kinematics_RHC_pTBins(), datamc_ND_numu_kinematics_RHC_REW(), datamc_ND_numu_kinematics_RHC_REW_pTBins(), dataprocess_numuccinc(), DataVtxDistributionLoad(), demo0(), demo1(), demo2(), demo2p5a(), demo3(), demo4(), demo5(), demo6(), demo_CPT(), demo_trivial_xsec_analysis(), drawIntensityEffect_2019(), drawLongTerm(), drawLongTerm_2019(), drawShortTerm_2019(), drawTimePlots(), drawVsPOT(), EnergyCont_macro(), energyResolution(), estimate_energy(), Evaluate_BDTMLP_Algs_Spectra(), event_reweighting_all_knobs(), ExampleCode(), ExtendedAxesLoad(), extract_resolution(), FD_Data_PosComp(), FDDataMCSystBandLoad(), FidOpt(), FidWShwCuts(), FillSpectra(), FitSystEffectsLoad(), genie_syst(), genie_syst_make(), get_cosmic_sample(), get_cosmic_spectra(), get_data_and_cosmic(), get_data_histogram(), get_fd_dataspectrum(), get_numi_data_histogram(), get_numu_data_histogram(), get_spectra_2dplots(), getBNBPlots(), getCrossSectionAnalysisSpectra(), getData(), GetHistsFD(), GetHistsND(), getSpectra_ForFitting(), getStabilitySpectra(), ana::CSVMaker::Go(), hadEFrac_nd_data_mc_systs(), hyperon_macro(), hyperon_nom_macro(), make_DataMCComp_numu(), make_decomp(), make_michel(), make_nue_ana2018_pot(), make_nue_ana2019_epoch7d_pot(), make_nue_ana2019_epoch8b_pot(), make_nue_ana2019_fhc_ub_pot(), make_nue_ana2019_rhc_ub_pot(), make_nue_thirdana_pot(), make_numu_thirdana_pot(), make_nus17_pot(), make_quantiles_histogram_2020(), make_rhcpred_2017(), make_rockpred_2017(), make_xsec_tuning_hists_mp5(), make_xsec_wgts_2018_hists(), MakeCosmics(), MakeNus17CosBkgd(), MakeNus17Prediction(), MakeNus18CosBkgd(), MakeNus18ExtrapPred(), MakeNus18SidebandPred(), MakeNusPrediction(), ana::MakeQuantileHistogram(), makeRealDataFluxes(), ana::MakeTextListFileHelper(), MakeUnoscPlots(), mcTruthPredictions(), MichelDecompTest(), modularextrap_demo_nue(), modularextrap_demo_numu(), mrbrem_get_initial_spectra(), mrbrem_get_reweighted_spectra(), MRDiFStudy_FHC_Step1(), MRDiFStudy_FHC_Step2(), MRDiFStudy_RHC_Step1(), MRDiFStudy_RHC_Step2(), mre_blessed(), mre_comp_split(), mre_example_test(), multiverse_reweighting(), nc_bkgd_by_interaction_mode(), ncpi0HistoGrid2(), ND_DataMC(), ND_DataMC_Comp_Systs(), NDDataMCSystBandLoad(), neutKEsyst(), neutronE_macro(), nue_decomp_scales(), nue_fd_mc_validation(), nue_michelDataMC(), nue_pid_effs(), nue_pid_effs_miniprod(), nue_pid_effs_paper_numu_neweff(), NuMu2019_BasicPIDPlots_ND(), NuMu2019_BasicPIDPlots_Spectrum(), NuMu2020_BasicPIDPlots_ND(), NuMu2020_BasicPIDPlots_Spectrum(), NuMu2020_TrimCAFs(), numu_cut_flow(), numu_sig_nonmax(), numu_validation_numuvars(), NumuCosmic(), nus17_box_opening(), nus17_fd_cut_tables(), nus17_fd_cut_tables2D(), nus17_fiducial_accounting(), nus18_box_opening(), nus_ana01_box_opening(), nus_ana01_sideband_box_opening(), pion_multiverse(), plot_kinematics_cafana(), PositionComparison(), ppfx_make_systs(), ppfx_smooth_weights_save(), PredictionInfo::PredictionInfo(), preselection_cutflow(), ReMId(), resolutionscript(), resolutionspectrums(), resolutionstudy(), rock(), runCheatDecomp(), runTwoSampleDecomp(), saveSpectraForUnf(), ShwZOpt(), sidebandfittest(), SideBandLoad(), signal_count(), specprod_numuccinc(), Syst(), SystematicComp(), SystsBirksLoad(), SystsCalibAbsLoad(), SystsCalibAbsLoad17(), SystsCalibAbsMethod17(), SystsCalibRelLoad(), SystsCalibRelLoad17(), SystsNoiseLoad(), SystsPPFXLoad17(), template_basic(), test_beam_errorband(), test_caf_validation_plots(), test_flux(), test_fluxhadr_prod_weights_Flux(), test_genie_systs(), test_genieweights(), test_multiverse_class(), test_nueextrapsyst(), test_nuwro(), test_predictionscalecomp(), test_sam(), test_sam_project(), test_systmultiverse(), timingPeak(), train_dectree_caf(), TrimCAFs(), twodstudyvtxcont(), validation_numu_nd(), and vertexstudy().

67  {
68  if(fGone){
69  std::cerr << "Error: can only call Go() once on a SpectrumLoader" << std::endl;
70  abort();
71  }
72  fGone = true;
73 
74  const int Nfiles = NFiles();
75 
76  Progress* prog = 0;
77 
79 
80  int fileIdx = -1;
81  while(TFile* f = GetNextFile()){
82  ++fileIdx;
83 
84  if(Nfiles >= 0 && !prog){
85  std::string sum = TString::Format("Filling %d spectra", fSink.NSinks()).Data();
86  if(Nfiles > 1){
87  if(!fSpillHistDefs.empty()){
88  sum += TString::Format(", %lu spillTree spectra", fSpillHistDefs.size()).Data();
89  }
90  if(!fNuHistDefs.empty()){
91  sum += TString::Format(", %lu nuTree spectra", fNuHistDefs.size()).Data();
92  }
93  }
94 
95  sum += TString::Format(" from %d files matching '%s'", Nfiles, fWildcard.c_str()).Data();
96  prog = new Progress(sum);
97  }
98 
99  HandleFile(f, Nfiles == 1 ? prog : 0);
100 
101  if(Nfiles > 1 && prog) prog->SetProgress((fileIdx+1.)/Nfiles);
102  } // end for fileIdx
103 
105 
106  if(prog){
107  prog->Done();
108  delete prog;
109  }
110 
111  std::cout << "Total POT before spill cuts: " << fRunPOT << std::endl;
113 
114  // Delete the tree of syst/cut/weight appliers
115  for(auto it: fSinksS) delete it.second;
116  for(auto it: fSinksSC) delete it.second;
117  for(auto it: fSinksSCW) delete it.second;
118  fSinksS.clear();
119  fSinksSC.clear();
120  fSinksSCW.clear();
121 
122  // Delete the actual spectrum sinks themselves
123  for(IRecordSink* s: fSpectrumSinks) delete s;
124  fSpectrumSinks.clear();
125  }
set< int >::iterator it
TFile * GetNextFile()
Forwards to fFileSource but also accumulates POT and livetime.
bool fGone
Has Go() been called? Can&#39;t add more histograms after that.
double fRunPOT
Crude measure, not including spill cuts.
int NSinks() const override
OStream cerr
Definition: OStream.cxx:7
std::set< IRecordSink * > fSpectrumSinks
const XML_Char * s
Definition: expat.h:262
std::unordered_map< int, SystApplier * > fSinksS
std::list< SpillHistDef > fSpillHistDefs
std::unordered_map< std::pair< int, int >, CutApplier * > fSinksSC
OStream cout
Definition: OStream.cxx:6
::xsd::cxx::tree::string< char, simple_type > string
Definition: Database.h:154
virtual void HandleFile(TFile *f, Progress *prog=0)
std::unordered_map< std::tuple< int, int, int >, WeightApplier * > fSinksSCW
void Format(TGraph *gr, int lcol, int lsty, int lwid, int mcol, int msty, double msiz)
Definition: Style.cxx:154
int NFiles() const
Forwards to fFileSource.
Double_t sum
Definition: plot.C:31
std::list< NuHistDef > fNuHistDefs
void Finalize()
POT/livetime is not filled into sinks until this is called!
void ReportExposures(double denom=0) const
virtual bool ana::SpectrumLoaderBase::Gone ( ) const
inlinevirtualinherited

Indicate whether or not Go has been called.

Definition at line 115 of file SpectrumLoaderBase.h.

References caf_analysis::spill, submit_syst::str, and wildcard().

Referenced by ana::TwoSampleDecomp::Decomp(), ana::CSVMaker::Go(), and ana::SpectrumHandler::Go().

115 {return fGone;}
bool fGone
Has Go() been called? Can&#39;t add more histograms after that.
void ana::SpectrumLoader::HandleFile ( TFile *  f,
Progress prog = 0 
)
protectedvirtual

Definition at line 128 of file SpectrumLoader.cxx.

References ana::assert(), dir, HandleRecord(), getGoodRuns4SAM::n, ana::Progress::SetProgress(), sr, and make_root_from_grid_output::tr.

Referenced by Go(), ProducingSA(), tree_maker_simple(), and useBDTG().

129  {
130  assert(!f->IsZombie());
131 
132  // Test for flat (trees are inside a directory) or nested (tree is at top
133  // level) cases.
134  TDirectory* dir = 0;
135  TTree* tr = 0;
136 
137  TObject* obj = f->Get("recTree");
138  assert(obj); // Must exist in one form or the other
139 
140  // It might seem like you could use GetObject() to do the type-checking
141  // directly, but that method seems to have a memory leak in the case that
142  // the types don't match.
143  if(obj->ClassName() == std::string("TTree")){
144  // nested case
145  tr = (TTree*)obj;
146  }
147  else{
148  // FlatCAF case
149  dir = (TDirectory*)obj;
150  tr = (TTree*)dir->Get("rec");
151  assert(tr);
152  }
153 
154  long n;
155  caf::SRProxy sr(dir, tr, "rec", n, 0);
156 
157  // FloatingExceptionOnNaN fpnan;
158 
159  const long Nentries = tr->GetEntries();
160  for(n = 0; n < Nentries; ++n){
161  if(!dir) tr->LoadTree(n); // nested mode
162 
163  HandleRecord(&sr);
164 
165  if(prog && n%100 == 0) prog->SetProgress(double(n)/Nentries);
166  } // end for n
167  }
Proxy for caf::StandardRecord.
Definition: SRProxy.h:2085
caf::StandardRecord * sr
::xsd::cxx::tree::string< char, simple_type > string
Definition: Database.h:154
TDirectory * dir
Definition: macro.C:5
virtual void HandleRecord(caf::SRProxy *sr)
assert(nhit_max >=nhit_nbins)
void ana::SpectrumLoader::HandleRecord ( caf::SRProxy sr)
protectedvirtual

Reimplemented in ana::TreeMaker, CAFTreeMaker, CAFTreeMaker, ana::ASCIIMaker, and ana::CSVMaker.

Definition at line 170 of file SpectrumLoader.cxx.

References caf::Proxy< caf::SRHeader >::det, ana::SpectrumLoaderBase::fSink, ana::SpectrumLoaderBase::fSpillCut, ana::RecordMultiSink::HandleRecord(), caf::Proxy< caf::StandardRecord >::hdr, caf::Proxy< caf::SRSpill >::is0HC, caf::Proxy< caf::SRSpill >::isFHC, caf::Proxy< caf::SRSpill >::isRHC, caf::Proxy< caf::StandardRecord >::mc, caf::Proxy< caf::SRTruthBranch >::nnu, caf::Proxy< caf::SRTruthBranch >::nu, and caf::Proxy< caf::StandardRecord >::spill.

Referenced by HandleFile().

171  {
172  // First up, check this spill passes the global quality cuts
173  if(fSpillCut && !(*fSpillCut)(&sr->spill)) return;
174 
175  // These aren't set in SRNeutrino, but we need them for flux systs, so copy
176  // them over from SRSpill.
177  //
178  // TODO TODO - remove this hack (and the equivalent in
179  // SpectrumLoaderBase.cxx) once they're available in the CAFs
180  if(sr->mc.nnu > 0){
181  sr->mc.nu[0].isFHC = bool(sr->spill.isFHC);
182  sr->mc.nu[0].is0HC = bool(sr->spill.is0HC);
183  sr->mc.nu[0].isRHC = bool(sr->spill.isRHC);
184  sr->mc.nu[0].det = caf::Det_t(sr->hdr.det);
185  }
186 
187  fSink.HandleRecord(sr, 1);
188  }
caf::Proxy< caf::SRSpill > spill
Definition: SRProxy.h:2102
Det_t
Which NOvA detector?
Definition: SREnums.h:7
caf::Proxy< bool > is0HC
Definition: SRProxy.h:1330
caf::Proxy< caf::SRHeader > hdr
Definition: SRProxy.h:2096
caf::Proxy< std::vector< caf::SRNeutrino > > nu
Definition: SRProxy.h:574
void HandleRecord(caf::SRProxy *sr, double wei) override
caf::Proxy< short int > nnu
Definition: SRProxy.h:573
std::unique_ptr< SpillCut > fSpillCut
Cut applied to the spill branch for every event.
caf::Proxy< bool > isFHC
Definition: SRProxy.h:1331
caf::Proxy< caf::SRTruthBranch > mc
Definition: SRProxy.h:2097
caf::Proxy< bool > isRHC
Definition: SRProxy.h:1332
caf::Proxy< caf::Det_t > det
Definition: SRProxy.h:231
int ana::SpectrumLoaderBase::NFiles ( ) const
protectedinherited

Forwards to fFileSource.

Definition at line 231 of file SpectrumLoaderBase.cxx.

References ana::SpectrumLoaderBase::fFileSource.

Referenced by Go(), and ana::FileReducer::Go().

232  {
233  return fFileSource->NFiles();
234  }
std::unique_ptr< IFileSource > fFileSource
SpectrumLoader& ana::SpectrumLoader::operator= ( SpectrumLoader &&  )
default
SpectrumLoader& ana::SpectrumLoader::operator= ( const SpectrumLoader )
protecteddelete
void ana::SpectrumLoaderBase::SetSpillCut ( const SpillCut cut)
inherited

Definition at line 64 of file SpectrumLoaderBase.cxx.

References ana::assert(), cut, ana::SpectrumLoaderBase::fGone, ana::SpectrumLoaderBase::fSpillCut, and ana::SpectrumLoaderBase::WildcardOrSAMQuery().

Referenced by Ana2017_box_opening_macro(), Ana2017_sb_opening_macro(), Ana2018_box_opening_macro(), AnaResultsLoad(), BlessedPlotsLoad(), caf_nue_data_mc(), caf_numu_fd_validation_data(), caf_numu_fd_validation_MC(), caf_numu_fd_validation_MC_no_tau(), caf_numu_nd_cutflow(), caf_numu_nuenergy_vs_xy(), caf_numu_reco_minus_true(), caf_numu_sensitivity(), caf_numu_sensitivity_no_tau(), caf_numu_validation(), caf_numu_vars(), CalcCutVals(), compare_cos_numi(), Compare_Spectra(), ComparisonPlots_Data(), CosmicPred(), CreateAndFillSpectra(), CutFlow_Cosmic(), CutFlow_Data(), CutFlow_NearDet(), CutTableLoad(), datamc_ND_numu_kinematics(), datamc_ND_numu_kinematics_FHC(), datamc_ND_numu_kinematics_FHC_pTBins(), datamc_ND_numu_kinematics_FHC_REW(), datamc_ND_numu_kinematics_FHC_REW_pTBins(), datamc_ND_numu_kinematics_REW(), datamc_ND_numu_kinematics_RHC(), datamc_ND_numu_kinematics_RHC_pTBins(), datamc_ND_numu_kinematics_RHC_REW(), datamc_ND_numu_kinematics_RHC_REW_pTBins(), dataprocess_numuccinc(), DataVtxDistributionLoad(), demo_trivial_xsec_analysis(), drawIntensityEffect_2019(), drawLongTerm(), drawLongTerm_2019(), drawShortTerm_2019(), drawTimePlots(), drawVsPOT(), EnergyCont_macro(), energyResolution(), estimate_energy(), Evaluate_BDTMLP_Algs_Spectra(), ExampleCode(), exporter_fd(), exporter_nd(), ExtendedAxesLoad(), FD_Data_PosComp(), FDDataMC(), FDDataMCSystBandLoad(), FillSpectra(), FitSystEffectsLoad(), genie_syst_make(), get_cosmic_sample(), get_cosmic_spectra(), get_data_and_cosmic(), get_data_histogram(), get_fd_dataspectrum(), get_numi_data_histogram(), get_numu_data_histogram(), get_spectra_2dplots(), getCrossSectionAnalysis_Spectra(), getCrossSectionAnalysis_Spectra_systematics(), getCrossSectionAnalysisSpectra(), getData(), getFitTemplates(), GetHistsFD(), GetHistsND(), getSpectra_ForFitting(), getStabilitySpectra(), hadEFrac_nd_data_mc_systs(), hyperon_nom_macro(), make_DataMCComp_numu(), make_decomp(), make_michel(), make_nue_ana2018_pot(), make_nue_ana2019_epoch7d_pot(), make_nue_ana2019_epoch8b_pot(), make_nue_ana2019_fhc_ub_pot(), make_nue_ana2019_rhc_ub_pot(), make_nue_thirdana_pot(), make_numu_thirdana_pot(), make_nus17_pot(), make_pi0_xcheck(), make_pid(), make_quantiles_histogram_2020(), make_RHC_WrongSign_Nue(), make_RHC_WrongSign_Numu_MC(), make_RHC_WrongSign_Numu_Pd4_6Data(), make_RHC_WrongSign_Numu_Pd7dData(), make_RHC_WrongSign_Numu_Pd8Data(), make_RHC_WrongSign_NumuQ1(), make_RHC_WrongSign_NumuQ2(), make_RHC_WrongSign_NumuQ3(), make_RHC_WrongSign_NumuQ4(), make_rhcpred_2017(), make_rockpred_2017(), make_xsec_tuning_hists_mp5(), make_xsec_wgts_2018_hists(), MakeCosmics(), MakeNus17CosBkgd(), MakeNus17Prediction(), MakeNus18CosBkgd(), MakeNus18ExtrapPred(), MakeNus18SidebandPred(), MakeNusPrediction(), ana::MakeQuantileHistogram(), ana::MakeTextListFileHelper(), MakeUnoscPlots(), mrbrem_get_initial_spectra(), mrbrem_get_reweighted_spectra(), MRDiFStudy_FHC_Step1(), MRDiFStudy_FHC_Step2(), MRDiFStudy_RHC_Step1(), MRDiFStudy_RHC_Step2(), mre_blessed(), mre_comp_split(), ND_DataMC(), ND_DataMC_Comp_Systs(), NDDataMC(), NDDataMCSystBandLoad(), neutKEsyst(), neutronE_macro(), nue_data_mc_validation(), nue_decomp_scales(), nue_fd_mc_validation(), nue_michelDataMC(), NuMu2019_BasicPIDPlots_ND(), NuMu2019_BasicPIDPlots_Spectrum(), NuMu2020_BasicPIDPlots_FD(), NuMu2020_BasicPIDPlots_ND(), NuMu2020_BasicPIDPlots_Spectrum(), NuMu2020_TrimCAFs(), numu_cut_flow(), numu_data_mc_validation(), numu_validation_numuvars(), NumuCosmic(), nus17_box_opening(), nus17_fd_cut_tables(), nus17_fd_cut_tables2D(), nus17_fiducial_accounting(), nus18_box_opening(), nus_ana01_box_opening(), nus_ana01_sideband_box_opening(), pi0_xcheck(), PositionComparison(), ppfx_make_systs(), ppfx_smooth_weights_save(), preselection_cutflow(), resolutionscript(), resolutionspectrums(), rock(), saveSpectraForUnf(), sidebandfittest(), SideBandLoad(), signal_count(), specprod_numuccinc(), specprod_systematics(), Syst(), SystematicComp(), SystsBirksLoad(), SystsCalibAbsLoad(), SystsCalibAbsLoad17(), SystsCalibAbsMethod17(), SystsCalibRelLoad(), SystsCalibRelLoad17(), SystsNoiseLoad(), SystsPPFXLoad17(), test_genieweights(), test_predictionscalecomp(), test_xsecanalysis(), TrimCAFs(), uncertainty1png(), uncertainty2png(), and validation_numu_nd().

65  {
66  assert(!fGone);
67  fSpillCut = std::make_unique<SpillCut>(cut);
68  }
bool fGone
Has Go() been called? Can&#39;t add more histograms after that.
std::unique_ptr< SpillCut > fSpillCut
Cut applied to the spill branch for every event.
const Cut cut
Definition: exporter_fd.C:30
assert(nhit_max >=nhit_nbins)
IFileSource * ana::SpectrumLoaderBase::WildcardOrSAMQuery ( const std::string &  str) const
protectedinherited

Figure out if str is a wildcard or SAM query and return a source.

Definition at line 72 of file SpectrumLoaderBase.cxx.

References e, cet::getenv(), MECModelEnuComparisons::i, ProjMan::ifdh, PandAna.Demos.demo_prong::limit, ana::FileListSource::NFiles(), PandAna.reco_validation.add_data::offset, runNovaSAM::ret, and update_sam_good_runs_metadata::stride.

Referenced by ProducingSA(), ana::SpectrumLoaderBase::SetSpillCut(), ana::SpectrumLoaderBase::SpectrumLoaderBase(), and useBDTG().

73  {
74  int stride = -1;
75  int offset = -1;
76  int limit = -1;
77  if(getenv("CAFANA_STRIDE")){
78  stride = atoi(getenv("CAFANA_STRIDE"));
79  if(stride > 1 && getenv("CAFANA_OFFSET")){
80  offset = atoi(getenv("CAFANA_OFFSET"));
81  }
82  }
83  if(getenv("CAFANA_LIMIT")){
84  limit = atoi(getenv("CAFANA_LIMIT"));
85  }
86 
87  // stat() blows up on strings with spaces
88  if(str.find(' ') == std::string::npos){
89  WildcardSource* ret = new WildcardSource(str, stride, offset, limit);
90  if(ret->NFiles() > 0) return ret;
91  delete ret;
92  }
93 
94  // Maybe this the name of a SAM project?
95  {
96  IFDHSilent silent; // the usual case is for this to fail
98 
99  // findProject always gives back an address just by gluing bits together.
100  // (a tad annoying, because it _does_ go and look for the project,
101  // and even would print its 'didn't-find-this-project' error out to stderr
102  // if not for the IFDHSilent, but without scraping its stderr
103  // there's no way to know whether the project is there or not--
104  // you still get the URL.)
105  // however, the WebAPI call looking for the /status will return a 404 if
106  // the project doesn't exist. (suggested by Robert I. in INC000000925362.)
107  try
108  {
109  ifdh_util_ns::WebAPI webapi(i.findProject(str, getenv("SAM_STATION")) + "/status");
110  return new SAMProjectSource(str);
111  }
112  catch (ifdh_util_ns::WebAPIException &e)
113  {
114  ;
115  }
116  }
117 
118  // Maybe this is a SAM dataset or query?
119  return new SAMQuerySource(str, stride, offset, limit);
120  }
std::string getenv(std::string const &name)
ifdh
Definition: ProjMan.py:8
Float_t e
Definition: plot.C:35

Member Data Documentation

double ana::SpectrumLoaderBase::fBeamNue
protectedinherited
ExposureSource ana::SpectrumLoaderBase::fExposureSource
protectedinherited
std::unique_ptr<IFileSource> ana::SpectrumLoaderBase::fFileSource
protectedinherited
bool ana::SpectrumLoaderBase::fGone
protectedinherited
std::list<NuHistDef> ana::SpectrumLoaderBase::fNuHistDefs
protectedinherited
double ana::SpectrumLoaderBase::fPOT
protectedinherited

Accumulated by calls to GetNextFile.

Definition at line 151 of file SpectrumLoaderBase.h.

Referenced by ana::SpectrumLoaderBase::GetNextFile(), and ana::SpectrumLoaderBase::GetWeightedPOT().

double ana::SpectrumLoaderBase::fRunPOT
protectedinherited

Crude measure, not including spill cuts.

Definition at line 152 of file SpectrumLoaderBase.h.

Referenced by ana::SpectrumLoaderBase::GetNextFile(), Go(), and DecTreeLoader::HandlePOT().

double ana::SpectrumLoaderBase::fSingleNue
protectedinherited
double ana::SpectrumLoaderBase::fSinglePOT
protectedinherited
RecordMultiSink ana::SpectrumLoaderBase::fSink
protectedinherited
std::unordered_map<int, SystApplier*> ana::SpectrumLoaderBase::fSinksS
protectedinherited

Definition at line 167 of file SpectrumLoaderBase.h.

Referenced by ana::SpectrumLoaderBase::GetSinkSCW(), and Go().

std::unordered_map<std::pair<int, int>, CutApplier*> ana::SpectrumLoaderBase::fSinksSC
protectedinherited

Definition at line 166 of file SpectrumLoaderBase.h.

Referenced by ana::SpectrumLoaderBase::GetSinkSCW(), and Go().

std::unordered_map<std::tuple<int, int, int>, WeightApplier*> ana::SpectrumLoaderBase::fSinksSCW
protectedinherited

Definition at line 165 of file SpectrumLoaderBase.h.

Referenced by ana::SpectrumLoaderBase::GetSinkSCW(), and Go().

std::set<IRecordSink*> ana::SpectrumLoaderBase::fSpectrumSinks
protectedinherited
std::unique_ptr<SpillCut> ana::SpectrumLoaderBase::fSpillCut
protectedinherited
std::list<SpillHistDef> ana::SpectrumLoaderBase::fSpillHistDefs
protectedinherited
double ana::SpectrumLoaderBase::fWeightedPOT
protectedinherited

Definition at line 157 of file SpectrumLoaderBase.h.

Referenced by ana::SpectrumLoaderBase::GetWeightedPOT().

std::string ana::SpectrumLoaderBase::fWildcard
protectedinherited

The documentation for this class was generated from the following files: