ROOT logo
/**************************************************************************
 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 *                                                                        *
 * Author: The ALICE Off-line Project.                                    *
 * Contributors are mentioned in the code where appropriate.              *
 *                                                                        *
 * Permission to use, copy, modify and distribute this software and its   *
 * documentation strictly for non-commercial purposes is hereby granted   *
 * without fee, provided that the above copyright notice appears in all   *
 * copies and that both the copyright notice and this permission notice   *
 * appear in the supporting documentation. The authors make no claims     *
 * about the suitability of this software for any purpose. It is          *
 * provided "as is" without express or implied warranty.                  *
 **************************************************************************/
//
// TRD PID Cut Class
// Does PID either on a x% electron efficiency basis or on dE/dx
// For more information please check the implementation file
//
#ifndef ALIDIELECTRONTRDPIDCUT_H
#define ALIDIELECTRONTRDPIDCUT_H

#include <AliAnalysisCuts.h>

class AliESDtrack;
class AliVParticle;

class AliDielectronTRDpidCut : public AliAnalysisCuts{
public:
  typedef enum{
    kLQ = 0,
    kNN = 1
  } PIDMethodTRD_t;
  enum{
    kThreshParams = 24
  };
  enum{
    kHistTRDlikeBefore = 0,
    kHistTRDlikeAfter = 1,
    kHistTRDthresholds = 2,
    kHistTRDSigV1 = 3,
    kHistTRDSigV2 = 4,
    kHistOverallSpecies = 5
  };
  enum PIDbitType {kIgnore=0, kRequire, kIfAvailable};
  AliDielectronTRDpidCut();
  AliDielectronTRDpidCut(const Char_t *name);
  AliDielectronTRDpidCut(const AliDielectronTRDpidCut &ref);
  AliDielectronTRDpidCut& operator=(const AliDielectronTRDpidCut &ref);
  virtual ~AliDielectronTRDpidCut();

  virtual Bool_t InitializePID();

  Double_t GetTRDSignalV1(const AliESDtrack *track, Float_t truncation = 0.7) const;
  Double_t GetTRDSignalV2(const AliESDtrack *track, Float_t trucation = 0.7) const;

  Bool_t IsCalculateTRDSignals() const { return TestBit(kTRDsignals); }
  Bool_t IsRenormalizeElPi() const { return TestBit(kTRDrenormalize); }
  void SetPIDBitType(UInt_t pidBitType=AliDielectronTRDpidCut::kRequire) { fRequirePIDbit = pidBitType; };
  void SetPIDMethod(PIDMethodTRD_t method) { fPIDMethod = method; };
  void SetRenormalizeElPi(Bool_t doRenorm = kTRUE) { if(doRenorm) SetBit(kTRDrenormalize, kTRUE); else SetBit(kTRDrenormalize, kFALSE);}
  void SetElectronEfficiency(Double_t electronEfficiency) { fElectronEfficiency = electronEfficiency; }
  void SetThresholdParameters(Double_t electronEff, Double_t *params);
  void SetMinP(Double_t p) { fMinP = p; }
  void CalculateTRDSignals(Bool_t docalc) { SetBit(kTRDsignals, docalc); }

  Double_t GetElectronLikelihood(const AliVParticle *track) const;
  void     GetTRDmomenta(const AliVParticle *track, Double_t *mom) const;
  Double_t GetP(const AliVParticle *track) const;
  Double_t GetTRDthresholds(Double_t electronEff, Double_t p) const;
  Double_t GetChargeLayer(const AliVParticle *track, UInt_t layer) const;

  //
  //Analysis cuts interface
  //
  virtual Bool_t IsSelected(TObject* track);
  virtual Bool_t IsSelected(TList*   /* list */ ) {return kFALSE;}
  
protected:
  enum{
    kTRDsignals = BIT(16),
    kTRDdefaultThresholds = BIT(17),
    kTRDrenormalize = BIT(18)
  };
  void Copy(TObject &ref) const;
  void InitParameters();
  void InitParameters1DLQ();
  void GetParameters(Double_t electronEff, Double_t *parameters) const;
  void SetUseDefaultParameters(Bool_t useDefault = kTRUE) { SetBit(kTRDdefaultThresholds, useDefault); }
  Bool_t UseDefaultParameters() const { return TestBit(kTRDdefaultThresholds); }
  void RenormalizeElPi(const Double_t *likein, Double_t *likeout) const;

private:
  static const Double_t fgkVerySmall;                     // Check for 0
  Double_t fMinP;                                         // Minimum momentum above which TRD PID is applied
  Double_t fElectronEfficiency;                           // Cut on electron efficiency
  PIDMethodTRD_t fPIDMethod;                              // PID Method: 2D Likelihood or Neural Network
  UChar_t  fRequirePIDbit;                                //How to make use of the pid bit (see)
  Double_t fThreshParams[kThreshParams];                  // Threshold parametrisation
  ClassDef(AliDielectronTRDpidCut, 1)     // TRD electron ID class
};

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