Since there are some cuts which require to take informations from the event itself
authorpulvir <pulvir@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 19 Feb 2010 18:30:09 +0000 (18:30 +0000)
committerpulvir <pulvir@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 19 Feb 2010 18:30:09 +0000 (18:30 +0000)
(event if they then cut on tracks or pairs), then I added a pointer to current AliRsnEvent
which is assumed to be set up on it during the "LoopPair" method which makes the computations.

This required to propagate the corresponding setter in all classes which manage these cuts.

Moreover, I commented the "OpenFile" statement in AliRsnAnalysisSE, which seems to cause trouble
when running on PROOF clusters.

For ME analysis objects, I fixed a compilation error which appeared to me.

In AliRsnPair, I replaced static with dynamic casts to be more sure of how the histos are filled.

14 files changed:
PWG2/RESONANCES/AliRsnAnalysisME.cxx
PWG2/RESONANCES/AliRsnAnalysisSE.cxx
PWG2/RESONANCES/AliRsnCut.cxx
PWG2/RESONANCES/AliRsnCut.h
PWG2/RESONANCES/AliRsnCutMgr.cxx
PWG2/RESONANCES/AliRsnCutMgr.h
PWG2/RESONANCES/AliRsnCutSet.cxx
PWG2/RESONANCES/AliRsnCutSet.h
PWG2/RESONANCES/AliRsnCutStd.cxx
PWG2/RESONANCES/AliRsnCutStd.h
PWG2/RESONANCES/AliRsnDaughter.h
PWG2/RESONANCES/AliRsnPair.cxx
PWG2/RESONANCES/AliRsnPair.h
PWG2/RESONANCES/AliRsnVAnalysisTaskME.cxx

index d49d106..eef1d4f 100644 (file)
@@ -125,7 +125,6 @@ void AliRsnAnalysisME::DoMixing(AliVEvent* ev)
       if (i > 0)
         DoESDMixing(esdEvent[0], esdEvent[i]);
     }
-    delete [] esdEvent;
   } else if (fAODEvent) {
     AliAODEvent **aodEvent = new AliAODEvent*[nEvents];
     for (Int_t i = 0; i < nEvents; i++) {
@@ -137,7 +136,6 @@ void AliRsnAnalysisME::DoMixing(AliVEvent* ev)
       if (i > 0)
         DoAODMixing(aodEvent[0], aodEvent[i]);
     }
-    delete [] aodEvent;
   }
 
 }
index 2959484..54aebc2 100644 (file)
@@ -69,7 +69,7 @@ void AliRsnAnalysisSE::RsnUserCreateOutputObjects()
   Int_t i;
   for (i = 1; i < kMaxNumberOfOutputs + 1; i++)
   {
-    if (i <= fNumberOfOutputs + 1) OpenFile(i);
+    // this line makes trouble with PROOF ---> if (i <= fNumberOfOutputs + 1) OpenFile(i);
     fOutList[i] = new TList();
     fOutList[i]->SetOwner();
   }
index f1d2a38..aae6fa6 100644 (file)
@@ -34,7 +34,8 @@ AliRsnCut::AliRsnCut() :
     fCutValueI(0),
     fCutValueU(0),
     fCutValueD(0.0),
-    fCutResult(kTRUE)
+    fCutResult(kTRUE),
+    fEvent(0x0)
 {
 //
 // Default constructor.
@@ -42,6 +43,27 @@ AliRsnCut::AliRsnCut() :
 }
 
 //_________________________________________________________________________________________________
+AliRsnCut::AliRsnCut(const AliRsnCut& copy) :
+    TNamed(copy),
+    fVarType(copy.fVarType),
+    fMinI(copy.fMinI),
+    fMaxI(copy.fMaxI),
+    fMinU(copy.fMinU),
+    fMaxU(copy.fMaxU),
+    fMinD(copy.fMinD),
+    fMaxD(copy.fMaxD),
+    fCutValueI(copy.fCutValueI),
+    fCutValueU(copy.fCutValueU),
+    fCutValueD(copy.fCutValueD),
+    fCutResult(copy.fCutResult),
+    fEvent(copy.fEvent)
+{
+//
+// Copy constructor.
+//
+}
+
+//_________________________________________________________________________________________________
 AliRsnCut::AliRsnCut
 (const char *name, Int_t min, Int_t max) :
     TNamed(name, ""),
