ROOT logo
//
// Class AliRsnCutV0
//
// General implementation of a single cut strategy, which can be:
// - a value contained in a given interval  [--> IsBetween()   ]
// - a value equal to a given reference     [--> MatchesValue()]
//
// In all cases, the reference value(s) is (are) given as data members
// and each kind of cut requires a given value type (Int, UInt, Double),
// but the cut check procedure is then automatized and chosen thanks to
// an enumeration of the implemented cut types.
// At the end, the user (or any other point which uses this object) has
// to use the method IsSelected() to check if this cut has been passed.
//
// authors: Massimo Venaruzzo (massimo.venaruzzo@ts.infn.it)
// modified: Enrico Fragiacomo (enrico.fragiacomo@ts.infn.it)
//

#include <Riostream.h>
#include <TFormula.h>
#include <TBits.h>

#include "AliLog.h"
#include "AliESDtrackCuts.h"

#include "AliRsnEvent.h"
#include "AliRsnDaughter.h"
#include "AliRsnCutV0.h"

ClassImp(AliRsnCutV0)

//_________________________________________________________________________________________________
AliRsnCutV0::AliRsnCutV0(const char *name, Int_t hypothesis, AliPID::EParticleType pid, AliPID::EParticleType pid2) :
   AliRsnCut(name, AliRsnTarget::kDaughter),
   fHypothesis(0),
   fMass(0.0),
   fTolerance(0.01),
   fMaxDCAVertex(0.3),
   fMinCosPointAngle(0.95),
   fMaxDaughtersDCA(0.5),
   fMinTPCcluster(70),
   fMaxRapidity(0.8),
   fPID(pid),
   fPID2(pid2),
   fPIDCutProton(0),
   fPIDCutPion(0),
   fESDtrackCuts(0x0),
   fCutQuality(Form("%sDaughtersQuality", name)),
   fAODTestFilterBit(5)
{
//
// Default constructor.
// Initializes all cuts in such a way that all of them are disabled.
//

   SetHypothesis(hypothesis);
}

//_________________________________________________________________________________________________
AliRsnCutV0::AliRsnCutV0(const AliRsnCutV0 &copy) :
   AliRsnCut(copy),
   fHypothesis(copy.fHypothesis),
   fMass(copy.fMass),
   fTolerance(copy.fTolerance),
   fMaxDCAVertex(copy.fMaxDCAVertex),
   fMinCosPointAngle(copy.fMinCosPointAngle),
   fMaxDaughtersDCA(copy.fMaxDaughtersDCA),
   fMinTPCcluster(copy.fMinTPCcluster),
   fMaxRapidity(copy.fMaxRapidity),
   fPID(copy.fPID),
   fPID2(copy.fPID2),
   fPIDCutProton(copy.fPIDCutProton),
   fPIDCutPion(copy.fPIDCutPion),
   fESDtrackCuts(copy.fESDtrackCuts),
   fCutQuality(copy.fCutQuality),
   fAODTestFilterBit(copy.fAODTestFilterBit)
{
//
// Copy constructor.
// Just copy all data member values.:IsSelected: Object is not a V0 (RESONANCES/AliRsnCutV0.cxx:149)

//
   fCutQuality.SetPtRange(0.15, 1E+20);
   fCutQuality.SetEtaRange(-0.8, 0.8);
   fCutQuality.SetSPDminNClusters(1);
   fCutQuality.SetITSminNClusters(0);
   fCutQuality.SetITSmaxChi2(1E+20);
   fCutQuality.SetTPCminNClusters(fMinTPCcluster);
   fCutQuality.SetTPCmaxChi2(4.0);
   fCutQuality.SetRejectKinkDaughters();
   fCutQuality.SetAODTestFilterBit(5);

}

//_________________________________________________________________________________________________
AliRsnCutV0 &AliRsnCutV0::operator=(const AliRsnCutV0 &copy)
{
//
// Assignment operator.
// Just copy all data member values.
//
   if (this == &copy)
     return *this;
   fHypothesis = copy.fHypothesis;
   fMass = copy.fMass;
   fTolerance = copy.fTolerance;
   fMaxDCAVertex = copy.fMaxDCAVertex;
   fMinCosPointAngle = copy.fMinCosPointAngle;
   fMaxDaughtersDCA = copy.fMaxDaughtersDCA;
   fMinTPCcluster = copy.fMinTPCcluster;
   fMaxRapidity = copy.fMaxRapidity;
   fCutQuality = copy.fCutQuality;
   fPID = copy.fPID;
   fPID2 = copy.fPID2;
   fPIDCutProton = copy.fPIDCutProton;
   fPIDCutPion = copy.fPIDCutPion;
   fESDtrackCuts = copy.fESDtrackCuts;
   fCutQuality = copy.fCutQuality;
   fAODTestFilterBit = copy.fAODTestFilterBit;

   return (*this);
}

