ROOT logo
#ifndef ALIMUONRECONSTRUCTOR_H
#define ALIMUONRECONSTRUCTOR_H

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

// $Id$

/// \ingroup rec
/// \class AliMUONReconstructor
/// \brief Implementation of AliReconstructor for MUON (both tracker and trigger)
/// 
// Author Laurent Aphecetche, Subatech

#ifndef ALIRECONSTRUCTOR_H
#  include "AliReconstructor.h"
#endif
#ifndef ROOT_TObjArray
#define "TObjArray.h"
#endif

class AliMUONCalibrationData;
class AliMUONDigitCalibrator;
class AliMUONDigitMaker;
class AliMUONGeometryTransformer;
class AliMUONTracker;
class AliMUONTriggerCircuit;
class AliMUONVClusterFinder;
class AliMUONVClusterServer;
class AliMUONVClusterStore;
class AliMUONVDigitStore;
class AliMUONVTrackStore;
class AliMUONVTriggerStore;
class AliMUONTriggerElectronics;
class TClonesArray;
class AliMUONTriggerUtilities;

#include "AliMUONRecoParam.h"

class AliMUONReconstructor : public AliReconstructor
{
public:
  AliMUONReconstructor();
  virtual ~AliMUONReconstructor();
  
  virtual Bool_t HasDigitConversion() const;

  virtual void ConvertDigits(AliRawReader* rawReader, TTree* digitsTree) const;
  
  virtual void Reconstruct(AliRawReader* rawReader, TTree* clustersTree) const;
  
  virtual void Reconstruct(TTree* digitsTree, TTree* clustersTree) const;
  
  virtual AliTracker* CreateTracker() const;
  
  /// Get param object
  static const AliMUONRecoParam* GetRecoParam();
  
  static AliMUONVClusterFinder* CreateClusterFinder(const char* clusterFinderType);

private:
  /// Not implemented
  AliMUONReconstructor(const AliMUONReconstructor&);
  /// Not implemented
  AliMUONReconstructor& operator=(const AliMUONReconstructor&);
  
  void ConvertDigits(AliRawReader* rawReader, 
                     AliMUONVDigitStore* digitStore,
                     AliMUONVTriggerStore* triggerStore) const;
  void Calibrate(AliMUONVDigitStore& digitStore) const;
  void CreateCalibrationData() const;
  void CreateCalibrator() const;
  void CreateDigitMaker() const;
  void CreateTriggerCircuit() const;
  void CreateTriggerUtilities() const;
  AliMUONVClusterServer* CreateClusterServer(const AliMUONRecoParam& rp) const;
  void FillTreeR(AliMUONVTriggerStore* triggerStore,
                 TTree& clustersTree) const;
  
  AliMUONVDigitStore* DigitStore() const;
  AliMUONVTriggerStore* TriggerStore() const;
  void ResponseRemovingChambers(AliMUONVTriggerStore* triggerStore) const;
  
private:

  mutable AliMUONDigitMaker* fDigitMaker; //!< Raw to Digits converter
  AliMUONGeometryTransformer* fTransformer; //!< Geometry transformer (local<->global)
  mutable AliMUONVDigitStore* fDigitStore; //!< Digit container
  mutable AliMUONTriggerCircuit* fTriggerCircuit; //!< Trigger Circuit
  mutable AliMUONCalibrationData* fCalibrationData; //!< Calibration data
  mutable AliMUONDigitCalibrator* fDigitCalibrator; //!<  Digit to calibrate digit converter
  mutable AliMUONVTriggerStore* fTriggerStore; //!< Trigger container
  mutable AliMUONVTrackStore* fTrackStore; //!< Track container
  mutable AliMUONVClusterStore* fClusterStore; //!< cluster store (when not in combined tracking mode)
  mutable AliMUONTriggerElectronics* fTriggerProcessor; //!< Processor to recalculate trigger response
  mutable AliMUONTriggerUtilities* fTriggerUtilities; //!< Trigger utilities for masks
  mutable TObjArray fClusterServers; //!<  Clusterizers (one per event specie)
  mutable TObjArray fTrackers; //!< trackers (one per event specie)
  mutable Bool_t fShouldCalibrate; // whether the fDigitCalibrator should be non-null
  
  ClassDef(AliMUONReconstructor,12) // Implementation of AliReconstructor
};

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