ROOT logo
#ifndef ALITOFTRIGGER_H
#define ALITOFTRIGGER_H

/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 * See cxx source for full Copyright notice                               */

/* $Id$ */

/////////////////////////////////////////////////
//                                             //
//      TOF Trigger Detector Class             //
//                                             //
/////////////////////////////////////////////////

#include "AliTriggerDetector.h"
#include "AliLog.h"
#include "TTree.h"

class AliTOFrawData;
class AliTOFTriggerMask;

class AliTOFTrigger : public AliTriggerDetector
{
 public:
  AliTOFTrigger();  // constructor
  AliTOFTrigger(Int_t HighMultTh, Int_t ppMBTh, Int_t MultiMuonTh, Int_t UPTh, Float_t deltaminpsi, Float_t deltamaxpsi, Float_t deltaminro, Float_t deltamaxro, Int_t stripWindow,Float_t startTimeWindow=0.0,Float_t widthTimeWindow=25.); //constructor with parameters
  virtual ~AliTOFTrigger();  // destructor
  virtual void    CreateInputs();
  virtual void    Trigger();
  Int_t   GetHighMultTh() const {return fHighMultTh;}
  Int_t   GetppMBTh() const {return fppMBTh;}
  Int_t   GetMultiMuonTh() const {return fMultiMuonTh;}
  Int_t   GetUPTh() const {return fUPTh;}
  Float_t Getdeltaminpsi() const {return fdeltaminpsi;}
  Float_t Getdeltamaxpsi() const {return fdeltamaxpsi;}
  Float_t Getdeltaminro() const {return fdeltaminro;}
  Float_t Getdeltamaxro() const {return fdeltamaxro;}
  Int_t  GetstripWindow() const {return fstripWindow;}

  static void LoadActiveMask(); // Load active channel trigger mask
  void GetMapMatrix(Bool_t map[][24]) const;
  void GetMap(Bool_t **map) const;
  //void PrintMap(); // to be checked because of warning problems
  void GetTRDmapMatrix(Bool_t map[][8]) const;
  void GetTRDmap(Bool_t **map) const;
  Bool_t GetBit(Int_t nDDL, Int_t nTRM, Int_t iChain,Int_t iTDC, Int_t iCH);
  Bool_t GetBit(Int_t *detind);
  void SetBit(Int_t nDDL, Int_t nTRM, Int_t iChain,Int_t iTDC, Int_t iCH);
  void SetBit(Int_t *detind);
  void ResetBit(Int_t nDDL, Int_t nTRM, Int_t iChain,Int_t iTDC, Int_t iCH);
  void ResetBit(Int_t *detind);


  void   SetHighMultTh(Int_t HighMultTh){fHighMultTh = HighMultTh;}
  void   SetppMBTh(Int_t ppMBTh){fppMBTh = ppMBTh;}
  void   SetMultiMuonTh(Int_t MultiMuonTh){fMultiMuonTh = MultiMuonTh;}
  void   SetUPTh(Int_t UPTh){fUPTh = UPTh;}
  void   Setdeltaminpsi(Float_t deltaminpsi){fdeltaminpsi = deltaminpsi;}
  void   Setdeltamaxpsi(Float_t deltamaxpsi){fdeltamaxpsi = deltamaxpsi;}
  void   Setdeltaminro(Float_t deltaminro){fdeltaminro = deltaminro;}
  void   Setdeltamaxro(Float_t deltamaxro){fdeltamaxro = deltamaxro;}
  void   SetstripWindow(Int_t stripWindow){fstripWindow = stripWindow;}

  Bool_t Return(Int_t i){if(i==0) return fSel1;
			 else if(i==1) return fSel2;
                         else if(i==2) return fSel3;
                         else if(i==3) return fSel4;
			 else { AliWarning(Form(" Index out of range: %d not in [0,3]",i)); return kFALSE; }
			};

