ROOT logo
#ifndef ALIANALYSISTASKDIELECTRONFILTER_H
#define ALIANALYSISTASKDIELECTRONFILTER_H
/* Copyright(c) 1998-2009, ALICE Experiment at CERN, All rights reserved. *
 * See cxx source for full Copyright notice                               */

//#####################################################
//#                                                   # 
//#        Dielectron even filter task                #
//#                                                   #
//#                                                   #
//#  by WooJin J. Park, GSI / W.J.Park@gsi.de         #
//#     Ionut C. Arsene, GSI / I.C.Arsene@gsi.de      #
//#     Magnus Mager, CERN / Magnus.Mager@cern.ch     #
//#     Jens Wiechula, Uni HD / Jens.Wiechula@cern.ch #
//#                                                   #
//#####################################################
/*
Filter Event based on cuts provided in the AliDielectron class.

Write an AOD file containing events with Dielectron candidates.
Add a sattelite AOD with the array of candidates.
*/



#include "AliAnalysisTaskSE.h"

#include "AliDielectronPID.h"

class AliDielectron;
class TH1D;
class AliTriggerAnalysis;
class AliAODCaloCluster;

class AliAnalysisTaskDielectronFilter : public AliAnalysisTaskSE {
  
public:
  AliAnalysisTaskDielectronFilter();
  AliAnalysisTaskDielectronFilter(const char *name);
  virtual ~AliAnalysisTaskDielectronFilter(){}

  enum ETriggerLogig {kAny, kExact};

  virtual void UserExec(Option_t *option);
  virtual void Init();
  virtual void UserCreateOutputObjects();
  virtual void LocalInit() {Init();}
  //temporary
  virtual void NotifyRun(){AliDielectronPID::SetCorrVal((Double_t)fCurrentRunNumber);}
  
  void UsePhysicsSelection(Bool_t phy=kTRUE) {fSelectPhysics=phy;}
  void SetTriggerMask(UInt_t mask) {fTriggerMask=mask;}
  UInt_t GetTriggerMask() const { return fTriggerMask; }
  void SetExcludeTriggerMask(ULong64_t mask) {fExcludeTriggerMask=mask;}
  UInt_t GetExcludeTriggerMask() const { return fExcludeTriggerMask; }
  void SetTriggerLogic(ETriggerLogig log) {fTriggerLogic=log;}
  ETriggerLogig GetTriggerLogic() const {return fTriggerLogic;}
  

  void SetDielectron(AliDielectron * const die) { fDielectron = die; }

  void SetStoreLikeSignCandidates(Bool_t storeLS) { fStoreLikeSign = storeLS; }
  void SetStoreRotatedPairs(Bool_t storeTR) { fStoreRotatedPairs = storeTR; }
  void SetStoreEventsWithSingleTracks(Bool_t storeSingleTrk) { fStoreEventsWithSingleTracks = storeSingleTrk; }
  void SetCreateNanoAODs(Bool_t storeTrackRef) { fCreateNanoAOD = storeTrackRef; }
  void SetStoreHeader(Bool_t storeHeader) { fStoreHeader = storeHeader; }

  void SetEventFilter(AliAnalysisCuts * const filter) {fEventFilter=filter;}

private:
  enum {kAllEvents=0, kSelectedEvents, kV0andEvents, kFilteredEvents, kPileupEvents, kNbinsEvent};  

  AliDielectron *fDielectron;             // J/psi framework object

  Bool_t fSelectPhysics;                  // Whether to use physics selection
  UInt_t fTriggerMask;               // Event trigger mask
  UInt_t fExcludeTriggerMask;        // Triggers to exclude from the analysis
  Bool_t fTriggerOnV0AND;            // if to trigger on V0and
  Bool_t fRejectPileup;              // pileup rejection wanted

  TH1D *fEventStat;                  //! Histogram with event statistics

  ETriggerLogig fTriggerLogic;       // trigger logic: any or all bits need to be matching

  AliTriggerAnalysis *fTriggerAnalysis; //! trigger analysis class
  
  Bool_t fStoreLikeSign;        // flag to store like-sign candidates
  Bool_t fStoreRotatedPairs;    // flag to store rotation
  Bool_t fStoreEventsWithSingleTracks;    // flag to store events with a least one reconstructed track 
  Bool_t fCreateNanoAOD;        // flag to create nanoAODs 
  Bool_t fStoreHeader;          // flag to store header for all events 

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