@@ -55,7 +77,8 @@ AliRsnCut::AliRsnCut
     fCutValueI(0),
     fCutValueU(0),
     fCutValueD(0.0),
-    fCutResult(kTRUE)
+    fCutResult(kTRUE),
+    fEvent(0x0)
 {
 //
 // Constructor.
@@ -80,7 +103,8 @@ AliRsnCut::AliRsnCut
     fCutValueI(0),
     fCutValueU(0),
     fCutValueD(0.0),
-    fCutResult(kTRUE)
+    fCutResult(kTRUE),
+    fEvent(0x0)
 {
 //
 // Constructor.
@@ -105,7 +129,8 @@ AliRsnCut::AliRsnCut
     fCutValueI(0),
     fCutValueU(0),
     fCutValueD(0.0),
-    fCutResult(kTRUE)
+    fCutResult(kTRUE),
+    fEvent(0x0)
 {
 //
 // Constructor.
@@ -117,6 +142,30 @@ AliRsnCut::AliRsnCut
 }
 
 //_________________________________________________________________________________________________
+AliRsnCut& AliRsnCut::operator=(const AliRsnCut& copy)
+{
+//
+// Assignment operator
+// don't duplicate memory occupancy for pointer
+//
+
+  fVarType   = copy.fVarType;
+  fMinI      = copy.fMinI;
+  fMaxI      = copy.fMaxI;
+  fMinD      = copy.fMinD;
+  fMaxD      = copy.fMaxD;
+  fMinU      = copy.fMinU;
+  fMaxU      = copy.fMaxU;
+  fCutValueI = copy.fCutValueI;
+  fCutValueD = copy.fCutValueD;
+  fCutValueU = copy.fCutValueU;
+  fCutResult = copy.fCutResult;
+  fEvent     = copy.fEvent;
+
+  return (*this);
+}
+
+//_________________________________________________________________________________________________
 Bool_t AliRsnCut::IsSelected(ETarget /*tgt*/, AliRsnDaughter* /*track*/)
 {
 //
index 215ae81..3a01333 100644 (file)
@@ -45,6 +45,8 @@ class AliRsnCut : public TNamed
     };
 
     AliRsnCut();
+    AliRsnCut(const AliRsnCut& copy);
+    AliRsnCut& operator=(const AliRsnCut& copy);
     AliRsnCut(const char *name, Int_t    min, Int_t    max = 0);
     AliRsnCut(const char *name, ULong_t  min, ULong_t  max = 0);
     AliRsnCut(const char *name, Double_t min, Double_t max = 0);
@@ -58,6 +60,8 @@ class AliRsnCut : public TNamed
     void             SetValue(ULong_t value)  {fMinU = value; fVarType = kULong;}
     void             SetValue(Double_t value) {fMinD = value; fVarType = kDouble;}
 
+    void             SetEvent(AliRsnEvent *event) {fEvent = event;}
+
     virtual Bool_t   IsSelected(ETarget tgt, AliRsnDaughter *daughter);
     virtual Bool_t   IsSelected(ETarget tgt, AliRsnPairParticle *pair);
     virtual Bool_t   IsSelected(ETarget tgt, AliRsnEvent *event);
@@ -82,6 +86,8 @@ class AliRsnCut : public TNamed
     Double_t  fCutValueD;  // cut value
     Bool_t    fCutResult;  // tells if the cut is passed or not
 
+    AliRsnEvent *fEvent;   //! pointer to current event (can be needed sometimes)
+
     ClassDef(AliRsnCut, 1)
 };
 
index 6e4dc88..879b150 100644 (file)
@@ -100,3 +100,18 @@ Bool_t AliRsnCutMgr::IsSelected(AliRsnCut::ETarget type, TObject*const obj)
 
   return kTRUE;
 }
+
+//_____________________________________________________________________________
+void AliRsnCutMgr::SetEvent(AliRsnEvent *event)
+{
+//
+// Sets reference event in all cut sets
+//
+
+  Int_t i;
+  for (i = 0; i < AliRsnCut::kLastCutTarget; i++)
+  {
+    if (fCutSets[i]) fCutSets[i]->SetEvent(event);
+  }
+}
+
index 42989b5..a9f77a9 100644 (file)
@@ -29,6 +29,7 @@ class AliRsnCutMgr : public TNamed
     void          SetCutSet(AliRsnCut::ETarget type, AliRsnCutSet*const cutset);
     AliRsnCutSet* GetCutSet(AliRsnCut::ETarget type) const {return fCutSets[type];}
     Bool_t        IsSelected(AliRsnCut::ETarget type, TObject *const obj);
