ROOT logo
#ifndef ALIEMCALTRIGGERPATCHINFO_H
#define ALIEMCALTRIGGERPATCHINFO_H

// $Id$

#include "TObject.h"

#include <TLorentzVector.h>
#include <TMath.h>
#include "AliEmcalTriggerBitConfig.h"
//#include "AliEMCALTriggerTypes.h"
#include "AliEmcalTriggerSetupInfo.h"

class AliEMCALGeometry;
class TArrayI;

class AliEmcalTriggerPatchInfo: public TObject {
 public:
  AliEmcalTriggerPatchInfo();
  AliEmcalTriggerPatchInfo(const AliEmcalTriggerPatchInfo &p); 
  AliEmcalTriggerPatchInfo &operator=(const AliEmcalTriggerPatchInfo &p);
  virtual ~AliEmcalTriggerPatchInfo();

  enum TriggerMakerBits_t {
    kRecalcJetBitNum = 22,
    kRecalcGammaBitNum = 23,
    kMainTriggerBitNum = 24,
    kSimpleOfflineBitNum = 25
  };
  // The lower bits in fTriggerBits are defined in EMCAL/AliEmcalTriggerTypes.h

  Double_t GetPhiGeo() const { return fCenterGeo.Phi(); }
  Double_t GetPhiCM()  const { return fCenterMass.Phi(); }
  Double_t GetPhiMin() const { return fEdge1.Phi(); }
  Double_t GetPhiMax() const { return fEdge2.Phi(); }
  Double_t GetEtaGeo() const { return fCenterGeo.Eta(); }
  Double_t GetEtaCM()  const { return fCenterMass.Eta(); }
  Double_t GetEtaMin() const { return fEdge2.Eta(); }
  Double_t GetEtaMax() const { return fEdge1.Eta(); }
  Double_t GetPatchE() const { return fCenterGeo.E(); }
  Int_t    GetADCAmp() const { return fADCAmp; }
  Int_t    GetADCOfflineAmp() const { return fADCOfflineAmp; }
  Double_t GetADCAmpGeVRough() const { return (Double_t)fADCAmp * kEMCL1ADCtoGeV; }
  Int_t    GetTriggerBits() const { return fTriggerBits; }
  Int_t    GetEdgeCellX() const { return fEdgeCell[0]; }
  Int_t    GetEdgeCellY() const { return fEdgeCell[1]; }
  void     GetCellIndices( AliEMCALGeometry *geom, TArrayI *cells );
  
  Bool_t   IsLevel0() const { return (Bool_t)((fTriggerBits >> (fOffSet + fTriggerBitConfig.GetLevel0Bit()))&(!(fTriggerBits >> kSimpleOfflineBitNum))&1); }
  Bool_t   IsJetLow() const { return (Bool_t)((fTriggerBits >> (fOffSet + fTriggerBitConfig.GetJetLowBit()))&(!(fTriggerBits >> kSimpleOfflineBitNum))&1); }
  Bool_t   IsJetHigh() const { return (Bool_t)((fTriggerBits >> (fOffSet + fTriggerBitConfig.GetJetHighBit()))&(!(fTriggerBits >> kSimpleOfflineBitNum))&1); }
  Bool_t   IsGammaLow() const { return (Bool_t)((fTriggerBits >> (fOffSet + fTriggerBitConfig.GetGammaLowBit()))&(!(fTriggerBits >> kSimpleOfflineBitNum))&1); }
  Bool_t   IsGammaHigh() const { return (Bool_t)((fTriggerBits >> (fOffSet + fTriggerBitConfig.GetGammaHighBit()))&(!(fTriggerBits >> kSimpleOfflineBitNum))&1); }
  Bool_t   IsMainTrigger() const { return (Bool_t)((fTriggerBits >> kMainTriggerBitNum)&(!(fTriggerBits >> kSimpleOfflineBitNum))&1); }
  Bool_t   IsJetLowSimple() const { return (Bool_t)((fTriggerBits >> (fOffSet + fTriggerBitConfig.GetJetLowBit()))&(fTriggerBits >> kSimpleOfflineBitNum)&1); }
  Bool_t   IsJetHighSimple() const { return (Bool_t)((fTriggerBits >> (fOffSet + fTriggerBitConfig.GetJetHighBit()))&(fTriggerBits >> kSimpleOfflineBitNum)&1); }
  Bool_t   IsGammaLowSimple() const { return (Bool_t)((fTriggerBits >> (fOffSet + fTriggerBitConfig.GetGammaLowBit()))&(fTriggerBits >> kSimpleOfflineBitNum)&1); }
  Bool_t   IsGammaHighSimple() const { return (Bool_t)((fTriggerBits >> (fOffSet + fTriggerBitConfig.GetGammaHighBit()))&(fTriggerBits >> kSimpleOfflineBitNum)&1); }
  Bool_t   IsMainTriggerSimple() const { return (Bool_t)((fTriggerBits >> kMainTriggerBitNum)&(fTriggerBits >> kSimpleOfflineBitNum)&1); }
  Bool_t   IsOfflineSimple() const { return (Bool_t)((fTriggerBits >> kSimpleOfflineBitNum)&1); }