//_________________________________________________________________________________________________
Bool_t AliRsnCutV0::IsSelected(TObject *object)
{
//:IsSelected: Object is not a V0 (RESONANCES/AliRsnCutV0.cxx:149)

// Cut checker.
// Checks the type of object being evaluated
// and then calls the appropriate sub-function (for ESD or AOD)
//

   // coherence check
   if (!TargetOK(object)) return kFALSE;

   // check cast
   AliESDv0 *v0esd = fDaughter->Ref2ESDv0();
   AliAODv0 *v0aod = fDaughter->Ref2AODv0();
   //cout << fDaughter->GetRef()->ClassName() << ' ' << v0esd << ' ' << v0aod << endl;

   // operate depending on cast:IsSelected: Object is not a V0 (RESONANCES/AliRsnCutV0.cxx:149)

   if (v0esd) {
      return CheckESD(v0esd);
   } else if (v0aod) {
      return CheckAOD(v0aod);
   } else {
      AliDebugClass(1, "Object is not a V0");
      return kFALSE;
   }
}

//_________________________________________________________________________________________________
Bool_t AliRsnCutV0::CheckESD(AliESDv0 *v0)
{
//
// Check an ESD V0.
// This is done using the default track checker for ESD.
// It is declared static, not to recreate it every time.
//

   AliDebugClass(1, "Check ESD");
   if (v0->GetOnFlyStatus()) {
      AliDebugClass(1, "Rejecting V0 in 'on fly' status");
      return kFALSE; // if kTRUE, then this V0 is recontructed
   }

   // retrieve pointer to owner event
   AliESDEvent *lESDEvent = fEvent->GetRefESD();
   Double_t xPrimaryVertex = lESDEvent->GetPrimaryVertex()->GetX();
   Double_t yPrimaryVertex = lESDEvent->GetPrimaryVertex()->GetY();
   Double_t zPrimaryVertex = lESDEvent->GetPrimaryVertex()->GetZ();
   AliDebugClass(2, Form("Primary vertex: %f %f %f", xPrimaryVertex, yPrimaryVertex, zPrimaryVertex));

   // retrieve the V0 daughters
   UInt_t lIdxPos      = (UInt_t) TMath::Abs(v0->GetPindex());
   UInt_t lIdxNeg      = (UInt_t) TMath::Abs(v0->GetNindex());
   AliESDtrack *pTrack = lESDEvent->GetTrack(lIdxPos);
   AliESDtrack *nTrack = lESDEvent->GetTrack(lIdxNeg);

   // check quality cuts
   if (fESDtrackCuts) {
      AliDebugClass(2, "Checking quality cuts");
      if (!fESDtrackCuts->IsSelected(pTrack)) {
         AliDebugClass(2, "Positive daughter failed quality cuts");
         return kFALSE;
      }
      if (!fESDtrackCuts->IsSelected(nTrack)) {
         AliDebugClass(2, "Negative daughter failed quality cuts");
         return kFALSE;
      }
   }

   // filter like-sign V0
   if ( TMath::Abs( ((pTrack->GetSign()) - (nTrack->GetSign())) ) < 0.1) {
      AliDebugClass(2, "Failed like-sign V0 check");
      return kFALSE;
   }


   // check compatibility with expected species hypothesis
   v0->ChangeMassHypothesis(fHypothesis);
   if ((TMath::Abs(v0->GetEffMass() - fMass)) > fTolerance) {
      AliDebugClass(2, "V0 is not in the expected inv mass range");
      return kFALSE;
   }

   // topological checks
   if (TMath::Abs(v0->GetD(xPrimaryVertex, yPrimaryVertex, zPrimaryVertex)) > fMaxDCAVertex) {
      AliDebugClass(2, "Failed check on DCA to primary vertes");
      return kFALSE;
   }
      if (TMath::Abs(v0->GetV0CosineOfPointingAngle()) < fMinCosPointAngle) {
      AliDebugClass(2, "Failed check on cosine of pointing angle");
      return kFALSE;
   }
   if (TMath::Abs(v0->GetDcaV0Daughters()) > fMaxDaughtersDCA) {
      AliDebugClass(2, "Failed check on DCA between daughters");
      return kFALSE;
   }
   if (TMath::Abs(v0->Y(fHypothesis)) > fMaxRapidity) {
      AliDebugClass(2, "Failed check on V0 rapidity");
      return kFALSE;
   }

   Double_t v0Position[3]; // from $ALICE_ROOT/ANALYSIS/AliESDV0Cuts.cxx
  v0->GetXYZ(v0Position[0],v0Position[1],v0Position[2]);
  Double_t radius = TMath::Sqrt(TMath::Power(v0Position[0],2) + TMath::Power(v0Position[1],2));
  if ( ( radius < 0.8 ) || ( radius > 100 ) ) {
    AliDebugClass(2, "Failed fiducial volume");
    return kFALSE;   
  }
    
   // check PID on proton or antiproton from V0

   // check initialization of PID object
   AliPIDResponse *pid = fEvent->GetPIDResponse();
   if (!pid) {
      AliFatal("NULL PID response");
      return kFALSE;
   }

   // check if TOF is matched
   // and computes all values used in the PID cut
   //Bool_t   isTOFpos  = MatchTOF(ptrack);
   //Bool_t   isTOFneg  = MatchTOF(ntrack);
   //Double_t pospTPC   = pTrack->GetTPCmomentum();
   //Double_t negpTPC   = nTrack->GetTPCmomentum();
   //Double_t posp      = pTrack->P();
   //Double_t negp      = nTrack->P();
   Double_t posnsTPC   = TMath::Abs(pid->NumberOfSigmasTPC(pTrack, fPID));
   Double_t posnsTPC2  = TMath::Abs(pid->NumberOfSigmasTPC(pTrack, fPID2));
   //Double_t posnsTOF  = TMath::Abs(pid->NumberOfSigmasTOF(ptrack, fPID));
   Double_t negnsTPC   = TMath::Abs(pid->NumberOfSigmasTPC(nTrack, fPID));
   Double_t negnsTPC2  = TMath::Abs(pid->NumberOfSigmasTPC(nTrack, fPID2));
   //Double_t negnsTOF  = TMath::Abs(pid->NumberOfSigmasTOF(ntrack, fPID));
   Double_t maxTPC = 1E20;
   Double_t maxTPC2 = 1E20;
   //Double_t maxTOF = 1E20;

   // applies the cut differently depending on the PID and the momentum

   if(fHypothesis==kLambda0) {
      //if (isTOFpos) {
      // TPC: 5sigma cut for all
      //if (posnsTPC > 5.0) return kFALSE;
      // TOF: 3sigma
      // maxTOF = 3.0;
      //return (posnsTOF <= maxTOF);
      //} else {
      // TPC:

      maxTPC = fPIDCutProton;
      maxTPC2 = fPIDCutPion;

      if (! ((posnsTPC <= maxTPC) && (negnsTPC2 <= maxTPC2)) ) {
         AliDebugClass(2, "Failed check on V0 PID");
         return kFALSE;
      }
   }

   //}

   if(fHypothesis==kLambda0Bar) {
      //if (isTOFneg) {
      // TPC: 5sigma cut for all
      //if (negnsTPC > 5.0) return kFALSE;
      // TOF: 3sigma
      // maxTOF = 3.0;
      //return (negnsTOF <= maxTOF);
      //} else {
      // TPC:

     
         maxTPC = fPIDCutProton;
         maxTPC2 = fPIDCutPion;

      if(! ((negnsTPC <= maxTPC) && (posnsTPC2 <= maxTPC2)) ) {
         AliDebugClass(2, "Failed check on V0 PID");
         return kFALSE;
      }
   }
   //}


   // if we reach this point, all checks were successful
   AliDebugClass(2, "Good V0");
   return kTRUE;
}

