109inline Int_t RGB(
int r,
int g,
int b)
123inline std::string Norm(std::string s)
125 std::transform(s.begin(), s.end(), s.begin(), [](
unsigned char c) {
126 if (c ==
'-' || c ==
' ' || c ==
'.' || c ==
'/' || c ==
'\\' || c ==
',')
128 return (char)std::tolower(c);
133inline bool Has(
const std::string &s,
const char *token)
135 return s.find(token) != std::string::npos;
138enum class EMatClass {
170 return EMatClass::kUnknown;
171 const std::string
n = Norm(mat->
GetName());
174 if (Has(
n,
"vacuum"))
175 return EMatClass::kVacuum;
177 return EMatClass::kAir;
178 if (Has(
n,
"c6f14") || Has(
n,
"cf4") || Has(
n,
"co2") || Has(
n,
"argon") || Has(
n,
"gas") || Has(
n,
"dead_"))
179 return EMatClass::kGas;
182 if (Has(
n,
"hmp_w") || Has(
n,
"tungsten") || Has(
n,
"_w_") || Has(
n,
"_w"))
183 return EMatClass::kTungsten;
184 if (Has(
n,
"hmp_cu") || Has(
n,
"copper") || Has(
n,
"_cu"))
185 return EMatClass::kCopper;
186 if (Has(
n,
"hmp_al") || Has(
n,
"aluminium") || Has(
n,
"aluminum") || Has(
n,
"2219") || Has(
n,
"_al"))
187 return EMatClass::kAluminium;
189 if (Has(
n,
"steel") || Has(
n,
"stainless"))
190 return EMatClass::kSteel;
191 if (Has(
n,
"cast_iron") || (Has(
n,
"iron") && !Has(
n,
"iridium")))
192 return EMatClass::kIron;
195 if (Has(
n,
"g10") || Has(
n,
"fr4") || Has(
n,
"textolit"))
196 return EMatClass::kFR4_G10;
199 if (Has(
n,
"carbon_fibre") || Has(
n,
"carbon_fiber"))
200 return EMatClass::kCarbonFiber;
202 return EMatClass::kEpoxy;
204 if (Has(
n,
"borated") && (Has(
n,
"polyethyl") || Has(
n,
"polyethylene") || Has(
n,
"pe")))
205 return EMatClass::kBoratedPE;
207 if (Has(
n,
"polyimide") || Has(
n,
"kapton"))
208 return EMatClass::kPolyimide;
209 if (Has(
n,
"polyurethane"))
210 return EMatClass::kPolyurethane;
212 return EMatClass::kPVC;
213 if (Has(
n,
"polyethyl") || Has(
n,
"polyethylene"))
214 return EMatClass::kPE;
216 return EMatClass::kNomex;
218 return EMatClass::kTyvek;
220 return EMatClass::kFoam;
221 if (Has(
n,
"roha") || Has(
n,
"rohacell"))
222 return EMatClass::kRohacell;
225 if (Has(
n,
"sio2") || Has(
n,
"quartz") || Has(
n,
"silica"))
226 return EMatClass::kSiO2;
227 if (Has(
n,
"aluminium_nitride") || Has(
n,
"aln"))
228 return EMatClass::kAlN;
229 if (Has(
n,
"ceramic"))
230 return EMatClass::kCeramic;
233 if (Has(
n,
"cables") || Has(
n,
"cable"))
234 return EMatClass::kCables;
235 if (Has(
n,
"thermalscreen") || Has(
n,
"thermal_screen") || Has(
n,
"thermal"))
236 return EMatClass::kThermalScreen;
238 return EMatClass::kUnknown;
246 case EMatClass::kGas:
return RGB(190, 230, 240);
247 case EMatClass::kAir:
return RGB(210, 210, 210);
248 case EMatClass::kVacuum:
return RGB(230, 230, 230);
250 case EMatClass::kCopper:
return RGB(184, 115, 51);
251 case EMatClass::kAluminium:
return RGB(190, 190, 195);
252 case EMatClass::kTungsten:
return RGB(45, 45, 50);
253 case EMatClass::kSteel:
return RGB(120, 125, 135);
254 case EMatClass::kIron:
return RGB(90, 95, 105);
256 case EMatClass::kFR4_G10:
return RGB(35, 115, 55);
257 case EMatClass::kCarbonFiber:
return RGB(35, 35, 38);
258 case EMatClass::kEpoxy:
return RGB(140, 95, 55);
260 case EMatClass::kPE:
return RGB(220, 215, 205);
261 case EMatClass::kBoratedPE:
return RGB(215, 205, 185);
262 case EMatClass::kPVC:
return RGB(200, 200, 205);
263 case EMatClass::kPolyurethane:
return RGB(230, 225, 185);
264 case EMatClass::kPolyimide:
return RGB(185, 140, 50);
265 case EMatClass::kNomex:
return RGB(220, 185, 90);
266 case EMatClass::kTyvek:
return RGB(235, 240, 245);
267 case EMatClass::kFoam:
return RGB(245, 245, 240);
268 case EMatClass::kRohacell:
return RGB(245, 240, 235);
270 case EMatClass::kSiO2:
return RGB(230, 235, 240);
271 case EMatClass::kAlN:
return RGB(235, 235, 225);
272 case EMatClass::kCeramic:
return RGB(225, 225, 220);
274 case EMatClass::kCables:
return RGB(55, 55, 60);
275 case EMatClass::kThermalScreen:
return RGB(195, 205, 215);
282 case EMatClass::kGas:
return RGB(120, 220, 255);
283 case EMatClass::kAir:
return RGB(170, 240, 255);
284 case EMatClass::kVacuum:
return RGB(245, 245, 245);
286 case EMatClass::kCopper:
return RGB(255, 140, 60);
287 case EMatClass::kAluminium:
return RGB(210, 210, 220);
288 case EMatClass::kTungsten:
return RGB(80, 80, 90);
289 case EMatClass::kSteel:
return RGB(160, 160, 175);
290 case EMatClass::kIron:
return RGB(130, 135, 150);
292 case EMatClass::kFR4_G10:
return RGB(0, 200, 70);
293 case EMatClass::kCarbonFiber:
return RGB(120, 120, 130);
294 case EMatClass::kEpoxy:
return RGB(255, 180, 80);
296 case EMatClass::kBoratedPE:
return RGB(255, 240, 160);
297 case EMatClass::kPolyimide:
return RGB(255, 200, 40);
298 case EMatClass::kTyvek:
return RGB(230, 250, 255);
299 case EMatClass::kFoam:
return RGB(255, 230, 230);
300 case EMatClass::kRohacell:
return RGB(230, 255, 230);
302 case EMatClass::kSiO2:
return RGB(210, 235, 255);
303 case EMatClass::kAlN:
return RGB(255, 255, 210);
305 case EMatClass::kCables:
return RGB(255, 80, 80);
306 case EMatClass::kThermalScreen:
return RGB(180, 220, 255);
313 case EMatClass::kGas:
return RGB(20, 90, 110);
314 case EMatClass::kAir:
return RGB(70, 70, 75);
315 case EMatClass::kVacuum:
return RGB(110, 110, 115);
317 case EMatClass::kCopper:
return RGB(110, 45, 10);
318 case EMatClass::kAluminium:
return RGB(90, 95, 105);
319 case EMatClass::kTungsten:
return RGB(30, 30, 35);
320 case EMatClass::kSteel:
return RGB(60, 65, 75);
321 case EMatClass::kIron:
return RGB(50, 55, 65);
323 case EMatClass::kFR4_G10:
return RGB(10, 80, 30);
324 case EMatClass::kCarbonFiber:
return RGB(25, 25, 28);
325 case EMatClass::kEpoxy:
return RGB(85, 55, 25);
327 case EMatClass::kBoratedPE:
return RGB(110, 95, 55);
328 case EMatClass::kPolyimide:
return RGB(100, 70, 10);
329 case EMatClass::kTyvek:
return RGB(80, 95, 110);
330 case EMatClass::kFoam:
return RGB(100, 80, 80);
331 case EMatClass::kRohacell:
return RGB(85, 105, 85);
333 case EMatClass::kSiO2:
return RGB(70, 85, 100);
334 case EMatClass::kAlN:
return RGB(90, 90, 70);
336 case EMatClass::kCables:
return RGB(80, 20, 20);
337 case EMatClass::kThermalScreen:
return RGB(70, 85, 100);
348 const auto cls = ClassFromName(mat);
349 return ClassColor(cls,
set);
389 const Int_t cName = NameOverrideColor(mat,
fSet);
406 return ClampTransp(t);
438 return RGB(60, 60, 60);
440 return RGB(90, 110, 130);
442 return RGB(120, 140, 155);
444 return RGB(40, 85, 170);
446 return RGB(140, 160, 120);
448 return RGB(175, 175, 175);
450 return RGB(110, 120, 130);
452 return RGB(95, 105, 115);
454 return RGB(184, 115, 51);
456 return RGB(150, 150, 155);
458 return RGB(160, 130, 70);
460 return RGB(140, 145, 150);
462 return RGB(120, 125, 130);
464 return RGB(105, 110, 120);
466 return RGB(45, 45, 50);
468 return RGB(130, 110, 30);
470 return RGB(90, 80, 95);
471 return RGB(80, 85, 90);
475 return RGB(120, 220, 255);
477 return RGB(255, 120, 220);
479 return RGB(80, 140, 255);
481 return RGB(80, 200, 255);
483 return RGB(80, 240, 140);
485 return RGB(255, 240, 100);
487 return RGB(255, 170, 60);
489 return RGB(255, 90, 90);
491 return RGB(140, 255, 200);
493 return RGB(200, 140, 255);
494 return RGB(255, 160, 220);
498 return RGB(30, 30, 30);
500 return RGB(70, 20, 20);
502 return RGB(15, 45, 90);
504 return RGB(10, 65, 120);
506 return RGB(25, 80, 35);
508 return RGB(90, 70, 15);
510 return RGB(110, 45, 10);
512 return RGB(110, 15, 35);
514 return RGB(55, 20, 85);
516 return RGB(35, 35, 45);
517 return RGB(60, 50, 70);
int Int_t
Signed integer 4 bytes (int).
EGeoColorSet
Enumeration of predefined geometry color schemes.
@ kNatural
Natural, material-inspired colors (default).
@ kFlashy
Bright, high-contrast colors for presentations.
@ kHighContrast
Dark, saturated colors for light backgrounds.
static Int_t GetColor(const char *hexcolor)
virtual Int_t Transparency(const TGeoVolume *vol) const
Compute the transparency for a given volume.
TGeoColorScheme(EGeoColorSet set=EGeoColorSet::kNatural)
Constructor.
virtual Int_t ColorForZ(Int_t Z, EGeoColorSet set) const
Compute fallback color based on material effective Z.
virtual Int_t Color(const TGeoVolume *vol) const
Compute the color for a given volume.
EGeoColorSet fSet
Active color set selection.
TranspHook_t fTranspHook
Optional user hook for transparency.
static const TGeoMaterial * GetMaterial(const TGeoVolume *vol)
Retrieve the material associated with a geometry volume.
ZFallbackHook_t fZFallbackHook
Optional user hook for Z fallback.
virtual ~TGeoColorScheme()
Virtual destructor.
ColorHook_t fColorHook
Optional user hook for color assignment.
Base class describing materials.
virtual Double_t GetDensity() const
virtual Double_t GetZ() const
Media are used to store properties related to tracking and which are useful only when using geometry ...
TGeoMaterial * GetMaterial() const
TGeoVolume, TGeoVolumeMulti, TGeoVolumeAssembly are the volume classes.
TGeoMedium * GetMedium() const
const char * GetName() const override
Returns name of object.