  Float_t GetStartTimeWindow() const {return fStartTimeHit;}; // in ns
  Float_t GetTimeWidthWindow() const {return fTimeWidthTrigger;}; // in ns
  void    SetStartTimeWindow(Float_t val) {fStartTimeHit = val;}; // in ns
  void    SetTimeWidthWindow(Float_t val) {fTimeWidthTrigger = val;}; // in ns
  
  Int_t GetNumberOfCrateOn(){return fNCrateOn;}; 
  Int_t GetNumberOfMaxipadOn(){return fNMaxipadOn;}; 
  Int_t GetNumberOfMaxipadOnAll(){return fNMaxipadOnAll;}; 
  Bool_t *GetLTMarray(){return fLTMarray;};
  void   CreateCTTMMatrix();
  void   CreateLTMMatrix();
  void   CreateLTMMatrixFromDigits();
  void   CreateLTMMatrixFromRaw(AliRawReader *fRawReader);

  static AliTOFTriggerMask *GetTOFTriggerMap() {return fTOFTrigMap;}
  static void PrepareTOFMapFromRaw(AliRawReader *fRawReader,Int_t deltaBC=13600);
  static void PrepareTOFMapFromDigit(TTree *treeD);
 private:

  enum{
    kNLTM = 72,          //Number of LTM
    kNLTMchannels = 48,  //Number of channels in a LTM
    kNCTTM = 36,         //Number of CTTM per TOF side
    kNCTTMchannels = 24,  //Number of channels in a CTTM
    kNLTMtoTRDchannels = 8  //Number of channels in a CTTM
  };

  static AliTOFTriggerMask *fTOFTrigMap; // class with the TOF trigger map
  static AliTOFTriggerMask *fTOFTrigMask; // class with the TOF trigger mask

  AliTOFTrigger& operator=(const AliTOFTrigger &/*source*/); // ass. op.
  AliTOFTrigger(const AliTOFTrigger & tr);

  void    GetCTTMIndex(Int_t *detind, Int_t *indexCTTM);
  static void    GetLTMIndex(const Int_t * const detind, Int_t *LTMIndex);
  Bool_t  fLTMmatrix[kNLTM][kNLTMchannels];         //LTM matrix 
  Bool_t  fLTMarray[kNCTTM];        //LTM array for UPpurposes
  Bool_t  fCTTMmatrixFront[kNCTTM][kNCTTMchannels];//CTTM matrix for TOP FPGA 
  Bool_t  fCTTMmatrixBack[kNCTTM][kNCTTMchannels]; //CTTM matrix for BOTTOM FPGA
  Int_t   fHighMultTh;             //threshold for High Multiplicity trigger
  Int_t   fppMBTh;                 //threshold for pp Minimum Bias trigger
  Int_t   fMultiMuonTh;            //threshold for Multi Muon trigger 
  Int_t   fUPTh;                   //threshold for Ultra-Per coll trigger 
  Float_t fdeltaminpsi;            //min delta phi for J/psi decay (UP trigger)
  Float_t fdeltamaxpsi;            //max delta phi for J/psi decay (UP trigger)
  Float_t fdeltaminro;             //min delta phi for ro decay (UP trigger)
  Float_t fdeltamaxro;             //max delta phi for ro decay (UP trigger)
  Int_t   fstripWindow;            //strip window for triggering

  Bool_t fSel1,fSel2,fSel3,fSel4; // ppMB, PbPbMB2, PbPbMB3, PbPbUP

  UInt_t fPowerMask[kNCTTMchannels+1];  // mask for 24 TDC channels

  Int_t fNCrateOn; // number of crate fired
  Int_t fNMaxipadOn; // number of Maxipad fired
  Int_t fNMaxipadOnAll; // number of Maxipad fired w/o TDC dead mask

  // aggiungere larghezza finestra temporale e tempo0 in ns
  Float_t fStartTimeHit;      // time window start after channel equalization (subtraction of the minimal time per channel default 0 ns)
  Float_t fTimeWidthTrigger;  // time window width (default 25 ns)
   
  ClassDef(AliTOFTrigger,3)  // TOF Trigger Detector class
};
#endif

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