AliRsnReader:
[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    SetCheckVertexStatus(Bool_t doit = kTRUE);
56     Bool_t  DoesCheckVertexStatus() {return fCheckVertexStatus;}
57     void    SetMinNContributors(Int_t n) {fMinNContributors = n;}
58
59     void    SetUseESDTrackCuts(Bool_t doit = kTRUE) {fUseESDTrackCuts = doit;}
60     Bool_t  DoesESDTrackCuts() {return fUseESDTrackCuts;}
61     AliESDtrackCuts* GetESDTrackCuts() {return &fESDTrackCuts;}
62
63     void    SetUseRsnTrackCuts(Bool_t doit = kTRUE) {fUseRsnTrackCuts = doit;}
64     Bool_t  DoesRsnTrackCuts() {return fUseRsnTrackCuts;}
65     AliRsnCutSet* GetRsnTrackCuts() {return &fRsnTrackCuts;}
66
67     AliRsnPIDDefESD* GetPIDDef() {return &fPIDDef;}
68
69     void SetTrackRefs(Int_t value) {fTrackRefs = value;}
70     void SetTrackRefsITS(Int_t value) {fTrackRefsITS = value;}
71     void SetTrackRefsTPC(Int_t value) {fTrackRefsTPC = value;}
72
73     void SetMinITSClusters(Int_t value) {fITSClusters = value;}
74     void SetMinTPCClusters(Int_t value) {fTPCClusters = value;}
75     void SetMinTRDClusters(Int_t value) {fTRDClusters = value;}
76     void SetITSTPCTRDSectors(const Int_t& its = -1, const Int_t& tpc = -1, const Int_t& trd = -1);
77
78     Bool_t  ConvertTrack(AliRsnDaughter *daughter, AliESDtrack *track);
79     Bool_t  ConvertTrack(AliRsnDaughter *daughter, AliAODTrack *track);
80     Bool_t  ConvertTrack(AliRsnDaughter *daughter, TParticle *particle);
81
82     Bool_t  Fill(AliRsnEvent *rsn, AliVEvent *event, AliMCEvent *refMC = 0);
83     Bool_t  FillFromESD(AliRsnEvent *rsn, AliESDEvent *event, AliMCEvent *refMC = 0);
84     Bool_t  FillFromAOD(AliRsnEvent *rsn, AliAODEvent *event, AliMCEvent *refMC = 0);
85     Bool_t  FillFromMC(AliRsnEvent *rsn, AliMCEvent *mc);
86
87   private:
88
89     // dummy copy methods
90     AliRsnReader(const AliRsnReader &copy) :
91       TObject(copy),fCheckSplit(0),fRejectFakes(0),fTPCOnly(0),
92       fUseESDTrackCuts(0),fUseRsnTrackCuts(0),fCheckVertexStatus(kFALSE),
93       fMinNContributors(0),fPIDDef(copy.fPIDDef),fITSClusters(0),fTPCClusters(0),fTRDClusters(0),
94       fTrackRefs(0),fTrackRefsITS(0),fTrackRefsTPC(0),fESDTrackCuts(),fRsnTrackCuts("") { /*nothing*/ }
95     AliRsnReader& operator=(const AliRsnReader&) {return (*this);}
96
97     Bool_t          fCheckSplit;         // flag to check and remove split tracks
98     Bool_t          fRejectFakes;        // flag to reject fake tracks (negative label)
99     Bool_t          fTPCOnly;            // flag to use only the TPC for reading data
100     Bool_t          fUseESDTrackCuts;    // flag to use ESD track cuts
101     Bool_t          fUseRsnTrackCuts;    // flag to use ESD track cuts
102
103     Bool_t          fCheckVertexStatus;  // reject events with vertex status = kFALSE
104     Int_t           fMinNContributors;   // reject events whose primary vertex has too few contributors
105
106     AliRsnPIDDefESD fPIDDef;             // manager for alternative PID weights (ESD only)
107
108     Int_t           fITSClusters;        // minimum number of ITS clusters to accept a track
109     Int_t           fTPCClusters;        // minimum number of TPC clusters to accept a track
110     Int_t           fTRDClusters;        // minimum number of TRD clusters to accept a track
111
112     Int_t           fTrackRefs;          // minimum required track references for MC reading
113     Int_t           fTrackRefsITS;       // minimum required track references for MC reading (ITS)
114     Int_t           fTrackRefsTPC;       // minimum required track references for MC reading (TPC)
115
116     AliESDtrackCuts fESDTrackCuts;       // object for ESD track cuts
117     AliRsnCutSet    fRsnTrackCuts;       // other local cuts used in preliminary track selection
118
119     ClassDef(AliRsnReader, 1);
120 };
121
122 #endif