Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/analysis/management/src/G4NtupleMessenger.cc

Version: [ ReleaseNotes ] [ 1.0 ] [ 1.1 ] [ 2.0 ] [ 3.0 ] [ 3.1 ] [ 3.2 ] [ 4.0 ] [ 4.0.p1 ] [ 4.0.p2 ] [ 4.1 ] [ 4.1.p1 ] [ 5.0 ] [ 5.0.p1 ] [ 5.1 ] [ 5.1.p1 ] [ 5.2 ] [ 5.2.p1 ] [ 5.2.p2 ] [ 6.0 ] [ 6.0.p1 ] [ 6.1 ] [ 6.2 ] [ 6.2.p1 ] [ 6.2.p2 ] [ 7.0 ] [ 7.0.p1 ] [ 7.1 ] [ 7.1.p1 ] [ 8.0 ] [ 8.0.p1 ] [ 8.1 ] [ 8.1.p1 ] [ 8.1.p2 ] [ 8.2 ] [ 8.2.p1 ] [ 8.3 ] [ 8.3.p1 ] [ 8.3.p2 ] [ 9.0 ] [ 9.0.p1 ] [ 9.0.p2 ] [ 9.1 ] [ 9.1.p1 ] [ 9.1.p2 ] [ 9.1.p3 ] [ 9.2 ] [ 9.2.p1 ] [ 9.2.p2 ] [ 9.2.p3 ] [ 9.2.p4 ] [ 9.3 ] [ 9.3.p1 ] [ 9.3.p2 ] [ 9.4 ] [ 9.4.p1 ] [ 9.4.p2 ] [ 9.4.p3 ] [ 9.4.p4 ] [ 9.5 ] [ 9.5.p1 ] [ 9.5.p2 ] [ 9.6 ] [ 9.6.p1 ] [ 9.6.p2 ] [ 9.6.p3 ] [ 9.6.p4 ] [ 10.0 ] [ 10.0.p1 ] [ 10.0.p2 ] [ 10.0.p3 ] [ 10.0.p4 ] [ 10.1 ] [ 10.1.p1 ] [ 10.1.p2 ] [ 10.1.p3 ] [ 10.2 ] [ 10.2.p1 ] [ 10.2.p2 ] [ 10.2.p3 ] [ 10.3 ] [ 10.3.p1 ] [ 10.3.p2 ] [ 10.3.p3 ] [ 10.4 ] [ 10.4.p1 ] [ 10.4.p2 ] [ 10.4.p3 ] [ 10.5 ] [ 10.5.p1 ] [ 10.6 ] [ 10.6.p1 ] [ 10.6.p2 ] [ 10.6.p3 ] [ 10.7 ] [ 10.7.p1 ] [ 10.7.p2 ] [ 10.7.p3 ] [ 10.7.p4 ] [ 11.0 ] [ 11.0.p1 ] [ 11.0.p2 ] [ 11.0.p3, ] [ 11.0.p4 ] [ 11.1 ] [ 11.1.1 ] [ 11.1.2 ] [ 11.1.3 ] [ 11.2 ] [ 11.2.1 ] [ 11.2.2 ] [ 11.3.0 ]

Diff markup

