Rivet  3.1.5
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 
8 namespace Rivet {
9 
10 
12  class AnalysisInfo {
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& bibKey() const { return _bibKey; }
164  void setBibKey(const std::string& bibKey) { _bibKey = bibKey; }
165 
167  const std::string& bibTeX() const { return _bibTeX; }
169  void setBibTeX(const std::string& bibTeX) { _bibTeX = bibTeX; }
170 
172  const std::vector<std::string>& todos() const { return _todos; }
174  void setTodos(const std::vector<std::string>& todos) { _todos = todos; }
175 
177 
178 
181 
183  const std::vector<std::string>& options() const { return _options; }
184 
186  bool validOption(std::string key, std::string val) const;
187 
189  void setOptions(const std::vector<std::string>& opts) {
190  _options = opts;
191  buildOptionMap();
192  }
193 
195  void buildOptionMap();
196 
198 
199 
202 
204  const std::string& status() const { return _status; }
206  void setStatus(const std::string& status) { _status = status; }
207 
209  bool reentrant() const { return _reentrant; }
211  void setReentrant(bool ree=true) { _reentrant = ree; }
212 
214  bool validated() const {
215  return statuscheck("VALIDATED");
216  }
217 
219  bool preliminary() const {
220  return statuscheck("PRELIMINARY");
221  }
222 
224  bool obsolete() const {
225  return statuscheck("OBSOLETE");
226  }
227 
229  bool unvalidated() const {
230  return statuscheck("UNVALIDATED");
231  }
232 
234  bool random() const {
235  return statuscheck("RANDOM");
236  }
237 
239  bool unphysical() const {
240  return statuscheck("UNPHYSICAL");
241  }
242 
244  bool hepdata() const {
245  return !statuscheck("NOHEPDATA");
246  }
247 
249  bool multiweight() const {
250  return !statuscheck("SINGLEWEIGHT");
251  }
252 
254  bool statuscheck(const string& word) const {
255  auto pos =_status.find(word);
256  if ( pos == string::npos ) return false;
257  if ( pos > 0 && isalnum(_status[pos - 1]) ) return false;
258  if ( pos + word.length() < _status.length() &&
259  isalnum(_status[pos + word.length()]) ) return false;
260  return true;
261  }
262 
264 
265 
267  std::string refFile() const;
268 
270  const std::vector<std::string> & validation() const {
271  return _validation;
272  }
273 
277  bool needsCrossSection() const { return _needsCrossSection; }
278 
279 
280  private:
281 
282  // std::map<string,string> _yamldict;
283 
284  std::string _name;
285  std::string _refDataName;
286  std::string _spiresId, _inspireId;
287  std::vector<std::string> _authors;
288  std::string _summary;
289  std::string _description;
290  std::string _runInfo;
291  std::string _experiment;
292  std::string _collider;
293  std::vector<std::pair<PdgId, PdgId> > _beams;
294  std::vector<std::pair<double, double> > _energies;
295  std::string _year;
296  double _luminosityfb;
297  std::vector<std::string> _references;
298  std::vector<std::string> _keywords;
299  std::string _bibKey;
300  std::string _bibTeX;
301  //std::string _bibTeXBody; ///< Was thinking of avoiding duplication of BibKey...
302  std::string _status;
303  std::string _warning;
304  std::string _refmatch;
305  std::string _refunmatch;
306  std::vector<std::string> _todos;
307  bool _needsCrossSection;
308 
309  std::vector<std::string> _options;
310  std::map< std::string, std::set<std::string> > _optionmap;
311 
312  std::vector<std::string> _validation;
313 
314  bool _reentrant;
315 
316  void clear() {
317  //_yamldict.clear();
318  _name = "";
319  _refDataName = "";
320  _spiresId = "";
321  _inspireId = "";
322  _authors.clear();
323  _summary = "";
324  _description = "";
325  _runInfo = "";
326  _experiment = "";
327  _collider = "";
328  _beams.clear();
329  _energies.clear();
330  _year = "";
331  _luminosityfb = -1;
332  _references.clear();
333  _keywords.clear();
334  _bibKey = "";
335  _bibTeX = "";
336  //_bibTeXBody = "";
337  _status = "";
338  _warning = "";
339  _refmatch = "";
340  _refunmatch = "";
341  _todos.clear();
342  _needsCrossSection = false;
343  _options.clear();
344  _optionmap.clear();
345  _validation.clear();
346  _reentrant = false;
347  }
348 
349  };
350 
351 
353  std::string toString(const AnalysisInfo& ai);
354 
356  inline std::ostream& operator<<(std::ostream& os, const AnalysisInfo& ai) {
357  os << toString(ai);
358  return os;
359  }
360 
361 
362 }
363 
364 #endif
double luminosityfb() const
The integrated data luminosity of the data set in 1/fb.
Definition: AnalysisInfo.hh:133
Definition: MC_Cent_pPb.hh:10
void setName(const std::string &name)
Set the name of the analysis.
Definition: AnalysisInfo.hh:44
bool hepdata() const
Check if refdata comes automatically from Hepdata.
Definition: AnalysisInfo.hh:244
void setYear(const std::string &year)
Set the year in which the original experimental analysis was published.
Definition: AnalysisInfo.hh:130
AnalysisInfo()
Default constructor.
Definition: AnalysisInfo.hh:19
bool random() const
Return true if includes random variations.
Definition: AnalysisInfo.hh:234
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
void setAuthors(const std::vector< std::string > &authors)
Set the author list.
Definition: AnalysisInfo.hh:74
double luminosity() const
The integrated data luminosity of the data set in 1/pb.
Definition: AnalysisInfo.hh:135
const std::string & refMatch() const
Positive filtering regex for ref-data HepData sync.
Definition: AnalysisInfo.hh:154
const std::vector< std::string > & references() const
Journal and preprint references.
Definition: AnalysisInfo.hh:141
bool obsolete() const
Return true if obsolete.
Definition: AnalysisInfo.hh:224
void setInspireId(const std::string &inspireId)
Set the Inspire (SPIRES replacement) ID code for this analysis.
Definition: AnalysisInfo.hh:57
bool statuscheck(const string &word) const
Helper function for checking status-string contents.
Definition: AnalysisInfo.hh:254
Holder of analysis metadata.
Definition: AnalysisInfo.hh:12
bool unvalidated() const
Return true if unvalidated.
Definition: AnalysisInfo.hh:229
void setTodos(const std::vector< std::string > &todos)
Set the to-do list.
Definition: AnalysisInfo.hh:174
void buildOptionMap()
Build a map of options to facilitate checking.
static unique_ptr< AnalysisInfo > make(const std::string &name)
Static factory method: returns null pointer if no metadata found.
const std::string & status() const
Whether this analysis is trusted (in any way!)
Definition: AnalysisInfo.hh:204
bool preliminary() const
Return true if preliminary.
Definition: AnalysisInfo.hh:219
const std::string & spiresId() const
Definition: AnalysisInfo.hh:62
bool multiweight() const
Check if this analysis can handle multiple weights.
Definition: AnalysisInfo.hh:249
const std::vector< std::string > & keywords() const
Analysis keywords, for grouping etc.
Definition: AnalysisInfo.hh:146
void setBibTeX(const std::string &bibTeX)
Set the BibTeX citation entry for this article.
Definition: AnalysisInfo.hh:169
const std::string & description() const
Get a full description of the analysis.
Definition: AnalysisInfo.hh:91
const std::string & bibKey() const
BibTeX citation key for this article.
Definition: AnalysisInfo.hh:162
void setSummary(const std::string &summary)
Set the short description for this analysis.
Definition: AnalysisInfo.hh:83
const std::vector< std::string > & validation() const
List a series of command lines to be used for valdation.
Definition: AnalysisInfo.hh:270
void setRefDataName(const std::string &name)
Set the reference data name of the analysis (if different from plugin name).
Definition: AnalysisInfo.hh:52
bool unphysical() const
Return true if the analysis uses generator-dependent information.
Definition: AnalysisInfo.hh:239
const std::string & year() const
When the original experimental analysis was published.
Definition: AnalysisInfo.hh:127
const std::string & runInfo() const
Information about the events needed as input for this analysis.
Definition: AnalysisInfo.hh:100
bool validOption(std::string key, std::string val) const
Check if the given option is valid.
const std::string & warning() const
Any warning message.
Definition: AnalysisInfo.hh:150
bool validated() const
Return true if validated.
Definition: AnalysisInfo.hh:214
const std::string & inspireId() const
Get the Inspire (SPIRES replacement) ID code for this analysis.
Definition: AnalysisInfo.hh:55
void setRunInfo(const std::string &runInfo)
Set the full description for this analysis.
Definition: AnalysisInfo.hh:102
void setSpiresId(const std::string &spiresId)
Definition: AnalysisInfo.hh:66
std::string name() const
Definition: AnalysisInfo.hh:32
const std::vector< std::string > & todos() const
Any work to be done on this analysis.
Definition: AnalysisInfo.hh:172
bool reentrant() const
Return true if finalize() can be run multiple times for this analysis.
Definition: AnalysisInfo.hh:209
void setCollider(const std::string &collider)
Set the collider on which the experiment ran.
Definition: AnalysisInfo.hh:122
const std::string & experiment() const
Experiment which performed and published this analysis.
Definition: AnalysisInfo.hh:115
void setDescription(const std::string &description)
Set the full description for this analysis.
Definition: AnalysisInfo.hh:93
const std::string & collider() const
Collider on which the experiment ran.
Definition: AnalysisInfo.hh:120
void setExperiment(const std::string &experiment)
Set the experiment which performed and published this analysis.
Definition: AnalysisInfo.hh:117
std::string toString(const AnalysisInfo &ai)
String representation.
bool needsCrossSection() const
Definition: AnalysisInfo.hh:277
const std::vector< std::string > & authors() const
Names & emails of paper/analysis authors.
Definition: AnalysisInfo.hh:72
const std::vector< std::pair< double, double > > & energies() const
Sets of valid beam energies.
Definition: AnalysisInfo.hh:110
void setReferences(const std::vector< std::string > &references)
Set the journal and preprint reference list.
Definition: AnalysisInfo.hh:143
const std::vector< PdgIdPair > & beams() const
Beam particle types.
Definition: AnalysisInfo.hh:105
std::ostream & operator<<(std::ostream &os, const AnalysisInfo &ai)
Stream an AnalysisInfo as a text description.
Definition: AnalysisInfo.hh:356
const std::vector< std::string > & options() const
Get the option list.
Definition: AnalysisInfo.hh:183
void setBibKey(const std::string &bibKey)
Set the BibTeX citation key for this article.
Definition: AnalysisInfo.hh:164
const std::string & summary() const
Get a short description of the analysis.
Definition: AnalysisInfo.hh:81
void setReentrant(bool ree=true)
Set re-entrant status.
Definition: AnalysisInfo.hh:211
void setStatus(const std::string &status)
Set the analysis code status.
Definition: AnalysisInfo.hh:206
std::string refFile() const
Find the path to the reference-data file for this analysis.
void setLuminosityfb(const double luminosityfb)
Set the integrated data luminosity of the data set.
Definition: AnalysisInfo.hh:138
const std::string & refUnmatch() const
Negative filtering regex for ref-data HepData sync.
Definition: AnalysisInfo.hh:158
std::string getRefDataName() const
Get the reference data name of the analysis (if different from plugin name).
Definition: AnalysisInfo.hh:47
const std::string & bibTeX() const
BibTeX citation entry for this article.
Definition: AnalysisInfo.hh:167
void setOptions(const std::vector< std::string > &opts)
Set the option list.
Definition: AnalysisInfo.hh:189