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