+// $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 "TEveManager.h"
-// #include "V0.h"
-
-// #include "AliESD.h"
-// #include "AliESDtrack.h"
-// #include "AliESDv0.h"
-// #include "AliESDVertex.h"
-
-// using namespace TEveUtil;
-// 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);
+}
-Alieve::V0* esd_make_v0(TEveTrackPropagator* 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...
- TEveRecTrack rcPos;
- TEveRecTrack rcNeg;
- TEveRecV0 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;
+ }
- Alieve::V0* myV0 = new Alieve::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;
}
-Alieve::V0List* esd_V0(Double_t min_pt=0.1, Double_t max_pt=100)
+AliEveV0List* esd_V0(Bool_t onFly=kFALSE)
{
- printf("THIS SCRIPT DOES NOT WORK.\n"
- "Alieve::V0 classes have been temporarily removed.\n"
- "They need to be cleaned up.\n");
- return;
+ AliESDEvent* esd = AliEveEventManager::AssertESD();
- AliESDEvent* esd = Alieve::Event::AssertESD();
- AliESDVertex* primVertex =(AliESDVertex*) esd->GetVertex();
+ AliESDVertex* primVertex = (AliESDVertex*) esd->GetPrimaryVertex();
- Alieve::V0List* cont = new Alieve::V0List("ESD v0");
- cont->SetMainColor(Color_t(3)); // green
+ AliEveV0List* cont = new AliEveV0List("ESD v0");
+ cont->SetMainColor(3); // green
TEveTrackPropagator* rnrStyle = cont->GetPropagator();
- rnrStyle->SetMagField( esd->GetMagneticField() );
+ rnrStyle->SetMagField( 0.1*esd->GetMagneticField() );
gEve->AddElement(cont);
Int_t count = 0;
- //for (Int_t n=0; count<3; n++) {
- for (Int_t n=0; n<esd->GetNumberOfV0s(); n++) {
-
+ for (Int_t n=0; n<esd->GetNumberOfV0s(); ++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);
-
- Alieve::V0* myV0 = esd_make_v0(rnrStyle, primVertex, negTr,posTr, v0, n);
- if (myV0) {
+
+ AliEveV0* myV0 = esd_make_v0(rnrStyle, primVertex, negTr,posTr, v0, n);
+ if (myV0)
+ {
gEve->AddElement(myV0, cont);
- count++;
+ ++count;
}
}
- cont->SetTitle("testV0List ");
- cont->UpdateItems();
+ cont->SetTitle("test");
cont->MakeV0s();
gEve->Redraw3D();