]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - EVE/alice-macros/esd_V0.C
Error codes for histogram booking taken with getters, no longer hard coded (D. Elia)
[u/mrichter/AliRoot.git] / EVE / alice-macros / esd_V0.C
index 1b211c7d0d678b6dae31c9e30c66abcc19de47d3..f743e69759217bac66874e678d9636b671dd6a4c 100644 (file)
+// $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; 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);
-    
-    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;
 }