X-Git-Url: http://git.uio.no/git/?p=u%2Fmrichter%2FAliRoot.git;a=blobdiff_plain;f=EVE%2Falice-macros%2Fprimary_vertex.C;h=360459a3a28e5b2ad4a6ea2bdf0c40fc30060143;hp=17470acb80b51f2b684a40e2673a779cf8f3c510;hb=25b4bdb293e97f4d327f8b1fb7569740cda31723;hpb=846e8468553ecde9f4bd8b6d21a3516210b0e8be diff --git a/EVE/alice-macros/primary_vertex.C b/EVE/alice-macros/primary_vertex.C index 17470acb80b..360459a3a28 100644 --- a/EVE/alice-macros/primary_vertex.C +++ b/EVE/alice-macros/primary_vertex.C @@ -1,72 +1,328 @@ -// $Header$ +// $Id$ +// Main authors: Matevz Tadel & Alja Mrak-Tadel: 2006, 2007 -TPolyMarker3D* make_vertex_marker(AliESDVertex* v, const Text_t* name) +/************************************************************************** + * Copyright(c) 1998-2008, ALICE Experiment at CERN, all rights reserved. * + * See http://aliceinfo.cern.ch/Offline/AliRoot/License.html for * + * full copyright notice. * + **************************************************************************/ + +#if !defined(__CINT__) || defined(__MAKECINT__) +#include +#include +#include + +#include + +#include +#include + +#endif + +//============================================================================== +// Utilities +//============================================================================== + +TEveCompound* assert_vertex_parent(const TString& name, Color_t col) +{ + // !!! TEveCompound should have viz-db support ... add in root, then fix here, + // that is, remove the color var and pass viz-db tag. + + TEveCompound* parent = dynamic_cast + (AliEveEventManager::GetCurrent()->FindChild(name)); + if (parent == 0) + { + parent = new TEveCompound(name); + parent->OpenCompound(); + parent->SetMainColor(col); + AliEveEventManager::GetMaster()->AddElement(parent); + } + return parent; +} + + +//============================================================================== +// Functions to make a cross / ellipse / box +//============================================================================== + +TEveStraightLineSet* +make_vertex_cross(const 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); + 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]); + TEveStraightLineSet* ls = new TEveStraightLineSet("Cross"); + TString title; + if (use_sigma) + { + e[0] *= fx; e[1] *= fy; e[2] *= fz; + title += Form("+- %.1f*sigma_x, %.1f*sigma_y, %.1f*sigma_z", fx, fy, fz); + } + else + { + e[0] = fx; e[1] = fy; e[2] = fz; + title += Form("+- %.1f cm x %.1f cm x %.1f cm", fx, fy, fz); + } + title += Form("\nx=%.5f, y=%.5f, z=%.5f\nsx=%.5f, sy=%.5f, sz=%.5f", + x[0], x[1], x[2], e[0], e[1], e[2]); + ls->SetTitle(title); - TPolyMarker3D* m = new TPolyMarker3D(1); - m->SetName(name); - m->SetPoint(0, x[0], x[1], x[2]); + 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 m; + ls->RefMainTrans().SetPos(x); + return ls; } -Reve::BoxSet* make_vertex_boxes(AliESDVertex* v) +TEveStraightLineSet* +make_vertex_ellipse(const 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); + v->GetXYZ(x); v->GetSigmaXYZ(e); + + TEveStraightLineSet* ls = new TEveStraightLineSet("Ellipse"); + TString title; + if (use_sigma) + { + e[0] *= fx; e[1] *= fy; e[2] *= fz; + title += Form("+- %.1f*sigma_x, %.1f*sigma_y, %.1f sigma_z", fx, fy, fz); + } + else + { + e[0] = fx; e[1] = fy; e[2] = fz; + title += Form("+- %.1f cm x %.1f cm x %.1f cm", fx, fy, fz); + } + title += Form("\nx=%.5f, y=%.5f, z=%.5f\nsx=%.5f, sy=%.5f, sz=%.5f", + x[0], x[1], x[2], e[0], e[1], e[2]); + ls->SetTitle(title); + + const Int_t N = 32; + const Float_t S = 2*TMath::Pi()/N; - Reve::BoxSet* bs; + Float_t a = e[0], b = e[1]; + for (Int_t i = 0; iAddLine(a*TMath::Cos(i*S) , b*TMath::Sin(i*S) , 0, + a*TMath::Cos(i*S+S), b*TMath::Sin(i*S+S), 0); - bs = new BoxSet("+- 10 x 10 x 20mm"); - bs->SetRenderMode(Reve::BoxSet::RM_Line); - bs->AddBox(Reve::Box(-1, x[0], x[1], x[2], 1, 1, 2)); - bs->SetMainColor((Color_t) 2); - gReve->AddRenderElement(bs); + a = e[0]; b = e[2]; + for (Int_t i = 0; iAddLine(a*TMath::Cos(i*S) , 0, b*TMath::Sin(i*S), + a*TMath::Cos(i*S+S), 0, b*TMath::Sin(i*S+S)); - bs = new BoxSet("+- 30 sigma_r x 10 sigma_z"); - bs->SetRenderMode(Reve::BoxSet::RM_Line); - bs->AddBox(Reve::Box(-1, x[0], x[1], x[2], 30*e[0], 30*e[1], 10*e[2])); - bs->SetMainColor((Color_t) 3); - gReve->AddRenderElement(bs); + a = e[1]; b = e[2]; + for (Int_t i = 0; iAddLine(0, a*TMath::Cos(i*S) , b*TMath::Sin(i*S), + 0, a*TMath::Cos(i*S+S), b*TMath::Sin(i*S+S)); - gReve->Redraw3D(); + ls->RefMainTrans().SetPos(x); + return ls; } -void register_vertex_marker(TPolyMarker3D* m) +TEveStraightLineSet* +make_vertex_box(const AliESDVertex* v, Bool_t use_sigma, Float_t fx, Float_t fy, Float_t fz) { - using namespace Reve; - Color_t* colp = FindColorVar(m, "fMarkerColor"); - RenderElementObjPtr* rnrEl = new RenderElementObjPtr(m, *colp); - gReve->AddRenderElement(rnrEl); - gReve->Redraw3D(); + Double_t x[3], e[3]; + v->GetXYZ(x); v->GetSigmaXYZ(e); + + TEveStraightLineSet* ls = new TEveStraightLineSet("Box"); + TString title; + if (use_sigma) + { + e[0] *= fx; e[1] *= fy; e[2] *= fz; + title += Form("+- %.1f*sigma_x, %.1f*sigma_y, %.1f*sigma_z", fx, fy, fz); + } + else + { + e[0] = fx; e[1] = fy; e[2] = fz; + title += Form("+- %.1f cm x %.1f cm x %.1f cm", fx, fy, fz); + } + title += Form("\nx=%.5f, y=%.5f, z=%.5f\nsx=%.5f, sy=%.5f, sz=%.5f", + x[0], x[1], x[2], e[0], e[1], e[2]); + ls->SetTitle(title); + + // 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; } -void primary_vertex(Bool_t showSPD=kTRUE, Bool_t showBoxes=kFALSE) + +//============================================================================== +// 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(); + const AliESDVertex *pv = esd->GetPrimaryVertex(); + if ( ! pv->GetStatus()) { + Info("primary_vertex", "Primary vertex not available."); + return 0; + } + + TEveStraightLineSet* ls = make_vertex_cross(pv, use_sigma, fx, fy, fz); + ls->ApplyVizTag("REC 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) { - AliESD* esd = Alieve::Event::AssertESD(); + AliESDEvent *esd = AliEveEventManager::AssertESD(); + const AliESDVertex *spdv = esd->GetPrimaryVertexSPD(); + if ( ! spdv->GetStatus()) { + Info("primary_vertex_spd", "Primary vertex SPD not available."); + return 0; + } - 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); + TEveStraightLineSet* ls = make_vertex_cross(spdv, use_sigma, fx, fy, fz); + ls->ApplyVizTag("REC PVTX SPD"); + assert_vertex_parent("Primary Vertex SPD", 6)->AddElement(ls); + gEve->Redraw3D(); + return ls; +} - if(showSPD) { - AliESDVertex* spdv = esd->GetVertex(); - TPolyMarker3D* spdvm = make_vertex_marker(spdv, "SPD Vertex"); - spdvm->SetMarkerStyle(2); - spdvm->SetMarkerColor(6); - register_vertex_marker(spdvm); +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(); + const AliESDVertex *tpcv = esd->GetPrimaryVertexTPC(); + if ( ! tpcv->GetStatus()) { + Info("primary_vertex_tpc", "Primary vertex TPC not available."); + return 0; + } + + TEveStraightLineSet* ls = make_vertex_cross(tpcv, use_sigma, fx, fy, fz); + ls->ApplyVizTag("REC 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(); + const AliESDVertex *pv = esd->GetPrimaryVertex(); + if ( ! pv->GetStatus()) { + Info("primary_vertex_ellipse", "Primary vertex not available."); + return 0; + } + + TEveStraightLineSet* ls = make_vertex_ellipse(pv, use_sigma, fx, fy, fz); + ls->ApplyVizTag("REC 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(); + const AliESDVertex *spdv = esd->GetPrimaryVertexSPD(); + if ( ! spdv->GetStatus()) { + Info("primary_vertex_ellipse_spd", "Primary vertex SPD not available."); + return 0; + } + + TEveStraightLineSet* ls = make_vertex_ellipse(spdv, use_sigma, fx, fy, fz); + ls->ApplyVizTag("REC 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(); + const AliESDVertex *tpcv = esd->GetPrimaryVertexTPC(); + if ( ! tpcv->GetStatus()) { + Info("primary_vertex_ellipse_tpc", "Primary vertex TPC not available."); + return 0; + } + + TEveStraightLineSet* ls = make_vertex_ellipse(tpcv, use_sigma, fx, fy, fz); + ls->ApplyVizTag("REC 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(); + const AliESDVertex *pv = esd->GetPrimaryVertex(); + if ( ! pv->GetStatus()) { + Info("primary_vertex_box", "Primary vertex not available."); + return 0; + } + + TEveStraightLineSet* ls = make_vertex_box(pv, use_sigma, fx, fy, fz); + ls->ApplyVizTag("REC 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(); + const AliESDVertex *spdv = esd->GetPrimaryVertexSPD(); + if ( ! spdv->GetStatus()) { + Info("primary_vertex_box_spd", "Primary vertex SPD not available."); + return 0; + } + + TEveStraightLineSet* ls = make_vertex_box(spdv, use_sigma, fx, fy, fz); + ls->ApplyVizTag("REC 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(); + const AliESDVertex *tpcv = esd->GetPrimaryVertexTPC(); + if ( ! tpcv->GetStatus()) { + Info("primary_vertex_box_tpc", "Primary vertex TPC not available."); + return 0; } - if(showBoxes) - make_vertex_boxes(pv); + TEveStraightLineSet* ls = make_vertex_box(tpcv, use_sigma, fx, fy, fz); + ls->ApplyVizTag("REC PVTX Box TPC"); + assert_vertex_parent("Primary Vertex TPC", 5)->AddElement(ls); + gEve->Redraw3D(); + return ls; }