Belle II Software  release-05-02-19
CalibrationAlgorithm.h
1 /**************************************************************************
2  * BASF2 (Belle Analysis Framework 2) *
3  * Copyright(C) 2010 - Belle II Collaboration *
4  * *
5  * Author: The Belle II Collaboration *
6  * Contributors: Tadeas Bilka, David Dossett *
7  * *
8  * This software is provided "as is" without any warranty. *
9  **************************************************************************/
10 
11 #pragma once
12 #include <Python.h>
13 #include <memory>
14 #include <string>
15 #include <vector>
16 #include <map>
17 #include <any>
18 #include <utility>
19 #include <list>
20 #include <nlohmann/json.hpp>
21 #include <TClonesArray.h>
22 #include <TDirectory.h>
23 #include <TFile.h>
24 #include <TTree.h>
25 #include <framework/database/Database.h>
26 #include <framework/database/IntervalOfValidity.h>
27 #include <framework/logging/Logger.h>
28 #include <calibration/Utilities.h>
29 #include <calibration/dataobjects/RunRange.h>
30 
31 namespace Belle2 {
39  class CalibrationAlgorithm {
40  public:
42  enum EResult {
43  c_OK,
44  c_Iterate,
46  c_Failure,
48  };
49 
55  class ExecutionData {
56  public:
57  ExecutionData() {};
58  ~ExecutionData() {};
60  void reset()
61  {
62  B2DEBUG(100, "Resetting ExecutionData of algorithm");
63  m_requestedRuns.clear();
64  m_iteration = -1;
66  m_payloads.clear();
69  }
72  {
73  m_mapCalibData.clear();
74  }
76  const std::vector<Calibration::ExpRun>& getRequestedRuns() const {return m_requestedRuns;}
78  void setRequestedRuns(const std::vector<Calibration::ExpRun>& requestedRuns) {m_requestedRuns = requestedRuns;}
80  int getIteration() const {return m_iteration;}
82  void setIteration(int iteration)
83  {
84  B2DEBUG(29, "Setting Iteration of Algorithm to " << iteration);
85  m_iteration = iteration;
86  }
88  EResult getResult() const {return m_result;}
90  void setResult(EResult result) {m_result = result;}
92  void setRequestedIov(const IntervalOfValidity& iov = IntervalOfValidity(0, 0, -1, -1)) {m_iov = iov;}
94  const IntervalOfValidity& getRequestedIov() const {return m_iov;}
96  std::list<Database::DBImportQuery>& getPayloads() {return m_payloads;}
98  std::list<Database::DBImportQuery> getPayloadValues() {return m_payloads;}
100  std::shared_ptr<TNamed> getCalibObj(const std::string& name, const RunRange& runRange) const
101  {
102  auto it = m_mapCalibData.find(std::make_pair(name, runRange));
103  if (it == m_mapCalibData.end()) {
104  return nullptr;
105  }
106  return it->second;
107  }
109  void setCalibObj(const std::string& name, const RunRange& runRange, const std::shared_ptr<TNamed>& objectPtr)
110  {
111  m_mapCalibData[std::make_pair(name, runRange)] = objectPtr;
112  }
113 
114  private:
116  std::vector<Calibration::ExpRun> m_requestedRuns{};
118  int m_iteration{ -1};
122  IntervalOfValidity m_iov;
124  std::list<Database::DBImportQuery> m_payloads{};
133  std::map<std::pair<std::string, RunRange>, std::shared_ptr<TNamed>> m_mapCalibData;
134  };
135 
142  explicit CalibrationAlgorithm(const std::string& collectorModuleName) : m_prefix(collectorModuleName) {}
143 
145  virtual ~CalibrationAlgorithm() {}
146 
148  std::string getPrefix() const {return m_prefix;}
149 
151  bool checkPyExpRun(PyObject* pyObj);
152 
154  Calibration::ExpRun convertPyExpRun(PyObject* pyObj);
155 
166  std::string getCollectorName() const {return getPrefix();}
167 
169  void setPrefix(const std::string& prefix) {m_prefix = prefix;}
170 
172  void setInputFileNames(PyObject* inputFileNames);
173 
175  PyObject* getInputFileNames();
176 
178  std::vector<Calibration::ExpRun> getRunListFromAllData() const;
179 
181  RunRange getRunRangeFromAllData() const;
182 
184  IntervalOfValidity getIovFromAllData() const;
185 
187  void fillRunToInputFilesMap();
188 
190  std::string getGranularity() const {return m_granularityOfData;};
191 
200  EResult execute(std::vector<Calibration::ExpRun> runs = {}, int iteration = 0, IntervalOfValidity iov = IntervalOfValidity());
201 
203  EResult execute(PyObject* runs, int iteration = 0, IntervalOfValidity iov = IntervalOfValidity());
204 
206  std::list<Database::DBImportQuery>& getPayloads() {return m_data.getPayloads();}
207 
209  std::list<Database::DBImportQuery> getPayloadValues() {return m_data.getPayloadValues();}
210 
212  bool commit();
213 
215  bool commit(std::list<Database::DBImportQuery> payloads);
216 
218  const std::string& getDescription() const {return m_description;}
219 
221  // of JSON object creation. Failure probably means that your JSON string was badly formatted.
222  bool loadInputJson(const std::string& jsonString);
223 
225  const std::string dumpOutputJson() const {return m_jsonExecutionOutput.dump();}
226 
228  // areas of the CAF. Basically you search for features in the data that you want to find and make sure that the CAF knows
229  // there is a boundary where payloads should probably start/end. The output boundaries should be the starting ExpRun
230  // of the new boundary.
231  const std::vector<Calibration::ExpRun> findPayloadBoundaries(std::vector<Calibration::ExpRun> runs, int iteration = 0);
232 
233  protected:
234  // Developers implement this function ------------
235 
237  virtual EResult calibrate() = 0;
238 
240  // Implementing this is optional because most people will never call findPayloadBoundaries in their CAF job.
241  // It returns false by default so that the boundaries vector is empty if you forgot to implement this.
242  //
243  // We omit the names of arguments here so that we don't generate lots of compiler warnings in algorithms that don't
244  // implement this function.
245  virtual bool isBoundaryRequired(const Calibration::ExpRun& /*currentRun*/)
246  {
247  B2ERROR("You didn't implement a isBoundaryRequired() member function in your CalibrationAlgorithm but you are calling it!");
248  return false;
249  }
250 
252  // We omit the names of arguments here so that we don't generate lots of compiler warnings in algorithms that don't
253  // implement this function.
254  virtual void boundaryFindingSetup(std::vector<Calibration::ExpRun> /*runs*/, int /*iteration = 0*/) {};
255 
257  // This runs right after 'findPayloadBoundaries' and is supposed to correct any changes you made in 'boundaryFindingSetup'
258  // or 'isBoundaryRequired'.
259  virtual void boundaryFindingTearDown() {};
260 
261  // When using the boundaries functionality from isBoundaryRequired, this is used to store the boundaries. It is cleared when
262  // calling findPayloadBoundaries, before boundaryFindingSetup is called.
263  std::vector<Calibration::ExpRun> m_boundaries;
264 
265  // Helpers ---------------- Data retrieval -------
266 
268  const std::vector<Calibration::ExpRun>& getRunList() const {return m_data.getRequestedRuns();}
269 
271  int getIteration() const { return m_data.getIteration(); }
272 
274  void setInputFileNames(std::vector<std::string> inputFileNames);
275 
277  std::vector<std::string> getVecInputFileNames() const {return m_inputFileNames;}
278 
280  template<class T>
281  std::shared_ptr<T> getObjectPtr(const std::string& name, const std::vector<Calibration::ExpRun>& requestedRuns);
282 
286  template<class T>
287  std::shared_ptr<T> getObjectPtr(std::string name)
288  {
289  if (m_runsToInputFiles.size() == 0)
291  return getObjectPtr<T>(name, m_data.getRequestedRuns());
292  }
293 
294  // Helpers ---------------- Database storage -----
295 
297  std::string getGranularityFromData() const;
298 
300  void saveCalibration(TClonesArray* data, const std::string& name);
301 
303  void saveCalibration(TClonesArray* data, const std::string& name, const IntervalOfValidity& iov);
304 
306  void saveCalibration(TObject* data);
307 
309  void saveCalibration(TObject* data, const IntervalOfValidity& iov);
310 
312  void saveCalibration(TObject* data, const std::string& name);
313 
315  void saveCalibration(TObject* data, const std::string& name, const IntervalOfValidity& iov);
316 
318  void updateDBObjPtrs(const unsigned int event, const int run, const int experiment);
319 
320  // -----------------------------------------------
321 
323  void setDescription(const std::string& description) {m_description = description;}
324 
327 
329  Calibration::ExpRun getAllGranularityExpRun() const {return m_allExpRun;}
330 
332  void resetInputJson() {m_jsonExecutionInput.clear();}
333 
335  void resetOutputJson() {m_jsonExecutionOutput.clear();}
336 
338  template<class T>
339  void setOutputJsonValue(const std::string& key, const T& value) {m_jsonExecutionOutput[key] = value;}
340 
342  // No attempt to catch exceptions is made here.
343  template<class T>
344  const T getOutputJsonValue(const std::string& key) const
345  {
346  return m_jsonExecutionOutput.at(key);
347  }
348 
350  // No attempt to catch them is made here.
351  template<class T>
352  const T getInputJsonValue(const std::string& key) const
353  {
354  return m_jsonExecutionInput.at(key);
355  }
356 
358  // up on weird errors where someone snuck an array into the member variable.
359  const nlohmann::json& getInputJsonObject() const {return m_jsonExecutionInput;}
360 
362  bool inputJsonKeyExists(const std::string& key) const {return m_jsonExecutionInput.count(key);}
363 
364  private:
365 
366  static const Calibration::ExpRun m_allExpRun;
367 
369  std::string getExpRunString(Calibration::ExpRun& expRun) const;
370 
372  std::string getFullObjectPath(std::string name, Calibration::ExpRun expRun) const;
373 
375  std::vector<std::string> m_inputFileNames;
376 
378  std::map<Calibration::ExpRun, std::vector<std::string>> m_runsToInputFiles;
379 
381  std::string m_granularityOfData;
382 
385 
387  std::string m_description{""};
388 
390  std::string m_prefix{""};
391 
393  // We initialise to "{}" rather than allowing a JSON array/value as the top level type. This forces the user
394  // to use "key":value for storing data in this object. You should test for empty(), is_null() will always
395  // return false due to the empty top level object.
396  // Functionally similar to simple member variables for configuration of the algorithm.
397  // However these input values are easier to use from Python code without needing to know the details of the algorithm.
398  // These values are intended to be used for a single execution, not reused
399  nlohmann::json m_jsonExecutionInput = nlohmann::json::object();
400 
402  // As for input we initialise to an empty "{}" JSON object. Testing for empty() returns true, but is_null() does not.
403  // Nothing is done with these by default, however a calling process may decide to capture these values and use them
404  // as input to a following execution.
405  nlohmann::json m_jsonExecutionOutput = nlohmann::json::object();
406 
407  }; // End of CalibrationAlgorithm definition
408 
409 
410  /**************************************
411  * *
412  * Implementation of larger templates *
413  * *
414  **************************************/
415  template<class T>
416  std::shared_ptr<T> CalibrationAlgorithm::getObjectPtr(const std::string& name,
417  const std::vector<Calibration::ExpRun>& requestedRuns)
418  {
419  // Check if this object already exists
420  RunRange runRangeRequested(requestedRuns);
421  std::shared_ptr<T> objOutputPtr = std::dynamic_pointer_cast<T>(m_data.getCalibObj(name, runRangeRequested));
422  if (objOutputPtr)
423  return objOutputPtr;
424 
425  std::shared_ptr<T> mergedObjPtr(nullptr);
426  bool mergedEmpty = true;
427  TDirectory* dir = gDirectory;
428 
429  // Technically we could grab all the objects from all files, add to list and then merge at the end.
430  // But I prefer the (maybe) more memory efficient way of merging with all objects
431  // in a file before moving on to the next one, just in case TDirectory stuff screws us.
432  TList list;
433  list.SetOwner(false);
434 
435  // Construct the TDirectory names where we expect our objects to be
436  std::string runRangeObjName(getPrefix() + "/" + Calibration::RUN_RANGE_OBJ_NAME);
437 
438  if (strcmp(getGranularity().c_str(), "run") == 0) {
439  // Loop over our runs requested for the right files
440  for (auto expRunRequested : requestedRuns) {
441  // Find the relevant files for this ExpRun
442  auto searchFiles = m_runsToInputFiles.find(expRunRequested);
443  if (searchFiles == m_runsToInputFiles.end()) {
444  B2WARNING("No input file found with data collected from run "
445  "(" << expRunRequested.first << "," << expRunRequested.second << ")");
446  continue;
447  } else {
448  auto files = searchFiles->second;
449  for (auto fileName : files) {
450  RunRange* runRangeData;
451  //Open TFile to get the objects
452  std::unique_ptr<TFile> f;
453  f.reset(TFile::Open(fileName.c_str(), "READ"));
454  runRangeData = dynamic_cast<RunRange*>(f->Get(runRangeObjName.c_str()));
455  // Check that nothing went wrong in the mapping and that this file definitely contains this run's data
456  auto runSet = runRangeData->getExpRunSet();
457  if (runSet.find(expRunRequested) == runSet.end()) {
458  B2WARNING("Something went wrong with the mapping of ExpRun -> Input Files. "
459  "(" << expRunRequested.first << "," << expRunRequested.second << ") not in " << fileName);
460  }
461  // Get the path/directory of the Exp,Run TDirectory that holds the object(s)
462  std::string objDirName = getFullObjectPath(name, expRunRequested);
463  TDirectory* objDir = f->GetDirectory(objDirName.c_str());
464  if (!objDir) {
465  B2ERROR("Directory for requested object " << name << " not found: " << objDirName);
466  return nullptr;
467  }
468  // Find all the objects inside, there may be more than one
469  for (auto key : * (objDir->GetListOfKeys())) {
470  std::string keyName = key->GetName();
471  B2DEBUG(100, "Adding found object " << keyName << " in the directory " << objDir->GetPath());
472  T* objOther = (T*)objDir->Get(keyName.c_str());
473  if (objOther) {
474  if (mergedEmpty) {
475  mergedObjPtr = std::shared_ptr<T>(dynamic_cast<T*>(objOther->Clone(name.c_str())));
476  mergedObjPtr->SetDirectory(0);
477  mergedEmpty = false;
478  } else {
479  list.Add(objOther);
480  }
481  }
482  }
483  if (!mergedEmpty)
484  mergedObjPtr->Merge(&list);
485  list.Clear();
486  }
487  }
488  }
489  } else {
490  for (auto fileName : m_inputFileNames) {
491  //Open TFile to get the objects
492  std::unique_ptr<TFile> f;
493  f.reset(TFile::Open(fileName.c_str(), "READ"));
494  Calibration::ExpRun allGranExpRun = getAllGranularityExpRun();
495  std::string objDirName = getFullObjectPath(name, allGranExpRun);
496  std::string objPath = objDirName + "/" + name + "_1";
497  T* objOther = (T*)f->Get(objPath.c_str()); // Only one index for granularity == all
498  B2DEBUG(100, "Adding " << objPath);
499  if (objOther) {
500  if (mergedEmpty) {
501  mergedObjPtr = std::shared_ptr<T>(dynamic_cast<T*>(objOther->Clone(name.c_str())));
502  mergedObjPtr->SetDirectory(0);
503  mergedEmpty = false;
504  } else {
505  list.Add(objOther);
506  }
507  }
508  if (!mergedEmpty)
509  mergedObjPtr->Merge(&list);
510  list.Clear();
511  }
512  }
513  dir->cd();
514  objOutputPtr = mergedObjPtr;
515  if (!objOutputPtr) {
516  B2ERROR("No data found for object " << name);
517  return nullptr;
518  }
519  objOutputPtr->SetDirectory(0);
520  // make a TNamed version to input to the map of previous calib objects
521  std::shared_ptr<TNamed> storedObjPtr = std::static_pointer_cast<TNamed>(objOutputPtr);
522  m_data.setCalibObj(name, runRangeRequested, storedObjPtr);
523  B2DEBUG(100, "Passing back merged data " << name);
524  return objOutputPtr;
525  }
526 
530  template<> std::shared_ptr<TTree>
532  const std::string& name,
533  const std::vector<Calibration::ExpRun>& requestedRuns);
534 
536 } // namespace Belle2
Belle2::IntervalOfValidity
A class that describes the interval of experiments/runs for which an object in the database is valid.
Definition: IntervalOfValidity.h:35
Belle2::CalibrationAlgorithm::ExecutionData::setIteration
void setIteration(int iteration)
Setter for current iteration.
Definition: CalibrationAlgorithm.h:90
Belle2::CalibrationAlgorithm::getRunRangeFromAllData
RunRange getRunRangeFromAllData() const
Get the complete RunRange from inspection of collected data.
Definition: CalibrationAlgorithm.cc:354
Belle2::CalibrationAlgorithm::CalibrationAlgorithm
CalibrationAlgorithm(const std::string &collectorModuleName)
Constructor - sets the prefix for collected objects (won't be accesses until execute(....
Definition: CalibrationAlgorithm.h:150
Belle2::CalibrationAlgorithm::setInputFileNames
void setInputFileNames(PyObject *inputFileNames)
Set the input file names used for this algorithm from a Python list.
Definition: CalibrationAlgorithm.cc:159
Belle2::CalibrationAlgorithm::ExecutionData
A class to hold all data that is needed ONLY for the most recent single execution of the algorithm.
Definition: CalibrationAlgorithm.h:63
Belle2::CalibrationAlgorithm::ExecutionData::getPayloadValues
std::list< Database::DBImportQuery > getPayloadValues()
Get constants (in TObjects) for database update from last calibration but passed by VALUE.
Definition: CalibrationAlgorithm.h:106
Belle2::CalibrationAlgorithm::ExecutionData::m_mapCalibData
std::map< std::pair< std::string, RunRange >, std::shared_ptr< TNamed > > m_mapCalibData
Map of shared pointers to merged calibration objects created by getObjectPtr() calls.
Definition: CalibrationAlgorithm.h:141
Belle2::CalibrationAlgorithm::getGranularityFromData
std::string getGranularityFromData() const
Get the granularity of collected data.
Definition: CalibrationAlgorithm.cc:377
Belle2::CalibrationAlgorithm::m_jsonExecutionInput
nlohmann::json m_jsonExecutionInput
Optional input JSON object used to make decisions about how to execute the algorithm code.
Definition: CalibrationAlgorithm.h:407
Belle2::CalibrationAlgorithm::ExecutionData::m_iov
IntervalOfValidity m_iov
Current IoV to be executed, default empty. Will be either set by user explicitly or generated from co...
Definition: CalibrationAlgorithm.h:130
Belle2::CalibrationAlgorithm::getFullObjectPath
std::string getFullObjectPath(std::string name, Calibration::ExpRun expRun) const
constructs the full TDirectory + Key name of an object in a TFile based on its name and exprun
Definition: CalibrationAlgorithm.cc:256
Belle2::CalibrationAlgorithm::getInputJsonObject
const nlohmann::json & getInputJsonObject() const
Get the entire top level JSON object. We explicitly say this must be of object type so that we might ...
Definition: CalibrationAlgorithm.h:367
Belle2::CalibrationAlgorithm::convertPyExpRun
Calibration::ExpRun convertPyExpRun(PyObject *pyObj)
Performs the conversion of PyObject to ExpRun.
Definition: CalibrationAlgorithm.cc:63
Belle2::CalibrationAlgorithm::ExecutionData::getRequestedIov
const IntervalOfValidity & getRequestedIov() const
Getter for requested IOV.
Definition: CalibrationAlgorithm.h:102
Belle2::CalibrationAlgorithm::ExecutionData::clearCalibrationData
void clearCalibrationData()
Clear calibration data.
Definition: CalibrationAlgorithm.h:79
Belle2::CalibrationAlgorithm::m_prefix
std::string m_prefix
The name of the TDirectory the collector objects are contained within.
Definition: CalibrationAlgorithm.h:398
Belle2::CalibrationAlgorithm::ExecutionData::setCalibObj
void setCalibObj(const std::string &name, const RunRange &runRange, const std::shared_ptr< TNamed > &objectPtr)
Insert a newly created object in m_mapCalibData. Overwrites a previous entry if one exists.
Definition: CalibrationAlgorithm.h:117
Belle2::CalibrationAlgorithm::m_inputFileNames
std::vector< std::string > m_inputFileNames
List of input files to the Algorithm, will initially be user defined but then gets the wildcards expa...
Definition: CalibrationAlgorithm.h:383
Belle2::CalibrationAlgorithm::getDescription
const std::string & getDescription() const
Get the description of the algoithm (set by developers in constructor)
Definition: CalibrationAlgorithm.h:226
Belle2::CalibrationAlgorithm::getAllGranularityExpRun
Calibration::ExpRun getAllGranularityExpRun() const
Returns the Exp,Run pair that means 'Everything'. Currently unused.
Definition: CalibrationAlgorithm.h:337
Belle2::CalibrationAlgorithm::setPrefix
void setPrefix(const std::string &prefix)
Set the prefix used to identify datastore objects.
Definition: CalibrationAlgorithm.h:177
Belle2::CalibrationAlgorithm::loadInputJson
bool loadInputJson(const std::string &jsonString)
Load the m_inputJson variable from a string (useful from Python interface). The rturn bool indicates ...
Definition: CalibrationAlgorithm.cc:496
Belle2::CalibrationAlgorithm::getPayloads
std::list< Database::DBImportQuery > & getPayloads()
Get constants (in TObjects) for database update from last execution.
Definition: CalibrationAlgorithm.h:214
Belle2::CalibrationAlgorithm::saveCalibration
void saveCalibration(TClonesArray *data, const std::string &name)
Store DBArray payload with given name with default IOV.
Definition: CalibrationAlgorithm.cc:290
Belle2::RunRange::getExpRunSet
const std::set< Calibration::ExpRun > & getExpRunSet()
Get access to the stored set.
Definition: RunRange.h:57
Belle2::CalibrationAlgorithm::ExecutionData::m_payloads
std::list< Database::DBImportQuery > m_payloads
Payloads saved by execution.
Definition: CalibrationAlgorithm.h:132
Belle2::CalibrationAlgorithm::ExecutionData::reset
void reset()
Resets this class back to what is needed at the beginning of an execution.
Definition: CalibrationAlgorithm.h:68
Belle2::CalibrationAlgorithm::c_Iterate
@ c_Iterate
Needs iteration =1 in Python.
Definition: CalibrationAlgorithm.h:52
Belle2::CalibrationAlgorithm::ExecutionData::m_requestedRuns
std::vector< Calibration::ExpRun > m_requestedRuns
Runs for which the calibration has been last requested, either requested explicitly or generated from...
Definition: CalibrationAlgorithm.h:124
Belle2::CalibrationAlgorithm::c_OK
@ c_OK
Finished successfuly =0 in Python.
Definition: CalibrationAlgorithm.h:51
Belle2::CalibrationAlgorithm::resetInputJson
void resetInputJson()
Clears the m_inputJson member variable.
Definition: CalibrationAlgorithm.h:340
Belle2::CalibrationAlgorithm::findPayloadBoundaries
const std::vector< Calibration::ExpRun > findPayloadBoundaries(std::vector< Calibration::ExpRun > runs, int iteration=0)
Used to discover the ExpRun boundaries that you want the Python CAF to execute on....
Definition: CalibrationAlgorithm.cc:514
Belle2::CalibrationAlgorithm::setDescription
void setDescription(const std::string &description)
Set algorithm description (in constructor)
Definition: CalibrationAlgorithm.h:331
Belle2::CalibrationAlgorithm::getObjectPtr
std::shared_ptr< T > getObjectPtr(const std::string &name, const std::vector< Calibration::ExpRun > &requestedRuns)
Get calibration data object by name and list of runs, the Merge function will be called to generate t...
Definition: CalibrationAlgorithm.h:424
Belle2::CalibrationAlgorithm::updateDBObjPtrs
void updateDBObjPtrs(const unsigned int event, const int run, const int experiment)
Updates any DBObjPtrs by calling update(event) for DBStore.
Definition: CalibrationAlgorithm.cc:398
Belle2::CalibrationAlgorithm::checkPyExpRun
bool checkPyExpRun(PyObject *pyObj)
Checks that a PyObject can be successfully converted to an ExpRun type.
Definition: CalibrationAlgorithm.cc:21
Belle2::CalibrationAlgorithm::ExecutionData::setRequestedIov
void setRequestedIov(const IntervalOfValidity &iov=IntervalOfValidity(0, 0, -1, -1))
Sets the requested IoV for this execution, based on the.
Definition: CalibrationAlgorithm.h:100
Belle2::CalibrationAlgorithm::clearCalibrationData
void clearCalibrationData()
Clear calibration data.
Definition: CalibrationAlgorithm.h:334
Belle2::CalibrationAlgorithm::ExecutionData::m_iteration
int m_iteration
current iteration for execution
Definition: CalibrationAlgorithm.h:126
Belle2::CalibrationAlgorithm::calibrate
virtual EResult calibrate()=0
Run algo on data - pure virtual: needs to be implemented.
Belle2::CalibrationAlgorithm::getIovFromAllData
IntervalOfValidity getIovFromAllData() const
Get the complete IoV from inspection of collected data.
Definition: CalibrationAlgorithm.cc:318
Belle2::CalibrationAlgorithm::getVecInputFileNames
std::vector< std::string > getVecInputFileNames() const
Get the input file names used for this algorithm as a STL vector.
Definition: CalibrationAlgorithm.h:285
Belle2::CalibrationAlgorithm::inputJsonKeyExists
bool inputJsonKeyExists(const std::string &key) const
Test for a key in the input JSON object.
Definition: CalibrationAlgorithm.h:370
Belle2::CalibrationAlgorithm::ExecutionData::getRequestedRuns
const std::vector< Calibration::ExpRun > & getRequestedRuns() const
Returns the vector of ExpRuns.
Definition: CalibrationAlgorithm.h:84
Belle2::CalibrationAlgorithm::getCollectorName
std::string getCollectorName() const
Alias for prefix.
Definition: CalibrationAlgorithm.h:174
Belle2::CalibrationAlgorithm::boundaryFindingSetup
virtual void boundaryFindingSetup(std::vector< Calibration::ExpRun >, int)
If you need to make some changes to your algorithm class before 'findPayloadBoundaries' is run,...
Definition: CalibrationAlgorithm.h:262
Belle2::CalibrationAlgorithm::isBoundaryRequired
virtual bool isBoundaryRequired(const Calibration::ExpRun &)
Given the current collector data, make a decision about whether or not this run should be the start o...
Definition: CalibrationAlgorithm.h:253
Belle2::CalibrationAlgorithm::getRunListFromAllData
std::vector< Calibration::ExpRun > getRunListFromAllData() const
Get the complete list of runs from inspection of collected data.
Definition: CalibrationAlgorithm.cc:311
Belle2::CalibrationAlgorithm::execute
EResult execute(std::vector< Calibration::ExpRun > runs={}, int iteration=0, IntervalOfValidity iov=IntervalOfValidity())
Runs calibration over vector of runs for a given iteration.
Belle2::CalibrationAlgorithm::m_granularityOfData
std::string m_granularityOfData
Granularity of input data. This only changes when the input files change so it isn't specific to an e...
Definition: CalibrationAlgorithm.h:389
Belle2::CalibrationAlgorithm::fillRunToInputFilesMap
void fillRunToInputFilesMap()
Fill the mapping of ExpRun -> Files.
Definition: CalibrationAlgorithm.cc:323
Belle2
Abstract base class for different kinds of events.
Definition: MillepedeAlgorithm.h:19
Belle2::CalibrationAlgorithm::m_jsonExecutionOutput
nlohmann::json m_jsonExecutionOutput
Optional output JSON object that can be set during the execution by the underlying algorithm code.
Definition: CalibrationAlgorithm.h:413
Belle2::CalibrationAlgorithm::getGranularity
std::string getGranularity() const
Get the granularity of collected data.
Definition: CalibrationAlgorithm.h:198
Belle2::CalibrationAlgorithm::c_Failure
@ c_Failure
Failed =3 in Python.
Definition: CalibrationAlgorithm.h:54
Belle2::CalibrationAlgorithm::ExecutionData::setResult
void setResult(EResult result)
Setter for current iteration.
Definition: CalibrationAlgorithm.h:98
Belle2::CalibrationAlgorithm::getInputFileNames
PyObject * getInputFileNames()
Get the input file names used for this algorithm and pass them out as a Python list of unicode string...
Definition: CalibrationAlgorithm.cc:238
Belle2::CalibrationAlgorithm::ExecutionData::setRequestedRuns
void setRequestedRuns(const std::vector< Calibration::ExpRun > &requestedRuns)
Sets the vector of ExpRuns.
Definition: CalibrationAlgorithm.h:86
Belle2::CalibrationAlgorithm::resetOutputJson
void resetOutputJson()
Clears the m_outputJson member variable.
Definition: CalibrationAlgorithm.h:343
Belle2::CalibrationAlgorithm::ExecutionData::getPayloads
std::list< Database::DBImportQuery > & getPayloads()
Get constants (in TObjects) for database update from last calibration.
Definition: CalibrationAlgorithm.h:104
Belle2::CalibrationAlgorithm::getExpRunString
std::string getExpRunString(Calibration::ExpRun &expRun) const
Gets the "exp.run" string repr. of (exp,run)
Definition: CalibrationAlgorithm.cc:247
Belle2::CalibrationAlgorithm::getInputJsonValue
const T getInputJsonValue(const std::string &key) const
Get an input JSON value using a key. The normal exceptions are raised when the key doesn't exist.
Definition: CalibrationAlgorithm.h:360
Belle2::CalibrationAlgorithm::ExecutionData::getIteration
int getIteration() const
Getter for current iteration.
Definition: CalibrationAlgorithm.h:88
Belle2::CalibrationAlgorithm::setOutputJsonValue
void setOutputJsonValue(const std::string &key, const T &value)
Set a key:value pair for the outputJson object, expected to used interally during calibrate()
Definition: CalibrationAlgorithm.h:347
Belle2::CalibrationAlgorithm::EResult
EResult
The result of calibration.
Definition: CalibrationAlgorithm.h:50
Belle2::CalibrationAlgorithm::getIteration
int getIteration() const
Get current iteration.
Definition: CalibrationAlgorithm.h:279
Belle2::CalibrationAlgorithm::getRunList
const std::vector< Calibration::ExpRun > & getRunList() const
Get the list of runs for which calibration is called.
Definition: CalibrationAlgorithm.h:276
Belle2::CalibrationAlgorithm::m_runsToInputFiles
std::map< Calibration::ExpRun, std::vector< std::string > > m_runsToInputFiles
Map of Runs to input files. Gets filled when you call getRunRangeFromAllData, gets cleared when setti...
Definition: CalibrationAlgorithm.h:386
Belle2::CalibrationAlgorithm::boundaryFindingTearDown
virtual void boundaryFindingTearDown()
Put your algorithm back into a state ready for normal execution if you need to.
Definition: CalibrationAlgorithm.h:267
Belle2::CalibrationAlgorithm::c_NotEnoughData
@ c_NotEnoughData
Needs more data =2 in Python.
Definition: CalibrationAlgorithm.h:53
Belle2::CalibrationAlgorithm::ExecutionData::m_result
EResult m_result
Result of execution, default undefined to indicate we haven't run yet.
Definition: CalibrationAlgorithm.h:128
Belle2::CalibrationAlgorithm::commit
bool commit()
Submit constants from last calibration into database.
Definition: CalibrationAlgorithm.cc:295
Belle2::CalibrationAlgorithm::ExecutionData::getResult
EResult getResult() const
Getter for current result.
Definition: CalibrationAlgorithm.h:96
Belle2::CalibrationAlgorithm::ExecutionData::getCalibObj
std::shared_ptr< TNamed > getCalibObj(const std::string &name, const RunRange &runRange) const
Get a previously created object in m_mapCalibData if one exists, otherwise return shared_ptr(nullptr)
Definition: CalibrationAlgorithm.h:108
Belle2::RunRange
Mergeable object holding (unique) set of (exp,run) pairs.
Definition: RunRange.h:18
Belle2::CalibrationAlgorithm::m_description
std::string m_description
Description of the algorithm.
Definition: CalibrationAlgorithm.h:395
Belle2::CalibrationAlgorithm::dumpOutputJson
const std::string dumpOutputJson() const
Dump the JSON string of the output JSON object.
Definition: CalibrationAlgorithm.h:233
Belle2::CalibrationAlgorithm::getOutputJsonValue
const T getOutputJsonValue(const std::string &key) const
Get a value using a key from the JSON output object, not sure why you would want to do this.
Definition: CalibrationAlgorithm.h:352
Belle2::CalibrationAlgorithm::c_Undefined
@ c_Undefined
Not yet known (before execution) =4 in Python.
Definition: CalibrationAlgorithm.h:55
Belle2::CalibrationAlgorithm::m_data
ExecutionData m_data
Data specific to a SINGLE execution of the algorithm. Gets reset at the beginning of execution.
Definition: CalibrationAlgorithm.h:392
Belle2::CalibrationAlgorithm::getPayloadValues
std::list< Database::DBImportQuery > getPayloadValues()
Get constants (in TObjects) for database update from last execution but passed by VALUE.
Definition: CalibrationAlgorithm.h:217
Belle2::CalibrationAlgorithm::getPrefix
std::string getPrefix() const
Get the prefix used for getting calibration data.
Definition: CalibrationAlgorithm.h:156
Belle2::CalibrationAlgorithm::~CalibrationAlgorithm
virtual ~CalibrationAlgorithm()
Virtual destructor (base class)
Definition: CalibrationAlgorithm.h:153