ROOT logo
#ifndef ALIMUONREFITTER_H
#define ALIMUONREFITTER_H

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

// $Id$

/// \ingroup rec
/// \class AliMUONRefitter
/// \brief class to refit the ESD clusters/tracks
/// 
//  Author Philippe Pillot

#include <TObject.h>

class AliMUONGeometryTransformer;
class AliMUONVClusterFinder;
class AliMUONVClusterServer;
class AliMUONVTrackReconstructor;
class AliMUONESDInterface;
class AliMUONVClusterStore;
class AliMUONVTrackStore;
class AliMUONTrack;
class AliMUONRecoParam;

class AliMUONRefitter : public TObject
{
public:
  
  AliMUONRefitter(const AliMUONRecoParam* recoParam);
  virtual ~AliMUONRefitter();
  
  /// connect to the ESD interface containing MUON data to refit
  void Connect(const AliMUONESDInterface* esdInterface) {fkESDInterface = esdInterface;}
  
  // re-reconstruct all tracks (clusters) in the ESD event
  AliMUONVTrackStore* ReconstructFromDigits();
  AliMUONVTrackStore* ReconstructFromClusters();
  
  // refit a particular track in the ESD event
  AliMUONTrack* RetrackFromDigits(UInt_t trackId);
  AliMUONTrack* RetrackFromClusters(UInt_t trackId);
  
  // re-clusterize a particular cluster in the ESD event
  AliMUONVClusterStore* ReClusterize(UInt_t trackId, UInt_t clusterId);
  AliMUONVClusterStore* ReClusterize(UInt_t clusterId);
  
  // set the first index of clusters produced by this refitter (to build its uniqueID)
  void SetFirstClusterIndex(Int_t index) {nextClusterIndex = (index >= 0) ? index : 0;}
  
protected:
  
  AliMUONRefitter (const AliMUONRefitter&); ///< copy constructor
  AliMUONRefitter& operator=(const AliMUONRefitter&); ///< assignment operator
  
  
private:
  
  void CreateGeometryTransformer();
  void CreateClusterServer(AliMUONGeometryTransformer& transformer);
  
  AliMUONTrack* RetrackFromDigits(const AliMUONTrack& track);
  
  Bool_t AddClusterToTracks(const AliMUONVClusterStore &localClusterStore, AliMUONVTrackStore &trackStore);
  
private:
    
  const AliMUONRecoParam*     fkRecoParam;          ///< pointer to reco param (not owner)
  const AliMUONESDInterface*  fkESDInterface;       ///< container of MUON tracks/clusters/digits (not owner)
  AliMUONGeometryTransformer* fGeometryTransformer; ///< geometry transformer (owner)
  AliMUONVClusterServer*      fClusterServer;       ///< clusterizer (owner)
  AliMUONVTrackReconstructor* fTracker;             ///< tracker (owner)
  
  Int_t nextClusterIndex; ///< Index of the next cluster produced by this refitter (to build its uniqueID)
  
  ClassDef(AliMUONRefitter,0)
};

#endif

 AliMUONRefitter.h:1
 AliMUONRefitter.h:2
 AliMUONRefitter.h:3
 AliMUONRefitter.h:4
 AliMUONRefitter.h:5
 AliMUONRefitter.h:6
 AliMUONRefitter.h:7
 AliMUONRefitter.h:8
 AliMUONRefitter.h:9
 AliMUONRefitter.h:10
 AliMUONRefitter.h:11
 AliMUONRefitter.h:12
 AliMUONRefitter.h:13
 AliMUONRefitter.h:14
 AliMUONRefitter.h:15
 AliMUONRefitter.h:16
 AliMUONRefitter.h:17
 AliMUONRefitter.h:18
 AliMUONRefitter.h:19
 AliMUONRefitter.h:20
 AliMUONRefitter.h:21
 AliMUONRefitter.h:22
 AliMUONRefitter.h:23
 AliMUONRefitter.h:24
 AliMUONRefitter.h:25
 AliMUONRefitter.h:26
 AliMUONRefitter.h:27
 AliMUONRefitter.h:28
 AliMUONRefitter.h:29
 AliMUONRefitter.h:30
 AliMUONRefitter.h:31
 AliMUONRefitter.h:32
 AliMUONRefitter.h:33
 AliMUONRefitter.h:34
 AliMUONRefitter.h:35
 AliMUONRefitter.h:36
 AliMUONRefitter.h:37
 AliMUONRefitter.h:38
 AliMUONRefitter.h:39
 AliMUONRefitter.h:40
 AliMUONRefitter.h:41
 AliMUONRefitter.h:42
 AliMUONRefitter.h:43
 AliMUONRefitter.h:44
 AliMUONRefitter.h:45
 AliMUONRefitter.h:46
 AliMUONRefitter.h:47
 AliMUONRefitter.h:48
 AliMUONRefitter.h:49
 AliMUONRefitter.h:50
 AliMUONRefitter.h:51
 AliMUONRefitter.h:52
 AliMUONRefitter.h:53
 AliMUONRefitter.h:54
 AliMUONRefitter.h:55
 AliMUONRefitter.h:56
 AliMUONRefitter.h:57
 AliMUONRefitter.h:58
 AliMUONRefitter.h:59
 AliMUONRefitter.h:60
 AliMUONRefitter.h:61
 AliMUONRefitter.h:62
 AliMUONRefitter.h:63
 AliMUONRefitter.h:64
 AliMUONRefitter.h:65
 AliMUONRefitter.h:66
 AliMUONRefitter.h:67
 AliMUONRefitter.h:68
 AliMUONRefitter.h:69
 AliMUONRefitter.h:70
 AliMUONRefitter.h:71
 AliMUONRefitter.h:72
 AliMUONRefitter.h:73
 AliMUONRefitter.h:74
 AliMUONRefitter.h:75
 AliMUONRefitter.h:76
 AliMUONRefitter.h:77
 AliMUONRefitter.h:78
 AliMUONRefitter.h:79
 AliMUONRefitter.h:80
 AliMUONRefitter.h:81