X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=EVE%2Falice-macros%2Fesd_V0.C;h=f743e69759217bac66874e678d9636b671dd6a4c;hb=b467364bdabdb3a235c6269193ae0c6affe53feb;hp=1b211c7d0d678b6dae31c9e30c66abcc19de47d3;hpb=a9f1420462b7edd89b0a4d9afbaaf44f5685860d;p=u%2Fmrichter%2FAliRoot.git diff --git a/EVE/alice-macros/esd_V0.C b/EVE/alice-macros/esd_V0.C index 1b211c7d0d6..f743e697592 100644 --- a/EVE/alice-macros/esd_V0.C +++ b/EVE/alice-macros/esd_V0.C @@ -1,115 +1,160 @@ +// $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. * + **************************************************************************/ -// #include "EVE/Alieve/EventAlieve.h" -// #include "Reve/RGTopFrame.h" -// #include "Reve/V0.h" - -// #include "AliESD.h" -// #include "AliESDtrack.h" -// #include "AliESDv0.h" -// #include "AliESDVertex.h" - -// using namespace Reve; -// using namespace Alieve; +void esd_v0_init_rectrack(TEveRecTrack& rt, AliExternalTrackParam* tp) +{ + Double_t pbuf[3], vbuf[3]; + rt.fSign = tp->GetSign(); + tp->GetXYZ(vbuf); rt.fV.Set(vbuf); + tp->GetPxPyPz(pbuf); rt.fP.Set(pbuf); + // Double_t ep = at->GetP(), mc = at->GetMass(); + rt.fBeta = 1; // ep/TMath::Sqrt(ep*ep + mc*mc); +} -Reve::V0* esd_make_v0(Reve::TrackRnrStyle* rnrStyle, AliESDVertex* primVtx, +AliEveV0* esd_make_v0(TEveTrackPropagator* rnrStyle, AliESDVertex* primVtx, AliESDtrack* neg, AliESDtrack* pos, AliESDv0* v0, Int_t i) { - if (! v0->GetOnFlyStatus()) - { // v0 on fly do not have the momentum vector filled... - Reve::RecTrack rcPos; - Reve::RecTrack rcNeg; - Reve::RecV0 rcV0; - - Double_t p[3]; - v0->GetNPxPyPz(p[0], p[1], p[2]); - rcV0.P_pos.Set(p); - v0->GetPPxPyPz(p[0], p[1], p[2]); - rcV0.P_neg.Set(p); - - v0->GetPxPyPz(p[0], p[1], p[2]); - Double_t v[3]; - v0->GetXYZ(v[0], v[1], v[2]); - - - // printf(" %f %f %f / %f %f %f %i\n",p[0], p[1], p[2], - // v[0], v[1], v[2], v0->GetOnFlyStatus()); - - rcV0.V_neg.Set(v); //original track vertices at dca not stored - rcV0.V_pos.Set(v); - rcV0.V_ca.Set(v); - - rcV0.d_label[0] = v0->GetNindex(); - rcV0.d_label[1] = v0->GetPindex(); - - Double_t ep = neg->GetP(), mc = neg->GetMass(); - rcNeg.beta = ep/TMath::Sqrt(ep*ep + mc*mc); - ep = pos->GetP(); mc = pos->GetMass(); - rcPos.beta = ep/TMath::Sqrt(ep*ep + mc*mc); - + TEveRecTrack rcPos; + TEveRecTrack rcNeg; + TEveRecV0 rcV0; + + Double_t p[3]; + v0->GetNPxPyPz(p[0], p[1], p[2]); + rcV0.fPPos.Set(p); + v0->GetPPxPyPz(p[0], p[1], p[2]); + rcV0.fPNeg.Set(p); + + v0->GetPxPyPz(p[0], p[1], p[2]); + + Double_t v[3]; + + v0->GetXYZ(v[0], v[1], v[2]); + rcV0.fVCa.Set(v); + + v0->GetParamN()->GetXYZ(v); rcV0.fVNeg.Set(v); + v0->GetParamP()->GetXYZ(v); rcV0.fVPos.Set(v); + + rcV0.fV0Birth.Set(primVtx->GetXv(), primVtx->GetYv(), primVtx->GetZv()); + + // Simulation data not directly available in AliESDv0 + //rcV0.fDLabel[0] = v0->GetNindex(); + //rcV0.fDLabel[1] = v0->GetPindex(); + + esd_v0_init_rectrack(rcNeg, v0->GetParamN()); + rcNeg.fIndex = v0->GetNindex(); + esd_v0_init_rectrack(rcPos, v0->GetParamP()); + rcPos.fIndex = v0->GetPindex(); + + AliEveV0* myV0 = new AliEveV0(&rcNeg, &rcPos, &rcV0, rnrStyle); + myV0->SetElementName(Form("ESDv0 %d", i)); + myV0->SetElementTitle(Form("OnFly: %d\nDCA %f", + v0->GetOnFlyStatus(), + v0->GetDcaV0Daughters())); + myV0->SetESDIndex(i); + myV0->SetOnFlyStatus(v0->GetOnFlyStatus()); + myV0->SetDaughterDCA(v0->GetDcaV0Daughters()); + + Double_t negProbability[10], posProbability[10]; + Double_t negP = 0.0, posP = 0.0; + neg->GetESDpid(negProbability); + pos->GetESDpid(posProbability); + negP = neg->P(); + posP = pos->P(); + + // ****** Tentative particle type "concentrations" + Double_t c[5]={0.01, 0.01, 0.85, 0.10, 0.05}; + AliPID::SetPriors(c); + + AliPID negPid(negProbability); + AliPID posPid(posProbability); + + Int_t negMostProbPdg = 0; + Int_t posMostProbPdg = 0; + + switch (negPid.GetMostProbable()){ + case 0: + negMostProbPdg = 11; break; + case 1: + negMostProbPdg = 13; break; + case 2: + negMostProbPdg = 211; break; + case 3: + negMostProbPdg = 321; break; + case 4: + negMostProbPdg = 2212; break; + default : + negMostProbPdg = 211; break; + } - Reve::V0* myV0 = new Reve::V0(&rcNeg, &rcPos, &rcV0, rnrStyle); - char ch[50]; - // sprintf(ch,"ESDv0%i",i); - // myV0->SetName(ch); - // myV0->SetTitle(ch); - myV0->SetESDIndex(i); - myV0->SetDaughterDCA(v0->GetDcaV0Daughters()); + switch (posPid.GetMostProbable()){ + case 0: + posMostProbPdg = 11; break; + case 1: + posMostProbPdg = 13; break; + case 2: + posMostProbPdg = 211; break; + case 3: + posMostProbPdg = 321; break; + case 4: + posMostProbPdg = 2212; break; + default : + posMostProbPdg = 211; break; + } - Double_t primx = primVtx->GetXv(), - primy = primVtx->GetYv(), - primz = primVtx->GetZv(); - myV0->SetCosPointingAngle(v0->GetV0CosineOfPointingAngle(primx,primy,primz)); + Float_t negMaxProbPid = negPid.GetProbability(negPid.GetMostProbable()); + Float_t posMaxProbPid = posPid.GetProbability(posPid.GetMostProbable()); - myV0->SetDecayLength(primVtx->GetXv(), primVtx->GetYv(), primVtx->GetZv()); - - return myV0; - } else { - return 0; - } + myV0->SetMaxProbPdgPid(0,negMostProbPdg,negMaxProbPid); + myV0->SetMaxProbPdgPid(1,posMostProbPdg,posMaxProbPid); + return myV0; } -Reve::V0List* esd_V0(Double_t min_pt=0.1, Double_t max_pt=100) +AliEveV0List* esd_V0(Bool_t onFly=kFALSE) { + AliESDEvent* esd = AliEveEventManager::AssertESD(); - AliESD* esd = Alieve::Event::AssertESD(); - AliESDVertex* primVertex =(AliESDVertex*) esd->GetVertex(); + AliESDVertex* primVertex = (AliESDVertex*) esd->GetPrimaryVertex(); - Reve::V0List* cont = new Reve::V0List("ESD v0"); - cont->SetMainColor(Color_t(3)); // green - Reve::TrackRnrStyle* rnrStyle = cont->GetRnrStyle(); - rnrStyle->SetMagField( esd->GetMagneticField() ); + AliEveV0List* cont = new AliEveV0List("ESD v0"); + cont->SetMainColor(3); // green + TEveTrackPropagator* rnrStyle = cont->GetPropagator(); + rnrStyle->SetMagField( 0.1*esd->GetMagneticField() ); - gReve->AddRenderElement(cont); + gEve->AddElement(cont); Int_t count = 0; - //for (Int_t n=0; count<3; n++) { - for (Int_t n=0; nGetNumberOfV0s(); n++) { - + for (Int_t n=0; nGetNumberOfV0s(); ++n) + { AliESDv0 *v0 = esd->GetV0(n); - if (v0->GetOnFlyStatus()) continue; + + if (v0->GetOnFlyStatus() != onFly) continue; Int_t negInd = v0->GetNindex(); Int_t posInd = v0->GetPindex(); AliESDtrack* negTr = esd->GetTrack(negInd); AliESDtrack* posTr = esd->GetTrack(posInd); - - Reve::V0* myV0 = esd_make_v0(rnrStyle, primVertex, negTr,posTr, v0, n); - if (myV0) { - gReve->AddRenderElement(cont, myV0); - count++; + + AliEveV0* myV0 = esd_make_v0(rnrStyle, primVertex, negTr,posTr, v0, n); + if (myV0) + { + gEve->AddElement(myV0, cont); + ++count; } } - cont->SetTitle("testV0List "); - cont->UpdateItems(); + cont->SetTitle("test"); cont->MakeV0s(); - cont->MakeMarkers(); - gReve->Redraw3D(); + gEve->Redraw3D(); return cont; }