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.                  *
**************************************************************************/
//
// Steering class for electron identification
// Combines detector PID objects
// For more information please check the implementation file
//
#ifndef ALIHFEPID_H
#define ALIHFEPID_H

#ifndef ROOT_TNamed
#include <TNamed.h>
#endif

#ifndef ALIHFEPIDBASE_H
#include "AliHFEpidBase.h"
#endif

#include <climits>
//#include "AliPIDResponse.h"

class AliHFEcontainer;
class AliHFEvarManager;
class AliPIDResponse;
class AliHFEpidBase;
class AliVParticle;
class AliMCParticle;

class TList;

class AliHFEpid : public TNamed{
 public:
    enum{
      kUndefined = UINT_MAX 
    };
    enum EDETtype_t {
      kMCpid = 0,
      kBAYESpid = 1,
      kITSpid = 2,
      kTPCpid = 3,
      kTRDpid = 4,
      kTOFpid = 5,
      kEMCALpid = 6,
      kNdetectorPID = 7
    };
    AliHFEpid();
    AliHFEpid(const Char_t *name);
    AliHFEpid(const AliHFEpid &c);
    AliHFEpid &operator=(const AliHFEpid &c);
    void Copy(TObject &o) const;
    ~AliHFEpid();
    
    Bool_t InitializePID(Int_t run = 0);
    Bool_t IsSelected(const AliHFEpidObject * const track, AliHFEcontainer *cont = NULL, const Char_t *contname = "trackContainer", AliHFEpidQAmanager *qa = NULL);

    Bool_t HasMCData() const { return TestBit(kHasMCData); };

    void AddDetector(TString detector, UInt_t position);
    void SetDetectorsForAnalysis(TString detectors);
    void SetPIDResponse(const AliPIDResponse * const pid);
    void SetVarManager(AliHFEvarManager *vm) { fVarManager = vm; }
    void SetHasMCData(Bool_t hasMCdata = kTRUE) { SetBit(kHasMCData, hasMCdata); };

    const AliPIDResponse *GetPIDResponse() const;
    UInt_t GetNumberOfPIDdetectors() const { return fNPIDdetectors; }
    Bool_t HasDetector(EDETtype_t det) const { return IsDetectorOn(det); }
    Bool_t IsInitialized() const { return TestBit(kIsInit); }
    void SortDetectors();
    AliHFEpidBase *GetDetPID(EDETtype_t det) const { return det < kNdetectorPID ? fDetectorPID[det] : NULL; }

    void PrintStatus() const;
    const Char_t *SortedDetectorName(Int_t det) {
      if(!TestBit(kDetectorsSorted)) SortDetectors();
      if(det < kNdetectorPID) return fgkDetectorName[fSortedOrder[det]]; 
      else return fgkDetectorName[kNdetectorPID];
    }    
    //-----Configure PID detectors with predefined stettings------
    void ConfigureTOF(Float_t TOFcut = 3.);
    void ConfigureTPCasymmetric(Double_t pmin = 0.1, Double_t pmax = 20., Double_t sigmamin = -0.2, Double_t sigmamax = 5.);
    void ConfigureTPCrejectionSimple();
    void ConfigureTPCcentralityCut(Int_t centralityBin, const char *lowerCutParam = NULL, const Double_t * const params = NULL, Float_t upperTPCCut=3.0);
    void ConfigureTPCdefaultCut(const char *lowerCutParam = NULL, const Double_t * const params = NULL, Float_t upperTPCCut=3.0);
    void ConfigureBayesDetectorMask(Int_t detmask = 10);
    void ConfigureBayesPIDThreshold(Float_t pidthres = 0.9);
    //------------------------------------------------------------

  protected:
    Bool_t MakePidTpcTof(AliHFEpidObject *track);
  private:
    enum{
      kHasMCData = BIT(14),
      kIsInit = BIT(15),
      kDetectorsSorted = BIT(16)
    };
    enum{
      kCombinedTPCTRD=0
    };
    enum{
      kTRDSignal = 0,
      kITSSignal = 1
    };

    void AddCommonObject(TObject * const o);
    void ClearCommonObjects();
    //-----Switch on/off detectors in PID sequence------
    void SwitchOnDetector(UInt_t det){ 
      if(det < kNdetectorPID) SETBIT(fEnabledDetectors, det);
    }
    void SwitchOffDetector(UInt_t det){
      if(det < kNdetectorPID) CLRBIT(fEnabledDetectors, det);
    }
    Bool_t IsDetectorOn(UInt_t det) const {
      return det < kNdetectorPID ? TESTBIT(fEnabledDetectors, det): kFALSE;
    }
    //--------------------------------------------------
    void ConfigureTPCcut(Int_t centralityBin, const char *lowerCutParam, const Double_t * const params, Float_t upperTPCCut);

