7#include "TDatabasePDG.h"
8#include "TEveGeoNode.h"
9#include "TEveManager.h"
10#include "TGeoManager.h"
11#include "TObjString.h"
13#include <TGLCameraOverlay.h>
14#include <TGLLightSet.h>
15#include <TEveBrowser.h>
18#include "TDOMParser.h"
19#include "TXMLEngine.h"
23#include "nlohmann/json.hpp"
41 stream<<hex<<hex_string;
48: TEveEventManager(
"EventManager",
""),
49 fRunAna(FairRunAna::Instance()),
59 fgShowShowMCPoints(false),
60 fgShowShowRecoPoints(false),
61 fgShowShowRecoTracks(false),
62 fgRedrawRecoPointsReqired(false),
76 fRPhiPlane{0, 0, 1, 0},
77 fRhoZPlane{-1, 0, 0, 0},
93 fPDGToColor[22] = 623;
94 fPDGToColor[-2112] = 2;
96 fPDGToColor[-3122] = 4;
98 fPDGToColor[-3222] = 6;
100 fPDGToColor[-3212] = 8;
101 fPDGToColor[-13] = 9;
102 fPDGToColor[-3112] = 10;
103 fPDGToColor[13] = 11;
104 fPDGToColor[-3322] = 12;
105 fPDGToColor[111] = 13;
106 fPDGToColor[-3312] = 14;
107 fPDGToColor[211] = 15;
108 fPDGToColor[-3334] = 16;
109 fPDGToColor[-211] = 17;
110 fPDGToColor[-15] = 18;
111 fPDGToColor[130] = 19;
112 fPDGToColor[15] = 20;
113 fPDGToColor[321] = 21;
114 fPDGToColor[411] = 22;
115 fPDGToColor[-321] = 23;
116 fPDGToColor[-411] = 24;
117 fPDGToColor[2112] = 25;
118 fPDGToColor[421] = 26;
119 fPDGToColor[2212] = 27;
120 fPDGToColor[-421] = 28;
121 fPDGToColor[-2212] = 29;
122 fPDGToColor[431] = 30;
123 fPDGToColor[310] = 31;
124 fPDGToColor[-431] = 32;
125 fPDGToColor[221] = 33;
126 fPDGToColor[4122] = 34;
127 fPDGToColor[3122] = 35;
128 fPDGToColor[24] = 36;
129 fPDGToColor[3222] = 37;
130 fPDGToColor[-24] = 38;
131 fPDGToColor[3212] = 39;
132 fPDGToColor[23] = 40;
133 fPDGToColor[3112] = 41;
134 fPDGToColor[3322] = 42;
135 fPDGToColor[3312] = 43;
136 fPDGToColor[3334] = 44;
137 fPDGToColor[50000050] = 801;
138 fPDGToColor[1000010020] = 45;
139 fPDGToColor[1000010030] = 48;
140 fPDGToColor[1000020040] = 50;
141 fPDGToColor[1000020030] = 55;
143 InitColorStructure();
153Int_t MpdEventManager::StringToColor(TString color)
155 color = color.ReplaceAll(
" ",
"");
159 if (color.BeginsWith(
"rgb"))
162 if (color.Length() < 6)
164 cout<<color<<
" - RGB triple isn't correct. Color set to default blue"<<endl;
167 TString triple = color(3, color.Length() - 3);
168 triple.Remove(TString::kLeading,
'('); triple.Remove(TString::kTrailing,
')');
170 int red_rgb = -1, green_rgb = -1, blue_rgb = -1;
171 if (triple[0] ==
'#')
173 if (triple.Length() < 7)
175 cout<<triple<<
" - hex triple size after '#' isn't correct (should have 6 symbols). Color set to default blue"<<endl;
179 TString str_red = triple(1,2);
180 TString str_green = triple(3,2);
181 TString str_blue = triple(5,2);
182 if ((!str_red.IsHex()) || (!str_green.IsHex()) || (!str_blue.IsHex()))
184 cout<<triple<<
" - hex triple after '#' has not hex format. Color set to default blue"<<endl;
194 TObjArray* pRGB = triple.Tokenize(
",");
195 if (pRGB->GetEntriesFast() < 3)
197 cout<<triple<<
" - RGB string doesn't include color triple. Color set to default blue"<<endl;
200 red_rgb = ((TObjString*)pRGB->At(0))->GetString().Atoi();
201 green_rgb = ((TObjString*)pRGB->At(1))->GetString().Atoi();
202 blue_rgb = ((TObjString*)pRGB->At(2))->GetString().Atoi();
206 Int_t ci = fLastUsedColor++;
207 new TColor(ci, red_rgb/255.0F, green_rgb/255.0F, blue_rgb/255.0F);
211 if (color.Contains(
"k"))
213 Ssiz_t sign_index = color.First(
'+');
214 if (sign_index == kNPOS)
215 sign_index = color.First(
'-');
217 TString color_name =
"";
218 if (sign_index == kNPOS)
221 color_name = color(0, sign_index);
224 if (color_name.EqualTo(
"kwhite")) color_value = 0;
225 else if (color_name.EqualTo(
"kblack")) color_value = 1;
226 else if (color_name.EqualTo(
"kgray")) color_value = 920;
227 else if (color_name.EqualTo(
"kred")) color_value = 632;
228 else if (color_name.EqualTo(
"kgreen")) color_value = 416;
229 else if (color_name.EqualTo(
"kblue")) color_value = 600;
230 else if (color_name.EqualTo(
"kyellow")) color_value = 400;
231 else if (color_name.EqualTo(
"kmagenta")) color_value = 616;
232 else if (color_name.EqualTo(
"kcyan")) color_value = 432;
233 else if (color_name.EqualTo(
"korange")) color_value = 800;
234 else if (color_name.EqualTo(
"kspring")) color_value = 820;
235 else if (color_name.EqualTo(
"kteal")) color_value = 840;
236 else if (color_name.EqualTo(
"kazure")) color_value = 860;
237 else if (color_name.EqualTo(
"kviolet")) color_value = 880;
238 else if (color_name.EqualTo(
"kpink")) color_value = 900;
239 else if (color_name.EqualTo(
"kkhaki")) color_value = 403;
242 cout<<color_name<<
" not found. Color set to default blue"<<endl;
246 if ((sign_index != kNPOS) && (color.Length() > sign_index+2))
248 TString strNumber = color(sign_index+1, color.Length() - sign_index-1);
249 if (strNumber.IsDigit())
251 if (color(sign_index) ==
'+')
252 color_value += strNumber.Atoi();
254 color_value -= strNumber.Atoi();
264void MpdEventManager::InitColorStructure()
266 auto file_path = gSystem->ExpandPathName(
"$VMCWORKDIR/config/eventdisplay.json");
267 ifstream
file(file_path);
275 for (
auto &particle : data[
"coloring"][
"particles"])
276 fPDGToColor[(
int) particle[
"pdg"]] = StringToColor((
string) particle[
"color"]);
280 cout <<
"MpdEventManager::InitColorStructure() Using default coloring for particles!" << endl;
285 structSelectedColoring *selected_coloring;
286 structLevelColoring *level_coloring;
288 string type = data[
"coloring"][
"type"];
290 if (type ==
"detectors")
294 string scheme = data[
"coloring"][
type][
"scheme"];
298 selected_coloring =
new structSelectedColoring(((
string)
detector[
"name"]),
301 detector.value(
"isRecursiveColoring", kTRUE));
302 vecSelectedColoring.push_back(selected_coloring);
309 for (
auto &level : data[
"coloring"][
type])
311 level_coloring =
new structLevelColoring((
string) level[
"color"],
313 level.value(
"visibility", kFALSE),
314 level.value(
"transparency", 0));
315 vecLevelColoring.push_back(level_coloring);
321 cout <<
"MpdEventManager::InitColorStructure() Using default ROOT coloring for detectors!" << endl;
327 cout <<
"MpdEventManager::InitColorStructure() File " << file_path <<
"not found! Using default coloring!" << endl;
336 TEveManager::Create();
339 if (gGeoManager == NULL)
341 TGeoNode* N = gGeoManager->GetTopNode();
342 TEveGeoTopNode* TNod =
new TEveGeoTopNode(gGeoManager, N, visopt, vislvl, maxvisnds);
345 if (!fXMLConfig.EqualTo(
""))
352 SelectedGeometryColoring();
354 LevelChangeNodeProperty(N, 0);
358 gEve->AddGlobalElement(TNod);
359 gEve->FullRedraw3D(kTRUE);
360 fEvent = gEve->AddEvent(
this);
363 fRPhiMng =
new TEveProjectionManager(TEveProjection::kPT_RPhi);
364 fRhoZMng =
new TEveProjectionManager(TEveProjection::kPT_RhoZ);
365 gEve->AddToListTree(fRPhiMng, kFALSE);
366 gEve->AddToListTree(fRhoZMng, kFALSE);
369 fAxesPhi =
new TEveProjectionAxes(fRPhiMng);
370 fAxesPhi->SetMainColor(kRed);
371 fAxesRho =
new TEveProjectionAxes(fRhoZMng);
372 fAxesRho->SetMainColor(kRed);
375 gEve->GetDefaultViewer()->SetElementName(
"3D View");
379 gEve->GetDefaultViewer()->GetGLViewer()->GetLightSet()->SetLight(TGLLightSet::kLightLeft,
false);
380 gEve->GetDefaultViewer()->GetGLViewer()->GetLightSet()->SetLight(TGLLightSet::kLightRight,
false);
382 gEve->GetDefaultViewer()->GetGLViewer()->UseLightColorSet();
390 TEveWindowSlot* RPhiSlot = TEveWindow::CreateWindowInTab(gEve->GetBrowser()->GetTabRight());
391 TEveWindowPack* RPhiPack = RPhiSlot->MakePack();
392 RPhiPack->SetElementName(
"RPhi View");
393 RPhiPack->SetShowTitleBar(kFALSE);
394 RPhiPack->NewSlot()->MakeCurrent();
395 fRPhiView = gEve->SpawnNewViewer(
"RPhi View",
"");
397 fRPhiGeomScene = gEve->SpawnNewScene(
"RPhi",
"Scene holding geometry for RPhi.");
399 fRPhiGeomScene->AddElement(fAxesPhi);
402 TEveWindowSlot* RhoZSlot = TEveWindow::CreateWindowInTab(gEve->GetBrowser()->GetTabRight());
403 TEveWindowPack* RhoZPack = RhoZSlot->MakePack();
404 RhoZPack->SetElementName(
"RhoZ View");
405 RhoZPack->SetShowTitleBar(kFALSE);
406 RhoZPack->NewSlot()->MakeCurrent();
407 fRhoZView = gEve->SpawnNewViewer(
"RhoZ View",
"");
409 fRhoZGeomScene = gEve->SpawnNewScene(
"RhoZ",
"Scene holding geometry for RhoZ.");
411 fRhoZGeomScene->AddElement(fAxesRho);
413 SetViewers(fRPhiView, fRhoZView);
416 TEveWindowSlot* MultiSlot = TEveWindow::CreateWindowInTab(gEve->GetBrowser()->GetTabRight());
417 TEveWindowPack* MultiPack = MultiSlot->MakePack();
418 MultiPack->SetElementName(
"Multi View");
419 MultiPack->SetHorizontal();
420 MultiPack->SetShowTitleBar(kFALSE);
421 MultiPack->NewSlot()->MakeCurrent();
422 fMulti3DView = gEve->SpawnNewViewer(
"3D View (multi)",
"");
424 fMulti3DView->GetGLViewer()->GetLightSet()->SetLight(TGLLightSet::kLightLeft,
false);
425 fMulti3DView->GetGLViewer()->GetLightSet()->SetLight(TGLLightSet::kLightRight,
false);
427 fMulti3DView->GetGLViewer()->UseLightColorSet();
430 fMulti3DView->AddScene(gEve->GetGlobalScene());
431 fMulti3DView->AddScene(gEve->GetEventScene());
434 MultiPack = MultiPack->NewSlot()->MakePack();
435 MultiPack->SetShowTitleBar(kFALSE);
436 MultiPack->NewSlot()->MakeCurrent();
437 fMultiRPhiView = gEve->SpawnNewViewer(
"RPhi View (multi)",
"");
438 MultiPack->NewSlot()->MakeCurrent();
439 fMultiRhoZView = gEve->SpawnNewViewer(
"RhoZ View (multi)",
"");
441 SetViewers(fMultiRPhiView, fMultiRhoZView);
444 fRPhiView->GetGLViewer()->SetResetCamerasOnUpdate(kFALSE);
445 fRhoZView->GetGLViewer()->SetResetCamerasOnUpdate(kFALSE);
446 fMulti3DView->GetGLViewer()->SetResetCamerasOnUpdate(kFALSE);
447 fMultiRPhiView->GetGLViewer()->SetResetCamerasOnUpdate(kFALSE);
448 fMultiRhoZView->GetGLViewer()->SetResetCamerasOnUpdate(kFALSE);
451 fMulti3DView->GetEveFrame()->HideAllDecorations();
452 fMultiRPhiView->GetEveFrame()->HideAllDecorations();
453 fMultiRhoZView->GetEveFrame()->HideAllDecorations();
456void MpdEventManager::SetViewers(TEveViewer* RPhi, TEveViewer* RhoZ)
458 RPhi->GetGLViewer()->SetCurrentCamera(TGLViewer::kCameraOrthoXOY);
460 RPhi->GetGLViewer()->GetCameraOverlay()->SetOrthographicMode(TGLCameraOverlay::kAxis);
461 RPhi->GetGLViewer()->GetCameraOverlay()->SetShowOrthographic(kTRUE);
463 RPhi->GetGLViewer()->GetLightSet()->SetLight(TGLLightSet::kLightLeft,
false);
464 RPhi->GetGLViewer()->GetLightSet()->SetLight(TGLLightSet::kLightRight,
false);
465 RPhi->GetGLViewer()->GetLightSet()->SetLight(TGLLightSet::kLightTop,
false);
466 RPhi->GetGLViewer()->GetLightSet()->SetLight(TGLLightSet::kLightBottom,
false);
468 RPhi->GetGLViewer()->UseLightColorSet();
471 RhoZ->GetGLViewer()->SetCurrentCamera(TGLViewer::kCameraOrthoZOY);
473 RhoZ->GetGLViewer()->GetCameraOverlay()->SetOrthographicMode(TGLCameraOverlay::kAxis);
474 RhoZ->GetGLViewer()->GetCameraOverlay()->SetShowOrthographic(kTRUE);
476 RhoZ->GetGLViewer()->GetLightSet()->SetLight(TGLLightSet::kLightLeft,
false);
477 RhoZ->GetGLViewer()->GetLightSet()->SetLight(TGLLightSet::kLightRight,
false);
478 RhoZ->GetGLViewer()->GetLightSet()->SetLight(TGLLightSet::kLightFront,
false);
480 RhoZ->GetGLViewer()->UseLightColorSet();
483 RPhi->AddScene(fRPhiGeomScene);
484 RPhi->AddScene(gEve->GetGlobalScene());
485 RPhi->AddScene(gEve->GetEventScene());
486 RhoZ->AddScene(fRhoZGeomScene);
487 RhoZ->AddScene(gEve->GetGlobalScene());
488 RhoZ->AddScene(gEve->GetEventScene());
491 RPhi->GetGLViewer()->GetClipSet()->SetClipType(TGLClip::kClipPlane);
492 RPhi->GetGLViewer()->GetClipSet()->SetClipState(TGLClip::kClipPlane, fRPhiPlane);
493 RhoZ->GetGLViewer()->GetClipSet()->SetClipType(TGLClip::kClipPlane);
494 RhoZ->GetGLViewer()->GetClipSet()->SetClipState(TGLClip::kClipPlane, fRhoZPlane);
498void MpdEventManager::SelectedGeometryColoring()
500 TGeoVolume* curVolume;
501 for (
size_t i = 0;
i < vecSelectedColoring.size();
i++)
503 structSelectedColoring* selected_coloring = vecSelectedColoring[
i];
504 curVolume = gGeoManager->GetVolume(selected_coloring->detector_name);
507 cout<<
"There is no volume with given name: "<<selected_coloring->detector_name<<endl;
509 vecSelectedColoring.erase(vecSelectedColoring.begin() +
i);
513 Int_t curColor = StringToColor(selected_coloring->detector_color);
514 Int_t curTransparency = selected_coloring->detector_transparency;
516 curVolume->SetFillColor(curColor);
517 curVolume->SetLineColor(curColor);
518 curVolume->SetTransparency(curTransparency);
520 if (selected_coloring->isRecursiveColoring)
522 for (
int j = 0; j < curVolume->GetNdaughters(); j++)
524 TGeoNode* child = curVolume->GetNode(j);
525 TGeoVolume* subVolume = child->GetVolume();
527 subVolume->SetFillColor(curColor);
528 subVolume->SetLineColor(curColor);
529 subVolume->SetTransparency(curTransparency);
531 if (child->GetNdaughters() != 0)
532 RecursiveChangeNodeProperty(child, curColor, curTransparency);
540void MpdEventManager::RecursiveChangeNodeProperty(TGeoNode* node, Int_t color,
int transparency)
542 for (
int i = 0;
i < node->GetNdaughters();
i++)
544 TGeoNode* child = node->GetDaughter(
i);
545 TGeoVolume* curVolume = child->GetVolume();
547 curVolume->SetFillColor(color);
548 curVolume->SetLineColor(color);
549 curVolume->SetTransparency(transparency);
551 if (child->GetNdaughters() != 0) RecursiveChangeNodeProperty(child, color, transparency);
562 TGeoVolume* curVolume;
563 for (
size_t i = 0;
i < vecSelectedColoring.size();
i++)
566 curVolume = gGeoManager->GetVolume(selected_coloring->
detector_name);
569 cout<<
"There is no volume with given name: "<< selected_coloring->
detector_name<<endl;
571 vecSelectedColoring.erase(vecSelectedColoring.begin() +
i);
576 Int_t curTransparency = 80;
580 curVolume->SetTransparency(curTransparency);
582 for (
int j = 0; j < curVolume->GetNdaughters(); j++)
584 TGeoNode* child = curVolume->GetNode(j);
585 TGeoVolume* subVolume = child->GetVolume();
587 subVolume->SetTransparency(curTransparency);
589 if (child->GetNdaughters() != 0)
590 RecursiveChangeNodeTransparent(child, curTransparency);
611void MpdEventManager::RecursiveChangeNodeTransparent(TGeoNode* node,
int transparency)
613 for (
int i = 0;
i < node->GetNdaughters();
i++)
615 TGeoNode* child = node->GetDaughter(
i);
616 TGeoVolume* curVolume = child->GetVolume();
618 curVolume->SetTransparency(transparency);
620 if (child->GetNdaughters() != 0) RecursiveChangeNodeTransparent(child, transparency);
625void MpdEventManager::LevelChangeNodeProperty(TGeoNode* node,
size_t level)
627 for (Int_t
i = 0;
i < node->GetNdaughters();
i++)
629 TGeoNode* child = node->GetDaughter(
i);
630 if (level < vecLevelColoring.size())
632 TGeoVolume* curVolume = child->GetVolume();
634 structLevelColoring* level_coloring = vecLevelColoring[
level];
635 curVolume->SetVisibility(level_coloring->visibility);
636 curVolume->SetTransparency(level_coloring->transparency);
637 curVolume->SetFillColor(StringToColor(level_coloring->fill_color));
638 if (level_coloring->isFillLine) curVolume->SetLineColor(StringToColor(level_coloring->fill_color));
640 if (child->GetNdaughters() != 0)
641 LevelChangeNodeProperty(child, ++level);
661 if (!vecSelectedColoring.empty())
663 for (
size_t i = 0;
i < vecSelectedColoring.size();
i++)
664 delete (vecSelectedColoring[
i]);
665 vecSelectedColoring.clear();
667 if (!vecLevelColoring.empty())
669 for (
size_t i = 0;
i < vecLevelColoring.size();
i++)
670 delete (vecLevelColoring[
i]);
671 vecLevelColoring.clear();
678 iCurrentEvent = event;
685 fRunAna->Run((Long64_t)++iCurrentEvent);
691 fRunAna->Run((Long64_t)--iCurrentEvent);
698 if (fPDGToColor.find(pdg) != fPDGToColor.end())
699 return fPDGToColor[pdg];
707 TDatabasePDG* pdgDB = TDatabasePDG::Instance();
709 const Double_t kAu2Gev = 0.9314943228;
710 const Double_t khSlash = 1.0545726663e-27;
711 const Double_t kErg2Gev = 1/1.6021773349e-3;
712 const Double_t khShGev = khSlash*kErg2Gev;
713 const Double_t kYear2Sec = 3600*24*365.25;
716 if (!pdgDB->GetParticle(1000010020))
717 pdgDB->AddParticle(
"Deuteron",
"Deuteron", 2*kAu2Gev+8.071e-3,kTRUE, 0, 3,
"Ion", 1000010020);
719 if (!pdgDB->GetParticle(1000010030))
720 pdgDB->AddParticle(
"Triton",
"Triton", 3*kAu2Gev+14.931e-3, kFALSE, khShGev/(12.33*kYear2Sec), 3,
"Ion", 1000010030);
722 if (!pdgDB->GetParticle(1000020040))
723 pdgDB->AddParticle(
"Alpha",
"Alpha", 4*kAu2Gev+2.424e-3, kTRUE, khShGev/(12.33*kYear2Sec), 6,
"Ion", 1000020040);
725 if (!pdgDB->GetParticle(1000020030))
726 pdgDB->AddParticle(
"HE3",
"HE3", 3*kAu2Gev+14.931e-3, kFALSE, 0, 6,
"Ion", 1000020030);
729 if (!pdgDB->GetParticle(50000050))
730 pdgDB->AddParticle(
"Cherenkov",
"Cherenkov", 0, kFALSE, 0, 0,
"Special", 50000050);
732 if (!pdgDB->GetParticle(50000051))
733 pdgDB->AddParticle(
"FeedbackPhoton",
"FeedbackPhoton", 0, kFALSE, 0, 0,
"Special", 50000051);
738 switch (element_list)
798 TDOMParser* Parser =
new TDOMParser();
799 Parser->SetValidate(kFALSE);
800 Parser->ParseFile(fXMLConfig);
807 TString nodename = xml->
GetChild(
i)->GetName();
808 if (nodename.EqualTo(
"Detectors"))
810 TGeoNode* top = gGeoManager->GetTopNode();
812 if(top_xml !=
nullptr)
815 else if (nodename.EqualTo(
"MCTracksColors"))
823 fPDGToColor[pgd_code.Atoi()] = StringToColor(color_code);
832 TString node_name = node->GetName();
834 Bool_t recursive = (xml->
GetAttrib(
"recursive")->
GetValue().Length()!=0&&!name.EqualTo(node_name));
835 if (recursive && depth == 0)
839 if (!color.EqualTo(
""))
841 node->GetVolume()->SetFillColor(StringToColor(color));
842 node->GetVolume()->SetLineColor(StringToColor(color));
846 if (!transparency.EqualTo(
""))
847 node->GetVolume()->SetTransparency((Char_t)(transparency.Atoi()));
852 Int_t xml_depth = val.Atoi();
856 for (
int i = 0;
i < node->GetNdaughters();
i++)
858 TGeoNode* daughter_node = node->GetDaughter(
i);
865 for (
int i = 0;
i < node->GetNdaughters();
i++)
867 TString subdetector_name = node->GetDaughter(
i)->GetName();
872 if (subnode_name == subdetector_name)
882 if (check_energy < fMinEnergyLimit)
883 fMinEnergyLimit = check_energy;
884 if (check_energy > fMaxEnergyLimit)
886 bool isIncreaseCut =
false;
887 if (fMaxEnergyLimit == fMaxEnergyCut) isIncreaseCut =
true;
888 fMaxEnergyLimit = ceil(check_energy*add_multiplier);
889 if (isIncreaseCut) fMaxEnergyCut = fMaxEnergyLimit;
int hex_string_to_int(string hex_string)
TGCheckButton * fShowMCTracks
void UpdateEnergySlider()
TGCheckButton * fShowMCPoints
TGCheckButton * fShowRecoPoints
TGCheckButton * fShowRecoTracks
TEveElementList * EveRecoPoints
virtual void Init(Int_t visopt=1, Int_t vislvl=3, Int_t maxvisnds=10000)
VisualizationColoring gVisualizationColoring
virtual void ExpandEnergyLimits(Float_t check_energy, float add_multiplier=1)
static MpdEventManager * Instance()
MpdEventManagerEditor * GetEventEditor()
virtual ~MpdEventManager()
TEveElementList * EveRecoTracks
virtual void GotoEvent(Int_t event)
TEveElementList * EveMCTracks
void SetTransparentGeometry(bool is_on)
void LoadXMLDetector(TGeoNode *node, MpdXMLNode *xml, Int_t depth=0)
virtual void AddParticlesToPdgDataBase()
void AddEventElement(TEveElement *element, ElementList element_list)
virtual Int_t Color(Int_t pdg)
virtual void LoadXMLSettings()
TEveElementList * EveMCPoints
virtual void DisplaySettings()
MpdXMLNode * GetRootNode() const
MpdXMLNode * GetChild(TString name, Int_t count=0) const
MpdXMLAttrib * GetAttrib(TString name) const
Int_t GetNChildren() const
a class to store JSON values
exception indicating executing a member function with a wrong type
basic_json<> json
default specialization
int detector_transparency