]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - TRD/AliTRDrawStream.cxx
small changes and implementation of a QA plot in terminate from P.Ganoti
[u/mrichter/AliRoot.git] / TRD / AliTRDrawStream.cxx
index a94779ad995c0bbf37edb478b5004fd8e2dec37b..ccd6698f924816a307e4f563d1a73b3a672c0264 100644 (file)
@@ -110,7 +110,6 @@ ClassImp(AliTRDrawStream)
 \r
 Bool_t AliTRDrawStream::fgExtraSkip = kFALSE;\r
 Bool_t AliTRDrawStream::fgSkipCDH = kFALSE;\r
-Bool_t AliTRDrawStream::fgWarnError = kTRUE;\r
 Bool_t AliTRDrawStream::fgCleanDataOnly = kFALSE;\r
 Bool_t AliTRDrawStream::fgDebugFlag = kTRUE;\r
 Bool_t AliTRDrawStream::fgEnableMemoryReset = kTRUE;\r
@@ -119,7 +118,6 @@ Bool_t AliTRDrawStream::fgStackLinkNumberChecker = kFALSE;
 Bool_t AliTRDrawStream::fgSkipData = kTRUE;\r
 Bool_t AliTRDrawStream::fgEnableDecodeConfigData = kFALSE;\r
 Int_t AliTRDrawStream::fgDumpHead = -1;\r
