]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - EVE/alice-macros/esd_V0.C
protection for weighted profile 3D
[u/mrichter/AliRoot.git] / EVE / alice-macros / esd_V0.C
index 401a994ce4dd93aef1422d4826f16c67dd2b5ee0..99800e0ef9fee61431bd12fe59d3fa9a22e7ff34 100644 (file)
@@ -7,7 +7,23 @@
  * full copyright notice.                                                 *
  **************************************************************************/
 
-void esd_v0_init_rectrack(TEveRecTrack& rt, AliExternalTrackParam* tp)
+#if !defined(__CINT__) || defined(__MAKECINT__)
+#include <TEveVSDStructs.h>
+#include <TEveTrackPropagator.h>
+#include <TEveManager.h>
+
+#include <AliExternalTrackParam.h>
+#include <AliPID.h>
+#include <AliESDEvent.h>
+#include <AliESDVertex.h>
+#include <AliESDtrack.h>
+#include <AliESDv0.h>
+#include <AliEveEventManager.h>
+#include <AliEveV0.h>
+#endif
+
+
+void esd_v0_init_rectrack(TEveRecTrack& rt, const AliExternalTrackParam* tp)
 {
   Double_t      pbuf[3], vbuf[3];
 
@@ -21,68 +37,122 @@ void esd_v0_init_rectrack(TEveRecTrack& rt, AliExternalTrackParam* tp)
 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.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]);
-
-    //   printf(" %f %f %f / %f %f %f    %i\n",p[0], p[1], p[2],
-    //          v[0], v[1], v[2], v0->GetOnFlyStatus());
-
-    rcV0.fVNeg.Set(v); //original track vertices at dca not stored
-    rcV0.fVPos.Set(v);
-    rcV0.fVCa.Set(v);
-
-    rcV0.fDLabel[0] = v0->GetNindex();
-    rcV0.fDLabel[1] = v0->GetPindex();
-
-    esd_v0_init_rectrack(rcNeg, v0->GetParamN());
-    esd_v0_init_rectrack(rcPos, v0->GetParamP());
-
-    AliEveV0* myV0 = new AliEveV0(&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());
-
-    return myV0;
-  } else {
-    return 0;
+  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;
   }
+
+  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;
+  }
+
+  Float_t negMaxProbPid  = negPid.GetProbability(negPid.GetMostProbable());
+  Float_t posMaxProbPid  = posPid.GetProbability(posPid.GetMostProbable());
+
+  myV0->SetMaxProbPdgPid(0,negMostProbPdg,negMaxProbPid);
+  myV0->SetMaxProbPdgPid(1,posMostProbPdg,posMaxProbPid);
+
+  return myV0;
 }
 
 
-AliEveV0List* esd_V0(Double_t min_pt=0.1, Double_t max_pt=100)
+AliEveV0List* esd_V0(Bool_t onFly=kFALSE)
 {
   AliESDEvent* esd = AliEveEventManager::AssertESD();
-  AliESDVertex* primVertex =(AliESDVertex*) esd->GetVertex();
+
+  AliESDVertex* primVertex = (AliESDVertex*) esd->GetPrimaryVertex();
 
   AliEveV0List* cont = new AliEveV0List("ESD v0");
-  cont->SetMainColor(Color_t(3)); // green
+  cont->SetMainColor(3); // green
   TEveTrackPropagator* rnrStyle = cont->GetPropagator();
   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();
@@ -90,33 +160,17 @@ AliEveV0List* esd_V0(Double_t min_pt=0.1, Double_t max_pt=100)
     AliESDtrack* posTr = esd->GetTrack(posInd);
 
     AliEveV0* myV0 = esd_make_v0(rnrStyle, primVertex, negTr,posTr, v0, n);
-    if (myV0) {
+    if (myV0)
+    {
       gEve->AddElement(myV0, cont);
-      count++;
+      ++count;
     }
   }
 
   cont->SetTitle("test");
-  cont->UpdateItems();
 
   cont->MakeV0s();
   gEve->Redraw3D();
 
   return cont;
 }
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-