ROOT logo
// -*- mode: C++ -*- 
#ifndef ALIESDHEADER_H
#define ALIESDHEADER_H

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

//-------------------------------------------------------------------------
//                      Class AliESDHeader
//   Header data
//   for the ESD   
//   Origin: Christian Klein-Boesing, CERN, Christian.Klein-Boesing@cern.ch 
//-------------------------------------------------------------------------

#include <TObjArray.h>
#include <TClonesArray.h>
#include <TBits.h>
#include "AliVHeader.h"
#include "AliTriggerScalersESD.h"
#include "AliTriggerScalersRecordESD.h"

class AliTriggerScalersESD;
class AliTriggerScalersRecordESD;
class AliTriggerIR;
class AliTriggerConfiguration;

class AliESDHeader: public AliVHeader {
public:
  AliESDHeader();
  virtual ~AliESDHeader();
  AliESDHeader(const AliESDHeader& header);
  AliESDHeader& operator=(const AliESDHeader& header);
  virtual void Copy(TObject &obj) const;

  void      SetTriggerMask(ULong64_t n) {fTriggerMask=n;}
  void      SetTriggerMaskNext50(ULong64_t n) {fTriggerMaskNext50=n;}
  void      SetOrbitNumber(UInt_t n) {fOrbitNumber=n;}
  void      SetTimeStamp(UInt_t timeStamp){fTimeStamp = timeStamp;}
  void      SetEventType(UInt_t eventType){fEventType = eventType;}
  void      SetEventSpecie(UInt_t eventSpecie){fEventSpecie = eventSpecie;}
  void      SetEventNumberInFile(Int_t n) {fEventNumberInFile=n;}
  void      SetBunchCrossNumber(UShort_t n) {fBunchCrossNumber=n;}
  void      SetPeriodNumber(UInt_t n) {fPeriodNumber=n;}
  void      SetTriggerCluster(UChar_t n) {fTriggerCluster = n;}
  Bool_t    AddTriggerIR(const AliTriggerIR* ir);
  void      SetCTPConfig(AliTriggerConfiguration* ctpConfig) {fCTPConfig=ctpConfig;};
//************Setters/Getters for Trigger Inputs and TriggerScalersRecordESD
  void SetL0TriggerInputs(UInt_t n) {fL0TriggerInputs=n;}
  void SetL1TriggerInputs(UInt_t n) {fL1TriggerInputs=n;}
  void SetL2TriggerInputs(UShort_t n) {fL2TriggerInputs=n;}
  UInt_t      GetL0TriggerInputs() const {return fL0TriggerInputs;}  
  UInt_t      GetL1TriggerInputs() const {return fL1TriggerInputs;} 
  UShort_t    GetL2TriggerInputs() const {return fL2TriggerInputs;} 
  void SetTriggerScalersRecord(AliTriggerScalersESD *scalerRun) {fTriggerScalers.AddTriggerScalers(scalerRun); }
  void SetTriggerScalersDeltaEvent(const AliTriggerScalersRecordESD *scalerRun) {fTriggerScalersDeltaEvent = *scalerRun; }
  void SetTriggerScalersDeltaRun(const AliTriggerScalersRecordESD *scalerRun) {fTriggerScalersDeltaRun = *scalerRun; }
  const AliTriggerScalersRecordESD* GetTriggerScalersRecord() const {return &fTriggerScalers; }
  const AliTriggerScalersRecordESD* GetTriggerScalersDeltaEvent() const {return &fTriggerScalersDeltaEvent; }
  const AliTriggerScalersRecordESD* GetTriggerScalersDeltaRun() const {return &fTriggerScalersDeltaRun; }
  const AliTriggerIR* GetTriggerIR(Int_t i) const { return (const AliTriggerIR*)fIRBufferArray[i]; }
  void SetActiveTriggerInputs(const char*name, Int_t index);
  const char* GetTriggerInputName(Int_t index, Int_t trglevel) const;
  TString     GetActiveTriggerInputs() const;
  TString     GetFiredTriggerInputs() const;
  Bool_t      IsTriggerInputFired(const char *name) const;
  const AliTriggerConfiguration*  GetCTPConfig() const { return fCTPConfig;}
  Int_t  FindIRIntInteractionsBXMap(Int_t difference) const;
  TBits  GetIRInt2InteractionMap() const { SetIRInteractionMap(); return fIRInt2InteractionsMap; }
  TBits  GetIRInt1InteractionMap() const { SetIRInteractionMap(); return fIRInt1InteractionsMap; }
  Int_t  GetIRInt2ClosestInteractionMap() const;
  Int_t  GetIRInt1ClosestInteractionMap(Int_t gap = 3) const;
  Int_t  GetIRInt2LastInteractionMap() const;
//**************************************************************************