//_________________________________________________________________________________________________
Bool_t AliRsnCutV0::CheckAOD(AliAODv0 *v0)
{
//
// Check an AOD V0.
// This is done doing directly all checks, since there is not
// an equivalend checker for AOD tracks
//

   AliDebugClass(2, "Check AOD");
   if (v0->GetOnFlyStatus()) {
      AliDebugClass(2, "Rejecting V0 in 'on fly' status");
      return kFALSE; // if kTRUE, then this V0 is recontructed
   }

   // retrieve pointer to owner event
   AliAODEvent *lAODEvent = fEvent->GetRefAOD();
   Double_t xPrimaryVertex = lAODEvent->GetPrimaryVertex()->GetX();
   Double_t yPrimaryVertex = lAODEvent->GetPrimaryVertex()->GetY();
   Double_t zPrimaryVertex = lAODEvent->GetPrimaryVertex()->GetZ();
   AliDebugClass(2, Form("Primary vertex: %f %f %f", xPrimaryVertex, yPrimaryVertex, zPrimaryVertex));

   // retrieve the V0 daughters
   AliAODTrack *pTrack = (AliAODTrack *) (v0->GetSecondaryVtx()->GetDaughter(0));
   AliAODTrack *nTrack = (AliAODTrack *) (v0->GetSecondaryVtx()->GetDaughter(1));

   // check quality cuts
   UInt_t  filtermapP = 9999;
   UInt_t  filtermapN = 9999;
   filtermapP = pTrack->GetFilterMap();
   filtermapN = nTrack->GetFilterMap();

   //-----
   // next lines commented out by EF - 17/01/2014 
   // NOTE that the filter bit test on V0 daughters removes a huge amount of V0 candidates, including good ones.
   //      Likely wrong -> requires a DCA max!
   //      Removing the test, there's a little gain in efficiency in the
   //      final search for Sigma* candidates
   // NOTE that further constrains (e.g. DCA of daughters greater than xxx), 
   //      necessary to remove background, are already in V0s. (see also below)
   /*
   if ( !pTrack->TestFilterBit(fAODTestFilterBit)   ) {
      AliDebugClass(2, Form("Positive daughter failed quality cuts filtermapP=%d",filtermapP));
      return kFALSE;
   }
   if ( !nTrack->TestFilterBit(fAODTestFilterBit)   ) {
      AliDebugClass(2, Form("Negative daughter failed quality cuts filtermapN=%d",filtermapN));
      return kFALSE;
   }
   */

   //----
   // next lines are not necessary. Just left there (commented-out) to remind that the requirement on the DCA of V0 daughters
   //      is already in the V0, so requiring dca>0.050 (with 0.050 cm the default value from the Lambda analysis)
   //      does not remove V0s candidates
   /*
   Double_t dca = v0->DcaPosToPrimVertex() ;
     AliDebugClass(2, Form("DCA of Lambda positive daughter %f",dca));
   if(dca<0.050) {
     AliDebugClass(2, Form("DCA of Lambda positive daughter (%f) less than 0.05",dca));
      return kFALSE;
   }
   dca = v0->DcaNegToPrimVertex();
   if(dca<0.050) {
     AliDebugClass(2, Form("DCA of Lambda negative daughter (%f) less than 0.05",dca));
      return kFALSE;
   }
   */

   // EF - 17/01/2014 - next check apparently not effective!? Already in V0s?
   // filter like-sign V0
   if ( TMath::Abs( ((pTrack->Charge()) - (nTrack->Charge())) ) < 0.1) {
      AliDebugClass(2, "Failed like-sign V0 check");
      return kFALSE;
   }

   // check compatibility with expected species hypothesis
   Double_t mass = 0.0;
   if(fHypothesis==kLambda0) {
      mass = v0->MassLambda();
   }
   else if (fHypothesis==kLambda0Bar) {
      mass = v0->MassAntiLambda();
   }
   if ((TMath::Abs(mass - fMass)) > fTolerance) {
      AliDebugClass(2, Form("V0 is not in the expected inv mass range  Mass: %d %f %f", fHypothesis, fMass, mass));
      return kFALSE;
   }
   AliDebugClass(2, Form("Mass: %d %f %f", fHypothesis, fMass, mass));


   // topological checks
   if (TMath::Abs(v0->DcaV0ToPrimVertex()) > fMaxDCAVertex) {
      AliDebugClass(2, Form("Failed check on DCA to primary vertes dca=%f maxdca=%f",TMath::Abs(v0->DcaV0ToPrimVertex()),fMaxDCAVertex));
      return kFALSE;
   }

   // next cut is effective (should it be in AODV0?)     
   AliAODVertex *vertex = lAODEvent->GetPrimaryVertex();
   Double_t cospointangle = v0->CosPointingAngle(vertex);
   if (TMath::Abs( cospointangle )  < fMinCosPointAngle) {
     AliDebugClass(2, "Failed check on cosine of pointing angle");
     return kFALSE;
   }
 
  // next cut is effective (should it be in AODV0?)
   if (TMath::Abs(v0->DcaV0Daughters()) > fMaxDaughtersDCA) {
      AliDebugClass(2, "Failed check on DCA between daughters");
      return kFALSE;
   }

   if (TMath::Abs(v0->RapLambda()) > fMaxRapidity) {
      AliDebugClass(2, "Failed check on V0 rapidity");
      return kFALSE;
   }

   Double_t radius = v0->RadiusV0();
   if ( ( radius < 0.8 ) || ( radius > 100 ) ) {
     AliDebugClass(2, "Failed fiducial volume");
     return kFALSE;   
   }

   //-----------------------------------------------------------
   // check initialization of PID object
   AliPIDResponse *pid = fEvent->GetPIDResponse();
   if (!pid) {
      AliFatal("NULL PID response");
      return kFALSE;
   }

   Double_t posnsTPC   = TMath::Abs(pid->NumberOfSigmasTPC(pTrack, fPID));
   Double_t posnsTPC2  = TMath::Abs(pid->NumberOfSigmasTPC(pTrack, fPID2));
   Double_t negnsTPC   = TMath::Abs(pid->NumberOfSigmasTPC(nTrack, fPID));
   Double_t negnsTPC2  = TMath::Abs(pid->NumberOfSigmasTPC(nTrack, fPID2));
   Double_t maxTPC = 1E20;
   Double_t maxTPC2 = 1E20;

   // applies the cut differently depending on the PID and the momentum
   if(fHypothesis==kLambda0) {
     maxTPC = fPIDCutProton; 
     maxTPC2 = fPIDCutPion;      
     if (! ((posnsTPC <= maxTPC) && (negnsTPC2 <= maxTPC2)) ) {
       AliDebugClass(2, "Failed check on V0 PID");
       return kFALSE;
     }
   }
   
   if(fHypothesis==kLambda0Bar) {
     maxTPC = fPIDCutProton;
     maxTPC2 = fPIDCutPion;
     if(! ((negnsTPC <= maxTPC) && (posnsTPC2 <= maxTPC2)) ) {
       AliDebugClass(2, "Failed check on V0 PID");
       return kFALSE;
     }
   }
   
   //---------------------------------------------------------------
   // if we reach this point, all checks were successful
   AliDebugClass(1, "Good AOD V0");
   AliDebugClass(1, Form("Mass: %d %f %f %d %d", fHypothesis, fMass, mass, filtermapP, filtermapN));
   return kTRUE;

}

