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 d49d106dfafb3a3d7968d16f580c082f1df8c5ae..eef1d4f6a31fc1d077fb88110678f6b2de67e532 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 29594840fafaf63ab4d605c77798e8e9cf84bcfc..54aebc22e68aa1edbb1be919742f2bf865c0728f 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 f1d2a38a66c95716b146bc065d2e213c35aaa898..aae6fa64a4e62642317361ede716df43220566d4 100644 (file)
@@ -34,13 +34,35 @@ AliRsnCut::AliRsnCut() :
     fCutValueI(0),
     fCutValueU(0),
     fCutValueD(0.0),
-    fCutResult(kTRUE)
+    fCutResult(kTRUE),
+    fEvent(0x0)
 {
 //
 // Default constructor.
 //
 }
 
+//_________________________________________________________________________________________________
+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) :
@@ -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.
@@ -116,6 +141,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 215ae8197adae66d80ea05b109c1b4e809b750dc..3a013336c081d2c96979b4e51a2a9291094e7342 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 6e4dc88a801bb73896597dbf6ac94759aed928dc..879b150e03ffb22a4c0aaae1349a56ca35f46b27 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 42989b5a179467a97799b1b08bfcc3d016e8c835..a9f77a91ab0f8cbe87a9b41cdd0be72bc043a955 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 3235e39f7000b9951517205f748fe4eff19817ae..798059a3868cb89704b923e5a38d5b93c75bbcc2 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 c5d720315e130e7bcdf9cad339dbea6d6fc965aa..a663716178c81e9d13527b33633385fd97c391c3 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 d78279163ef7fdb9c31cda0a219408371ec01a4f..d51d8652006bd5852efdb9f29d9538dc9abc847d 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 244deb733f5f1b93d9fe948f9e7f922972710be2..6c4e645579d5eaa5927d7bf23390b5c09f922b61 100644 (file)
@@ -41,6 +41,7 @@ class AliRsnCutStd : public AliRsnCut
       kTruePID,
       kRequiredPID,
       kRealisticPID,
+      kPairIndex,
       // cut without reference values
       kCharge,
       kSameLabel,
index 5c10f515c0a5c9d5f5cb692f1f05ceda59312532..030a1f6f7cd07ea8bbfefe34f8459ea2541d28f8 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 93addacd64b4458b7f1f97ae507aadaf64988b5c..372ed49ab4e8b83776d5973e6328c0f26836d49b 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 7f16c0d58ec49a1fb1ed19fb03b4d489aa0948fe..71f04fbe82f9fde42363f6bef25f61d24eb686c5 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 15a354fc3c6be7b706aa8bc13a0945adc911ee71..6058e12f0a618e99a2340a62a4644d9ee8321855 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;