-Int_t  AliTRDrawStream::fgCommonAdditive = 0;\r
 Int_t AliTRDrawStream::fgEmptySignals[] = \r
   {\r
     -1, -1, -1, -1, -1,  -1, -1, -1, -1, -1,  -1, -1, -1, -1, -1\r
@@ -175,6 +173,8 @@ AliTRDrawStream::AliTRDrawStream()
   , fGeometry(0)\r
   , fRawReader(0)\r
   , fTRDfeeParam(0)\r
+  , fCommonAdditive(0)\r
+  , fWarnError(kTRUE)\r
 {\r
   //\r
   // default constructor\r
@@ -216,6 +216,8 @@ AliTRDrawStream::AliTRDrawStream(AliRawReader *rawReader)
   , fGeometry(0)\r
   , fRawReader(rawReader)\r
   , fTRDfeeParam(0)\r
+  , fCommonAdditive(0)\r
+  , fWarnError(kTRUE)\r
 {\r
   //\r
   // default constructor\r
@@ -263,6 +265,8 @@ AliTRDrawStream::AliTRDrawStream(const AliTRDrawStream& /*st*/)
   , fGeometry(0)\r
   , fRawReader(0)\r
   , fTRDfeeParam(0)\r
+  , fCommonAdditive(0)\r
+  , fWarnError(kTRUE)\r
 {\r
   //\r
   // Copy constructor\r
@@ -358,7 +362,7 @@ Bool_t AliTRDrawStream::SkipWords(UInt_t iw)
     return kTRUE;\r
   }\r
   else {\r
-    if (fgWarnError) AliWarning(Form("Skip %d words failed. %d available", iw, fpEnd - fpPos - 1));\r
+    if (fWarnError) AliWarning(Form("Skip %d words failed. %d available", iw, fpEnd - fpPos - 1));\r
     return kFALSE;\r
   }\r
 \r
@@ -545,7 +549,6 @@ void AliTRDrawStream::ResetPerMCM()
   fMCM->fADCMaskWord = 0;\r
   fMCM->fADCmax = 0;\r
   fMCM->fADCcount = 0;\r
-  fMCM->fMCMADCWords = 0;\r
   fMCM->fSingleADCwords = 0;\r
   fMCM->fMCMhdCorrupted = 0;\r
   fMCM->fADCmaskCorrupted = 0;\r
@@ -671,7 +674,7 @@ Bool_t AliTRDrawStream::Next()
 }\r
 \r
 //------------------------------------------------------------\r
-Int_t AliTRDrawStream::NextChamber(AliTRDdigitsManager *const digitsManager, UInt_t **trackletContainer, UShort_t **errorCodeContainer\r
+Int_t AliTRDrawStream::NextChamber(AliTRDdigitsManager *const digitsManager, UInt_t **trackletContainer, UShort_t **/*errorCodeContainer*/\r
 {\r
   //\r
   // Fills single chamber digit array \r
@@ -757,15 +760,18 @@ Int_t AliTRDrawStream::NextChamber(AliTRDdigitsManager *const digitsManager, UIn
         return -1;\r
       }\r
 \r
-      Int_t rowMax = GetRowMax();\r
+      //Int_t rowMax = GetRowMax();\r
+      Int_t rowMax = fGeometry->RowmaxC1(); // we use maximum row number among all detectors to reuse memory\r
       Int_t colMax = GetColMax();\r
       Int_t ntbins = GetNumberOfTimeBins();\r
 \r
-      // Set number of timebin into digitparam\r
+      // Set digitparam variables\r
+      digitsparam = (AliTRDdigitsParam *) digitsManager->GetDigitsParam();\r
+      digitsparam->SetPretiggerPhase(det,GetPreTriggerPhase());\r
       if (!fIsGlobalDigitsParamSet){\r
-        digitsparam = (AliTRDdigitsParam *) digitsManager->GetDigitsParam();\r
-        digitsparam->SetCheckOCDB(kFALSE);\r
         digitsparam->SetNTimeBins(ntbins);\r
+       fCommonAdditive=10;\r
+        digitsparam->SetADCbaseline(fCommonAdditive);\r
         fIsGlobalDigitsParamSet = kTRUE;\r
       }\r
 \r
@@ -790,19 +796,12 @@ Int_t AliTRDrawStream::NextChamber(AliTRDdigitsManager *const digitsManager, UIn
 \r
     // ntimebins data are ready to read\r
     for (it = 0; it < GetNumberOfTimeBins(); it++) {\r
-       if (GetSignals()[it] > 0) {\r
-\r
-         if (fSharedPadsOn) \r
-           digits->SetDataByAdcCol(GetRow(), GetExtendedCol(), it, GetSignals()[it]);\r
-         else \r
-           digits->SetData(GetRow(), GetCol(), it, GetSignals()[it]);\r
-\r
-         indexes->AddIndexRC(GetRow(), GetCol());\r
-         if (digitsManager->UsesDictionaries()) {\r
-           track0->SetData(GetRow(), GetCol(), it, 0);\r
-           track1->SetData(GetRow(), GetCol(), it, 0);\r
-           track2->SetData(GetRow(), GetCol(), it, 0);\r
-         }\r
+       digits->SetDataByAdcCol(GetRow(), GetExtendedCol(), it, GetSignals()[it]);\r
+       if (!(GetCol()<0)) indexes->AddIndexRC(GetRow(), GetCol());\r
+       if (digitsManager->UsesDictionaries()) {\r
+         track0->SetData(GetRow(), GetCol(), it, 0);\r
+         track1->SetData(GetRow(), GetCol(), it, 0);\r
+         track2->SetData(GetRow(), GetCol(), it, 0);\r
        }\r
     } // it\r
   } // while Next()\r
@@ -928,7 +927,7 @@ Bool_t AliTRDrawStream::DecodeGTUheader()
     }\r
   }\r
   else {\r
-    if (fgWarnError) AliWarning("No additional sm headers and stack index words present.");\r
+    if (fWarnError) AliWarning("No additional sm headers and stack index words present.");\r
     if (fRawReader) fRawReader->AddMajorErrorLog(kDecodeStackInfo, "Stack info missing");\r
       return kFALSE;\r
   }\r
@@ -937,7 +936,7 @@ Bool_t AliTRDrawStream::DecodeGTUheader()
     if (fgDebugFlag)  AliDebug(5, "GTU headers are OK.");\r
   }\r
   else {\r
-    if (fgWarnError) AliWarning("No data just after GTU headers.");\r
+    if (fWarnError) AliWarning("No data just after GTU headers.");\r
     if (fRawReader) fRawReader->AddMajorErrorLog(kMissingData, "Missing sm data");\r
       return kFALSE;\r
   }\r
@@ -957,7 +956,7 @@ Bool_t AliTRDrawStream::DecodeSM(void * const buffer, UInt_t length)
 \r
   fSM.fClean = kTRUE;\r
   if (InitBuffer(buffer, length) == kFALSE) {\r
-    if (fgWarnError) AliError("InitBuffer failed.");      \r
+    if (fWarnError) AliError("InitBuffer failed.");      \r
       fSM.fClean = kFALSE;\r
       return kFALSE;\r
   }\r
@@ -988,7 +987,7 @@ Bool_t AliTRDrawStream::DecodeSM(void * const buffer, UInt_t length)
 \r
         if (fpPos >= fpEnd) {\r
           if (fRawReader) fRawReader->AddMajorErrorLog(kLinkDataMissing, "Link data missing");        \r
-          if (fgWarnError) AliError("Link data missing.");      \r
+          if (fWarnError) AliError("Link data missing.");      \r
           fSM.fClean = kFALSE;\r
           break;\r
         }\r
@@ -1001,7 +1000,7 @@ Bool_t AliTRDrawStream::DecodeSM(void * const buffer, UInt_t length)
             fSM.fClean = kFALSE;\r
             SeekEndOfData();\r
 \r
-            if (fgWarnError) {\r
+            if (fWarnError) {\r
               AliError(Form("Tracklet decoding failed stack %d link %d", fStackNumber, fStackLinkNumber));\r
             }\r
             continue;\r
@@ -1010,7 +1009,7 @@ Bool_t AliTRDrawStream::DecodeSM(void * const buffer, UInt_t length)
 \r
         if (fpPos >= fpEnd) {\r
           if (fRawReader) fRawReader->AddMajorErrorLog(kHCdataMissing, "HC data missing");        \r
-          if (fgWarnError) AliError("HC data missing.");      \r
+          if (fWarnError) AliError("HC data missing.");      \r
           fSM.fClean = kFALSE;\r
           break;\r
         }\r
@@ -1022,7 +1021,7 @@ Bool_t AliTRDrawStream::DecodeSM(void * const buffer, UInt_t length)
           if (fHC->fCorrupted < 16)  SeekEndOfData(); // In case that we meet END_OF_TRACKLET_MARKERNEW \r
                                                       // during ADC data decoding or MCM header decoding\r
                                                       // we don't seek ENDOFRAWDATAMARKER\r
-          if (fgWarnError) {\r
+          if (fWarnError) {\r
             AliError(Form("Failed HC : %s", DumpHCinfoH0(fHC)));\r
             AliError(Form("Failed HC : %s", DumpHCinfoH1(fHC)));\r
           }\r
@@ -1041,7 +1040,7 @@ Bool_t AliTRDrawStream::DecodeSM(void * const buffer, UInt_t length)
     return kTRUE;\r
   \r
   if (fgCleanDataOnly && (fSM.fClean == kFALSE)) {\r
-    if (fgWarnError) {\r
+    if (fWarnError) {\r
       AliWarning("Buffer with errors. Returning FALSE.");\r
       AliWarning(Form("--- Failed SM : %s ---", DumpSMInfo(&fSM)));\r
     }\r
@@ -1310,11 +1309,13 @@ Bool_t AliTRDrawStream::IsMCMheaderOK()
     if (fgDebugFlag) AliDebug(11,Form("Event from the past? Current %d Last %d %s.\n", fEventCounter, fLastEventCounter, DumpMCMinfo(fMCM)));\r
   }\r
 \r
-  if ( fMCM->fADCmaskCorrupted > 0 )\r
+  if ( fMCM->fADCmaskCorrupted > 0 ) {\r
     return kFALSE;\r
+  }\r
 \r
-  if ( fMCM->fMCMhdCorrupted > 0 )\r
+  if ( fMCM->fMCMhdCorrupted > 0 ) {\r
     return kFALSE;\r
+  }\r
 \r
   return kTRUE;\r
 }\r
@@ -1345,7 +1346,6 @@ Bool_t AliTRDrawStream::DecodeMCMheader()
     fpPos--; \r
     return kFALSE;\r
   }\r
-\r
   fMCM->fROW = fTRDfeeParam->GetPadRowFromMCM(fMCM->fROB, fMCM->fMCM); \r
 \r
   if ((fHC->fRawVMajor > 2 && fHC->fRawVMajor <5) || ((fHC->fRawVMajor & 32) == 32)) { //cover old and new version definition of ZS data\r
@@ -1378,9 +1378,10 @@ Bool_t AliTRDrawStream::DecodeMCMheader()
     AliDebug(7, DumpMCMadcMask(fMCM));\r
   }\r
 \r
-  if (IsMCMheaderOK() == kFALSE)\r
+  if (IsMCMheaderOK() == kFALSE) {\r
     return kFALSE;\r
-    \r
+  }    \r
+\r
   return kTRUE;\r
 }\r
 \r
@@ -1502,8 +1503,9 @@ Bool_t AliTRDrawStream::DecodeHC()
   //\r
   // decode hc header and data\r
   //\r
+\r
   if (DecodeHCheader() == kFALSE) {\r
-    if (fgWarnError) AliWarning(Form("HC Header decode failed. H0 Error: %d H1 Error: %d",fHC->fH0Corrupted,fHC->fH1Corrupted));\r
+    if (fWarnError) AliWarning(Form("HC Header decode failed. H0 Error: %d H1 Error: %d",fHC->fH0Corrupted,fHC->fH1Corrupted));\r
     if (fRawReader) fRawReader->AddMajorErrorLog(kHCHeaderCorrupt, "HC header corrupted"); \r
     return kFALSE;\r
   }\r
@@ -1520,7 +1522,7 @@ Bool_t AliTRDrawStream::DecodeHC()
   if ((fHC->fRawVMajor & 64) == 64) { // test pattern data\r
     AliTRDrawTPStream *tpStream = new AliTRDrawTPStream(fHC->fRawVMajorOpt, fpPos);\r
     if (tpStream->DecodeTPdata() == kFALSE) {\r
-      if (fgWarnError) AliError("failed to decode test pattern data");\r
+      if (fWarnError) AliError("failed to decode test pattern data");\r
         return kFALSE; \r
     }\r
     return kTRUE;\r
@@ -1541,7 +1543,7 @@ Bool_t AliTRDrawStream::DecodeHC()
       if (fHC->fCorrupted < 4) fHC->fCorrupted += 4; // benchmark hc data corruption as 4\r
     \r
       if (fgSkipData == kTRUE || fHC->fCorrupted >= 16) { // stop HC data reading\r
-        fHC->fMCMmax++; \r
+        fHC->fMCMmax++;\r
         return kFALSE;\r
       } \r
           \r
@@ -1617,11 +1619,11 @@ Bool_t AliTRDrawStream::DecodeHC()
              }\r
            }\r
            else { // nsamples = 31, 32 are not implemented in the TRAP and should never happen  \r
-             if (fgWarnError) AliError("nsamples are 31 or 32. These are not implemented in the TRAP and should never happen!"); \r
+             if (fWarnError) AliError("nsamples are 31 or 32. These are not implemented in the TRAP and should never happen!"); \r
            }\r
          } // if fHC->fRawVMajor\r
          else { // test pattern data\r
-           if (fgWarnError) AliError("These are test pattern data. You need other reader"); // will be served in other class\r
+           if (fWarnError) AliError("These are test pattern data. You need other reader"); // will be served in other class\r
          }\r
       } // for iadc \r
     } // if fMCM->fADCmax\r