+    void          SetEvent(AliRsnEvent *event);
 
   private:
 
index 3235e39..798059a 100644 (file)
@@ -98,7 +98,7 @@ void AliRsnCutSet::AddCut(AliRsnCut *cut)
   fCuts.Add(cut);
   fNumOfCuts++;
 
-  if (fBoolValues) delete fBoolValues;
+  if (fBoolValues) delete [] fBoolValues;
 
   fBoolValues = new Bool_t[fNumOfCuts];
   for (i = 0; i < fNumOfCuts; i++) {
@@ -326,8 +326,8 @@ void AliRsnCutSet::PrintSetInfo()
   Int_t i;
 
   AliInfo("========== Rsn Cut Set info ==============");
-  AliInfo(Form("Sheme : %s",fCutScheme.Data()));
-  AliInfo(Form("Sheme : %s",fCutSchemeIndexed.Data()));
+  AliInfo(Form("Scheme : %s",fCutScheme.Data()));
+  AliInfo(Form("Scheme : %s",fCutSchemeIndexed.Data()));
   AliInfo(Form("Num of Cuts: %d", fCuts.GetEntriesFast()));
   AliInfo("====== Cuts ======");
   AliRsnCut *cut;
@@ -358,3 +358,18 @@ TString AliRsnCutSet::GetCutSchemeIndexed()
   AliDebug(AliLog::kDebug,"->");
   return str;
 }
+
+//_____________________________________________________________________________
+void AliRsnCutSet::SetEvent(AliRsnEvent *event)
+{
+//
+// Set the reference event to all contained cuts
+//
+
+  Int_t i;
+  AliRsnCut *cut;
+  for (i = 0; i < fCuts.GetEntriesFast(); i++) {
+    cut = (AliRsnCut*) fCuts.At(i);
+    if (cut) cut->SetEvent(event);
+  }
+}
index c5d7203..a663716 100644 (file)
@@ -58,6 +58,8 @@ class AliRsnCutSet : public TNamed
 
     TObjArray *GetCuts() { return &fCuts; }
 
+    void       SetEvent(AliRsnEvent *event);
+
   private:
 
     TObjArray     fCuts;                  // array of cuts
index d782791..d51d865 100644 (file)
@@ -279,6 +279,10 @@ Bool_t AliRsnCutStd::IsSelected(ETarget tgt, AliRsnDaughter * const track)
     return OkValue();
   case kRealisticPID:
     fCutValueI = (Int_t)track->RealisticPID();
+    return OkValue();
+  case kPairIndex:
+    fCutValueI = track->PairIndex();
+    return OkValue();
   case kTruePIDMatch:
     return (track->PerfectPID() == track->RequiredPID());
   case kRealisticPIDMatch:
index 244deb7..6c4e645 100644 (file)
@@ -41,6 +41,7 @@ class AliRsnCutStd : public AliRsnCut
       kTruePID,
       kRequiredPID,
       kRealisticPID,
+      kPairIndex,
       // cut without reference values
       kCharge,
       kSameLabel,
index 5c10f51..030a1f6 100644 (file)
@@ -106,6 +106,8 @@ class AliRsnDaughter : public TObject
     void    SetGood() {fOK = kTRUE;}
     void    SetBad() {fOK = kFALSE;}
     Bool_t  IsOK() const { return fOK; }
+    Int_t   PairIndex() {return fPairIndex;}
+    void    SetPairIndex(Int_t value) {fPairIndex = value;}
 
     // Kinkness
     Char_t  KinkIndex() const {return fKinkIndex;}
@@ -148,6 +150,7 @@ class AliRsnDaughter : public TObject
     TParticle     *fParticle;               // pointer to (eventual) MC information
     Int_t          fMotherPDG;              // PDG code of mother (if any)
     ULong_t        fStatus;                 // track status (if available)
+    Int_t          fPairIndex;              // to know if it is member #1 or #2 of the pair (cfr. to PairDef)
 
     Double_t       fDr;                     // transverse impact parameter
     Double_t       fDz;                     // longitudinal impact parameter
