ROOT logo
#ifndef ALICFEVENTCLASSCUTS_H
#define ALICFEVENTCLASSCUTS_H
/**************************************************************************
 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 *                                                                        *
 * Author: The ALICE Off-line Project.                                    *
 * Contributors are mentioned in the code where appropriate.              *
 *                                                                        *
 * Permission to use, copy, modify and distribute this software and its   *
 * documentation strictly for non-commercial purposes is hereby granted   *
 * without fee, provided that the above copyright notice appears in all   *
 * copies and that both the copyright notice and this permission notice   *
 * appear in the supporting documentation. The authors make no claims     *
 * about the suitability of this software for any purpose. It is          *
 * provided "as is" without express or implied warranty.                  *
 **************************************************************************/
// Cut on the type of Event Class: for the moment 
// the Trigger (pp running configurations) 
// and requirements on the energy observed in the ZDC are implemented
// The argument of IsSelected member function (passed object) is cast into 
// an AliVEvent, although conditions are meaningful only for AliESD(AOD)Event 
// type objects.
// The class derives from AliCFCutBase
// Author:S.Arcelli Silvia.Arcelli@cern.ch

#include "AliCFCutBase.h"
#include "TBits.h"
class TH1F;
class AliVEvent;
//____________________________________________________________________________
class AliCFEventClassCuts: public AliCFCutBase 
{
 public :
  AliCFEventClassCuts() ;
  AliCFEventClassCuts(Char_t* name, Char_t* title) ;
  AliCFEventClassCuts(const AliCFEventClassCuts& c) ;
  AliCFEventClassCuts& operator=(const AliCFEventClassCuts& c) ;
  ~AliCFEventClassCuts();
  Bool_t IsSelected(TObject* obj);
  Bool_t IsSelected(TList* /*list*/) {return kTRUE;}

  //Association to The Trigger bits in the mask. 
  //They correspond to the PP running descriptor as in 
  //STEER/createTriggerDescriptor_pp.C plus five MB Trigger combinations
  enum TriggerType { 
    kVZEROLeft=0,kVZERORight,kVZEROBeamGas,
    kSTARTAL0,kSTARTCL0,
    kITSSPDGFOL0,kITSSPDHMultL0,
    kMUSingleLPtL0,kMUUnlikeLPtL0,kMUUnlikeHPtL0,kMULikeLPtL0,kMULikeHPtL0,
    kMB,kTOFMB,
    kMUSingleMB,kMUUnLikeLPtMB,kMULikeLPtMB,
    kMB1,kMB2,kMB3,kMB4,kMB5
  }; 

  //static checker for trigger bits
  static Bool_t IsTriggered(AliVEvent *ev, TriggerType trigger=kMB1); 

  void   SetTriggerType(TriggerType trigger=kMB1) { fTriggerType.SetBitNumber(trigger,kTRUE);} // Set requested trigger bits
  TBits  GetTriggerType() const { return fTriggerType;} // get Triggers bits which were requested
  void  SetTriggersInAND( Bool_t flag){fTriggerAND=flag;} // request Trigger bits in .AND.

  void  SetZDCN1EnergyCut(Double_t min,Double_t max){fZDCN1EnergyMin=min; fZDCN1EnergyMax=max;} // ZDC energy cuts
  void  SetZDCN2EnergyCut(Double_t min,Double_t max){fZDCN2EnergyMin=min; fZDCN2EnergyMax=max;} // ZDC energy cuts
  void  SetZDCP1EnergyCut(Double_t min,Double_t max){fZDCP1EnergyMin=min; fZDCP1EnergyMax=max;} // ZDC energy cuts
  void  SetZDCP2EnergyCut(Double_t min,Double_t max){fZDCP2EnergyMin=min; fZDCP2EnergyMax=max;} // ZDC energy cuts  
  void  SetZDCEM1EnergyCut(Double_t min,Double_t max){fZDCEM1EnergyMin=min; fZDCEM1EnergyMax=max;} // ZDC energy cuts
  void  SetZDCEM2EnergyCut(Double_t min,Double_t max){fZDCEM2EnergyMin=min; fZDCEM2EnergyMax=max;} // ZDC energy cuts

