Geant4 Cross Reference |
1 // 2 // ******************************************************************** 3 // * License and Disclaimer * 4 // * * 5 // * The Geant4 software is copyright of the Copyright Holders of * 6 // * the Geant4 Collaboration. It is provided under the terms and * 7 // * conditions of the Geant4 Software License, included in the file * 8 // * LICENSE and available at http://cern.ch/geant4/license . These * 9 // * include a list of copyright holders. * 10 // * * 11 // * Neither the authors of this software system, nor their employing * 12 // * institutes,nor the agencies providing financial support for this * 13 // * work make any representation or warranty, express or implied, * 14 // * regarding this software system or assume any liability for its * 15 // * use. Please see the license in the file LICENSE and URL above * 16 // * for the full disclaimer and the limitation of liability. * 17 // * * 18 // * This code implementation is the result of the scientific and * 19 // * technical work of the GEANT4 collaboration. * 20 // * By using, copying, modifying or distributing the software (or * 21 // * any work based on the software) you agree to acknowledge its * 22 // * use in resulting scientific publications, and indicate your * 23 // * acceptance of all terms of the Geant4 Software license. * 24 // ******************************************************************** 25 // 26 27 // Author: Ivana Hrivnacova, 21/10/2015 (ivana@ipno.in2p3.fr) 28 29 #include "G4PlotMessenger.hh" 30 #include "G4PlotParameters.hh" 31 #include "G4AnalysisUtilities.hh" 32 33 #include "G4UIdirectory.hh" 34 #include "G4UIcommand.hh" 35 #include "G4UIparameter.hh" 36 #include "G4UIcmdWithAString.hh" 37 38 #include <vector> 39 40 using namespace G4Analysis; 41 using std::to_string; 42 43 //_____________________________________________________________________________ 44 G4PlotMessenger::G4PlotMessenger(G4PlotParameters* plotParameters) 45 : fPlotParameters(plotParameters) 46 { 47 fDirectory = std::make_unique<G4UIdirectory>("/analysis/plot/"); 48 fDirectory->SetGuidance("Analysis batch plotting control"); 49 50 SetStyleCmd(); 51 SetLayoutCmd(); 52 SetDimensionsCmd(); 53 } 54 55 //_____________________________________________________________________________ 56 G4PlotMessenger::~G4PlotMessenger() = default; 57 58 // 59 // private functions 60 // 61 62 //_____________________________________________________________________________ 63 void G4PlotMessenger::AddIntParameter( 64 G4UIcommand& command, G4String name, G4String guidance, G4String range) 65 { 66 auto param = new G4UIparameter(name.c_str(), 'i', false); 67 param->SetGuidance(guidance.c_str()); 68 if (! range.empty()) { 69 param->SetParameterRange(range); 70 } 71 command.SetParameter(param); 72 } 73 74 //_____________________________________________________________________________ 75 void G4PlotMessenger::SetStyleCmd() 76 { 77 G4String guidance; 78 G4String candidates; 79 #if defined(TOOLS_USE_FREETYPE) 80 guidance = 81 "Set plotting style from: \n" 82 " ROOT_default: ROOT style with high resolution fonts\n" 83 " hippodraw: hippodraw style with high resolution fonts\n" 84 " inlib_default: PAW style with low resolution fonts"; 85 candidates = 86 "ROOT_default hippodraw inlib_default"; 87 #else 88 guidance = 89 "Only one plotting style is available in low resolution: \n" 90 " inlib_default: PAW style with low resolution fonts"; 91 candidates = 92 "inlib_default"; 93 #endif 94 95 fSetStyleCmd = CreateCommand<G4UIcmdWithAString>("setStyle", std::move(guidance)); 96 fSetStyleCmd->SetParameterName("Style", false); 97 fSetStyleCmd->SetCandidates("inlib_default"); 98 } 99 100 //_____________________________________________________________________________ 101 void G4PlotMessenger::SetLayoutCmd() 102 { 103 fSetLayoutCmd = CreateCommand<G4UIcommand>( 104 "setLayout", 105 "Set page layout (number of columns and rows per page).\n" 106 " Supported layouts:\n" 107 " columns = 1 .. maxValueAllowed\n" 108 " rows = 1 .. maxValueAllowed, and >= columns\""); 109 110 AddIntParameter(*fSetLayoutCmd, "columns", 111 "The number of columns in the page layout.", 112 "columns>=1 && columns<=" + std::to_string(fPlotParameters->GetMaxColumns())); 113 AddIntParameter(*fSetLayoutCmd, "rows", 114 "The number of rows in the page layout.", 115 "rows>=1 && rows<=" + std::to_string(fPlotParameters->GetMaxRows())); 116 } 117 118 //_____________________________________________________________________________ 119 void G4PlotMessenger::SetDimensionsCmd() 120 { 121 fSetDimensionsCmd = CreateCommand<G4UIcommand>( 122 "setDimensions", 123 "Set the plotter window size (width and height) in pixels."); 124 125 AddIntParameter(*fSetDimensionsCmd, "width", "The page width."); 126 AddIntParameter(*fSetDimensionsCmd, "height", "The page height."); 127 } 128 129 // 130 // public functions 131 // 132 133 //_____________________________________________________________________________ 134 void G4PlotMessenger::SetNewValue(G4UIcommand* command, G4String newValues) 135 { 136 // tokenize parameters in a vector 137 std::vector<G4String> parameters; 138 G4Analysis::Tokenize(newValues, parameters); 139 // check consistency 140 if ( parameters.size() != command->GetParameterEntries() ) { 141 // Should never happen but let's check anyway for consistency 142 G4Analysis::Warn( 143 "Got wrong number of \"" + command->GetCommandName() + 144 "\" parameters: " + to_string(parameters.size()) + 145 " instead of " + to_string(command->GetParameterEntries()) + " expected", 146 fkClass, "WarnAboutParameters"); 147 return; 148 } 149 150 auto counter = 0; 151 if ( command == fSetLayoutCmd.get() ) { 152 auto columns = G4UIcommand::ConvertToInt(parameters[counter++]); 153 auto rows = G4UIcommand::ConvertToInt(parameters[counter++]); 154 fPlotParameters->SetLayout(columns, rows); 155 return; 156 } 157 158 if ( command == fSetDimensionsCmd.get() ) { 159 auto width = G4UIcommand::ConvertToInt(parameters[counter++]); 160 auto height = G4UIcommand::ConvertToInt(parameters[counter++]); 161 fPlotParameters->SetDimensions(width, height); 162 return; 163 } 164 165 if ( command == fSetStyleCmd.get() ) { 166 fPlotParameters->SetStyle(newValues); 167 return; 168 } 169 } 170