    static const Char_t *fgkDetectorName[kNdetectorPID + 1]; // PID Detector Names
    AliHFEpidBase *fDetectorPID[kNdetectorPID];     //   Detector PID classes
    UInt_t fDetectorOrder[kNdetectorPID];           //   Position requested by the user
    UInt_t fSortedOrder[kNdetectorPID];             //   Sorted array of detectorIDs
    UInt_t fEnabledDetectors;                       //   Enabled Detectors
    UInt_t fNPIDdetectors;                          //   Number of PID detectors
    AliHFEvarManager *fVarManager;                  //!  HFE Var Manager
    TObjArray *fCommonObjects;                      //   Garbage Collector

  ClassDef(AliHFEpid, 1)      // Steering class for Electron ID
};

#endif
 AliHFEpid.h:1
 AliHFEpid.h:2
 AliHFEpid.h:3
 AliHFEpid.h:4
 AliHFEpid.h:5
 AliHFEpid.h:6
 AliHFEpid.h:7
 AliHFEpid.h:8
 AliHFEpid.h:9
 AliHFEpid.h:10
 AliHFEpid.h:11
 AliHFEpid.h:12
 AliHFEpid.h:13
 AliHFEpid.h:14
 AliHFEpid.h:15
 AliHFEpid.h:16
 AliHFEpid.h:17
 AliHFEpid.h:18
 AliHFEpid.h:19
 AliHFEpid.h:20
 AliHFEpid.h:21
 AliHFEpid.h:22
 AliHFEpid.h:23
 AliHFEpid.h:24
 AliHFEpid.h:25
 AliHFEpid.h:26
 AliHFEpid.h:27
 AliHFEpid.h:28
 AliHFEpid.h:29
 AliHFEpid.h:30
 AliHFEpid.h:31
 AliHFEpid.h:32
 AliHFEpid.h:33
 AliHFEpid.h:34
 AliHFEpid.h:35
 AliHFEpid.h:36
 AliHFEpid.h:37
 AliHFEpid.h:38
 AliHFEpid.h:39
 AliHFEpid.h:40
 AliHFEpid.h:41
 AliHFEpid.h:42
 AliHFEpid.h:43
 AliHFEpid.h:44
 AliHFEpid.h:45
 AliHFEpid.h:46
 AliHFEpid.h:47
 AliHFEpid.h:48
 AliHFEpid.h:49
 AliHFEpid.h:50
 AliHFEpid.h:51
 AliHFEpid.h:52
 AliHFEpid.h:53
 AliHFEpid.h:54
 AliHFEpid.h:55
 AliHFEpid.h:56
 AliHFEpid.h:57
 AliHFEpid.h:58
 AliHFEpid.h:59
 AliHFEpid.h:60
 AliHFEpid.h:61
 AliHFEpid.h:62
 AliHFEpid.h:63
 AliHFEpid.h:64
 AliHFEpid.h:65
 AliHFEpid.h:66
 AliHFEpid.h:67
 AliHFEpid.h:68
 AliHFEpid.h:69
 AliHFEpid.h:70
 AliHFEpid.h:71
 AliHFEpid.h:72
 AliHFEpid.h:73
 AliHFEpid.h:74
 AliHFEpid.h:75
 AliHFEpid.h:76
 AliHFEpid.h:77
 AliHFEpid.h:78
 AliHFEpid.h:79
 AliHFEpid.h:80
 AliHFEpid.h:81
 AliHFEpid.h:82
 AliHFEpid.h:83
 AliHFEpid.h:84
 AliHFEpid.h:85
 AliHFEpid.h:86
 AliHFEpid.h:87
 AliHFEpid.h:88
 AliHFEpid.h:89
 AliHFEpid.h:90
 AliHFEpid.h:91
 AliHFEpid.h:92
 AliHFEpid.h:93
 AliHFEpid.h:94
 AliHFEpid.h:95
 AliHFEpid.h:96
 AliHFEpid.h:97
 AliHFEpid.h:98
 AliHFEpid.h:99
 AliHFEpid.h:100
 AliHFEpid.h:101
 AliHFEpid.h:102
 AliHFEpid.h:103
 AliHFEpid.h:104
 AliHFEpid.h:105
 AliHFEpid.h:106
 AliHFEpid.h:107
 AliHFEpid.h:108
 AliHFEpid.h:109
 AliHFEpid.h:110
 AliHFEpid.h:111
 AliHFEpid.h:112
 AliHFEpid.h:113
 AliHFEpid.h:114
 AliHFEpid.h:115
 AliHFEpid.h:116
 AliHFEpid.h:117
 AliHFEpid.h:118
 AliHFEpid.h:119
 AliHFEpid.h:120
 AliHFEpid.h:121
 AliHFEpid.h:122
 AliHFEpid.h:123
 AliHFEpid.h:124
 AliHFEpid.h:125
 AliHFEpid.h:126
 AliHFEpid.h:127
 AliHFEpid.h:128
 AliHFEpid.h:129
 AliHFEpid.h:130
 AliHFEpid.h:131
 AliHFEpid.h:132
 AliHFEpid.h:133
 AliHFEpid.h:134
 AliHFEpid.h:135
 AliHFEpid.h:136
 AliHFEpid.h:137
 AliHFEpid.h:138
 AliHFEpid.h:139
 AliHFEpid.h:140
 AliHFEpid.h:141
 AliHFEpid.h:142