- add decoding of GTU tracks
authorcblume <cblume@f7af4fe6-9843-0410-8265-dc069ae4e863>
Sun, 5 Sep 2010 13:35:00 +0000 (13:35 +0000)
committercblume <cblume@f7af4fe6-9843-0410-8265-dc069ae4e863>
Sun, 5 Sep 2010 13:35:00 +0000 (13:35 +0000)
- add methods to set arrays for storage of tracklets, GTU tracks and markers
- add storing of HC active markers (if activated)

TRD/AliTRDrawStream.cxx
TRD/AliTRDrawStream.h

index 1009781..079b2e1 100644 (file)
@@ -37,6 +37,7 @@
 #include "AliTRDarrayDictionary.h"
 #include "AliTRDSignalIndex.h"
 #include "AliTRDtrackletWord.h"
+#include "AliESDTrdTrack.h"
 #include "AliTreeLoader.h"
 
 #include "AliTRDrawStream.h"
@@ -172,7 +173,10 @@ AliTRDrawStream::AliTRDrawStream(AliRawReader *rawReader) :
   fTrackletArray(0x0),
   fAdcArray(0x0),
   fSignalIndex(0x0),
-  fTrackletTree(0x0)
+  fTrackletTree(0x0),
+  fTracklets(0x0),
+  fTracks(0x0),
+  fMarkers(0x0)
 {
   // default constructor
 
@@ -186,6 +190,8 @@ AliTRDrawStream::AliTRDrawStream(AliRawReader *rawReader) :
   fCurrLinkMonitorFlags   = new UInt_t[fgkNstacks * fgkNlinks];
   fCurrLinkDataTypeFlags  = new UInt_t[fgkNstacks * fgkNlinks];
   fCurrLinkDebugFlags     = new UInt_t[fgkNstacks * fgkNlinks];
+  for (Int_t i = 0; i < 100; i++)
+    fDumpMCM[i] = 0;
 
   // preparing TClonesArray
   fTrackletArray = new TClonesArray("AliTRDtrackletWord", 256);
@@ -193,7 +199,7 @@ AliTRDrawStream::AliTRDrawStream(AliRawReader *rawReader) :
   // setting up the error tree
   fErrors = new TTree("errorStats", "Error statistics");
   fErrors->SetDirectory(0x0);
-  fErrors->Branch("error", &fLastError, "sector/I:stack:link:error:rob:mcm");
+  fErrors->Branch("error", &fLastError);
   fErrors->SetCircular(1000);
 }
 
@@ -431,6 +437,8 @@ Int_t AliTRDrawStream::ReadSmHeader()
 
   fCurrSmuIndexHeaderSize     = ((*fPayloadCurr) >> 16) & 0xffff;
   fCurrSmuIndexHeaderVersion  = ((*fPayloadCurr) >> 12) &    0xf;
+  //  fCurrSmuIndexHeaderTrgAvail = ((*fPayloadCurr) >>  9) &    0x1;
+  //  fCurrSmuIndexHeaderEvType   = ((*fPayloadCurr) >>  7) &    0x3;
   fCurrTrackEnable            = ((*fPayloadCurr) >>  6) &    0x1;
   fCurrTrackletEnable         = ((*fPayloadCurr) >>  5) &    0x1;
   fCurrStackMask              = ((*fPayloadCurr)      ) &   0x1f;
@@ -441,7 +449,35 @@ Int_t AliTRDrawStream::ReadSmHeader()
                   fCurrTrackEnable, 
                   fCurrTrackletEnable,
                   fCurrStackMask));
