#include "AliTRDarrayDictionary.h"
#include "AliTRDSignalIndex.h"
#include "AliTRDtrackletWord.h"
+#include "AliESDTrdTrack.h"
#include "AliTreeLoader.h"
#include "AliTRDrawStream.h"
fTrackletArray(0x0),
fAdcArray(0x0),
fSignalIndex(0x0),
- fTrackletTree(0x0)
+ fTrackletTree(0x0),
+ fTracklets(0x0),
+ fTracks(0x0),
+ fMarkers(0x0)
{
// default constructor
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);
// 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);
}
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;
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;
// 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;
while (*(fPayloadCurr) != fgkTrackletEndmarker &&
fPayloadCurr - fPayloadStart < fPayloadSize) {
- new ((*fTrackletArray)[fTrackletArray->GetEntriesFast()]) AliTRDtrackletWord(*(fPayloadCurr));
+ new ((*fTrackletArray)[fTrackletArray->GetEntriesFast()]) AliTRDtrackletWord(*(fPayloadCurr), fCurrHC);
fPayloadCurr++;
}
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
fPayloadCurr += 1 + fCurrAddHcWords;
- return (fPayloadCurr - start) / sizeof(UInt_t);
+ return (fPayloadCurr - start);
}
Int_t AliTRDrawStream::ReadTPData(Int_t mode)
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; }
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; }
kDiscardHC = 4
};
+ enum MarkerCode_t {
+ kHCactive = 1
+ };
+
TTree* GetErrorTree() const { return fErrors; }
static const char* GetErrorMessage(ErrorCode_t errCode);
ClassDef(AliTRDrawStatsSector, 1);
};
-
AliTRDrawStatsSector fStatsSector[18]; //[18] sector-wise statistics
Int_t fBytesRead; // number of bytes read
ClassDef(AliTRDrawStats, 1);
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
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