2 #ifndef RIVET_Analysis_HH 3 #define RIVET_Analysis_HH 5 #include "Rivet/Rivet.hh" 6 #include "Rivet/Analysis.fhh" 7 #include "Rivet/AnalysisInfo.hh" 8 #include "Rivet/Event.hh" 9 #include "Rivet/Projection.hh" 10 #include "Rivet/ProjectionApplier.hh" 11 #include "Rivet/ProjectionHandler.hh" 12 #include "Rivet/Constraints.hh" 13 #include "Rivet/AnalysisHandler.fhh" 14 #include "Rivet/AnalysisLoader.hh" 15 #include "Rivet/Tools/Logging.fhh" 16 #include "Rivet/RivetAIDA.fhh" 22 do { MSG_DEBUG("Vetoing event on line " << __LINE__ << " of " << __FILE__); return; } while(0) 26 #define DECLARE_RIVET_PLUGIN(clsname) Rivet::AnalysisBuilder<clsname> plugin_ ## clsname 109 assert(_info.get() != 0 &&
"No AnalysisInfo object :O");
118 virtual std::string
name()
const {
136 virtual std::vector<std::string>
authors()
const {
179 virtual std::string
year()
const {
204 virtual std::vector<std::string>
todos()
const {
249 assert(_info.get() != 0 &&
"No AnalysisInfo object :O");
257 return setRequiredBeams(std::vector<PdgIdPair>(1, make_pair(beam1, beam2)));
267 const ParticlePair&
beams()
const;
270 const PdgIdPair
beamIds()
const;
273 double sqrtS()
const;
285 bool isCompatible(PdgId beam1, PdgId beam2,
double e1,
double e2)
const;
288 bool isCompatible(
const PdgIdPair& beams,
const std::pair<double,double>& energies)
const;
305 void normalize(AIDA::IHistogram1D*& histo,
double norm=1.0,
bool includeoverflows=
true);
312 void scale(AIDA::IHistogram1D*& histo,
double scale);
321 void normalize(AIDA::IHistogram2D*& histo,
double norm=1.0);
328 void scale(AIDA::IHistogram2D*& histo,
double scale);
375 const std::string
histoPath(
const std::string& hname)
const;
378 const std::string
histoPath(
size_t datasetId,
size_t xAxisId,
size_t yAxisId)
const;
381 const std::string
makeAxisCode(
size_t datasetId,
size_t xAxisId,
size_t yAxisId)
const;
390 const BinEdges&
binEdges(
const std::string& hname)
const;
393 const BinEdges&
binEdges(
size_t datasetId,
size_t xAxisId,
size_t yAxisId)
const;
398 BinEdges
logBinEdges(
size_t nbins,
double lower,
double upper);
405 size_t nbins,
double lower,
double upper,
406 const std::string& title=
"",
407 const std::string& xtitle=
"",
const std::string& ytitle=
"");
414 const std::vector<double>& binedges,
const std::string& title=
"",
415 const std::string& xtitle=
"",
const std::string& ytitle=
"");
426 size_t nxbins,
double xlower,
double xupper,
427 size_t nybins,
double ylower,
double yupper,
428 const std::string& title=
"",
const std::string& xtitle=
"",
429 const std::string& ytitle=
"",
const std::string& ztitle=
"");
439 const std::vector<double>& xbinedges,
440 const std::vector<double>& ybinedges,
441 const std::string& title=
"",
const std::string& xtitle=
"",
442 const std::string& ytitle=
"",
const std::string& ztitle=
"");
447 AIDA::IHistogram1D*
bookHistogram1D(
const std::string& name,
const std::string& title=
"",
448 const std::string& xtitle=
"",
const std::string& ytitle=
"");
453 AIDA::IHistogram1D*
bookHistogram1D(
size_t datasetId,
size_t xAxisId,
size_t yAxisId,
454 const std::string& title=
"",
455 const std::string& xtitle=
"",
const std::string& ytitle=
"");
468 size_t nbins,
double lower,
double upper,
469 const std::string& title=
"",
470 const std::string& xtitle=
"",
const std::string& ytitle=
"");
477 const std::vector<double>& binedges,
478 const std::string& title=
"",
479 const std::string& xtitle=
"",
const std::string& ytitle=
"");
484 AIDA::IProfile1D*
bookProfile1D(
const std::string& name,
const std::string& title=
"",
485 const std::string& xtitle=
"",
const std::string& ytitle=
"");
490 AIDA::IProfile1D*
bookProfile1D(
size_t datasetId,
size_t xAxisId,
size_t yAxisId,
491 const std::string& title=
"",
492 const std::string& xtitle=
"",
const std::string& ytitle=
"");
503 AIDA::IDataPointSet*
bookDataPointSet(
const std::string& name,
const std::string& title=
"",
504 const std::string& xtitle=
"",
const std::string& ytitle=
"");
512 size_t npts,
double lower,
double upper,
513 const std::string& title=
"",
514 const std::string& xtitle=
"",
const std::string& ytitle=
"");
525 AIDA::IDataPointSet*
bookDataPointSet(
size_t datasetId,
size_t xAxisId,
size_t yAxisId,
526 const std::string& title=
"",
527 const std::string& xtitle=
"",
const std::string& ytitle=
"");
538 void _makeHistoDir();
541 void _cacheBinEdges()
const;
544 void _cacheXAxisData()
const;
555 shared_ptr<AnalysisInfo> _info;
562 double _crossSection;
563 bool _gotCrossSection;
570 mutable bool _madeHistoDir;
575 mutable map<string, vector<DPSXPoint> > _dpsData;
580 mutable map<string, BinEdges> _histBinEdges;
596 #include "Rivet/AnalysisBuilder.hh" double sumOfWeights() const
Definition: Analysis.cc:113
Definition: MC_JetAnalysis.hh:9
virtual std::string inspireId() const
Get the Inspire ID code for this analysis.
Definition: Analysis.hh:123
const std::string & summary() const
Get a short description of the analysis. Short (one sentence) description used as an index entry...
Definition: AnalysisInfo.hh:81
const std::string histoDir() const
Get the canonical histogram "directory" path for this analysis.
Definition: Analysis.cc:63
virtual std::string summary() const
Get a short description of the analysis.
Definition: Analysis.hh:145
void setNeedsCrossSection(bool needXsec)
Return true if this analysis needs to know the process cross-section.
Definition: AnalysisInfo.hh:184
bool needsCrossSection() const
Return true if this analysis needs to know the process cross-section.
Definition: Analysis.hh:232
Definition: AnalysisInfo.hh:11
BinEdges logBinEdges(size_t nbins, double lower, double upper)
Get bin edges with logarithmic widths.
Definition: Analysis.cc:229
const std::string & status() const
Whether this analysis is trusted (in any way!)
Definition: AnalysisInfo.hh:167
virtual const std::vector< std::pair< double, double > > & requiredEnergies() const
Sets of valid beam energy pairs, in GeV.
Definition: Analysis.hh:221
AIDA::IAnalysisFactory & analysisFactory()
Access the AIDA analysis factory of the controlling AnalysisHandler object.
Definition: Analysis.cc:30
virtual std::string year() const
When the original experimental analysis was published.
Definition: Analysis.hh:179
const std::string histoPath(const std::string &hname) const
Get the canonical histogram path for the named histogram in this analysis.
Definition: Analysis.cc:76
AIDA::IHistogram2D * bookHistogram2D(const std::string &name, size_t nxbins, double xlower, double xupper, size_t nybins, double ylower, double yupper, const std::string &title="", const std::string &xtitle="", const std::string &ytitle="", const std::string &ztitle="")
Definition: Analysis.cc:295
bool isCompatible(const ParticlePair &beams) const
Check if analysis is compatible with the provided beam particle IDs and energies. ...
Definition: Analysis.cc:121
virtual std::string spiresId() const
Get the SPIRES ID code for this analysis (~deprecated).
Definition: Analysis.hh:128
const std::string & bibTeX() const
BibTeX citation entry for this article.
Definition: AnalysisInfo.hh:160
virtual std::vector< std::string > todos() const
Any work to be done on this analysis.
Definition: Analysis.hh:204
virtual void finalize()
Definition: Analysis.hh:95
virtual std::string experiment() const
Experiment which performed and published this analysis.
Definition: Analysis.hh:169
void scale(AIDA::IHistogram1D *&histo, double scale)
Definition: Analysis.cc:511
virtual void analyze(const Event &event)=0
const std::string & bibKey() const
BibTeX citation key for this article.
Definition: AnalysisInfo.hh:153
AnalysisInfo & info()
Get the actual AnalysisInfo object in which all this metadata is stored (non-const).
Definition: Analysis.hh:248
virtual std::string status() const
Whether this analysis is trusted (in any way!)
Definition: Analysis.hh:199
virtual void init()
Definition: Analysis.hh:82
std::string name() const
Definition: AnalysisInfo.hh:38
const std::vector< std::string > & todos() const
Any work to be done on this analysis.
Definition: AnalysisInfo.hh:174
double crossSection() const
Get the process cross-section in pb. Throws if this hasn't been set.
Definition: Analysis.cc:171
Analysis & setCrossSection(double xs)
Set the cross section from the generator.
Definition: Analysis.cc:165
virtual std::vector< std::string > references() const
Journal, and preprint references.
Definition: Analysis.hh:184
const std::vector< std::string > & authors() const
Names & emails of paper/analysis authors. Names and email of authors in 'NAME <EMAIL>' format...
Definition: AnalysisInfo.hh:71
const std::vector< PdgIdPair > & beams() const
Beam particle types.
Definition: AnalysisInfo.hh:109
const std::string & experiment() const
Experiment which performed and published this analysis.
Definition: AnalysisInfo.hh:123
AIDA::IDataPointSet * bookDataPointSet(const std::string &name, const std::string &title="", const std::string &xtitle="", const std::string &ytitle="")
Definition: Analysis.cc:404
const std::string & spiresId() const
Get the SPIRES ID code for this analysis.
Definition: AnalysisInfo.hh:62
This is the base class of all analysis classes in Rivet.
Definition: Analysis.hh:51
Common base class for Projection and Analysis, used for internal polymorphism.
Definition: ProjectionApplier.hh:18
virtual std::vector< std::string > authors() const
Names & emails of paper/analysis authors.
Definition: Analysis.hh:136
AnalysisHandler & handler() const
Access the controlling AnalysisHandler object.
Definition: Analysis.hh:296
virtual std::string name() const
Get the name of the analysis.
Definition: Analysis.hh:118
Analysis & setNeedsCrossSection(bool needed=true)
Declare whether this analysis needs to know the process cross-section from the generator.
Definition: Analysis.hh:236
AIDA::IHistogramFactory & histogramFactory()
Access the AIDA histogram factory of the controlling AnalysisHandler object.
Definition: Analysis.cc:40
size_t numEvents() const
Definition: Analysis.cc:108
double sqrtS() const
Centre of mass energy for this run.
Definition: Analysis.cc:50
Definition: AnalysisHandler.hh:29
virtual std::string bibKey() const
BibTeX citation key for this article.
Definition: Analysis.hh:189
AIDA::ITree & tree()
Access the AIDA tree of the controlling AnalysisHandler object.
Definition: Analysis.cc:35
virtual Analysis & setRequiredEnergies(const std::vector< std::pair< double, double > > &requiredEnergies)
Declare the list of valid beam energy pairs, in GeV.
Definition: Analysis.hh:225
const ParticlePair & beams() const
Incoming beams for this run.
Definition: Analysis.cc:54
const BinEdges & binEdges(const std::string &hname) const
Get bin edges for a named histo (using ref AIDA caching)
Definition: Analysis.cc:208
AIDA::IDataPointSetFactory & datapointsetFactory()
Access the AIDA histogram factory of the controlling AnalysisHandler object.
Definition: Analysis.cc:45
virtual Analysis & setBeams(PdgId beam1, PdgId beam2)
Definition: Analysis.hh:255
virtual Analysis & setRequiredBeams(const std::vector< PdgIdPair > &requiredBeams)
Declare the allowed pairs of incoming beams required by this analysis.
Definition: Analysis.hh:214
const std::vector< std::string > & references() const
Journal and preprint references.
Definition: AnalysisInfo.hh:146
virtual std::string runInfo() const
Information about the events needed as input for this analysis.
Definition: Analysis.hh:164
virtual std::string description() const
Get a full description of the analysis.
Definition: Analysis.hh:155
bool needsCrossSection() const
Return true if this analysis needs to know the process cross-section.
Definition: AnalysisInfo.hh:181
Analysis(const std::string &name)
Constructor.
Definition: Analysis.cc:14
const std::string & year() const
When the original experimental analysis was published. When the refereed paper on which this is based...
Definition: AnalysisInfo.hh:139
Log & getLog() const
Get a Log object based on the name() property of the calling analysis object.
Definition: Analysis.cc:102
virtual std::string bibTeX() const
BibTeX citation entry for this article.
Definition: Analysis.hh:194
AIDA::IHistogram1D * bookHistogram1D(const std::string &name, size_t nbins, double lower, double upper, const std::string &title="", const std::string &xtitle="", const std::string &ytitle="")
Definition: Analysis.cc:261
const std::string & description() const
Get a full description of the analysis. Full textual description of this analysis, what it is useful for, what experimental techniques are applied, etc. Should be treated as a chunk of restructuredText (http://docutils.sourceforge.net/rst.html), with equations to be rendered as LaTeX with amsmath operators.
Definition: AnalysisInfo.hh:92
virtual std::string collider() const
Collider on which the experiment ran.
Definition: Analysis.hh:174
double crossSectionPerEvent() const
Definition: Analysis.cc:179
virtual ~Analysis()
The destructor.
Definition: Analysis.hh:69
const std::string & runInfo() const
Information about the events needed as input for this analysis. Event types, energies, kinematic cuts, particles to be considered stable, etc. etc. Should be treated as a restructuredText bullet list (http://docutils.sourceforge.net/rst.html)
Definition: AnalysisInfo.hh:102
void normalize(AIDA::IHistogram1D *&histo, double norm=1.0, bool includeoverflows=true)
Definition: Analysis.cc:479
void setBeams(const std::vector< PdgIdPair > &beams)
Set beam particle types.
Definition: AnalysisInfo.hh:112
const std::string & inspireId() const
Get the Inspire (SPIRES replacement) ID code for this analysis.
Definition: AnalysisInfo.hh:55
const std::string & collider() const
Collider on which the experiment ran.
Definition: AnalysisInfo.hh:130
const std::string makeAxisCode(size_t datasetId, size_t xAxisId, size_t yAxisId) const
Get the internal histogram name for given d, x and y (cf. HepData)
Definition: Analysis.cc:87
virtual const std::vector< PdgIdPair > & requiredBeams() const
Return the allowed pairs of incoming beams required by this analysis.
Definition: Analysis.hh:210
AIDA::IProfile1D * bookProfile1D(const std::string &name, size_t nbins, double lower, double upper, const std::string &title="", const std::string &xtitle="", const std::string &ytitle="")
Definition: Analysis.cc:366
const PdgIdPair beamIds() const
Incoming beam IDs for this run.
Definition: Analysis.cc:58
const AnalysisInfo & info() const
Get the actual AnalysisInfo object in which all this metadata is stored.
Definition: Analysis.hh:108
void setEnergies(const std::vector< std::pair< double, double > > &energies)
Set the valid beam energies.
Definition: AnalysisInfo.hh:119
const std::vector< std::pair< double, double > > & energies() const
Sets of valid beam energies.
Definition: AnalysisInfo.hh:116