ROOT logo
#ifndef ALITRDPIDREFMAKER_H
#define ALITRDPIDREFMAKER_H

////////////////////////////////////////////////////////////
//
// Base class for the Task to build TRD-PID reference data
// For the actual implementation please check the classes
//   - AliTRDpidRefMakerNN (Neural Networks)
//   - AliTRDpidRefMakerLQ (Multidimensional Likelihood)
//
// Authors: Alex Bercuci <A.Bercuci@gsi.de>
//          Alex Wilk    <wilka@uni-muenster.de>
//
/////////////////////////////////////////////////////////////

#ifndef ALITRDRECOTASK_H
#include "AliTRDrecoTask.h"
#endif
#ifndef ALITRDPIDUTIL_H
#include "AliTRDpidUtil.h"
#endif

class TTree;
class TObjArray;
class AliTRDseedV1;
class AliTRDtrackInfo;
class AliTRDpidInfo;
class AliTRDpidRefMaker : public AliTRDrecoTask
{
public:
  enum ETRDpidRefMakerPBins {
    k006  =  0
    ,k008 =  1
    ,k010 =  2
    ,k015 =  3
    ,k020 =  4
    ,k030 =  5
    ,k040 =  6
    ,k050 =  7
    ,k060 =  8
    ,k080 =  9
    ,k100 = 10
    ,kAll = 11
  };
  enum ETRDpidRefMakerSource {
    kV0 = 0 // use V0 as reference
   ,kMC = 1 // use MC as reference
   ,kRec= 2 // use Reconstructed PID as reference
  };

  AliTRDpidRefMaker();
  AliTRDpidRefMaker(const char *name, const char *title);

  virtual ~AliTRDpidRefMaker();
  
  void    UserCreateOutputObjects();
  void    UserExec(Option_t *option);
  Float_t GetPthreshold() const { return fPthreshold;}

  void    SetAbundance(Float_t train);
  void    SetPthreshold(Float_t t) { fPthreshold = t;}
  void    SetRefPID(ETRDpidRefMakerSource select, AliTRDtrackInfo *t, const AliTRDtrackInfo::AliESDinfo *infoESD, Float_t *pid);
  void    SetSource(ETRDpidRefMakerSource pid, ETRDpidRefMakerSource momentum) {fRefPID = pid; fRefP = momentum;}


protected:
  virtual Bool_t   CheckQuality(AliTRDseedV1* trklt);
  virtual Float_t* CookdEdx(AliTRDseedV1* trklt);
  virtual void     LinkPIDdata();
  virtual void     Fill();

  TObjArray     *fV0s;                  //! v0 array
  TTree         *fData;                 //! dEdx-P data
  TObjArray     *fInfo;                 //! list of PID info
  AliTRDpidInfo *fPIDdataArray;         //! pid data array
  ETRDpidRefMakerSource  fRefPID;       // reference PID source
  ETRDpidRefMakerSource  fRefP;         // reference momentum source
  Float_t       fFreq;                  // training sample relative abundance
  Float_t       fP;                     // momentum
  Float_t       fdEdx[AliTRDpidUtil::kNNslices];// dEdx array
  Float_t       fPID[AliPID::kSPECIES]; // pid from v0s

private:
  AliTRDpidRefMaker(const AliTRDpidRefMaker&);              // not implemented
  AliTRDpidRefMaker& operator=(const AliTRDpidRefMaker&);   // not implemented

  Float_t        fPthreshold;            // momentum threshold [GeV/c]

  ClassDef(AliTRDpidRefMaker, 4); // TRD PID reference  maker base class
};

