ROOT logo
#ifndef ALIRSNEVENT_H
#define ALIRSNEVENT_H

/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 * See cxx source for full Copyright notice                               */

////////////////////////////////////////////////////////////////////////////////
//
//  Interface to full event.
//
////////////////////////////////////////////////////////////////////////////////

#include <TClonesArray.h>

#include "AliLog.h"

#include "AliStack.h"
#include "AliVEvent.h"
#include "AliMCEvent.h"
#include "AliESDEvent.h"
#include "AliAODEvent.h"
#include "AliAODMCParticle.h"

#include "AliRsnDaughter.h"

class AliRsnCutSet;
class AliPIDResponse;

class AliRsnEvent : public TObject {
public:

   AliRsnEvent(AliVEvent *ref = 0, AliVEvent *refMC = 0);
   AliRsnEvent(const AliRsnEvent &copy);
   AliRsnEvent &operator= (const AliRsnEvent &copy);
   virtual ~AliRsnEvent();

   // basic setters/getters
   void             SetRef(AliVEvent *ref)              {fRef = ref;}
   void             SetRefMC(AliVEvent *refmc);
   void             SetPIDResponse(AliPIDResponse *pid) {fPID = pid;}
   AliVEvent       *GetRef()                            {return fRef;}
   AliVEvent       *GetRefMC()                          {return fRefMC;}
   Int_t            GetLeadingIndex() const             {return fLeading;}
   AliPIDResponse  *GetPIDResponse()                    {return fPID;}

   // getters which convert into allowed input types
   Bool_t           Match(AliVEvent *ev, TClass *ref) {if (ev) return (ev->InheritsFrom(ref)); return kFALSE;}
   Bool_t           IsESD()                           {return (Match(fRef, AliESDEvent::Class()));}
   Bool_t           IsAOD()                           {return (Match(fRef, AliAODEvent::Class()));}
   Bool_t           InputOK();
   AliESDEvent     *GetRefESD()                       {if (IsESD()) return (AliESDEvent *)fRef;   return 0x0;}
   AliMCEvent      *GetRefMCESD()                     {if (IsESD()) return (AliMCEvent *)fRefMC; return 0x0;}
   AliAODEvent     *GetRefAOD()                       {if (IsAOD()) return (AliAODEvent *)fRef;   return 0x0;}
   AliAODEvent     *GetRefMCAOD()                     {if (IsAOD()) return (AliAODEvent *)fRefMC; return 0x0;}
   TClonesArray    *GetAODList()                      {return fAODList;}
   Bool_t           HasMC()                           {if (IsESD()) return (fRefMC != 0x0); else if (IsAOD()) return (fRefMC != 0x0 && fAODList != 0x0); return kFALSE;}

   // setters for a daughter
   void             SetDaughter          (AliRsnDaughter &daughter, Int_t index, Bool_t fromMC = kFALSE);
   AliRsnDaughter   GetDaughter          (Int_t index, Bool_t fromMC);
   void             SetDaughterESDtrack  (AliRsnDaughter &target, Int_t index);
   void             SetDaughterESDv0     (AliRsnDaughter &target, Int_t index);
   void             SetDaughterESDcascade(AliRsnDaughter &target, Int_t index);
   void             SetDaughterESDMCtrack(AliRsnDaughter &target, Int_t index);
   void             SetDaughterAODtrack  (AliRsnDaughter &target, Int_t index);
   void             SetDaughterAODv0     (AliRsnDaughter &target, Int_t index);
   void             SetDaughterAODcascade(AliRsnDaughter &target, Int_t index);
   void             SetDaughterAODMCtrack(AliRsnDaughter &target, Int_t index);
   Bool_t           SetMCInfoESD         (AliRsnDaughter &target);
   Bool_t           SetMCInfoAOD         (AliRsnDaughter &target);

   // counters/converters of candidates
   Int_t            GetAbsoluteSum() {if (fRef) return (fRef->GetNumberOfTracks() + fRef->GetNumberOfV0s() + fRef->GetNumberOfCascades()); return 0;}
   Bool_t           ConvertAbsoluteIndex(Int_t index, Int_t &realIndex, AliRsnDaughter::ERefType &type);
   Int_t            ConvertRealIndex(Int_t index, AliRsnDaughter::ERefType type);

   // leading particle stuff
   void             SetLeadingParticle(AliRsnDaughter &leading) {if (fLeading >= 0) SetDaughter(leading, fLeading, kFALSE);}
   Int_t            SelectLeadingParticle(AliRsnCutSet *cuts = 0x0);

private:

   AliVEvent      *fRef;            //  pointer to input event
   AliVEvent      *fRefMC;          //  pointer to reference MC event (if any)
   Int_t           fLeading;        //  index of leading track
   AliPIDResponse *fPID;            //  pointer to PID response
   TClonesArray   *fAODList;        //  pointer to AOD list of particles (if any)

   ClassDef(AliRsnEvent, 6);
};

inline Bool_t AliRsnEvent::InputOK()
{
//
// Check that input is ESD or AOD
//

   if (IsESD()) {
      AliDebugClass(1, "Input is ESD");
      return kTRUE;
   } else if (IsAOD()) {
      AliDebugClass(1, "Input is AOD");
      return kTRUE;
   } else {
      AliError("Need to process ESD or AOD input");
      return kFALSE;
   }
}

