ROOT logo
// -*- mode: C++ -*- 
#ifndef ALIVEVENT_H
#define ALIVEVENT_H
/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 * See cxx source for full Copyright notice                               */


/* $Id$ */

//-------------------------------------------------------------------------
//                          Class AliVEvent
//      
// Origin: Markus Oldenburg, CERN, Markus.Oldenburg@cern.ch 
//-------------------------------------------------------------------------

#include <TObject.h>
#include <TTree.h>
#include <TGeoMatrix.h>
#include "AliVHeader.h"
#include "AliVParticle.h"
#include "AliVVertex.h"
#include "AliVCluster.h"
#include "AliVCaloCells.h"
#include "AliVCaloTrigger.h"
#include "TRefArray.h"
#include "AliTOFHeader.h"
#include "AliVTrdTrack.h"
#include "AliVMultiplicity.h"
class AliVfriendEvent;
class AliCentrality;
class AliEventplane;
class AliVVZERO;
class AliVZDC;
class AliVMFT;   // AU
class AliESDkink;
class AliESDv0;
class AliESDVertex;
class AliVTrack;

class AliVEvent : public TObject {

public:
  enum EDataLayoutType { kESD, kMC, kAOD, kMixed, kFlat };
  enum EOfflineTriggerTypes { 
      kMB           = BIT(0), // Minimum bias trigger, i.e. interaction trigger, offline SPD or V0 selection
      kINT7         = BIT(1), // V0AND trigger, offline V0 selection
      kMUON         = BIT(2), // Muon trigger, offline SPD or V0 selection
      kHighMult     = BIT(3), // High-multiplicity trigger (threshold defined online), offline SPD or V0 selection
      kEMC1         = BIT(4), // EMCAL trigger
      kCINT5        = BIT(5), // Minimum bias trigger without SPD. i.e. interaction trigger, offline V0 selection
      kCMUS5        = BIT(6), // Muon trigger, offline V0 selection
      kMUSPB        = BIT(6), // idem for PbPb
      kMUSH7        = BIT(7), // Muon trigger: high pt, single muon, offline V0 selection, CINT7 suite
      kMUSHPB       = BIT(7), // idem for PbPb
      kMUL7         = BIT(8), // Muon trigger: like sign dimuon, offline V0 selection, CINT7 suite
      kMuonLikePB   = BIT(8), // idem for PbPb
      kMUU7         = BIT(9), // Muon trigger, unlike sign dimuon, offline V0 selection, CINT7 suite
      kMuonUnlikePB = BIT(9), // idem for PbPb
      kEMC7         = BIT(10), // EMCAL trigger, CINT7 suite
      kEMC8         = BIT(10), // EMCAL trigger, CINT8 suite
      kMUS7         = BIT(11), // Muon trigger: low pt, single muon, offline V0 selection, CINT7 suite
      kPHI1         = BIT(12), // PHOS trigger, CINT1 suite
      kPHI7         = BIT(13), // PHOS trigger, CINT7 suite
      kPHI8         = BIT(13), // PHOS trigger, CINT8 suite
      kPHOSPb       = BIT(13), // idem for PbPb
      kEMCEJE       = BIT(14), // EMCAL jet patch trigger
      kEMCEGA       = BIT(15), // EMCAL gamma trigger
      kCentral      = BIT(16), // PbPb central collision trigger
      kSemiCentral  = BIT(17), // PbPb semicentral collision trigger
      kDG5          = BIT(18), // Double gap diffractive
      kZED          = BIT(19), // ZDC electromagnetic dissociation
      kSPI7         = BIT(20), // Power interaction trigger
      kSPI          = BIT(20), // Power interaction trigger
      kINT8                 = BIT(21), // CINT8 trigger: 0TVX (T0 vertex) triger
      kMuonSingleLowPt8     = BIT(22), // Muon trigger : single muon, low pt, T0 selection, CINT8 suite
      kMuonSingleHighPt8    = BIT(23), // Muon trigger : single muon, high pt, T0 selection, CINT8 suite
      kMuonLikeLowPt8       = BIT(24), // Muon trigger : like sign muon, low pt, T0 selection, CINT8 suite
      kMuonUnlikeLowPt8     = BIT(25), // Muon trigger : unlike sign muon, low pt, T0 selection, CINT8 suite
      kMuonUnlikeLowPt0     = BIT(26), // Muon trigger : unlike sign muon, low pt, no additional L0 requirement
      kUserDefined  = BIT(27), // Set when custom trigger classes are set in AliPhysicsSelection, offline SPD or V0 selection
      kTRD          = BIT(28), // TRD trigger
      // Bits 29 and above are reserved for FLAGS
      kFastOnly     = BIT(30), // The fast cluster fired. This bit is set in to addition another trigger bit, e.g. kMB
      kAny          = 0xffffffff, // to accept any trigger
      kAnyINT       = kMB | kINT7 | kCINT5 | kINT8 | kSPI7 // to accept any interaction (aka minimum bias) trigger
  };

