LCOV - code coverage report
Current view: top level - HLT/EMCAL - AliHLTEMCALTRURawDigitMaker.cxx (source / functions) Hit Total Coverage
Test: coverage.info Lines: 1 93 1.1 %
Date: 2016-06-14 17:26:59 Functions: 1 12 8.3 %

          Line data    Source code
       1             : #include "AliCaloRawStreamV3.h"
       2             : #include "AliCaloBunchInfo.h"
       3             : #include "AliHLTCaloTriggerRawDigitDataStruct.h"
       4             : #include "AliHLTEMCALGeometry.h"
       5             : #include "AliHLTEMCALTRURawDigitMaker.h"
       6             : 
       7           6 : ClassImp(AliHLTEMCALTRURawDigitMaker)
       8             : 
       9             : AliHLTEMCALTRURawDigitMaker::AliHLTEMCALTRURawDigitMaker():
      10           0 : AliHLTLogging(),
      11           0 : fCaloRawStream(),
      12           0 : fGeometryPtr(NULL),
      13           0 : fNRawDigits(0)
      14           0 : {
      15           0 :   for(int ndx = 0; ndx < fgkNRawDigits; ndx++)
      16           0 :     fRawDigitIndex[ndx] = -1;
      17           0 : }
      18             : 
      19             : void AliHLTEMCALTRURawDigitMaker::SetRawReader(AliCaloRawStreamV3 *reader){
      20           0 :   fCaloRawStream = reader;
      21           0 : }
      22             : 
      23           0 : AliHLTEMCALTRURawDigitMaker::~AliHLTEMCALTRURawDigitMaker() {
      24           0 :   if(fGeometryPtr) delete fGeometryPtr;
      25           0 : }
      26             : 
      27             : void AliHLTEMCALTRURawDigitMaker::Initialize(Int_t runno){
      28           0 :   fGeometryPtr = new AliHLTEMCALGeometry(runno);
      29           0 : }
      30             : 
      31             : void AliHLTEMCALTRURawDigitMaker::Add(const std::vector<AliCaloBunchInfo> &bunchlist) {
      32           0 :   Int_t    hwAdd   = fCaloRawStream->GetHWAddress();
      33           0 :   UShort_t iRCU    = fCaloRawStream->GetDDLNumber() % 2; // 0/1
      34           0 :   Int_t    iSM     = fCaloRawStream->GetModule();
      35             : 
      36           0 :   Int_t iTRU = fGeometryPtr->GetGeometryPtr()->GetTriggerMapping()->GetTRUIndexFromOnlineHwAdd(hwAdd,iRCU,iSM);
      37             : 
      38           0 :   if (GetLocalLoggingDefault() & kHLTLogDebug) {
      39           0 :     UShort_t iBranch = ( hwAdd >> 11 ) & 0x1; // 0/1
      40             :     HLTDebug("===\n");
      41             :     HLTDebug("| Hw Adress: 0x%x => SM# %2d / RCU# %d / Branch# %d / TRU# %2d / ADC# %2d\n",
      42             :          hwAdd, fCaloRawStream->GetModule(), iRCU, iBranch, iTRU, fCaloRawStream->GetColumn());
      43           0 :   }
      44             : 
      45           0 :   Int_t idx;
      46             : 
      47           0 :   Int_t timeSamples[15]; memset(timeSamples, 0, sizeof(timeSamples));
      48             :   UChar_t nSamples = 0;
      49             : 
      50           0 :   UInt_t iBin   = bunchlist.at(0).GetStartBin();
      51             :   Int_t iBunch = 0;
      52             : 
      53           0 :   for (UInt_t i = 0; i < bunchlist.size(); i++) {
      54           0 :     AliCaloBunchInfo bunch = bunchlist.at(i);
      55             : 
      56           0 :     if (iBin > bunch.GetStartBin()) {
      57           0 :       iBin   = bunch.GetStartBin();
      58             :       iBunch = i;
      59           0 :     }
      60           0 :     Int_t column = fCaloRawStream->GetColumn();
      61             : 
      62           0 :     if (column < 96) {
      63           0 :       const UShort_t* sig = bunch.GetData();
      64           0 :       Int_t startBin = bunch.GetStartBin();
      65             : 
      66           0 :       for (Int_t iS = 0; iS < bunch.GetLength(); iS++) {
      67           0 :         Int_t time = startBin--;
      68           0 :         Int_t amp  = sig[iS];
      69             : 
      70           0 :         if (amp){
      71           0 :           if(nSamples >= 15){
      72           0 :             HLTError("Buffer for time samples exceeded, not possible to store more");
      73             :           } else {
      74           0 :             timeSamples[nSamples++] = ((time << 16) & 0xFF0000) | (amp & 0xFFFF);
      75             :             HLTDebug("ADC# %2d / time: %2d amplitude: %d\n", fCaloRawStream->GetColumn(), time, amp);
      76             :           }
      77             :         }
      78             :       }
      79           0 :     }
      80           0 :   }
      81             : 
      82           0 :   if (fCaloRawStream->GetColumn() > 95 && fCaloRawStream->GetColumn() < 106) {
      83           0 :     Int_t nBits = (fCaloRawStream->GetColumn() == 105) ? 6 : 10;
      84           0 :     const UShort_t* sig = bunchlist.at(iBunch).GetData();
      85             :     HLTDebug("| L0 id in F-ALTRO => bunch length is: %d\n", bunchlist.at(iBunch).GetLength());
      86             : 
      87           0 :     for (Int_t i = 0; i < bunchlist.at(iBunch).GetLength(); i++) {
      88             :       HLTDebug("| sig[%3d]: %x\n",i,sig[i]);
      89             : 
      90           0 :       for (Int_t j = 0; j < nBits; j++) {
      91           0 :         if (sig[i] & ( 1 << j )) {
      92             :           HLTDebug("| Add L0 patch index in TRU# %2d position %2d\n",iTRU,(fCaloRawStream->GetColumn() - 96) * 10 + j);
      93             : 
      94           0 :           if (fGeometryPtr->GetGeometryPtr()->GetAbsFastORIndexFromTRU(iTRU, (fCaloRawStream->GetColumn() - 96) * 10 + j, idx)) {
      95           0 :             SetL0Time(GetRawDigit(idx), iBin);
      96           0 :           }
      97             :         }
      98             :       }
      99           0 :       iBin--;
     100             :     }
     101           0 :   } else {
     102           0 :     if (nSamples && fGeometryPtr->GetGeometryPtr()->GetAbsFastORIndexFromTRU(iTRU, fCaloRawStream->GetColumn(), idx)) {
     103           0 :       SetTimeSamples(GetRawDigit(idx), nSamples, timeSamples);
     104             : 
     105           0 :       if (GetLocalLoggingDefault() & kHLTLogDebug) {
     106             :         HLTDebug("| Add TRG digit of id# %4d from TRU# %2d ADC# %2d\n", idx, iTRU, fCaloRawStream->GetColumn());
     107             : 
     108             :         //PrintRawDigit(GetRawDigit(idx));
     109           0 :         Int_t iSm, iTru, iEta, iPhi, iD[4], iFor;
     110           0 :         if (fGeometryPtr->GetGeometryPtr()->GetPositionInTRUFromAbsFastORIndex(idx, iTru, iEta, iPhi))
     111             :           HLTDebug("| Position => TRU: %2d Eta: %2d Phi: %2d\n", iTru, iEta, iPhi);
     112             : 
     113           0 :         if (fGeometryPtr->GetGeometryPtr()->GetPositionInSMFromAbsFastORIndex(idx, iSm, iEta, iPhi))
     114             :           HLTDebug("| Position =>  SM: %2d Eta: %2d Phi: %2d\n", iSm, iEta, iPhi);
     115             : 
     116           0 :         if (fGeometryPtr->GetGeometryPtr()->GetCellIndexFromFastORIndex(idx, iD)) {
     117             :           HLTDebug("| tower iDs: ");
     118           0 :           for (Int_t i = 0; i < 4; i++) HLTDebug ("%5d ",iD[i]);
     119           0 :           for (Int_t i = 0; i < 4; i++) {
     120           0 :             if (fGeometryPtr->GetGeometryPtr()->GetFastORIndexFromCellIndex(iD[i], iFor)) {
     121             :               HLTDebug("| tower %d to F-OR %d\n",iD[i],iFor);
     122             :             }
     123             :           }
     124           0 :         }
     125           0 :       }
     126             :     }
     127             :   }
     128             :   /*
     129             :   std::cout << "Found TRU  raw digits: " << std::endl;
     130             :   for(Int_t idig = 0; idig < fNRawDigits; idig++){
     131             :     PrintRawDigit(fRawDigitBuffer[idig]);
     132             :   }
     133             :   */
     134           0 : }
     135             : 
     136             : void AliHLTEMCALTRURawDigitMaker::Reset() {
     137           0 :   for (Int_t i = 0; i < fgkNRawDigits; i++) fRawDigitIndex[i] = -1;
     138           0 :   fNRawDigits = 0;
     139           0 : }
     140             : 
     141             : Int_t AliHLTEMCALTRURawDigitMaker::WriteRawDigitsBuffer(AliHLTCaloTriggerRawDigitDataStruct *bufferptr, AliHLTUInt32_t &availableSize) const {
     142             :   Int_t outputsize = 0;
     143           0 :   if(availableSize < sizeof(AliHLTCaloTriggerRawDigitDataStruct)){
     144           0 :           HLTWarning("Not enough space in buffer in order to write digit");
     145           0 :           return 0;
     146             :   }
     147           0 :   for(Int_t idig = 0; idig < fNRawDigits; idig++){
     148           0 :         if(availableSize < sizeof(AliHLTCaloTriggerRawDigitDataStruct)){
     149           0 :                 HLTWarning("Buffer exceeded after %d digits", idig);
     150           0 :                 break;
     151             :         }
     152           0 :     *bufferptr = fRawDigitBuffer[idig];
     153           0 :     bufferptr++;
     154           0 :     outputsize += sizeof(AliHLTCaloTriggerRawDigitDataStruct);
     155           0 :     availableSize -= sizeof(AliHLTCaloTriggerRawDigitDataStruct);
     156             :   }
     157           0 :   return outputsize;
     158           0 : }
     159             : 
     160             : AliHLTCaloTriggerRawDigitDataStruct &AliHLTEMCALTRURawDigitMaker::GetRawDigit(Int_t index){
     161           0 :   if(fRawDigitIndex[index] >= 0){
     162           0 :     return fRawDigitBuffer[fRawDigitIndex[index]];
     163             :   }
     164             : 
     165           0 :   fRawDigitIndex[index] = fNRawDigits;
     166           0 :   new(fRawDigitBuffer + fNRawDigits) AliHLTCaloTriggerRawDigitDataStruct;
     167           0 :   AliHLTCaloTriggerRawDigitDataStruct &dig = fRawDigitBuffer[fNRawDigits];
     168           0 :   InitializeRawDigit(dig);
     169           0 :   SetRawDigitID(dig, index);
     170           0 :   fNRawDigits++;
     171             :   return dig;
     172           0 : }

Generated by: LCOV version 1.11