Geant4 Cross Reference |
1 // 1 2 // ******************************************* 3 // * License and Disclaimer 4 // * 5 // * The Geant4 software is copyright of th 6 // * the Geant4 Collaboration. It is provided 7 // * conditions of the Geant4 Software License 8 // * LICENSE and available at http://cern.ch/ 9 // * include a list of copyright holders. 10 // * 11 // * Neither the authors of this software syst 12 // * institutes,nor the agencies providing fin 13 // * work make any representation or warran 14 // * regarding this software system or assum 15 // * use. Please see the license in the file 16 // * for the full disclaimer and the limitatio 17 // * 18 // * This code implementation is the result 19 // * technical work of the GEANT4 collaboratio 20 // * By using, copying, modifying or distri 21 // * any work based on the software) you ag 22 // * use in resulting scientific publicati 23 // * acceptance of all terms of the Geant4 Sof 24 // ******************************************* 25 // 26 27 // Author: Ivana Hrivnacova, 21/11/2018 (ivana 28 29 #include "G4RootMpiAnalysisManager.hh" 30 31 #include "G4AnalysisUtilities.hh" 32 #include "G4RootMpiNtupleFileManager.hh" 33 #include "G4RootMpiNtupleManager.hh" 34 #include "G4RootMpiPNtupleManager.hh" 35 36 #include <tools/impi> 37 38 using namespace G4Analysis; 39 40 //____________________________________________ 41 G4RootMpiAnalysisManager* G4RootMpiAnalysisMan 42 { 43 return fgInstance; 44 } 45 46 //____________________________________________ 47 G4RootMpiAnalysisManager::G4RootMpiAnalysisMan 48 { 49 fgInstance = this; 50 51 // Reset the ntuple file manager 52 fNtupleFileManager.reset(); 53 54 // Ntuple file manager 55 fNtupleFileManager = std::make_shared<G4Root 56 SetNtupleFileManager(fNtupleFileManager); 57 fNtupleFileManager->SetFileManager(fFileMana 58 fNtupleFileManager->SetBookingManager(fNtupl 59 } 60 61 //____________________________________________ 62 G4RootMpiAnalysisManager::~G4RootMpiAnalysisMa 63 { 64 fgInstance = 0; 65 } 66 67 // 68 // public methods 69 // 70 71 //____________________________________________ 72 void G4RootMpiAnalysisManager::SetMpiNtupleMer 73 74 { 75 // G4cout << "SetMpiNtupleMerging: " 76 // << impi << ", " 77 // << mpiRank << "," 78 // << mpiSize << "," 79 // << nofNtupleFiles << G4endl; 80 81 std::static_pointer_cast<G4RootMpiNtupleFile 82 ->SetMpiNtupleMerging(impi, mpiRank, mpiSi 83 } 84 85 // 86 // protected methods 87 // 88 89 //____________________________________________ 90 G4bool G4RootMpiAnalysisManager::OpenFileImpl( 91 { 92 if (fNtupleFileManager->GetMergeMode() == G4 93 return G4ToolsAnalysisManager::OpenFileImp 94 } 95 96 // Create ntuple manager(s) 97 // and set it to base class which takes then 98 if (!fVNtupleManager) { 99 SetNtupleManager(fNtupleFileManager->Creat 100 } 101 102 auto result = true; 103 104 // Open file 105 // In difference from base class a file is o 106 result &= fFileManager->OpenFile(fileName); 107 108 // Open ntuple file(s) and create ntuples fr 109 result &= fNtupleFileManager->ActionAtOpenFi 110 111 return result; 112 } 113 114 //____________________________________________ 115 G4bool G4RootMpiAnalysisManager::WriteImpl() 116 { 117 auto result = true; 118 119 // Call base class method 120 result &= G4ToolsAnalysisManager::WriteImpl( 121 122 // Write file also on Slave 123 // (skipped in base class) 124 if (fNtupleFileManager->GetMergeMode() == G4 125 // write all open files 126 result &= fFileManager->WriteFiles(); 127 } 128 129 Message(kVL2, "write", "slave files", "", re 130 131 return result; 132 } 133 134 //____________________________________________ 135 G4bool G4RootMpiAnalysisManager::CloseFileImpl 136 { 137 // Cannot call base class function, as we ne 138 // on slave; an option in the base class can 139 140 Message(kVL4, "close", "files"); 141 142 auto result = true; 143 if (fVNtupleFileManager) { 144 result &= fVNtupleFileManager->ActionAtClo 145 } 146 147 // close file also on Slave 148 // - the conditoon used in the base class is 149 // if ( (fVNtupleFileManager == nullptr) || 150 // (fVNtupleFileManager->GetMergeMode() 151 if (!fVFileManager->CloseFiles()) { 152 Warn("Closing files failed", fkClass, "Clo 153 result = false; 154 } 155 // } 156 157 // delete empty files 158 if (!fVFileManager->DeleteEmptyFiles()) { 159 Warn("Deleting empty files failed", fkClas 160 result = false; 161 } 162 163 // reset histograms 164 if (reset) { 165 if (!Reset()) { 166 Warn("Resetting data failed", fkClass, " 167 result = false; 168 } 169 } 170 171 Message(kVL3, "close", "files", "", result); 172 G4cout << "### Done G4RootMpiAnalysisManager 173 174 return result; 175 } 176