ROOT logo
#ifndef ALIMUONTRACKERDATAMAKER_H
#define ALIMUONTRACKERDATAMAKER_H

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

// $Id$

/// \ingroup rec 
/// \class AliMUONTrackerDataMaker
/// \brief Implementation of VTrackerDataMaker to read raw data
/// 
// Author Laurent Aphecetche, Subatech

#ifndef ALIMUONVTRACKERDATAMAKER_H
#  include "AliMUONVTrackerDataMaker.h"
#endif
#ifndef ROOT_TString
#  include "TString.h"
#endif

class AliMUONRecoParam;
class AliMUONCalibrationData;
class AliMUONDigitCalibrator;
class AliMUONVStore;
class AliMUONVTrackerData;
class AliRawReader;
class AliMUONLogger;

class AliMUONTrackerDataMaker : public AliMUONVTrackerDataMaker
{
public:
  AliMUONTrackerDataMaker(TRootIOCtor*);
  
  AliMUONTrackerDataMaker(const AliMUONRecoParam* recoParam,
                          Int_t runNumber,
                          AliRawReader* rawReader,
                          const char* cdbPath,
                          const char* calibMode,
                          Bool_t histogram=kFALSE,
                          Double_t xmin=0.0,
                          Double_t xmax=4095.0);
  
  AliMUONTrackerDataMaker(const AliMUONRecoParam* recoParam,
                          AliRawReader* rawReader,
                          const char* cdbPath,
                          const char* calibMode,
                          Bool_t histogram=kFALSE,
                          Double_t xmin=0.0,
                          Double_t xmax=4095.0);
  
  AliMUONTrackerDataMaker(AliRawReader* rawReader, Bool_t histogram=kFALSE);
  
  virtual ~AliMUONTrackerDataMaker();
  
  Bool_t Add(const AliMUONTrackerDataMaker& other);

  /// Whether we have a valid reader or not
  Bool_t IsValid() const { return fRawReader != 0x0; }
  
  /// Get our accumulated data
  AliMUONVTrackerData* Data() const { return fAccumulatedData; }
  
  /// Whether or not we're the owner of our fAccumulatedData
  void SetOwnerOfData(Bool_t flag) { fIsOwnerOfAccumulatedData = flag; }

  /// Whether we're only handling event-by-event data (i.e. no accumulation)
  Bool_t IsEventByEvent() const { return fIsEventByEvent; }
  
  /// Set event-by-event mode
  void SetEventByEvent(Bool_t flag) { fIsEventByEvent = flag; }
  
  /// We can run if we have a reader
  Bool_t IsRunnable() const { return IsValid(); }
  
  /// Whether we are running or not
  Bool_t IsRunning() const { return fIsRunning; }
  
  /// Set the runnning status
  void SetRunning(Bool_t flag) { fIsRunning = flag; }
  
  Bool_t ProcessEvent();
  
  Bool_t NextEvent();
  
  void Print(Option_t* opt="") const;
  
  void Rewind();
  
  /// Get our source URI
  TString Source() const { return fSource.Data(); }
  
  /// Set our source URI
  void SetSource(const char* source) { fSource = source; }
  
  /// Number of events seen
  Int_t NumberOfEvents() const { return fNumberOfEvents; }

  /// Number of physics events seen
  Int_t NumberOfPhysicsEvents() const { return fNumberOfPhysicsEvents; }

  /// Number of good physics events seen
  Int_t NumberOfGoodPhysicsEvents() const { return fNumberOfGoodPhysicsEvents; }

  Long64_t Merge(TCollection* li);
  
  void SetRawReader(AliRawReader* rawReader);
  
  /// Set the error logger
  void EnableErrorLogger(AliMUONLogger* logger) { fLogger = logger; }
  
  /// Whether last decoded event was empty
  Bool_t LastEventWasEmpty() const { return fLastEventWasEmpty; }
  
  /// Whether or not we should try to recover corrupted raw data
  void SetTryRecover(Bool_t flag) { fTryRecover = flag; }
  
  /// Set the event range to consider
  void SetEventRange(Int_t first, Int_t last) { fFirstEvent=first; fLastEvent=last; }

private:
  /// not implemented
  AliMUONTrackerDataMaker(const AliMUONTrackerDataMaker& rhs);
  /// not implemented
  AliMUONTrackerDataMaker& operator=(const AliMUONTrackerDataMaker& rhs);

