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 // $Id: G4AnalysisMessenger.cc 66310 2012-12-17 11:56:35Z ihrivnac $ 26 27 27 // Author: Ivana Hrivnacova, 24/06/2013 (ivan 28 // Author: Ivana Hrivnacova, 24/06/2013 (ivana@ipno.in2p3.fr) 28 29 29 #include "G4AnalysisMessenger.hh" 30 #include "G4AnalysisMessenger.hh" 30 #include "G4VAnalysisManager.hh" 31 #include "G4VAnalysisManager.hh" >> 32 #include "G4FileMessenger.hh" >> 33 #include "G4H1Messenger.hh" >> 34 #include "G4H2Messenger.hh" >> 35 #include "G4H3Messenger.hh" >> 36 #include "G4P1Messenger.hh" >> 37 #include "G4P2Messenger.hh" 31 #include "G4NtupleMessenger.hh" 38 #include "G4NtupleMessenger.hh" >> 39 #include "G4HnMessenger.hh" >> 40 #include "G4AnalysisUtilities.hh" 32 41 33 #include "G4UIcmdWithABool.hh" 42 #include "G4UIcmdWithABool.hh" 34 #include "G4UIcmdWithAnInteger.hh" 43 #include "G4UIcmdWithAnInteger.hh" 35 #include "G4UIcmdWithAString.hh" << 36 #include "G4UIcmdWithoutParameter.hh" << 37 #include "G4Threading.hh" << 38 44 39 using namespace G4Analysis; 45 using namespace G4Analysis; 40 46 41 //____________________________________________ 47 //_____________________________________________________________________________ 42 G4AnalysisMessenger::G4AnalysisMessenger(G4VAn 48 G4AnalysisMessenger::G4AnalysisMessenger(G4VAnalysisManager* manager) 43 : fManager(manager) << 49 : G4UImessenger(), 44 { << 50 fManager(manager), 45 fAnalysisDir = std::make_unique<G4UIdirector << 51 fFileMessenger(nullptr), >> 52 fH1Messenger(nullptr), >> 53 fH2Messenger(nullptr), >> 54 fH3Messenger(nullptr), >> 55 fP1Messenger(nullptr), >> 56 fP2Messenger(nullptr), >> 57 fNtupleMessenger(nullptr), >> 58 fH1HnMessenger(nullptr), >> 59 fH2HnMessenger(nullptr), >> 60 fH3HnMessenger(nullptr), >> 61 fP1HnMessenger(nullptr), >> 62 fP2HnMessenger(nullptr), >> 63 fAnalysisDir(nullptr), >> 64 fSetActivationCmd(nullptr), >> 65 fVerboseCmd(nullptr), >> 66 fCompressionCmd(nullptr) >> 67 { >> 68 fAnalysisDir = G4Analysis::make_unique<G4UIdirectory>("/analysis/"); 46 fAnalysisDir->SetGuidance("analysis control" 69 fAnalysisDir->SetGuidance("analysis control"); 47 70 48 fOpenFileCmd = CreateCommand<G4UIcmdWithAStr << 71 fSetActivationCmd = G4Analysis::make_unique<G4UIcmdWithABool>("/analysis/setActivation",this); 49 "openFile", "Open analysis file", "FileNam << 72 G4String guidance = "Set activation. \n"; 50 fOpenFileCmd->SetDefaultValue(""); << 73 guidance += "When this option is enabled, only the histograms marked as activated\n"; 51 fOpenFileCmd->SetToBeBroadcasted(true); << 74 guidance += "are returned, filled or saved on file.\n"; 52 << 75 guidance += "No warning is issued when Get or Fill is called on inactive histogram."; 53 fWriteCmd = CreateCommandWithoutParameter( << 76 fSetActivationCmd->SetGuidance(guidance); 54 "write", "Write analysis data."); << 77 fSetActivationCmd->SetParameterName("Activation",false); 55 fWriteCmd->SetToBeBroadcasted(false); << 78 56 << 79 fVerboseCmd = G4Analysis::make_unique<G4UIcmdWithAnInteger>("/analysis/verbose",this); 57 fResetCmd = CreateCommandWithoutParameter( << 80 fVerboseCmd->SetGuidance("Set verbose level"); 58 "reset", "Reset analysis data."); << 81 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 82 fVerboseCmd->SetRange("VerboseLevel>=0 && VerboseLevel<=4"); 89 << 83 90 fCompressionCmd = CreateCommand<G4UIcmdWithA << 84 fCompressionCmd = G4Analysis::make_unique<G4UIcmdWithAnInteger>("/analysis/compression",this); 91 "compression", "Set compression level", "C << 85 fCompressionCmd->SetGuidance("Set compression level"); >> 86 fCompressionCmd->SetParameterName("CompressionLevel",false); 92 fCompressionCmd->SetRange("CompressionLevel> 87 fCompressionCmd->SetRange("CompressionLevel>=0 && CompressionLevel<=4"); 93 << 88 94 fSetFileNameCmd = CreateCommand<G4UIcmdWithA << 89 fFileMessenger = G4Analysis::make_unique<G4FileMessenger>(manager); 95 "setFileName", "Set name for the histogram << 90 fH1Messenger = G4Analysis::make_unique<G4H1Messenger>(manager); 96 << 91 fH2Messenger = G4Analysis::make_unique<G4H2Messenger>(manager); 97 fSetHistoDirNameCmd = CreateCommand<G4UIcmdW << 92 fH3Messenger = G4Analysis::make_unique<G4H3Messenger>(manager); 98 "setHistoDirName", "Set name for the histo << 93 fP1Messenger = G4Analysis::make_unique<G4P1Messenger>(manager); 99 << 94 fP2Messenger = G4Analysis::make_unique<G4P2Messenger>(manager); 100 fSetNtupleDirNameCmd = CreateCommand<G4UIcmd << 95 fNtupleMessenger = G4Analysis::make_unique<G4NtupleMessenger>(manager); 101 "setNtupleDirName", "Set name for the ntup << 102 << 103 fNtupleMessenger = std::make_unique<G4Ntuple << 104 } 96 } 105 97 106 //____________________________________________ 98 //_____________________________________________________________________________ 107 G4AnalysisMessenger::~G4AnalysisMessenger() = << 99 G4AnalysisMessenger::~G4AnalysisMessenger() >> 100 {} 108 101 109 // 102 // 110 // private functions << 103 // public functions 111 // 104 // 112 105 >> 106 //_____________________________________________________________________________ >> 107 void G4AnalysisMessenger::SetH1HnManager(G4HnManager& h1HnManager) >> 108 { >> 109 fH1HnMessenger = G4Analysis::make_unique<G4HnMessenger>(h1HnManager); >> 110 } 113 111 114 //____________________________________________ 112 //_____________________________________________________________________________ 115 std::unique_ptr<G4UIcmdWithoutParameter> << 113 void G4AnalysisMessenger::SetH2HnManager(G4HnManager& h2HnManager) 116 G4AnalysisMessenger::CreateCommandWithoutParam << 117 G4String name, G4String guidance) << 118 { 114 { 119 G4String fullName = "/analysis/" + name; << 115 fH2HnMessenger = G4Analysis::make_unique<G4HnMessenger>(h2HnManager); >> 116 } 120 117 121 auto command = std::make_unique<G4UIcmdWitho << 118 //_____________________________________________________________________________ 122 command->SetGuidance(guidance.c_str()); << 119 void G4AnalysisMessenger::SetH3HnManager(G4HnManager& h2HnManager) 123 command->AvailableForStates(G4State_PreInit, << 120 { >> 121 fH2HnMessenger = G4Analysis::make_unique<G4HnMessenger>(h2HnManager); >> 122 } 124 123 125 return command; << 124 //_____________________________________________________________________________ 126 } << 125 void G4AnalysisMessenger::SetP1HnManager(G4HnManager& p1HnManager) >> 126 { >> 127 fP1HnMessenger = G4Analysis::make_unique<G4HnMessenger>(p1HnManager); >> 128 } 127 129 128 // << 130 //_____________________________________________________________________________ 129 // public functions << 131 void G4AnalysisMessenger::SetP2HnManager(G4HnManager& p2HnManager) 130 // << 132 { >> 133 fP2HnMessenger = G4Analysis::make_unique<G4HnMessenger>(p2HnManager); >> 134 } 131 135 132 //____________________________________________ 136 //_____________________________________________________________________________ 133 void G4AnalysisMessenger::SetNewValue(G4UIcomm 137 void G4AnalysisMessenger::SetNewValue(G4UIcommand* command, G4String newValues) 134 { 138 { 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() ) { 139 if ( command == fSetActivationCmd.get() ) { 167 fManager->SetActivation(fSetActivationCmd- 140 fManager->SetActivation(fSetActivationCmd->GetNewBoolValue(newValues)); 168 return; << 141 } 169 } << 142 else if ( command == fVerboseCmd.get() ) { 170 << 171 if ( command == fVerboseCmd.get() ) { << 172 fManager->SetVerboseLevel(fVerboseCmd->Get 143 fManager->SetVerboseLevel(fVerboseCmd->GetNewIntValue(newValues)); 173 return; << 144 } 174 } << 145 else if ( command == fCompressionCmd.get() ) { 175 << 176 if ( command == fCompressionCmd.get() ) { << 177 fManager->SetCompressionLevel(fCompression 146 fManager->SetCompressionLevel(fCompressionCmd->GetNewIntValue(newValues)); 178 return; << 147 } 179 } << 148 } 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 149