  AliVEvent() { }
  virtual ~AliVEvent() { } 
  AliVEvent(const AliVEvent& vEvnt); 
  AliVEvent& operator=(const AliVEvent& vEvnt);

  // Services
  virtual void AddObject(TObject* obj) = 0;
  virtual TObject* FindListObject(const char *name) const = 0;
  virtual TList* GetList() const = 0;

  virtual void CreateStdContent() = 0;
  virtual void GetStdContent() = 0;

  virtual void ReadFromTree(TTree *tree, Option_t* opt) = 0;
  virtual void WriteToTree(TTree* tree) const = 0;

  virtual void Reset() = 0;
  //virtual void ResetStdContent() = 0;
  virtual void SetStdNames() = 0;

  virtual void Print(Option_t *option="") const = 0;

  // Header
  virtual AliVHeader* GetHeader() const = 0;
  //
  // field initialization
  virtual Bool_t InitMagneticField() const {return kFALSE;}

  // Delegated methods for fESDRun or AODHeader
  
  virtual void     SetRunNumber(Int_t n) = 0;
  virtual void     SetPeriodNumber(UInt_t n) = 0;
  virtual void     SetMagneticField(Double_t mf) = 0;
  
  virtual Int_t    GetRunNumber() const = 0;
  virtual UInt_t   GetPeriodNumber() const = 0;
  virtual Double_t GetMagneticField() const = 0;

  virtual Double_t GetDiamondX() const {return -999.;}
  virtual Double_t GetDiamondY() const {return -999.;}
  virtual void     GetDiamondCovXY(Float_t cov[3]) const
             {cov[0]=-999.; return;}

  // Delegated methods for fHeader
  virtual void      SetOrbitNumber(UInt_t n) = 0;
  virtual void      SetBunchCrossNumber(UShort_t n) = 0;
  virtual void      SetEventType(UInt_t eventType)= 0;
  virtual void      SetTriggerMask(ULong64_t n) = 0;
  virtual void      SetTriggerCluster(UChar_t n) = 0;

  virtual UInt_t    GetOrbitNumber() const = 0;
  virtual UShort_t  GetBunchCrossNumber() const = 0;
  virtual UInt_t    GetEventType()  const = 0;
  virtual ULong64_t GetTriggerMask() const = 0;
  virtual UChar_t   GetTriggerCluster() const = 0;
  virtual TString   GetFiredTriggerClasses() const = 0;
  virtual Double_t  GetZDCN1Energy() const = 0;
  virtual Double_t  GetZDCP1Energy() const = 0;
  virtual Double_t  GetZDCN2Energy() const = 0;
  virtual Double_t  GetZDCP2Energy() const = 0;
  virtual Double_t  GetZDCEMEnergy(Int_t i) const = 0;
 
  // Tracks
  virtual AliVParticle *GetTrack(Int_t i) const = 0;
  virtual AliVTrack    *GetVTrack(Int_t /*i*/) const {return NULL;}
  //virtual AliVTrack    *GetVTrack(Int_t /*i*/) {return NULL;}
  //virtual Int_t        AddTrack(const AliVParticle *t) = 0;
  virtual Int_t        GetNumberOfTracks() const = 0;
  virtual Int_t        GetNumberOfV0s() const = 0;
  virtual Int_t        GetNumberOfCascades() const = 0;

