Logo ROOT  
Reference Guide
alice_esd.C
Go to the documentation of this file.
1/// \file
2/// \ingroup tutorial_eve
3/// Complex example showing ALICE ESD track visualization.
4///
5/// alice_esd.C - a simple event-display for ALICE ESD tracks and clusters
6///
7///
8/// Only standard ROOT is used to process the ALICE ESD files.
9///
10/// No ALICE code is needed, only four simple coordinate-transformation
11/// functions declared in this macro.
12///
13/// A simple geometry of 10KB, extracted from the full TGeo-geometry, is
14/// used to outline the central detectors of ALICE.
15///
16/// All files are access from the web by using the "CACHEREAD" option.
17///
18///
19/// ### Automatic building of ALICE ESD class declarations and dictionaries.
20///
21/// ALICE ESD is a TTree containing tracks and other event-related
22/// information with one entry per event. All these classes are part of
23/// the AliROOT offline framework and are not available to standard
24/// ROOT.
25///
26/// To be able to access the event data in a natural way, by using
27/// data-members of classes and object containers, the header files and
28/// class dictionaries are automatically generated from the
29/// TStreamerInfo classes stored in the ESD file by using the
30/// TFile::MakeProject() function. The header files and a shared library
31/// is created in the aliesd/ directory and can be loaded dynamically
32/// into the ROOT session.
33///
34/// See the run_alice_esd.C macro.
35///
36///
37/// ### Creation of simple GUI for event navigation.
38///
39/// Most common use of the event-display is to browse through a
40/// collection of events. Thus a simple GUI allowing this is created in
41/// the function make_gui().
42///
43/// Eve uses the configurable ROOT-browser as its main window and so we
44/// create an extra tab in the left working area of the browser and
45/// provide backward/forward buttons.
46///
47///
48/// ### Event-navigation functions.
49///
50/// As this is a simple macro, we store the information about the
51/// current event in the global variable 'Int_t esd_event_id'. The
52/// functions for event-navigation simply modify this variable and call
53/// the load_event() function which does the following:
54/// 1. drop the old visualization objects;
55/// 2. retrieve given event from the ESD tree;
56/// 3. call alice_esd_read() function to create visualization objects
57/// for the new event.
58///
59///
60/// ### Reading of ALICE data and creation of visualization objects.
61///
62/// This is performed in alice_esd_read() function, with the following
63/// steps:
64/// 1. create the track container object - TEveTrackList;
65/// 2. iterate over the ESD tracks, create TEveTrack objects and append
66/// them to the container;
67/// 3. instruct the container to extrapolate the tracks and set their
68/// visual attributes.
69///
70/// \image html eve_alice_esd.png
71/// \macro_code
72///
73/// \author Matevz Tadel
74
75#ifndef __RUN_ALICE_ESD__
76
77void alice_esd()
78{
79 TString dir = gSystem->UnixPathName(__FILE__);
80 dir.ReplaceAll("alice_esd.C","");
81 dir.ReplaceAll("/./","/");
82 gROOT->LoadMacro(dir +"MultiView.C+");
83 const char* esd_file_name = "http://root.cern.ch/files/alice_ESDs.root";
85 TString lib(Form("aliesd/aliesd.%s", gSystem->GetSoExt()));
86
88 TFile* f = TFile::Open(esd_file_name, "CACHEREAD");
89 if (f == 0) return;
90 TTree *tree = (TTree*) f->Get("esdTree");
91 tree->SetBranchStatus ("ESDfriend*", 1);
92 f->MakeProject("aliesd", "*", "++");
93 f->Close();
94 delete f;
95 }
96 gSystem->Load(lib);
97 gROOT->ProcessLine("#define __RUN_ALICE_ESD__ 1");
98 gROOT->ProcessLine("#include \"alice_esd.C\"");
99 gROOT->ProcessLine("run_alice_esd()");
100 gROOT->ProcessLine("#undef __RUN_ALICE_ESD__");
101}
102
103#else
104
106
107// Forward declarations.
108
109class AliESDEvent;
110class AliESDfriend;
111class AliESDtrack;
112class AliExternalTrackParam;
113
114void make_gui();
115void load_event();
116
117void alice_esd_read();
118TEveTrack* esd_make_track(TEveTrackPropagator* trkProp, Int_t index,
119 AliESDtrack* at,
120 AliExternalTrackParam* tp=0);
121Bool_t trackIsOn(AliESDtrack* t, Int_t mask);
122void trackGetPos(AliExternalTrackParam* tp, Double_t r[3]);
123void trackGetMomentum(AliExternalTrackParam* tp, Double_t p[3]);
124Double_t trackGetP(AliExternalTrackParam* tp);
125
126
127// Configuration and global variables.
128
129const char* esd_file_name = "http://root.cern.ch/files/alice_ESDs.root";
130// Temporarily disable reading of ESD friend.
131// There seems to be no way to get it working without AliRoot.
132// const char* esd_friends_file_name =
133// "http://root.cern.ch/files/alice_ESDfriends.root";
134const char* esd_friends_file_name = 0;
135
136const char* esd_geom_file_name =
137 "http://root.cern.ch/files/alice_ESDgeometry.root";
138
139// For testing
140// const char* esd_file_name = "AliESDs.root";
141// const char* esd_friends_file_name = "AliESDfriends.root";
142
143TFile *esd_file = 0;
144TFile *esd_friends_file = 0;
145
146TTree *esd_tree = 0;
147
148AliESDEvent *esd = 0;
149TList *esd_objs = 0;
150AliESDfriend *esd_friend = 0;
151
152Int_t esd_event_id = 0; // Current event id.
153
154TEveTrackList *gTrackList = 0;
155
156TEveGeoShape *gGeomGentle = 0;
157
158// Implemented in MultiView.C
159class MultiView;
160MultiView* gMultiView = 0;
161
162/******************************************************************************/
163// Initialization and steering functions
164/******************************************************************************/
165
166//______________________________________________________________________________
167void run_alice_esd()
168{
169 // Main function, initializes the application.
170 //
171 // 1. Load the auto-generated library holding ESD classes and
172 // ESD dictionaries.
173 // 2. Open ESD data-files.
174 // 3. Load cartoon geometry.
175 // 4. Spawn simple GUI.
176 // 5. Load first event.
177
178 const TString weh("alice_esd()");
179
181
182 printf("*** Opening ESD ***\n");
183 esd_file = TFile::Open(esd_file_name, "CACHEREAD");
184 if (!esd_file)
185 return;
186
187 esd_tree = (TTree*) esd_file->Get("esdTree");
188 esd = (AliESDEvent*) esd_tree->GetUserInfo()->FindObject("AliESDEvent");
189 esd_objs = esd->fESDObjects;
190
191 if (esd_friends_file_name != 0)
192 {
193 printf("*** Opening ESD-friends ***\n");
194 esd_friends_file = TFile::Open(esd_friends_file_name, "CACHEREAD");
195 if (!esd_friends_file)
196 return;
197
198 esd_tree->SetBranchStatus ("ESDfriend*", 1);
199 }
200
201 // Set the branch addresses.
202 {
203 TIter next(esd_objs);
204 TObject *el;
205 while ((el = (TNamed*)next()))
206 {
207 TString bname(el->GetName());
208 if (bname == "AliESDfriend")
209 {
210 // AliESDfriend needs special treatment.
211 TBranch *br = esd_tree->GetBranch("ESDfriend.");
212 br->SetAddress(esd_objs->GetObjectRef(el));
213 }
214 else
215 {
216 TBranch *br = esd_tree->GetBranch(bname);
217 if (br)
218 {
219 br->SetAddress(esd_objs->GetObjectRef(el));
220 }
221 else
222 {
223 br = esd_tree->GetBranch(bname + ".");
224 if (br)
225 {
226 br->SetAddress(esd_objs->GetObjectRef(el));
227 }
228 else
229 {
230 Warning("AliESDEvent::ReadFromTree() "
231 "No Branch found with Name '%s' or '%s.'.",
232 bname.Data(),bname.Data());
233 }
234 }
235 }
236 }
237 }
238
239
241
242 { // Simple geometry
243 TFile* geom = TFile::Open(esd_geom_file_name, "CACHEREAD");
244 if (!geom)
245 return;
246 TEveGeoShapeExtract* gse = (TEveGeoShapeExtract*) geom->Get("Gentle");
247 gGeomGentle = TEveGeoShape::ImportShapeExtract(gse, 0);
248 geom->Close();
249 delete geom;
250 gEve->AddGlobalElement(gGeomGentle);
251 }
252
253
254 // Standard multi-view
255 //=====================
256
257 gMultiView = new MultiView;
258
259 gMultiView->ImportGeomRPhi(gGeomGentle);
260 gMultiView->ImportGeomRhoZ(gGeomGentle);
261
262
263 // HTML summary view
264 //===================
265
266 fgHtmlSummary = new HtmlSummary("Alice Event Display Summary Table");
268 fgHtml = new TGHtml(0, 100, 100);
269 TEveWindowFrame *wf = slot->MakeFrame(fgHtml);
270 fgHtml->MapSubwindows();
271 wf->SetElementName("Summary");
272
273
274 // Final stuff
275 //=============
276
278
279 make_gui();
280
281 load_event();
282
283 gEve->Redraw3D(kTRUE); // Reset camera after the first event has been shown.
284}
285
286//______________________________________________________________________________
287void load_event()
288{
289 // Load event specified in global esd_event_id.
290 // The contents of previous event are removed.
291
292 printf("Loading event %d.\n", esd_event_id);
293
295
296 if (gTrackList)
297 gTrackList->DestroyElements();
298
299 esd_tree->GetEntry(esd_event_id);
300 // esd_tree->Show();
301
302 alice_esd_read();
303
305
306 gMultiView->DestroyEventRPhi();
307 gMultiView->ImportEventRPhi(top);
308
309 gMultiView->DestroyEventRhoZ();
310 gMultiView->ImportEventRhoZ(top);
311
312 update_html_summary();
313
315}
316
317
318/******************************************************************************/
319// GUI
320/******************************************************************************/
321
322//______________________________________________________________________________
323//
324// EvNavHandler class is needed to connect GUI signals.
325
326class EvNavHandler
327{
328public:
329 void Fwd()
330 {
331 if (esd_event_id < esd_tree->GetEntries() - 1) {
332 ++esd_event_id;
333 load_event();
334 } else {
335 printf("Already at last event.\n");
336 }
337 }
338 void Bck()
339 {
340 if (esd_event_id > 0) {
341 --esd_event_id;
342 load_event();
343 } else {
344 printf("Already at first event.\n");
345 }
346 }
347};
348
349//______________________________________________________________________________
350void make_gui()
351{
352 // Create minimal GUI for event navigation.
353
354 TEveBrowser* browser = gEve->GetBrowser();
356
357 TGMainFrame* frmMain = new TGMainFrame(gClient->GetRoot(), 1000, 600);
358 frmMain->SetWindowName("XX GUI");
359 frmMain->SetCleanup(kDeepCleanup);
360
361 TGHorizontalFrame* hf = new TGHorizontalFrame(frmMain);
362 {
363
364 TString icondir( Form("%s/icons/", gSystem->Getenv("ROOTSYS")) );
365 TGPictureButton* b = 0;
366 EvNavHandler *fh = new EvNavHandler;
367
368 b = new TGPictureButton(hf, gClient->GetPicture(icondir+"GoBack.gif"));
369 hf->AddFrame(b);
370 b->Connect("Clicked()", "EvNavHandler", fh, "Bck()");
371
372 b = new TGPictureButton(hf, gClient->GetPicture(icondir+"GoForward.gif"));
373 hf->AddFrame(b);
374 b->Connect("Clicked()", "EvNavHandler", fh, "Fwd()");
375 }
376 frmMain->AddFrame(hf);
377
378 frmMain->MapSubwindows();
379 frmMain->Resize();
380 frmMain->MapWindow();
381
382 browser->StopEmbedding();
383 browser->SetTabTitle("Event Control", 0);
384}
385
386
387/******************************************************************************/
388// Code for reading AliESD and creating visualization objects
389/******************************************************************************/
390
391enum ESDTrackFlags {
392 kITSin=0x0001,kITSout=0x0002,kITSrefit=0x0004,kITSpid=0x0008,
393 kTPCin=0x0010,kTPCout=0x0020,kTPCrefit=0x0040,kTPCpid=0x0080,
394 kTRDin=0x0100,kTRDout=0x0200,kTRDrefit=0x0400,kTRDpid=0x0800,
395 kTOFin=0x1000,kTOFout=0x2000,kTOFrefit=0x4000,kTOFpid=0x8000,
396 kHMPIDpid=0x20000,
397 kEMCALmatch=0x40000,
398 kTRDbackup=0x80000,
399 kTRDStop=0x20000000,
400 kESDpid=0x40000000,
401 kTIME=0x80000000
402};
403
404//______________________________________________________________________________
405void alice_esd_read()
406{
407 // Read tracks and associated clusters from current event.
408
409 AliESDRun *esdrun = (AliESDRun*) esd_objs->FindObject("AliESDRun");
410 TClonesArray *tracks = (TClonesArray*) esd_objs->FindObject("Tracks");
411
412 // This needs further investigation. Clusters not shown.
413 // esd_friend = (AliESDfriend*) esd_objs->FindObject("AliESDfriend");
414 // printf("Friend %p, n_tracks:%d\n",
415 // esd_friend,
416 // esd_friend->fTracks.GetEntries());
417
418 if (gTrackList == 0)
419 {
420 gTrackList = new TEveTrackList("ESD Tracks");
421 gTrackList->SetMainColor(6);
422 gTrackList->SetMarkerColor(kYellow);
423 gTrackList->SetMarkerStyle(4);
424 gTrackList->SetMarkerSize(0.5);
425
426 gEve->AddElement(gTrackList);
427 }
428
429 TEveTrackPropagator* trkProp = gTrackList->GetPropagator();
430 trkProp->SetMagField( 0.1 * esdrun->fMagneticField ); // kGaus to Tesla
431
432 for (Int_t n=0; n<tracks->GetEntriesFast(); ++n)
433 {
434 AliESDtrack* at = (AliESDtrack*) tracks->At(n);
435
436 // If ITS refit failed, take track parameters at inner TPC radius.
437 AliExternalTrackParam* tp = at;
438 if (! trackIsOn(at, kITSrefit)) {
439 tp = at->fIp;
440 }
441
442 TEveTrack* track = esd_make_track(trkProp, n, at, tp);
443 track->SetAttLineAttMarker(gTrackList);
444 gTrackList->AddElement(track);
445
446 // This needs further investigation. Clusters not shown.
447 // if (frnd)
448 // {
449 // AliESDfriendTrack* ft = (AliESDfriendTrack*) frnd->fTracks->At(n);
450 // printf("%d friend = %p\n", ft);
451 // }
452 }
453
454 gTrackList->MakeTracks();
455}
456
457//______________________________________________________________________________
458TEveTrack* esd_make_track(TEveTrackPropagator* trkProp,
459 Int_t index,
460 AliESDtrack* at,
461 AliExternalTrackParam* tp)
462{
463 // Helper function creating TEveTrack from AliESDtrack.
464 //
465 // Optionally specific track-parameters (e.g. at TPC entry point)
466 // can be specified via the tp argument.
467
468 Double_t pbuf[3], vbuf[3];
469 TEveRecTrack rt;
470
471 if (tp == 0) tp = at;
472
473 rt.fLabel = at->fLabel;
474 rt.fIndex = index;
475 rt.fStatus = (Int_t) at->fFlags;
476 rt.fSign = (tp->fP[4] > 0) ? 1 : -1;
477
478 trackGetPos(tp, vbuf); rt.fV.Set(vbuf);
479 trackGetMomentum(tp, pbuf); rt.fP.Set(pbuf);
480
481 Double_t ep = trackGetP(at);
482 Double_t mc = 0.138; // at->GetMass(); - Complicated function, requiring PID.
483
484 rt.fBeta = ep/TMath::Sqrt(ep*ep + mc*mc);
485
486 TEveTrack* track = new TEveTrack(&rt, trkProp);
487 track->SetName(Form("TEveTrack %d", rt.fIndex));
488 track->SetStdTitle();
489
490 return track;
491}
492
493//______________________________________________________________________________
494Bool_t trackIsOn(AliESDtrack* t, Int_t mask)
495{
496 // Check is track-flag specified by mask are set.
497
498 return (t->fFlags & mask) > 0;
499}
500
501//______________________________________________________________________________
502void trackGetPos(AliExternalTrackParam* tp, Double_t r[3])
503{
504 // Get global position of starting point of tp.
505
506 r[0] = tp->fX; r[1] = tp->fP[0]; r[2] = tp->fP[1];
507
508 Double_t cs=TMath::Cos(tp->fAlpha), sn=TMath::Sin(tp->fAlpha), x=r[0];
509 r[0] = x*cs - r[1]*sn; r[1] = x*sn + r[1]*cs;
510}
511
512//______________________________________________________________________________
513void trackGetMomentum(AliExternalTrackParam* tp, Double_t p[3])
514{
515 // Return global momentum vector of starting point of tp.
516
517 p[0] = tp->fP[4]; p[1] = tp->fP[2]; p[2] = tp->fP[3];
518
519 Double_t pt=1./TMath::Abs(p[0]);
520 Double_t cs=TMath::Cos(tp->fAlpha), sn=TMath::Sin(tp->fAlpha);
521 Double_t r=TMath::Sqrt(1 - p[1]*p[1]);
522 p[0]=pt*(r*cs - p[1]*sn); p[1]=pt*(p[1]*cs + r*sn); p[2]=pt*p[2];
523}
524
525//______________________________________________________________________________
526Double_t trackGetP(AliExternalTrackParam* tp)
527{
528 // Return magnitude of momentum of tp.
529
530 return TMath::Sqrt(1.+ tp->fP[3]*tp->fP[3])/TMath::Abs(tp->fP[4]);
531}
532
533#endif
534
ROOT::R::TRInterface & r
Definition: Object.C:4
#define b(i)
Definition: RSha256.hxx:100
#define f(i)
Definition: RSha256.hxx:104
int Int_t
Definition: RtypesCore.h:41
const Bool_t kFALSE
Definition: RtypesCore.h:88
bool Bool_t
Definition: RtypesCore.h:59
double Double_t
Definition: RtypesCore.h:55
const Bool_t kTRUE
Definition: RtypesCore.h:87
@ kYellow
Definition: Rtypes.h:64
void Warning(const char *location, const char *msgfmt,...)
R__EXTERN TEveManager * gEve
Definition: TEveManager.h:243
#define gClient
Definition: TGClient.h:166
@ kDeepCleanup
Definition: TGFrame.h:51
#define gROOT
Definition: TROOT.h:415
char * Form(const char *fmt,...)
@ kReadPermission
Definition: TSystem.h:48
R__EXTERN TSystem * gSystem
Definition: TSystem.h:560
Html table and event summary for alice_esd.C.
A TTree is a list of TBranches.
Definition: TBranch.h:91
virtual void SetAddress(void *add)
Set address of this branch.
Definition: TBranch.cxx:2519
An array of clone (identical) objects.
Definition: TClonesArray.h:32
TObject * Get(const char *namecycle) override
Return pointer to object identified by namecycle.
Specialization of TRootBrowser for Eve.
Definition: TEveBrowser.h:130
virtual void SetElementName(const char *name)
Virtual function for setting of name of an element.
Definition: TEveElement.h:453
Base class for TEveUtil visualization elements, providing hierarchy management, rendering control and...
Definition: TEveElement.h:34
virtual void AddElement(TEveElement *el)
Add el to the list of children.
virtual void DestroyElements()
Destroy all children of this element.
Globally positioned TGeoShape with rendering attributes and an optional list of daughter shape-extrac...
Wrapper for TGeoShape with absolute positioning and color attributes allowing display of extracted TG...
Definition: TEveGeoShape.h:24
static TEveGeoShape * ImportShapeExtract(TEveGeoShapeExtract *gse, TEveElement *parent=0)
Import a shape extract 'gse' under element 'parent'.
TEveViewerList * GetViewers() const
Definition: TEveManager.h:145
void AddElement(TEveElement *element, TEveElement *parent=0)
Add an element.
void AddGlobalElement(TEveElement *element, TEveElement *parent=0)
Add a global element, i.e.
TEveBrowser * GetBrowser() const
Definition: TEveManager.h:137
static TEveManager * Create(Bool_t map_window=kTRUE, Option_t *opt="FIV")
If global TEveManager* gEve is not set initialize it.
void Redraw3D(Bool_t resetCameras=kFALSE, Bool_t dropLogicals=kFALSE)
Definition: TEveManager.h:168
TEveEventManager * GetCurrentEvent() const
Definition: TEveManager.h:149
TEveVectorT< TT > fP
TEveVectorT< TT > fV
A list of tracks supporting change of common attributes and selection based on track parameters.
Definition: TEveTrack.h:140
virtual void SetMarkerStyle(Style_t s)
Set marker style for the list and the elements.
Definition: TEveTrack.cxx:901
virtual void SetMarkerColor(Color_t c)
Set marker color for the list and the elements.
Definition: TEveTrack.cxx:933
void MakeTracks(Bool_t recurse=kTRUE)
Regenerate the visual representations of tracks.
Definition: TEveTrack.cxx:639
virtual void SetMainColor(Color_t c)
Set main (line) color for the list and the elements.
Definition: TEveTrack.cxx:805
TEveTrackPropagator * GetPropagator()
Definition: TEveTrack.h:175
virtual void SetMarkerSize(Size_t s)
Set marker size for the list and the elements.
Definition: TEveTrack.cxx:965
Holding structure for a number of track rendering parameters.
void SetMagField(Double_t bX, Double_t bY, Double_t bZ)
Set constant magnetic field and rebuild tracks.
Visual representation of a track.
Definition: TEveTrack.h:33
void SetAttLineAttMarker(TEveTrackList *tl)
Set line and marker attributes from TEveTrackList.
Definition: TEveTrack.cxx:322
virtual void SetStdTitle()
Set standard track title based on most data-member values.
Definition: TEveTrack.cxx:268
void Set(const Float_t *v)
Definition: TEveVector.h:81
void DeleteAnnotations()
Delete annotations from all viewers.
Definition: TEveViewer.cxx:475
Encapsulates TGFrame into an eve-window.
Definition: TEveWindow.h:336
static TEveWindowSlot * CreateWindowInTab(TGTab *tab, TEveWindow *eve_parent=0)
Create a new tab in a given tab-widget and populate it with a default window-slot.
A ROOT file is a suite of consecutive data records (TKey instances) with a well defined format.
Definition: TFile.h:48
static Bool_t SetCacheFileDir(ROOT::Internal::TStringView cacheDir, Bool_t operateDisconnected=kTRUE, Bool_t forceCacheread=kFALSE)
Definition: TFile.h:319
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.
Definition: TFile.cxx:3923
void Close(Option_t *option="") override
Close a file.
Definition: TFile.cxx:856
virtual void AddFrame(TGFrame *f, TGLayoutHints *l=0)
Add frame to the composite frame using the specified layout hints.
Definition: TGFrame.cxx:1099
virtual void SetCleanup(Int_t mode=kLocalCleanup)
Turn on automatic cleanup of child frames in dtor.
Definition: TGFrame.cxx:1054
virtual void MapSubwindows()
Map all sub windows that are part of the composite frame.
Definition: TGFrame.cxx:1146
virtual void Resize(UInt_t w=0, UInt_t h=0)
Resize the frame.
Definition: TGFrame.cxx:587
virtual void MapWindow()
Definition: TGFrame.h:251
Definition: TGHtml.h:872
void SetWindowName(const char *name=0)
Set window name. This is typically done via the window manager.
Definition: TGFrame.cxx:1746
virtual Bool_t SetTab(Int_t tabIndex, Bool_t emit=kTRUE)
Brings the composite frame with the index tabIndex to the front and generate the following event if t...
Definition: TGTab.cxx:507
A doubly linked list.
Definition: TList.h:44
virtual TObject ** GetObjectRef(const TObject *obj) const
Return address of pointer to obj.
Definition: TList.cxx:668
virtual TObject * FindObject(const char *name) const
Find an object in this list using its name.
Definition: TList.cxx:575
The TNamed class is the base class for all named ROOT classes.
Definition: TNamed.h:29
Mother of all ROOT objects.
Definition: TObject.h:37
virtual const char * GetName() const
Returns name of object.
Definition: TObject.cxx:357
virtual void SetName(const char *name)
Change (i.e.
void SetTabTitle(const char *title, Int_t pos=kRight, Int_t subpos=-1)
Set text "title" of Tab "subpos" in TGTab "pos".
virtual void StopEmbedding(const char *name=0)
Definition: TRootBrowser.h:152
virtual void StartEmbedding(Int_t pos=kRight, Int_t subpos=-1)
Start embedding external frame in the tab "pos" and tab element "subpos".
TGTab * GetTabRight() const
Definition: TRootBrowser.h:141
Basic string class.
Definition: TString.h:131
TString & ReplaceAll(const TString &s1, const TString &s2)
Definition: TString.h:687
virtual const char * Getenv(const char *env)
Get environment variable.
Definition: TSystem.cxx:1653
virtual int Load(const char *module, const char *entry="", Bool_t system=kFALSE)
Load a shared library.
Definition: TSystem.cxx:1845
virtual Bool_t AccessPathName(const char *path, EAccessMode mode=kFileExists)
Returns FALSE if one can access a file using the specified access mode.
Definition: TSystem.cxx:1287
virtual const char * UnixPathName(const char *unixpathname)
Convert from a Unix pathname to a local pathname.
Definition: TSystem.cxx:1054
virtual const char * GetSoExt() const
Get the shared library extension.
Definition: TSystem.cxx:3995
A TTree represents a columnar dataset.
Definition: TTree.h:72
virtual TBranch * GetBranch(const char *name)
Return pointer to the branch with the given name in this tree or its friends.
Definition: TTree.cxx:5170
virtual Int_t GetEntry(Long64_t entry=0, Int_t getall=0)
Read all branches of entry and return total number of bytes read.
Definition: TTree.cxx:5497
virtual TList * GetUserInfo()
Return a pointer to the list containing user objects associated to this tree.
Definition: TTree.cxx:6212
virtual void SetBranchStatus(const char *bname, Bool_t status=1, UInt_t *found=0)
Set branch status to Process or DoNotProcess.
Definition: TTree.cxx:8276
TPaveText * pt
Double_t x[n]
Definition: legend1.C:17
const Int_t n
Definition: legend1.C:16
Double_t Sqrt(Double_t x)
Definition: TMath.h:681
Double_t Cos(Double_t)
Definition: TMath.h:631
Double_t Sin(Double_t)
Definition: TMath.h:627
Short_t Abs(Short_t d)
Definition: TMathBase.h:120
Definition: tree.py:1
void tracks()
Definition: tracks.C:47