-  
+
+  // decode GTU track words
+  UInt_t trackWord[2];
+  Int_t stack = 0;
+  Int_t idx = 0;
+  for (UInt_t iWord = 4; iWord < fCurrSmuIndexHeaderSize; iWord++) {
+    if (fPayloadCurr[iWord] == 0x10000000) {
+      stack++;
+      idx = 0;
+    }
+    else {
+      if ((idx == 0) &&
+         ((fPayloadCurr[iWord] & 0xfffff0f0) == 0x13370000)) {
+       AliDebug(1,Form("stack %i: fast trigger word: 0x%08x", stack, fPayloadCurr[iWord]));
+       continue;
+      }
+      else if ((idx & 0x1)==0x1) {
+       trackWord[idx&0x1] = fPayloadCurr[iWord];
+       AliDebug(1,Form("track debug word: 0x%08x%08x", trackWord[1], trackWord[0]));
+//     if (fTracks)
+//       new ((*fTracks)[fTracks->GetEntriesFast()]) AliESDTrdTrack(0, 0, trackWord[0], trackWord[1], fCurrEquipmentId-1024);
+      }
+      else {
+       trackWord[idx&0x1] = fPayloadCurr[iWord];
+      }
+      idx++;
+    }
+  }
+
   fPayloadCurr += fCurrSmuIndexHeaderSize + 1;
 
   return fCurrSmuIndexHeaderSize + 1;
@@ -508,6 +544,10 @@ Int_t AliTRDrawStream::ReadLinkData()
 //        fPayloadCurr[i*4+0], fPayloadCurr[i*4+1], fPayloadCurr[i*4+2], fPayloadCurr[i*4+3]);
 //  }
 
+  if (fMarkers)
+    new ((*fMarkers)[fMarkers->GetEntriesFast()])
+      AliTRDrawStreamError(-kHCactive, fCurrSm, fCurrStack, fCurrLink);
+
   if (fErrorFlags & kDiscardHC)
     return count;
 
@@ -610,7 +650,7 @@ Int_t AliTRDrawStream::ReadTracklets()
   while (*(fPayloadCurr) != fgkTrackletEndmarker && 
         fPayloadCurr - fPayloadStart < fPayloadSize) {
 
-    new ((*fTrackletArray)[fTrackletArray->GetEntriesFast()]) AliTRDtrackletWord(*(fPayloadCurr));
+    new ((*fTrackletArray)[fTrackletArray->GetEntriesFast()]) AliTRDtrackletWord(*(fPayloadCurr), fCurrHC);
 
     fPayloadCurr++;
   }
@@ -618,10 +658,16 @@ Int_t AliTRDrawStream::ReadTracklets()
   if (fTrackletArray->GetEntriesFast() > 0) {
     AliDebug(1, Form("Found %i tracklets in %i %i %i (ev. %i)", fTrackletArray->GetEntriesFast(), 
                     fCurrSm, fCurrSlot, fCurrLink, fRawReader->GetEventIndex()));
-    fStats.fStatsSector[fCurrSm].fStatsHC[fCurrHC%60].fNTracklets += fTrackletArray->GetEntriesFast();
-    fStats.fStatsSector[fCurrSm].fNTracklets                      += fTrackletArray->GetEntriesFast();
+    if (fCurrSm > -1 && fCurrSm < 18) {
+      fStats.fStatsSector[fCurrSm].fStatsHC[fCurrHC%60].fNTracklets += fTrackletArray->GetEntriesFast();
+      fStats.fStatsSector[fCurrSm].fNTracklets                      += fTrackletArray->GetEntriesFast();
+    }
     if (fTrackletTree)
       fTrackletTree->Fill();
+    if (fTracklets)
+      for (Int_t iTracklet = 0; iTracklet < fTrackletArray->GetEntriesFast(); iTracklet++) {
+       new ((*fTracklets)[fTracklets->GetEntriesFast()]) AliTRDtrackletWord(*((AliTRDtrackletWord*)(*fTrackletArray)[iTracklet]));
+      }
   }
 
   // loop over remaining tracklet endmarkers
@@ -674,7 +720,7 @@ Int_t AliTRDrawStream::ReadHcHeader()
   
   fPayloadCurr += 1 + fCurrAddHcWords;
   
