1 #ifndef ALITRDPIDREFMAKER_H
2 #define ALITRDPIDREFMAKER_H
4 ////////////////////////////////////////////////////////////
6 // Base class for the Task to build TRD-PID reference data
7 // For the actual implementation please check the classes
8 // - AliTRDpidRefMakerNN (Neural Networks)
9 // - AliTRDpidRefMakerLQ (Multidimensional Likelihood)
11 // Authors: Alex Bercuci <A.Bercuci@gsi.de>
12 // Alex Wilk <wilka@uni-muenster.de>
14 /////////////////////////////////////////////////////////////
16 #ifndef ALITRDRECOTASK_H
17 #include "AliTRDrecoTask.h"
22 #ifndef ALITRDCALPID_H
23 #include "Cal/AliTRDCalPID.h"
25 #ifndef ALITRDGEOMETRY_H
26 #include "AliTRDgeometry.h"
31 class AliTRDReconstructor;
33 class AliTRDpidRefMaker : public AliTRDrecoTask
36 enum ETRDpidRefMakerPBins {
50 enum ETRDpidRefMakerSource {
51 kV0 = 0 // use V0 as reference
52 ,kMC = 1 // use MC as reference
53 ,kRec= 2 // use Reconstructed PID as reference
56 struct AliTRDpidRefData {
57 AliTRDpidRefData() : fPLbin(0xff) {
58 memset(fdEdx, 0, 8*sizeof(Float_t));
60 virtual ~AliTRDpidRefData(){}
61 UChar_t fPLbin; // momentum / layer bin
62 Float_t fdEdx[8]; // dEdx array
63 ClassDef(AliTRDpidRefData, 1) // PID data representation
65 struct AliTRDpidRefDataArray {
66 AliTRDpidRefDataArray();
67 virtual ~AliTRDpidRefDataArray();
68 void PushBack(Int_t ly, Int_t p, Float_t *dedx);
71 Int_t fNtracklets; // number of tracklets
72 AliTRDpidRefData *fData; //[fNtracklets] PID data array
74 AliTRDpidRefDataArray(const AliTRDpidRefMaker::AliTRDpidRefDataArray& ref);
75 AliTRDpidRefDataArray& operator=(const AliTRDpidRefMaker::AliTRDpidRefDataArray& ref);
76 ClassDef(AliTRDpidRefDataArray, 1) // track PID data representation
79 AliTRDpidRefMaker(const char *name="PIDrefMaker", const char *title="PID Reference Maker");
81 virtual ~AliTRDpidRefMaker();
83 void ConnectInputData(Option_t *opt);
84 void CreateOutputObjects();
85 void Exec(Option_t *option);
86 Float_t GetPthreshold() const { return fPthreshold;}
88 void SetAbundance(Float_t train);
89 void SetPthreshold(Float_t t) { fPthreshold = t;}
90 void SetRefPID(ETRDpidRefMakerSource select, void *source, Float_t *pid);
91 void SetSource(ETRDpidRefMakerSource pid, ETRDpidRefMakerSource momentum) {fRefPID = pid; fRefP = momentum;}
95 virtual Bool_t CheckQuality(AliTRDseedV1* trklt);
96 virtual Float_t* CookdEdx(AliTRDseedV1* trklt);
97 virtual void LinkPIDdata();
100 AliTRDReconstructor *fReconstructor; //! reconstructor needed for recalculation the PID
101 TObjArray *fV0s; //! v0 array
102 TTree *fData; //! dEdx-P data
103 TObjArray *fInfo; //! list of PID info
104 AliTRDpidRefDataArray *fPIDdataArray; //! pid data array
105 ETRDpidRefMakerSource fRefPID; // reference PID source
106 ETRDpidRefMakerSource fRefP; // reference momentum source
107 UChar_t fPIDbin; //! species bin
108 Float_t fFreq; //! training sample relative abundance
109 Float_t fP; //! momentum
110 Float_t fdEdx[8]; //! dEdx array
111 Float_t fPID[AliPID::kSPECIES]; //! pid from v0s
114 AliTRDpidRefMaker(const AliTRDpidRefMaker&); // not implemented
115 AliTRDpidRefMaker& operator=(const AliTRDpidRefMaker&); // not implemented
117 Float_t fPthreshold; // momentum threshold [GeV/c]
119 ClassDef(AliTRDpidRefMaker, 3); // TRD PID reference maker base class