Geant4 Cross Reference |
1 // 2 // ******************************************************************** 3 // * License and Disclaimer * 4 // * * 5 // * The Geant4 software is copyright of the Copyright Holders of * 6 // * the Geant4 Collaboration. It is provided under the terms and * 7 // * conditions of the Geant4 Software License, included in the file * 8 // * LICENSE and available at http://cern.ch/geant4/license . These * 9 // * include a list of copyright holders. * 10 // * * 11 // * Neither the authors of this software system, nor their employing * 12 // * institutes,nor the agencies providing financial support for this * 13 // * work make any representation or warranty, express or implied, * 14 // * regarding this software system or assume any liability for its * 15 // * use. Please see the license in the file LICENSE and URL above * 16 // * for the full disclaimer and the limitation of liability. * 17 // * * 18 // * This code implementation is the result of the scientific and * 19 // * technical work of the GEANT4 collaboration. * 20 // * By using, copying, modifying or distributing the software (or * 21 // * any work based on the software) you agree to acknowledge its * 22 // * use in resulting scientific publications, and indicate your * 23 // * acceptance of all terms of the Geant4 Software license. * 24 // ******************************************************************** 25 // 26 27 // The common implementation of analysis manager classes. 28 29 // Author: Ivana Hrivnacova, 18/06/2013 (ivana@ipno.in2p3.fr) 30 31 #ifndef G4ToolsAnalysisManager_h 32 #define G4ToolsAnalysisManager_h 1 33 34 #include "G4VAnalysisManager.hh" 35 #include "G4TH1ToolsManager.hh" 36 #include "G4TH2ToolsManager.hh" 37 #include "G4TH3ToolsManager.hh" 38 #include "G4TP1ToolsManager.hh" 39 #include "G4TP2ToolsManager.hh" 40 #include "globals.hh" 41 42 #include "tools/histo/h1d" 43 #include "tools/histo/h2d" 44 #include "tools/histo/h3d" 45 #include "tools/histo/p1d" 46 #include "tools/histo/p2d" 47 48 #include <string_view> 49 50 class G4PlotManager; 51 52 template <unsigned int DIM, typename HT> 53 class G4THnToolsManager; 54 55 namespace tools { 56 namespace histo { 57 class hmpi; 58 } 59 } 60 61 class G4ToolsAnalysisManager : public G4VAnalysisManager 62 { 63 friend class G4ToolsAnalysisMessenger; 64 65 public: 66 ~G4ToolsAnalysisManager() override; 67 68 // Static methods 69 static G4ToolsAnalysisManager* Instance(); 70 static G4bool IsInstance(); 71 72 // Access methods 73 tools::histo::h1d* GetH1(G4int id, G4bool warn = true, 74 G4bool onlyIfActive = true) const; 75 tools::histo::h2d* GetH2(G4int id, G4bool warn = true, 76 G4bool onlyIfActive = true) const; 77 tools::histo::h3d* GetH3(G4int id, G4bool warn = true, 78 G4bool onlyIfActive = true) const; 79 tools::histo::p1d* GetP1(G4int id, G4bool warn = true, 80 G4bool onlyIfActive = true) const; 81 tools::histo::p2d* GetP2(G4int id, G4bool warn = true, 82 G4bool onlyIfActive = true) const; 83 84 // Iterators 85 std::vector<tools::histo::h1d*>::iterator BeginH1(); 86 std::vector<tools::histo::h1d*>::iterator EndH1(); 87 std::vector<tools::histo::h1d*>::const_iterator BeginConstH1() const; 88 std::vector<tools::histo::h1d*>::const_iterator EndConstH1() const; 89 90 std::vector<tools::histo::h2d*>::iterator BeginH2(); 91 std::vector<tools::histo::h2d*>::iterator EndH2(); 92 std::vector<tools::histo::h2d*>::const_iterator BeginConstH2() const; 93 std::vector<tools::histo::h2d*>::const_iterator EndConstH2() const; 94 95 std::vector<tools::histo::h3d*>::iterator BeginH3(); 96 std::vector<tools::histo::h3d*>::iterator EndH3(); 97 std::vector<tools::histo::h3d*>::const_iterator BeginConstH3() const; 98 std::vector<tools::histo::h3d*>::const_iterator EndConstH3() const; 99 100 std::vector<tools::histo::p1d*>::iterator BeginP1(); 101 std::vector<tools::histo::p1d*>::iterator EndP1(); 102 std::vector<tools::histo::p1d*>::const_iterator BeginConstP1() const; 103 std::vector<tools::histo::p1d*>::const_iterator EndConstP1() const; 104 105 std::vector<tools::histo::p2d*>::iterator BeginP2(); 106 std::vector<tools::histo::p2d*>::iterator EndP2(); 107 std::vector<tools::histo::p2d*>::const_iterator BeginConstP2() const; 108 std::vector<tools::histo::p2d*>::const_iterator EndConstP2() const; 109 110 protected: 111 explicit G4ToolsAnalysisManager(const G4String& type); 112 113 // Virtual methods from base class 114 G4bool OpenFileImpl(const G4String& fileName) override; 115 G4bool WriteImpl() override; 116 G4bool CloseFileImpl(G4bool reset) override; 117 G4bool ResetImpl() override; 118 void ClearImpl() override; 119 G4bool PlotImpl() final; 120 G4bool MergeImpl(tools::histo::hmpi* hmpi) final; 121 G4bool IsOpenFileImpl() const final; 122 123 // Methods 124 G4bool IsEmpty(); 125 126 // Static data members 127 inline static G4ToolsAnalysisManager* fgMasterToolsInstance { nullptr }; 128 inline static G4ThreadLocal G4ToolsAnalysisManager* fgToolsInstance { nullptr }; 129 static constexpr std::string_view fkClass { "G4ToolsAnalysisManager" }; 130 131 // Data members 132 G4THnToolsManager<kDim1, tools::histo::h1d>* fH1Manager { nullptr }; 133 G4THnToolsManager<kDim2, tools::histo::h2d>* fH2Manager { nullptr }; 134 G4THnToolsManager<kDim3, tools::histo::h3d>* fH3Manager { nullptr }; 135 G4THnToolsManager<kDim2, tools::histo::p1d>* fP1Manager { nullptr }; 136 G4THnToolsManager<kDim3, tools::histo::p2d>* fP2Manager { nullptr }; 137 138 private: 139 // // Static data members 140 // Static G4ThreadLocal G4ToolsAnalysisManager* fgToolsInstance; 141 // Methods 142 template <typename HT> 143 G4bool WriteT(const std::vector<std::pair<HT*, G4HnInformation*>>& hnVector); 144 145 G4bool WriteHns(); 146 G4bool ResetHns(); 147 G4bool MergeHns(); 148 149 // Data members 150 std::shared_ptr<G4PlotManager> fPlotManager { nullptr }; 151 }; 152 153 #include "G4ToolsAnalysisManager.icc" 154 155 #endif 156