-  return (fPayloadCurr - start) / sizeof(UInt_t);
+  return (fPayloadCurr - start);
 }
 
 Int_t AliTRDrawStream::ReadTPData(Int_t mode)
index b1efb6a..bfc56b5 100644 (file)
@@ -36,6 +36,13 @@ class AliTRDrawStream : public AliTRDrawStreamBase
 
   Bool_t SetReader(AliRawReader *rawReader) { fRawReader = rawReader; return kTRUE; }
   void SetDigitsManager(AliTRDdigitsManager *digMgr) { fDigitsManager = digMgr; }
+  void SetTrackletArray(TClonesArray *ar) { fTracklets = ar; }
+  void SetTrackArray(TClonesArray *ar) { fTracks = ar; }
+  void SetMarkerArray(TClonesArray *ar) { fMarkers = ar; }
+
+  TClonesArray* GetTrackletArray() const { return fTracklets; }
+  TClonesArray* GetTrackArray() const { return fTracks; }
+  TClonesArray* GetMarkerArray() const { return fMarkers; }
 
   AliTRDdigitsManager* GetDigitsManager() const { return fDigitsManager; }
   TTree *GetTrackletTree() const { return fTrackletTree; }
@@ -48,6 +55,8 @@ class AliTRDrawStream : public AliTRDrawStreamBase
 
   Bool_t ConnectTracklets(TTree *trklTree);
 
+  void StoreErrorsInTree()   { fStoreError = &AliTRDrawStream::StoreErrorTree; }
+  void StoreErrorsInArray()  { fStoreError = &AliTRDrawStream::StoreErrorArray; }
   void EnableErrorStorage()  { fStoreError = &AliTRDrawStream::StoreErrorTree; }
   void DisableErrorStorage() { fStoreError = &AliTRDrawStream::ForgetError; }
 
@@ -86,6 +95,10 @@ class AliTRDrawStream : public AliTRDrawStreamBase
     kDiscardHC = 4
   };
 
+  enum MarkerCode_t {
+    kHCactive = 1
+  };
+
   TTree* GetErrorTree() const { return fErrors; }
   static const char* GetErrorMessage(ErrorCode_t errCode);
 
@@ -122,7 +135,6 @@ class AliTRDrawStream : public AliTRDrawStreamBase
       ClassDef(AliTRDrawStatsSector, 1);
     };
 
-
     AliTRDrawStatsSector fStatsSector[18]; //[18] sector-wise statistics
     Int_t fBytesRead;                     // number of bytes read
     ClassDef(AliTRDrawStats, 1);
@@ -183,6 +195,7 @@ class AliTRDrawStream : public AliTRDrawStreamBase
   void ROBError      (ErrorCode_t err = kUnknown, const char *const msg = "", ...); 
   void MCMError      (ErrorCode_t err = kUnknown, const char *const msg = "", ...); 
   void StoreErrorTree() { fErrors->Fill(); }
+  void StoreErrorArray() { new ((*fMarkers)[fMarkers->GetEntriesFast()]) AliTRDrawStreamError(fLastError); }
   void ForgetError() { return; }
   void (AliTRDrawStream::*fStoreError)();       //! function pointer to method used for storing the error
 
@@ -283,6 +296,9 @@ class AliTRDrawStream : public AliTRDrawStreamBase
   AliTRDarrayADC *fAdcArray;                   // pointer to ADC array
   AliTRDSignalIndex *fSignalIndex;             // pointer to the signal index
   TTree *fTrackletTree;                        // pointer to the tree for tracklet storage
+  TClonesArray *fTracklets;                    // pointer to array of tracklets
+  TClonesArray *fTracks;                       // pointer to array of GTU tracks
+  TClonesArray *fMarkers;                      // pointer to array of markers (data present, errors, ...)
 
   AliTRDrawStream(const AliTRDrawStream&);           // not implemented
   AliTRDrawStream& operator=(const AliTRDrawStream&); // not implemented