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

/* $Id$ */

/////////////////////////////////////////////
//                                   	   //
//       class for ZDC reconstruction      //
//                                   	   //
/////////////////////////////////////////////

#include "AliReconstructor.h"
#include "AliZDCRecoParam.h"
#include "AliESDZDC.h"

class AliCDBManager;
class AliCDBStorage;
class AliZDCPedestals;
class AliZDCEnCalib;
class AliZDCSaturationCalib;
class AliZDCTowerCalib;
class AliZDCMBCalib;
class AliZDCTDCCalib;
class AliZDCRecoParampp;
class AliZDCRecoParamPbPb;
class AliLog;
class AliLoader;

class AliZDCReconstructor: public AliReconstructor {
public:
  AliZDCReconstructor();
  virtual ~AliZDCReconstructor();

  virtual void   Init();
  virtual void   Init(TString beamType, Float_t beamEnergy);
  virtual Bool_t HasDigitConversion() const {return kFALSE;};
  
  virtual void Reconstruct(TTree*digitsTree, TTree* clustersTree) const; 
  virtual void Reconstruct(AliRawReader* rawReader, TTree* clustersTree) const;

  virtual void FillESD(TTree* /*digitsTree*/, TTree* clustersTree, 
  		       AliESDEvent* esd) const {FillZDCintoESD(clustersTree, esd);}
  virtual void FillESD(AliRawReader* /*rawReader*/, TTree* clustersTree, 
		       AliESDEvent* esd) const {FillZDCintoESD(clustersTree, esd);}
  
  void   FillZDCintoESD(TTree *clustersTree, AliESDEvent *esd) const;
  
  // parameter settings for reconstruction
  void SetRecoMode(Int_t recoMode, Float_t beamEnergy) 
       {fRecoMode=recoMode; fBeamEnergy=beamEnergy;}
  static void SetRecoParam(AliZDCRecoParam * const param)
  	      {fgRecoParam = param;}
  
  Int_t   GetRecoMode() const {return fRecoMode;}
  Float_t GetBeamEnergy() const {return fBeamEnergy;}
  
  AliESDZDC* GetZDCESDData() const {return fESDZDC;}
  
  static const AliZDCRecoParam* GetRecoParam() 
  {return dynamic_cast<const AliZDCRecoParam*>(AliReconstructor::GetRecoParam(9));}
    
  void  SetPedSubMode(Int_t pedsubMode) {fPedSubMode=pedsubMode;}
  Int_t GetPedSubMode() const {return fPedSubMode;}
  
  void    SetSignalThreshold(Float_t val) {fSignalThreshold=val;}
  Float_t GetSignalThreshold() const {return fSignalThreshold;}
  
  // OCDB objects for reconstruction
  AliCDBStorage       *SetStorage(const char* uri);
  AliZDCPedestals     *GetPedestalData() const; 
  AliZDCEnCalib       *GetEnergyCalibData() const; 
  AliZDCSaturationCalib *GetSaturationCalibData() const; 
  AliZDCTowerCalib    *GetTowerCalibData() const; 
  AliZDCMBCalib       *GetMBCalibData() const; 
  AliZDCTDCCalib      *GetTDCCalibData() const; 
  
private:
  AliZDCReconstructor(const AliZDCReconstructor&); //Not implemented
  AliZDCReconstructor& operator =(const AliZDCReconstructor&); //Not implemented

  void   ReconstructEventpp(TTree *clustersTree, 
	 const Float_t* const corrADCZN1, const Float_t* const corrADCZP1, 
	 const Float_t* const corrADCZN2, const Float_t* const corrADCZP2,
	 const Float_t* const corrADCZEM1, const Float_t* const corrADCZEM2,
	 Float_t* sPMRef1, Float_t* sPMRef2, Bool_t isScalerOn, UInt_t* scaler, 
	 Int_t tdcData[32][4], const Int_t* const evQualityBlock, 
	 const Int_t* const triggerBlock, const Int_t* const chBlock, UInt_t puBits) const;
  void   ReconstructEventPbPb(TTree *clustersTree, 
	 const Float_t* const corrADCZN1, const Float_t* const corrADCZP1, 
	 const Float_t* const corrADCZN2, const Float_t* const corrADCZP2,
	 const Float_t* const corrADCZEM1, const Float_t* const corrADCZEM2,
	 Float_t* sPMRef1, Float_t* sPMRef2, Bool_t isScalerOn, UInt_t* scaler, 
	 Int_t tdcData[32][4], const Int_t* const evQualityBlock, 
	 const Int_t* const triggerBlock, const Int_t* const chBlock, UInt_t puBits) const;

  static AliZDCRecoParam *fgRecoParam; // reconstruction parameters

  static AliZDCMBCalib   *fgMBCalibData;   //! mb calibration data
  AliZDCPedestals  *fPedData; 	    	  //! pedestal calibration data
  AliZDCEnCalib    *fEnCalibData;   	  //! energy calibration data
  AliZDCSaturationCalib  *fSatCalibData;   	  //! energy calibration data
  AliZDCTowerCalib *fTowCalibData;  	  //! equalization calibration data
  AliZDCTDCCalib   *fTDCCalibData;  	  //! TDC offset data
  
  Int_t    fRecoMode;	    // =1->p-p, =2->A-A
  Float_t  fBeamEnergy;	    // beam energy
  Int_t	   fNRun;	    // Run Number (from raw data)
  Bool_t   fIsCalibrationMB; // true if run type = "CALIBRATION_MB"
  Int_t    fPedSubMode;	    // =0->mean values, =1->from correlations
  Float_t  fSignalThreshold; // Threshold value for "triggering" in p-p
  Double_t fMeanPhase;      // LHC clock phase
  
  AliESDZDC* fESDZDC;       // ESD output object  

  ClassDef(AliZDCReconstructor, 14)   // class for the ZDC reconstruction
};

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