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

/////////////////////////////////////////////////////////////////////////////////////////
//                                                                                     //
//                  Raw data processing base class                                     //
//                                                                                     //
/////////////////////////////////////////////////////////////////////////////////////////

#include <TNamed.h>

class AliAltroMapping;
class AliAltroRawStream;
class AliRawReader;
class AliTPCAltroMapping;
class AliTPCRawStreamV3;
class AliTPCROC;
class TTreeSRedirector;
class TCollection;
struct eventHeaderStruct;

class AliTPCCalibRawBase : public TNamed {


public:
  AliTPCCalibRawBase();
  AliTPCCalibRawBase(const AliTPCCalibRawBase &calib);

  AliTPCCalibRawBase& operator = (const  AliTPCCalibRawBase &source);

  virtual ~AliTPCCalibRawBase();
  
  //uses the new decoder which is compatible with the new altro format
  Bool_t ProcessEvent(AliTPCRawStreamV3   * const rawStreamV3);
  Bool_t ProcessEvent(AliRawReader        * const rawReader);
  Bool_t ProcessEvent(eventHeaderStruct   * const event);

  virtual Int_t Update(const Int_t /*isector*/, const Int_t /*iRow*/, const Int_t /*iPad*/,
                       const Int_t /*iTimeBin*/, const Float_t /*signal*/) { return 0; }
  virtual void UpdateDDL() {return;}
  virtual void ProcessBunch(const Int_t /*sector*/, const Int_t /*row*/, const Int_t /*pad*/,
                            const Int_t /*length*/, const UInt_t /*startTimeBin*/, const UShort_t* /*signal*/) {return; }
  virtual void Analyse(){ return; }
  
  virtual Long64_t Merge(TCollection * /*list*/) {return 0;}
  void MergeBase(const AliTPCCalibRawBase *calib);
  
  //Setters
  void  SetRangeTime (Int_t firstTimeBin, Int_t lastTimeBin) { fFirstTimeBin=firstTimeBin;   fLastTimeBin=lastTimeBin;  } //Set range in which the signal is expected
  void  SetAltroMapping(AliTPCAltroMapping **mapp) { fMapping = mapp; }
  //
  void SetUseL1Phase(Bool_t useL1Phase=kTRUE) {fUseL1Phase=useL1Phase;}
  //
  void  SetTimeStampEvent(UInt_t timestamp){ fTimeStamp = timestamp; }
  void  SetRunNumber(UInt_t eventnumber){ fRunNumber = eventnumber; }

  //
  Int_t GetFirstTimeBin()   const { return fFirstTimeBin;  }
  Int_t GetLastTimeBin()    const { return fLastTimeBin;   }
  Int_t GetNevents() const { return fNevents; }
  //
  Double_t GetL1Phase()   const {return fAltroL1Phase;}
  Double_t GetL1PhaseTB() const {return fAltroL1PhaseTB;}
  Bool_t   GetUseL1Phase()const {return fUseL1Phase;}
//
  UInt_t GetRunNumber()      const {return fRunNumber;}
  UInt_t GetFirstTimeStamp() const {return fFirstTimeStamp;}
  UInt_t GetLastTimeStamp()  const {return fLastTimeStamp;}
  UInt_t GetTimeStamp()      const {return fTimeStamp;}
  UInt_t GetEventType()      const {return fEventType;}
  //
  AliTPCAltroMapping **GetAltroMapping() { return fMapping; }
  const AliAltroRawStream *GetAltroRawStream() const {return fAltroRawStream;}
  const AliTPCROC *GetTPCROC() const {return fROC;}
  //
  void IncrementNevents(){++fNevents;}
  //
  virtual void DumpToFile(const Char_t *filename, const Char_t *dir="", Bool_t append=kFALSE);
  // debug and debug streamer support
  TTreeSRedirector *GetDebugStreamer();
  void       SetStreamLevel(Int_t streamLevel){fStreamLevel=streamLevel;}
  void       SetDebugLevel(Int_t level) {fDebugLevel = level;}
  Int_t      GetStreamLevel() const {return fStreamLevel;}
  Int_t      GetDebugLevel() const {return fDebugLevel;}

protected:
  Int_t fFirstTimeBin;                //  First Time bin used for analysis
  Int_t fLastTimeBin;                 //  Last Time bin used for analysis
  
  Int_t fNevents;                     //  Number of processed events 
  
  Int_t fDebugLevel;                  //! debug level
  Int_t fStreamLevel;                 //! level of streamer output
  //
  UInt_t fRunNumber;                  // current run number from event header
  UInt_t fFirstTimeStamp;             // First event time stamp
  UInt_t fLastTimeStamp;              // Last event time stamp
  UInt_t fTimeStamp;                  //! time stamp from event header
  UInt_t fEventType;                  //! current event Type from event header
  //
  Double_t fAltroL1Phase;             //! L1 Phase
  Float_t  fAltroL1PhaseTB;           //! L1 Phase in time bins
  Int_t    fCurrRCUId;                //! Current RCU Id
  Int_t    fPrevRCUId;                //! Previous RCU Id
  Int_t    fCurrDDLNum;               //! Current DDL number
  Int_t    fPrevDDLNum;               //! Current DDL number
  Bool_t   fUseL1Phase;               //  use L1 Phase information?
  //
  TTreeSRedirector *fDebugStreamer;   //! debug streamer
  //
  AliAltroRawStream *fAltroRawStream; //! pointer to the altro object
  AliTPCAltroMapping **fMapping;      //! Altro Mapping object

  AliTPCROC *fROC;                    //! ROC information
    
  virtual void EndEvent() {++fNevents; return; } //fNevents should be updated in the derived classes in a proper place
  virtual void ResetEvent(){ return; }           //Reset Event counters
  
  
  ClassDef(AliTPCCalibRawBase,3)      //  Calibration base class for raw data processing
    
};


#endif

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