  void Ctor(const AliMUONRecoParam* param,
            Int_t runNumber,
            const char* calibMode,
            Bool_t histogram,
            Double_t xmin=0.0, 
            Double_t xmax=4095.0);
  
private:
  AliRawReader* fRawReader; //!< reader of the data (owner or not)
  AliMUONVTrackerData* fAccumulatedData; ///< data (owner or not)
  Bool_t fIsOwnerOfAccumulatedData; ///< owner or not of fAccumulatedData
  AliMUONVStore* fOneEventData; ///< data for a single event (owner)
  AliMUONDigitCalibrator* fDigitCalibrator; //!< digit calibrator (if calibrating)
  AliMUONCalibrationData* fCalibrationData; ///< calibration data (if calibrating)
  TString fSource; ///< where the data comes from
  TString fOCDBPath; ///< OCDB path (if calibrating)
  Int_t fNumberOfEvents; ///< number of events seen
  Int_t fRunNumber; ///< run number of the data
  Bool_t fIsRunning; ///< whether we are running or not
  Bool_t fIsOwnerOfRawReader; ///< whether we must delete rawReader or not
  Bool_t fIsEventByEvent; ///< we only keep one event's data (no accumulation)
  static Int_t fgkCounter; ///< to count the number of instances
  AliMUONLogger* fLogger; ///< error logger (not owner)
  Bool_t fLastEventWasEmpty; ///< whether last decoded event was empty
  Int_t fNumberOfPhysicsEvents; ///< number of physics events seen
  Int_t fNumberOfGoodPhysicsEvents; ///< number of errors with no (fatal) readout error
  Bool_t fTryRecover; ///< whether we should try to recover corrupted raw data
  Int_t fFirstEvent; ///< first event to consider
  Int_t fLastEvent; ///< last event to consider

  ClassDef(AliMUONTrackerDataMaker,5) // Producer of AliMUONVTrackerData from raw
};