  // TOF header and T0 methods
  virtual const AliTOFHeader *GetTOFHeader() const {return NULL;}
  virtual Float_t GetEventTimeSpread() const {return 0.;}
  virtual Float_t GetTOFTimeResolution() const {return 0.;}
  virtual Double32_t GetT0TOF(Int_t icase) const {return 0.0*icase;}
  virtual const Double32_t * GetT0TOF() const {return NULL;}
  virtual Float_t GetT0spread(Int_t /*i*/) const {return 0.;}

  // Calorimeter Clusters/Cells
  virtual AliVCluster *GetCaloCluster(Int_t)   const {return 0;}
  virtual Int_t GetNumberOfCaloClusters()      const {return 0;}
  virtual Int_t GetEMCALClusters(TRefArray *)  const {return 0;}
  virtual Int_t GetPHOSClusters (TRefArray *)  const {return 0;}
  virtual AliVCaloCells *GetEMCALCells()       const {return 0;}
  virtual AliVCaloCells *GetPHOSCells()        const {return 0;}
  const TGeoHMatrix* GetPHOSMatrix(Int_t /*i*/)    const {return NULL;}
  const TGeoHMatrix* GetEMCALMatrix(Int_t /*i*/)   const {return NULL;}
  virtual AliVCaloTrigger *GetCaloTrigger(TString /*calo*/) const {return NULL;} 

	
  // Primary vertex
  virtual Bool_t IsPileupFromSPD(Int_t /*minContributors*/, 
				 Double_t /*minZdist*/, 
				 Double_t /*nSigmaZdist*/, 
				 Double_t /*nSigmaDiamXY*/, 
				 Double_t /*nSigmaDiamZ*/)
				 const{
    return kFALSE;
  }

  // Tracklets
  virtual AliVMultiplicity* GetMultiplicity() const {return 0;}
  virtual Int_t             GetNumberOfITSClusters(Int_t) const {return 0;}

  virtual Bool_t IsPileupFromSPDInMultBins() const {
    return kFALSE;    
  }
  virtual AliCentrality* GetCentrality()                          = 0;
  virtual AliEventplane* GetEventplane()                          = 0;
  virtual Int_t        EventIndex(Int_t itrack)             const = 0;
  virtual Int_t        EventIndexForCaloCluster(Int_t iclu) const = 0;
  virtual Int_t        EventIndexForPHOSCell(Int_t icell)   const = 0;
  virtual Int_t        EventIndexForEMCALCell(Int_t icell)  const = 0;  

  virtual AliVVZERO *GetVZEROData() const = 0;   
  virtual const Float_t* GetVZEROEqFactors() const {return NULL;}
  virtual Float_t        GetVZEROEqMultiplicity(Int_t /* i */) const {return -1;}
  virtual void           SetVZEROEqFactors(Float_t /* factors */[64]) const {return;}
  virtual AliVZDC   *GetZDCData() const = 0;

  virtual Int_t GetNumberOfTrdTracks() const { return 0; }
  virtual AliVTrdTrack* GetTrdTrack(Int_t /* iTrack */) const { return 0x0; }

  virtual Int_t     GetNumberOfESDTracks()  const { return 0; }
  virtual Int_t     GetEventNumberInFile() const {return 0;}

  //used in calibration:
  virtual Int_t            GetV0(AliESDv0&, Int_t /*iv0*/) const {return 0;}
  virtual UInt_t           GetTimeStamp() const { return 0; }
  virtual AliVfriendEvent* FindFriend() const { return 0; }
  virtual UInt_t           GetEventSpecie() const { return 0; }
  virtual AliESDkink*      GetKink(Int_t /*i*/) const { return NULL; }
  virtual Int_t            GetNumberOfKinks() const { return 0; }

