Geant4 Cross Reference |
1 // 1 // 2 // ******************************************* 2 // ******************************************************************** 3 // * License and Disclaimer 3 // * License and Disclaimer * 4 // * 4 // * * 5 // * The Geant4 software is copyright of th 5 // * The Geant4 software is copyright of the Copyright Holders of * 6 // * the Geant4 Collaboration. It is provided 6 // * the Geant4 Collaboration. It is provided under the terms and * 7 // * conditions of the Geant4 Software License 7 // * conditions of the Geant4 Software License, included in the file * 8 // * LICENSE and available at http://cern.ch/ 8 // * LICENSE and available at http://cern.ch/geant4/license . These * 9 // * include a list of copyright holders. 9 // * include a list of copyright holders. * 10 // * 10 // * * 11 // * Neither the authors of this software syst 11 // * Neither the authors of this software system, nor their employing * 12 // * institutes,nor the agencies providing fin 12 // * institutes,nor the agencies providing financial support for this * 13 // * work make any representation or warran 13 // * work make any representation or warranty, express or implied, * 14 // * regarding this software system or assum 14 // * regarding this software system or assume any liability for its * 15 // * use. Please see the license in the file 15 // * use. Please see the license in the file LICENSE and URL above * 16 // * for the full disclaimer and the limitatio 16 // * for the full disclaimer and the limitation of liability. * 17 // * 17 // * * 18 // * This code implementation is the result 18 // * This code implementation is the result of the scientific and * 19 // * technical work of the GEANT4 collaboratio 19 // * technical work of the GEANT4 collaboration. * 20 // * By using, copying, modifying or distri 20 // * By using, copying, modifying or distributing the software (or * 21 // * any work based on the software) you ag 21 // * any work based on the software) you agree to acknowledge its * 22 // * use in resulting scientific publicati 22 // * use in resulting scientific publications, and indicate your * 23 // * acceptance of all terms of the Geant4 Sof 23 // * acceptance of all terms of the Geant4 Software license. * 24 // ******************************************* 24 // ******************************************************************** 25 // 25 // 26 26 27 // Author: Ivana Hrivnacova, 24/06/2013 (ivan 27 // Author: Ivana Hrivnacova, 24/06/2013 (ivana@ipno.in2p3.fr) 28 28 29 #include "G4AnalysisMessenger.hh" 29 #include "G4AnalysisMessenger.hh" 30 #include "G4VAnalysisManager.hh" 30 #include "G4VAnalysisManager.hh" >> 31 #include "G4FileMessenger.hh" >> 32 #include "G4H1Messenger.hh" >> 33 #include "G4H2Messenger.hh" >> 34 #include "G4H3Messenger.hh" >> 35 #include "G4P1Messenger.hh" >> 36 #include "G4P2Messenger.hh" 31 #include "G4NtupleMessenger.hh" 37 #include "G4NtupleMessenger.hh" >> 38 #include "G4HnMessenger.hh" >> 39 #include "G4AnalysisUtilities.hh" 32 40 33 #include "G4UIcmdWithABool.hh" 41 #include "G4UIcmdWithABool.hh" 34 #include "G4UIcmdWithAnInteger.hh" 42 #include "G4UIcmdWithAnInteger.hh" 35 #include "G4UIcmdWithAString.hh" << 36 #include "G4UIcmdWithoutParameter.hh" << 37 #include "G4Threading.hh" << 38 43 39 using namespace G4Analysis; 44 using namespace G4Analysis; 40 45 41 //____________________________________________ 46 //_____________________________________________________________________________ 42 G4AnalysisMessenger::G4AnalysisMessenger(G4VAn 47 G4AnalysisMessenger::G4AnalysisMessenger(G4VAnalysisManager* manager) 43 : fManager(manager) << 48 : G4UImessenger(), 44 { << 49 fManager(manager), 45 fAnalysisDir = std::make_unique<G4UIdirector << 50 fFileMessenger(nullptr), >> 51 fH1Messenger(nullptr), >> 52 fH2Messenger(nullptr), >> 53 fH3Messenger(nullptr), >> 54 fP1Messenger(nullptr), >> 55 fP2Messenger(nullptr), >> 56 fNtupleMessenger(nullptr), >> 57 fH1HnMessenger(nullptr), >> 58 fH2HnMessenger(nullptr), >> 59 fH3HnMessenger(nullptr), >> 60 fP1HnMessenger(nullptr), >> 61 fP2HnMessenger(nullptr), >> 62 fAnalysisDir(nullptr), >> 63 fSetActivationCmd(nullptr), >> 64 fVerboseCmd(nullptr), >> 65 fCompressionCmd(nullptr) >> 66 { >> 67 fAnalysisDir = G4Analysis::make_unique<G4UIdirectory>("/analysis/"); 46 fAnalysisDir->SetGuidance("analysis control" 68 fAnalysisDir->SetGuidance("analysis control"); 47 69 48 fOpenFileCmd = CreateCommand<G4UIcmdWithAStr << 70 fSetActivationCmd = G4Analysis::make_unique<G4UIcmdWithABool>("/analysis/setActivation",this); 49 "openFile", "Open analysis file", "FileNam << 71 G4String guidance = "Set activation. \n"; 50 fOpenFileCmd->SetDefaultValue(""); << 72 guidance += "When this option is enabled, only the histograms marked as activated\n"; 51 fOpenFileCmd->SetToBeBroadcasted(true); << 73 guidance += "are returned, filled or saved on file.\n"; 52 << 74 guidance += "No warning is issued when Get or Fill is called on inactive histogram."; 53 fWriteCmd = CreateCommandWithoutParameter( << 75 fSetActivationCmd->SetGuidance(guidance); 54 "write", "Write analysis data."); << 76 fSetActivationCmd->SetParameterName("Activation",false); 55 fWriteCmd->SetToBeBroadcasted(false); << 77 56 << 78 fVerboseCmd = G4Analysis::make_unique<G4UIcmdWithAnInteger>("/analysis/verbose",this); 57 fResetCmd = CreateCommandWithoutParameter( << 79 fVerboseCmd->SetGuidance("Set verbose level"); 58 "reset", "Reset analysis data."); << 80 fVerboseCmd->SetParameterName("VerboseLevel",false); 59 fResetCmd->SetToBeBroadcasted(false); << 60 << 61 fCloseFileCmd = CreateCommand<G4UIcmdWithABo << 62 "closeFile", "Close analysis file and (opt << 63 fCloseFileCmd->SetDefaultValue(true); << 64 fCloseFileCmd->SetToBeBroadcasted(false); << 65 << 66 fListCmd = CreateCommand<G4UIcmdWithABool>( << 67 "list", "List all/activate analysis object << 68 fListCmd->SetDefaultValue(true); << 69 << 70 fSetDefaultFileTypeCmd = CreateCommand<G4UIc << 71 "setDefaultFileType", "Set default output << 72 #ifdef TOOLS_USE_HDF5 << 73 fSetDefaultFileTypeCmd->SetCandidates("csv h << 74 #else << 75 fSetDefaultFileTypeCmd->SetCandidates("csv r << 76 #endif << 77 << 78 fSetActivationCmd = CreateCommand<G4UIcmdWit << 79 "setActivation", << 80 "Set activation. \n" << 81 "When this option is enabled, only the his << 82 "are returned, filled or saved on file.\n" << 83 "No warning is issued when Get or Fill is << 84 "Activation"); << 85 << 86 fVerboseCmd = CreateCommand<G4UIcmdWithAnInt << 87 "verbose", "Set verbose level", "VerboseLe << 88 fVerboseCmd->SetRange("VerboseLevel>=0 && Ve 81 fVerboseCmd->SetRange("VerboseLevel>=0 && VerboseLevel<=4"); 89 << 82 90 fCompressionCmd = CreateCommand<G4UIcmdWithA << 83 fCompressionCmd = G4Analysis::make_unique<G4UIcmdWithAnInteger>("/analysis/compression",this); 91 "compression", "Set compression level", "C << 84 fCompressionCmd->SetGuidance("Set compression level"); >> 85 fCompressionCmd->SetParameterName("CompressionLevel",false); 92 fCompressionCmd->SetRange("CompressionLevel> 86 fCompressionCmd->SetRange("CompressionLevel>=0 && CompressionLevel<=4"); 93 << 87 94 fSetFileNameCmd = CreateCommand<G4UIcmdWithA << 88 fFileMessenger = G4Analysis::make_unique<G4FileMessenger>(manager); 95 "setFileName", "Set name for the histogram << 89 fH1Messenger = G4Analysis::make_unique<G4H1Messenger>(manager); 96 << 90 fH2Messenger = G4Analysis::make_unique<G4H2Messenger>(manager); 97 fSetHistoDirNameCmd = CreateCommand<G4UIcmdW << 91 fH3Messenger = G4Analysis::make_unique<G4H3Messenger>(manager); 98 "setHistoDirName", "Set name for the histo << 92 fP1Messenger = G4Analysis::make_unique<G4P1Messenger>(manager); 99 << 93 fP2Messenger = G4Analysis::make_unique<G4P2Messenger>(manager); 100 fSetNtupleDirNameCmd = CreateCommand<G4UIcmd << 94 fNtupleMessenger = G4Analysis::make_unique<G4NtupleMessenger>(manager); 101 "setNtupleDirName", "Set name for the ntup << 102 << 103 fNtupleMessenger = std::make_unique<G4Ntuple << 104 } 95 } 105 96 106 //____________________________________________ 97 //_____________________________________________________________________________ 107 G4AnalysisMessenger::~G4AnalysisMessenger() = << 98 G4AnalysisMessenger::~G4AnalysisMessenger() >> 99 {} 108 100 109 // 101 // 110 // private functions << 102 // public functions 111 // 103 // 112 104 >> 105 //_____________________________________________________________________________ >> 106 void G4AnalysisMessenger::SetH1HnManager(G4HnManager& h1HnManager) >> 107 { >> 108 fH1HnMessenger = G4Analysis::make_unique<G4HnMessenger>(h1HnManager); >> 109 } 113 110 114 //____________________________________________ 111 //_____________________________________________________________________________ 115 std::unique_ptr<G4UIcmdWithoutParameter> << 112 void G4AnalysisMessenger::SetH2HnManager(G4HnManager& h2HnManager) 116 G4AnalysisMessenger::CreateCommandWithoutParam << 117 G4String name, G4String guidance) << 118 { 113 { 119 G4String fullName = "/analysis/" + name; << 114 fH2HnMessenger = G4Analysis::make_unique<G4HnMessenger>(h2HnManager); >> 115 } 120 116 121 auto command = std::make_unique<G4UIcmdWitho << 117 //_____________________________________________________________________________ 122 command->SetGuidance(guidance.c_str()); << 118 void G4AnalysisMessenger::SetH3HnManager(G4HnManager& h2HnManager) 123 command->AvailableForStates(G4State_PreInit, << 119 { >> 120 fH2HnMessenger = G4Analysis::make_unique<G4HnMessenger>(h2HnManager); >> 121 } 124 122 125 return command; << 123 //_____________________________________________________________________________ 126 } << 124 void G4AnalysisMessenger::SetP1HnManager(G4HnManager& p1HnManager) >> 125 { >> 126 fP1HnMessenger = G4Analysis::make_unique<G4HnMessenger>(p1HnManager); >> 127 } 127 128 128 // << 129 //_____________________________________________________________________________ 129 // public functions << 130 void G4AnalysisMessenger::SetP2HnManager(G4HnManager& p2HnManager) 130 // << 131 { >> 132 fP2HnMessenger = G4Analysis::make_unique<G4HnMessenger>(p2HnManager); >> 133 } 131 134 132 //____________________________________________ 135 //_____________________________________________________________________________ 133 void G4AnalysisMessenger::SetNewValue(G4UIcomm 136 void G4AnalysisMessenger::SetNewValue(G4UIcommand* command, G4String newValues) 134 { 137 { 135 if ( command == fOpenFileCmd.get() ) { << 136 // G4cout << "Calling OpenFile from comman << 137 fManager->OpenFile(newValues); << 138 return; << 139 } << 140 << 141 if ( command == fWriteCmd.get() ) { << 142 fManager->WriteFromUI(); << 143 return; << 144 } << 145 << 146 if ( command == fResetCmd.get() ) { << 147 fManager->ResetFromUI(); << 148 return; << 149 } << 150 << 151 if ( command == fCloseFileCmd.get() ) { << 152 fManager->CloseFileFromUI(fCloseFileCmd->G << 153 return; << 154 } << 155 << 156 if ( command == fListCmd.get() ) { << 157 fManager->List(fListCmd->GetNewBoolValue(n << 158 return; << 159 } << 160 << 161 if ( command == fSetDefaultFileTypeCmd.get() << 162 fManager->SetDefaultFileType(newValues); << 163 return; << 164 } << 165 << 166 if ( command == fSetActivationCmd.get() ) { 138 if ( command == fSetActivationCmd.get() ) { 167 fManager->SetActivation(fSetActivationCmd- 139 fManager->SetActivation(fSetActivationCmd->GetNewBoolValue(newValues)); 168 return; << 140 } 169 } << 141 else if ( command == fVerboseCmd.get() ) { 170 << 171 if ( command == fVerboseCmd.get() ) { << 172 fManager->SetVerboseLevel(fVerboseCmd->Get 142 fManager->SetVerboseLevel(fVerboseCmd->GetNewIntValue(newValues)); 173 return; << 143 } 174 } << 144 else if ( command == fCompressionCmd.get() ) { 175 << 176 if ( command == fCompressionCmd.get() ) { << 177 fManager->SetCompressionLevel(fCompression 145 fManager->SetCompressionLevel(fCompressionCmd->GetNewIntValue(newValues)); 178 return; << 146 } 179 } << 147 } 180 << 181 if ( command == fSetFileNameCmd.get() ) { << 182 fManager->SetFileName(newValues); << 183 return; << 184 } << 185 << 186 if ( command == fSetHistoDirNameCmd.get() ) << 187 fManager->SetHistoDirectoryName(newValues) << 188 return; << 189 } << 190 << 191 if ( command == fSetNtupleDirNameCmd.get() ) << 192 fManager->SetNtupleDirectoryName(newValues << 193 return; << 194 } << 195 } << 196 148