X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=EVE%2Falice-macros%2Fkine_tracks.C;h=ced9e58fb75acd44b60548f3a0b7dfa198288f1f;hb=e943b3c10ab8aececabca0570c16cbeb448210f2;hp=8ede7ae06f000cabdb2f41838af83cf6eac4b911;hpb=fc9514f5ea9c37fb83f2659970a7f8d3ee4e639a;p=u%2Fmrichter%2FAliRoot.git diff --git a/EVE/alice-macros/kine_tracks.C b/EVE/alice-macros/kine_tracks.C index 8ede7ae06f0..ced9e58fb75 100644 --- a/EVE/alice-macros/kine_tracks.C +++ b/EVE/alice-macros/kine_tracks.C @@ -1,42 +1,122 @@ -// Import tracks from kinematics-tree / particle-stack. -// Preliminary/minimal solution. +// $Id$ +// Main authors: Matevz Tadel & Alja Mrak-Tadel: 2006, 2007 + +/************************************************************************** + * Copyright(c) 1998-2008, ALICE Experiment at CERN, all rights reserved. * + * See http://aliceinfo.cern.ch/Offline/AliRoot/License.html for * + * full copyright notice. * + **************************************************************************/ + +/// \ingroup evemacros +/// \file kine_tracks.C +/// \brief Import tracks from kinematics-tree / particle-stack. +/// +/// Preliminary/minimal solution. +/// +/// \author Matevz Tadel & Alja Mrak-Tadel: 2006, 2007 + +#if !defined(__CINT__) || defined(__MAKECINT__) +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#endif + +// Use magnetic-field as retrieved from GRP. +Bool_t g_kine_tracks_true_field = kTRUE; + +// Use Runge-Kutta track stepper. +Bool_t g_kine_tracks_rk_stepper = kFALSE; + +//============================================================================== + +void kine_track_propagator_setup(TEveTrackPropagator* trkProp); + +TEveTrackList* +kine_tracks(Double_t min_pt = 0, Double_t min_p = 0, + Bool_t pdg_col = kTRUE, Bool_t recurse = kTRUE, + Bool_t use_track_refs = kTRUE); -#include "TParticlePDG.h" +void kine_daughters(AliEveTrack* parent, AliStack* stack, + Double_t min_pt, Double_t min_p, + Bool_t pdg_col, Bool_t recurse); -Reve::TrackList* -kine_tracks(Double_t min_pt = 0.1, Double_t min_p = 0.2, - Bool_t pdg_col = kTRUE, Bool_t recurse = kTRUE, - Bool_t use_track_refs = kTRUE) +void set_track_color(AliEveTrack* t, Bool_t pdg_col); +Color_t get_pdg_color(Int_t pdg); + +TEveElement* +kine_track(Int_t label, + Bool_t import_mother = kTRUE, Bool_t import_daughters = kTRUE, + Bool_t pdg_col = kTRUE, Bool_t recurse = kTRUE, + TEveElement* cont = 0); + +void kine_hide_neutrals(TEveElement* el=0, Int_t level=0); + +//============================================================================== + +void kine_track_propagator_setup(TEveTrackPropagator* trkProp) +{ + AliMagF* fld = AliEveEventManager::AssertMagField(); + + if (g_kine_tracks_true_field) + { + trkProp->SetMagFieldObj(new AliEveMagField(fld)); + } + else + { + trkProp->SetMagField(-0.1*fld->SolenoidField()); + } + if (g_kine_tracks_rk_stepper) + { + trkProp->SetStepper(TEveTrackPropagator::kRungeKutta); + } +} + +//============================================================================== + +TEveTrackList* +kine_tracks(Double_t min_pt, Double_t min_p, + Bool_t pdg_col, Bool_t recurse, + Bool_t use_track_refs) { - AliRunLoader* rl = Alieve::Event::AssertRunLoader(); + AliRunLoader* rl = AliEveEventManager::AssertRunLoader(); rl->LoadKinematics(); AliStack* stack = rl->Stack(); - if (!stack) { - Error("kine_tracks.C", "can not get kinematics."); + if (!stack) + { + Error("kine_tracks", "can not get kinematics."); return 0; } - gReve->DisableRedraw(); - - Reve::TrackList* cont = new Reve::TrackList("Kine Tracks"); - cont->SetMainColor(Color_t(3)); - Reve::TrackRnrStyle* rnrStyle = cont->GetRnrStyle(); - // !!! Watch the '-', apparently different sign convention then for ESD. - rnrStyle->SetMagField( - gAlice->Field()->SolenoidField() ); + gEve->DisableRedraw(); + + TEveTrackList* cont = new TEveTrackList("Kine Tracks"); + cont->SetMainColor(3); + TEveTrackPropagator* trkProp = cont->GetPropagator(); - gReve->AddRenderElement(cont); + kine_track_propagator_setup(trkProp); + + gEve->AddElement(cont); Int_t count = 0; - Int_t N = stack->GetNtrack(); - for (Int_t i=0; iGetNprimary(); + for (Int_t i = 0; i < Np; ++i) { - if(stack->IsPhysicalPrimary(i)) + TParticle* p = stack->Particle(i); + if (p->GetStatusCode() <= 1) { - TParticle* p = stack->Particle(i); if (p->Pt() < min_pt && p->P() < min_p) continue; ++count; - Reve::Track* track = new Reve::Track(p, i, rnrStyle); - + AliEveTrack* track = new AliEveTrack(p, i, trkProp); + //PH The line below is replaced waiting for a fix in Root //PH which permits to use variable siza arguments in CINT //PH on some platforms (alphalinuxgcc, solariscc5, etc.) @@ -45,9 +125,16 @@ kine_tracks(Double_t min_pt = 0.1, Double_t min_p = 0.2, sprintf(form,"%s [%d]", p->GetName(), i); track->SetName(form); track->SetStdTitle(); + Int_t ml = p->GetMother(0); + if (ml != -1) + { + track->SetTitle(Form("%s\nMother label=%d\nMother Pdg=%d", + track->GetElementTitle(), + ml, stack->Particle(ml)->GetPdgCode())); + } set_track_color(track, pdg_col); - gReve->AddRenderElement(track, cont); + gEve->AddElement(track, cont); if (recurse) kine_daughters(track, stack, min_pt, min_p, pdg_col, recurse); @@ -55,12 +142,12 @@ kine_tracks(Double_t min_pt = 0.1, Double_t min_p = 0.2, } // set path marks - Alieve::KineTools kt; + AliEveKineTools kt; kt.SetDaughterPathMarks(cont, stack, recurse); if (use_track_refs && rl->LoadTrackRefs() == 0) { kt.SetTrackReferences(cont, rl->TreeTR(), recurse); - rnrStyle->SetEditPathMarks(kTRUE); + trkProp->SetEditPathMarks(kTRUE); } kt.SortPathMarks(cont, recurse); @@ -68,36 +155,35 @@ kine_tracks(Double_t min_pt = 0.1, Double_t min_p = 0.2, char tooltip[1000]; sprintf(tooltip,"min pT=%.2lf, min P=%.2lf), N=%d", min_pt, min_p, count); cont->SetTitle(tooltip); // Not broadcasted automatically ... - cont->UpdateItems(); cont->MakeTracks(recurse); - gReve->EnableRedraw(); - gReve->Redraw3D(); + gEve->EnableRedraw(); + gEve->Redraw3D(); return cont; } -void kine_daughters(Reve::Track* parent, AliStack* stack, +void kine_daughters(AliEveTrack* parent, AliStack* stack, Double_t min_pt, Double_t min_p, Bool_t pdg_col, Bool_t recurse) { TParticle *p = stack->Particle(parent->GetLabel()); - if (p->GetNDaughters() > 0) + if (p->GetNDaughters() > 0) { - Reve::TrackRnrStyle* rs = parent->GetRnrStyle(); - for (int d=p->GetFirstDaughter(); d>0 && d<=p->GetLastDaughter(); ++d) - { + TEveTrackPropagator* rs = parent->GetPropagator(); + for (int d=p->GetFirstDaughter(); d>0 && d<=p->GetLastDaughter(); ++d) + { TParticle* dp = stack->Particle(d); if (dp->Pt() < min_pt && dp->P() < min_p) continue; - Reve::Track* dtrack = new Reve::Track(dp, d, rs); + AliEveTrack* dtrack = new AliEveTrack(dp, d, rs); char form[1000]; sprintf(form,"%s [%d]", dp->GetName(), d); dtrack->SetName(form); dtrack->SetStdTitle(); set_track_color(dtrack, pdg_col); - gReve->AddRenderElement(dtrack, parent); + gEve->AddElement(dtrack, parent); if (recurse) kine_daughters(dtrack, stack, min_pt, min_p, pdg_col, recurse); @@ -105,12 +191,14 @@ void kine_daughters(Reve::Track* parent, AliStack* stack, } } -Color_t set_track_color(Reve::Track* t, Bool_t pdg_col) +//============================================================================== + +void set_track_color(AliEveTrack* t, Bool_t pdg_col) { if (pdg_col) t->SetMainColor(get_pdg_color(t->GetPdg())); else - t->SetMainColor((Color_t)30); + t->SetMainColor(30); } Color_t get_pdg_color(Int_t pdg) @@ -119,7 +207,7 @@ Color_t get_pdg_color(Int_t pdg) static const Color_t DefCol = 30; static const Color_t ECol = 5; static const Color_t MuCol = 6; - static const Color_t GammaCol = 7; + static const Color_t GammaCol = 7; static const Color_t MesCol1 = 3; static const Color_t MesCol2 = 38; static const Color_t BarCol = 10; @@ -130,8 +218,8 @@ Color_t get_pdg_color(Int_t pdg) // elementary particles if (pdga < 100) { switch (pdga) { - case 11: - col = ECol; break; + case 11: + col = ECol; break; case 12: col = MuCol; break; case 22: @@ -141,10 +229,11 @@ Color_t get_pdg_color(Int_t pdg) // mesons and barions else if (pdga < 100000) { Int_t i = pdga; - Int_t i0 = i%10; i /= 10; - Int_t i1 = i%10; i /= 10; - Int_t i2 = i%10; i /= 10; - Int_t i3 = i%10; i /= 10; + // Int_t i0 = i%10; // Not used at the moment. + i /= 10; + Int_t i1 = i%10; i /= 10; + Int_t i2 = i%10; i /= 10; + Int_t i3 = i%10; i /= 10; Int_t i4 = i%10; //printf("pdg(%d) quark indices (%d,%d,%d,%d,%d) \n",pdg, i4,i3,i2, i1, i0); // meson @@ -161,14 +250,13 @@ Color_t get_pdg_color(Int_t pdg) return col; } -/******************************************************************************/ +//============================================================================== -Reve::RenderElement* +TEveElement* kine_track(Int_t label, - Bool_t import_mother = kTRUE, Bool_t import_daughters = kTRUE, - Bool_t pdg_col = kTRUE, Bool_t recurse = kTRUE, - Reve::RenderElement* cont = 0) - + Bool_t import_mother, Bool_t import_daughters, + Bool_t pdg_col, Bool_t recurse, + TEveElement* cont) { // Create mother and daughters tracks with given label. // mother -> particle with label @@ -178,10 +266,15 @@ kine_track(Int_t label, Warning("kine_track", "label not set."); return 0; } - - AliRunLoader* rl = Alieve::Event::AssertRunLoader(); + + AliRunLoader* rl = AliEveEventManager::AssertRunLoader(); rl->LoadKinematics(); AliStack* stack = rl->Stack(); + if (!stack) + { + Warning("kine_track", "can not get kinematics."); + return 0; + } if (label >= stack->GetNtrack()) { Warning("kine_track", "label out of range."); @@ -192,38 +285,37 @@ kine_track(Int_t label, if (import_mother || (import_daughters && p->GetNDaughters())) { - Reve::Track* toptrack = 0; - Reve::TrackList* tracklist = 0; - Reve::TrackRnrStyle* rs = 0; + TEveTrackPropagator* rs = 0; if (cont == 0) { - Reve::TrackList* tlist = new Reve::TrackList - (Form("Kinematics of %d", label, p->GetNDaughters())); + TEveTrackList* tlist = new TEveTrackList + (Form("Kinematics of %d %d", label, p->GetNDaughters())); cont = tlist; - Reve::TrackRnrStyle* rnrStyle = tlist->GetRnrStyle(); - // !!! Watch the '-', apparently different sign convention then for ESD. - rnrStyle->SetMagField( - gAlice->Field()->SolenoidField() ); + TEveTrackPropagator* trkProp = tlist->GetPropagator(); + + kine_track_propagator_setup(trkProp); + char tooltip[1000]; sprintf(tooltip,"Ndaughters=%d", p->GetNDaughters()); tlist->SetTitle(tooltip); - rnrStyle->fMaxOrbs = 2; - rnrStyle->SetEditPathMarks(kTRUE); + trkProp->SetMaxOrbs(2); + trkProp->SetEditPathMarks(kTRUE); - gReve->AddRenderElement(cont); - rs = tlist->GetRnrStyle(); + gEve->AddElement(cont); + rs = tlist->GetPropagator(); } else { - // check if container is TrackList or Track (has rnr-style) - Reve::Track* t = dynamic_cast(cont); + // check if container is TEveTrackList or AliEveTrack (has rnr-style) + AliEveTrack* t = dynamic_cast(cont); if (t) { - rs = t->GetRnrStyle(); + rs = t->GetPropagator(); } else { - Reve::TrackList* l = dynamic_cast(cont); + TEveTrackList* l = dynamic_cast(cont); if (l) - rs = l->GetRnrStyle(); + rs = l->GetPropagator(); else Error("kine_tracks.C", "TrackRenderStyle not set."); } @@ -231,7 +323,7 @@ kine_track(Int_t label, if (import_mother) { - Reve::Track* track = new Reve::Track(p, label, rs); + AliEveTrack* track = new AliEveTrack(p, label, rs); char form[1000]; sprintf(form,"%s [%d]", p->GetName(), label); track->SetName(form); @@ -239,16 +331,16 @@ kine_track(Int_t label, set_track_color(track, pdg_col); track->MakeTrack(); - gReve->AddRenderElement(track, cont); + gEve->AddElement(track, cont); cont = track; } - if (import_daughters && p->GetNDaughters()) + if (import_daughters && p->GetNDaughters()) { - for (int d=p->GetFirstDaughter(); d>0 && d<=p->GetLastDaughter(); ++d) - { + for (int d=p->GetFirstDaughter(); d>0 && d<=p->GetLastDaughter(); ++d) + { TParticle* dp = stack->Particle(d); - Reve::Track* track = new Reve::Track(dp, d, rs); + AliEveTrack* track = new AliEveTrack(dp, d, rs); char form[1000]; sprintf(form,"%s [%d]", dp->GetName(), d); track->SetName(form); @@ -256,7 +348,7 @@ kine_track(Int_t label, set_track_color(track, pdg_col); track->MakeTrack(); - gReve->AddRenderElement(track, cont); + gEve->AddElement(track, cont); if (recurse) kine_daughters(track, stack, 0, 0, pdg_col, recurse); @@ -264,8 +356,30 @@ kine_track(Int_t label, } } - cont->UpdateItems(); - gReve->Redraw3D(); + gEve->Redraw3D(); return cont; } +//============================================================================== + +void kine_hide_neutrals(TEveElement* el, Int_t level) +{ + if (el == 0) + { + el = gEve->GetCurrentEvent()->FindChild("Kine Tracks"); + if (!el) + return; + } + + TEveTrack* t = dynamic_cast(el); + if (t && t->GetCharge() == 0) + t->SetRnrSelf(kFALSE); + + for (TEveElement::List_i i = el->BeginChildren(); i != el->EndChildren(); ++i) + { + kine_hide_neutrals(*i, level + 1); + } + + if (level == 0) + gEve->Redraw3D(); +}