19#include "BDSColours.hh"
21#include "BDSException.hh"
22#include "BDSUtilities.hh"
40BDSColours::~BDSColours()
59 colours[
"default"] =
new G4Colour(0.9, 0.9, 0.9);
60 colours[
"warning"] =
new G4Colour(1, 0.078, 0.576);
63 colours[
"traj_neutral"] =
new G4Colour(0.2, 0.7, 0.0, 0.2);
64 colours[
"traj_positive"] =
new G4Colour(0.0, 0.2, 0.9);
65 colours[
"traj_negative"] =
new G4Colour(0.8, 0.0, 0.0);
68 colours[
"tunnel"] =
new G4Colour(0.545, 0.533, 0.470);
69 colours[
"tunnelfloor"] =
new G4Colour(0.5, 0.5, 0.45);
70 colours[
"soil"] =
new G4Colour(0.545, 0.353, 0, 0.4);
74 colours[
"beampipe"] =
new G4Colour(0.4, 0.4, 0.4);
76 colours[
"sectorbend"] =
new G4Colour(0, 0.4, 0.8);
80 colours[
"quadrupole"] =
new G4Colour(0.82, 0.1, 0.1);
81 colours[
"sextupole"] =
new G4Colour(1, 0.8, 0);
82 colours[
"octupole"] =
new G4Colour(0, 0.6, 0.3);
83 colours[
"decapole"] =
new G4Colour(0.3, 0.2, 0.7);
84 colours[
"solenoid"] =
new G4Colour(1, 0.549, 0, 0.7);
85 colours[
"multipole"] =
new G4Colour(0.466, 0.533, 0.6);
86 colours[
"rfcavity"] =
new G4Colour(0.466, 0.533, 0.6);
90 colours[
"srfcavity"] =
new G4Colour(0.69, 0.769, 0.871);
91 colours[
"collimator"] =
new G4Colour(0.25, 0.4, 0.2);
97 colours[
"muonspoiler"] =
new G4Colour(0, 0.807, 0.819);
98 colours[
"vkicker"] =
new G4Colour(0.73, 0.33, 0.83);
99 colours[
"hkicker"] =
new G4Colour(0.3, 0.2, 0.7);
102 colours[
"degrader"] =
new G4Colour(0.625, 0.625, 0.625);
104 colours[
"undulator"] =
new G4Colour(0.625, 0.625, 0.625);
113 colours[
"screen"] =
new G4Colour(0.69, 0.769, 0.871);
117 colours[
"opaquebox"] =
new G4Colour(0.2, 0.2, 0.2, 0.2);
120 colours[
"iron"] =
new G4Colour(0.509, 0.321, 0.294);
121 colours[
"kapton"] =
new G4Colour(0.929, 0.380, 0.082, 0.5);
122 colours[
"lead"] =
new G4Colour(0.377, 0.408, 0.451);
125 colours[
"coil"] =
new G4Colour(0.722, 0.451, 0.2);
127 colours[
"LHCcopperskin"] =
new G4Colour(0.722, 0.525, 0.043);
128 colours[
"LHCcoil"] =
new G4Colour(0.9, 0.75, 0);
129 colours[
"LHCcollar"] =
new G4Colour(0.9, 0.9, 0.9);
130 colours[
"LHCyoke"] =
new G4Colour(0, 0.5, 1.0);
132 colours[
"gdml"] =
new G4Colour(0.4, 0.2, 0);
133 colours[
"screenframe"] =
new G4Colour(0.7, 0.7, 0.7, 0.4);
136 colours[
"white"] =
new G4Colour(G4Colour::White());
137 colours[
"gray"] =
new G4Colour(G4Colour::Gray());
138 colours[
"grey"] =
new G4Colour(G4Colour::Grey());
139 colours[
"black"] =
new G4Colour(G4Colour::Black());
140 colours[
"brown"] =
new G4Colour(G4Colour::Brown());
141 colours[
"red"] =
new G4Colour(G4Colour::Red());
142 colours[
"green"] =
new G4Colour(G4Colour::Green());
143 colours[
"blue"] =
new G4Colour(G4Colour::Blue());
144 colours[
"cyan"] =
new G4Colour(G4Colour::Cyan());
145 colours[
"magenta"] =
new G4Colour(G4Colour::Magenta());
146 colours[
"yellow"] =
new G4Colour(G4Colour::Yellow());
147 colours[
"reallyreallydarkgrey"] =
new G4Colour(0.2, 0.2, 0.2);
159 G4bool normaliseTo255)
163 G4cerr <<
"Colour \"" << name <<
"\" is already defined - clashing definitions" << G4endl;
164 G4cout <<
"Already defined colours are " << G4endl;
166 throw BDSException(__METHOD_NAME__,
"duplicate colour definition");
175 {newColour =
new G4Colour(red/255.,green/255.,blue/255.,alpha);}
177 {newColour =
new G4Colour(red, green, blue, alpha);}
184 G4cout << __METHOD_NAME__ <<
"Colour Table" << G4endl;
185 G4cout <<
"This is only the pre-defined BDSIM colours and not the user-defined ones." << G4endl;
186 G4cout <<
"+---------------------+-----+-----+-----+------+" << G4endl;
187 G4cout <<
"| Name | R | G | B | A |" << G4endl;
188 G4cout <<
"+=====================+=====+=====+=====+======+" << G4endl;
189 for (
const auto& col :
colours)
191 int r = (int)(col.second->GetRed() * 255);
192 int g = (int)(col.second->GetGreen() * 255);
193 int b = (int)(col.second->GetBlue() * 255);
194 double a = col.second->GetAlpha();
195 G4cout <<
"| " << std::setw(20) << col.first <<
"| "
196 << std::setw(3) << r <<
" | "
197 << std::setw(3) << g <<
" | "
198 << std::setw(3) << b <<
" | "
199 << std::setw(4) << a <<
" |" << G4endl;
200 G4cout <<
"+---------------------+-----+-----+-----+------+" << G4endl;
205 G4bool normaliseTo255)
207 G4String colourName = type;
208 G4bool canDefine =
false;
211 colourName = type.substr(0, type.find(
":"));
215 auto it =
colours.find(colourName);
220 else if (it ==
colours.end() && canDefine)
225 G4String rgb = type.substr(type.find(
":")+1);
226 std::stringstream ss(rgb);
229 if (ss.rdbuf()->in_avail() != 0)
235 {
throw BDSException(__METHOD_NAME__,
"unknown colour \"" + type +
"\"");}
Colour class that holds all colours used in BDSIM.
static BDSColours * Instance()
singleton pattern
G4Colour * GetColour(const G4String &type, G4bool normaliseTo255=true)
Get colour from name.
void DefineColour(const G4String &name, G4double red, G4double green, G4double blue, G4double alpha=1, G4bool normaliseTo255=true)
Define a new colour.
BDSColours()
Private constructor as singleton.
std::map< G4int, G4String > magnetName
std::map< G4String, G4Colour * > colours
A map of the colour for each type or component by name.
General exception with possible name of object and message.
G4bool StrContains(const G4String &str, const G4String &test)
Utility function to simplify lots of syntax changes for pedantic g4 changes.
void EnsureInLimits(G4double &value, G4double lowerLimit, G4double upperLimit)