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 {
169 if (!
mat || !
mat->GetName())
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);
369 return med->GetMaterial();
414 if (
mat->GetDensity() < 0.1)
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)
ROOT::Detail::TRangeCast< T, true > TRangeDynCast
TRangeDynCast is an adapter class that allows the typed iteration through a TCollection.
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t r
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)
Static method returning color number for color specified by hex color string of form: "#rrggbb",...
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.
Media are used to store properties related to tracking and which are useful only when using geometry ...
TGeoVolume, TGeoVolumeMulti, TGeoVolumeAssembly are the volume classes.
TGeoMedium * GetMedium() const