  Double_t  GetZDCN1EnergyCutMin() const {return fZDCN1EnergyMin;};//ZDC N1 energy min
  Double_t  GetZDCN2EnergyCutMin() const {return fZDCN2EnergyMin;};//ZDC N2 Emin
  Double_t  GetZDCP1EnergyCutMin() const {return fZDCP1EnergyMin;};//ZDC P1 Emin
  Double_t  GetZDCP2EnergyCutMin() const {return fZDCP2EnergyMin;};//ZDC P2 Emin
  Double_t  GetZDCEM1EnergyCutMin() const {return fZDCEM1EnergyMin;};//ZDC EM1 Emin
  Double_t  GetZDCEM2EnergyCutMin() const {return fZDCEM2EnergyMin;};//ZDC EM2 Emin

  Double_t  GetZDCN1EnergyCutMax() const {return fZDCN1EnergyMax;};//ZDC N1 Emax
  Double_t  GetZDCN2EnergyCutMax() const {return fZDCN2EnergyMax;};//ZDC N2 Emax
  Double_t  GetZDCP1EnergyCutMax() const {return fZDCP1EnergyMax;};//ZDC P1 Emax
  Double_t  GetZDCP2EnergyCutMax() const {return fZDCP2EnergyMax;};//ZDC P2 Emax
  Double_t  GetZDCEM1EnergyCutMax() const {return fZDCEM1EnergyMax;};//ZDC EM1 Emax
  Double_t  GetZDCEM2EnergyCutMax() const {return fZDCEM2EnergyMax;};//ZDC EM2 Emax


  // QA histogram setter
  // please use indices from the enumeration below
  void SetHistogramBins(Int_t index, Int_t nbins, Double_t *bins);
  void SetHistogramBins(Int_t index, Int_t nbins, Double_t xmin, Double_t xmax);
  enum{kTrigger=0,
	 kZDCEnergyN1,
	 kZDCEnergyP1,
	 kZDCEnergyN2,
	 kZDCEnergyP2,
	 kZDCEnergyEM1,
	 kZDCEnergyEM2,
	 kNTriggers=17,
	 kNTriggersMB=5,
	 kNCuts=7,
         kNStepQA=2
	 };
 protected:
  void SelectionBitMap(TObject* obj);
  static void TriggerBitMap(AliVEvent* ev,TBits *bitmapT);
  void DefineHistograms(); 		// books histograms and TList
  void AddQAHistograms(TList *qaList) ;
  void Initialise();			// sets everything to 0
  void FillHistograms(TObject* obj, Bool_t b);

  TBits fTriggerType ; //The type of trigger to be checked
  Bool_t fTriggerAND; //Flag to ak for .AND of all the requested trigger bits (.or.is default)
  Double_t fZDCN1EnergyMin;  //Min Energy in ZDCN1
  Double_t fZDCP1EnergyMin;  //Min Energy in ZDCP1
  Double_t fZDCN2EnergyMin;  //Min Energy in ZDCN2
  Double_t fZDCP2EnergyMin;  //Min Energy in ZDCP2
  Double_t fZDCEM1EnergyMin; //Min Energy in ZDCEM1
  Double_t fZDCEM2EnergyMin; //Min Energy in ZDCEM2
  Double_t fZDCN1EnergyMax;  //Max Energy in ZDCN1
  Double_t fZDCP1EnergyMax;  //Max Energy in ZDCP1
  Double_t fZDCN2EnergyMax;  //Max Energy in ZDCN2
  Double_t fZDCP2EnergyMax;  //Max Energy in ZDCP2
  Double_t fZDCEM1EnergyMax; //Max Energy in ZDCEM1
  Double_t fZDCEM2EnergyMax; //Max Energy in ZDCEM2

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