  ULong64_t GetTriggerMask() const {return fTriggerMask;}
  ULong64_t GetTriggerMaskNext50() const {return fTriggerMaskNext50;}
  void      GetTriggerMaskAll(ULong64_t& low,ULong64_t& high) const {low=fTriggerMask;high=fTriggerMaskNext50;}
  UInt_t    GetOrbitNumber() const {return fOrbitNumber;}
  UInt_t    GetTimeStamp()  const { return fTimeStamp;}
  UInt_t    GetEventType()  const { return fEventType;}
  UInt_t    GetEventSpecie()  const { return fEventSpecie;}
  Int_t     GetEventNumberInFile() const {return fEventNumberInFile;}
  UShort_t  GetBunchCrossNumber() const {return fBunchCrossNumber;}
  UInt_t    GetPeriodNumber() const {return fPeriodNumber;}
  UChar_t   GetTriggerCluster() const {return fTriggerCluster;}
  Int_t     GetTriggerIREntries() const { return fIRBufferArray.GetEntriesFast();};
  Int_t     GetTriggerIREntries(Int_t int1, Int_t int2, Float_t deltaTime = 180.) const;
  TObjArray GetIRArray(Int_t int1, Int_t int2, Float_t deltaTime = 180.) const;
  void      Reset();
  void      Print(const Option_t *opt=0) const;

  enum {kNTriggerInputs = 60};   //24 L0, 24 L1 and 12 L2 inputs
  Char_t GetTPCNoiseFilterCounter(UInt_t index) {return fTPCNoiseFilterCounter[index%3];};
  void SetTPCNoiseFilterCounter(UInt_t index,UChar_t value) {fTPCNoiseFilterCounter[index%3]=value;};

private:
  void   SetIRInteractionMap() const;

private:

  // Event Identification
  ULong64_t    fTriggerMask;       // Trigger Type (mask) 1-50 bits
  ULong64_t    fTriggerMaskNext50; // Trigger Type (mask) 51-100 bits
  UInt_t       fOrbitNumber;       // Orbit Number
  UInt_t       fTimeStamp;         // Time stamp
  UInt_t       fEventType;         // Type of Event
  UInt_t       fEventSpecie;       // Reconstruction event specie (1-default,2-lowM,4-highM,8-cosmic,16-cal)
  UInt_t       fPeriodNumber;      // Period Number
  Int_t        fEventNumberInFile; // Running Event count in the file
  UShort_t     fBunchCrossNumber;  // Bunch Crossing Number
  UChar_t      fTriggerCluster;    // Trigger cluster (mask)
  UInt_t       fL0TriggerInputs;   // L0 Trigger Inputs (mask)
  UInt_t       fL1TriggerInputs;   // L1 Trigger Inputs (mask)
  UShort_t     fL2TriggerInputs;   // L2 Trigger Inputs (mask)
  AliTriggerScalersRecordESD fTriggerScalers;  //Trigger counters of triggered classes in event, interpolated to the event time
  AliTriggerScalersRecordESD fTriggerScalersDeltaEvent;  // Change in the trigger scalers between the two counter readings closest to the event time 
  AliTriggerScalersRecordESD fTriggerScalersDeltaRun;  // Total number of counts in the trigger scalers for the duration of the run
  enum {kNMaxIR = 3};              // Max number of interaction records (IR)
  AliTriggerIR*  fIRArray[kNMaxIR];// Array with trigger IRs 
  TObjArray    fTriggerInputsNames;// Array of TNamed of the active trigger inputs (L0,L1 and L2)
  AliTriggerConfiguration*  fCTPConfig; // Trigger configuration for the run
  TObjArray    fIRBufferArray;// Array with interaction records before and after triggered event
  mutable TBits   fIRInt2InteractionsMap;  // map of the Int2 events (normally 0TVX) near the event, that's Int2Id-EventId within -90 +90 BXs
  mutable TBits   fIRInt1InteractionsMap;  // map of the Int1 events (normally V0A&V0C) near the event, that's Int1Id-EventId within -90 +90 BXs
  UChar_t fTPCNoiseFilterCounter[3];  // filter counter [0]=sector, [1]-timebin/sector, [2]-padrowsector 


  ClassDef(AliESDHeader,13)
};

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