X-Git-Url: http://git.uio.no/git/?p=u%2Fmrichter%2FAliRoot.git;a=blobdiff_plain;f=RAW%2FAliAltroRawStream.h;h=068c1a5989682ed077f7dc0e3f9545edc3d8be01;hp=d4dd3200dbb7fd890a5d0cb4046ce42750f1ce42;hb=a858321102511dce392148f313656f698d2f9895;hpb=9a090ccd393c8347c8512e632ce54eeceed8ac1f diff --git a/RAW/AliAltroRawStream.h b/RAW/AliAltroRawStream.h index d4dd3200dbb..068c1a59896 100644 --- a/RAW/AliAltroRawStream.h +++ b/RAW/AliAltroRawStream.h @@ -27,6 +27,12 @@ class AliAltroRawStream: public TObject { virtual void Reset(); virtual Bool_t Next(); + virtual Bool_t NextDDL(UChar_t* data = NULL); // Iterate over DDLs/RCUs + virtual Bool_t NextChannel(); // Iterate over altro channels + virtual Bool_t NextBunch(UShort_t *bunchData, + Int_t &bunchLength, + Int_t &startTimeBin); // Iterate over altro bunches + Int_t GetDDLNumber() const { return fDDLNumber; } // Provide current DDL number Int_t GetPrevDDLNumber() const { return fPrevDDLNumber; }// Provide previous DDL number Bool_t IsNewDDLNumber() const {return (fDDLNumber != fPrevDDLNumber);}; @@ -42,6 +48,9 @@ class AliAltroRawStream: public TObject { Int_t GetSignal() const { return fSignal; } // Provide signal in ADC counts Int_t GetTimeLength() const { return fTimeBunch; } // Provide total length of current time bunch + Int_t GetChannelPayloadSize() const { return fChannelPayloadSize; } + Int_t GetRCUPayloadSizeInSOD() const; + Int_t GetBranch() const; // Provide the branch index for the current hardware address Int_t GetFEC() const; // Provide the front-end card index for the current hardware address Int_t GetAltro() const; // Provide the altro chip index for the current hardware address @@ -50,10 +59,39 @@ class AliAltroRawStream: public TObject { Bool_t GetRCUTrailerData(UChar_t*& data) const; // Provide a pointer to RCU trailer Int_t GetRCUTrailerSize() const { return fRCUTrailerSize; } // Provide size of RCU trailer + // RCU trailer related getters + UInt_t GetFECERRA() const { return fFECERRA; } + UInt_t GetFECERRB() const { return fFECERRB; } + UShort_t GetERRREG2() const { return fERRREG2; } + UShort_t GetNChAddrMismatch() const { return fERRREG3; } + UShort_t GetNChLengthMismatch() const { return fERRREG4; } + + UShort_t GetActiveFECsA() const { return fActiveFECsA; } + UShort_t GetActiveFECsB() const { return fActiveFECsB; } + + UInt_t GetAltroCFG1() const { return fAltroCFG1; } + UChar_t GetBaselineCorr() const { return fAltroCFG1 & 0xF; } + Bool_t GetPolarity() const { return (fAltroCFG1 >> 4) & 0x1; } + UChar_t GetNPresamples() const { return (fAltroCFG1 >> 5) & 0x3; } + UChar_t GetNPostsamples() const { return (fAltroCFG1 >> 7) & 0xF; } + Bool_t GetSecondBaselineCorr() const { return (fAltroCFG1 >> 11) & 0x1; } + UChar_t GetGlitchFilter() const { return (fAltroCFG1 >> 12) & 0x3; } + UChar_t GetNNonZSPostsamples() const { return (fAltroCFG1 >> 14) & 0x7; } + UChar_t GetNNonZSPresamples() const { return (fAltroCFG1 >> 17) & 0x3; } + Bool_t GetZeroSupp() const { return (fAltroCFG1 >> 19) & 0x1; } + + UInt_t GetAltroCFG2() const { return fAltroCFG2; } + Bool_t GetNAltroBuffers() const { return (fAltroCFG2 >> 24) & 0x1; } + UChar_t GetNPretriggerSamples() const{ return (fAltroCFG2 >> 20) & 0xF; } + UShort_t GetNSamplesPerCh() const { return (fAltroCFG2 >> 10) & 0x3FF; } + Bool_t GetSparseRO() const { return (fAltroCFG2 >> 9) & 0x1; } + Double_t GetTSample() const; + Double_t GetL1Phase() const; + void PrintRCUTrailer() const; + void SelectRawData(Int_t detId); // Select raw data for specific detector id void SelectRawData(const char *detName); // Select raw data for specific detector name - void SetNoAltroMapping(Bool_t flag) { fNoAltroMapping = flag; } // Specify whenever to use or not the altro mapping void SetShortDataHeader(Bool_t flag) { fIsShortDataHeader = flag; } // Specify whenever to assume or not a short CDH format void PrintDebug() const; // Print debug information in case of decoding errors @@ -75,20 +113,17 @@ class AliAltroRawStream: public TObject { protected: - Bool_t fNoAltroMapping; // temporary flag in case of no altro mapping is provided - Short_t fSegmentation[3]; // temporary container for the dummy trailer, to be removed - Bool_t fIsShortDataHeader; // flag used to select between normal and short CDH format private : UShort_t GetNextWord(); Bool_t ReadTrailer(); - Bool_t ReadDummyTrailer(); void ReadBunch(); void ReadAmplitude(); Int_t GetPosition(); UInt_t Get32bitWord(Int_t &index); + Int_t ReadRCUTrailer(Int_t &index, Int_t trailerSize); Int_t fDDLNumber; // index of current DDL number Int_t fPrevDDLNumber;// index of previous DDL number @@ -108,11 +143,23 @@ class AliAltroRawStream: public TObject { Int_t fPosition; // current (10 bit) position in fData Int_t fCount; // counter of words to be read for current trailer + Int_t fChannelPayloadSize; // Int_t fBunchLength; // remaining number of signal bins in the current bunch UChar_t* fRCUTrailerData; // pointer to RCU trailer data Int_t fRCUTrailerSize; // size of RCU trailer data in bytes + // RCU trailer contents + UInt_t fFECERRA; // contains errors related to ALTROBUS transactions + UInt_t fFECERRB; // contains errors related to ALTROBUS transactions + UShort_t fERRREG2; // contains errors related to ALTROBUS transactions or trailer of ALTRO channel block + UShort_t fERRREG3; // contains number of altro channels skipped due to an address mismatch + UShort_t fERRREG4; // contains number of altro channels skipped due to a block length mismatch + UShort_t fActiveFECsA; // bit pattern of active FECs in branch A + UShort_t fActiveFECsB; // bit pattern of active FECs in branch B + UInt_t fAltroCFG1; // ALTROCFG1 register + UInt_t fAltroCFG2; // ALTROCFG2 and ALTROIF registers + ClassDef(AliAltroRawStream, 0) // base class for reading Altro raw digits };