index 93addac..372ed49 100644 (file)
@@ -47,6 +47,51 @@ AliRsnPair::AliRsnPair(EPairType type, AliRsnPairDef *def) :
   AliDebug(AliLog::kDebug+2,"->");
   SetUp(type);
 }
+
+//_____________________________________________________________________________
+AliRsnPair::AliRsnPair(const AliRsnPair& copy) :
+    TObject(),
+    fOnlyTrue(copy.fOnlyTrue),
+    fIsMixed(copy.fIsMixed),
+    fPairType(copy.fPairType),
+    fPIDMethod(copy.fPIDMethod),
+    fPairDef(copy.fPairDef),
+    fCutMgr(copy.fCutMgr),
+    fFunctions(copy.fFunctions),
+    fTrack1(copy.fTrack1),
+    fTrack2(copy.fTrack2),
+    fPairParticle(copy.fPairParticle)
+{
+//
+// Default constructor
+//
+  AliDebug(AliLog::kDebug+2,"<-");
+  AliDebug(AliLog::kDebug+2,"->");
+}
+
+//_____________________________________________________________________________
+AliRsnPair& AliRsnPair::operator=(const AliRsnPair& copy)
+{
+  fOnlyTrue = copy.fOnlyTrue;
+  fIsMixed = copy.fIsMixed;
+  fPairType = copy.fPairType;
+  fPIDMethod = copy.fPIDMethod;
+  fPairDef = copy.fPairDef;
+  fCutMgr = copy.fCutMgr;
+  fTrack1 = copy.fTrack1;
+  fTrack2 = copy.fTrack2;
+  fPairParticle = copy.fPairParticle;
+
+  Int_t i, n = copy.fFunctions.GetEntries();
+  for (i = 0; i < n; i++)
+  {
+    AliRsnFunction *fcn = (AliRsnFunction*)copy.fFunctions[i];
+    if (fcn) AddFunction(fcn);
+  }
+
+  return (*this);
+}
+
 //_____________________________________________________________________________
 AliRsnPair::~AliRsnPair()
 {
index 7f16c0d..71f04fb 100644 (file)
@@ -38,6 +38,8 @@ class AliRsnPair : public TObject
     };
 
     AliRsnPair(EPairType type = kRealisticPID, AliRsnPairDef *def = 0);
+    AliRsnPair(const AliRsnPair &copy);
+    AliRsnPair& operator=(const AliRsnPair&);
     ~AliRsnPair();
 
     void    SetOnlyTrue(Bool_t onlyTrue = kTRUE) {fOnlyTrue = onlyTrue;}
@@ -62,11 +64,6 @@ class AliRsnPair : public TObject
 
   private:
 
-    AliRsnPair(const AliRsnPair &copy) : TObject(copy),
-        fOnlyTrue(kFALSE),fIsMixed(kFALSE),fPairType(kPairTypes),fPIDMethod(AliRsnDaughter::kRealistic),
-        fPairDef(0x0),fCutMgr(0x0),fFunctions("AliRsnFunction",0),fTrack1(),fTrack2(),fPairParticle() {}
-    AliRsnPair& operator=(const AliRsnPair&) {return *this;}
-
     void     SetUp(EPairType type);
     void     SetAllFlags(AliRsnDaughter::EPIDMethod pid, Bool_t mix) {fPIDMethod = pid; fIsMixed = mix;}
 
index 15a354f..6058e12 100644 (file)
@@ -194,7 +194,6 @@ Bool_t AliRsnVAnalysisTaskME::CheckAndPrintEvents()
       }
       AliDebug(AliLog::kDebug, Form("ESD event %d has %d tracks", i, allESDEvents[i]->GetNumberOfTracks()));
     }
-    delete [] allESDEvents;
   } else if (fAODEvent) {
     AliAODEvent **allAODEvents = new AliAODEvent*[nEvents];
     for (Int_t i = 0; i < nEvents; i++) {
@@ -205,7 +204,6 @@ Bool_t AliRsnVAnalysisTaskME::CheckAndPrintEvents()
       }
       AliDebug(AliLog::kDebug, Form("AOD event %d has %d tracks", i, allAODEvents[i]->GetNumberOfTracks()));
     }
-    delete [] allAODEvents;
   } else {
     AliWarning("Unknown input format");
     return kFALSE;