@@ -1644,6 +1646,7 @@ Bool_t AliTRDrawStream::DecodeADC()
   //\r
   // decode single ADC channel\r
   //\r
+\r
   fADC->fCorrupted = 0;\r
   if(fADC->fADCnumber%2==1) fMaskADCword = ADC_WORD_MASK(ADCDATA_VAL1);\r
   if(fADC->fADCnumber%2==0) fMaskADCword = ADC_WORD_MASK(ADCDATA_VAL2);\r
@@ -1657,7 +1660,7 @@ Bool_t AliTRDrawStream::DecodeADC()
 \r
   for (Int_t iw = 0; iw < fMCM->fSingleADCwords; iw++) {\r
      if (HC_HEADER_MASK_ERR(*fpPos) == 0 || *fpPos == END_OF_TRACKLET_MARKERNEW) {\r
-       if (fgWarnError) AliError(Form("There should be ADC data. We meet HC header or END_OF_TRACKLET_MARKER 0x%08x",*fpPos));\r
+       if (fWarnError) AliError(Form("There should be ADC data. We meet HC header or END_OF_TRACKLET_MARKER 0x%08x",*fpPos));\r
        fADC->fCorrupted += 16;\r
        fHC->fCorrupted += 16; \r
        fpPos--;\r
@@ -1671,10 +1674,9 @@ Bool_t AliTRDrawStream::DecodeADC()
        continue;\r
      }\r
 \r
-     // here we subtract the baseline ( == common additive)\r
-     fADC->fSignals[fTbinADC + 0] = ((*fpPos & 0x00000ffc) >>  2) - fgCommonAdditive;\r
-     fADC->fSignals[fTbinADC + 1] = ((*fpPos & 0x003ff000) >> 12) - fgCommonAdditive;\r
-     fADC->fSignals[fTbinADC + 2] = ((*fpPos & 0xffc00000) >> 22) - fgCommonAdditive;\r
+     fADC->fSignals[fTbinADC + 0] = ((*fpPos & 0x00000ffc) >>  2);\r
+     fADC->fSignals[fTbinADC + 1] = ((*fpPos & 0x003ff000) >> 12);\r
+     fADC->fSignals[fTbinADC + 2] = ((*fpPos & 0xffc00000) >> 22);\r
 \r
      fTbinADC += 3;\r
      fpPos++;\r
@@ -1719,6 +1721,7 @@ Bool_t AliTRDrawStream::DecodeADCExtended()
   //\r
   // decode single ADC channel\r
   //\r
+\r
   fADC->fCorrupted = 0;\r
   if(fADC->fADCnumber%2==1) fMaskADCword = ADC_WORD_MASK(ADCDATA_VAL1);\r
   if(fADC->fADCnumber%2==0) fMaskADCword = ADC_WORD_MASK(ADCDATA_VAL2);\r
@@ -1727,13 +1730,13 @@ Bool_t AliTRDrawStream::DecodeADCExtended()
 \r
   fTbinADC = ((*fpPos & 0x000000fc) >>  2);\r
   fMCM->fSingleADCwords  = ((*fpPos & 0x00000f00) >>  8);\r
-  fADC->fSignals[fTbinADC] = ((*fpPos & 0x003ff000) >> 12) - fgCommonAdditive;\r
-  fADC->fSignals[fTbinADC+1] = ((*fpPos & 0xffc00000) >> 22) - fgCommonAdditive;\r
+  fADC->fSignals[fTbinADC] = ((*fpPos & 0x003ff000) >> 12);\r
+  fADC->fSignals[fTbinADC+1] = ((*fpPos & 0xffc00000) >> 22);\r
 \r
   fpPos++; \r
   for (Int_t iw = 0; iw < fMCM->fSingleADCwords-1; iw++) { // it goes up to fMCM->fSingleADCwords-1 since the first word was already decoded above\r
      if (HC_HEADER_MASK_ERR(*fpPos) == 0 || *fpPos == END_OF_TRACKLET_MARKERNEW) {\r
-       if (fgWarnError) AliError(Form("There should be ADC data. We meet HC header or END_OF_TRACKLET_MARKER 0x%08x",*fpPos));\r
+       if (fWarnError) AliError(Form("There should be ADC data. We meet HC header or END_OF_TRACKLET_MARKER 0x%08x",*fpPos));\r
        fADC->fCorrupted += 16;\r
        fHC->fCorrupted += 16; \r
        fpPos--;\r
@@ -1747,10 +1750,9 @@ Bool_t AliTRDrawStream::DecodeADCExtended()
        continue;\r
      }\r
 \r
-     // here we subtract the baseline ( == common additive)\r
-     fADC->fSignals[fTbinADC + 2] = ((*fpPos & 0x00000ffc) >>  2) - fgCommonAdditive;\r
-     fADC->fSignals[fTbinADC + 3] = ((*fpPos & 0x003ff000) >> 12) - fgCommonAdditive;\r
-     fADC->fSignals[fTbinADC + 4] = ((*fpPos & 0xffc00000) >> 22) - fgCommonAdditive;\r
+     fADC->fSignals[fTbinADC + 2] = ((*fpPos & 0x00000ffc) >>  2);\r
+     fADC->fSignals[fTbinADC + 3] = ((*fpPos & 0x003ff000) >> 12);\r
+     fADC->fSignals[fTbinADC + 4] = ((*fpPos & 0xffc00000) >> 22);\r
 \r
      fTbinADC += 3;\r
      fpPos++;\r
@@ -1977,7 +1979,7 @@ void AliTRDrawStream::DecodeMCMheader(const UInt_t *word, struct AliTRDrawMCM *m
   UInt_t vword = *word;\r
 \r
   if (vword == END_OF_TRACKLET_MARKERNEW) {\r
-    if (fgWarnError) AliError(Form("There should be MCM header. We meet END_OF_TRACKLET_MARKER 0x%08x",vword));\r
+    if (fWarnError) AliError(Form("There should be MCM header. We meet END_OF_TRACKLET_MARKER 0x%08x",vword));\r
     mcm->fMCMhdCorrupted += 16;\r
     fHC->fCorrupted += 16; //to finish data reading of this HC\r
   }\r
@@ -2005,7 +2007,7 @@ UInt_t AliTRDrawStream::GetMCMadcMask(const UInt_t *word, struct AliTRDrawMCM *m
   mcm->fADCMaskWord = vword;\r
 \r
   if (vword == END_OF_TRACKLET_MARKERNEW) {\r
-    if (fgWarnError) AliError(Form("There should be MCMadcMask. We meet END_OF_TRACKLET_MARKER 0x%08x",vword));\r
+    if (fWarnError) AliError(Form("There should be MCMadcMask. We meet END_OF_TRACKLET_MARKER 0x%08x",vword));\r
     mcm->fADCmaskCorrupted += 16;\r
     fHC->fCorrupted += 16; //to finish data reading of this HC\r
   }\r
@@ -2029,7 +2031,6 @@ void AliTRDrawStream::DecodeMask(const UInt_t *word, struct AliTRDrawMCM *mcm) c
   //\r
   // decode the adc mask - adcs to be read out\r
   //\r
-  mcm->fMCMADCWords = 0;\r
   mcm->fSingleADCwords = 0;\r
   mcm->fADCmax = 0;\r
   mcm->fADCMask = GetMCMadcMask(word, mcm);\r
@@ -2055,11 +2056,8 @@ void AliTRDrawStream::MCMADCwordsWithTbins(UInt_t fTbins, struct AliTRDrawMCM *m
   //\r
   //  count the expected mcm words for a given tbins\r
   //\r
-  mcm->fMCMADCWords = ( mcm->fADCmax ) * ( fTbins / 3 );\r
   mcm->fSingleADCwords = 0;\r
-  if (mcm->fADCmax > 0) {\r
-    mcm->fSingleADCwords = mcm->fMCMADCWords/mcm->fADCmax;\r
-  }\r
+  mcm->fSingleADCwords = (fTbins-1)/3+1;\r
   if (fTbins > 32) mcm->fSingleADCwords = 10; // if the timebin is more than 30, then fix the number of adc words to 10\r
 }\r
   \r