1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
18 ///////////////////////////////////////////////////////////////////////////////
20 // This class provides access to TRD digits in raw data. //
22 // It loops over all TRD digits in the raw data given by the AliRawReader. //
23 // The Next method goes to the next digit. If there are no digits left //
24 // it returns kFALSE. //
25 // Several getters provide information about the current digit. //
27 // Author: C. Lippmann (C.Lippmann@gsi.de) //
29 ///////////////////////////////////////////////////////////////////////////////
32 #include "AliRawReader.h"
33 #include "AliTRDRawStream.h"
34 #include "AliTRDgeometry.h"
35 #include "AliTRDCommonParam.h"
36 #include "AliTRDcalibDB.h"
38 ClassImp(AliTRDRawStream)
40 //_____________________________________________________________________________
41 AliTRDRawStream::AliTRDRawStream()
111 // Default constructor
114 for (Int_t i = 0; i < 540; i++) {
120 //_____________________________________________________________________________
121 AliTRDRawStream::AliTRDRawStream(AliRawReader *rawReader)
165 ,fRawReader(rawReader)
191 // Create an object to read TRD raw digits
194 fRawReader->Select("TRD");
196 for (Int_t i = 0; i < 540; i++) {
202 //_____________________________________________________________________________
203 AliTRDRawStream::AliTRDRawStream(const AliTRDRawStream& stream)
276 AliFatal("Copy constructor not implemented");
280 //_____________________________________________________________________________
281 AliTRDRawStream& AliTRDRawStream::operator = (const AliTRDRawStream&
285 // Assigment operator
288 Fatal("operator =", "assignment operator not implemented");
293 //_____________________________________________________________________________
294 AliTRDRawStream::~AliTRDRawStream()
303 //_____________________________________________________________________________
304 void AliTRDRawStream::SetRawReader(AliRawReader *rawReader)
308 fRawReader = rawReader;
311 //_____________________________________________________________________________
312 Bool_t AliTRDRawStream::SetRawVersion(Int_t rv)
315 // Set the raw data version
318 if ( rv >= 0 && rv <= 3 ) {
328 //____________________________________________________________________________
329 Int_t AliTRDRawStream::Init()
335 fCommonParam = AliTRDCommonParam::Instance();
337 AliError("Could not get common parameters");
341 fCalibration = AliTRDcalibDB::Instance();
343 AliError("Could not get calibration object");
349 fGeo = new AliTRDgeometry();
352 fTimeBinsCalib = fCalibration->GetNumberOfTimeBins();
353 AliDebug(2, Form("Number of Timebins read from CDB: %d", fTimeBinsCalib));
355 // The number of data words needed for this number of time bins (there
356 // are 3 time bins in one word)
357 fTimeWords = (fTimeBinsCalib-1)/3 + 1;
362 fHCHctr1 = fHCHctr2 = 0;
363 fGTUctr1 = fGTUctr2 = -1;
374 fNextStatus = fkStart;
381 fkBufferSet = kFALSE;
385 //____________________________________________________________________________
386 Int_t AliTRDRawStream::NextData()
389 // Updates the next data word pointer
392 if (fCountBytes + kSizeWord >= fBufSize)
394 fkBufferSet = fRawReader->ReadNextData(fPos);
395 if (fkBufferSet == kTRUE)
397 fBufSize = fRawReader->GetDataSize();
399 fDataWord = (UInt_t*)fPos;
400 fNextStatus = fkNextSM;
406 fNextStatus = fkStop;
414 fCountBytes += kSizeWord;
415 fDataWord = (UInt_t*)fPos;
421 //____________________________________________________________________________
422 Bool_t AliTRDRawStream::Next()
425 // Updates the next data word pointer
428 if (fNextStatus == fkStart)
433 while (fNextStatus != fkStop)
437 if (fNextStatus == fkNextMCM || fNextStatus == fkNextData)
441 if( ((*fDataWord & 0x80000000) == 0x0) && ((*fDataWord & 0x0000000f) == 0xC) )
444 if ( fMCM < 0 || fMCM > 15 || fROB < 0 || fROB > 7 )
446 AliWarning("Wrong fMCM or fROB. Skip this data");
447 fRawReader->AddMajorErrorLog(kWrongMCMorROB,Form("MCM=%d, ROB=%d",fMCM,fROB));
448 fNextStatus = fkNextHC;
451 fTbSwitch = 3; // For first adc channel we expect: (*fDataWord & 3) = 3
453 fADC = fTB = 0; // Reset Counter
454 fNextStatus = fkNextData;
458 if ( *fDataWord == kEndofrawdatamarker )
459 { // End of half-chamber data, finished
461 fNextStatus = fkNextHC;
465 if (fNextStatus == fkNextData )
466 { // MCM header is set, ADC data is valid.
468 // Found some data. Decode it now:
469 fRetVal = DecodeDataWord();
470 if ( fRetVal == 0 ) continue;
473 fNextStatus = fkNextHC;
476 if ( fADC > 1 && fADC < (Int_t)fGeo->ADCmax()-1 )
479 if ( fCOL >= 0 && fCOL < fColMax && fROW >= 0 && fROW < fRowMax )
494 if ( fNextStatus == fkNextHC )
497 // 1) Find end_of_tracklet_marker
500 if ( (*fDataWord & 0xfffff000) == 0xe0000000 )
506 // endoftrackletmarker?
507 if ( *fDataWord == kEndoftrackletmarker )
509 AliDebug(3, "end-of-tracklet-marker found");
510 fNextStatus = fkSeekNonEoTracklet;
516 AliDebug(3, "Tracklet found");
522 if (fNextStatus == fkSeekNonEoTracklet)
525 // 2) Look for non-end_of_tracklet_marker
527 //printf("Word %d: 0x%08x\n", fWordCtr, *fDataWord);
529 if ( *fDataWord != kEndoftrackletmarker )
531 fNextStatus = fkDecodeHC;
532 AliDebug(3, "NON end-of-tracklet-marker found");
533 //// no do not continue - this should be the hcheader
537 //just go on and find the non-end_of_tracklet_marker
542 if ( fNextStatus == fkDecodeHC )
544 AliDebug(3, "Decode HC");
547 // 3) This Word must be Half Chamber Header
549 if ( (*fDataWord & 0x00000003) == 1 )
551 DecodeHCheader(fTimeBinsCalib); // This is the new header!
552 fDET = fGeo->GetDetector(fLAYER, fSTACK, fSM);
553 fRowMax = fCommonParam->GetRowMax(fLAYER,fSTACK,fSM);
554 fColMax = fCommonParam->GetColMax(fROC);
559 fChamberDone[fDET]++;
560 fNextStatus = fkNextMCM;
561 AliDebug(3, "Decode HC OK");
566 AliDebug(3, "Decode HC NOT OK");
567 fNextStatus = fkNextSM;
572 if (fNextStatus == fkNextSM)
581 // After reading the first word check for size of this data and get Eq. ID
584 fDataSize = fRawReader->GetDataSize()/4; // Size of this payload in 32bit words
585 fEqID = fRawReader->GetEquipmentId(); // Get Equipment ID
586 if ( fDataSize > 0 ) fSizeOK = kTRUE;
590 if ( (*fDataWord & 0xfffff000) == 0xe0000000 )
593 fNextStatus = fkNextHC;
598 AliWarning(Form("Equipment %d: First data word is not GTU Link Mask!", fEqID));
599 fRawReader->AddMajorErrorLog(kGTULinkMaskMissing,Form("Equipment %d",fEqID));
600 fNextStatus = fkStop;
606 AliDebug(1, Form("That's all folks! %d", fSM));
610 //============================================================================
611 // Decoding functions
612 //============================================================================
615 //____________________________________________________________________________
616 void AliTRDRawStream::DecodeHCheader(Int_t timeBins)
619 // Decode the HC header (fRawVersion == 2, 3, 4, ???)
622 fRVmajor = (*fDataWord >> 24) & 0x7f;
623 fRVminor = (*fDataWord >> 17) & 0x7f;
625 if (fRVmajor < 2 || fRVmajor > 4)
626 AliError(Form(" Unsupported raw version: %d", fRawVersion))
628 if ( fRawVersion != fRVmajor ) {
630 AliWarning("===============================================================================");
631 AliWarning(Form("Mismatch between fRawVersion (%d) and fRVmajor from HC header (%d)"
632 ,fRawVersion,fRVmajor));
633 AliWarning(Form("Setting fRawVersion to %d", fRVmajor));
634 AliWarning("===============================================================================");
635 fRawVersion = fRVmajor;
640 // check for zero suppression
641 if ( fRawVersion >= 3 || fRawVersion <= 4 ) fZeroSuppressed = kTRUE;
642 else fZeroSuppressed = kFALSE;
645 if ( (*fDataWord & 0x3) == 1 ) {
647 fHCHWords = (*fDataWord >> 14) & 0x7;
648 fSM = (*fDataWord >> 9) & 0x1f;
649 fLAYER = (*fDataWord >> 6) & 0x7;
650 fSTACK = (*fDataWord >> 3) & 0x7;
651 fSIDE = (*fDataWord >> 2) & 0x1;
653 fROC = fGeo->GetDetectorSec(fLAYER, fSTACK);
655 AliDebug(3, Form("0x%08x: HC header: sm=%d; roc=%d; side=%x", *fDataWord, fSM, fROC, fSIDE+10));
665 AliWarning(Form("0x%08x: Strange HC header: dcs=%d; sm=%d; layer=%d; stack=%d.",
666 *fDataWord, fDCS, fSM, fLAYER, fSTACK));
667 fRawReader->AddMajorErrorLog(kHCHeaderCorrupt,Form("0x%08x:dcs=%d; sm=%d; layer=%d; stack=%d.",
668 *fDataWord, fDCS, fSM, fLAYER, fSTACK));
676 AliWarning(Form("0x%08x: No HC header when it was expected.", *fDataWord));
677 fRawReader->AddMajorErrorLog(kHCHeaderMissing,Form("0x%08x", *fDataWord));
681 if ( fHCHWords >= 1 ) {
682 // read one more word
683 if (NextData() != fkWordOK)
685 AliWarning("Next HC word missing");
686 fRawReader->AddMajorErrorLog(kHCWordMissing,"Next HC word missing");
687 fNextStatus = fkNextHC;
690 if ( (*fDataWord & 0x3) == 1 ) {
692 fBCctr = (*fDataWord >> 16);
693 fPTctr = (*fDataWord >> 12) & 0xf;
694 fPTphase = (*fDataWord >> 8) & 0xf;
695 fTBins = ((*fDataWord >> 2) & 0x3f) + 1;
697 AliDebug(3, Form("0x%08x: HC header 2: BCctr=%d PTctr=%d PTph=%d TB=%d"
698 , *fDataWord, fBCctr, fPTctr, fPTphase, fTBins));
700 if( fTBins != timeBins ) {
702 AliWarning("===============================================================================");
703 AliError(Form("Mismatch between nNTB from CDB (%d) and from HC header (%d)"
704 , timeBins, fTBins));
705 AliWarning(Form("We will use the value from the raw data (HC header): %d", fTBins));
706 AliWarning("===============================================================================");
708 fTimeWords = (fTBins - 1)/3 + 1;
716 if ( fHCHWords >= 2 ) {
717 // read one more word
718 if (NextData() != fkWordOK)
720 AliWarning("Next HC word missing");
721 fRawReader->AddMajorErrorLog(kHCWordMissing,"Next HC word missing");
722 fNextStatus = fkNextHC;
725 if ( (*fDataWord & 0x3) == 1 ) {
727 fTCon = (*fDataWord >> 29) & 0x1;
728 fPEDon = (*fDataWord >> 31) & 0x1;
729 fGAINon = (*fDataWord >> 30) & 0x1;
730 fXTon = (*fDataWord >> 28) & 0x1;
731 fNonLinOn = (*fDataWord >> 27) & 0x1;
732 fBypass = (*fDataWord >> 26) & 0x1;
734 fCommonAdditive = (*fDataWord >> 20) & 0x3f;
736 AliDebug(3, Form("0x%08x: HC header 3: TC=%d, PED=%d, GAIN=%d, XT=%d, NonLin=%d, Bypass=%d, Add=%d"
737 , fTCon, fPEDon, fGAINon, fXTon, fNonLinOn, fBypass, fCommonAdditive));
743 //____________________________________________________________________________
744 void AliTRDRawStream::DecodeMCMheader()
748 // Decode the MCM header
751 if ( fRawVersion < 1 || fRawVersion > 3 )
753 AliError(Form(" Unsupported raw version: %d", fRawVersion));
756 fMCM = (*fDataWord & 0xff000000) >> 24;
757 fEv = (*fDataWord & 0x00fffff0) >> 4;
762 fROW = fGeo->GetPadRowFromMCM(fROB, fMCM);
764 AliDebug(4, Form("0x%08x: SM%d L%dS%d. MCM Header: fROB=%d fMCM=%02d fEv=%02d"
765 , *fDataWord, fSM, fLAYER, fSTACK, fROB, fMCM, fEv));
767 if ( fROB % 2 == 0 && fSIDE == 1 ) {
768 AliWarning(Form("SM%d L%dS%d: Mismatch between fROB (%d) and fSIDE (%d): fMCM=%02d"
769 , fSM, fLAYER, fSTACK, fROB, fSIDE, fMCM ));
770 fRawReader->AddMajorErrorLog(kROBSideMismatch,Form("SM%d L%dS%d: fROB (%d) fSIDE (%d): fMCM=%02d"
771 , fSM, fLAYER, fSTACK, fROB, fSIDE, fMCM ));
773 if ( fROB % 2 != 0 && fSIDE == 0 ) {
774 AliWarning(Form("SM%d L%dS%d: Mismatch between fROB (%d) and fSIDE (%d): fMCM=%02d"
775 , fSM, fLAYER, fSTACK, fROB, fSIDE, fMCM ));
776 fRawReader->AddMajorErrorLog(kROBSideMismatch,Form("SM%d L%dS%d: fROB (%d) fSIDE (%d): fMCM=%02d"
777 , fSM, fLAYER, fSTACK, fROB, fSIDE, fMCM ));
779 if ( (fSTACK == 2 && fROW >= fGeo->RowmaxC0()) ||
780 (fSTACK != 2 && fROW >= fGeo->RowmaxC1()) || fROW < 0 ) {
781 AliWarning(Form("SM%d L%dS%d: Wrong Padrow (%d) fROB=%d, fSIDE=%d, fMCM=%02d"
782 , fSM, fLAYER, fSTACK, fROW, fROB, fSIDE, fMCM ));
783 fRawReader->AddMajorErrorLog(kWrongPadrow,Form("SM%d L%dS%d: Padrow (%d) fROB=%d, fSIDE=%d, fMCM=%02d"
784 , fSM, fLAYER, fSTACK, fROW, fROB, fSIDE, fMCM ));
790 // AdcMask for Zero supressed data
791 if ( fRawVersion == 3 ) {
792 // read one more word
793 if (NextData() != fkWordOK)
795 AliWarning("MCM ADC mask missing");
796 fRawReader->AddMajorErrorLog(kMCMADCMaskMissing,"Missing");
797 fNextStatus = fkNextHC;
800 if ( (*fDataWord & 0x000007ff) == 0xC ) { // at the moment bits 4-10 are empty
802 for ( Int_t ctr = 0; ctr < fGeo->ADCmax(); ctr++ ) {
803 if ( (*fDataWord >> (11+ctr)) == 0x1 ) fADCmask[ctr] = kTRUE;
804 else fADCmask[ctr] = kFALSE;
807 AliDebug(4, Form("0x%08x: ADC mask", *fDataWord));
811 AliWarning("Expected ADC mask but did not find one!");
812 fRawReader->AddMajorErrorLog(kMCMADCMaskMissing,"Decode error");
819 //____________________________________________________________________________
820 void AliTRDRawStream::DecodeTracklet()
824 // Decode the Tracklet
826 // this function is not tested yet on real tracklets
829 if ( fRawVersion < 1 || fRawVersion > 3 )
831 AliError(Form(" Unsupported raw version: %d", fRawVersion));
834 fTracklPID = (*fDataWord >> 24) & 0xff;
835 fTracklPadRow = (*fDataWord >> 20) & 0xf; // 0:15
836 fTracklDefL = (*fDataWord >> 13) & 0x7f;
837 fTracklPadPos = (*fDataWord) & 0x1fff;
839 fTracklPID /= (Float_t)((1<<8) - 1); // 0:1 (steps of 0.39%)
840 fTracklDefL = (fTracklDefL - ((1<< 7)-1)/2.) * 140.e-4; // -0.889:0.889cm
841 fTracklPadPos = (fTracklPadPos - ((1<<13)-1)/2.) * 160.e-4; // -65.528:65.528 cm
843 //AliDebug(4, Form("0x%08x: Tracklet found: SM%d L%dS%d side %x: PadRow=%d PadPos=%f DefL=%f PID=%f"
844 // , *fDataWord, fSM, fLAYER, fSTACK, fSIDE+10
845 // , fTracklPadRow, fTracklPadPos, fTracklDefL, fTracklPID));
847 if( (fSTACK == 2) && (fTracklPadRow >= (Int_t) fGeo->RowmaxC0()) ||
848 (fSTACK != 2) && (fTracklPadRow >= (Int_t) fGeo->RowmaxC1()) ) {
849 AliWarning(Form("Strange Row read from Tracklet Word: %d", fTracklPadRow));
850 fRawReader->AddMajorErrorLog(kTrackletRowMismatch,Form("Word: %d", fTracklPadRow));
855 //____________________________________________________________________________
856 void AliTRDRawStream::DecodeGTUlinkMask()
860 // Decode the link masks sent by the GTU. These marke the active optical links
861 // between GTU and Super Module. Up to now only fully active links are found
862 // (0xfff = 12 active links).
865 if ( fRawVersion < 1 || fRawVersion > 3 )
867 AliError(Form(" Unsupported raw version: %d", fRawVersion));
870 if ( fGTUctr1 == -1 ) fGTUctr2++;
873 if ( (fGTUctr1 >= 0) && (fGTUctr1 < 5) && (fGTUctr2 >= 0) && (fGTUctr2 < 18) ) {
874 fGTUlinkMask[fGTUctr2][fGTUctr1] = (*fDataWord & 0xfff);
879 //____________________________________________________________________________
880 Int_t AliTRDRawStream::DecodeDataWord()
887 if ( fRawVersion >= 1 && fRawVersion <= 2 ) {
888 return DecodeDataWordV1V2();
890 else if ( fRawVersion >= 3 && fRawVersion <= 3 ) {
891 return DecodeDataWordV3();
894 AliError(Form(" Unsupported raw version: %d", fRawVersion));
899 //____________________________________________________________________________
900 Int_t AliTRDRawStream::DecodeDataWordV1V2()
904 // Decode the Data (full raw data. No zero suppression. 21 adc channels)
906 // return 0 means continue to next data word
907 // return -1 means break data loop
910 if ( (*fDataWord & 0x00000003) != 0x2 && (*fDataWord & 0x00000003) != 0x3) {
911 AliWarning(Form("Data %08x : Data Word ends neither with b11 nor b10", (Int_t)*fDataWord));
912 fRawReader->AddMinorErrorLog(kDataMaskError,Form("Data %08x", (Int_t)*fDataWord));
916 if ( (*fDataWord & 0x00000003) != fTbSwitch ) { // Next ADC channel found
917 fTbSwitch = (fTbSwitch & 2) | !(fTbSwitch & 1); // 0x3 <--> 0x2
923 fTbSwitchCtr++; // Just read one word
925 // We have only timeTotal time bins
926 if ( fTbSwitchCtr > fTimeWords ) {
927 AliWarning(Form("Data is strange. Already found %d words for this ADC channel", (Int_t)fTbSwitchCtr));
928 fRawReader->AddMinorErrorLog(kADCNumberOverflow,Form("%d words", (Int_t)fTbSwitchCtr));
932 // We have only 21 ADC channels.
933 if ( fADC > (Int_t)fGeo->ADCmax()-1 ) {
934 AliWarning(Form("Data %08x : Data is strange. fADC is already %d", (Int_t)*fDataWord, (Int_t)fADC));
935 fRawReader->AddMinorErrorLog(kADCChannelOverflow,Form("Data %08x : fADC=%d", (Int_t)*fDataWord, (Int_t)fADC));
939 // There are 18 pads connected to each MCM ADC channels 2...19. The other channels cross to other
940 // MCMs and are good for online tracking in the MCM.
941 if ( fADC > 1 && fADC < (Int_t)fGeo->ADCmax()-1 ) {
944 fCOL = fGeo->GetPadColFromADC(fROB, fMCM, fADC);
946 // We have only 144 Pad Columns
947 if ( fCOL > fColMax-1 || fCOL < 0 ) {
948 AliWarning(Form("SM%d L%dS%d: Wrong Pad column (%d) fROB=%d, fSIDE=%d, fMCM=%02d", fSM,
949 fLAYER, fSTACK, fCOL, fROB, fSIDE, fMCM ));
950 fRawReader->AddMajorErrorLog(kWrongPadcolumn,Form("SM%d L%dS%d: column (%d) fROB=%d, fSIDE=%d, fMCM=%02d", fSM,
951 fLAYER, fSTACK, fCOL, fROB, fSIDE, fMCM ));
954 // Decode 32 bit data words with information from 3 time bins and copy the data
955 fSig[0] = (*fDataWord & 0x00000ffc) >> 2;
956 fSig[1] = (*fDataWord & 0x003ff000) >> 12;
957 fSig[2] = (*fDataWord & 0xffc00000) >> 22;
959 // Print data to screen:
960 // Do NOT switch on for default production, it is VERY slow
961 // AliDebug(5, Form("SM%d L%dS%d: ROB%d MCM=%d ADC=%d (ROW=%d COL=%d): Data %04d %04d %04d\n",
962 // fSM, fLAYER, fSTACK, fROB, fMCM, fADC, fROW, fCOL, fSig[0], fSig[1], fSig[2]));
975 //____________________________________________________________________________
976 Int_t AliTRDRawStream::DecodeDataWordV3()
980 // Decode the data (Zero suppresses data. 21 adc channels)
982 // return 0 means continue to next data word
983 // return -1 means break data loop
985 // NOT TESTED YET!!!!!!!!
988 if ( (*fDataWord & 0x00000003) != 0x2 && (*fDataWord & 0x00000003) != 0x3) {
989 AliWarning(Form("Data %08x : Data Word ends neither with b11 nor b10", (Int_t)*fDataWord));
990 fRawReader->AddMinorErrorLog(kDataMaskError,Form("Data %08x", (Int_t)*fDataWord));
994 if ( (*fDataWord & 0x00000003) != fTbSwitch ) { // Next ADC channel found
995 fTbSwitch = (fTbSwitch & 2) | !(fTbSwitch & 1); // 0x3 <--> 0x2
998 // Jump to next ADC channel that is not masked
1001 } while ( ((fADC < fGeo->ADCmax()) && (fADCmask[fADC] == kFALSE)) || (fADC >= fGeo->ADCmax()) );
1005 fTbSwitchCtr++; // Just read one word
1007 // We have only timeTotal time bins
1008 if ( fTbSwitchCtr > fTimeWords ) {
1009 AliWarning(Form("Data is strange. Already found %d words for this ADC channel", (Int_t)fTbSwitchCtr));
1010 fRawReader->AddMinorErrorLog(kADCNumberOverflow,Form("%d words", (Int_t)fTbSwitchCtr));
1014 // We have only 21 ADC channels.
1015 if ( fADC > (Int_t)fGeo->ADCmax()-1 ) {
1016 AliWarning(Form("Data %08x : Data is strange. fADC is already %d", (Int_t)*fDataWord, (Int_t)fADC));
1017 fRawReader->AddMinorErrorLog(kADCChannelOverflow,Form("Data %08x : fADC=%d", (Int_t)*fDataWord, (Int_t)fADC));
1021 // There are 18 pads connected to each MCM ADC channels 2...19. The other channels cross to other
1022 // MCMs and are good for online tracking in the MCM.
1023 if ( fADC > 1 && fADC < (Int_t)fGeo->ADCmax()-1 ) {
1026 fCOL = fGeo->GetPadColFromADC(fROB, fMCM, fADC);
1028 // We have only 144 Pad Columns
1029 if ( fCOL > fColMax-1 || fCOL < 0 ) {
1030 AliWarning(Form("SM%d L%dS%d: Wrong Pad column (%d) fROB=%d, fSIDE=%d, fMCM=%02d", fSM,
1031 fLAYER, fSTACK, fCOL, fROB, fSIDE, fMCM ));
1032 fRawReader->AddMajorErrorLog(kWrongPadcolumn,Form("SM%d L%dS%d: column (%d) fROB=%d, fSIDE=%d, fMCM=%02d", fSM,
1033 fLAYER, fSTACK, fCOL, fROB, fSIDE, fMCM ));
1036 // Decode 32 bit data words with information from 3 time bins and copy the data
1037 fSig[0] = (*fDataWord & 0x00000ffc) >> 2;
1038 fSig[1] = (*fDataWord & 0x003ff000) >> 12;
1039 fSig[2] = (*fDataWord & 0xffc00000) >> 22;
1041 // Print data to screen:
1042 AliDebug(5, Form("SM%d L%dS%d: ROB%d MCM=%d ADC=%d (ROW=%d COL=%d): Data %04d %04d %04d\n",
1043 fSM, fLAYER, fSTACK, fROB, fMCM, fADC, fROW, fCOL, fSig[0], fSig[1], fSig[2]));