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   AliDxHFEParticleSelectionD0.h
/// @author Sedat Altinpinar, Hege Erdal, Matthias Richter
/// @date   2012-03-19
/// @brief  D0 selection for D-HFE correlations
///

#ifndef ALIDXHFEPARTICLESELECTIOND0_H
#define ALIDXHFEPARTICLESELECTIOND0_H

#include "AliDxHFEParticleSelection.h"

class AliVEvent;
class AliRDHFCuts;
class TList;

/**
 * @class AliDxHFEParticleSelectionD0
 * D0 selection for D-HFE correlations, implements the specific
 * selection criteria.
 */
class AliDxHFEParticleSelectionD0 : public AliDxHFEParticleSelection {
  public:
  /// constructor
  AliDxHFEParticleSelectionD0(const char* opt="");
  /// destructor
  virtual ~AliDxHFEParticleSelectionD0();

  enum {
    kCutD0 = 0,
    kCutList=1,
    kNCutObjects
  };

  enum {
    kDstar=0,
    kCandSelTrack,
    kIsInFinducialAcceptance,
    kNegPtbin,
    kNoDaugthers,
    kSelected0,
    kSelectedD0,
    kSelectedD0bar,
    kSelectedboth,
    kNCutLabels
  };

  /// overloaded from AliDxHFEParticleSelection: init the control objects
  virtual int InitControlObjects();
  virtual THnSparse* DefineTHnSparse();
  virtual int FillParticleProperties(AliVParticle* p, Double_t* date, int dimension) const;
  virtual AliVParticle* CreateParticle(AliVParticle* track);

  //Function for daughter control objects
  //TODO: move to AliDxHFEParticleSelection to be used for several particles?
  virtual int InitControlObjectsDaughters(TString name, int daughter);

  //Overloaded from AliDxHFEParticleSelection
  virtual TObjArray* Select(TObjArray* particles, const AliVEvent* pEvent);
  using AliDxHFEParticleSelection::Select;

  /// overloaded from AliDxHFEParticleSelection: check particle
  virtual int IsSelected(AliVParticle* p, const AliVEvent *pEvent=NULL);
  /// overloaded from AliDxHFEParticleSelection: set cuts
  virtual void SetCuts(TObject* /*cuts*/, int level=0);
  void SetInvMass(Double_t mass){fD0InvMass=mass;}
  void SetPtBin(Int_t ptbin){fPtBin=ptbin;}

  //AliRDHFCutsD0toKpi GetCuts()const {return fCuts;}
  Int_t  GetFillOnlyD0D0bar() const {return fFillOnlyD0D0bar;}
  Int_t GetPtBin() const {return fPtBin;}
  Double_t GetInvMass() const {return fD0InvMass;}
  AliRDHFCuts *GetHFCuts() const {return fCuts;}


 protected:
  /// overloaded from AliDxHFEParticleSelection: histogram particle properties
  virtual int HistogramParticleProperties(AliVParticle* p, int selected=1);

 private:

  int ParseArguments(const char* arguments);

  /// copy contructor prohibited
  AliDxHFEParticleSelectionD0(const AliDxHFEParticleSelectionD0&);
  /// assignment operator prohibited
  AliDxHFEParticleSelectionD0& operator=(const AliDxHFEParticleSelectionD0&);

  THnSparse* fD0Properties;     //  the particle properties of selected particles
  THnSparse* fD0Daughter0;      //  the particle properties of selected particles
  THnSparse* fD0Daughter1;      //  the particle properties of selected particles
  AliRDHFCuts* fCuts;           //! pointer to external cuts object 
  Int_t     fFillOnlyD0D0bar;   //  flag to set what to fill (0 = both, 1 = D0 only, 2 = D0bar only)
  Double_t  fD0InvMass;         // D0InvMass
  Int_t     fPtBin;             // Pt Bin
  TList*    fHistoList;         // list of histograms

  static const char* fgkDgTrackControlBinNames[]; //! bin labels for track control histogram
  static const char* fgkCutBinNames[];            //! bin labels for cut histogram

  // TODO: at the moment the dimensions of the different THnSparse objects are different
  // needs to be consolidated
  // TODO: one might need particle properties of all and/or at different cut stages

  ClassDef(AliDxHFEParticleSelectionD0, 3);
};

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