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 "G4NtupleMessenger.hh" 31 #include "G4NtupleMessenger.hh" 32 32 33 #include "G4UIcmdWithABool.hh" 33 #include "G4UIcmdWithABool.hh" 34 #include "G4UIcmdWithAnInteger.hh" 34 #include "G4UIcmdWithAnInteger.hh" 35 #include "G4UIcmdWithAString.hh" 35 #include "G4UIcmdWithAString.hh" 36 #include "G4UIcmdWithoutParameter.hh" 36 #include "G4UIcmdWithoutParameter.hh" 37 #include "G4Threading.hh" 37 #include "G4Threading.hh" 38 38 39 using namespace G4Analysis; 39 using namespace G4Analysis; 40 40 41 //____________________________________________ 41 //_____________________________________________________________________________ 42 G4AnalysisMessenger::G4AnalysisMessenger(G4VAn 42 G4AnalysisMessenger::G4AnalysisMessenger(G4VAnalysisManager* manager) 43 : fManager(manager) 43 : fManager(manager) 44 { 44 { 45 fAnalysisDir = std::make_unique<G4UIdirector 45 fAnalysisDir = std::make_unique<G4UIdirectory>("/analysis/"); 46 fAnalysisDir->SetGuidance("analysis control" 46 fAnalysisDir->SetGuidance("analysis control"); 47 47 48 fOpenFileCmd = CreateCommand<G4UIcmdWithAStr 48 fOpenFileCmd = CreateCommand<G4UIcmdWithAString>( 49 "openFile", "Open analysis file", "FileNam 49 "openFile", "Open analysis file", "FileName", true); 50 fOpenFileCmd->SetDefaultValue(""); 50 fOpenFileCmd->SetDefaultValue(""); 51 fOpenFileCmd->SetToBeBroadcasted(true); 51 fOpenFileCmd->SetToBeBroadcasted(true); 52 52 53 fWriteCmd = CreateCommandWithoutParameter( 53 fWriteCmd = CreateCommandWithoutParameter( 54 "write", "Write analysis data."); 54 "write", "Write analysis data."); 55 fWriteCmd->SetToBeBroadcasted(false); 55 fWriteCmd->SetToBeBroadcasted(false); 56 56 57 fResetCmd = CreateCommandWithoutParameter( 57 fResetCmd = CreateCommandWithoutParameter( 58 "reset", "Reset analysis data."); 58 "reset", "Reset analysis data."); 59 fResetCmd->SetToBeBroadcasted(false); 59 fResetCmd->SetToBeBroadcasted(false); 60 60 61 fCloseFileCmd = CreateCommand<G4UIcmdWithABo 61 fCloseFileCmd = CreateCommand<G4UIcmdWithABool>( 62 "closeFile", "Close analysis file and (opt 62 "closeFile", "Close analysis file and (optionally) reset data.", "IsReset", true); 63 fCloseFileCmd->SetDefaultValue(true); 63 fCloseFileCmd->SetDefaultValue(true); 64 fCloseFileCmd->SetToBeBroadcasted(false); 64 fCloseFileCmd->SetToBeBroadcasted(false); 65 65 66 fListCmd = CreateCommand<G4UIcmdWithABool>( 66 fListCmd = CreateCommand<G4UIcmdWithABool>( 67 "list", "List all/activate analysis object 67 "list", "List all/activate analysis objects.", "OnlyIfActive", true); 68 fListCmd->SetDefaultValue(true); 68 fListCmd->SetDefaultValue(true); 69 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 70 fSetActivationCmd = CreateCommand<G4UIcmdWithABool>( 79 "setActivation", 71 "setActivation", 80 "Set activation. \n" 72 "Set activation. \n" 81 "When this option is enabled, only the his 73 "When this option is enabled, only the histograms marked as activated\n" 82 "are returned, filled or saved on file.\n" 74 "are returned, filled or saved on file.\n" 83 "No warning is issued when Get or Fill is 75 "No warning is issued when Get or Fill is called on inactive histogram.", 84 "Activation"); 76 "Activation"); 85 77 86 fVerboseCmd = CreateCommand<G4UIcmdWithAnInt 78 fVerboseCmd = CreateCommand<G4UIcmdWithAnInteger>( 87 "verbose", "Set verbose level", "VerboseLe 79 "verbose", "Set verbose level", "VerboseLevel"); 88 fVerboseCmd->SetRange("VerboseLevel>=0 && Ve 80 fVerboseCmd->SetRange("VerboseLevel>=0 && VerboseLevel<=4"); 89 81 90 fCompressionCmd = CreateCommand<G4UIcmdWithA 82 fCompressionCmd = CreateCommand<G4UIcmdWithAnInteger>( 91 "compression", "Set compression level", "C 83 "compression", "Set compression level", "CompressionLevel"); 92 fCompressionCmd->SetRange("CompressionLevel> 84 fCompressionCmd->SetRange("CompressionLevel>=0 && CompressionLevel<=4"); 93 85 94 fSetFileNameCmd = CreateCommand<G4UIcmdWithA 86 fSetFileNameCmd = CreateCommand<G4UIcmdWithAString>( 95 "setFileName", "Set name for the histogram 87 "setFileName", "Set name for the histograms & ntuple file", "Filename"); 96 88 97 fSetHistoDirNameCmd = CreateCommand<G4UIcmdW 89 fSetHistoDirNameCmd = CreateCommand<G4UIcmdWithAString>( 98 "setHistoDirName", "Set name for the histo 90 "setHistoDirName", "Set name for the histograms directory", "HistoDirName"); 99 91 100 fSetNtupleDirNameCmd = CreateCommand<G4UIcmd 92 fSetNtupleDirNameCmd = CreateCommand<G4UIcmdWithAString>( 101 "setNtupleDirName", "Set name for the ntup 93 "setNtupleDirName", "Set name for the ntuple directory", "NtupleDirName"); 102 94 103 fNtupleMessenger = std::make_unique<G4Ntuple 95 fNtupleMessenger = std::make_unique<G4NtupleMessenger>(manager); 104 } 96 } 105 97 106 //____________________________________________ 98 //_____________________________________________________________________________ 107 G4AnalysisMessenger::~G4AnalysisMessenger() = 99 G4AnalysisMessenger::~G4AnalysisMessenger() = default; 108 100 109 // 101 // 110 // private functions 102 // private functions 111 // 103 // 112 104 113 105 114 //____________________________________________ 106 //_____________________________________________________________________________ 115 std::unique_ptr<G4UIcmdWithoutParameter> 107 std::unique_ptr<G4UIcmdWithoutParameter> 116 G4AnalysisMessenger::CreateCommandWithoutParam 108 G4AnalysisMessenger::CreateCommandWithoutParameter( 117 G4String name, G4String guidance) 109 G4String name, G4String guidance) 118 { 110 { 119 G4String fullName = "/analysis/" + name; 111 G4String fullName = "/analysis/" + name; 120 112 121 auto command = std::make_unique<G4UIcmdWitho 113 auto command = std::make_unique<G4UIcmdWithoutParameter>(fullName, this); 122 command->SetGuidance(guidance.c_str()); 114 command->SetGuidance(guidance.c_str()); 123 command->AvailableForStates(G4State_PreInit, 115 command->AvailableForStates(G4State_PreInit, G4State_Idle); 124 116 125 return command; 117 return command; 126 } 118 } 127 119 128 // 120 // 129 // public functions 121 // public functions 130 // 122 // 131 123 132 //____________________________________________ 124 //_____________________________________________________________________________ 133 void G4AnalysisMessenger::SetNewValue(G4UIcomm 125 void G4AnalysisMessenger::SetNewValue(G4UIcommand* command, G4String newValues) 134 { 126 { 135 if ( command == fOpenFileCmd.get() ) { 127 if ( command == fOpenFileCmd.get() ) { 136 // G4cout << "Calling OpenFile from comman 128 // G4cout << "Calling OpenFile from command for " << fManager << G4endl; 137 fManager->OpenFile(newValues); 129 fManager->OpenFile(newValues); 138 return; 130 return; 139 } 131 } 140 132 141 if ( command == fWriteCmd.get() ) { 133 if ( command == fWriteCmd.get() ) { 142 fManager->WriteFromUI(); 134 fManager->WriteFromUI(); 143 return; 135 return; 144 } 136 } 145 137 146 if ( command == fResetCmd.get() ) { 138 if ( command == fResetCmd.get() ) { 147 fManager->ResetFromUI(); 139 fManager->ResetFromUI(); 148 return; 140 return; 149 } 141 } 150 142 151 if ( command == fCloseFileCmd.get() ) { 143 if ( command == fCloseFileCmd.get() ) { 152 fManager->CloseFileFromUI(fCloseFileCmd->G 144 fManager->CloseFileFromUI(fCloseFileCmd->GetNewBoolValue(newValues)); 153 return; 145 return; 154 } 146 } 155 147 156 if ( command == fListCmd.get() ) { 148 if ( command == fListCmd.get() ) { 157 fManager->List(fListCmd->GetNewBoolValue(n 149 fManager->List(fListCmd->GetNewBoolValue(newValues)); 158 return; << 159 } << 160 << 161 if ( command == fSetDefaultFileTypeCmd.get() << 162 fManager->SetDefaultFileType(newValues); << 163 return; 150 return; 164 } 151 } 165 152 166 if ( command == fSetActivationCmd.get() ) { 153 if ( command == fSetActivationCmd.get() ) { 167 fManager->SetActivation(fSetActivationCmd- 154 fManager->SetActivation(fSetActivationCmd->GetNewBoolValue(newValues)); 168 return; 155 return; 169 } 156 } 170 157 171 if ( command == fVerboseCmd.get() ) { 158 if ( command == fVerboseCmd.get() ) { 172 fManager->SetVerboseLevel(fVerboseCmd->Get 159 fManager->SetVerboseLevel(fVerboseCmd->GetNewIntValue(newValues)); 173 return; 160 return; 174 } 161 } 175 162 176 if ( command == fCompressionCmd.get() ) { 163 if ( command == fCompressionCmd.get() ) { 177 fManager->SetCompressionLevel(fCompression 164 fManager->SetCompressionLevel(fCompressionCmd->GetNewIntValue(newValues)); 178 return; 165 return; 179 } 166 } 180 167 181 if ( command == fSetFileNameCmd.get() ) { 168 if ( command == fSetFileNameCmd.get() ) { 182 fManager->SetFileName(newValues); 169 fManager->SetFileName(newValues); 183 return; 170 return; 184 } 171 } 185 172 186 if ( command == fSetHistoDirNameCmd.get() ) 173 if ( command == fSetHistoDirNameCmd.get() ) { 187 fManager->SetHistoDirectoryName(newValues) 174 fManager->SetHistoDirectoryName(newValues); 188 return; 175 return; 189 } 176 } 190 177 191 if ( command == fSetNtupleDirNameCmd.get() ) 178 if ( command == fSetNtupleDirNameCmd.get() ) { 192 fManager->SetNtupleDirectoryName(newValues 179 fManager->SetNtupleDirectoryName(newValues); 193 return; 180 return; 194 } 181 } 195 } 182 } 196 183