  // Primary vertex
  virtual const AliVVertex   *GetPrimaryVertex() const {return 0x0;}
  //virtual const AliVVertex   *GetPrimaryVertexSPD() const {return 0x0;}
  //virtual const AliVVertex   *GetPrimaryVertexTPC() const {return 0x0;}
  //virtual const AliVVertex   *GetPrimaryVertexTracks() const {return 0x0;}

  virtual Int_t GetPrimaryVertex( AliESDVertex & ) const {return 0;}
  virtual Int_t GetPrimaryVertexTPC( AliESDVertex & ) const {return 0;}
  virtual Int_t GetPrimaryVertexSPD( AliESDVertex & ) const {return 0;}
  virtual Int_t GetPrimaryVertexTracks( AliESDVertex & ) const {return 0;}

  virtual void ConnectTracks() {}
  virtual EDataLayoutType GetDataLayoutType() const = 0;
  const char* Whoami();

  ClassDef(AliVEvent, 3)  // base class for AliEvent data
};
#endif 

 AliVEvent.h:1
 AliVEvent.h:2
 AliVEvent.h:3
 AliVEvent.h:4
 AliVEvent.h:5
 AliVEvent.h:6
 AliVEvent.h:7
 AliVEvent.h:8
 AliVEvent.h:9
 AliVEvent.h:10
 AliVEvent.h:11
 AliVEvent.h:12
 AliVEvent.h:13
 AliVEvent.h:14
 AliVEvent.h:15
 AliVEvent.h:16
 AliVEvent.h:17
 AliVEvent.h:18
 AliVEvent.h:19
 AliVEvent.h:20
 AliVEvent.h:21
 AliVEvent.h:22
 AliVEvent.h:23
 AliVEvent.h:24
 AliVEvent.h:25
 AliVEvent.h:26
 AliVEvent.h:27
 AliVEvent.h:28
 AliVEvent.h:29
 AliVEvent.h:30
 AliVEvent.h:31
 AliVEvent.h:32
 AliVEvent.h:33
 AliVEvent.h:34
 AliVEvent.h:35
 AliVEvent.h:36
 AliVEvent.h:37
 AliVEvent.h:38
 AliVEvent.h:39
 AliVEvent.h:40
 AliVEvent.h:41
 AliVEvent.h:42
 AliVEvent.h:43
 AliVEvent.h:44
 AliVEvent.h:45
 AliVEvent.h:46
 AliVEvent.h:47
 AliVEvent.h:48
 AliVEvent.h:49
 AliVEvent.h:50
 AliVEvent.h:51
 AliVEvent.h:52
 AliVEvent.h:53
 AliVEvent.h:54
 AliVEvent.h:55
 AliVEvent.h:56
 AliVEvent.h:57
 AliVEvent.h:58
 AliVEvent.h:59
 AliVEvent.h:60
 AliVEvent.h:61
 AliVEvent.h:62
 AliVEvent.h:63
 AliVEvent.h:64
 AliVEvent.h:65
 AliVEvent.h:66
 AliVEvent.h:67
 AliVEvent.h:68
 AliVEvent.h:69
 AliVEvent.h:70
 AliVEvent.h:71
 AliVEvent.h:72
 AliVEvent.h:73
 AliVEvent.h:74
 AliVEvent.h:75
 AliVEvent.h:76
 AliVEvent.h:77
 AliVEvent.h:78
 AliVEvent.h:79
 AliVEvent.h:80
 AliVEvent.h:81
 AliVEvent.h:82
 AliVEvent.h:83
 AliVEvent.h:84
 AliVEvent.h:85
 AliVEvent.h:86
 AliVEvent.h:87
 AliVEvent.h:88
 AliVEvent.h:89
 AliVEvent.h:90
 AliVEvent.h:91
 AliVEvent.h:92
 AliVEvent.h:93
 AliVEvent.h:94
 AliVEvent.h:95
 AliVEvent.h:96
 AliVEvent.h:97
 AliVEvent.h:98
 AliVEvent.h:99
 AliVEvent.h:100
 AliVEvent.h:101
 AliVEvent.h:102
 AliVEvent.h:103
 AliVEvent.h:104
 AliVEvent.h:105
 AliVEvent.h:106
 AliVEvent.h:107
 AliVEvent.h:108
 AliVEvent.h:109
 AliVEvent.h:110
 AliVEvent.h:111
 AliVEvent.h:112
 AliVEvent.h:113
 AliVEvent.h:114
 AliVEvent.h:115
 AliVEvent.h:116
 AliVEvent.h:117
 AliVEvent.h:118
 AliVEvent.h:119
 AliVEvent.h:120
 AliVEvent.h:121
 AliVEvent.h:122
 AliVEvent.h:123
 AliVEvent.h:124
 AliVEvent.h:125
 AliVEvent.h:126
 AliVEvent.h:127
 AliVEvent.h:128
 AliVEvent.h:129
 AliVEvent.h:130
 AliVEvent.h:131
 AliVEvent.h:132
 AliVEvent.h:133
 AliVEvent.h:134
 AliVEvent.h:135
 AliVEvent.h:136
 AliVEvent.h:137
 AliVEvent.h:138
 AliVEvent.h:139
 AliVEvent.h:140
 AliVEvent.h:141
 AliVEvent.h:142
 AliVEvent.h:143
 AliVEvent.h:144
 AliVEvent.h:145
 AliVEvent.h:146
 AliVEvent.h:147
 AliVEvent.h:148
 AliVEvent.h:149
 AliVEvent.h:150
 AliVEvent.h:151
 AliVEvent.h:152
 AliVEvent.h:153
 AliVEvent.h:154
 AliVEvent.h:155
 AliVEvent.h:156
 AliVEvent.h:157
 AliVEvent.h:158
 AliVEvent.h:159
 AliVEvent.h:160
 AliVEvent.h:161
 AliVEvent.h:162
 AliVEvent.h:163
 AliVEvent.h:164
 AliVEvent.h:165
 AliVEvent.h:166
 AliVEvent.h:167
 AliVEvent.h:168
 AliVEvent.h:169
 AliVEvent.h:170
 AliVEvent.h:171
 AliVEvent.h:172
 AliVEvent.h:173
 AliVEvent.h:174
 AliVEvent.h:175
 AliVEvent.h:176
 AliVEvent.h:177
 AliVEvent.h:178
 AliVEvent.h:179
 AliVEvent.h:180
 AliVEvent.h:181
 AliVEvent.h:182
 AliVEvent.h:183
 AliVEvent.h:184
 AliVEvent.h:185
 AliVEvent.h:186
 AliVEvent.h:187
 AliVEvent.h:188
 AliVEvent.h:189
 AliVEvent.h:190
 AliVEvent.h:191
 AliVEvent.h:192
 AliVEvent.h:193
 AliVEvent.h:194
 AliVEvent.h:195
 AliVEvent.h:196
 AliVEvent.h:197
 AliVEvent.h:198
 AliVEvent.h:199
 AliVEvent.h:200
 AliVEvent.h:201
 AliVEvent.h:202
 AliVEvent.h:203
 AliVEvent.h:204
 AliVEvent.h:205
 AliVEvent.h:206
 AliVEvent.h:207
 AliVEvent.h:208
 AliVEvent.h:209
 AliVEvent.h:210
 AliVEvent.h:211
 AliVEvent.h:212
 AliVEvent.h:213
 AliVEvent.h:214
 AliVEvent.h:215
 AliVEvent.h:216
 AliVEvent.h:217
 AliVEvent.h:218
 AliVEvent.h:219
 AliVEvent.h:220
 AliVEvent.h:221
 AliVEvent.h:222
 AliVEvent.h:223
 AliVEvent.h:224
 AliVEvent.h:225
 AliVEvent.h:226
 AliVEvent.h:227
 AliVEvent.h:228
 AliVEvent.h:229
 AliVEvent.h:230
 AliVEvent.h:231
 AliVEvent.h:232
 AliVEvent.h:233
 AliVEvent.h:234
 AliVEvent.h:235
 AliVEvent.h:236
 AliVEvent.h:237
 AliVEvent.h:238
 AliVEvent.h:239
 AliVEvent.h:240
 AliVEvent.h:241