Complex example showing ALICE VSD visualization.
Only standard ROOT is used to process the ALICE VSD files.
No ALICE code is needed – the VSD file is exported from AliRoot into VSD format – see TEveVSDStructs.h and TEveVSD.h.
A simple geometry of 10KB, extracted from the full TGeo-geometry, is used to outline the central detectors of ALICE.
All files are access from the web by using the "CACHEREAD" option.
MultiView *gMultiView = nullptr;
class TVSDReader {
public:
public:
TVSDReader(const char *file_name)
: fFile(nullptr),
fDirectory(nullptr),
fEvDirKeys(nullptr),
fVSD(nullptr),
fMaxEv(-1),
fCurEv(-1),
fTrackList(nullptr),
fITSClusters(nullptr),
fTPCClusters(nullptr),
fTRDClusters(nullptr),
fTOFClusters(nullptr)
{
if (!fFile) {
Error(
"VSD_Reader",
"Can not open file '%s' ... terminating.", file_name);
}
while (lnk) {
}
}
if (fMaxEv == 0) {
Error(
"VSD_Reader",
"No events to show ... terminating.");
}
fVSD = new TEveVSD;
}
virtual ~TVSDReader()
{
DropEvent();
delete fVSD;
delete fEvDirKeys;
delete fFile;
}
void AttachEvent()
{
}
void DropEvent()
{
gEve->GetViewers()->DeleteAnnotations();
gEve->GetCurrentEvent()->DestroyElements();
delete fDirectory;
fDirectory = nullptr;
}
void NextEvent() { GotoEvent(fCurEv + 1); }
void PrevEvent() { GotoEvent(fCurEv - 1); }
{
if (ev < 0 || ev >= fMaxEv) {
Warning(
"GotoEvent",
"Invalid event id %d.", ev);
}
DropEvent();
fCurEv = ev;
fDirectory = (TDirectory *)((TKey *)fEvDirKeys->
At(fCurEv))->ReadObj();
AttachEvent();
LoadClusters(fITSClusters, "ITS", 0);
LoadClusters(fTPCClusters, "TPC", 1);
LoadClusters(fTRDClusters, "TRD", 2);
LoadClusters(fTOFClusters, "TOF", 3);
LoadEsdTracks();
auto top =
gEve->GetCurrentEvent();
gMultiView->DestroyEventRPhi();
gMultiView->ImportEventRPhi(top);
gMultiView->DestroyEventRhoZ();
gMultiView->ImportEventRhoZ(top);
}
void LoadClusters(TEvePointSet *&ps,
const TString &det_name,
Int_t det_id)
{
if (ps == nullptr) {
ps = new TEvePointSet(det_name);
} else {
}
ss.Select();
}
enum ESDTrackFlags {
kITSin = 0x0001,
kITSout = 0x0002,
kITSrefit = 0x0004,
kITSpid = 0x0008,
kTPCin = 0x0010,
kTPCout = 0x0020,
kTPCrefit = 0x0040,
kTPCpid = 0x0080,
kTRDin = 0x0100,
kTRDout = 0x0200,
kTRDrefit = 0x0400,
kTRDpid = 0x0800,
kTOFin = 0x1000,
kTOFout = 0x2000,
kTOFrefit = 0x4000,
kTOFpid = 0x8000,
kHMPIDpid = 0x20000,
kEMCALmatch = 0x40000,
kTRDbackup = 0x80000,
kTRDStop = 0x20000000,
kESDpid = 0x40000000,
kTIME = 0x80000000
};
{
}
void LoadEsdTracks()
{
if (fTrackList == nullptr) {
fTrackList = new TEveTrackList("ESD Tracks");
} else {
}
TEveTrack *track =
new TEveTrack(&fVSD->
fR, trkProp);
}
gEve->AddElement(fTrackList);
}
};
TVSDReader *gVSDReader = nullptr;
void make_gui();
void alice_vsd(const char *vsd_file_name = "http://mtadel.home.cern.ch/mtadel/root/AliVSD.root")
{
gVSDReader = new TVSDReader(vsd_file_name);
{
auto geom =
TFile::Open(
"http://mtadel.home.cern.ch/mtadel/root/alice_mini_geom.root",
"CACHEREAD");
if (!geom)
return;
geom->Close();
delete geom;
gEve->AddGlobalElement(gentle_geom);
}
gMultiView = new MultiView;
gMultiView->SetDepth(-10);
gMultiView->ImportGeomRPhi(gentle_geom);
gMultiView->ImportGeomRhoZ(gentle_geom);
gMultiView->SetDepth(0);
gEve->GetViewers()->SwitchColorSet();
gEve->GetBrowser()->GetTabRight()->SetTab(1);
make_gui();
gVSDReader->GotoEvent(0);
}
void make_gui()
{
auto browser =
gEve->GetBrowser();
frmMain->SetWindowName("XX GUI");
{
b->Connect(
"Clicked()",
"TVSDReader", gVSDReader,
"PrevEvent()");
b->Connect(
"Clicked()",
"TVSDReader", gVSDReader,
"NextEvent()");
}
frmMain->AddFrame(hf);
frmMain->MapSubwindows();
frmMain->Resize();
frmMain->MapWindow();
browser->StopEmbedding();
browser->SetTabTitle("Event Control", 0);
}
Multi-view (3d, rphi, rhoz) service class using EVE Window Manager.
int Int_t
Signed integer 4 bytes (int).
bool Bool_t
Boolean (0=false, 1=true) (bool).
short Color_t
Color number (short).
#define ClassDef(name, id)
Error("WriteTObject","The current directory (%s) is not associated with a file. The object (%s) has not been written.", GetName(), objname)
void Warning(const char *location, const char *msgfmt,...)
Use this function in warning situations.
char * Form(const char *fmt,...)
Formats a string in a circular formatting buffer.
TList * GetListOfKeys() const override
Describe directory structure in memory.
virtual void AddElement(TEveElement *el)
Add el to the list of children.
virtual void SetMainColor(Color_t color)
Set main color of the element.
void IncDenyDestroy()
Increases the deny-destroy count of the element.
virtual void DestroyElements()
Destroy all children of this element.
Base class for event management and navigation.
Wrapper for TGeoShape with absolute positioning and color attributes allowing display of extracted TG...
static TEveGeoShape * ImportShapeExtract(TEveGeoShapeExtract *gse, TEveElement *parent=nullptr)
Import a shape extract 'gse' under element 'parent'.
static TEveManager * Create(Bool_t map_window=kTRUE, Option_t *opt="FIV")
If global TEveManager* gEve is not set initialize it.
TEvePointSet is a render-element holding a collection of 3D points with optional per-point TRef and a...
virtual void SetTitle(const char *t)
void Reset(Int_t n_points=0, Int_t n_int_ids=0)
Drop all data and set-up the data structures to recive new data.
void SetMarkerStyle(Style_t mstyle=1) override
Set marker style, propagate to projecteds.
void SetMarkerSize(Size_t msize=1) override
Set marker size, propagate to projecteds.
A list of tracks supporting change of common attributes and selection based on track parameters.
void SetMarkerStyle(Style_t s) override
Set marker style for the list and the elements.
void SetMarkerColor(Color_t c) override
Set marker color for the list and the elements.
void SetMainColor(Color_t c) override
Set main (line) color for the list and the elements.
void SetMarkerSize(Size_t s) override
Set marker size for the list and the elements.
void MakeTracks(Bool_t recurse=kTRUE)
Regenerate the visual representations of tracks.
TEveTrackPropagator * GetPropagator()
void SetMagField(Double_t bX, Double_t bY, Double_t bZ)
Set constant magnetic field and rebuild tracks.
void SetAttLineAttMarker(TEveTrackList *tl)
Set line and marker attributes from TEveTrackList.
virtual void SetStdTitle()
Set standard track title based on most data-member values.
Visualization Summary Data - a collection of trees holding standard event data in experiment independ...
static void DisableTObjectStreamersForVSDStruct()
Disable TObject streamers for those VSD structs that inherit from TObject directly.
virtual void SetBranchAddresses()
Set branche addresses of internal trees.
virtual void DeleteTrees()
Delete internal trees.
virtual void SetDirectory(TDirectory *dir)
Set directory in which the trees are (or will be) created.
TTree * fTreeC
! Clusters.
virtual void LoadTrees()
Load internal trees from directory.
TTree * fTreeR
! Reconstructed tracks.
A file, usually with extension .root, that stores data and code in the form of serialized objects in ...
static TFile * Open(const char *name, Option_t *option="", const char *ftitle="", Int_t compress=ROOT::RCompressionSetting::EDefaults::kUseCompiledDefault, Int_t netopt=0)
Create / open a file.
static Bool_t SetCacheFileDir(std::string_view cacheDir, Bool_t operateDisconnected=kTRUE, Bool_t forceCacheread=kFALSE)
Sets the directory where to locally stage/cache remote files.
void Close(Option_t *option="") override
Close a file.
A composite frame that layout their children in horizontal way.
Defines top level windows that interact with the system Window Manager.
virtual TObjLink * FirstLink() const
Int_t GetEntriesFast() const
TObject * At(Int_t idx) const override
void Add(TObject *obj) override
Wrapper around a TObject so it can be stored in a TList.
TObject * GetObject() const
virtual const char * GetName() const
Returns name of object.
Wrapper for PCRE library (Perl Compatible Regular Expressions).
virtual Int_t Size() const
virtual void SetName(const char *name)
Change (i.e.
static TString Format(const char *fmt,...)
Static method which formats a string using a printf style format descriptor and return a TString.
virtual Int_t GetEntry(Long64_t entry, Int_t getall=0)
Read all branches of entry and return total number of bytes read.
virtual Long64_t GetEntries() const