  // Recalculated max patches
  Bool_t   IsRecalcJet() const { return (Bool_t) ((fTriggerBits >> kRecalcJetBitNum)&1); }
  Bool_t   IsRecalcGamma() const { return (Bool_t) ((fTriggerBits >> kRecalcGammaBitNum)&1); }

  
  void SetCenterGeo( TVector3 &v, Double_t e ) { SetLorentzVector( fCenterGeo, v, e ); }
  void SetCenterGeo( TLorentzVector &v ) { fCenterGeo = v; }
  void SetCenterMass( TLorentzVector &v ) { fCenterMass = v; }
  void SetCenterMass( TVector3 &v, Double_t e ) { SetLorentzVector( fCenterMass, v, e ); }
  void SetEdge1( TLorentzVector &v ) { fEdge1 = v; }
  void SetEdge1( TVector3 &v, Double_t e ) { SetLorentzVector( fEdge1, v, e ); }
  void SetEdge2( TLorentzVector &v ) { fEdge2 = v; }
  void SetEdge2( TVector3 &v, Double_t e ) { SetLorentzVector( fEdge2, v, e ); }
  void SetADCAmp( Int_t a ) { fADCAmp = a; }
  void SetADCOfflineAmp( Int_t a ) { fADCOfflineAmp = a; }
  void SetEdgeCell( Int_t x, Int_t y ) { fEdgeCell[0] = x; fEdgeCell[1] = y; }

  void SetLorentzVector( TLorentzVector &lv, TVector3 &v, Double_t e );

  void SetTriggerBits( Int_t i ) { fTriggerBits = i; }

  void SetOffSet(Int_t i)        { fOffSet      = i; }

  void SetTriggerBitConfig(const AliEmcalTriggerBitConfig * ref) { fTriggerBitConfig.Initialise(*ref); }


 protected:
  TLorentzVector   &GetLorentzVector(const Double_t *vertex = 0)  const;

  TLorentzVector    fCenterGeo;                     // geometrical center
  TLorentzVector    fCenterMass;                    // CM
  TLorentzVector    fEdge1;                         // max eta/ min phi edge
  TLorentzVector    fEdge2;                         // min eta/ max phi edge
  Int_t             fADCAmp;                        // online (trigger) ADC amplitude
  Int_t             fADCOfflineAmp;                 // offline (FEE) ADC amplitude
  Int_t             fTriggerBits;                   // trigger bit mask, see definitions in AliEmcalTriggerType and TriggerMakerBits_t (above)
  Int_t             fEdgeCell[2];                   // cell "bottom lower" edge (min phi, max eta)
  Int_t             fOffSet;                        // offset of bit (different in data and MC)
  AliEmcalTriggerBitConfig   fTriggerBitConfig;     // Trigger bit configuration

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