Geant4 11.2.2
Toolkit for the simulation of the passage of particles through matter
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
G4PlotMessenger.cc
Go to the documentation of this file.
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"
32
33#include "G4UIdirectory.hh"
34#include "G4UIcommand.hh"
35#include "G4UIparameter.hh"
36#include "G4UIcmdWithAString.hh"
37
38#include <vector>
39
40using namespace G4Analysis;
41using std::to_string;
42
43//_____________________________________________________________________________
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//_____________________________________________________________________________
57
58//
59// private functions
60//
61
62//_____________________________________________________________________________
63void 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//_____________________________________________________________________________
75void 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", guidance);
96 fSetStyleCmd->SetParameterName("Style", false);
97 fSetStyleCmd->SetCandidates("inlib_default");
98}
99
100//_____________________________________________________________________________
101void 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//_____________________________________________________________________________
119void 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//_____________________________________________________________________________
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
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}
G4PlotMessenger()=delete
void SetNewValue(G4UIcommand *command, G4String value) final
~G4PlotMessenger() override
void SetLayout(G4int columns, G4int rows)
void SetDimensions(G4int width, G4int height)
void SetStyle(const G4String &style)
std::size_t GetParameterEntries() const
void SetParameter(G4UIparameter *const newParameter)
static G4int ConvertToInt(const char *st)
const G4String & GetCommandName() const
void Tokenize(const G4String &line, std::vector< G4String > &tokens)
void Warn(const G4String &message, const std::string_view inClass, const std::string_view inFunction)