-#ifndef TRDdigitsManager_H
-#define TRDdigitsManager_H
+#ifndef ALITRDDIGITSMANAGER_H
+#define ALITRDDIGITSMANAGER_H
/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
* See cxx source for full Copyright notice */
-/* $Id: AliTRDdigitsManager.h,v */
+/* $Id$ */
/////////////////////////////////////////////////////////////
// Manages the TRD digits //
/////////////////////////////////////////////////////////////
-#include "TObject.h"
+#include <TObject.h>
-#include "AliTRDsegmentArray.h"
-#include "AliTRDdataArrayI.h"
-#include "AliTRDdigit.h"
-
-const Int_t kNDict = 3;
+class TFile;
+class TTree;
+class TBranch;
+class AliTRDdigit;
+class AliTRDSignalIndex;
+class AliTRDarrayADC;
+class AliTRDarraySignal;
+class AliTRDarrayDictionary;
+class AliTRDdigitsParam;
class AliTRDdigitsManager : public TObject {
public:
- AliTRDdigitsManager();
- ~AliTRDdigitsManager();
-
- virtual Bool_t MakeBranch();
- virtual Bool_t ReadDigits();
- virtual Bool_t WriteDigits();
-
- virtual void SetRaw();
-
- virtual Bool_t IsRaw() { return fIsRaw; };
- virtual AliTRDsegmentArray *GetDigits() { return fDigits; };
- virtual AliTRDsegmentArray *GetDictionary(Int_t i) { return fDictionary[i]; };
-
- inline AliTRDdataArrayI *GetDigits(Int_t det);
- inline AliTRDdataArrayI *GetDictionary(Int_t det, Int_t i);
- inline AliTRDdigit *GetDigit(Int_t row, Int_t col, Int_t time, Int_t det);
- inline Int_t GetTrack(Int_t track, Int_t row, Int_t col, Int_t time, Int_t det);
- inline Int_t GetTrack(Int_t track, AliTRDdigit *Digit);
-
- protected:
-
- AliTRDsegmentArray *fDigits; //! Digits data Array
- AliTRDsegmentArray *fDictionary[kNDict]; //! Track dictionary data array
-
- Bool_t fIsRaw; // Flag indicating raw digits
-
- ClassDef(AliTRDdigitsManager,1) // Manages the TRD digits
-
-};
-
-//_____________________________________________________________________________
-inline AliTRDdataArrayI *AliTRDdigitsManager::GetDigits(Int_t det)
-{
- //
- // Returns the digits array for one detector
- //
+ enum { kNDict = 3 };
- return (AliTRDdataArrayI *) fDigits->At(det);
+ AliTRDdigitsManager(Bool_t rawRec = kFALSE); //if true digitsmanager uses only one entry in the TObjectArrays
+ AliTRDdigitsManager(const AliTRDdigitsManager &m);
+ virtual ~AliTRDdigitsManager();
+ AliTRDdigitsManager &operator=(const AliTRDdigitsManager &m);
-}
+ virtual void Copy(TObject &m) const;
+ virtual void CreateArrays();
+ void ClearArrays(Int_t det);
+ virtual Bool_t BuildIndexes(Int_t det);
-//_____________________________________________________________________________
-inline AliTRDdataArrayI *AliTRDdigitsManager::GetDictionary(Int_t det, Int_t i)
-{
- //
- // Returns the dictionary for one detector
- //
-
- return (AliTRDdataArrayI *) fDictionary[i]->At(det);
+ virtual Bool_t MakeBranch(TTree * const tree);
+ virtual Bool_t ReadDigits(TTree * consttree);
+ virtual Bool_t WriteDigits();
-}
+ virtual void SetEvent(Int_t evt) { fEvent = evt; };
+ virtual void SetSDigits(Int_t v = 1) { fHasSDigits = v; };
+ virtual void SetUseDictionaries(Bool_t kval) { fUseDictionaries = kval; };
-//_____________________________________________________________________________
-inline AliTRDdigit *AliTRDdigitsManager::GetDigit(Int_t row, Int_t col
- , Int_t time, Int_t det)
-{
- //
- // Creates a single digit object
- //
+ virtual Bool_t UsesDictionaries() const { return fUseDictionaries; };
+ virtual Bool_t HasSDigits() const { return fHasSDigits; };
+ static Int_t NDict() { return fgkNDict; };
- Int_t digits[5];
+ virtual TObjArray *GetDigits() const { return fDigits; };
+ virtual TObjArray *GetDictionary(Int_t i) const { return fDict[i]; };
- digits[0] = det;
- digits[1] = row;
- digits[2] = col;
- digits[3] = time;
- digits[4] = GetDigits(det)->GetData(row,col,time);
+ AliTRDdigit *GetDigit(Int_t row, Int_t col, Int_t time, Int_t det) const;
+ Int_t GetTrack(Int_t track, Int_t row, Int_t col, Int_t time, Int_t det) const;
- return (new AliTRDdigit(fIsRaw,digits));
-
-}
-
-//_____________________________________________________________________________
-inline Int_t AliTRDdigitsManager::GetTrack(Int_t track
- , Int_t row, Int_t col, Int_t time
- , Int_t det)
-{
- //
- // Returns the MC-track numbers from the dictionary.
- //
-
- if ((track < 0) || (track >= kNDict)) {
- TObject::Error("GetTracks"
- ,"track %d out of bounds (size: %d, this: 0x%08x)"
- ,track,kNDict,this);
- return -1;
- }
-
- // Array contains index+1 to allow data compression
- return (GetDictionary(det,track)->GetData(row,col,time) - 1);
-
-}
-
-//_____________________________________________________________________________
-inline Int_t AliTRDdigitsManager::GetTrack(Int_t track, AliTRDdigit *Digit)
-{
- //
- // Returns the MC-track numbers from the dictionary for a given digit
- //
-
- Int_t row = Digit->GetRow();
- Int_t col = Digit->GetCol();
- Int_t time = Digit->GetTime();
- Int_t det = Digit->GetDetector();
+ AliTRDarrayADC *GetDigits(Int_t det) const;
+ AliTRDarraySignal *GetSDigits(Int_t det) const;
+ AliTRDarrayDictionary *GetDictionary(Int_t det, Int_t i) const;
+ AliTRDdigitsParam *GetDigitsParam() const { return fDigitsParam; };
+ AliTRDSignalIndex *GetIndexes(Int_t det);
+ TObjArray *GetIndexes() const { return fSignalIndexes; };
+
+ void RemoveDigits(Int_t det);
+ void RemoveDictionaries(Int_t det);
+ void RemoveIndexes(Int_t det);
+ void ClearIndexes(Int_t det);
+
+ Int_t GetTrack(Int_t track, const AliTRDdigit * const digit) const;
+ Short_t GetDigitAmp(Int_t row, Int_t col, Int_t time, Int_t det) const;
+ UChar_t GetPadStatus(Int_t row, Int_t col, Int_t time, Int_t det) const;
- return GetTrack(track,row,col,time,det);
+ Bool_t LoadArrayDigits();
+ Bool_t LoadArrayDict();
+ Bool_t LoadDigitsParam();
+ Bool_t StoreArrayDigits();
+ Bool_t StoreArrayDict();
+ Bool_t StoreDigitsParam();
-}
+ protected:
+
+ static const Int_t fgkNDict; // Number of track dictionary arrays
+ Int_t fEvent; // Event number
+ TTree *fTree; //! Tree for the digits arrays
+ TObjArray *fDigits; // Digits data array
+ TObjArray *fDict[kNDict]; // Track dictionary data array
+ Bool_t fHasSDigits; // Switch for the summable digits
+ TObjArray *fSignalIndexes; // Provides access to the active pads and tbins
+ Bool_t fUseDictionaries; // Use dictionaries or not (case of real data)
+ Int_t fDets; // No of Detectors
+ Bool_t fRawRec; // Reconstruct from raw files? If its kTRUE then the TObjArrays have only one entry.
+ AliTRDdigitsParam *fDigitsParam; // Parameters of the digits
+
+ ClassDef(AliTRDdigitsManager,8) // Manages the TRD digits
+};
#endif