#endif
 AliTRDpidRefMaker.h:1
 AliTRDpidRefMaker.h:2
 AliTRDpidRefMaker.h:3
 AliTRDpidRefMaker.h:4
 AliTRDpidRefMaker.h:5
 AliTRDpidRefMaker.h:6
 AliTRDpidRefMaker.h:7
 AliTRDpidRefMaker.h:8
 AliTRDpidRefMaker.h:9
 AliTRDpidRefMaker.h:10
 AliTRDpidRefMaker.h:11
 AliTRDpidRefMaker.h:12
 AliTRDpidRefMaker.h:13
 AliTRDpidRefMaker.h:14
 AliTRDpidRefMaker.h:15
 AliTRDpidRefMaker.h:16
 AliTRDpidRefMaker.h:17
 AliTRDpidRefMaker.h:18
 AliTRDpidRefMaker.h:19
 AliTRDpidRefMaker.h:20
 AliTRDpidRefMaker.h:21
 AliTRDpidRefMaker.h:22
 AliTRDpidRefMaker.h:23
 AliTRDpidRefMaker.h:24
 AliTRDpidRefMaker.h:25
 AliTRDpidRefMaker.h:26
 AliTRDpidRefMaker.h:27
 AliTRDpidRefMaker.h:28
 AliTRDpidRefMaker.h:29
 AliTRDpidRefMaker.h:30
 AliTRDpidRefMaker.h:31
 AliTRDpidRefMaker.h:32
 AliTRDpidRefMaker.h:33
 AliTRDpidRefMaker.h:34
 AliTRDpidRefMaker.h:35
 AliTRDpidRefMaker.h:36
 AliTRDpidRefMaker.h:37
 AliTRDpidRefMaker.h:38
 AliTRDpidRefMaker.h:39
 AliTRDpidRefMaker.h:40
 AliTRDpidRefMaker.h:41
 AliTRDpidRefMaker.h:42
 AliTRDpidRefMaker.h:43
 AliTRDpidRefMaker.h:44
 AliTRDpidRefMaker.h:45
 AliTRDpidRefMaker.h:46
 AliTRDpidRefMaker.h:47
 AliTRDpidRefMaker.h:48
 AliTRDpidRefMaker.h:49
 AliTRDpidRefMaker.h:50
 AliTRDpidRefMaker.h:51
 AliTRDpidRefMaker.h:52
 AliTRDpidRefMaker.h:53
 AliTRDpidRefMaker.h:54
 AliTRDpidRefMaker.h:55
 AliTRDpidRefMaker.h:56
 AliTRDpidRefMaker.h:57
 AliTRDpidRefMaker.h:58
 AliTRDpidRefMaker.h:59
 AliTRDpidRefMaker.h:60
 AliTRDpidRefMaker.h:61
 AliTRDpidRefMaker.h:62
 AliTRDpidRefMaker.h:63
 AliTRDpidRefMaker.h:64
 AliTRDpidRefMaker.h:65
 AliTRDpidRefMaker.h:66
 AliTRDpidRefMaker.h:67
 AliTRDpidRefMaker.h:68
 AliTRDpidRefMaker.h:69
 AliTRDpidRefMaker.h:70
 AliTRDpidRefMaker.h:71
 AliTRDpidRefMaker.h:72
 AliTRDpidRefMaker.h:73
 AliTRDpidRefMaker.h:74
 AliTRDpidRefMaker.h:75
 AliTRDpidRefMaker.h:76
 AliTRDpidRefMaker.h:77
 AliTRDpidRefMaker.h:78
 AliTRDpidRefMaker.h:79
 AliTRDpidRefMaker.h:80
 AliTRDpidRefMaker.h:81
 AliTRDpidRefMaker.h:82
 AliTRDpidRefMaker.h:83
 AliTRDpidRefMaker.h:84
 AliTRDpidRefMaker.h:85
 AliTRDpidRefMaker.h:86
 AliTRDpidRefMaker.h:87
 AliTRDpidRefMaker.h:88
 AliTRDpidRefMaker.h:89
 AliTRDpidRefMaker.h:90
 AliTRDpidRefMaker.h:91
 AliTRDpidRefMaker.h:92