#endif
 AliMUONTrackerDataMaker.h:1
 AliMUONTrackerDataMaker.h:2
 AliMUONTrackerDataMaker.h:3
 AliMUONTrackerDataMaker.h:4
 AliMUONTrackerDataMaker.h:5
 AliMUONTrackerDataMaker.h:6
 AliMUONTrackerDataMaker.h:7
 AliMUONTrackerDataMaker.h:8
 AliMUONTrackerDataMaker.h:9
 AliMUONTrackerDataMaker.h:10
 AliMUONTrackerDataMaker.h:11
 AliMUONTrackerDataMaker.h:12
 AliMUONTrackerDataMaker.h:13
 AliMUONTrackerDataMaker.h:14
 AliMUONTrackerDataMaker.h:15
 AliMUONTrackerDataMaker.h:16
 AliMUONTrackerDataMaker.h:17
 AliMUONTrackerDataMaker.h:18
 AliMUONTrackerDataMaker.h:19
 AliMUONTrackerDataMaker.h:20
 AliMUONTrackerDataMaker.h:21
 AliMUONTrackerDataMaker.h:22
 AliMUONTrackerDataMaker.h:23
 AliMUONTrackerDataMaker.h:24
 AliMUONTrackerDataMaker.h:25
 AliMUONTrackerDataMaker.h:26
 AliMUONTrackerDataMaker.h:27
 AliMUONTrackerDataMaker.h:28
 AliMUONTrackerDataMaker.h:29
 AliMUONTrackerDataMaker.h:30
 AliMUONTrackerDataMaker.h:31
 AliMUONTrackerDataMaker.h:32
 AliMUONTrackerDataMaker.h:33
 AliMUONTrackerDataMaker.h:34
 AliMUONTrackerDataMaker.h:35
 AliMUONTrackerDataMaker.h:36
 AliMUONTrackerDataMaker.h:37
 AliMUONTrackerDataMaker.h:38
 AliMUONTrackerDataMaker.h:39
 AliMUONTrackerDataMaker.h:40
 AliMUONTrackerDataMaker.h:41
 AliMUONTrackerDataMaker.h:42
 AliMUONTrackerDataMaker.h:43
 AliMUONTrackerDataMaker.h:44
 AliMUONTrackerDataMaker.h:45
 AliMUONTrackerDataMaker.h:46
 AliMUONTrackerDataMaker.h:47
 AliMUONTrackerDataMaker.h:48
 AliMUONTrackerDataMaker.h:49
 AliMUONTrackerDataMaker.h:50
 AliMUONTrackerDataMaker.h:51
 AliMUONTrackerDataMaker.h:52
 AliMUONTrackerDataMaker.h:53
 AliMUONTrackerDataMaker.h:54
 AliMUONTrackerDataMaker.h:55
 AliMUONTrackerDataMaker.h:56
 AliMUONTrackerDataMaker.h:57
 AliMUONTrackerDataMaker.h:58
 AliMUONTrackerDataMaker.h:59
 AliMUONTrackerDataMaker.h:60
 AliMUONTrackerDataMaker.h:61
 AliMUONTrackerDataMaker.h:62
 AliMUONTrackerDataMaker.h:63
 AliMUONTrackerDataMaker.h:64
 AliMUONTrackerDataMaker.h:65
 AliMUONTrackerDataMaker.h:66
 AliMUONTrackerDataMaker.h:67
 AliMUONTrackerDataMaker.h:68
 AliMUONTrackerDataMaker.h:69
 AliMUONTrackerDataMaker.h:70
 AliMUONTrackerDataMaker.h:71
 AliMUONTrackerDataMaker.h:72
 AliMUONTrackerDataMaker.h:73
 AliMUONTrackerDataMaker.h:74
 AliMUONTrackerDataMaker.h:75
 AliMUONTrackerDataMaker.h:76
 AliMUONTrackerDataMaker.h:77
 AliMUONTrackerDataMaker.h:78
 AliMUONTrackerDataMaker.h:79
 AliMUONTrackerDataMaker.h:80
 AliMUONTrackerDataMaker.h:81
 AliMUONTrackerDataMaker.h:82
 AliMUONTrackerDataMaker.h:83
 AliMUONTrackerDataMaker.h:84
 AliMUONTrackerDataMaker.h:85
 AliMUONTrackerDataMaker.h:86
 AliMUONTrackerDataMaker.h:87
 AliMUONTrackerDataMaker.h:88
 AliMUONTrackerDataMaker.h:89
 AliMUONTrackerDataMaker.h:90
 AliMUONTrackerDataMaker.h:91
 AliMUONTrackerDataMaker.h:92
 AliMUONTrackerDataMaker.h:93
 AliMUONTrackerDataMaker.h:94
 AliMUONTrackerDataMaker.h:95
 AliMUONTrackerDataMaker.h:96
 AliMUONTrackerDataMaker.h:97
 AliMUONTrackerDataMaker.h:98
 AliMUONTrackerDataMaker.h:99
 AliMUONTrackerDataMaker.h:100
 AliMUONTrackerDataMaker.h:101
 AliMUONTrackerDataMaker.h:102
 AliMUONTrackerDataMaker.h:103
 AliMUONTrackerDataMaker.h:104
 AliMUONTrackerDataMaker.h:105
 AliMUONTrackerDataMaker.h:106
 AliMUONTrackerDataMaker.h:107
 AliMUONTrackerDataMaker.h:108
 AliMUONTrackerDataMaker.h:109
 AliMUONTrackerDataMaker.h:110
 AliMUONTrackerDataMaker.h:111
 AliMUONTrackerDataMaker.h:112
 AliMUONTrackerDataMaker.h:113
 AliMUONTrackerDataMaker.h:114
 AliMUONTrackerDataMaker.h:115
 AliMUONTrackerDataMaker.h:116
 AliMUONTrackerDataMaker.h:117
 AliMUONTrackerDataMaker.h:118
 AliMUONTrackerDataMaker.h:119
 AliMUONTrackerDataMaker.h:120
 AliMUONTrackerDataMaker.h:121
 AliMUONTrackerDataMaker.h:122
 AliMUONTrackerDataMaker.h:123
 AliMUONTrackerDataMaker.h:124
 AliMUONTrackerDataMaker.h:125
 AliMUONTrackerDataMaker.h:126
 AliMUONTrackerDataMaker.h:127
 AliMUONTrackerDataMaker.h:128
 AliMUONTrackerDataMaker.h:129
 AliMUONTrackerDataMaker.h:130
 AliMUONTrackerDataMaker.h:131
 AliMUONTrackerDataMaker.h:132
 AliMUONTrackerDataMaker.h:133
 AliMUONTrackerDataMaker.h:134
 AliMUONTrackerDataMaker.h:135
 AliMUONTrackerDataMaker.h:136
 AliMUONTrackerDataMaker.h:137
 AliMUONTrackerDataMaker.h:138
 AliMUONTrackerDataMaker.h:139
 AliMUONTrackerDataMaker.h:140
 AliMUONTrackerDataMaker.h:141
 AliMUONTrackerDataMaker.h:142
 AliMUONTrackerDataMaker.h:143
 AliMUONTrackerDataMaker.h:144
 AliMUONTrackerDataMaker.h:145
 AliMUONTrackerDataMaker.h:146
 AliMUONTrackerDataMaker.h:147
 AliMUONTrackerDataMaker.h:148
 AliMUONTrackerDataMaker.h:149
 AliMUONTrackerDataMaker.h:150
 AliMUONTrackerDataMaker.h:151
 AliMUONTrackerDataMaker.h:152
 AliMUONTrackerDataMaker.h:153
 AliMUONTrackerDataMaker.h:154
 AliMUONTrackerDataMaker.h:155
 AliMUONTrackerDataMaker.h:156
 AliMUONTrackerDataMaker.h:157
 AliMUONTrackerDataMaker.h:158
 AliMUONTrackerDataMaker.h:159
 AliMUONTrackerDataMaker.h:160