AliRsnEvent:
authorpulvir <pulvir@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 7 Mar 2011 23:26:00 +0000 (23:26 +0000)
committerpulvir <pulvir@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 7 Mar 2011 23:26:00 +0000 (23:26 +0000)
- multiplicity from SPD is a float, not an integer (correct warning in compilation)

AliRsnPair:
- assignment of mother reference event was missing, and caused segfaults

AliRsnCutPIDITS:
- don't assume that the AliESDpid object in the input handler is always initialized

AliRsnAnalysisManager:
- assign the reference event for the mother passed to each pair, and take care of
  maintaining the right one in case they are swapped

PWG2/RESONANCES/AliRsnAnalysisManager.cxx
PWG2/RESONANCES/AliRsnCutPIDITS.cxx
PWG2/RESONANCES/AliRsnEvent.cxx
PWG2/RESONANCES/AliRsnEvent.h
PWG2/RESONANCES/AliRsnPair.cxx
PWG2/RESONANCES/AliRsnPair.h

index fb99cb9..92d5c6e 100644 (file)
@@ -271,7 +271,7 @@ void AliRsnAnalysisManager::ProcessAll(AliRsnEvent *ev0, AliRsnEvent *ev1, Bool_
          if (!ev0->SetDaughterAbs(daughter0, i0)) continue;
       }
       // when the assigment is unsuccessful, this i known in internal status flag
-      if (!daughter0.IsOK()) continue;
+      if (!daughter0.IsOK() || !daughter0.GetRef()) continue;
       
       // process all single-track monitors
       nextMonitor.Reset();
@@ -293,7 +293,7 @@ void AliRsnAnalysisManager::ProcessAll(AliRsnEvent *ev0, AliRsnEvent *ev1, Bool_
             if (!ev1->SetDaughterAbs(daughter1, i1)) continue;
          }
          // when the assigment is unsuccessful, this i known in internal status flag
-         if (!daughter1.IsOK()) continue;
+         if (!daughter1.IsOK() || !daughter1.GetRef()) continue;
 
          // loop over all pairs and make computations
          i = 0;
@@ -307,9 +307,9 @@ void AliRsnAnalysisManager::ProcessAll(AliRsnEvent *ev0, AliRsnEvent *ev1, Bool_
             // the Fill() method returns kTRUE if the two daughters
             // do match the pair definition of each AliRsnPait object,
             // and the pair is processed only in this case
-            if (pair->Fill(&daughter0, &daughter1)) {
+            if (pair->Fill(&daughter0, &daughter1, kTRUE)) {
                pair->Compute();
-            } else if (pair->Fill(&daughter1, &daughter0)) {
+            } else if (pair->Fill(&daughter1, &daughter0, kFALSE)) {
                pair->Compute();
             }
          }
index 5d12c34..1acd861 100644 (file)
@@ -191,7 +191,7 @@ void AliRsnCutPIDITS::Initialize()
    AliESDInputHandler *handler = dynamic_cast<AliESDInputHandler*>(mgr->GetInputEventHandler());
    if (handler) {
       AliESDpid *pid = handler->GetESDpid();
-      fESDpid = (*pid);
+      if (pid) fESDpid = (*pid);
    }
 
    fInitialized = kTRUE;
index e8abf33..0d0a5e7 100644 (file)
@@ -374,13 +374,13 @@ Int_t AliRsnEvent::GetMultiplicityFromESDCuts()
 }
 
 //_____________________________________________________________________________
-Int_t AliRsnEvent::GetMultiplicityFromSPD()
+Float_t AliRsnEvent::GetMultiplicityFromSPD()
 {
 //
 // Returns event multiplicity computed from SPD.
 //
 
-   if (!fRef) return -1;
+   if (!fRef) return -1.0;
 
    AliESDEvent *esd = GetRefESD();
    if (esd) {
@@ -391,7 +391,7 @@ Int_t AliRsnEvent::GetMultiplicityFromSPD()
    }
    else {
       AliWarning("Cannot compute SPD multiplicity without a well initialized ESD event");
-      return -1;
+      return -1.0;
    }
 }
 
index 6eada40..8961b43 100644 (file)
@@ -52,7 +52,7 @@ public:
    Int_t            GetMultiplicityFromTracks()   {if (fRef) return fRef->GetNumberOfTracks(); return -1;}
    Int_t            GetMultiplicityFromMC()       {if (fRefMC) return fRefMC->GetNumberOfTracks(); return -1;}
    Int_t            GetMultiplicityFromESDCuts();
-   Int_t            GetMultiplicityFromSPD();
+   Float_t          GetMultiplicityFromSPD();
 
    // setters for a daughter
    Bool_t           SetDaughterAbs(AliRsnDaughter &daughter, Int_t absoluteIndex);
index 2a4fa32..2bb44e1 100644 (file)
@@ -87,7 +87,7 @@ void AliRsnPair::Print(Option_t* /*option*/) const
 
 //_____________________________________________________________________________
 Bool_t AliRsnPair::Fill
-(AliRsnDaughter *daughter1, AliRsnDaughter *daughter2)
+(AliRsnDaughter *daughter1, AliRsnDaughter *daughter2, Bool_t refFirst)
 {
 //
 // Checks that first argument matches definitions for first daughter
@@ -96,6 +96,8 @@ Bool_t AliRsnPair::Fill
 // If the matching is successful, the AliRsnMother data member is 
 // initialized using the mass hypotheses defined here and the momenta
 // in the passed daughters.
+// The third argument is necessary to choose which one of the possible two
+// events owning the two daughter will be used as reference.
 //
    
    // check matching and exit if one of them fails
@@ -151,6 +153,9 @@ Bool_t AliRsnPair::Fill
 
    // if pair is accepted, increment counter
    ++fCount;
+   
+   // assign reference event
+   if (refFirst) fMother.SetRefEvent(daughter1->GetOwnerEvent()); else fMother.SetRefEvent(daughter2->GetOwnerEvent());
 
    return kTRUE;
 }
index 1dda9fc..926d746 100644 (file)
@@ -49,7 +49,7 @@ public:
    void              ResetCount()                         {fCount = 0;}
 
    // methods
-   Bool_t            Fill(AliRsnDaughter *d0, AliRsnDaughter *d1);
+   Bool_t            Fill(AliRsnDaughter *d0, AliRsnDaughter *d1, Bool_t refFirst = kTRUE);
    virtual void      Print(Option_t *option = "") const;
    virtual void      Compute();
    virtual void      Init(const char *prefix, TList *list);