ffc48e0498eda176f7d8a13954e84f23a20235b6
[u/mrichter/AliRoot.git] / PWG2 / RESONANCES / AliRsnReader.h
1 //
2 // Class AliRsnReader
3 //
4 // This is the universal converter from any kind of source event
5 // (i.e. ESD, standard AOD, MC) into the internal non-standard
6 // AOD format used by RSN package.
7 // ---
8 // This class reads all tracks in an input event and converts them
9 // into AliRsnDaughters, and computes preliminarily the PID probabilities
10 // by doing the Bayesian combination of a set of assigned prior probabilities
11 // with the PID weights defined in each track.
12 // ---
13 // When filling the output event (AliRsnEvent), some arrays of indexes
14 // are created in order to organize tracks according to their PID and charge,
15 // which will then be used in further analysis steps.
16 //
17 // author: A. Pulvirenti (alberto.pulvirenti@ct.infn.it)
18 //
19
20 #ifndef ALIRSNREADER_H
21 #define ALIRSNREADER_H
22
23 #include <TNamed.h>
24
25 #include "AliESDtrackCuts.h"
26
27 #include "AliRsnDaughter.h"
28 #include "AliRsnPIDDefESD.h"
29 #include "AliRsnCutSet.h"
30
31 class AliVEvent;
32 class AliESDEvent;
33 class AliAODEvent;
34 class AliMCEvent;
35 class AliRsnEvent;
36
37 class AliRsnReader : public TObject
38 {
39   public:
40
41     AliRsnReader();
42     virtual ~AliRsnReader() { }
43
44     void    SetCheckSplit(Bool_t doit = kTRUE) {fCheckSplit = doit;}
45     Bool_t  AreSplitted(AliESDtrack *track1, AliESDtrack *track2);
46     Bool_t  ResolveSplit(AliESDtrack *track1, AliESDtrack *track2);
47     Bool_t  DoesCheckSplit() {return fCheckSplit;}
48
49     void    SetRejectFakes(Bool_t doit = kTRUE) {fRejectFakes = doit;}
50     Bool_t  DoesRejectFakes() {return fRejectFakes;}
51
52     void    SetTPCOnly(Bool_t doit = kTRUE);
53     Bool_t  DoesTPCOnly() {return fTPCOnly;}
54
55     void    SetUseESDTrackCuts(Bool_t doit = kTRUE) {fUseESDTrackCuts = doit;}
56     Bool_t  DoesESDTrackCuts() {return fUseESDTrackCuts;}
57     AliESDtrackCuts* GetESDTrackCuts() {return &fESDTrackCuts;}
58
59     void    SetUseRsnTrackCuts(Bool_t doit = kTRUE) {fUseRsnTrackCuts = doit;}
60     Bool_t  DoesRsnTrackCuts() {return fUseRsnTrackCuts;}
61     AliRsnCutSet* GetRsnTrackCuts() {return &fRsnTrackCuts;}
62
63     AliRsnPIDDefESD* GetPIDDef() {return &fPIDDef;}
64
65     void SetTrackRefs(Int_t value) {fTrackRefs = value;}
66     void SetTrackRefsITS(Int_t value) {fTrackRefsITS = value;}
67     void SetTrackRefsTPC(Int_t value) {fTrackRefsTPC = value;}
68
69     void SetMinITSClusters(Int_t value) {fITSClusters = value;}
70     void SetMinTPCClusters(Int_t value) {fTPCClusters = value;}
71     void SetMinTRDClusters(Int_t value) {fTRDClusters = value;}
72     void SetITSTPCTRDSectors(const Int_t& its = -1, const Int_t& tpc = -1, const Int_t& trd = -1);
73
74     Bool_t  ConvertTrack(AliRsnDaughter *daughter, AliESDtrack *track);
75     Bool_t  ConvertTrack(AliRsnDaughter *daughter, AliAODTrack *track);
76     Bool_t  ConvertTrack(AliRsnDaughter *daughter, TParticle *particle);
77
78     Bool_t  Fill(AliRsnEvent *rsn, AliVEvent *event, AliMCEvent *refMC = 0);
79     Bool_t  FillFromESD(AliRsnEvent *rsn, AliESDEvent *event, AliMCEvent *refMC = 0);
80     Bool_t  FillFromAOD(AliRsnEvent *rsn, AliAODEvent *event, AliMCEvent *refMC = 0);
81     Bool_t  FillFromMC(AliRsnEvent *rsn, AliMCEvent *mc);
82
83   private:
84
85     // dummy copy methods
86     AliRsnReader(const AliRsnReader &copy) :
87       TObject(copy),fCheckSplit(0),fRejectFakes(0),fTPCOnly(0),fUseESDTrackCuts(0),fUseRsnTrackCuts(0),
88       fPIDDef(copy.fPIDDef),fITSClusters(0),fTPCClusters(0),fTRDClusters(0),
89       fTrackRefs(0),fTrackRefsITS(0),fTrackRefsTPC(0),fESDTrackCuts(),fRsnTrackCuts("") { /*nothing*/ }
90     AliRsnReader& operator=(const AliRsnReader&) {return (*this);}
91
92     Bool_t          fCheckSplit;       // flag to check and remove split tracks
93     Bool_t          fRejectFakes;      // flag to reject fake tracks (negative label)
94     Bool_t          fTPCOnly;          // flag to use only the TPC for reading data
95     Bool_t          fUseESDTrackCuts;  // flag to use ESD track cuts
96     Bool_t          fUseRsnTrackCuts;  // flag to use ESD track cuts
97
98     AliRsnPIDDefESD fPIDDef;           // manager for alternative PID weights (ESD only)
99
100     Int_t           fITSClusters;      // minimum number of ITS clusters to accept a track
101     Int_t           fTPCClusters;      // minimum number of TPC clusters to accept a track
102     Int_t           fTRDClusters;      // minimum number of TRD clusters to accept a track
103
104     Int_t           fTrackRefs;        // minimum required track references for MC reading
105     Int_t           fTrackRefsITS;     // minimum required track references for MC reading (ITS)
106     Int_t           fTrackRefsTPC;     // minimum required track references for MC reading (TPC)
107
108     AliESDtrackCuts fESDTrackCuts;     // object for ESD track cuts
109     AliRsnCutSet    fRsnTrackCuts;     // other local cuts used in preliminary track selection
110
111     ClassDef(AliRsnReader, 1);
112 };
113
114 #endif