ROOT logo
//-*- Mode: C++ -*-
// // $Id$

//* This file is property of and copyright by the ALICE Project        * 
//* ALICE Experiment at CERN, All rights reserved.                     *
//* See cxx source for full Copyright notice                           *

/// @file   AliDxHFEParticleSelectionEl.h
/// @author Sedat Altinpinar, Hege Erdal, Matthias Richter
/// @date   2012-03-19
/// @brief  Electron selection for D-HFE correlations
///

#ifndef ALIDXHFEPARTICLESELECTIONEL_H
#define ALIDXHFEPARTICLESELECTIONEL_H

#include "AliDxHFEParticleSelection.h"

// 2012-09-17: there has been a problem in the dictionary generation for par file
// compilation, so we have to include the header files indicated below
//  Generating dictionary ...
//  In file included from $ROOTSYS/include/TObject.h:230:0,
//                   from G__PWGHFcorrelationHF.h:32,
//                   from G__PWGHFcorrelationHF.cxx:17:
//  $ROOTSYS/include/TBuffer.h: In function ‘TBuffer& operator>>(TBuffer&, Tmpl*&) [with Tmpl = AliHFEcuts]’:
//  G__PWGHFcorrelationHF.cxx:1658:15:   instantiated from here
//  $ROOTSYS/include/TBuffer.h:373:47: error: invalid use of incomplete type ‘struct AliHFEcuts
//  correlationHF/AliDxHFEParticleSelectionEl.h:25:7: error: forward declaration of ‘struct AliHFEcuts

#include "AliHFEcuts.h" // need to directly include to avoid compilation error in the dictionary
#include "AliHFEpid.h"  // need to directly include to avoid compilation error in the dictionary

class AliPID;
class AliPIDResponse;
class AliHFEvarManager;
class AliHFEpidBase;
class AliHFEtools;
class AliVEvent;
class AliSelectNonHFE;
class AliCFManager;
class TList;
class AliESDtrackCuts;

/**
 * @class AliDxHFEParticleSelectionEl
 * Electron selection for D-HFE correlations, implements the specific
 * selection criteria.
 */
class AliDxHFEParticleSelectionEl : public AliDxHFEParticleSelection {
  public:
  /// constructor
  AliDxHFEParticleSelectionEl(const char* opt="");
  /// destructor
  virtual ~AliDxHFEParticleSelectionEl();
  
  enum {
    kCutHFE = 0,
    kCutPIDTOFTPC = 1,
    kCutPIDTOF = 2,
    kCutPIDTPC = 3,
    kCutList=3,
    kNCuts
  };

  enum {
    kNotSelected=-2,
    kNoCuts=-1,
    kRecKineITSTPC=0,
    kRecPrim,
    kHFEcutsITS,
    kHFEcutsTOF,
    kHFEcutsTPC,
    kPIDTOF,
    kPIDTPC,
    kPIDTOFTPC,
    kINVMASS,
    kSelected,
    kNCutLabels
  };

  enum {
    kNoInvMass=0,
    kInvMassSingleSelected, // based on AliSelectNonHFE, one partcle passing track cuts
                            // and 2nd particle passing weaker cut
    kInvMassTwoSelected     // pairs of particles both passing the track cuts
  };


  ///overloaded from AliDxHFEParticleSelection: Init
  virtual int Init();

  /// overloaded from AliDxHFEParticleSelection: init the control objects
  virtual int InitControlObjects();
  virtual THnSparse* DefineTHnSparse();

  /// overloaded from AliDxHFEParticleSelection: check particle
  virtual TObjArray* Select(const AliVEvent* pEvent);
  using AliDxHFEParticleSelection::Select;

  virtual int IsSelected(AliVParticle* p, const AliVEvent* pEvent);

  virtual int HistogramParticleProperties(AliVParticle* p, int selected);

  virtual int FillParticleProperties(AliVParticle* p, Double_t* date, int dimension) const;

  /// set cuts object: a type cast check is implemented in the method
  virtual void SetCuts(TObject* /*cuts*/, int /*level*/=0);
  virtual void SetFinalCutStep(int cutstep){fFinalCutStep=cutstep;}
  virtual void SetStoreLastCutStep(bool storecut){fStoreCutStepInfo=storecut;}

  virtual void SetPIDResponse(const AliPIDResponse* const pidresp){fPIDResponse=(AliPIDResponse*)(pidresp);}
  
  Int_t GetLastSurvivedCutsStep() const{return fSurvivedCutStep;}

 protected:

 private:

  /// copy contructor prohibited
  AliDxHFEParticleSelectionEl(const AliDxHFEParticleSelectionEl&);
  /// assignment operator prohibited
  AliDxHFEParticleSelectionEl& operator=(const AliDxHFEParticleSelectionEl&);
 
  /// check cut of specified step, e.g.
  bool ProcessCutStep(Int_t cutStep, AliVParticle *track);
  int ParseArguments(const char* arguments);

  virtual void InvMassFilter(TList* elList, Bool_t* selIndx);

  AliHFEpid*    fPIDTOFTPC;          //! the PID object
  AliHFEpid*    fPIDTOF;             //! the PID TOF object
  AliHFEpid*    fPIDTPC;             //! the PID TOF object
  THnSparse*    fElectronProperties; // the particle properties of selected particles
  TList*        fHistoList;          // list of histograms
  TList*        fCutPidList;         // list for pid and cut objects
  AliPIDResponse* fPIDResponse;      // fPIDResponse
  AliHFEcuts*   fCuts;               //! Cuts for HF electrons
  AliSelectNonHFE* fSelNHFE;         // AliSelectNonHFE, inv-mass selection
  AliESDtrackCuts* fTrackCuts;       //! Track cuts for associated track for Inv Mass
  AliCFManager* fCFM;                //! Correction Framework Manager
  Int_t         fFinalCutStep;       // Holds the final cutstep
  Double_t      fInvMassLow;         // lower inv-mass cut
  Int_t         fUseInvMassCut;      // whether to use inv mass cut
  Int_t         fSystem;             // whether running on pp(0,default), PbPb(1) or pPb(2, not used yet)
  Int_t         fTrackNum;           // Current track number
  Double_t      fImpactParamCutRadial; // cut on Impact parameter (when storing all tracks)
  Double_t      fEtaCut;             // cut on eta (when storing all tracks)
  Int_t         fSurvivedCutStep;    // Last cutstep it survived
  Bool_t        fStoreCutStepInfo;   // Whether to store which cut step is the effective one

  static const char* fgkCutBinNames[]; //! bin labels for cuts histogram

  ClassDef(AliDxHFEParticleSelectionEl, 6); 
};

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