Differences between /analysis/management/src/G4NtupleMessenger.cc (Version 11.3.0) and /analysis/management/src/G4NtupleMessenger.cc (Version 9.5.p2)


  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, 05/05/2015  (ivan    
 28                                                   
 29 #include "G4NtupleMessenger.hh"                   
 30 #include "G4VAnalysisManager.hh"                  
 31 #include "G4AnalysisUtilities.hh"                 
 32                                                   
 33 #include "G4UIcommand.hh"                         
 34 #include "G4UIparameter.hh"                       
 35 #include "G4UIcmdWithABool.hh"                    
 36 #include "G4UIcmdWithAString.hh"                  
 37 #include "G4UIcmdWithoutParameter.hh"             
 38                                                   
 39 using namespace G4Analysis;                       
 40 using std::to_string;                             
 41                                                   
 42 //____________________________________________    
 43 G4NtupleMessenger::G4NtupleMessenger(G4VAnalys    
 44   : fManager(manager)                             
 45 {                                                 
 46   fNtupleDir = std::make_unique<G4UIdirectory>    
 47   fNtupleDir->SetGuidance("ntuple control");      
 48                                                   
 49   CreateCmd();                                    
 50   CreateColumnCmds();                             
 51   FinishCmd();                                    
 52   DeleteCmd();                                    
 53   SetActivationCmd();                             
 54   SetActivationToAllCmd();                        
 55   SetFileNameCmd();                               
 56   SetFileNameToAllCmd();                          
 57   ListCmd();                                      
 58 }                                                 
 59                                                   
 60 //____________________________________________    
 61 G4NtupleMessenger::~G4NtupleMessenger() = defa    
 62                                                   
 63 //                                                
 64 // private functions                              
 65 //                                                
 66                                                   
 67 //____________________________________________    
 68 void G4NtupleMessenger::AddIdParameter(G4UIcom    
 69 {                                                 
 70   auto ntupleId = new G4UIparameter("NtupleId"    
 71   ntupleId->SetGuidance("Ntuple id");             
 72   ntupleId->SetParameterRange("NtupleId>=0");     
 73                                                   
 74   command.SetParameter(ntupleId);                 
 75 }                                                 
 76                                                   
 77 //____________________________________________    
 78 void G4NtupleMessenger::CreateCmd()               
 79 {                                                 
 80   fCreateCmd = CreateCommand<G4UIcommand>("cre    
 81                                                   
 82   auto ntName = new G4UIparameter("name", 's',    
 83   ntName->SetGuidance("Ntuple name");             
 84   fCreateCmd->SetParameter(ntName);               
 85                                                   
 86   auto ntTitle = new G4UIparameter("title", 's    
 87   ntTitle->SetGuidance("Ntuple title");           
 88   fCreateCmd->SetParameter(ntTitle);              
 89 }                                                 
 90                                                   
 91 //____________________________________________    
 92 void G4NtupleMessenger::CreateColumnCmds()        
 93 {                                                 
 94   std::vector<char> colTypes = {'I', 'F', 'D',    
 95                                                   
 96   for (auto colType : colTypes ) {                
 97     G4String name = "createColumn";               
 98     G4String guidance = "Create  ntuple column    
 99     name.insert(6, 1, colType);                   
100     guidance.insert(7, 1, colType);               
101     auto cmd = CreateCommand<G4UIcmdWithAStrin    
102     fCreateColumnCmds[colType] = std::move(cmd    
103   }                                               
104 }                                                 
105                                                   
106 //____________________________________________    
107 void G4NtupleMessenger::FinishCmd()               
108 {                                                 
109   fFinishCmd = CreateCommand<G4UIcmdWithoutPar    
110     "finish", "Finish creating ntuple");          
111 }                                                 
112                                                   
113 //____________________________________________    
114 void G4NtupleMessenger::DeleteCmd()               
115 {                                                 
116   fDeleteCmd = CreateCommand<G4UIcommand>(        
117     "delete", "Delete ntuple with given id");     
118                                                   
119   // Add Id parameter                             
120   AddIdParameter(*fDeleteCmd);                    
121                                                   
122   auto parKeepSetting = new G4UIparameter("kee    
123   G4String guidance =                             
124     "If set true, activation, file name, etc.     
125     "and applied when a new object with the sa    
126   parKeepSetting->SetGuidance(guidance.c_str()    
127   parKeepSetting->SetDefaultValue("false");       
128   fDeleteCmd->SetParameter(parKeepSetting);       
129 }                                                 
130                                                   
131 //____________________________________________    
132 void G4NtupleMessenger::SetActivationCmd()        
133 {                                                 
134   fSetActivationCmd = CreateCommand<G4UIcomman    
135     "setActivation", "Set activation for the n    
136                                                   
137   AddIdParameter(*fSetActivationCmd);             
138                                                   
139   auto ntupleActivation = new G4UIparameter("N    
140   ntupleActivation->SetGuidance("Ntuple activa    
141   ntupleActivation->SetDefaultValue(true);        
142   fSetActivationCmd->SetParameter(ntupleActiva    
143 }                                                 
144                                                   
145 //____________________________________________    
146 void G4NtupleMessenger::SetActivationToAllCmd(    
147 {                                                 
148   fSetActivationAllCmd = CreateCommand<G4UIcmd    
149     "setActivationToAll", "Set activation to a    
150   fSetActivationAllCmd->SetParameterName("AllN    
151 }                                                 
152                                                   
153 //____________________________________________    
154 void G4NtupleMessenger::SetFileNameCmd()          
155 {                                                 
156   fSetFileNameCmd = CreateCommand<G4UIcommand>    
157     "setFileName", "Set file name for the ntup    
158                                                   
159   AddIdParameter(*fSetFileNameCmd);               
160                                                   
161   auto ntupleFileName = new G4UIparameter("Ntu    
162   ntupleFileName->SetGuidance("Ntuple file nam    
163   fSetFileNameCmd->SetParameter(ntupleFileName    
164 }                                                 
165                                                   
166 //____________________________________________    
167 void G4NtupleMessenger::SetFileNameToAllCmd()     
168 {                                                 
169   fSetFileNameAllCmd = CreateCommand<G4UIcmdWi    
170     "setFileNameToAll", "Set file name to all     
171   fSetFileNameAllCmd->SetParameterName("AllNtu    
172 }                                                 
173                                                   
174 //____________________________________________    
175 void G4NtupleMessenger::ListCmd()                 
176 {                                                 
177   fListCmd = CreateCommand<G4UIcommand>("list"    
178   fListCmd->AvailableForStates(G4State_Idle, G    
179                                                   
180   auto parOnlyIfActive = new G4UIparameter("on    
181   parOnlyIfActive->SetGuidance("Option whether    
182   parOnlyIfActive->SetDefaultValue("true");       
183   fListCmd->SetParameter(parOnlyIfActive);        
184 }                                                 
185                                                   
186 //                                                
187 // public methods                                 
188 //                                                
189                                                   
190 //____________________________________________    
191 void G4NtupleMessenger::SetNewValue(G4UIcomman    
192 {                                                 
193   // process "All" commands first                 
194                                                   
195   if ( command == fSetActivationAllCmd.get() )    
196     fManager->SetActivation(fSetActivationAllC    
197     return;                                       
198   }                                               
199                                                   
200   if ( command == fSetFileNameAllCmd.get() ) {    
201     fManager->SetFileName(newValues);             
202     return;                                       
203   }                                               
204                                                   
205   // Tokenize parameters in a vector              
206   std::vector<G4String> parameters;               
207   G4Analysis::Tokenize(newValues, parameters);    
208   // check consistency                            
209   if ( parameters.size() != command->GetParame    
210     // Should never happen but let's check any    
211     G4Analysis::Warn(                             
212       "Got wrong number of \"" + command->GetC    
213       "\" parameters: " + std::to_string(param    
214       " instead of " + std::to_string(command-    
215       fkClass, "WarnAboutParameters");            
216     return;                                       
217   }                                               
218                                                   
219   auto counter = 0;                               
220                                                   
221   // commands without Id parameter                
222                                                   
223   if ( command == fCreateCmd.get() ) {            
224     const auto& name = parameters[counter++];     
225     const auto& title = parameters[counter++];    
226     fTmpNtupleId = fManager->CreateNtuple(name    
227     return;                                       
228   }                                               
229                                                   
230   for (const auto& [colType, checkCommand] : f    
231     if ( command == checkCommand.get() ) {        
232       const auto& name = parameters[counter++]    
233       switch (colType) {                          
234         case 'I':                                 
235           fManager->CreateNtupleIColumn(fTmpNt    
236           return;                                 
237         case 'F':                                 
238           fManager->CreateNtupleFColumn(fTmpNt    
239           return;                                 
240         case 'D':                                 
241           fManager->CreateNtupleDColumn(fTmpNt    
242           return;                                 
243         case 'S':                                 
244           fManager->CreateNtupleSColumn(fTmpNt    
245           return;                                 
246         default:                                  
247           return;                                 
248       }                                           
249     }                                             
250   }                                               
251                                                   
252   if ( command == fFinishCmd.get() ) {            
253     fManager->FinishNtuple(fTmpNtupleId);         
254     fTmpNtupleId = G4Analysis::kInvalidId;        
255     return;                                       
256   }                                               
257                                                   
258   // commands with Id parameter                   
259                                                   
260   auto id = G4UIcommand::ConvertToInt(paramete    
261                                                   
262   if ( command == fDeleteCmd.get() ) {            
263     const auto& keepSetting = G4UIcommand::Con    
264     fManager->DeleteNtuple(id, keepSetting);      
265     return;                                       
266   }                                               
267                                                   
268   if ( command == fSetActivationCmd.get() ) {     
269     fManager->SetNtupleActivation(id, G4UIcomm    
270     return;                                       
271   }                                               
272                                                   
273   if ( command == fSetFileNameCmd.get() ) {       
274     fManager->SetNtupleFileName(id, parameters    
275     return;                                       
276   }                                               
277                                                   
278   if ( command == fListCmd.get() ) {              
279     const auto& onlyIfActive = G4UIcommand::Co    
280     fManager->ListNtuple(onlyIfActive);           
281     return;                                       
282   }                                               
283 }                                                 
284