MpdFemtoManager.h 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. /**
  2. * \class MpdFemtoManager
  3. * \brief The Manager is the top-level object containing an EventReader
  4. * (the input), and collections of EventWriters and MpdFemtoAnalyses
  5. * (the outputs)
  6. *
  7. * Manager is the top-level object containing an EventReader
  8. * (the input), and collections of EventWriters and MpdFemtoAnalyses
  9. * (the outputs).
  10. *
  11. * A manager object is owned by an MpdFemtoTaskFemto object which
  12. * calls the `processEvent()` method, which reads an MpdFemtoEvent
  13. * from the input files, and forwards it to the `processEvent` method
  14. * in each output analysis, which is responsible for carrying out the
  15. * actual cuts & computation.
  16. *
  17. * MpdFemtoManager objects "own" the EventReader, Analyses, and
  18. * EventWriters added to them, and is responsible for deleting them
  19. * upon its own destruction.
  20. *
  21. * MpdFemtoManager objects are not copyable, as the MpdFemtoAnalysis
  22. * objects they contain have no means of copying/cloning.
  23. * Denying copyability by making the copy constructor and assignment
  24. * operator private prevents potential dangling pointer (segfault)
  25. * errors.
  26. *
  27. * \author Grigory Nigmatkulov (NRNU MEPhI)
  28. * \date May 18, 2019
  29. * \email nigmatkulov@gmail.com
  30. */
  31. #ifndef MpdFemtoManager_h
  32. #define MpdFemtoManager_h
  33. // MpdFemtoMaker headers
  34. // Base
  35. #include "MpdFemtoBaseAnalysis.h"
  36. #include "MpdFemtoBaseEventReader.h"
  37. #include "MpdFemtoBaseEventWriter.h"
  38. // Infrastructure
  39. #include "MpdFemtoTypes.h"
  40. #include "MpdFemtoAnalysisCollection.h"
  41. #include "MpdFemtoEventWriterCollection.h"
  42. #include "MpdFemtoEvent.h"
  43. //_________________
  44. class MpdFemtoManager {
  45. public:
  46. /// Default constructor
  47. MpdFemtoManager();
  48. /// Copy constructor
  49. MpdFemtoManager(const MpdFemtoManager& copy);
  50. /// Copy constructor
  51. MpdFemtoManager& operator=(const MpdFemtoManager& man);
  52. /// Default destructor
  53. virtual ~MpdFemtoManager();
  54. /// Return pointer to the analysis collection
  55. MpdFemtoAnalysisCollection *analysisCollection() {
  56. return mAnalysisCollection;
  57. }
  58. /// Access to the n-th analysis within Collection
  59. MpdFemtoBaseAnalysis *analysis(int n);
  60. /// Add analysis
  61. void addAnalysis(MpdFemtoBaseAnalysis *analysis) {
  62. mAnalysisCollection->push_back(analysis);
  63. }
  64. /// Return pointer to the Collection of event writers
  65. MpdFemtoEventWriterCollection* eventWriterCollection() {
  66. return mEventWriterCollection;
  67. }
  68. /// Access to n-th EventWriter within Collection
  69. MpdFemtoBaseEventWriter *eventWriter(int n);
  70. /// Add event writer
  71. void setEventWriter(MpdFemtoBaseEventWriter *writer) {
  72. addEventWriter(writer);
  73. }
  74. /// Add event writer
  75. void addEventWriter(MpdFemtoBaseEventWriter* writer) {
  76. mEventWriterCollection->push_back(writer);
  77. }
  78. /// Return event reader
  79. MpdFemtoBaseEventReader* eventReader() {
  80. return mEventReader;
  81. }
  82. /// Add EventReader
  83. void setEventReader(MpdFemtoBaseEventReader* reader) {
  84. mEventReader = reader;
  85. }
  86. /// Calls `init()` on all owned EventWriters
  87. /// Returns 0 for success, 1 for failure.
  88. int init();
  89. /// A "0" return value means success - otherwise quit
  90. int processEvent();
  91. /// Calls `Finish()` on the EventReader, EventWriters, and the Analyses.
  92. void finish();
  93. /// Construct report
  94. MpdFemtoString report();
  95. private:
  96. /// Pointer to a collection of analyses
  97. MpdFemtoAnalysisCollection *mAnalysisCollection;
  98. /// Pointer to event reader
  99. MpdFemtoBaseEventReader *mEventReader;
  100. /// Pointer to a collection of event writers
  101. MpdFemtoEventWriterCollection *mEventWriterCollection;
  102. ClassDef(MpdFemtoManager, 0)
  103. };
  104. #endif // MpdFemtoManager_h