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

/* $Id$ */

///////////////////////////////////////////////////////////////////////////////
//                                                                           //
//  Converts TRD digits into a raw data stream                               //
//                                                                           //
///////////////////////////////////////////////////////////////////////////////

#include "TObject.h"
#include "AliLog.h"
#include "AliTRDgeometry.h"

class TTree;
class TClonesArray;

class AliRunLoader;

class AliRawReader;

class AliTRDdigitsManager;
class AliTRDfeeParam;
class AliTRDarrayADC;
class AliTRDdigitsParam;
class AliTRDmcmSim;

class AliTRDrawData : public TObject {

 public:

  AliTRDrawData();
  AliTRDrawData(const AliTRDrawData &r);
  virtual ~AliTRDrawData();

  AliTRDrawData &operator=(const AliTRDrawData &/*r*/) { return *this; }

  virtual Bool_t       Digits2Raw(TTree *digits, const TTree *tracks = NULL);

  virtual AliTRDdigitsManager *Raw2Digits(AliRawReader *rawReader);

  void                    SetTracklets(TClonesArray*) { AliError("Deprecated, not doing anything."); }
  void                    SetTracks(TClonesArray*) { AliError("Deprecated, not doing anything"); }

  UInt_t  GetTriggerFlags(const Int_t sector) const { return fTrgFlags[sector]; }

 protected:

  virtual Bool_t       Digits2Raw(AliTRDdigitsManager* digitsManager); // for fRawVersion > 0
  virtual Int_t        ProduceHcData(AliTRDarrayADC *digits, Int_t side, Int_t det, UInt_t *buf, Int_t maxSize, Bool_t newEvent, Bool_t newSM);
  	  void 	       ProduceSMIndexData(UInt_t *buf, Int_t& nw);				// SM index words and header - real data format
          void         WriteIntermediateWords(UInt_t *buf, Int_t& nw, Int_t& of, const Int_t& maxSize, const Int_t& det, const Int_t& side); // real data format
       	  void         AssignStackMask(UInt_t *buf, Int_t nStack);  // re-assignment of stack mask in the SM index word
          void         AssignLinkMask(UInt_t *buf, Int_t nLayer);   // re-assignment of link mask in the stack index word
          Int_t        AddStackIndexWords(UInt_t *buf, Int_t nStack, Int_t nMax);   // add stack index words and stack header when there is no data for the stack 
          Bool_t       ShiftWords(UInt_t *buf, Int_t nStart, Int_t nWords, Int_t nMax); // shifts n words
  
  AliRunLoader        *fRunLoader;      //! Run Loader
  AliTRDgeometry      *fGeo;            //! Geometry
  AliTRDfeeParam      *fFee;            //! Fee Parameters
  Int_t                fNumberOfDDLs;   //  Number of DDLs
  TTree               *fTrackletTree;   //! Tree for tracklets

  TClonesArray        *fTracklets;      //! Array of online tracklets
  TClonesArray        *fTracks;         //! Array of GTU tracks

 private:

  static       Int_t  fgDataSuppressionLevel;               // Data suppression level - 0:no su, 1: su, 2: deep suppression 
  static const UInt_t fgkEndOfTrackletMarker  = 0x10001000; // This marks the end of tracklet data words
  static const UInt_t fgkEndOfDataMarker      = 0x00000000; // This marks the end of HC data words

  Int_t   fSMindexPos;                // Position of SM index word
  Int_t   fStackindexPos;             // Position of SM index word
  UInt_t  fEventCounter;              // Event counter(starting from 1)
  UInt_t  fTrgFlags[AliTRDgeometry::kNsector]; // trigger flags
  AliTRDmcmSim      *fMcmSim;         //! MCM simulation for raw data output
  AliTRDdigitsParam *fDigitsParam;    // Digits parameter

  ClassDef(AliTRDrawData,8)             //  TRD raw data class

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