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

/* $Id$ */

//_________________________________________________________________________
//  Wrapping class for reconstruction
//*--
//*-- Author: Yves Schutz (SUBATECH) 
//*--         Dmitri Peressounko (SUBATECH & Kurchatov Institute)
// Reconstruction class. Redesigned from the old AliReconstructionner class and 
// derived from STEER/AliReconstructor. 
// 

// --- ROOT system ---
class TClonesArray;
class TTree;

// --- AliRoot header files ---
#include "AliReconstructor.h" 
#include "AliEMCALTracker.h" 
#include "AliEMCALRecParam.h"

class AliEMCALDigitizer ;
class AliEMCALClusterizer ;
class AliEMCALSDigitizer ;
class AliEMCALRecParam;
class AliESDEvent ;
class AliRawReader ;
class AliEMCALRawUtils;
class AliEMCALGeometry;
class AliEMCALCalibData ;
class AliCaloCalibPedestal ;
class AliEMCALTriggerElectronics;
class AliEMCALTriggerData;

class AliEMCALReconstructor : public AliReconstructor {
  
 public:
  
  AliEMCALReconstructor() ; //ctor            
  
  virtual ~AliEMCALReconstructor() ; //dtor
  
  virtual  void  Init() {;}
  virtual  void  InitClusterizer() const;
  
  using AliReconstructor::FillESD;
  virtual void   FillESD(TTree* digitsTree, TTree* clustersTree, AliESDEvent* esd) const;
  AliTracker*    CreateTracker () const {return new AliEMCALTracker;} 
  using AliReconstructor::Reconstruct;
  virtual void   Reconstruct(TTree* digitsTree, TTree* clustersTree) const ;
  
  virtual Bool_t HasDigitConversion() const {return kTRUE;};
  virtual void   ConvertDigits(AliRawReader* rawReader, TTree* digitsTree) const;
  
  static void    SetRecParam(AliEMCALRecParam * recParam){ fgkRecParam = recParam;}
  
  void           ReadDigitsArrayFromTree(TTree *digitsTree) const;
  
  static const AliEMCALRecParam* GetRecParam() { 
    return dynamic_cast<const AliEMCALRecParam*>(AliReconstructor::GetRecoParam(6)); }
  
  static TClonesArray* GetDigitsArr() {return fgDigitsArr;}
  
  void           FillMisalMatrixes(AliESDEvent* esd)const ;

  //New class used to sort the matched tracks
  class  AliEMCALMatch : public TObject
  {
  public:
    AliEMCALMatch();
    AliEMCALMatch(const AliEMCALMatch& copy);
    AliEMCALMatch& operator = (const AliEMCALMatch& source) ;
    virtual ~AliEMCALMatch() { }
    //----------------------------------------------------------------------------
    Int_t     Compare(const TObject *obj) const;
    Bool_t    IsSortable() const {return kTRUE;}
    Double_t  GetDistance() const {return fDistance;}
    Double_t  GetdEta() const {return fdEta;}
    Double_t  GetdPhi() const {return fdPhi;}
    Int_t     GetIndexT() const {return fIndexT;}
    void      SetIndexT(Int_t itr) {fIndexT=itr;}
    void      SetDistance(Double_t dist) {fDistance=dist;}
    void      SetdEta(Double_t dEta) {fdEta=dEta;}
    void      SetdPhi(Double_t dPhi) {fdPhi=dPhi;}
  private:
    Int_t      fIndexT;      // track index in 'fTracks' array
    Double_t   fDistance;    // track - cluster distance
    Double_t   fdEta;        // track - cluster residual in eta
    Double_t   fdPhi;        // track - cluster residual in phi
  };
  Bool_t CalculateResidual(AliESDtrack *track, AliESDCaloCluster *cluster, Float_t &dEta, Float_t &dPhi) const;
  
 private:
  
  AliEMCALReconstructor(const AliEMCALReconstructor &); //Not implemented
  AliEMCALReconstructor & operator = (const AliEMCALReconstructor &); //Not implemented
  
  AliEMCALGeometry           * fGeom;             // pointer to the EMCAL geometry
  static AliEMCALClusterizer * fgClusterizer;     // clusterizer
  static AliEMCALRawUtils    * fgRawUtils;        // raw utilities class 
  
  //Temporal arrays with clusters, digits, triggers, to be reused per event
  static TClonesArray        * fgDigitsArr;       //-> Array with EMCAL digits
  static TObjArray           * fgClustersArr;     //-> Array with EMCAL clusters
  static TClonesArray        * fgTriggerDigits;   //-> Array with EMCAL trigger digits
  
  //OCDB
  static const AliEMCALRecParam* fgkRecParam;     // reconstruction parameters for EMCAL
  AliEMCALCalibData          * fCalibData   ;     //! Calibration database if aval
  AliCaloCalibPedestal       * fPedestalData ;    //! Tower status database if aval
  
  //Trigger specific
  static AliEMCALTriggerElectronics* fgTriggerProcessor; // Trigger preprocessor  
  AliEMCALTriggerData        * fTriggerData;      // Trigger parameters data container

  //Track matching
  TList                      * fMatches;          //! collection of matches between tracks and clusters
  
  ClassDef(AliEMCALReconstructor,12)  // Reconstruction algorithm class (Base Class)
}; 

#endif // ALIEMCALRECONSTRUCTOR_H

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