* full copyright notice. *
**************************************************************************/
-TPolyMarker3D* make_vertex_marker(AliESDVertex* v, const Text_t* name )
-{
- Double_t x[3], e[3];
- v->GetXYZ(x);
- v->GetSigmaXYZ(e);
-
- printf("%16s: %f %f %f - %f %f %f\n", name,
- x[0], x[1], x[2], e[0], e[1], e[2]);
-
- TPolyMarker3D* m = new TPolyMarker3D(1);
- m->SetName(name);
- m->SetPoint(0, x[0], x[1], x[2]);
-
- return m;
-}
-
-TEveBoxSet* make_vertex_boxes(AliESDVertex* v)
-{
- Double_t x[3], e[3];
- v->GetXYZ(x);
- v->GetSigmaXYZ(e);
-
- TEveBoxSet* bs;
-
- bs = new TEveBoxSet("+- 10 x 10 x 20mm");
- bs->SetRenderMode(TEveBoxSet::RM_TEveLine);
- bs->AddBox(Box(-1, x[0], x[1], x[2], 1, 1, 2));
- bs->SetMainColor(2);
- gEve->AddElement(bs);
-
- bs = new TEveBoxSet("+- 30 sigma_r x 10 sigma_z");
- bs->SetRenderMode(TEveBoxSet::RM_TEveLine);
- bs->AddBox(Box(-1, x[0], x[1], x[2], 30*e[0], 30*e[1], 10*e[2]));
- bs->SetMainColor(3);
- gEve->AddElement(bs);
- gEve->Redraw3D();
-}
+//==============================================================================
+// Utilities
+//==============================================================================
-void register_vertex_marker(TPolyMarker3D* m)
+TEveCompound* assert_vertex_parent(const TString& name, Color_t col)
{
- Color_t* colp = TEveUtil::FindColorVar(m, "fMarkerColor");
- TEveElementObjectPtr* rnrEl = new TEveElementObjectPtr(m, *colp);
- gEve->AddElement(rnrEl);
- gEve->Redraw3D();
-}
+ // !!! TEveCompound should have viz-db support ... add in root, then fix here,
+ // that is, remove the color var and pass viz-db tag.
-void primary_vertex_primitive(Bool_t showSPD=kTRUE, Bool_t showBoxes=kFALSE)
-{
- AliESDEvent* esd = AliEveEventManager::AssertESD();
-
- AliESDVertex* pv = esd->GetPrimaryVertex();
- TPolyMarker3D* pvm = make_vertex_marker(pv, "Primary Vertex");
- pvm->SetMarkerStyle(5);
- pvm->SetMarkerColor(5);
- pvm->SetMarkerSize(1.4);
- register_vertex_marker(pvm);
-
- if (showSPD) {
- AliESDVertex* spdv = esd->GetPrimaryVertexSPD();
- TPolyMarker3D* spdvm = make_vertex_marker(spdv, "SPD Vertex");
- spdvm->SetMarkerStyle(2);
- spdvm->SetMarkerColor(6);
- register_vertex_marker(spdvm);
+ TEveCompound* parent = dynamic_cast<TEveCompound*>(gAliEveEvent->FindChild(name));
+ if (parent == 0)
+ {
+ parent = new TEveCompound(name);
+ parent->OpenCompound();
+ parent->SetMainColor(col);
+ gAliEveEvent->AddElement(parent);
}
-
- if (showBoxes)
- make_vertex_boxes(pv);
+ return parent;
}
-/******************************************************************************/
-TEveStraightLineSet* make_vertex_lineset(AliESDVertex* v, const Text_t* name)
+//==============================================================================
+// Functions to make a cross / ellipse / box
+//==============================================================================
+
+TEveStraightLineSet*
+make_vertex_cross(AliESDVertex* v, Bool_t use_sigma, Float_t fx, Float_t fy, Float_t fz)
{
Double_t x[3], e[3];
v->GetXYZ(x); v->GetSigmaXYZ(e);
- printf("%16s: %f %f %f - %f %f %f\n", name,
- x[0], x[1], x[2], e[0], e[1], e[2]);
- // dimensions
- TEveStraightLineSet* ls = new TEveStraightLineSet();
- ls->SetName(name);
+ TEveStraightLineSet* ls = new TEveStraightLineSet("Cross");
+ if (use_sigma)
+ {
+ e[0] *= fx; e[1] *= fy; e[2] *= fz;
+ ls->SetTitle(Form("+- %.1f*sigma_x, %.1f*sigma_y, %.1f*sigma_z", fx, fy, fz));
+ }
+ else
+ {
+ e[0] = fx; e[1] = fy; e[2] = fz;
+ ls->SetTitle(Form("+- %.1f cm x %.1f cm x %.1f cm", fx, fy, fz));
+ }
ls->AddLine(e[0], 0, 0, -e[0], 0, 0);
ls->AddLine(0, e[1], 0, 0, -e[1], 0);
ls->AddLine(0, 0, e[2], 0, 0, -e[2]);
return ls;
}
-void make_vertex_ellipses(TEveStraightLineSet* ls, AliESDVertex* v, Bool_t ellipseUseSigma)
+TEveStraightLineSet*
+make_vertex_ellipse(AliESDVertex* v, Bool_t use_sigma, Float_t fx, Float_t fy, Float_t fz)
{
Double_t x[3], e[3];
v->GetXYZ(x); v->GetSigmaXYZ(e);
- if (ellipseUseSigma)
+ TEveStraightLineSet* ls = new TEveStraightLineSet("Ellipse");
+ if (use_sigma)
{
- e[0] *= 30; e[1] *= 30; e[2] *= 10;
- ls->SetMarkerStyle(5);
- ls->SetMarkerColor(5);
- ls->SetMarkerSize(1.4);
- ls->SetLineColor(7);
- ls->SetTitle("+- 30 sigma_r x 10 sigma_z");
+ e[0] *= fx; e[1] *= fy; e[2] *= fz;
+ ls->SetTitle(Form("+- %.1f*sigma_x, %.1f*sigma_y, %.1f sigma_z", fx, fy, fz));
}
else
{
- e[0] = 1; e[1] = 1; e[2] = 2;
- ls->SetMarkerStyle(2);
- ls->SetMarkerColor(6);
- ls->SetLineColor(6);
- ls->SetTitle("+- 10 x 10 x 20mm");
+ e[0] = fx; e[1] = fy; e[2] = fz;
+ ls->SetTitle(Form("+- %.1f cm x %.1f cm x %.1f cm", fx, fy, fz));
}
- Int_t N = 32;
- Float_t S = 2*TMath::Pi()/N;
- Float_t b, a, phi;
+ const Int_t N = 32;
+ const Float_t S = 2*TMath::Pi()/N;
- a = e[0]; b = e[1];
+ Float_t a = e[0], b = e[1];
for (Int_t i = 0; i<N; i++)
ls->AddLine(a*TMath::Cos(i*S) , b*TMath::Sin(i*S) , 0,
a*TMath::Cos(i*S+S), b*TMath::Sin(i*S+S), 0);
for (Int_t i = 0; i<N; i++)
ls->AddLine(0, a*TMath::Cos(i*S) , b*TMath::Sin(i*S),
0, a*TMath::Cos(i*S+S), b*TMath::Sin(i*S+S));
+
+ ls->RefMainTrans().SetPos(x);
+ return ls;
}
-void primary_vertex(Bool_t showSPD=kTRUE, Bool_t rnrEllipse=kTRUE)
+TEveStraightLineSet*
+make_vertex_box(AliESDVertex* v, Bool_t use_sigma, Float_t fx, Float_t fy, Float_t fz)
{
- AliESDEvent* esd = AliEveEventManager::AssertESD();
- TEveStraightLineSet* ls;
-
- AliESDVertex* PV = esd->GetPrimaryVertex();
- ls = make_vertex_lineset(PV, "Primary Vertex");
- if (rnrEllipse) make_vertex_ellipses(ls, PV, kTRUE);
- gEve->AddElement(ls);
+ Double_t x[3], e[3];
+ v->GetXYZ(x); v->GetSigmaXYZ(e);
- if (showSPD)
+ TEveStraightLineSet* ls = new TEveStraightLineSet("Box");
+ if (use_sigma)
+ {
+ e[0] *= fx; e[1] *= fy; e[2] *= fz;
+ ls->SetTitle(Form("+- %.1f*sigma_x, %.1f*sigma_y, %.1f*sigma_z", fx, fy, fz));
+ }
+ else
{
- AliESDVertex* SPDV = esd->GetPrimaryVertexSPD();
- ls = make_vertex_lineset(SPDV, "SPD Vertex");
- if (rnrEllipse) make_vertex_ellipses(ls, SPDV, kFALSE);
- gEve->AddElement(ls);
+ e[0] = fx; e[1] = fy; e[2] = fz;
+ ls->SetTitle(Form("+- %.1f cm x %.1f cm x %.1f cm", fx, fy, fz));
}
+ // pos z
+ ls->AddLine( e[0], e[1], e[2], e[0], -e[1], e[2]);
+ ls->AddLine( e[0], -e[1], e[2], -e[0], -e[1], e[2]);
+ ls->AddLine(-e[0], -e[1], e[2], -e[0], e[1], e[2]);
+ ls->AddLine(-e[0], e[1], e[2], e[0], e[1], e[2]);
+ // lines along z
+ ls->AddLine( e[0], e[1], e[2], e[0], e[1], -e[2]);
+ ls->AddLine( e[0], -e[1], e[2], e[0], -e[1], -e[2]);
+ ls->AddLine(-e[0], -e[1], e[2], -e[0], -e[1], -e[2]);
+ ls->AddLine(-e[0], e[1], e[2], -e[0], e[1], -e[2]);
+ // neg z
+ ls->AddLine( e[0], e[1], -e[2], e[0], -e[1], -e[2]);
+ ls->AddLine( e[0], -e[1], -e[2], -e[0], -e[1], -e[2]);
+ ls->AddLine(-e[0], -e[1], -e[2], -e[0], e[1], -e[2]);
+ ls->AddLine(-e[0], e[1], -e[2], e[0], e[1], -e[2]);
+
+ ls->RefMainTrans().SetPos(x);
+ return ls;
+}
+
+
+//==============================================================================
+// Element making functions
+//==============================================================================
+
+TEveStraightLineSet*
+primary_vertex(Bool_t use_sigma=kTRUE, Float_t fx=1, Float_t fy=1, Float_t fz=1)
+{
+ AliESDEvent *esd = AliEveEventManager::AssertESD();
+ AliESDVertex *pv = esd->GetPrimaryVertex();
+
+ TEveStraightLineSet* ls = make_vertex_cross(pv, use_sigma, fx, fy, fz);
+ ls->ApplyVizTag("PVTX");
+ assert_vertex_parent("Primary Vertex", 7)->AddElement(ls);
+ gEve->Redraw3D();
+ return ls;
+}
+
+TEveStraightLineSet*
+primary_vertex_spd(Bool_t use_sigma=kTRUE, Float_t fx=1, Float_t fy=1, Float_t fz=1)
+{
+ AliESDEvent *esd = AliEveEventManager::AssertESD();
+ AliESDVertex *spdv = esd->GetPrimaryVertexSPD();
+
+ TEveStraightLineSet* ls = make_vertex_cross(spdv, use_sigma, fx, fy, fz);
+ ls->ApplyVizTag("PVTX SPD");
+ assert_vertex_parent("Primary Vertex SPD", 6)->AddElement(ls);
+ gEve->Redraw3D();
+ return ls;
+}
+
+TEveStraightLineSet*
+primary_vertex_tpc(Bool_t use_sigma=kTRUE, Float_t fx=1, Float_t fy=1, Float_t fz=1)
+{
+ AliESDEvent *esd = AliEveEventManager::AssertESD();
+ AliESDVertex *tpcv = esd->GetPrimaryVertexTPC();
+
+ TEveStraightLineSet* ls = make_vertex_cross(tpcv, use_sigma, fx, fy, fz);
+ ls->ApplyVizTag("PVTX TPC");
+ assert_vertex_parent("Primary Vertex TPC", 5)->AddElement(ls);
+ gEve->Redraw3D();
+ return ls;
+}
+
+//------------------------------------------------------------------------------
+// Ellipse
+//------------------------------------------------------------------------------
+
+TEveStraightLineSet*
+primary_vertex_ellipse(Bool_t use_sigma=kTRUE, Float_t fx=30, Float_t fy=30, Float_t fz=10)
+{
+ AliESDEvent *esd = AliEveEventManager::AssertESD();
+ AliESDVertex *pv = esd->GetPrimaryVertex();
+
+ TEveStraightLineSet* ls = make_vertex_ellipse(pv, use_sigma, fx, fy, fz);
+ ls->ApplyVizTag("PVTX Ellipse");
+ assert_vertex_parent("Primary Vertex", 7)->AddElement(ls);
+ gEve->Redraw3D();
+ return ls;
+}
+
+TEveStraightLineSet*
+primary_vertex_ellipse_spd(Bool_t use_sigma=kTRUE, Float_t fx=30, Float_t fy=30, Float_t fz=10)
+{
+ AliESDEvent *esd = AliEveEventManager::AssertESD();
+ AliESDVertex *spdv = esd->GetPrimaryVertexSPD();
+
+ TEveStraightLineSet* ls = make_vertex_ellipse(spdv, use_sigma, fx, fy, fz);
+ ls->ApplyVizTag("PVTX Ellipse SPD");
+ assert_vertex_parent("Primary Vertex SPD", 6)->AddElement(ls);
+ gEve->Redraw3D();
+ return ls;
+}
+
+TEveStraightLineSet*
+primary_vertex_ellipse_tpc(Bool_t use_sigma=kTRUE, Float_t fx=30, Float_t fy=30, Float_t fz=10)
+{
+ AliESDEvent *esd = AliEveEventManager::AssertESD();
+ AliESDVertex *tpcv = esd->GetPrimaryVertexTPC();
+
+ TEveStraightLineSet* ls = make_vertex_ellipse(tpcv, use_sigma, fx, fy, fz);
+ ls->ApplyVizTag("PVTX Ellipse TPC");
+ assert_vertex_parent("Primary Vertex TPC", 5)->AddElement(ls);
+ gEve->Redraw3D();
+ return ls;
+}
+
+//------------------------------------------------------------------------------
+// Box
+//------------------------------------------------------------------------------
+
+TEveStraightLineSet*
+primary_vertex_box(Bool_t use_sigma=kTRUE, Float_t fx=30, Float_t fy=30, Float_t fz=10)
+{
+ AliESDEvent *esd = AliEveEventManager::AssertESD();
+ AliESDVertex *pv = esd->GetPrimaryVertex();
+
+ TEveStraightLineSet* ls = make_vertex_box(pv, use_sigma, fx, fy, fz);
+ ls->ApplyVizTag("PVTX Box");
+ assert_vertex_parent("Primary Vertex", 7)->AddElement(ls);
+ gEve->Redraw3D();
+ return ls;
+}
+
+TEveStraightLineSet*
+primary_vertex_box_spd(Bool_t use_sigma=kTRUE, Float_t fx=30, Float_t fy=30, Float_t fz=10)
+{
+ AliESDEvent *esd = AliEveEventManager::AssertESD();
+ AliESDVertex *spdv = esd->GetPrimaryVertexSPD();
+
+ TEveStraightLineSet* ls = make_vertex_box(spdv, use_sigma, fx, fy, fz);
+ ls->ApplyVizTag("PVTX Box SPD");
+ assert_vertex_parent("Primary Vertex SPD", 6)->AddElement(ls);
+ gEve->Redraw3D();
+ return ls;
+}
+
+TEveStraightLineSet*
+primary_vertex_box_tpc(Bool_t use_sigma=kTRUE, Float_t fx=30, Float_t fy=30, Float_t fz=10)
+{
+ AliESDEvent *esd = AliEveEventManager::AssertESD();
+ AliESDVertex *tpcv = esd->GetPrimaryVertexTPC();
+
+ TEveStraightLineSet* ls = make_vertex_box(tpcv, use_sigma, fx, fy, fz);
+ ls->ApplyVizTag("PVTX Box TPC");
+ assert_vertex_parent("Primary Vertex TPC", 5)->AddElement(ls);
+ gEve->Redraw3D();
+ return ls;
}
R__EXTERN TEveProjectionManager *gRPhiMgr;
R__EXTERN TEveProjectionManager *gRhoZMgr;
-TEveGeoShape *gGeomGentle = 0;
-TEveGeoShape *gGeomGentleTRD = 0;
+TEveGeoShape *gGeomGentle = 0;
+TEveGeoShape *gGeomGentleRPhi = 0;
+TEveGeoShape *gGeomGentleRhoZ = 0;
+TEveGeoShape *gGeomGentleTRD = 0;
Bool_t gShowTRD = kFALSE;
// geometry
TEveUtil::LoadMacro("geom_gentle.C");
gGeomGentle = geom_gentle();
+ gGeomGentleRPhi = geom_gentle_rphi(); gGeomGentleRPhi->IncDenyDestroy();
+ gGeomGentleRhoZ = geom_gentle_rhoz(); gGeomGentleRhoZ->IncDenyDestroy();
if (gShowTRD) {
TEveUtil::LoadMacro("geom_gentle_trd.C");
gGeomGentleTRD = geom_gentle_trd();
exec->AddMacro(new AliEveMacro(AliEveMacro::kRunLoader, "FMD DIGITS", "fmd_digits.C", "fmd_digits", "", kFALSE));
exec->AddMacro(new AliEveMacro(AliEveMacro::kRunLoader, "FMD Hits", "fmd_hits.C", "fmd_hits", "", kFALSE));
- exec->AddMacro(new AliEveMacro(AliEveMacro::kESD, "REC PVTX", "primary_vertex.C", "primary_vertex"));
+ exec->AddMacro(new AliEveMacro(AliEveMacro::kESD, "REC PVTX", "primary_vertex.C", "primary_vertex", "", kTRUE));
+ exec->AddMacro(new AliEveMacro(AliEveMacro::kESD, "REC PVTX Ellipse", "primary_vertex.C", "primary_vertex_ellipse", "", kTRUE));
+ exec->AddMacro(new AliEveMacro(AliEveMacro::kESD, "REC PVTX Box", "primary_vertex.C", "primary_vertex_box", "kFALSE, 3, 3, 3", kFALSE));
+ exec->AddMacro(new AliEveMacro(AliEveMacro::kESD, "REC PVTX", "primary_vertex.C", "primary_vertex_spd", "", kTRUE));
+ exec->AddMacro(new AliEveMacro(AliEveMacro::kESD, "REC PVTX Ellipse", "primary_vertex.C", "primary_vertex_ellipse_spd", "", kTRUE));
+ exec->AddMacro(new AliEveMacro(AliEveMacro::kESD, "REC PVTX Box", "primary_vertex.C", "primary_vertex_box_spd", "kFALSE, 3, 3, 3", kFALSE));
+ exec->AddMacro(new AliEveMacro(AliEveMacro::kESD, "REC PVTX", "primary_vertex.C", "primary_vertex_tpc", "", kFALSE));
+ exec->AddMacro(new AliEveMacro(AliEveMacro::kESD, "REC PVTX Ellipse", "primary_vertex.C", "primary_vertex_ellipse_tpc", "", kFALSE));
+ exec->AddMacro(new AliEveMacro(AliEveMacro::kESD, "REC PVTX Box", "primary_vertex.C", "primary_vertex_box_tpc", "kFALSE, 3, 3, 3", kFALSE));
+
exec->AddMacro(new AliEveMacro(AliEveMacro::kESD, "REC V0", "esd_V0_points.C", "esd_V0_points"));
exec->AddMacro(new AliEveMacro(AliEveMacro::kESD, "REC V0", "esd_V0.C", "esd_V0"));
// exec->AddMacro(new AliEveMacro(AliEveMacro::kESD, "esd_tracks.C", ""));
TEveUtil::LoadMacro("esd_tracks.C");
+ exec->AddMacro(new AliEveMacro(AliEveMacro::kESD, "REC Track", "esd_spd_tracklets.C", "esd_spd_tracklets", "", kFALSE));
+
exec->AddMacro(new AliEveMacro(AliEveMacro::kRunLoader, "REC Clus ITS", "its_clusters.C+", "its_clusters"));
exec->AddMacro(new AliEveMacro(AliEveMacro::kRunLoader, "REC Clus TPC", "tpc_clusters.C+", "tpc_clusters"));
exec->AddMacro(new AliEveMacro(AliEveMacro::kRunLoader, "REC Clus TRD", "trd_clusters.C+", "trd_clusters"));
if (gRPhiMgr && top) {
gRPhiMgr->DestroyElements();
gRPhiMgr->SetCenter(x[0], x[1], x[2]);
- gRPhiMgr->ImportElements(gGeomGentle);
+ gRPhiMgr->ImportElements(gGeomGentleRPhi);
if (gShowTRD) gRPhiMgr->ImportElements(gGeomGentleTRD);
gRPhiMgr->ImportElements(top);
}
if (gRhoZMgr && top) {
gRhoZMgr->DestroyElements();
gRhoZMgr->SetCenter(x[0], x[1], x[2]);
- gRhoZMgr->ImportElements(gGeomGentle);
+ gRhoZMgr->ImportElements(gGeomGentleRhoZ);
if (gShowTRD) gRhoZMgr->ImportElements(gGeomGentleTRD);
gRhoZMgr->ImportElements(top);
}
gROOT->ProcessLine("SplitGLView::UpdateSummary()");
}
-
-/******************************************************************************/
-
-TParticle* id(Int_t label=0, Bool_t showParents=kTRUE)
-{
- AliRunLoader* rl = AliEveEventManager::AssertRunLoader();
- rl->LoadKinematics();
- AliStack* stack = rl->Stack();
-
- printf("Number primaries %d, all particles %d, label %d\n",
- stack->GetNprimary(), stack->GetNtrack(), label);
- if (label < 0 || label >= stack->GetNtrack()) {
- printf(" Label exceeds available range.\n");
- return 0;
- }
-
- TParticle* part = stack->Particle(label);
- if (part != 0) {
- part->Print();
- if (showParents) {
- while (part->GetMother(0) >= 0) {
- part = stack->Particle(part->GetMother(0));
- part->Print();
- }
- }
- }
- return stack->Particle(label);
-}