rivet is hosted by Hepforge, IPPP Durham
Rivet 3.1.6
AnalysisInfo.hh
1// -*- C++ -*-
2#ifndef RIVET_AnalysisInfo_HH
3#define RIVET_AnalysisInfo_HH
4
5#include "Rivet/Config/RivetCommon.hh"
6#include <ostream>
7
8namespace Rivet {
9
10
13 public:
14
16 static unique_ptr<AnalysisInfo> make(const std::string& name);
17
19 AnalysisInfo() { clear(); }
20
21 ~AnalysisInfo() { }
22
23
29
32 std::string name() const {
33 if (!_name.empty()) return _name;
34 if (!experiment().empty() && !year().empty()) {
35 if (!inspireId().empty()) {
36 return experiment() + "_" + year() + "_I" + inspireId();
37 } else if (!spiresId().empty()) {
38 return experiment() + "_" + year() + "_S" + spiresId();
39 }
40 }
41 return "";
42 }
44 void setName(const std::string& name) { _name = name; }
45
47 std::string getRefDataName() const {
48 if (!_refDataName.empty()) return _refDataName;
49 return name();
50 }
52 void setRefDataName(const std::string& name) { _refDataName = name; }
53
55 const std::string& inspireId() const { return _inspireId; }
57 void setInspireId(const std::string& inspireId) { _inspireId = inspireId; }
58
62 const std::string& spiresId() const { return _spiresId; }
66 void setSpiresId(const std::string& spiresId) { _spiresId = spiresId; }
67
72 const std::vector<std::string>& authors() const { return _authors; }
74 void setAuthors(const std::vector<std::string>& authors) { _authors = authors; }
75
81 const std::string& summary() const { return _summary; }
83 void setSummary(const std::string& summary) { _summary = summary; }
84
91 const std::string& description() const { return _description; }
93 void setDescription(const std::string& description) { _description = description; }
94
100 const std::string& runInfo() const { return _runInfo; }
102 void setRunInfo(const std::string& runInfo) { _runInfo = runInfo; }
103
105 const std::vector<PdgIdPair>& beams() const { return _beams; }
107 void setBeams(const std::vector<PdgIdPair>& beams) { _beams = beams; }
108
110 const std::vector<std::pair<double,double> >& energies() const { return _energies; }
112 void setEnergies(const std::vector<std::pair<double, double> >& energies) { _energies = energies; }
113
115 const std::string& experiment() const { return _experiment; }
117 void setExperiment(const std::string& experiment) { _experiment = experiment; }
118
120 const std::string& collider() const { return _collider; }
122 void setCollider(const std::string& collider) { _collider = collider; }
123
127 const std::string& year() const { return _year; }
128
130 void setYear(const std::string& year) { _year = year; }
131
133 double luminosityfb() const { return _luminosityfb; }
135 double luminosity() const { return 1000*_luminosityfb; }
136
138 void setLuminosityfb(const double luminosityfb) { _luminosityfb = luminosityfb; }
139
141 const std::vector<std::string>& references() const { return _references; }
143 void setReferences(const std::vector<std::string>& references) { _references = references; }
144
146 const std::vector<std::string>& keywords() const { return _keywords; }
147 void setKeywords(const std::vector<std::string>& keywords) { _keywords = keywords; }
148
150 const std::string& warning() const { return _warning; }
151 void setWarning(const std::string warning) { _warning = warning; }
152
154 const std::string& refMatch() const { return _refmatch; }
155 void setRefMatch(const std::string refmatch) { _refmatch = refmatch; }
156
158 const std::string& refUnmatch() const { return _refunmatch; }
159 void setRefUnmatch(const std::string refunmatch) { _refunmatch = refunmatch; }
160
162 const std::string& writerDoublePrecision() const { return _writerdoubleprecision; }
163 void setWriterDoublePrecision(const std::string dp) { _writerdoubleprecision = dp; }
164
166 const std::string& bibKey() const { return _bibKey; }
168 void setBibKey(const std::string& bibKey) { _bibKey = bibKey; }
169
171 const std::string& bibTeX() const { return _bibTeX; }
173 void setBibTeX(const std::string& bibTeX) { _bibTeX = bibTeX; }
174
176 const std::vector<std::string>& todos() const { return _todos; }
178 void setTodos(const std::vector<std::string>& todos) { _todos = todos; }
179
181
182
185
187 const std::vector<std::string>& options() const { return _options; }
188
190 bool validOption(std::string key, std::string val) const;
191
193 void setOptions(const std::vector<std::string>& opts) {
194 _options = opts;
196 }
197
200
202
203
206
208 const std::string& status() const { return _status; }
210 void setStatus(const std::string& status) { _status = status; }
211
213 bool reentrant() const { return _reentrant; }
215 void setReentrant(bool ree=true) { _reentrant = ree; }
216
218 bool validated() const {
219 return statuscheck("VALIDATED");
220 }
221
223 bool preliminary() const {
224 return statuscheck("PRELIMINARY");
225 }
226
228 bool obsolete() const {
229 return statuscheck("OBSOLETE");
230 }
231
233 bool unvalidated() const {
234 return statuscheck("UNVALIDATED");
235 }
236
238 bool random() const {
239 return statuscheck("RANDOM");
240 }
241
243 bool unphysical() const {
244 return statuscheck("UNPHYSICAL");
245 }
246
248 bool hepdata() const {
249 return !statuscheck("NOHEPDATA");
250 }
251
253 bool multiweight() const {
254 return !statuscheck("SINGLEWEIGHT");
255 }
256
258 bool statuscheck(const string& word) const {
259 auto pos =_status.find(word);
260 if ( pos == string::npos ) return false;
261 if ( pos > 0 && isalnum(_status[pos - 1]) ) return false;
262 if ( pos + word.length() < _status.length() &&
263 isalnum(_status[pos + word.length()]) ) return false;
264 return true;
265 }
266
268
269
271 std::string refFile() const;
272
274 const std::vector<std::string> & validation() const {
275 return _validation;
276 }
277
281 bool needsCrossSection() const { return _needsCrossSection; }
282
283
284 private:
285
286 // std::map<string,string> _yamldict;
287
288 std::string _name;
289 std::string _refDataName;
290 std::string _spiresId, _inspireId;
291 std::vector<std::string> _authors;
292 std::string _summary;
293 std::string _description;
294 std::string _runInfo;
295 std::string _experiment;
296 std::string _collider;
297 std::vector<std::pair<PdgId, PdgId> > _beams;
298 std::vector<std::pair<double, double> > _energies;
299 std::string _year;
300 double _luminosityfb;
301 std::vector<std::string> _references;
302 std::vector<std::string> _keywords;
303 std::string _bibKey;
304 std::string _bibTeX;
305 //std::string _bibTeXBody; ///< Was thinking of avoiding duplication of BibKey...
306 std::string _status;
307 std::string _warning;
308 std::string _refmatch;
309 std::string _refunmatch;
310 std::string _writerdoubleprecision;
311 std::vector<std::string> _todos;
312 bool _needsCrossSection;
313
314 std::vector<std::string> _options;
315 std::map< std::string, std::set<std::string> > _optionmap;
316
317 std::vector<std::string> _validation;
318
319 bool _reentrant;
320
321 void clear() {
322 //_yamldict.clear();
323 _name = "";
324 _refDataName = "";
325 _spiresId = "";
326 _inspireId = "";
327 _authors.clear();
328 _summary = "";
329 _description = "";
330 _runInfo = "";
331 _experiment = "";
332 _collider = "";
333 _beams.clear();
334 _energies.clear();
335 _year = "";
336 _luminosityfb = -1;
337 _references.clear();
338 _keywords.clear();
339 _bibKey = "";
340 _bibTeX = "";
341 //_bibTeXBody = "";
342 _status = "";
343 _warning = "";
344 _refmatch = "";
345 _refunmatch = "";
346 _writerdoubleprecision = "";
347 _todos.clear();
348 _needsCrossSection = false;
349 _options.clear();
350 _optionmap.clear();
351 _validation.clear();
352 _reentrant = false;
353 }
354
355 };
356
357
359 std::string toString(const AnalysisInfo& ai);
360
362 inline std::ostream& operator<<(std::ostream& os, const AnalysisInfo& ai) {
363 os << toString(ai);
364 return os;
365 }
366
367
368}
369
370#endif
Holder of analysis metadata.
Definition: AnalysisInfo.hh:12
bool needsCrossSection() const
Definition: AnalysisInfo.hh:281
static unique_ptr< AnalysisInfo > make(const std::string &name)
Static factory method: returns null pointer if no metadata found.
std::string refFile() const
Find the path to the reference-data file for this analysis.
const std::vector< std::string > & validation() const
List a series of command lines to be used for valdation.
Definition: AnalysisInfo.hh:274
AnalysisInfo()
Default constructor.
Definition: AnalysisInfo.hh:19
void setCollider(const std::string &collider)
Set the collider on which the experiment ran.
Definition: AnalysisInfo.hh:122
void setTodos(const std::vector< std::string > &todos)
Set the to-do list.
Definition: AnalysisInfo.hh:178
const std::string & refUnmatch() const
Negative filtering regex for ref-data HepData sync.
Definition: AnalysisInfo.hh:158
void setYear(const std::string &year)
Set the year in which the original experimental analysis was published.
Definition: AnalysisInfo.hh:130
const std::string & description() const
Get a full description of the analysis.
Definition: AnalysisInfo.hh:91
const std::string & warning() const
Any warning message.
Definition: AnalysisInfo.hh:150
const std::string & bibKey() const
BibTeX citation key for this article.
Definition: AnalysisInfo.hh:166
void setRefDataName(const std::string &name)
Set the reference data name of the analysis (if different from plugin name).
Definition: AnalysisInfo.hh:52
void setBibTeX(const std::string &bibTeX)
Set the BibTeX citation entry for this article.
Definition: AnalysisInfo.hh:173
const std::vector< std::string > & todos() const
Any work to be done on this analysis.
Definition: AnalysisInfo.hh:176
const std::string & collider() const
Collider on which the experiment ran.
Definition: AnalysisInfo.hh:120
void setRunInfo(const std::string &runInfo)
Set the full description for this analysis.
Definition: AnalysisInfo.hh:102
const std::string & bibTeX() const
BibTeX citation entry for this article.
Definition: AnalysisInfo.hh:171
const std::vector< std::string > & references() const
Journal and preprint references.
Definition: AnalysisInfo.hh:141
void setExperiment(const std::string &experiment)
Set the experiment which performed and published this analysis.
Definition: AnalysisInfo.hh:117
void setSummary(const std::string &summary)
Set the short description for this analysis.
Definition: AnalysisInfo.hh:83
const std::string & inspireId() const
Get the Inspire (SPIRES replacement) ID code for this analysis.
Definition: AnalysisInfo.hh:55
void setLuminosityfb(const double luminosityfb)
Set the integrated data luminosity of the data set.
Definition: AnalysisInfo.hh:138
const std::string & summary() const
Get a short description of the analysis.
Definition: AnalysisInfo.hh:81
const std::vector< std::pair< double, double > > & energies() const
Sets of valid beam energies.
Definition: AnalysisInfo.hh:110
const std::string & refMatch() const
Positive filtering regex for ref-data HepData sync.
Definition: AnalysisInfo.hh:154
void setEnergies(const std::vector< std::pair< double, double > > &energies)
Set the valid beam energies.
Definition: AnalysisInfo.hh:112
void setBeams(const std::vector< PdgIdPair > &beams)
Set beam particle types.
Definition: AnalysisInfo.hh:107
double luminosity() const
The integrated data luminosity of the data set in 1/pb.
Definition: AnalysisInfo.hh:135
const std::vector< std::string > & keywords() const
Analysis keywords, for grouping etc.
Definition: AnalysisInfo.hh:146
const std::string & runInfo() const
Information about the events needed as input for this analysis.
Definition: AnalysisInfo.hh:100
void setBibKey(const std::string &bibKey)
Set the BibTeX citation key for this article.
Definition: AnalysisInfo.hh:168
const std::vector< std::string > & authors() const
Names & emails of paper/analysis authors.
Definition: AnalysisInfo.hh:72
std::string name() const
Definition: AnalysisInfo.hh:32
std::string getRefDataName() const
Get the reference data name of the analysis (if different from plugin name).
Definition: AnalysisInfo.hh:47
const std::string & spiresId() const
Definition: AnalysisInfo.hh:62
const std::string & year() const
When the original experimental analysis was published.
Definition: AnalysisInfo.hh:127
const std::vector< PdgIdPair > & beams() const
Beam particle types.
Definition: AnalysisInfo.hh:105
void setSpiresId(const std::string &spiresId)
Definition: AnalysisInfo.hh:66
const std::string & writerDoublePrecision() const
Positive filtering regex for setting double precision in Writer.
Definition: AnalysisInfo.hh:162
void setReferences(const std::vector< std::string > &references)
Set the journal and preprint reference list.
Definition: AnalysisInfo.hh:143
void setAuthors(const std::vector< std::string > &authors)
Set the author list.
Definition: AnalysisInfo.hh:74
void setDescription(const std::string &description)
Set the full description for this analysis.
Definition: AnalysisInfo.hh:93
double luminosityfb() const
The integrated data luminosity of the data set in 1/fb.
Definition: AnalysisInfo.hh:133
void setInspireId(const std::string &inspireId)
Set the Inspire (SPIRES replacement) ID code for this analysis.
Definition: AnalysisInfo.hh:57
void setName(const std::string &name)
Set the name of the analysis.
Definition: AnalysisInfo.hh:44
const std::string & experiment() const
Experiment which performed and published this analysis.
Definition: AnalysisInfo.hh:115
const std::vector< std::string > & options() const
Get the option list.
Definition: AnalysisInfo.hh:187
void buildOptionMap()
Build a map of options to facilitate checking.
bool validOption(std::string key, std::string val) const
Check if the given option is valid.
void setOptions(const std::vector< std::string > &opts)
Set the option list.
Definition: AnalysisInfo.hh:193
bool statuscheck(const string &word) const
Helper function for checking status-string contents.
Definition: AnalysisInfo.hh:258
bool preliminary() const
Return true if preliminary.
Definition: AnalysisInfo.hh:223
bool validated() const
Return true if validated.
Definition: AnalysisInfo.hh:218
void setStatus(const std::string &status)
Set the analysis code status.
Definition: AnalysisInfo.hh:210
bool random() const
Return true if includes random variations.
Definition: AnalysisInfo.hh:238
bool unphysical() const
Return true if the analysis uses generator-dependent information.
Definition: AnalysisInfo.hh:243
const std::string & status() const
Whether this analysis is trusted (in any way!)
Definition: AnalysisInfo.hh:208
void setReentrant(bool ree=true)
Set re-entrant status.
Definition: AnalysisInfo.hh:215
bool unvalidated() const
Return true if unvalidated.
Definition: AnalysisInfo.hh:233
bool hepdata() const
Check if refdata comes automatically from Hepdata.
Definition: AnalysisInfo.hh:248
bool obsolete() const
Return true if obsolete.
Definition: AnalysisInfo.hh:228
bool reentrant() const
Return true if finalize() can be run multiple times for this analysis.
Definition: AnalysisInfo.hh:213
bool multiweight() const
Check if this analysis can handle multiple weights.
Definition: AnalysisInfo.hh:253
Definition: MC_Cent_pPb.hh:10
std::ostream & operator<<(std::ostream &os, const AnalysisInfo &ai)
Stream an AnalysisInfo as a text description.
Definition: AnalysisInfo.hh:362
std::string toString(const AnalysisInfo &ai)
String representation.