]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - ANALYSIS/AliESDv0KineCuts.cxx
Adding anti-Lambda and anti-Xi
[u/mrichter/AliRoot.git] / ANALYSIS / AliESDv0KineCuts.cxx
index 75fb10a74681cd3917c48e9a81055fccea70a8a0..a59e640ed4160eb73f586c40112abfa37b8a7c64 100644 (file)
@@ -54,6 +54,8 @@ AliESDv0KineCuts::AliESDv0KineCuts() :
   , fGcutInvMass(0.05)\r
   , fK0cutChi2NDF(10)\r
   , fLcutChi2NDF(10)\r
+  , fUseExternalVertex(kFALSE)\r
+  , fDeleteVertex(kFALSE)\r
 {\r
   //\r
   // Default constructor\r
@@ -124,6 +126,8 @@ AliESDv0KineCuts::AliESDv0KineCuts(const AliESDv0KineCuts &ref):
   , fGcutInvMass(0.05)\r
   , fK0cutChi2NDF(10)\r
   , fLcutChi2NDF(10)\r
+  , fUseExternalVertex(kFALSE)\r
+  , fDeleteVertex(kFALSE)\r
 {\r
   //\r
   // Copy operator\r
@@ -156,7 +160,8 @@ void AliESDv0KineCuts::Copy(TObject &ref) const {
   target.fTPCchi2perCls = fTPCchi2perCls;\r
   target.fTPCclsRatio = fTPCclsRatio;\r
   target.fNoKinks = fNoKinks;\r
-\r
+  target.fUseExternalVertex = fUseExternalVertex;  //added december 2nd 2011\r
+  target.fDeleteVertex = fDeleteVertex;  //added december 2nd 2011\r
 \r
   // default gamma cuts values\r
   target.fGcutChi2NDF = fGcutChi2NDF;\r
@@ -180,7 +185,8 @@ void AliESDv0KineCuts::Copy(TObject &ref) const {
   \r
 }\r
 //____________________________________________________________________\r
-Bool_t const AliESDv0KineCuts::ProcessV0(AliESDv0* const v0, Int_t &pdgV0, Int_t &pdgP, Int_t &pdgN){\r
+Bool_t  AliESDv0KineCuts::ProcessV0(AliESDv0* const v0, Int_t &pdgV0, Int_t &pdgP, Int_t &pdgN) const \r
+{\r
   //\r
   // main user function\r
   //\r
@@ -215,7 +221,8 @@ Bool_t const AliESDv0KineCuts::ProcessV0(AliESDv0* const v0, Int_t &pdgV0, Int_t
   return kFALSE;\r
 }\r
 //____________________________________________________________________\r
-Bool_t const AliESDv0KineCuts::ProcessV0(AliESDv0* const v0, Int_t &pdgP, Int_t &pdgN){\r
+Bool_t  AliESDv0KineCuts::ProcessV0(AliESDv0* const v0, Int_t &pdgP, Int_t &pdgN) const \r
+{\r
   //\r
   // main user function, simplified if the V0 identity is not necessary\r
   //\r
@@ -231,7 +238,8 @@ Bool_t const AliESDv0KineCuts::ProcessV0(AliESDv0* const v0, Int_t &pdgP, Int_t
 \r
 }\r
 //____________________________________________________________________\r
-Int_t  const AliESDv0KineCuts::PreselectV0(AliESDv0* const v0){\r
+Int_t AliESDv0KineCuts::PreselectV0(AliESDv0* const v0) const \r
+{\r
   //\r
   // Make a preselection (exclusive) of the V0 cadidates based on\r
   // Armenteros plot\r
@@ -302,7 +310,8 @@ Int_t  const AliESDv0KineCuts::PreselectV0(AliESDv0* const v0){
   return kUndef;\r
 }\r
 //____________________________________________________________________\r
-Bool_t const AliESDv0KineCuts::SingleTrackCuts(AliESDv0 * const v0){\r
+Bool_t  AliESDv0KineCuts::SingleTrackCuts(AliESDv0 * const v0) const \r
+{\r
   //\r
   // apply single track cuts\r
   // correct sign not relevat here\r
@@ -346,7 +355,8 @@ Bool_t const AliESDv0KineCuts::SingleTrackCuts(AliESDv0 * const v0){
   return kTRUE;\r
 }\r
 //____________________________________________________________________\r
-Bool_t  const AliESDv0KineCuts::CaseGamma(AliESDv0* const v0, Int_t &pdgV0, Int_t &pdgP, Int_t &pdgN){\r
+Bool_t AliESDv0KineCuts::CaseGamma(AliESDv0* const v0, Int_t &pdgV0, Int_t &pdgP, Int_t &pdgN) const \r
+{\r
   //\r
   // process the gamma conversion candidate\r
   //\r
@@ -433,7 +443,7 @@ Bool_t  const AliESDv0KineCuts::CaseGamma(AliESDv0* const v0, Int_t &pdgV0, Int_
   return kTRUE;\r
 }\r
 //____________________________________________________________________\r
-Bool_t  const AliESDv0KineCuts::CaseK0(AliESDv0* const v0, Int_t &pdgV0, Int_t &pdgP, Int_t &pdgN){\r
+Bool_t  AliESDv0KineCuts::CaseK0(AliESDv0* const v0, Int_t &pdgV0, Int_t &pdgP, Int_t &pdgN) const {\r
   //\r
   // process the K0 candidate\r
   //\r
@@ -510,7 +520,7 @@ Bool_t  const AliESDv0KineCuts::CaseK0(AliESDv0* const v0, Int_t &pdgV0, Int_t &
   return kTRUE;\r
 }\r
 //____________________________________________________________________\r
-Bool_t  const AliESDv0KineCuts::CaseLambda(AliESDv0* const v0, Int_t &pdgV0, Int_t &pdgP, Int_t &pdgN, Int_t id){\r
+Bool_t  AliESDv0KineCuts::CaseLambda(AliESDv0* const v0, Int_t &pdgV0, Int_t &pdgP, Int_t &pdgN, Int_t id) const {\r
   //\r
   // process teh Lambda and Anti-Lambda candidate\r
   //\r
@@ -653,7 +663,8 @@ Bool_t  const AliESDv0KineCuts::CaseLambda(AliESDv0* const v0, Int_t &pdgV0, Int
   return kTRUE;\r
 }\r
 //____________________________________________________________________\r
-Bool_t const AliESDv0KineCuts::V0CutsCommon(AliESDv0 * const v0){\r
+Bool_t  AliESDv0KineCuts::V0CutsCommon(const AliESDv0 * const v0) const \r
+{\r
   //\r
   // V0 cuts common to all V0s\r
   //\r
@@ -673,7 +684,8 @@ Bool_t const AliESDv0KineCuts::V0CutsCommon(AliESDv0 * const v0){
   return kTRUE;\r
 }\r
 //____________________________________________________________________\r
-void const AliESDv0KineCuts::Armenteros(AliESDv0* const v0, Float_t val[2]){\r
+void AliESDv0KineCuts::Armenteros(AliESDv0* const v0, Float_t val[2]) const \r
+{\r
   //\r
   // computes the Armenteros variables for given V0\r
   // fills the histogram\r
@@ -709,7 +721,8 @@ void const AliESDv0KineCuts::Armenteros(AliESDv0* const v0, Float_t val[2]){
   val[1] = qt;\r
 }\r
 //____________________________________________________________________\r
-Bool_t const AliESDv0KineCuts::CheckSigns(AliESDv0* const v0){\r
+Bool_t AliESDv0KineCuts::CheckSigns(AliESDv0* const v0) const \r
+{\r
   //\r
   // check wheter the sign was correctly applied to \r
   // V0 daughter tracks\r
@@ -739,7 +752,8 @@ Bool_t const AliESDv0KineCuts::CheckSigns(AliESDv0* const v0){
   return correct;\r
 }\r
 //________________________________________________________________\r
-Double_t const AliESDv0KineCuts::PsiPair(AliESDv0* const v0) {\r
+Double_t AliESDv0KineCuts::PsiPair(AliESDv0* const v0) const \r
+{\r
   //\r
   // Angle between daughter momentum plane and plane \r
   // \r
@@ -810,7 +824,8 @@ Double_t const AliESDv0KineCuts::PsiPair(AliESDv0* const v0) {
   return psiPair; \r
 }\r
 //___________________________________________________________________\r
-Bool_t const AliESDv0KineCuts::GetConvPosXY(AliESDtrack * const ptrack, AliESDtrack * const ntrack, Double_t convpos[2]){\r
+Bool_t  AliESDv0KineCuts::GetConvPosXY(AliESDtrack * const ptrack, AliESDtrack * const ntrack, Double_t convpos[2]) const\r
+{\r
   //\r
   // recalculate the gamma conversion XY postition\r
   //\r
@@ -842,7 +857,8 @@ Bool_t const AliESDv0KineCuts::GetConvPosXY(AliESDtrack * const ptrack, AliESDtr
   return 1;\r
 }\r
 //___________________________________________________________________\r
-Bool_t const AliESDv0KineCuts::GetHelixCenter(AliESDtrack * const track, Double_t b,Int_t charge, Double_t center[2]){\r
+Bool_t  AliESDv0KineCuts::GetHelixCenter(AliESDtrack * const track, Double_t b,Int_t charge, Double_t center[2]) const\r
+{\r
   //\r
   // computes the center of the track helix\r
   //\r
@@ -870,18 +886,20 @@ Bool_t const AliESDv0KineCuts::GetHelixCenter(AliESDtrack * const track, Double_
       xpoint = - xpoint;\r
       ypoint = - ypoint;\r
     }\r
-\r
+    /* avoid self assignment\r
     if(charge < 0){\r
       xpoint =  xpoint;\r
       ypoint =  ypoint;\r
     }\r
+    */\r
   }\r
   if(b>0){\r
+    /* avoid self assignment\r
     if(charge > 0){\r
       xpoint =  xpoint;\r
       ypoint =  ypoint;\r
     }\r
-\r
+    */\r
     if(charge < 0){\r
       xpoint = - xpoint;\r
       ypoint = - ypoint;\r
@@ -893,7 +911,8 @@ Bool_t const AliESDv0KineCuts::GetHelixCenter(AliESDtrack * const track, Double_
   return 1;\r
 }\r
 //___________________________________________________________________\r
-AliKFParticle *AliESDv0KineCuts::CreateMotherParticle(const AliVTrack* const pdaughter, const AliVTrack* const ndaughter, Int_t pspec, Int_t nspec){\r
+AliKFParticle *AliESDv0KineCuts::CreateMotherParticle(const AliVTrack* const pdaughter, const AliVTrack* const ndaughter, Int_t pspec, Int_t nspec) const\r
+{\r
   //\r
   // Creates a mother particle\r
   //\r
@@ -903,7 +922,7 @@ AliKFParticle *AliESDv0KineCuts::CreateMotherParticle(const AliVTrack* const pda
   \r
   // Create the mother particle \r
   AliKFParticle *m = new AliKFParticle(pkfdaughter, nkfdaughter);\r
-  // DEBUG - testing\r
+  m->SetField(fEvent->GetMagneticField());\r
   if(TMath::Abs(kElectron) == pspec && TMath::Abs(kElectron) == nspec) m->SetMassConstraint(0, 0.001);\r
   else if(TMath::Abs(kPiPlus) == pspec && TMath::Abs(kPiPlus) == nspec) m->SetMassConstraint(TDatabasePDG::Instance()->GetParticle(kK0Short)->Mass(), 0.);\r
   else if(TMath::Abs(kProton) == pspec && TMath::Abs(kPiPlus) == nspec) m->SetMassConstraint(TDatabasePDG::Instance()->GetParticle(kLambda0)->Mass(), 0.);\r
@@ -935,6 +954,17 @@ void  AliESDv0KineCuts::SetEvent(AliESDEvent* const event){
     AliErrorClass("Invalid input event pointer");\r
     return;\r
   }\r
+if (fUseExternalVertex) return;\r
+else{\r
+       if(fPrimaryVertex && fDeleteVertex){\r
+               delete  fPrimaryVertex;\r
+               fPrimaryVertex=0x0;\r
+               }\r
+       fPrimaryVertex = new AliKFVertex(*(fEvent->GetPrimaryVertex()));\r
+       fDeleteVertex=kTRUE;\r
+       }\r
+\r
+\r
 \r
 }\r
 //____________________________________________________________________\r
@@ -942,20 +972,49 @@ void  AliESDv0KineCuts::SetEvent(AliVEvent* const event){
   //\r
   // direct setter of ESD event\r
   //\r
-  if(event)\r
-    fEvent = static_cast<AliESDEvent*>(event);\r
+\r
+  fEvent = dynamic_cast<AliESDEvent*>(event);\r
   if(!fEvent){\r
     AliErrorClass("Invalid input event pointer");\r
     return;\r
   }\r
+  \r
+  if (fUseExternalVertex) return;\r
+  else{\r
+    if(fPrimaryVertex && fDeleteVertex){\r
+      delete   fPrimaryVertex;\r
+      fPrimaryVertex=0x0;\r
+      }\r
+    fPrimaryVertex = new AliKFVertex(*(fEvent->GetPrimaryVertex()));\r
+    fDeleteVertex=kTRUE;\r
+  }\r
+}\r
+\r
 \r
+//________________________________________________________________\r
+void    AliESDv0KineCuts::UseExternalVertex(Bool_t use_external){\r
+       //\r
+       // Reenable primary Vertex from ESD event\r
+       //\r
+       if (use_external) fUseExternalVertex =kTRUE;\r
+       else fUseExternalVertex =kFALSE;\r
 }\r
+\r
+\r
+\r
+\r
 //________________________________________________________________\r
 void AliESDv0KineCuts::SetPrimaryVertex(AliKFVertex* const v){\r
   //\r
   // set the primary vertex of the event\r
   //\r
-  fPrimaryVertex = v;\r
+       if(fPrimaryVertex && fDeleteVertex){   \r
+               delete  fPrimaryVertex;\r
+               fPrimaryVertex =0x0;\r
+               fDeleteVertex = kFALSE;\r
+               }  \r
+  fUseExternalVertex=kTRUE; \r
+  fPrimaryVertex = v; // set primary Vertex\r
   if(!fPrimaryVertex){\r
     AliErrorClass("Failed to initialize the primary vertex");\r
     return;\r
@@ -980,8 +1039,10 @@ void AliESDv0KineCuts::SetMode(Int_t mode, Int_t type){
   switch(mode){\r
   case kPurity:\r
     fMode = kPurity;  // used to obtain highest purity possible - the efficiency may be low\r
+    break;\r
   case kEffGamma:\r
     fMode = kEffGamma; // used to obtain highes efficiency possible - the purity may be worse\r
+    break;\r
   default:\r
     AliError("V0 selection mode not recognozed, setting 'kPurity'");\r
     fMode = kPurity;\r
@@ -990,8 +1051,10 @@ void AliESDv0KineCuts::SetMode(Int_t mode, Int_t type){
   switch(type){\r
   case kPP:\r
     fType = kPP;  // cuts optimized for low multiplicity \r
+    break;\r
   case kPbPb:\r
     fType = kPbPb;  // cuts optimized for high multiplicity\r
+    break;\r
   }\r
   \r
   // setup the cut values for selected mode & type\r