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, 21/10/2015 (ivan 27 // Author: Ivana Hrivnacova, 21/10/2015 (ivana@ipno.in2p3.fr) 28 28 29 #include "G4PlotMessenger.hh" 29 #include "G4PlotMessenger.hh" 30 #include "G4PlotParameters.hh" 30 #include "G4PlotParameters.hh" 31 #include "G4AnalysisUtilities.hh" 31 #include "G4AnalysisUtilities.hh" 32 32 33 #include "G4UIdirectory.hh" 33 #include "G4UIdirectory.hh" 34 #include "G4UIcommand.hh" 34 #include "G4UIcommand.hh" 35 #include "G4UIparameter.hh" 35 #include "G4UIparameter.hh" 36 #include "G4UIcmdWithAString.hh" 36 #include "G4UIcmdWithAString.hh" 37 37 38 #include <vector> 38 #include <vector> 39 39 40 using namespace G4Analysis; 40 using namespace G4Analysis; 41 using std::to_string; 41 using std::to_string; 42 42 43 //____________________________________________ 43 //_____________________________________________________________________________ 44 G4PlotMessenger::G4PlotMessenger(G4PlotParamet 44 G4PlotMessenger::G4PlotMessenger(G4PlotParameters* plotParameters) 45 : fPlotParameters(plotParameters) 45 : fPlotParameters(plotParameters) 46 { 46 { 47 fDirectory = std::make_unique<G4UIdirectory> 47 fDirectory = std::make_unique<G4UIdirectory>("/analysis/plot/"); 48 fDirectory->SetGuidance("Analysis batch plot 48 fDirectory->SetGuidance("Analysis batch plotting control"); 49 49 50 SetStyleCmd(); 50 SetStyleCmd(); 51 SetLayoutCmd(); 51 SetLayoutCmd(); 52 SetDimensionsCmd(); 52 SetDimensionsCmd(); 53 } 53 } 54 54 55 //____________________________________________ 55 //_____________________________________________________________________________ 56 G4PlotMessenger::~G4PlotMessenger() = default; 56 G4PlotMessenger::~G4PlotMessenger() = default; 57 57 58 // 58 // 59 // private functions 59 // private functions 60 // 60 // 61 61 62 //____________________________________________ 62 //_____________________________________________________________________________ 63 void G4PlotMessenger::AddIntParameter( 63 void G4PlotMessenger::AddIntParameter( 64 G4UIcommand& command, G4String name, G4Strin 64 G4UIcommand& command, G4String name, G4String guidance, G4String range) 65 { 65 { 66 auto param = new G4UIparameter(name.c_str(), 66 auto param = new G4UIparameter(name.c_str(), 'i', false); 67 param->SetGuidance(guidance.c_str()); 67 param->SetGuidance(guidance.c_str()); 68 if (! range.empty()) { 68 if (! range.empty()) { 69 param->SetParameterRange(range); 69 param->SetParameterRange(range); 70 } 70 } 71 command.SetParameter(param); 71 command.SetParameter(param); 72 } 72 } 73 73 74 //____________________________________________ 74 //_____________________________________________________________________________ 75 void G4PlotMessenger::SetStyleCmd() 75 void G4PlotMessenger::SetStyleCmd() 76 { 76 { 77 G4String guidance; 77 G4String guidance; 78 G4String candidates; 78 G4String candidates; 79 #if defined(TOOLS_USE_FREETYPE) 79 #if defined(TOOLS_USE_FREETYPE) 80 guidance = 80 guidance = 81 "Set plotting style from: \n" 81 "Set plotting style from: \n" 82 " ROOT_default: ROOT style with high res 82 " ROOT_default: ROOT style with high resolution fonts\n" 83 " hippodraw: hippodraw style with hig 83 " hippodraw: hippodraw style with high resolution fonts\n" 84 " inlib_default: PAW style with low resol 84 " inlib_default: PAW style with low resolution fonts"; 85 candidates = 85 candidates = 86 "ROOT_default hippodraw inlib_default"; 86 "ROOT_default hippodraw inlib_default"; 87 #else 87 #else 88 guidance = 88 guidance = 89 "Only one plotting style is available in l 89 "Only one plotting style is available in low resolution: \n" 90 " inlib_default: PAW style with low resol 90 " inlib_default: PAW style with low resolution fonts"; 91 candidates = 91 candidates = 92 "inlib_default"; 92 "inlib_default"; 93 #endif 93 #endif 94 94 95 fSetStyleCmd = CreateCommand<G4UIcmdWithAStr << 95 fSetStyleCmd = CreateCommand<G4UIcmdWithAString>("setStyle", guidance); 96 fSetStyleCmd->SetParameterName("Style", fals 96 fSetStyleCmd->SetParameterName("Style", false); 97 fSetStyleCmd->SetCandidates("inlib_default") 97 fSetStyleCmd->SetCandidates("inlib_default"); 98 } 98 } 99 99 100 //____________________________________________ 100 //_____________________________________________________________________________ 101 void G4PlotMessenger::SetLayoutCmd() 101 void G4PlotMessenger::SetLayoutCmd() 102 { 102 { 103 fSetLayoutCmd = CreateCommand<G4UIcommand>( 103 fSetLayoutCmd = CreateCommand<G4UIcommand>( 104 "setLayout", 104 "setLayout", 105 "Set page layout (number of columns and ro 105 "Set page layout (number of columns and rows per page).\n" 106 " Supported layouts:\n" 106 " Supported layouts:\n" 107 " columns = 1 .. maxValueAllowed\n" 107 " columns = 1 .. maxValueAllowed\n" 108 " rows = 1 .. maxValueAllowed, and >= 108 " rows = 1 .. maxValueAllowed, and >= columns\""); 109 109 110 AddIntParameter(*fSetLayoutCmd, "columns", 110 AddIntParameter(*fSetLayoutCmd, "columns", 111 "The number of columns in the page layout 111 "The number of columns in the page layout.", 112 "columns>=1 && columns<=" + std::to_strin 112 "columns>=1 && columns<=" + std::to_string(fPlotParameters->GetMaxColumns())); 113 AddIntParameter(*fSetLayoutCmd, "rows", 113 AddIntParameter(*fSetLayoutCmd, "rows", 114 "The number of rows in the page layout.", 114 "The number of rows in the page layout.", 115 "rows>=1 && rows<=" + std::to_string(fPlot 115 "rows>=1 && rows<=" + std::to_string(fPlotParameters->GetMaxRows())); 116 } 116 } 117 117 118 //____________________________________________ 118 //_____________________________________________________________________________ 119 void G4PlotMessenger::SetDimensionsCmd() 119 void G4PlotMessenger::SetDimensionsCmd() 120 { 120 { 121 fSetDimensionsCmd = CreateCommand<G4UIcomman 121 fSetDimensionsCmd = CreateCommand<G4UIcommand>( 122 "setDimensions", 122 "setDimensions", 123 "Set the plotter window size (width and he 123 "Set the plotter window size (width and height) in pixels."); 124 124 125 AddIntParameter(*fSetDimensionsCmd, "width", 125 AddIntParameter(*fSetDimensionsCmd, "width", "The page width."); 126 AddIntParameter(*fSetDimensionsCmd, "height" 126 AddIntParameter(*fSetDimensionsCmd, "height", "The page height."); 127 } 127 } 128 128 129 // 129 // 130 // public functions 130 // public functions 131 // 131 // 132 132 133 //____________________________________________ 133 //_____________________________________________________________________________ 134 void G4PlotMessenger::SetNewValue(G4UIcommand* 134 void G4PlotMessenger::SetNewValue(G4UIcommand* command, G4String newValues) 135 { 135 { 136 // tokenize parameters in a vector 136 // tokenize parameters in a vector 137 std::vector<G4String> parameters; 137 std::vector<G4String> parameters; 138 G4Analysis::Tokenize(newValues, parameters); 138 G4Analysis::Tokenize(newValues, parameters); 139 // check consistency 139 // check consistency 140 if ( parameters.size() != command->GetParame 140 if ( parameters.size() != command->GetParameterEntries() ) { 141 // Should never happen but let's check any 141 // Should never happen but let's check anyway for consistency 142 G4Analysis::Warn( 142 G4Analysis::Warn( 143 "Got wrong number of \"" + command->GetC 143 "Got wrong number of \"" + command->GetCommandName() + 144 "\" parameters: " + to_string(parameters 144 "\" parameters: " + to_string(parameters.size()) + 145 " instead of " + to_string(command->GetP 145 " instead of " + to_string(command->GetParameterEntries()) + " expected", 146 fkClass, "WarnAboutParameters"); 146 fkClass, "WarnAboutParameters"); 147 return; 147 return; 148 } 148 } 149 149 150 auto counter = 0; 150 auto counter = 0; 151 if ( command == fSetLayoutCmd.get() ) { 151 if ( command == fSetLayoutCmd.get() ) { 152 auto columns = G4UIcommand::ConvertToInt(p 152 auto columns = G4UIcommand::ConvertToInt(parameters[counter++]); 153 auto rows = G4UIcommand::ConvertToInt(para 153 auto rows = G4UIcommand::ConvertToInt(parameters[counter++]); 154 fPlotParameters->SetLayout(columns, rows); 154 fPlotParameters->SetLayout(columns, rows); 155 return; 155 return; 156 } 156 } 157 157 158 if ( command == fSetDimensionsCmd.get() ) { 158 if ( command == fSetDimensionsCmd.get() ) { 159 auto width = G4UIcommand::ConvertToInt(par 159 auto width = G4UIcommand::ConvertToInt(parameters[counter++]); 160 auto height = G4UIcommand::ConvertToInt(pa 160 auto height = G4UIcommand::ConvertToInt(parameters[counter++]); 161 fPlotParameters->SetDimensions(width, heig 161 fPlotParameters->SetDimensions(width, height); 162 return; 162 return; 163 } 163 } 164 164 165 if ( command == fSetStyleCmd.get() ) { 165 if ( command == fSetStyleCmd.get() ) { 166 fPlotParameters->SetStyle(newValues); 166 fPlotParameters->SetStyle(newValues); 167 return; 167 return; 168 } 168 } 169 } 169 } 170 170