**************************************************************************/
#if !defined(__CINT__) || defined(__MAKECINT__)
-
-#include "TString.h"
-#include "TMath.h"
-#include "TGListTree.h"
-#include "TEveVSDStructs.h"
-#include "TEveManager.h"
-#include "TEveTrackPropagator.h"
-
-#include "AliESDEvent.h"
-#include "AliESDtrackCuts.h"
-#include "AliESDtrack.h"
-#include "AliExternalTrackParam.h"
-
-#include "EVE/EveBase/AliEveTrack.h"
-#include "EVE/EveBase/AliEveMagField.h"
-#include "EVE/EveBase/AliEveEventManager.h"
-
+#include <TString.h>
+#include <TSystem.h>
+#include <TROOT.h>
+#include <TMath.h>
+#include <TGListTree.h>
+#include <TEveVSDStructs.h>
+#include <TEveManager.h>
+#include <TEveTrackPropagator.h>
+
+#include <AliESDtrackCuts.h>
+#include <AliPWG0Helper.h>
+#include <AliESDEvent.h>
+#include <AliESDfriend.h>
+#include <AliESDtrack.h>
+#include <AliESDfriendTrack.h>
+#include <AliExternalTrackParam.h>
+#include <AliEveTrack.h>
+#include <AliEveTrackCounter.h>
+#include <AliEveMagField.h>
+#include <AliEveEventManager.h>
#endif
//==============================================================================
+AliEveTrack* esd_make_track_TPC(AliESDtrack *at, AliESDfriendTrack* aft, TEveTrackList* cont)
+{
+ // Make a TPC track representation and put it into given container.
+
+ AliEveTrack* track = new AliEveTrack(at, cont->GetPropagator());
+ track->SetAttLineAttMarker(cont);
+ track->SetName(Form("AliEveTrack %d", at->GetID()));
+ track->SetElementTitle(esd_track_title(at));
+ track->SetSourceObject(at);
+
+ // Add inner/outer track parameters as start point and pathmark.
+ if (at->GetInnerParam()) track->SetStartParams(at->GetInnerParam());
+ else return NULL;
+ if (aft->GetTPCOut()) esd_track_add_param(track, aft->GetTPCOut());
+ else return NULL;
+
+ return track;
+}
+
+AliEveTrack* esd_make_track_ITS_standalone(AliESDtrack *at, AliESDfriendTrack* aft, TEveTrackList* cont)
+{
+ // Make a ITS standalone track representation and put it into given container.
+
+ if ( !(!at->IsOn(AliESDtrack::kTPCin) &&
+ at->IsOn(AliESDtrack::kITSout)) ) return NULL; //only ITS standalone
+ AliEveTrack* track = new AliEveTrack(at, cont->GetPropagator());
+ track->SetAttLineAttMarker(cont);
+ track->SetName(Form("AliEveTrack %d", at->GetID()));
+ track->SetElementTitle(esd_track_title(at));
+ track->SetSourceObject(at);
+
+ // Add inner/outer track parameters as path-marks.
+ if (aft->GetITSOut())
+ {
+ esd_track_add_param(track, aft->GetITSOut());
+ }
+ else return NULL;
+
+ return track;
+}
+
+AliEveTrack* esd_make_track_ITS(AliESDtrack *at, AliESDfriendTrack* aft, TEveTrackList* cont)
+{
+ // Make a ITS track representation and put it into given container.
+
+ if ( (!at->IsOn(AliESDtrack::kTPCin) &&
+ at->IsOn(AliESDtrack::kITSout)) ) return NULL; //ignore ITS standalone
+ AliEveTrack* track = new AliEveTrack(at, cont->GetPropagator());
+ track->SetAttLineAttMarker(cont);
+ track->SetName(Form("AliEveTrack %d", at->GetID()));
+ track->SetElementTitle(esd_track_title(at));
+ track->SetSourceObject(at);
+
+ // Add inner/outer track parameters as path-marks.
+ if (aft->GetITSOut())
+ {
+ esd_track_add_param(track, aft->GetITSOut());
+ }
+ else return NULL;
+
+ return track;
+}
+
AliEveTrack* esd_make_track(AliESDtrack *at, TEveTrackList* cont)
{
// Make a standard track representation and put it into given container.
// esd_tracks()
//==============================================================================
+TEveTrackList* esd_tracks_TPC()
+{
+ AliESDEvent* esd = AliEveEventManager::AssertESD();
+ AliESDfriend* esd_friend = AliEveEventManager::AssertESDfriend();
+
+ TEveTrackList* cont = new TEveTrackList("TPC Tracks");
+ cont->SetMainColor(kMagenta);
+
+ esd_track_propagator_setup(cont->GetPropagator(),
+ 0.1*esd->GetMagneticField(), 520);
+
+ gEve->AddElement(cont);
+
+ Int_t count = 0;
+ for (Int_t n = 0; n < esd->GetNumberOfTracks(); ++n)
+ {
+ ++count;
+ if (!esd->GetTrack(n)) continue;
+ if (!esd_friend->GetTrack(n)) continue;
+ AliEveTrack* track = esd_make_track_TPC(esd->GetTrack(n), esd_friend->GetTrack(n), cont);
+ if (!track) continue;
+
+ cont->AddElement(track);
+ }
+ cont->SetTitle(Form("N=%d", count));
+ cont->MakeTracks();
+
+ gEve->Redraw3D();
+
+ return cont;
+}
+
+TEveTrackList* esd_tracks_ITS()
+{
+ AliESDEvent* esd = AliEveEventManager::AssertESD();
+ AliESDfriend* esd_friend = AliEveEventManager::AssertESDfriend();
+
+ TEveTrackList* cont = new TEveTrackList("ITS Tracks");
+ cont->SetMainColor(kMagenta+3);
+
+ esd_track_propagator_setup(cont->GetPropagator(),
+ 0.1*esd->GetMagneticField(), 520);
+ cont->GetPropagator()->SetMaxR(85.0);
+ cont->SetLineWidth(1);
+
+ gEve->AddElement(cont);
+
+ Int_t count = 0;
+ for (Int_t n = 0; n < esd->GetNumberOfTracks(); ++n)
+ {
+ ++count;
+ if (!esd->GetTrack(n)) continue;
+ if (!esd_friend->GetTrack(n)) continue;
+ AliEveTrack* track = esd_make_track_ITS(esd->GetTrack(n), esd_friend->GetTrack(n), cont);
+ if (!track) continue;
+
+ cont->AddElement(track);
+ }
+ cont->SetTitle(Form("N=%d", count));
+ cont->MakeTracks();
+
+ gEve->Redraw3D();
+
+ return cont;
+}
+
+TEveTrackList* esd_tracks_ITS_standalone()
+{
+ AliESDEvent* esd = AliEveEventManager::AssertESD();
+ AliESDfriend* esd_friend = AliEveEventManager::AssertESDfriend();
+
+ TEveTrackList* cont = new TEveTrackList("ITS Standalone Tracks");
+ cont->SetMainColor(kBlue);
+
+ esd_track_propagator_setup(cont->GetPropagator(),
+ 0.1*esd->GetMagneticField(), 520);
+ cont->GetPropagator()->SetMaxR(85.0);
+ cont->SetLineWidth(1);
+
+ gEve->AddElement(cont);
+
+ Int_t count = 0;
+ for (Int_t n = 0; n < esd->GetNumberOfTracks(); ++n)
+ {
+ ++count;
+ if (!esd->GetTrack(n)) continue;
+ if (!esd_friend->GetTrack(n)) continue;
+ AliEveTrack* track = esd_make_track_ITS_standalone(esd->GetTrack(n), esd_friend->GetTrack(n), cont);
+ if (!track) continue;
+
+ cont->AddElement(track);
+ }
+ cont->SetTitle(Form("N=%d", count));
+ cont->MakeTracks();
+
+ gEve->Redraw3D();
+
+ return cont;
+}
+
TEveTrackList* esd_tracks()
{
AliESDEvent* esd = AliEveEventManager::AssertESD();
return cont;
}
-TEveElementList* esd_tracks_MI()
+TEveTrackList* esd_tracks_MI()
{
AliESDEvent* esd = AliEveEventManager::AssertESD();
- TEveElementList* cont = new TEveElementList("ESD Tracks MI");
+ TEveTrackList* cont = new TEveTrackList("ESD Tracks MI");
+ cont->SetLineColor(5);
gEve->AddElement(cont);
Int_t count = 0;
{
++count;
AliESDtrack* at = esd->GetTrack(n);
- TEveLine* l = new TEveLine;
- l->SetLineColor(5);
- at->FillPolymarker(l, esd->GetMagneticField(), 0, 250, 5);
+ AliEveTrack* l = new AliEveTrack(at, cont->GetPropagator());
l->SetName(Form("ESDTrackMI %d", at->GetID()));
l->SetElementTitle(esd_track_title(at));
+ l->SetAttLineAttMarker(cont);
l->SetSourceObject(at);
+ at->FillPolymarker(l, esd->GetMagneticField(), 0, 250, 5);
+
+ l->SetLockPoints(kTRUE);
cont->AddElement(l);
}
cont->SetTitle(Form("N=%d", count));
return d;
}
-TEveElementList* g_esd_tracks_by_category_container = 0;
-
TEveElementList* esd_tracks_by_category()
{
- // Import ESD tracks, separate them into several containers
- // according to primary-vertex cut and ITS&TPC refit status.
+ // Import ESD tracks, separate them into several containers
+ // according to primary-vertex cut and ITS&TPC refit status.
+
+ AliESDEvent* esd = AliEveEventManager::AssertESD();
+
+ TEveElementList* cont = new TEveElementList("ESD Tracks by category");
+ gEve->AddElement(cont);
+
+ const Int_t nCont = 9;
+ const Float_t maxR = 520;
+ const Float_t magF = 0.1*esd->GetMagneticField();
+
+ TEveTrackList *tl[nCont];
+ Int_t tc[nCont];
+ Int_t count = 0;
+
+ tl[0] = new TEveTrackList("Sigma < 3");
+ tc[0] = 0;
+ esd_track_propagator_setup(tl[0]->GetPropagator(), magF, maxR);
+ tl[0]->SetMainColor(3);
+ cont->AddElement(tl[0]);
+
+ tl[1] = new TEveTrackList("3 < Sigma < 5");
+ tc[1] = 0;
+ esd_track_propagator_setup(tl[1]->GetPropagator(), magF, maxR);
+ tl[1]->SetMainColor(7);
+ cont->AddElement(tl[1]);
+
+ tl[2] = new TEveTrackList("5 < Sigma");
+ tc[2] = 0;
+ esd_track_propagator_setup(tl[2]->GetPropagator(), magF, maxR);
+ tl[2]->SetMainColor(46);
+ cont->AddElement(tl[2]);
+
+ tl[3] = new TEveTrackList("no ITS refit; Sigma < 5");
+ tc[3] = 0;
+ esd_track_propagator_setup(tl[3]->GetPropagator(), magF, maxR);
+ tl[3]->SetMainColor(41);
+ cont->AddElement(tl[3]);
+
+ tl[4] = new TEveTrackList("no ITS refit; Sigma > 5");
+ tc[4] = 0;
+ esd_track_propagator_setup(tl[4]->GetPropagator(), magF, maxR);
+ tl[4]->SetMainColor(48);
+ cont->AddElement(tl[4]);
+
+ tl[5] = new TEveTrackList("no TPC refit");
+ tc[5] = 0;
+ esd_track_propagator_setup(tl[5]->GetPropagator(), magF, maxR);
+ tl[5]->SetMainColor(kRed);
+ cont->AddElement(tl[5]);
+
+ tl[6] = new TEveTrackList("ITS ncl>=3 & SPD Inner");
+ tc[6] = 0;
+ esd_track_propagator_setup(tl[6]->GetPropagator(), magF, maxR);
+ tl[6]->SetMainColor(kGreen);
+ cont->AddElement(tl[6]);
+
+ tl[7] = new TEveTrackList("ITS ncl>=3 & b<3 cm");
+ tc[7] = 0;
+ esd_track_propagator_setup(tl[7]->GetPropagator(), magF, maxR);
+ tl[7]->SetMainColor(kMagenta - 9);
+ cont->AddElement(tl[7]);
+
+ tl[8] = new TEveTrackList("ITS others");
+ tc[8] = 0;
+ esd_track_propagator_setup(tl[8]->GetPropagator(), magF, maxR);
+ tl[8]->SetMainColor(kRed + 2);
+ cont->AddElement(tl[8]);
+
+ for (Int_t n = 0; n < esd->GetNumberOfTracks(); ++n)
+ {
+ AliESDtrack* at = esd->GetTrack(n);
+
+ Float_t s = get_sigma_to_vertex(at);
+ Int_t ti;
+ if (s < 3) ti = 0;
+ else if (s <= 5) ti = 1;
+ else ti = 2;
+
+ Int_t nclits;
+ Double_t dtobeam;
+
+ if (at->IsOn(AliESDtrack::kITSin) && ! at->IsOn(AliESDtrack::kTPCin))
+ {
+ UChar_t itsclmap = at->GetITSClusterMap();
+ Bool_t spdinner = (itsclmap & 3) != 0;
+
+ nclits = 0;
+ for (Int_t iter = 0; iter < 6; ++iter)
+ if (itsclmap & (1 << iter)) nclits ++;
+
+ Double_t xyz[3];
+ at->GetXYZ(xyz);
+ dtobeam = TMath::Hypot(xyz[0], xyz[1]);
+
+ if ((nclits >= 3) && (spdinner))
+ ti = 6;
+ else if ((nclits >= 3) && (dtobeam < 3.0))
+ ti = 7;
+ else
+ ti = 8;
+ }
+ else if (at->IsOn(AliESDtrack::kTPCin) && ! at->IsOn(AliESDtrack::kTPCrefit))
+ {
+ ti = 5;
+ }
+ else if ( ! at->IsOn(AliESDtrack::kITSrefit))
+ {
+ ti = (ti == 2) ? 4 : 3;
+ }
+
+ TEveTrackList* tlist = tl[ti];
+ ++tc[ti];
+ ++count;
+
+ AliEveTrack* track = esd_make_track(at, tlist);
+ if (ti<6)
+ track->SetName(Form("ESD Track idx=%d, sigma=%5.3f", at->GetID(), s));
+ else
+ track->SetName(Form("ESD Track idx=%d, dxy=%5.3f cl=%i", at->GetID(), dtobeam, nclits));
+ tlist->AddElement(track);
+ }
+
+ for (Int_t ti = 0; ti < nCont; ++ti)
+ {
+ TEveTrackList* tlist = tl[ti];
+ tlist->SetName(Form("%s [%d]", tlist->GetName(), tlist->NumChildren()));
+ tlist->SetTitle(Form("N tracks=%d", tc[ti]));
+
+ tlist->MakeTracks();
+
+ // Bool_t good_cont = ti <= 1;
+ Bool_t good_cont = ((ti == 6) || (ti == 7));
+ if (AliEveTrackCounter::IsActive())
+ {
+ AliEveTrackCounter::fgInstance->RegisterTracks(tlist, good_cont);
+ }
+ else
+ {
+ if ( ! good_cont)
+ tlist->SetLineStyle(6);
+ }
+ }
+ cont->SetTitle(Form("N all tracks = %d", count));
+ // ??? The following does not always work:
+ cont->FindListTreeItem(gEve->GetListTree())->SetOpen(kTRUE);
+
+ gEve->Redraw3D();
+
+ return cont;
+}
+
+//==============================================================================
+// esd_tracks_by_anal_cuts
+//==============================================================================
+
+AliESDtrackCuts* g_esd_tracks_anal_cuts = 0;
+
+TEveElementList* esd_tracks_by_anal_cuts()
+{
AliESDEvent* esd = AliEveEventManager::AssertESD();
- TEveElementList* cont = new TEveElementList("ESD Tracks by category");
- gEve->AddElement(cont);
+ if (g_esd_tracks_anal_cuts == 0)
+ {
+ gSystem->Load("libPWGUDbase");
+ gROOT->ProcessLine(".L $ALICE_ROOT/PWGUD/CreateStandardCuts.C");
+ Int_t mode = AliPWG0Helper::kTPC;
+ if (TMath::Abs(esd->GetMagneticField()) > 0.01)
+ mode |= AliPWG0Helper::kFieldOn;
+ gROOT->ProcessLine(Form("g_esd_tracks_anal_cuts = CreateTrackCuts(%d, kFALSE)", mode));
+ }
- g_esd_tracks_by_category_container = cont;
+ TEveElementList* cont = new TEveElementList("ESD Tracks by Analysis Cuts");
+ gEve->AddElement(cont);
- const Int_t nCont = 7;
+ const Int_t nCont = 2;
const Float_t maxR = 520;
const Float_t magF = 0.1*esd->GetMagneticField();
Int_t tc[nCont];
Int_t count = 0;
- tl[0] = new TEveTrackList("Sigma < 3");
+ tl[0] = new TEveTrackList("Passed");
tc[0] = 0;
esd_track_propagator_setup(tl[0]->GetPropagator(), magF, maxR);
tl[0]->SetMainColor(3);
cont->AddElement(tl[0]);
- tl[1] = new TEveTrackList("3 < Sigma < 5");
+ tl[1] = new TEveTrackList("Rejected");
tc[1] = 0;
esd_track_propagator_setup(tl[1]->GetPropagator(), magF, maxR);
- tl[1]->SetMainColor(7);
+ tl[1]->SetMainColor(kRed);
cont->AddElement(tl[1]);
- tl[2] = new TEveTrackList("5 < Sigma");
- tc[2] = 0;
- esd_track_propagator_setup(tl[2]->GetPropagator(), magF, maxR);
- tl[2]->SetMainColor(46);
- cont->AddElement(tl[2]);
-
- tl[3] = new TEveTrackList("no ITS refit; Sigma < 5");
- tc[3] = 0;
- esd_track_propagator_setup(tl[3]->GetPropagator(), magF, maxR);
- tl[3]->SetMainColor(41);
- cont->AddElement(tl[3]);
-
- tl[4] = new TEveTrackList("no ITS refit; Sigma > 5");
- tc[4] = 0;
- esd_track_propagator_setup(tl[4]->GetPropagator(), magF, maxR);
- tl[4]->SetMainColor(48);
- cont->AddElement(tl[4]);
-
- tl[5] = new TEveTrackList("no TPC refit");
- tc[5] = 0;
- esd_track_propagator_setup(tl[5]->GetPropagator(), magF, maxR);
- tl[5]->SetMainColor(kRed);
- cont->AddElement(tl[5]);
-
- tl[6] = new TEveTrackList("ITS stand-alone");
- tc[6] = 0;
- esd_track_propagator_setup(tl[6]->GetPropagator(), magF, maxR);
- tl[6]->SetMainColor(kMagenta - 9);
- cont->AddElement(tl[6]);
-
for (Int_t n = 0; n < esd->GetNumberOfTracks(); ++n)
{
AliESDtrack* at = esd->GetTrack(n);
Float_t s = get_sigma_to_vertex(at);
- Int_t ti;
- if (s < 3) ti = 0;
- else if (s <= 5) ti = 1;
- else ti = 2;
-
- if (at->IsOn(AliESDtrack::kITSin) && ! at->IsOn(AliESDtrack::kTPCin))
- {
- ti = 6;
- }
- else if (at->IsOn(AliESDtrack::kTPCin) && ! at->IsOn(AliESDtrack::kTPCrefit))
- {
- ti = 5;
- }
- else if ( ! at->IsOn(AliESDtrack::kITSrefit))
- {
- ti = (ti == 2) ? 4 : 3;
- }
+ Int_t ti = (g_esd_tracks_anal_cuts->AcceptTrack(at)) ? 0 : 1;
TEveTrackList* tlist = tl[ti];
++tc[ti];
++count;
AliEveTrack* track = esd_make_track(at, tlist);
- track->SetName(Form("AliEveTrack idx=%d, sigma=%5.3f", at->GetID(), s));
+ track->SetName(Form("ESD Track idx=%d, sigma=%5.3f", at->GetID(), s));
tlist->AddElement(track);
}
tlist->MakeTracks();
- Bool_t good_cont = ti <= 1;
+ Bool_t good_cont = ti < 1;
if (AliEveTrackCounter::IsActive())
{
AliEveTrackCounter::fgInstance->RegisterTracks(tlist, good_cont);