inline void AliRsnEvent::SetRefMC(AliVEvent *mc)
{
//
// Assign pointer to MC event.
// If it is an AOD, retrieve the list of MC particles
//

   if (!mc) {
      fRefMC = 0x0;
      fAODList = 0x0;
      return;
   }

   fRefMC = mc;
   fAODList = 0x0;
   if (fRefMC->InheritsFrom(AliAODEvent::Class())) {
      AliAODEvent *aod = (AliAODEvent *)mc;
      fAODList = (TClonesArray *)(aod->GetList()->FindObject(AliAODMCParticle::StdBranchName()));
      if (!fAODList) fRefMC = 0x0;
   }
}

#endif
 AliRsnEvent.h:1
 AliRsnEvent.h:2
 AliRsnEvent.h:3
 AliRsnEvent.h:4
 AliRsnEvent.h:5
 AliRsnEvent.h:6
 AliRsnEvent.h:7
 AliRsnEvent.h:8
 AliRsnEvent.h:9
 AliRsnEvent.h:10
 AliRsnEvent.h:11
 AliRsnEvent.h:12
 AliRsnEvent.h:13
 AliRsnEvent.h:14
 AliRsnEvent.h:15
 AliRsnEvent.h:16
 AliRsnEvent.h:17
 AliRsnEvent.h:18
 AliRsnEvent.h:19
 AliRsnEvent.h:20
 AliRsnEvent.h:21
 AliRsnEvent.h:22
 AliRsnEvent.h:23
 AliRsnEvent.h:24
 AliRsnEvent.h:25
 AliRsnEvent.h:26
 AliRsnEvent.h:27
 AliRsnEvent.h:28
 AliRsnEvent.h:29
 AliRsnEvent.h:30
 AliRsnEvent.h:31
 AliRsnEvent.h:32
 AliRsnEvent.h:33
 AliRsnEvent.h:34
 AliRsnEvent.h:35
 AliRsnEvent.h:36
 AliRsnEvent.h:37
 AliRsnEvent.h:38
 AliRsnEvent.h:39
 AliRsnEvent.h:40
 AliRsnEvent.h:41
 AliRsnEvent.h:42
 AliRsnEvent.h:43
 AliRsnEvent.h:44
 AliRsnEvent.h:45
 AliRsnEvent.h:46
 AliRsnEvent.h:47
 AliRsnEvent.h:48
 AliRsnEvent.h:49
 AliRsnEvent.h:50
 AliRsnEvent.h:51
 AliRsnEvent.h:52
 AliRsnEvent.h:53
 AliRsnEvent.h:54
 AliRsnEvent.h:55
 AliRsnEvent.h:56
 AliRsnEvent.h:57
 AliRsnEvent.h:58
 AliRsnEvent.h:59
 AliRsnEvent.h:60
 AliRsnEvent.h:61
 AliRsnEvent.h:62
 AliRsnEvent.h:63
 AliRsnEvent.h:64
 AliRsnEvent.h:65
 AliRsnEvent.h:66
 AliRsnEvent.h:67
 AliRsnEvent.h:68
 AliRsnEvent.h:69
 AliRsnEvent.h:70
 AliRsnEvent.h:71
 AliRsnEvent.h:72
 AliRsnEvent.h:73
 AliRsnEvent.h:74
 AliRsnEvent.h:75
 AliRsnEvent.h:76
 AliRsnEvent.h:77
 AliRsnEvent.h:78
 AliRsnEvent.h:79
 AliRsnEvent.h:80
 AliRsnEvent.h:81
 AliRsnEvent.h:82
 AliRsnEvent.h:83
 AliRsnEvent.h:84
 AliRsnEvent.h:85
 AliRsnEvent.h:86
 AliRsnEvent.h:87
 AliRsnEvent.h:88
 AliRsnEvent.h:89
 AliRsnEvent.h:90
 AliRsnEvent.h:91
 AliRsnEvent.h:92
 AliRsnEvent.h:93
 AliRsnEvent.h:94
 AliRsnEvent.h:95
 AliRsnEvent.h:96
 AliRsnEvent.h:97
 AliRsnEvent.h:98
 AliRsnEvent.h:99
 AliRsnEvent.h:100
 AliRsnEvent.h:101
 AliRsnEvent.h:102
 AliRsnEvent.h:103
 AliRsnEvent.h:104
 AliRsnEvent.h:105
 AliRsnEvent.h:106
 AliRsnEvent.h:107
 AliRsnEvent.h:108
 AliRsnEvent.h:109
 AliRsnEvent.h:110
 AliRsnEvent.h:111
 AliRsnEvent.h:112
 AliRsnEvent.h:113
 AliRsnEvent.h:114
 AliRsnEvent.h:115
 AliRsnEvent.h:116
 AliRsnEvent.h:117
 AliRsnEvent.h:118
 AliRsnEvent.h:119
 AliRsnEvent.h:120
 AliRsnEvent.h:121
 AliRsnEvent.h:122
 AliRsnEvent.h:123
 AliRsnEvent.h:124
 AliRsnEvent.h:125
 AliRsnEvent.h:126
 AliRsnEvent.h:127
 AliRsnEvent.h:128
 AliRsnEvent.h:129
 AliRsnEvent.h:130
 AliRsnEvent.h:131
 AliRsnEvent.h:132