ROOT logo
#ifndef ALIDNDPT_H
#define ALIDNDPT_H

//------------------------------------------------------------------------------
// Abstract class for dNdPt analysis. All dNdPt components should derive from it.   
// 
// Author: J.Otwinowski 03/11/2008 
// last change: 2011-06-13 by M.Knichel
//------------------------------------------------------------------------------

class AliESDEvent; 
class AliMCEvent; 
class AliESDtrackCuts; 
class AlidNdPtEventCuts;
class AlidNdPtAcceptanceCuts;
class AliPhysicsSelection;
class AlidNdPtBackgroundCuts;

#include "TNamed.h"
#include "TFolder.h"
#include "AliTriggerAnalysis.h"
#include "AlidNdPtHelper.h"

class AlidNdPt : public TNamed {
public:
  AlidNdPt(); 
  AlidNdPt(Char_t* name, Char_t* title);
  ~AlidNdPt();

  // Init data members
  virtual void Init() = 0;

  // Process events
  virtual void Process(AliESDEvent *const esdEvent=0, AliMCEvent *const mcEvent=0) = 0;

  // Merge output objects (needed by PROOF) 
  virtual Long64_t Merge(TCollection* const list=0) = 0;

  // Analyse output histograms 
  virtual void Analyse() = 0;

  // Export analysed output objects to folder
  virtual TFolder *ExportToFolder(TObjArray * const array=0) = 0;

  //

  //
  void SetEventCuts(AlidNdPtEventCuts* const cuts)              { fdNdPtEventCuts = cuts; }
  void SetAcceptanceCuts(AlidNdPtAcceptanceCuts* const cuts)    { fdNdPtAcceptanceCuts = cuts; }  
  void SetRecAcceptanceCuts(AlidNdPtAcceptanceCuts* const cuts) { fdNdPtRecAcceptanceCuts = cuts; }
  void SetMultAcceptanceCuts(AlidNdPtAcceptanceCuts* const cuts){ fMultAcceptanceCuts = cuts; }  
  void SetTrackCuts(AliESDtrackCuts* const cuts)                { fEsdTrackCuts = cuts; }
  void SetMultTrackCuts(AliESDtrackCuts* const cuts)            { fMultTrackCuts = cuts; }
  void SetUseMCInfo(const Bool_t info)                          { fUseMCInfo = info; }
  void SetAnalysisMode(const AlidNdPtHelper::AnalysisMode mode) { fAnalysisMode = mode; }
  void SetTrigger(const AliTriggerAnalysis::Trigger trigger)    { fTrigger = trigger; }
  void SetTriggerClass(const Char_t *triggerClass)              { fTriggerClass = triggerClass; }
  void SetParticleMode(const AlidNdPtHelper::ParticleMode mode) { fParticleMode = mode; }
  void SetPhysicsTriggerSelection(AliPhysicsSelection* const selection)  { fPhysicsSelection = selection; }
  void SetBackgroundCuts(AlidNdPtBackgroundCuts* const cuts)    { fdNdPtBackgroundCuts = cuts; }

  AlidNdPtEventCuts* GetEventCuts() const                       { return fdNdPtEventCuts; }
  AlidNdPtAcceptanceCuts* GetAcceptanceCuts() const             { return fdNdPtAcceptanceCuts; }
  AlidNdPtAcceptanceCuts* GetMultAcceptanceCuts() const         { return (fMultAcceptanceCuts) ? fMultAcceptanceCuts : fdNdPtAcceptanceCuts; }
  AlidNdPtAcceptanceCuts* GetRecAcceptanceCuts() const          { return fdNdPtRecAcceptanceCuts; }    
  AliESDtrackCuts* GetTrackCuts() const                         { return fEsdTrackCuts; }
  AliESDtrackCuts* GetMultTrackCuts() const                     { return (fMultTrackCuts) ? fMultTrackCuts: fEsdTrackCuts; }  
  Bool_t IsUseMCInfo() const                                    { return fUseMCInfo; }
  AlidNdPtHelper::AnalysisMode GetAnalysisMode() const          { return fAnalysisMode; }
  AliTriggerAnalysis::Trigger GetTrigger() const                { return fTrigger; }
  const Char_t* GetTriggerClass() const                         { return fTriggerClass; }
  AlidNdPtHelper::ParticleMode GetParticleMode() const          { return fParticleMode; }
  AliPhysicsSelection* GetPhysicsTriggerSelection() const       { return fPhysicsSelection; }
  AlidNdPtBackgroundCuts* GetBackgroundCuts() const             { return fdNdPtBackgroundCuts; }
  Double_t* CreateLogAxis(Int_t nbins, Double_t xmin, Double_t xmax);

  void SetAnalyseOutput(Bool_t analyseoutput)  { fAnalyseOutput = analyseoutput; }
  Bool_t GetAnalyseOutput() const { return fAnalyseOutput; }

  void SetMergeTHnSparse(Bool_t mergethnsparse)  { fMergeTHnSparse = mergethnsparse; }
  Bool_t GetMergeTHnSparse() const { return fMergeTHnSparse; }

  void SetTriggerMask(UInt_t triggermask)  { fTriggerMask = triggermask; }
  UInt_t GetTriggerMask()  { return fTriggerMask; }


protected:
   static Double_t* CloneArray(Int_t n, Double_t* source);

private:

  AlidNdPt(const AlidNdPt&); // not implemented
  AlidNdPt& operator=(const AlidNdPt&); // not implemented

  AlidNdPtEventCuts      *fdNdPtEventCuts;      // event cuts
  AlidNdPtAcceptanceCuts *fdNdPtAcceptanceCuts; // acceptance cuts  
  AlidNdPtAcceptanceCuts *fdNdPtRecAcceptanceCuts; // additional recontruction acceptance cuts (not used for MC truth)
  AlidNdPtAcceptanceCuts *fMultAcceptanceCuts; // acceptance cuts for multiplicity estimator
  AliESDtrackCuts *fEsdTrackCuts;               // esd track cuts
  AliESDtrackCuts *fMultTrackCuts;               // esd track cuts for multiplicity estimator

  Bool_t fUseMCInfo;                            // use MC information
  AlidNdPtHelper::AnalysisMode fAnalysisMode;   // analysis mode TPC only, TPC + ITS
  AliTriggerAnalysis::Trigger fTrigger;         // trigger definition MB1, MB2 ...
  const Char_t * fTriggerClass;                 // trigger class
  AlidNdPtHelper::ParticleMode fParticleMode;   // selected particle (pion, kaon, ...)

  AliPhysicsSelection* fPhysicsSelection; // physics trigger selection class
  AlidNdPtBackgroundCuts *fdNdPtBackgroundCuts; // background cuts (cosmics and splitted tracks)
  
  Bool_t fAnalyseOutput;  // call Analyse() function in the FinishTaskOutput
  Bool_t fMergeTHnSparse; // merge THnSparse histograms in Merge() function

  UInt_t fTriggerMask;    // trigger mask

  ClassDef(AlidNdPt,6);
};

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