//_________________________________________________________________________________________________
void AliRsnCutV0::Print(const Option_t *) const
{
//
// Print information on this cut
//
}
 AliRsnCutV0.cxx:1
 AliRsnCutV0.cxx:2
 AliRsnCutV0.cxx:3
 AliRsnCutV0.cxx:4
 AliRsnCutV0.cxx:5
 AliRsnCutV0.cxx:6
 AliRsnCutV0.cxx:7
 AliRsnCutV0.cxx:8
 AliRsnCutV0.cxx:9
 AliRsnCutV0.cxx:10
 AliRsnCutV0.cxx:11
 AliRsnCutV0.cxx:12
 AliRsnCutV0.cxx:13
 AliRsnCutV0.cxx:14
 AliRsnCutV0.cxx:15
 AliRsnCutV0.cxx:16
 AliRsnCutV0.cxx:17
 AliRsnCutV0.cxx:18
 AliRsnCutV0.cxx:19
 AliRsnCutV0.cxx:20
 AliRsnCutV0.cxx:21
 AliRsnCutV0.cxx:22
 AliRsnCutV0.cxx:23
 AliRsnCutV0.cxx:24
 AliRsnCutV0.cxx:25
 AliRsnCutV0.cxx:26
 AliRsnCutV0.cxx:27
 AliRsnCutV0.cxx:28
 AliRsnCutV0.cxx:29
 AliRsnCutV0.cxx:30
 AliRsnCutV0.cxx:31
 AliRsnCutV0.cxx:32
 AliRsnCutV0.cxx:33
 AliRsnCutV0.cxx:34
 AliRsnCutV0.cxx:35
 AliRsnCutV0.cxx:36
 AliRsnCutV0.cxx:37
 AliRsnCutV0.cxx:38
 AliRsnCutV0.cxx:39
 AliRsnCutV0.cxx:40
 AliRsnCutV0.cxx:41
 AliRsnCutV0.cxx:42
 AliRsnCutV0.cxx:43
 AliRsnCutV0.cxx:44
 AliRsnCutV0.cxx:45
 AliRsnCutV0.cxx:46
 AliRsnCutV0.cxx:47
 AliRsnCutV0.cxx:48
 AliRsnCutV0.cxx:49
 AliRsnCutV0.cxx:50
 AliRsnCutV0.cxx:51
 AliRsnCutV0.cxx:52
 AliRsnCutV0.cxx:53
 AliRsnCutV0.cxx:54
 AliRsnCutV0.cxx:55
 AliRsnCutV0.cxx:56
 AliRsnCutV0.cxx:57
 AliRsnCutV0.cxx:58
 AliRsnCutV0.cxx:59
 AliRsnCutV0.cxx:60
 AliRsnCutV0.cxx:61
 AliRsnCutV0.cxx:62
 AliRsnCutV0.cxx:63
 AliRsnCutV0.cxx:64
 AliRsnCutV0.cxx:65
 AliRsnCutV0.cxx:66
 AliRsnCutV0.cxx:67
 AliRsnCutV0.cxx:68
 AliRsnCutV0.cxx:69
 AliRsnCutV0.cxx:70
 AliRsnCutV0.cxx:71
 AliRsnCutV0.cxx:72
 AliRsnCutV0.cxx:73
 AliRsnCutV0.cxx:74
 AliRsnCutV0.cxx:75
 AliRsnCutV0.cxx:76
 AliRsnCutV0.cxx:77
 AliRsnCutV0.cxx:78
 AliRsnCutV0.cxx:79
 AliRsnCutV0.cxx:80
 AliRsnCutV0.cxx:81
 AliRsnCutV0.cxx:82
 AliRsnCutV0.cxx:83
 AliRsnCutV0.cxx:84
 AliRsnCutV0.cxx:85
 AliRsnCutV0.cxx:86
 AliRsnCutV0.cxx:87
 AliRsnCutV0.cxx:88
 AliRsnCutV0.cxx:89
 AliRsnCutV0.cxx:90
 AliRsnCutV0.cxx:91
 AliRsnCutV0.cxx:92
 AliRsnCutV0.cxx:93
 AliRsnCutV0.cxx:94
 AliRsnCutV0.cxx:95
 AliRsnCutV0.cxx:96
 AliRsnCutV0.cxx:97
 AliRsnCutV0.cxx:98
 AliRsnCutV0.cxx:99
 AliRsnCutV0.cxx:100
 AliRsnCutV0.cxx:101
 AliRsnCutV0.cxx:102
 AliRsnCutV0.cxx:103
 AliRsnCutV0.cxx:104
 AliRsnCutV0.cxx:105
 AliRsnCutV0.cxx:106
 AliRsnCutV0.cxx:107
 AliRsnCutV0.cxx:108
 AliRsnCutV0.cxx:109
 AliRsnCutV0.cxx:110
 AliRsnCutV0.cxx:111
 AliRsnCutV0.cxx:112
 AliRsnCutV0.cxx:113
 AliRsnCutV0.cxx:114
 AliRsnCutV0.cxx:115
 AliRsnCutV0.cxx:116
 AliRsnCutV0.cxx:117
 AliRsnCutV0.cxx:118
 AliRsnCutV0.cxx:119
 AliRsnCutV0.cxx:120
 AliRsnCutV0.cxx:121
 AliRsnCutV0.cxx:122
 AliRsnCutV0.cxx:123
 AliRsnCutV0.cxx:124
 AliRsnCutV0.cxx:125
 AliRsnCutV0.cxx:126
 AliRsnCutV0.cxx:127
 AliRsnCutV0.cxx:128
 AliRsnCutV0.cxx:129
 AliRsnCutV0.cxx:130
 AliRsnCutV0.cxx:131
 AliRsnCutV0.cxx:132
 AliRsnCutV0.cxx:133
 AliRsnCutV0.cxx:134
 AliRsnCutV0.cxx:135
 AliRsnCutV0.cxx:136
 AliRsnCutV0.cxx:137
 AliRsnCutV0.cxx:138
 AliRsnCutV0.cxx:139
 AliRsnCutV0.cxx:140
 AliRsnCutV0.cxx:141
 AliRsnCutV0.cxx:142
 AliRsnCutV0.cxx:143
 AliRsnCutV0.cxx:144
 AliRsnCutV0.cxx:145
 AliRsnCutV0.cxx:146
 AliRsnCutV0.cxx:147
 AliRsnCutV0.cxx:148
 AliRsnCutV0.cxx:149
 AliRsnCutV0.cxx:150
 AliRsnCutV0.cxx:151
 AliRsnCutV0.cxx:152
 AliRsnCutV0.cxx:153
 AliRsnCutV0.cxx:154
 AliRsnCutV0.cxx:155
 AliRsnCutV0.cxx:156
 AliRsnCutV0.cxx:157
 AliRsnCutV0.cxx:158
 AliRsnCutV0.cxx:159
 AliRsnCutV0.cxx:160
 AliRsnCutV0.cxx:161
 AliRsnCutV0.cxx:162
 AliRsnCutV0.cxx:163
 AliRsnCutV0.cxx:164
 AliRsnCutV0.cxx:165
 AliRsnCutV0.cxx:166
 AliRsnCutV0.cxx:167
 AliRsnCutV0.cxx:168
 AliRsnCutV0.cxx:169
 AliRsnCutV0.cxx:170
 AliRsnCutV0.cxx:171
 AliRsnCutV0.cxx:172
 AliRsnCutV0.cxx:173
 AliRsnCutV0.cxx:174
 AliRsnCutV0.cxx:175
 AliRsnCutV0.cxx:176
 AliRsnCutV0.cxx:177
 AliRsnCutV0.cxx:178
 AliRsnCutV0.cxx:179
 AliRsnCutV0.cxx:180
 AliRsnCutV0.cxx:181
 AliRsnCutV0.cxx:182
 AliRsnCutV0.cxx:183
 AliRsnCutV0.cxx:184
 AliRsnCutV0.cxx:185
 AliRsnCutV0.cxx:186
 AliRsnCutV0.cxx:187
 AliRsnCutV0.cxx:188
 AliRsnCutV0.cxx:189
 AliRsnCutV0.cxx:190
 AliRsnCutV0.cxx:191
 AliRsnCutV0.cxx:192
 AliRsnCutV0.cxx:193
 AliRsnCutV0.cxx:194
 AliRsnCutV0.cxx:195
 AliRsnCutV0.cxx:196
 AliRsnCutV0.cxx:197
 AliRsnCutV0.cxx:198
 AliRsnCutV0.cxx:199
 AliRsnCutV0.cxx:200
 AliRsnCutV0.cxx:201
 AliRsnCutV0.cxx:202
 AliRsnCutV0.cxx:203
 AliRsnCutV0.cxx:204
 AliRsnCutV0.cxx:205
 AliRsnCutV0.cxx:206
 AliRsnCutV0.cxx:207
 AliRsnCutV0.cxx:208
 AliRsnCutV0.cxx:209
 AliRsnCutV0.cxx:210
 AliRsnCutV0.cxx:211
 AliRsnCutV0.cxx:212
 AliRsnCutV0.cxx:213
 AliRsnCutV0.cxx:214
 AliRsnCutV0.cxx:215
 AliRsnCutV0.cxx:216
 AliRsnCutV0.cxx:217
 AliRsnCutV0.cxx:218
 AliRsnCutV0.cxx:219
 AliRsnCutV0.cxx:220
 AliRsnCutV0.cxx:221
 AliRsnCutV0.cxx:222
 AliRsnCutV0.cxx:223
 AliRsnCutV0.cxx:224
 AliRsnCutV0.cxx:225
 AliRsnCutV0.cxx:226
 AliRsnCutV0.cxx:227
 AliRsnCutV0.cxx:228
 AliRsnCutV0.cxx:229
 AliRsnCutV0.cxx:230
 AliRsnCutV0.cxx:231
 AliRsnCutV0.cxx:232
 AliRsnCutV0.cxx:233
 AliRsnCutV0.cxx:234
 AliRsnCutV0.cxx:235
 AliRsnCutV0.cxx:236
 AliRsnCutV0.cxx:237
 AliRsnCutV0.cxx:238
 AliRsnCutV0.cxx:239
 AliRsnCutV0.cxx:240
 AliRsnCutV0.cxx:241
 AliRsnCutV0.cxx:242
 AliRsnCutV0.cxx:243
 AliRsnCutV0.cxx:244
 AliRsnCutV0.cxx:245
 AliRsnCutV0.cxx:246
 AliRsnCutV0.cxx:247
 AliRsnCutV0.cxx:248
 AliRsnCutV0.cxx:249
 AliRsnCutV0.cxx:250
 AliRsnCutV0.cxx:251
 AliRsnCutV0.cxx:252
 AliRsnCutV0.cxx:253
 AliRsnCutV0.cxx:254
 AliRsnCutV0.cxx:255
 AliRsnCutV0.cxx:256
 AliRsnCutV0.cxx:257
 AliRsnCutV0.cxx:258
 AliRsnCutV0.cxx:259
 AliRsnCutV0.cxx:260
 AliRsnCutV0.cxx:261
 AliRsnCutV0.cxx:262
 AliRsnCutV0.cxx:263
 AliRsnCutV0.cxx:264
 AliRsnCutV0.cxx:265
 AliRsnCutV0.cxx:266
 AliRsnCutV0.cxx:267
 AliRsnCutV0.cxx:268
 AliRsnCutV0.cxx:269
 AliRsnCutV0.cxx:270
 AliRsnCutV0.cxx:271
 AliRsnCutV0.cxx:272
 AliRsnCutV0.cxx:273
 AliRsnCutV0.cxx:274
 AliRsnCutV0.cxx:275
 AliRsnCutV0.cxx:276
 AliRsnCutV0.cxx:277
 AliRsnCutV0.cxx:278
 AliRsnCutV0.cxx:279
 AliRsnCutV0.cxx:280
 AliRsnCutV0.cxx:281
 AliRsnCutV0.cxx:282
 AliRsnCutV0.cxx:283
 AliRsnCutV0.cxx:284
 AliRsnCutV0.cxx:285
 AliRsnCutV0.cxx:286
 AliRsnCutV0.cxx:287
 AliRsnCutV0.cxx:288
 AliRsnCutV0.cxx:289
 AliRsnCutV0.cxx:290
 AliRsnCutV0.cxx:291
 AliRsnCutV0.cxx:292
 AliRsnCutV0.cxx:293
 AliRsnCutV0.cxx:294
 AliRsnCutV0.cxx:295
 AliRsnCutV0.cxx:296
 AliRsnCutV0.cxx:297
 AliRsnCutV0.cxx:298
 AliRsnCutV0.cxx:299
 AliRsnCutV0.cxx:300
 AliRsnCutV0.cxx:301
 AliRsnCutV0.cxx:302
 AliRsnCutV0.cxx:303
 AliRsnCutV0.cxx:304
 AliRsnCutV0.cxx:305
 AliRsnCutV0.cxx:306
 AliRsnCutV0.cxx:307
 AliRsnCutV0.cxx:308
 AliRsnCutV0.cxx:309
 AliRsnCutV0.cxx:310
 AliRsnCutV0.cxx:311
 AliRsnCutV0.cxx:312
 AliRsnCutV0.cxx:313
 AliRsnCutV0.cxx:314
 AliRsnCutV0.cxx:315
 AliRsnCutV0.cxx:316
 AliRsnCutV0.cxx:317
 AliRsnCutV0.cxx:318
 AliRsnCutV0.cxx:319
 AliRsnCutV0.cxx:320
 AliRsnCutV0.cxx:321
 AliRsnCutV0.cxx:322
 AliRsnCutV0.cxx:323
 AliRsnCutV0.cxx:324
 AliRsnCutV0.cxx:325
 AliRsnCutV0.cxx:326
 AliRsnCutV0.cxx:327
 AliRsnCutV0.cxx:328
 AliRsnCutV0.cxx:329
 AliRsnCutV0.cxx:330
 AliRsnCutV0.cxx:331
 AliRsnCutV0.cxx:332
 AliRsnCutV0.cxx:333
 AliRsnCutV0.cxx:334
 AliRsnCutV0.cxx:335
 AliRsnCutV0.cxx:336
 AliRsnCutV0.cxx:337
 AliRsnCutV0.cxx:338
 AliRsnCutV0.cxx:339
 AliRsnCutV0.cxx:340
 AliRsnCutV0.cxx:341
 AliRsnCutV0.cxx:342
 AliRsnCutV0.cxx:343
 AliRsnCutV0.cxx:344
 AliRsnCutV0.cxx:345
 AliRsnCutV0.cxx:346
 AliRsnCutV0.cxx:347
 AliRsnCutV0.cxx:348
 AliRsnCutV0.cxx:349
 AliRsnCutV0.cxx:350
 AliRsnCutV0.cxx:351
 AliRsnCutV0.cxx:352
 AliRsnCutV0.cxx:353
 AliRsnCutV0.cxx:354
 AliRsnCutV0.cxx:355
 AliRsnCutV0.cxx:356
 AliRsnCutV0.cxx:357
 AliRsnCutV0.cxx:358
 AliRsnCutV0.cxx:359
 AliRsnCutV0.cxx:360
 AliRsnCutV0.cxx:361
 AliRsnCutV0.cxx:362
 AliRsnCutV0.cxx:363
 AliRsnCutV0.cxx:364
 AliRsnCutV0.cxx:365
 AliRsnCutV0.cxx:366
 AliRsnCutV0.cxx:367
 AliRsnCutV0.cxx:368
 AliRsnCutV0.cxx:369
 AliRsnCutV0.cxx:370
 AliRsnCutV0.cxx:371
 AliRsnCutV0.cxx:372
 AliRsnCutV0.cxx:373
 AliRsnCutV0.cxx:374
 AliRsnCutV0.cxx:375
 AliRsnCutV0.cxx:376
 AliRsnCutV0.cxx:377
 AliRsnCutV0.cxx:378
 AliRsnCutV0.cxx:379
 AliRsnCutV0.cxx:380
 AliRsnCutV0.cxx:381
 AliRsnCutV0.cxx:382
 AliRsnCutV0.cxx:383
 AliRsnCutV0.cxx:384
 AliRsnCutV0.cxx:385
 AliRsnCutV0.cxx:386
 AliRsnCutV0.cxx:387
 AliRsnCutV0.cxx:388
 AliRsnCutV0.cxx:389
 AliRsnCutV0.cxx:390
 AliRsnCutV0.cxx:391
 AliRsnCutV0.cxx:392
 AliRsnCutV0.cxx:393
 AliRsnCutV0.cxx:394
 AliRsnCutV0.cxx:395
 AliRsnCutV0.cxx:396
 AliRsnCutV0.cxx:397
 AliRsnCutV0.cxx:398
 AliRsnCutV0.cxx:399
 AliRsnCutV0.cxx:400
 AliRsnCutV0.cxx:401
 AliRsnCutV0.cxx:402
 AliRsnCutV0.cxx:403
 AliRsnCutV0.cxx:404
 AliRsnCutV0.cxx:405
 AliRsnCutV0.cxx:406
 AliRsnCutV0.cxx:407
 AliRsnCutV0.cxx:408
 AliRsnCutV0.cxx:409
 AliRsnCutV0.cxx:410
 AliRsnCutV0.cxx:411
 AliRsnCutV0.cxx:412
 AliRsnCutV0.cxx:413
 AliRsnCutV0.cxx:414
 AliRsnCutV0.cxx:415
 AliRsnCutV0.cxx:416
 AliRsnCutV0.cxx:417
 AliRsnCutV0.cxx:418
 AliRsnCutV0.cxx:419
 AliRsnCutV0.cxx:420
 AliRsnCutV0.cxx:421
 AliRsnCutV0.cxx:422
 AliRsnCutV0.cxx:423
 AliRsnCutV0.cxx:424
 AliRsnCutV0.cxx:425
 AliRsnCutV0.cxx:426
 AliRsnCutV0.cxx:427
 AliRsnCutV0.cxx:428
 AliRsnCutV0.cxx:429
 AliRsnCutV0.cxx:430
 AliRsnCutV0.cxx:431
 AliRsnCutV0.cxx:432
 AliRsnCutV0.cxx:433
 AliRsnCutV0.cxx:434
 AliRsnCutV0.cxx:435
 AliRsnCutV0.cxx:436
 AliRsnCutV0.cxx:437
 AliRsnCutV0.cxx:438
 AliRsnCutV0.cxx:439
 AliRsnCutV0.cxx:440
 AliRsnCutV0.cxx:441
 AliRsnCutV0.cxx:442
 AliRsnCutV0.cxx:443
 AliRsnCutV0.cxx:444
 AliRsnCutV0.cxx:445
 AliRsnCutV0.cxx:446
 AliRsnCutV0.cxx:447
 AliRsnCutV0.cxx:448
 AliRsnCutV0.cxx:449
 AliRsnCutV0.cxx:450
 AliRsnCutV0.cxx:451
 AliRsnCutV0.cxx:452
 AliRsnCutV0.cxx:453
 AliRsnCutV0.cxx:454
 AliRsnCutV0.cxx:455
 AliRsnCutV0.cxx:456
 AliRsnCutV0.cxx:457
 AliRsnCutV0.cxx:458
 AliRsnCutV0.cxx:459
 AliRsnCutV0.cxx:460
 AliRsnCutV0.cxx:461
 AliRsnCutV0.cxx:462
 AliRsnCutV0.cxx:463
 AliRsnCutV0.cxx:464
 AliRsnCutV0.cxx:465
 AliRsnCutV0.cxx:466
 AliRsnCutV0.cxx:467
 AliRsnCutV0.cxx:468
 AliRsnCutV0.cxx:469
 AliRsnCutV0.cxx:470
 AliRsnCutV0.cxx:471
 AliRsnCutV0.cxx:472
 AliRsnCutV0.cxx:473
 AliRsnCutV0.cxx:474
 AliRsnCutV0.cxx:475
 AliRsnCutV0.cxx:476
 AliRsnCutV0.cxx:477
 AliRsnCutV0.cxx:478
 AliRsnCutV0.cxx:479
 AliRsnCutV0.cxx:480
 AliRsnCutV0.cxx:481
 AliRsnCutV0.cxx:482