]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
From Boris: add support for mass cuts with daughter particle specification.
authormtadel <mtadel@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 31 Dec 2008 17:03:39 +0000 (17:03 +0000)
committermtadel <mtadel@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 31 Dec 2008 17:03:39 +0000 (17:03 +0000)
EVE/EveBase/AliEveV0.cxx
EVE/EveBase/AliEveV0.h
EVE/EveBase/AliEveV0Editor.cxx
EVE/EveBase/AliEveV0Editor.h
EVE/EveBase/AliEveV0ListEditor.cxx
EVE/EveBase/AliEveV0ListEditor.h
EVE/alice-macros/esd_V0.C

index 1fbad9b31aea07659a8085ea2972d16a8f2df924..8886b95260e53ecff3e47ccd9747cc5dde858de4 100644 (file)
@@ -45,7 +45,11 @@ AliEveV0::AliEveV0() :
   fESDIndex(-1),
   fOnFlyStatus(kFALSE),
   fDaughterDCA(999),
-  fChi2V0(-1)
+  fChi2V0(-1),
+  fNegMaxProbPdg(0),
+  fPosMaxProbPdg(0),
+  fNegMaxProbPid(0),
+  fPosMaxProbPid(0)
 {
   // Default constructor.
 
@@ -71,7 +75,11 @@ AliEveV0::AliEveV0(TEveRecTrack* tNeg, TEveRecTrack* tPos,
   fESDIndex(-1),
   fOnFlyStatus(kFALSE),
   fDaughterDCA(999),
-  fChi2V0(-1)
+  fChi2V0(-1),
+  fNegMaxProbPdg(0),
+  fPosMaxProbPdg(0),
+  fNegMaxProbPid(0),
+  fPosMaxProbPid(0)
 {
   // Constructor with full V0 specification.
 
@@ -110,7 +118,23 @@ AliEveV0::~AliEveV0()
 }
 
 //______________________________________________________________________________
-Float_t AliEveV0::GetInvMass(Float_t nPdgCode, Float_t pPdgCode) const
+void AliEveV0::SetMaxProbPdgPid(Int_t iDaughter, Int_t rPdg, Float_t rPid)
+{
+  // Sets the maximum probability Pdg value and Pid for one daughter
+  // Should be moved to TEveTrack property eventually (or AliEveTrack creation)
+
+  if(iDaughter==0){
+    fNegMaxProbPdg = rPdg;
+    fNegMaxProbPid = rPid;
+  }
+  else if (iDaughter==1){
+    fPosMaxProbPdg = rPdg;
+    fPosMaxProbPid = rPid;
+  }
+
+}
+//______________________________________________________________________________
+Float_t AliEveV0::GetInvMass(Int_t nPdgCode, Int_t pPdgCode) const
 {
   // Returns Invariant Mass assuming the masses of the daughter particles
   TEveVector lNegMomentum = fNegTrack->GetMomentum();
@@ -165,7 +189,13 @@ AliEveV0List::AliEveV0List() :
   fMinDaughterDCA(0),
   fMaxDaughterDCA(1),
   fMinPt(0),
-  fMaxPt(20)
+  fMaxPt(20),
+  fNegCheckedPid(211),
+  fPosCheckedPid(211),
+  fNegCheckedProb(0.5),
+  fPosCheckedProb(0.5),
+  fMinInvariantMass(0),
+  fMaxInvariantMass(1.2)
 {
   // Default constructor.
 
@@ -187,7 +217,13 @@ AliEveV0List::AliEveV0List(TEveTrackPropagator* rs) :
   fMinDaughterDCA(0),
   fMaxDaughterDCA(1),
   fMinPt(0),
-  fMaxPt(20)
+  fMaxPt(20),
+  fNegCheckedPid(211),
+  fPosCheckedPid(211),
+  fNegCheckedProb(0.5),
+  fPosCheckedProb(0.5),
+  fMinInvariantMass(0),
+  fMaxInvariantMass(1.2)
 {
   // Constructor with given track-propagator..
 
@@ -211,7 +247,13 @@ AliEveV0List::AliEveV0List(const Text_t* name, TEveTrackPropagator* rs) :
   fMinDaughterDCA(0),
   fMaxDaughterDCA(1),
   fMinPt(0),
-  fMaxPt(20)
+  fMaxPt(20),
+  fNegCheckedPid(211),
+  fPosCheckedPid(211),
+  fNegCheckedProb(0.5),
+  fPosCheckedProb(0.5),
+  fMinInvariantMass(0),
+  fMaxInvariantMass(1.2)
 {
   // Standard constructor.
 
@@ -304,3 +346,58 @@ void AliEveV0List::FilterByPt(Float_t minPt, Float_t maxPt)
   ElementChanged();
   gEve->Redraw3D();
 }
+
+//______________________________________________________________________________
+void AliEveV0List::FilterByCheckedPidMinProb(Int_t rFlag,Int_t rDaughter, Int_t rPid, Float_t rProb)
+{
+
+  if (!rDaughter){
+    fNegCheckedPid  = rPid;
+    fNegCheckedProb = rProb;
+  }
+  else {
+    fPosCheckedPid  = rPid;
+    fPosCheckedProb = rProb;
+  }
+
+  // Select visibility of elements based on one of the V0 daughters PID
+  for(List_i i = fChildren.begin(); i != fChildren.end(); ++i)
+  {
+    AliEveV0* v0 = (AliEveV0*) *i;
+    Int_t   pid = 0;
+    Float_t prob = 0.0;
+    Bool_t  show = 0;
+    if     (!rDaughter) {// Negative daughter checked
+      pid  = v0->GetNegMaxProbPdg();
+      prob = v0->GetNegMaxProbPid();
+      show = (pid == fNegCheckedPid && prob > fNegCheckedProb) || !rFlag ; 
+    }
+    else if (rDaughter) {// Positive daughter checked
+      pid = v0->GetPosMaxProbPdg();
+      prob = v0->GetPosMaxProbPid();
+      show = (pid == fPosCheckedPid && prob > fPosCheckedProb) || !rFlag ; 
+    }
+    v0->SetRnrState(show);
+  }
+  ElementChanged();
+  gEve->Redraw3D();
+}
+
+//______________________________________________________________________________
+void AliEveV0List::FilterByInvariantMass(Float_t minInvariantMass, Float_t maxInvariantMass, Int_t nPdgCode, Int_t pPdgCode)
+{
+  // Select visibility of elements based on the V0 invariant mass.
+
+  fMinInvariantMass = minInvariantMass;
+  fMaxInvariantMass = maxInvariantMass;
+
+  for(List_i i = fChildren.begin(); i != fChildren.end(); ++i)
+  {
+    AliEveV0* v0 = (AliEveV0*) *i;
+    Float_t  invMass = v0->GetInvMass(nPdgCode, pPdgCode);
+    Bool_t  show = invMass >= fMinInvariantMass && invMass <= fMaxInvariantMass;
+    v0->SetRnrState(show);
+  }
+  ElementChanged();
+  gEve->Redraw3D();
+}
index be70c02c370d59e6d1ba3781f76893aad4a947d3..bf25427443b32f1f2213ad192d52f9458aa2dceb 100644 (file)
@@ -61,7 +61,7 @@ public:
   Float_t GetRadius() const { return fRecDecayV.Perp(); }
   Float_t GetPt()     const { return fRecDecayP.Perp(); }
 
-  Float_t GetInvMass(Float_t nPdgCode, Float_t pPdgCode) const;
+  Float_t GetInvMass(Int_t nPdgCode, Int_t pPdgCode) const;
   Float_t GetK0sInvMass() const { return GetInvMass(kPiMinus,kPiPlus); }
   Float_t GetLambdaInvMass() const { return GetInvMass(kPiMinus,kProton); }
   Float_t GetAntiLambdaInvMass() const { return GetInvMass(kProton,kPiPlus); }
@@ -69,6 +69,12 @@ public:
   Bool_t GetOnFlyStatus()    const { return fOnFlyStatus; }
   void   SetOnFlyStatus(Bool_t fs) { fOnFlyStatus = fs; }
 
+  void    SetMaxProbPdgPid(Int_t iDaughter, Int_t rPdg, Float_t rPid);
+  Int_t   GetNegMaxProbPdg() const { return fNegMaxProbPdg; }
+  Int_t   GetPosMaxProbPdg() const { return fPosMaxProbPdg; }
+  Float_t GetNegMaxProbPid() const { return fNegMaxProbPid; }
+  Float_t GetPosMaxProbPid() const { return fPosMaxProbPid; }
+
   Int_t GetESDIndex() const { return fESDIndex; }
   void  SetESDIndex(Int_t ind) { fESDIndex = ind;}
 
@@ -99,6 +105,11 @@ protected:
   Float_t           fDaughterDCA; // Distance at the point of closest approach. 
   Float_t           fChi2V0;      // Some Chi-square.
 
+  Int_t             fNegMaxProbPdg; // Maximum PDG probability for the negative daughter
+  Int_t             fPosMaxProbPdg; // Maximum PDG probability for the positive daughter
+  Float_t           fNegMaxProbPid; // Maximum PID probability for the negative daughter
+  Float_t           fPosMaxProbPid; // Maximum PID probability for the positive daughter
+
 private:
   AliEveV0(const AliEveV0&);            // Not implemented
   AliEveV0& operator=(const AliEveV0&); // Not implemented
@@ -140,6 +151,18 @@ public:
   void   FilterByRadius(Float_t minR, Float_t maxR);
   void   FilterByDaughterDCA(Float_t minDaughterDCA, Float_t maxDaughterDCA);
   void   FilterByPt(Float_t minPt, Float_t maxPt);
+  void   FilterByCheckedPidMinProb(Int_t rFlag, Int_t rDaughter, Int_t rPid, Float_t rProb);
+  void   SetNegCheckedPid(Int_t rNegCheckedPid) {fNegCheckedPid = rNegCheckedPid;}
+  void   SetPosCheckedPid(Int_t rPosCheckedPid) {fPosCheckedPid = rPosCheckedPid;}
+  Int_t  GetNegCheckedPid() {return fNegCheckedPid;}
+  Int_t  GetPosCheckedPid() {return fPosCheckedPid;}
+
+  void   SetNegCheckedProb(Float_t rNegCheckedProb) {fNegCheckedProb = rNegCheckedProb;}
+  void   SetPosCheckedProb(Float_t rPosCheckedProb) {fPosCheckedProb = rPosCheckedProb;}
+  Float_t  GetNegCheckedProb() {return fNegCheckedProb;}
+  Float_t  GetPosCheckedProb() {return fPosCheckedProb;}
+
+  void   FilterByInvariantMass(Float_t minPt, Float_t maxPt, Int_t nPdgCode, Int_t pPdgCode);
 
 protected:
   TString              fTitle;
@@ -162,6 +185,15 @@ protected:
   Float_t              fMinPt;
   Float_t              fMaxPt;
 
+  Int_t                fNegCheckedPid;
+  Int_t                fPosCheckedPid;
+
+  Float_t              fNegCheckedProb;
+  Float_t              fPosCheckedProb;
+
+  Float_t              fMinInvariantMass;
+  Float_t              fMaxInvariantMass;
+
 private:
   void Init();
 
index 38a8c90989740eebce3d2ffc6ba22279647ab8ea..096c878d7a1315633caf99e80488500ac3c5b52c 100644 (file)
@@ -34,6 +34,8 @@ AliEveV0Editor::AliEveV0Editor(const TGWindow *p, Int_t width, Int_t height,
   fM(0),
   fInfoLabel0(0),
   fInfoLabel1(0),
+  fInfoLabelNegDaughter(0),
+  fInfoLabelPosDaughter(0),
   fXButton(0)
   // Initialize widget pointers to 0
 {
@@ -51,6 +53,16 @@ AliEveV0Editor::AliEveV0Editor(const TGWindow *p, Int_t width, Int_t height,
   AddFrame(fInfoLabel1, new TGLayoutHints(kLHintsLeft|kLHintsExpandX,
                                           8, 0, 2, 0));
 
+  fInfoLabelNegDaughter = new TGLabel(this);
+  fInfoLabelNegDaughter->SetTextJustify(kTextLeft);
+  AddFrame(fInfoLabelNegDaughter, new TGLayoutHints(kLHintsLeft|kLHintsExpandX,
+                                                   8, 0, 2, 0));
+
+  fInfoLabelPosDaughter = new TGLabel(this);
+  fInfoLabelPosDaughter->SetTextJustify(kTextLeft);
+  AddFrame(fInfoLabelPosDaughter, new TGLayoutHints(kLHintsLeft|kLHintsExpandX,
+                                                   8, 0, 2, 0));
+
   fXButton = new TGTextButton(this, "Detailed View");
   AddFrame(fXButton, new TGLayoutHints(kLHintsLeft|kLHintsExpandX, 1, 1, 0, 0));
   fXButton->Connect("Clicked()", "AliEveV0Editor", this, "DisplayDetailed()");
@@ -68,6 +80,9 @@ void AliEveV0Editor::SetModel(TObject* obj)
   // Set values of widgets
   fInfoLabel0->SetText(Form("Radius = %f, DCA = %f", fM->GetRadius(), fM->GetDaughterDCA()));
   fInfoLabel1->SetText(Form("Pt = %f", fM->GetPt()));
+  fInfoLabelNegDaughter->SetText(Form("Neg. Daughter Prob= %.2f for Pdg= %d", fM->GetNegMaxProbPid(), fM->GetNegMaxProbPdg()));
+  fInfoLabelPosDaughter->SetText(Form("Pos. Daughter Prob= %.2f for Pdg= %d", fM->GetPosMaxProbPid(), fM->GetPosMaxProbPdg()));
+
 }
 
 /******************************************************************************/
index 9c40a45ce8f6b63c988adf89112512f24ce73942..288465d4ea712c4ee9d0f6b0887cc29a4a5e1ef4 100644 (file)
@@ -41,6 +41,8 @@ protected:
 
   TGLabel   *fInfoLabel0; // label
   TGLabel   *fInfoLabel1; // label
+  TGLabel   *fInfoLabelNegDaughter; // label
+  TGLabel   *fInfoLabelPosDaughter; // label
 
   TGButton  *fXButton;
 
index 8f1a655587a3f22a80b69932d69c421c6c3e4f97..51d5cdfa1d03b11648b6c4e4eb9b2a4cd1c4c545 100644 (file)
@@ -21,7 +21,8 @@
 #include "TGNumberEntry.h"
 #include "TGColorSelect.h"
 #include "TGDoubleSlider.h"
-
+#include "TGComboBox.h"
+#include "TGLabel.h"
 
 //______________________________________________________________________________
 // GUI editor for AliEveV0List.
@@ -36,7 +37,14 @@ AliEveV0ListEditor::AliEveV0ListEditor(const TGWindow *p, Int_t width, Int_t hei
   fM(0),
   fMinMaxRCut(0),
   fMinMaxDaughterDCA(0),
-  fMinMaxPt(0)
+  fMinMaxPt(0),
+  fNegativeSpecies(0),
+  fPositiveSpecies(0),
+  fNegativeCheckMaxPidProbability(0),
+  fPositiveCheckMaxPidProbability(0),
+  fNegativeLevelPidProbability(0),
+  fPositiveLevelPidProbability(0),
+  fMinMaxInvariantMass(0)
 {
   // Constructor.
 
@@ -65,7 +73,7 @@ AliEveV0ListEditor::AliEveV0ListEditor(const TGWindow *p, Int_t width, Int_t hei
    fMinMaxDaughterDCA->Connect("ValueSet()", "AliEveV0ListEditor", this, "DoMinMaxDaughterDCA()");
    AddFrame(fMinMaxDaughterDCA, new TGLayoutHints(kLHintsTop, 1, 1, 1, 1));
 
-   fMinMaxPt = new TEveGDoubleValuator(this,"pT:", 130, 0);
+   fMinMaxPt = new TEveGDoubleValuator(this,"pT:", 80, 0);
    fMinMaxPt->SetNELength(5);
    fMinMaxPt->SetLabelWidth(74);
    fMinMaxPt->Build();
@@ -73,6 +81,65 @@ AliEveV0ListEditor::AliEveV0ListEditor(const TGWindow *p, Int_t width, Int_t hei
    fMinMaxPt->SetLimits(0, 20, TGNumberFormat::kNESRealOne);
    fMinMaxPt->Connect("ValueSet()", "AliEveV0ListEditor", this, "DoMinMaxPt()");
    AddFrame(fMinMaxPt, new TGLayoutHints(kLHintsTop, 1, 1, 1, 1));
+
+   TGHorizontalFrame* fNegFrame = new TGHorizontalFrame(this);
+   TGLabel* labNeg = new TGLabel(fNegFrame, "Neg:");
+   fNegFrame->AddFrame(labNeg, new TGLayoutHints(kLHintsLeft|kLHintsBottom, 1, 1, 1, 1));
+   fNegativeSpecies = new TGComboBox(fNegFrame);
+   fNegativeSpecies->AddEntry("e", 11);
+   fNegativeSpecies->AddEntry("mu", 13);
+   fNegativeSpecies->AddEntry("pi", 211);
+   fNegativeSpecies->AddEntry("K", 321);
+   fNegativeSpecies->AddEntry("p", 2212);
+   TGListBox* lbNeg = fNegativeSpecies->GetListBox();
+   lbNeg->Resize(lbNeg->GetWidth(), 2*18);
+   fNegativeSpecies->Resize(45, 20);
+   fNegativeSpecies->Connect("Selected(Int_t)", "AliEveV0ListEditor", this, "DoSelectNegPid(Int_t)");
+   fNegFrame->AddFrame(fNegativeSpecies, new TGLayoutHints(kLHintsTop, 1, 1, 1, 1));
+   AddFrame(fNegFrame);
+
+   fNegativeCheckMaxPidProbability = new TGCheckButton(fNegFrame, "Check");
+   fNegFrame->AddFrame(fNegativeCheckMaxPidProbability, new TGLayoutHints(kLHintsLeft, 0, 2, 1, 1));
+   fNegativeCheckMaxPidProbability->Connect("Toggled(Bool_t)", "AliEveV0ListEditor", this, "DoCheckNegPid()");
+
+   fNegativeLevelPidProbability = new TGNumberEntry(fNegFrame, 0.5, 3, -1, TGNumberFormat::kNESRealTwo, TGNumberFormat::kNEANonNegative,TGNumberFormat::kNELLimitMinMax, 0, 1);
+   fNegativeLevelPidProbability->Resize(50,20);
+   fNegativeLevelPidProbability->Connect("ValueSet(Long_t)", "AliEveV0ListEditor", this, "DoSelectNegProb()");
+   fNegFrame->AddFrame(fNegativeLevelPidProbability, new TGLayoutHints(kLHintsLeft|kLHintsExpandX, 1, 1, 1, 1));
+
+   TGHorizontalFrame* fPosFrame = new TGHorizontalFrame(this);
+   TGLabel* labPos = new TGLabel(fPosFrame, "Pos:");
+   fPosFrame->AddFrame(labPos, new TGLayoutHints(kLHintsLeft|kLHintsBottom, 1, 1, 1, 1));
+   fPositiveSpecies = new TGComboBox(fPosFrame);
+   fPositiveSpecies->AddEntry("e", 11);
+   fPositiveSpecies->AddEntry("mu", 13);
+   fPositiveSpecies->AddEntry("pi", 211);
+   fPositiveSpecies->AddEntry("K", 321);
+   fPositiveSpecies->AddEntry("p", 2212);
+   TGListBox* lbPos = fPositiveSpecies->GetListBox();
+   lbPos->Resize(lbPos->GetWidth(), 2*18);
+   fPositiveSpecies->Resize(45, 20);
+   fPositiveSpecies->Connect("Selected(Int_t)", "AliEveV0ListEditor", this, "DoSelectPosPid(Int_t)");
+   fPosFrame->AddFrame(fPositiveSpecies, new TGLayoutHints(kLHintsTop, 3, 1, 1, 1));
+   AddFrame(fPosFrame);
+
+   fPositiveCheckMaxPidProbability = new TGCheckButton(fPosFrame, "Check");
+   fPosFrame->AddFrame(fPositiveCheckMaxPidProbability, new TGLayoutHints(kLHintsLeft, 0, 2, 1, 1));
+   fPositiveCheckMaxPidProbability->Connect("Toggled(Bool_t)", "AliEveV0ListEditor", this, "DoCheckPosPid()");
+
+   fPositiveLevelPidProbability = new TGNumberEntry(fPosFrame, 0.5, 3, -1, TGNumberFormat::kNESRealTwo, TGNumberFormat::kNEANonNegative,TGNumberFormat::kNELLimitMinMax, 0, 1);
+   fPositiveLevelPidProbability->Resize(50,20);
+   fPositiveLevelPidProbability->Connect("ValueSet(Long_t)", "AliEveV0ListEditor", this, "DoSelectPosProb()");
+   fPosFrame->AddFrame(fPositiveLevelPidProbability, new TGLayoutHints(kLHintsLeft|kLHintsExpandX, 1, 1, 1, 1));
+
+   fMinMaxInvariantMass = new TEveGDoubleValuator(this,"Inv. Mass:", 80, 0);
+   fMinMaxInvariantMass->SetNELength(5);
+   fMinMaxInvariantMass->SetLabelWidth(74);
+   fMinMaxInvariantMass->Build();
+   fMinMaxInvariantMass->GetSlider()->SetWidth(200);
+   fMinMaxInvariantMass->SetLimits(0, 1.2, TGNumberFormat::kNESRealThree);
+   fMinMaxInvariantMass->Connect("ValueSet()", "AliEveV0ListEditor", this, "DoMinMaxInvariantMass()");
+   AddFrame(fMinMaxInvariantMass, new TGLayoutHints(kLHintsTop, 1, 1, 1, 1));
 }
 
 /******************************************************************************/
@@ -90,6 +157,7 @@ void AliEveV0ListEditor::SetModel(TObject* obj)
   fMinMaxRCut->SetValues(fM->fMinRCut, fM->fMaxRCut);
   fMinMaxDaughterDCA->SetValues(fM->fMinDaughterDCA, fM->fMaxDaughterDCA);
   fMinMaxPt->SetValues(fM->fMinPt, fM->fMaxPt);
+  fMinMaxInvariantMass->SetValues(fM->fMinInvariantMass, fM->fMaxInvariantMass);
 }
 
 /******************************************************************************/
@@ -119,3 +187,61 @@ void AliEveV0ListEditor::DoMinMaxPt()
 {
   fM->FilterByPt(fMinMaxPt->GetMin(), fMinMaxPt->GetMax());
 }
+
+void AliEveV0ListEditor::DoSelectNegPid(Int_t rNegPid)
+{
+  fM->SetNegCheckedPid(rNegPid);
+  Update();
+}
+
+void AliEveV0ListEditor::DoCheckNegPid()
+{
+  Int_t   lNegPid  = fM->GetNegCheckedPid();
+  Float_t lNegProb = fM->GetNegCheckedProb();
+  if (lNegPid) {
+    fM->FilterByCheckedPidMinProb(fNegativeCheckMaxPidProbability->IsOn(),0,lNegPid,lNegProb);
+    printf("Selection for negative daughter pid %d prob %.2f \n",lNegPid,lNegProb);
+    Update();
+  }
+}
+
+void AliEveV0ListEditor::DoSelectNegProb()
+{
+  Float_t rMinNegProb = (Float_t)fNegativeLevelPidProbability->GetNumber();
+  fM->SetNegCheckedProb(rMinNegProb);
+  Update();
+}
+
+void AliEveV0ListEditor::DoSelectPosPid(Int_t rPosPid)
+{
+  fM->SetPosCheckedPid(rPosPid);
+  Update();
+}
+
+void AliEveV0ListEditor::DoCheckPosPid()
+{
+  Int_t   lPosPid  = fM->GetPosCheckedPid();
+  Float_t lPosProb = fM->GetPosCheckedProb();
+  if (lPosPid) {
+    fM->FilterByCheckedPidMinProb(fPositiveCheckMaxPidProbability->IsOn(),1,lPosPid,lPosProb);
+    printf("Selection for positive daughter pid %d prob %.2f \n",lPosPid,lPosProb);
+    Update();
+  }
+}
+
+void AliEveV0ListEditor::DoSelectPosProb()
+{
+  Float_t rMinPosProb = (Float_t)fPositiveLevelPidProbability->GetNumber();
+  fM->SetPosCheckedProb(rMinPosProb);
+  Update();
+}
+
+void AliEveV0ListEditor::DoMinMaxInvariantMass()
+{
+  Int_t lNegPid = fM->GetNegCheckedPid();
+  Int_t lPosPid = fM->GetPosCheckedPid();
+  if( lNegPid && lPosPid)
+    fM->FilterByInvariantMass(fMinMaxInvariantMass->GetMin(), fMinMaxInvariantMass->GetMax(),lNegPid,lPosPid);
+  else 
+    fM->FilterByInvariantMass(fMinMaxInvariantMass->GetMin(), fMinMaxInvariantMass->GetMax(),211,-211);
+}
index 4c3644ab8c2ca2154014ee7f562d707e3589297f..e212fa9d1bb00ce8a59df1ad179f356bb1742e2c 100644 (file)
@@ -17,6 +17,7 @@ class TGCheckButton;
 class TGNumberEntry;
 class TGColorSelect;
 class TEveGDoubleValuator;
+class TGComboBox;
 
 class AliEveV0List;
 
@@ -37,6 +38,13 @@ public:
   void DoMinMaxRCut();
   void DoMinMaxDaughterDCA();
   void DoMinMaxPt();
+  void DoSelectNegPid(Int_t rNegPid);
+  void DoCheckNegPid();
+  void DoSelectNegProb();
+  void DoSelectPosPid(Int_t rPosPid);
+  void DoCheckPosPid();
+  void DoSelectPosProb();
+  void DoMinMaxInvariantMass();
 
 protected:
   AliEveV0List            *fM; // Model object.
@@ -46,6 +54,13 @@ protected:
   TEveGDoubleValuator* fMinMaxRCut;
   TEveGDoubleValuator* fMinMaxDaughterDCA;
   TEveGDoubleValuator* fMinMaxPt;
+  TGComboBox*          fNegativeSpecies;
+  TGComboBox*          fPositiveSpecies;
+  TGCheckButton*       fNegativeCheckMaxPidProbability;
+  TGCheckButton*       fPositiveCheckMaxPidProbability;
+  TGNumberEntry*       fNegativeLevelPidProbability;
+  TGNumberEntry*       fPositiveLevelPidProbability;
+  TEveGDoubleValuator* fMinMaxInvariantMass;
 
 private:
   AliEveV0ListEditor(const AliEveV0ListEditor&);            // Not implemented
index 414dcf118be73ddc4cda114991a4750bc9dbe55e..f743e69759217bac66874e678d9636b671dd6a4c 100644 (file)
@@ -61,6 +61,59 @@ AliEveV0* esd_make_v0(TEveTrackPropagator* rnrStyle, AliESDVertex* primVtx,
   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;
 }