KStart cut added. Memory leaks corrected
authorskowron <skowron@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 31 Oct 2002 13:42:05 +0000 (13:42 +0000)
committerskowron <skowron@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 31 Oct 2002 13:42:05 +0000 (13:42 +0000)
HBTAN/AliHBTPairCut.cxx
HBTAN/AliHBTPairCut.h

index 3fd824c5086cb27ccd7504066639506029a64dfc..508bf3edfa1518427a7251767e54806573af673a 100644 (file)
@@ -1,26 +1,24 @@
 #include "AliHBTPairCut.h"
 #include "AliHBTPair.h"
-#include <Riostream.h>
-
 
 ClassImp(AliHBTPairCut)
 const Int_t AliHBTPairCut::fkgMaxCuts = 50;
 /**********************************************************/
 
-AliHBTPairCut::AliHBTPairCut()
+AliHBTPairCut::AliHBTPairCut():
+  fNCuts(0)
 {
 //constructor
   fFirstPartCut = new AliHBTEmptyParticleCut(); //empty cuts
   fSecondPartCut= new AliHBTEmptyParticleCut(); //empty cuts
     
   fCuts = new AliHbtBasePairCut*[fkgMaxCuts];
-  fNCuts = 0;
 }
 /**********************************************************/
 
 AliHBTPairCut::AliHBTPairCut(const AliHBTPairCut& in)
 {
- //copy constructor
+//copy constructor
  fCuts = new AliHbtBasePairCut*[fkgMaxCuts];
  fNCuts = in.fNCuts;
 
@@ -37,6 +35,11 @@ AliHBTPairCut::AliHBTPairCut(const AliHBTPairCut& in)
 AliHBTPairCut::~AliHBTPairCut()
 {
 //destructor
+  if (fFirstPartCut != fSecondPartCut)
+   {
+     delete fSecondPartCut;
+   }
+  delete fFirstPartCut;
   for (Int_t i = 0;i<fNCuts;i++)
    {
      delete fCuts[i];
@@ -68,17 +71,16 @@ Bool_t AliHBTPairCut::Pass(AliHBTPair* pair)
 //if NOT   returns    TRUE
  if(!pair) 
   {
-    Warning("Pass()","No Pasaran! We never accept NULL pointers");
+    Warning("Pass","No Pasaran! We never accept NULL pointers");
     return kTRUE;
   }
  
  //check particle's cuts
- if( (   fFirstPartCut->Pass( pair->Particle1() )   ) || 
-     (   fSecondPartCut->Pass(pair->Particle2() )   )   )
+ if( ( fFirstPartCut->Pass( pair->Particle1()) ) || 
+     ( fSecondPartCut->Pass(pair->Particle2()) )   )
    {  
      return kTRUE;
    }
-// cout<<"passed "<<pair->Particle1()->GetPdgCode()<<"  "<<pair->Particle2()->GetPdgCode()<<endl;
  return PassPairProp(pair);
 }
 /**********************************************************/
@@ -93,7 +95,6 @@ Bool_t AliHBTPairCut::PassPairProp(AliHBTPair* pair)
    {
     if ( (fCuts[i]->Pass(pair)) ) return kTRUE; //if one of the cuts reject, then reject
    }
-// cout<<"passed "<<pair->Particle1()->GetPdgCode()<<"  "<<pair->Particle2()->GetPdgCode()<<endl;
  return kFALSE;
 }
 /**********************************************************/
@@ -179,6 +180,14 @@ void AliHBTPairCut::SetKtRange(Double_t min, Double_t max)
 }
 /**********************************************************/
 
+void AliHBTPairCut::SetKStarRange(Double_t min, Double_t max)
+{
+  AliHBTKStarCut* cut= (AliHBTKStarCut*)FindCut(kHbtPairCutPropKStar);
+  if(cut) cut->SetRange(min,max);
+  else fCuts[fNCuts++] = new AliHBTKStarCut(min,max);
+}
+/**********************************************************/
+
 AliHbtBasePairCut* AliHBTPairCut::FindCut(AliHBTPairCutProperty property)
 {
  for (Int_t i = 0;i<fNCuts;i++)
@@ -194,7 +203,7 @@ AliHbtBasePairCut* AliHBTPairCut::FindCut(AliHBTPairCutProperty property)
 
 void AliHBTPairCut::Streamer(TBuffer &b)
 {
-     // Stream all objects in the array to or from the I/O buffer.
+  // Stream all objects in the array to or from the I/O buffer.
 
    UInt_t R__s, R__c;
    if (b.IsReading()) 
@@ -202,6 +211,10 @@ void AliHBTPairCut::Streamer(TBuffer &b)
       Version_t v = b.ReadVersion(&R__s, &R__c);
       if (v > -1)
        {
+        delete fFirstPartCut;
+        delete fSecondPartCut;
+        fFirstPartCut = 0x0;
+        fSecondPartCut = 0x0;
         TObject::Streamer(b);
         b >> fFirstPartCut;
         b >> fSecondPartCut;
index d434b6c6861e0268cd680daad96870aed1831d1c..11df7c7f96d939766b7545a53535f5d50d616065 100644 (file)
@@ -16,6 +16,7 @@ enum AliHBTPairCutProperty
  {
   kHbtPairCutPropQInv, //Q invariant
   kHbtPairCutPropKt,
+  kHbtPairCutPropKStar,
   kHbtPairCutPropQSideCMSLC,
   kHbtPairCutPropQOutCMSLC,
   kHbtPairCutPropQLongCMSLC,
@@ -42,6 +43,7 @@ class AliHBTPairCut: public TObject
     
     void SetQInvRange(Double_t min, Double_t max);
     void SetKtRange(Double_t min, Double_t max);
+    void SetKStarRange(Double_t min, Double_t max);
     void SetQOutCMSLRange(Double_t min, Double_t max);
     void SetQSideCMSLRange(Double_t min, Double_t max);
     void SetQLongCMSLRange(Double_t min, Double_t max);
@@ -50,8 +52,8 @@ class AliHBTPairCut: public TObject
     AliHBTParticleCut* GetSecondPartCut() const {return fSecondPartCut;}
     
   protected:
-    AliHBTParticleCut*      fFirstPartCut;
-    AliHBTParticleCut*      fSecondPartCut;
+    AliHBTParticleCut*      fFirstPartCut;//cut on first particle in pair
+    AliHBTParticleCut*      fSecondPartCut;//cut on second particle in pair
 
     AliHbtBasePairCut** fCuts; //!
     Int_t fNCuts;
@@ -163,6 +165,17 @@ class AliHBTKtCut: public AliHbtBasePairCut
      ClassDef(AliHBTKtCut,1)
  };
 
+class AliHBTKStarCut: public AliHbtBasePairCut
+ {
+   public:
+    AliHBTKStarCut(Double_t min = 0.0, Double_t max = 0.0):AliHbtBasePairCut(min,max,kHbtPairCutPropKStar){}
+    virtual ~AliHBTKStarCut(){}
+   protected:
+    virtual Double_t  GetValue(AliHBTPair* pair){return pair->GetKStar();}
+   private:
+   public:
+     ClassDef(AliHBTKStarCut,1)
+ };
 
 class AliHBTQSideCMSLCCut: public AliHbtBasePairCut
  {