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   AliDxHFEParticleSelectionMCEl.h
/// @author Hege Erdal, Matthias Richter
/// @date   2012-07-19
/// @brief  El MC selection for D-HFE correlations
///

#ifndef ALIDXHFEPARTICLESELECTIONMCEL_H
#define ALIDXHFEPARTICLESELECTIONMCEL_H

#include "AliDxHFEParticleSelectionEl.h"
#include "AliDxHFEToolsMC.h"

class THnSparse;
class TH1;

/**
 * @class AliDxHFEParticleSelectionMCEl
 * Monte Carlo electron selection for D-HFE correlations, implements the specific
 * selection criteria.
 */
class AliDxHFEParticleSelectionMCEl : public AliDxHFEParticleSelectionEl {
  public:
  /// constructor
  AliDxHFEParticleSelectionMCEl(const char* opt="");
  /// destructor
  virtual ~AliDxHFEParticleSelectionMCEl();

  //Overload Init function from electron selection class
  virtual int Init();

  // Setting up control objects: overloaded from AliDxHFEParticleSelection
  virtual THnSparse* DefineTHnSparse();

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


  /// overloaded from AliDxHFEParticleSelection: check particle
  virtual int IsSelected(AliVParticle* p, const AliVEvent *pEvent=NULL);

  /// check MC criteria
  int CheckMC(AliVParticle* p, const AliVEvent* pEvent);

  /// clear internal memory
  virtual void Clear(const char* option="");

 protected:

 private:
  /// copy contructor prohibited
  AliDxHFEParticleSelectionMCEl(const AliDxHFEParticleSelectionMCEl&);
  /// assignment operator prohibited
  AliDxHFEParticleSelectionMCEl& operator=(const AliDxHFEParticleSelectionMCEl&);

  int ParseArguments(const char* arguments);
  /// TODO: check if the label definitions can be used from the ToolsMC
  static const char* fgkPDGMotherBinLabels[];
  static const char* fgkPDGBinLabels[];
                    
  AliDxHFEToolsMC fMCTools;            // MC selection tools
  TH1*            fPDGnotMCElectron;   //! PDG of track not MC truth electron
  TH1*            fPDGNotHFMother;     //! PDG of mother not HF
  int fOriginMother;                   //  Holds the origin motherquark (process)
  int fResultMC;                       // Holds information on check on MC
  Bool_t fUseKine;                     // Run over MC stack
  vector<int> fMotherPDGs;             // list off mothers counted as background
  Bool_t fUseMCReco;                   // Run over all MC reconstructed tracks
  Int_t fSelectionStep;                // Where to stop track selection
  Bool_t          fStoreCutStepInfo;   // Whether to store which cut step is the effective one


  ClassDef(AliDxHFEParticleSelectionMCEl, 4);
};

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