LCOV - code coverage report
Current view: top level - EMCAL/EMCALbase - AliEMCALTriggerRawDigitMaker.cxx (source / functions) Hit Total Coverage
Test: coverage.info Lines: 54 213 25.4 %
Date: 2016-06-14 17:26:59 Functions: 9 10 90.0 %

          Line data    Source code
       1             : /**************************************************************************
       2             :  * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
       3             :  *                                                                        *
       4             :  * Author: The ALICE Off-line Project.                                    *
       5             :  * Contributors are mentioned in the code where appropriate.              *
       6             :  *                                                                        *
       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             :  **************************************************************************/
      15             : 
      16             : 
      17             : #include "AliEMCALTriggerRawDigitMaker.h"
      18             : #include "AliEMCALTriggerSTURawStream.h"
      19             : #include "AliCaloRawAnalyzerFakeALTRO.h"
      20             : #include "AliEMCALTriggerRawDigit.h"
      21             : #include "AliCaloRawStreamV3.h"
      22             : #include "AliRun.h"
      23             : #include "AliRunLoader.h"
      24             : #include "AliEMCAL.h"
      25             : #include "AliCaloBunchInfo.h"
      26             : #include "AliRawReader.h"
      27             : #include "AliEMCALTriggerDCSConfigDB.h"
      28             : #include "AliEMCALTriggerDCSConfig.h"
      29             : #include "AliEMCALTriggerTRUDCSConfig.h"
      30             : #include "AliEMCALTriggerSTUDCSConfig.h"
      31             : #include "AliEMCALTriggerData.h"
      32             : //#include "AliEMCALTriggerPatch.h"
      33             : #include "AliLog.h"
      34             : 
      35             : #include "AliRawVEvent.h"
      36             : #include "AliRawEventHeaderBase.h"
      37             : #include "AliRawEvent.h"
      38             : #include "AliRawVEquipment.h"
      39             : #include "AliRawEquipmentHeader.h"
      40             : #include "AliDAQ.h"
      41             : 
      42             : #include "Riostream.h"
      43             : 
      44             : #include "AliCaloRawAnalyzerFactory.h"
      45             : 
      46          42 : ClassImp(AliEMCALTriggerRawDigitMaker)
      47             : 
      48             : //_______________
      49           6 : AliEMCALTriggerRawDigitMaker::AliEMCALTriggerRawDigitMaker() : TObject(),
      50           6 : fGeometry(0x0),
      51           6 : fRawReader(0x0),
      52           6 : fCaloRawStream(0x0),
      53           6 : fSTURawStream(0x0),
      54           6 : fRawDigits(0x0),
      55           6 : fRawAnalyzer(0x0),
      56           6 : fDCSConfig(0x0),
      57           6 : fTriggerData(0x0)
      58          30 : {
      59             :   // def ctor
      60             :   
      61           6 :   AliRunLoader* rl = AliRunLoader::Instance();
      62          18 :   if (rl && rl->GetAliRun()){
      63          25 :     AliEMCAL * emcal = dynamic_cast<AliEMCAL*>(rl->GetAliRun()->GetDetector("EMCAL"));
      64          15 :     if(emcal) fGeometry = emcal->GetGeometry();
      65           5 :   }
      66             :   
      67           6 :   if(!fGeometry)
      68             :     {
      69             : //       AliDebug(1, Form("Using default geometry"));
      70           2 :       fGeometry =  AliEMCALGeometry::GetInstance(AliEMCALGeometry::GetDefaultGeometryName());
      71           1 :     }
      72             :   
      73             :   //  fRawAnalyzer = new AliCaloRawAnalyzerFakeALTRO ();
      74             :   
      75          12 :   fRawAnalyzer =  (AliCaloRawAnalyzerFakeALTRO*)AliCaloRawAnalyzerFactory::CreateAnalyzer(kFakeAltro);
      76             : 
      77          12 :   fDCSConfig = AliEMCALTriggerDCSConfigDB::Instance();
      78             : 
      79             :   //Int_t nRawDigits = 5952; //fGeometry->GetNTotalTRU() * 96;
      80       71436 :   for (Int_t i=kMaxDigitIndex;i--;) fRawDigitIndex[i] = -1;
      81          12 : }       
      82             : 
      83             : //_______________
      84             : AliEMCALTriggerRawDigitMaker::~AliEMCALTriggerRawDigitMaker()
      85          24 : {
      86             :         // dtor
      87          24 : }
      88             : 
      89             : //_______________
      90             : void AliEMCALTriggerRawDigitMaker::SetIO(AliRawReader* reader, AliCaloRawStreamV3& in, AliEMCALTriggerSTURawStream& inSTU, TClonesArray* digits, TClonesArray *data)
      91             : {
      92             :         // Connect I/O
      93             :         
      94           8 :         fRawReader     = reader;
      95           4 :         fCaloRawStream = &in;
      96           4 :         fRawDigits     = digits;
      97           4 :         fSTURawStream  = &inSTU;
      98           4 :         fTriggerData   = data;
      99           4 : }
     100             : 
     101             : ///
     102             : /// Add bunch list of type AliCaloBunchInfo
     103             : ///
     104             : //_________________
     105             : void AliEMCALTriggerRawDigitMaker::Add(const std::vector<AliCaloBunchInfo> &bunchlist)
     106             : {       
     107           0 :   Int_t    hwAdd   = fCaloRawStream->GetHWAddress();
     108           0 :   UShort_t iRCU    = fCaloRawStream->GetDDLNumber() % 2; // 0/1
     109           0 :   Int_t    iSM     = fCaloRawStream->GetModule();
     110             :   
     111           0 :   Int_t iTRU = fGeometry->GetTriggerMapping()->GetTRUIndexFromOnlineHwAdd(hwAdd,iRCU,iSM);
     112             :       
     113             :   // if (AliDebugLevel())
     114             :   //    {
     115             :   //   UShort_t iBranch = ( hwAdd >> 11 ) & 0x1; // 0/1
     116             :   //            printf("===\n");
     117             :   //            printf("| Hw Adress: 0x%x => SM# %2d / RCU# %d / Branch# %d / TRU# %2d / ADC# %2d\n",
     118             :   //                       hwAdd, fCaloRawStream->GetModule(), iRCU, iBranch, iTRU, fCaloRawStream->GetColumn());
     119             :   // }
     120             :         
     121           0 :         Int_t idx;
     122             :         
     123             :         AliEMCALTriggerRawDigit* dig = 0x0;     
     124             :         
     125           0 :         Int_t timeSamples[256]; for (Int_t j=0; j<256; j++) timeSamples[j] = 0;
     126             :         Int_t nSamples = 0;
     127             :         
     128           0 :         UInt_t iBin   = bunchlist.at(0).GetStartBin();
     129             :          Int_t iBunch = 0;
     130             :         
     131           0 :         for (UInt_t i = 0; i < bunchlist.size(); i++)
     132             :         {
     133           0 :                 AliCaloBunchInfo bunch = bunchlist.at(i);
     134             :                 
     135           0 :                 if (iBin > bunch.GetStartBin()) 
     136             :                 {
     137           0 :                         iBin   = bunch.GetStartBin();
     138             :                         iBunch = i;
     139           0 :                 }
     140             :                 
     141           0 :                 if (fCaloRawStream->GetColumn() < 96)
     142             :                 {
     143           0 :                         const UShort_t* sig = bunch.GetData();
     144           0 :                         Int_t startBin = bunch.GetStartBin();
     145             :                         
     146           0 :                         for (Int_t iS = 0; iS < bunch.GetLength(); iS++) 
     147             :                         {
     148           0 :                                 Int_t time = startBin--;
     149           0 :                                 Int_t amp  = sig[iS];
     150             :                                 
     151           0 :                                 if (amp) timeSamples[nSamples++] = ((time << 16) & 0xFF0000) | (amp & 0xFFFF);
     152             :                                 
     153             : //                              if (AliDebugLevel())
     154             : //                              {
     155             : //                                      printf("ADC# %2d / time: %2d amplitude: %d\n", fCaloRawStream->GetColumn(), time, amp);
     156             : //                              }
     157             :         
     158             :                         }
     159           0 :                 }
     160           0 :         }
     161             :         
     162           0 :         if (fCaloRawStream->GetColumn() > 95 && fCaloRawStream->GetColumn() < 106)
     163             :         {
     164           0 :                 Int_t nBits = (fCaloRawStream->GetColumn() == 105) ? 6 : 10;
     165             :                 
     166           0 :                 const UShort_t* sig = bunchlist.at(iBunch).GetData();
     167             :                 
     168             : //              if (AliDebugLevel()) printf("| L0 id in F-ALTRO => bunch length is: %d\n", bunchlist.at(iBunch).GetLength());
     169             :                 
     170           0 :                 for (Int_t i = 0; i < bunchlist.at(iBunch).GetLength(); i++) 
     171             :                 {
     172             : //                      if (AliDebugLevel()) printf("| sig[%3d]: %x\n",i,sig[i]);
     173             :                                                                                 
     174           0 :                         for (Int_t j = 0; j < nBits; j++)
     175             :                         {
     176           0 :                                 if (sig[i] & ( 1 << j ))
     177             :                                 {
     178             : //                                      if (AliDebugLevel()) 
     179             : //                                      {
     180             : //                                              printf("| Add L0 patch index in TRU# %2d position %2d\n",iTRU,(fCaloRawStream->GetColumn() - 96) * 10 + j);
     181             : //                                      }
     182             :                                         
     183           0 :                                         if (fGeometry->GetAbsFastORIndexFromTRU(iTRU, (fCaloRawStream->GetColumn() - 96) * 10 + j, idx))
     184             :                                         {
     185           0 :                                                 if (fRawDigitIndex[idx] >= 0)
     186             :                                                 {
     187           0 :                                                         dig = (AliEMCALTriggerRawDigit*)fRawDigits->At(fRawDigitIndex[idx]);
     188           0 :                                                 }
     189             :                                                 else
     190             :                                                 {
     191             : //                                                      AliDebug(100,"L0: Trying to update trigger info of a non-existent digit!");
     192             :                                                         
     193           0 :                                                         fRawDigitIndex[idx] = fRawDigits->GetEntriesFast();
     194           0 :                                                         new((*fRawDigits)[fRawDigits->GetEntriesFast()]) AliEMCALTriggerRawDigit(idx, 0x0, 0);
     195             :                                                         
     196           0 :                                                         dig = (AliEMCALTriggerRawDigit*)fRawDigits->At(fRawDigitIndex[idx]);
     197             :                                                 }
     198             :                                                 
     199           0 :                                                 dig->SetL0Time(iBin);
     200           0 :                                         }
     201             :                                 }
     202             :                         }
     203             : 
     204             : // FIX ME                       
     205             : //                      if (fCaloRawStream->GetColumn() == 105 && (sig[i] & (1 << 6))) 
     206             : //                      {
     207             : //                              fTriggerData->SetL0Trigger(1, iTRU, 1);
     208             : //                                                                                 
     209             : //                              if (AliDebugLevel()) printf("=======TRU# %2d has issued a L0\n",iTRU);
     210             : //                      }
     211             :                         
     212           0 :                         iBin--;
     213             :                 }
     214           0 :         } 
     215             :         else
     216             :         {
     217           0 :                 if (nSamples && fGeometry->GetAbsFastORIndexFromTRU(iTRU, fCaloRawStream->GetColumn(), idx)) 
     218             :                 {
     219           0 :                         if (fRawDigitIndex[idx] < 0)
     220             :                         {
     221           0 :                                 fRawDigitIndex[idx] = fRawDigits->GetEntriesFast();
     222           0 :                                 new((*fRawDigits)[fRawDigits->GetEntriesFast()]) AliEMCALTriggerRawDigit(idx, timeSamples, nSamples);
     223             :                         }
     224             :                         else
     225             :                         {
     226           0 :                                 dig = (AliEMCALTriggerRawDigit*)fRawDigits->At(fRawDigitIndex[idx]);
     227           0 :                                 dig->SetTimeSamples(timeSamples, nSamples);
     228             :                         }
     229             :                         
     230             : //                      if (AliDebugLevel())
     231             : //                      {
     232             : //                              printf("| Add TRG digit of id# %4d from TRU# %2d ADC# %2d\n", idx, iTRU, fCaloRawStream->GetColumn());
     233             : // 
     234             : //                              dig = (AliEMCALTriggerRawDigit*)fRawDigits->At(fRawDigitIndex[idx]);
     235             : //                              dig->Print("");
     236             : // 
     237             : //                              Int_t iSm, iTru, iEta, iPhi, iD[4], iFor;
     238             : //                              if (fGeometry->GetPositionInTRUFromAbsFastORIndex(idx, iTru, iEta, iPhi))
     239             : //                              {
     240             : //                                      printf("| Position => TRU: %2d Eta: %2d Phi: %2d\n", iTru, iEta, iPhi);
     241             : //                              }
     242             : //                              
     243             : //                              if (fGeometry->GetPositionInSMFromAbsFastORIndex(idx, iSm, iEta, iPhi))
     244             : //                              {
     245             : //                                      printf("| Position =>  SM: %2d Eta: %2d Phi: %2d\n", iSm, iEta, iPhi);
     246             : //                              }
     247             : //                                                              
     248             : //                              if (fGeometry->GetCellIndexFromFastORIndex(idx, iD))
     249             : //                              {
     250             : //                                      printf("| tower iDs: ");
     251             : //                                      for (Int_t i = 0; i < 4; i++)
     252             : //                                      {
     253             : //                                              printf("%5d ",iD[i]); 
     254             : //                                      }
     255             : //                                      printf("\n");
     256             : //                                      
     257             : //                                      for (Int_t i = 0; i < 4; i++)
     258             : //                                      {
     259             : //                                              if (fGeometry->GetFastORIndexFromCellIndex(iD[i], iFor))
     260             : //                                              {
     261             : //                                                      printf("| tower %d to F-OR %d\n",iD[i],iFor);
     262             : //                                              }
     263             : //                                      }
     264             : //                              }                               
     265             : //                      }
     266             :                 }
     267             :         }
     268           0 : }
     269             : 
     270             : //_______________
     271             : void AliEMCALTriggerRawDigitMaker::PostProcess()
     272             : {       
     273             :   // Post process digits
     274             :   
     275             : //   AliDebug(2,"Start post processing the raw digit maker");
     276           8 :   Int_t idx;
     277           4 :   const Int_t offsetEMCAL = AliDAQ::DdlIDOffset("EMCAL");
     278             :   
     279             :   AliEMCALTriggerRawDigit* dig = 0x0;
     280             :   
     281             :   // Loop over both STU DDLs in order to read out both EMCAL and DCAL (if available)
     282             :   Int_t detectorID = 0;       // 0 - EMCAL, 1 - DCAL
     283          24 :   for(Int_t istu = AliDAQ::GetFirstSTUDDL(); istu <= AliDAQ::GetLastSTUDDL(); istu++){
     284           8 :     detectorID = istu - AliDAQ::GetFirstSTUDDL();
     285             :     
     286           8 :     AliEMCALTriggerData *trgData = (AliEMCALTriggerData*)fTriggerData->At(detectorID);
     287             :     
     288           8 :     fRawReader->Reset();
     289           8 :     fRawReader->Select("EMCAL",istu,istu);
     290             :     
     291           8 :     AliRawVEvent *event = (AliRawEvent*)fRawReader->GetEvent();
     292           8 :     if (!event) {
     293           0 :       AliError(Form("STU DDL# %d not available!",istu));
     294           0 :       continue;
     295             :     }
     296             :     
     297             :     Bool_t isSTUin = kFALSE;
     298             :     
     299           8 :     Int_t nSubEv = fRawReader->GetEvent()->GetNSubEvents();
     300             :     
     301        1912 :     for ( Int_t iSubEv=0; iSubEv<nSubEv; iSubEv++)
     302             :     {
     303         948 :       AliRawVEvent *subEv = ((AliRawEvent*)fRawReader->GetEvent())->GetSubEvent(iSubEv);
     304         948 :       if ( !subEv ) continue;
     305             :       
     306        8380 :       for (Int_t iEquip = 0; iEquip < subEv->GetNEquipments(); iEquip++)
     307             :       {
     308        3242 :         Int_t eqId = subEv->GetEquipment(iEquip)->GetEquipmentHeader()->GetId();
     309             :         
     310        3242 :         if (eqId == offsetEMCAL + istu) isSTUin = kTRUE;
     311             :       }
     312         948 :     }
     313             :     
     314           8 :     fRawReader->Reset();
     315             :     
     316           8 :     if (isSTUin && fSTURawStream && fSTURawStream->ReadPayLoad())
     317             :     {
     318           0 :       trgData->SetL1DataDecoded(1);
     319             :       
     320           0 :       for (int i = 0; i < 2; i++) {
     321           0 :         trgData->SetL1GammaThreshold(i, fSTURawStream->GetL1GammaThreshold(i));
     322           0 :         trgData->SetL1JetThreshold(  i, fSTURawStream->GetL1JetThreshold(i)  );
     323             :       }
     324             :       
     325           0 :       Int_t v0[2] = { static_cast<Int_t>(fSTURawStream->GetV0A()),  static_cast<Int_t>(fSTURawStream->GetV0C())};
     326             :       
     327           0 :       Int_t type[19] =
     328           0 :       {
     329           0 :         static_cast<Int_t>(fSTURawStream->GetG(0, 0)),
     330           0 :         static_cast<Int_t>(fSTURawStream->GetG(1, 0)),
     331           0 :         static_cast<Int_t>(fSTURawStream->GetG(2, 0)),
     332           0 :         static_cast<Int_t>(fSTURawStream->GetJ(0, 0)),
     333           0 :         static_cast<Int_t>(fSTURawStream->GetJ(1, 0)),
     334           0 :         static_cast<Int_t>(fSTURawStream->GetJ(2, 0)),
     335           0 :         static_cast<Int_t>(fSTURawStream->GetG(0, 1)),
     336           0 :         static_cast<Int_t>(fSTURawStream->GetG(1, 1)),
     337           0 :         static_cast<Int_t>(fSTURawStream->GetG(2, 1)),
     338           0 :         static_cast<Int_t>(fSTURawStream->GetJ(0, 1)),
     339           0 :         static_cast<Int_t>(fSTURawStream->GetJ(1, 1)),
     340           0 :         static_cast<Int_t>(fSTURawStream->GetJ(2, 1)),
     341           0 :         static_cast<Int_t>(fSTURawStream->GetRawData()),
     342           0 :         static_cast<Int_t>(fSTURawStream->GetRegionEnable()),
     343           0 :         static_cast<Int_t>(fSTURawStream->GetFwVersion())
     344             :       };
     345             :       
     346             :       // Modify DCS config from STU payload content
     347             : //       fDCSConfig->GetTriggerDCSConfig()->GetSTUDCSConfig()->SetG(0, 0, type[0]);
     348             : //       fDCSConfig->GetTriggerDCSConfig()->GetSTUDCSConfig()->SetG(1, 0, type[1]);
     349             : //       fDCSConfig->GetTriggerDCSConfig()->GetSTUDCSConfig()->SetG(2, 0, type[2]);
     350             : //       fDCSConfig->GetTriggerDCSConfig()->GetSTUDCSConfig()->SetJ(0, 0, type[3]);
     351             : //       fDCSConfig->GetTriggerDCSConfig()->GetSTUDCSConfig()->SetJ(1, 0, type[4]);
     352             : //       fDCSConfig->GetTriggerDCSConfig()->GetSTUDCSConfig()->SetJ(2, 0, type[5]);
     353             : //       fDCSConfig->GetTriggerDCSConfig()->GetSTUDCSConfig()->SetG(0, 1, type[6]);
     354             : //       fDCSConfig->GetTriggerDCSConfig()->GetSTUDCSConfig()->SetG(1, 1, type[7]);
     355             : //       fDCSConfig->GetTriggerDCSConfig()->GetSTUDCSConfig()->SetG(2, 1, type[8]);
     356             : //       fDCSConfig->GetTriggerDCSConfig()->GetSTUDCSConfig()->SetJ(0, 1, type[9]);
     357             : //       fDCSConfig->GetTriggerDCSConfig()->GetSTUDCSConfig()->SetJ(1, 1, type[10]);
     358             : //       fDCSConfig->GetTriggerDCSConfig()->GetSTUDCSConfig()->SetJ(2, 1, type[11]);
     359             : //       fDCSConfig->GetTriggerDCSConfig()->GetSTUDCSConfig()->SetRawData(type[12]);
     360             : //       fDCSConfig->GetTriggerDCSConfig()->GetSTUDCSConfig()->SetRegion(type[13]);
     361             : //       fDCSConfig->GetTriggerDCSConfig()->GetSTUDCSConfig()->SetFw(type[14]);
     362             :             
     363           0 :       if (detectorID) {
     364           0 :         for (int i=0;i<4;i++) {
     365           0 :           type[15+i]=static_cast<Int_t>(fSTURawStream->GetPHOSScale(i));
     366             : //           fDCSConfig->GetTriggerDCSConfig()->GetSTUDCSConfig(kTRUE)->SetPHOSScale(i,type[15+i]);
     367             :         }
     368             :         // Modify DCS config from STU payload content
     369             : //         fDCSConfig->GetTriggerDCSConfig()->GetSTUDCSConfig(kTRUE)->SetG(0, 0, type[0]);
     370             : //         fDCSConfig->GetTriggerDCSConfig()->GetSTUDCSConfig(kTRUE)->SetG(1, 0, type[1]);
     371             : //         fDCSConfig->GetTriggerDCSConfig()->GetSTUDCSConfig(kTRUE)->SetG(2, 0, type[2]);
     372             : //         fDCSConfig->GetTriggerDCSConfig()->GetSTUDCSConfig(kTRUE)->SetJ(0, 0, type[3]);
     373             : //         fDCSConfig->GetTriggerDCSConfig()->GetSTUDCSConfig(kTRUE)->SetJ(1, 0, type[4]);
     374             : //         fDCSConfig->GetTriggerDCSConfig()->GetSTUDCSConfig(kTRUE)->SetJ(2, 0, type[5]);
     375             : //         fDCSConfig->GetTriggerDCSConfig()->GetSTUDCSConfig(kTRUE)->SetG(0, 1, type[6]);
     376             : //         fDCSConfig->GetTriggerDCSConfig()->GetSTUDCSConfig(kTRUE)->SetG(1, 1, type[7]);
     377             : //         fDCSConfig->GetTriggerDCSConfig()->GetSTUDCSConfig(kTRUE)->SetG(2, 1, type[8]);
     378             : //         fDCSConfig->GetTriggerDCSConfig()->GetSTUDCSConfig(kTRUE)->SetJ(0, 1, type[9]);
     379             : //         fDCSConfig->GetTriggerDCSConfig()->GetSTUDCSConfig(kTRUE)->SetJ(1, 1, type[10]);
     380             : //         fDCSConfig->GetTriggerDCSConfig()->GetSTUDCSConfig(kTRUE)->SetJ(2, 1, type[11]);
     381             : //         fDCSConfig->GetTriggerDCSConfig()->GetSTUDCSConfig(kTRUE)->SetRawData(type[12]);
     382             : //         fDCSConfig->GetTriggerDCSConfig()->GetSTUDCSConfig(kTRUE)->SetRegion(type[13]);
     383             : //         fDCSConfig->GetTriggerDCSConfig()->GetSTUDCSConfig(kTRUE)->SetFw(type[14]);
     384           0 :       }
     385             :       
     386           0 :       trgData->SetL1FrameMask(fSTURawStream->GetFrameReceived());
     387           0 :       trgData->SetL1V0(v0);
     388           0 :       trgData->SetL1TriggerType(type);
     389             :       
     390           0 :       trgData->SetL1RawData(fSTURawStream->GetRawData());
     391             :       
     392           0 :       Int_t iTRU, jTRU, x, y, jADC;
     393             :       
     394           0 :       TVector2 sizeL1gsubr, sizeL1gpatch, sizeL1jsubr, sizeL1jpatch;
     395           0 :       fDCSConfig->GetTriggerDCSConfig()->GetSTUDCSConfig()->GetSegmentation(sizeL1gsubr, sizeL1gpatch, sizeL1jsubr, sizeL1jpatch);
     396             :       
     397           0 :       if (fSTURawStream->GetRawData())
     398             :       {
     399             : //         if (AliDebugLevel()) printf("| STU => TRU raw data are there!\n");
     400             :         
     401           0 :         Int_t nTRU = fSTURawStream->GetnTRU();
     402           0 :         for (Int_t i = 0; i < nTRU; i++)
     403             :         {
     404           0 :           iTRU = fGeometry->GetTRUIndexFromSTUIndex(i, detectorID);
     405             :           
     406           0 :           UInt_t adc[96]; for (Int_t j = 0; j < 96; j++) adc[j] = 0;
     407             :           
     408           0 :           fSTURawStream->GetADC(i, adc);
     409             :           
     410           0 :           for (Int_t j = 0; j < 96; j++)
     411             :           {
     412           0 :             if (adc[j] <= 0) continue;
     413             :             
     414             : //             AliDebug(10,Form("| STU => TRU# %2d raw data: ADC# %2d: %d\n", iTRU, j, adc[j]));
     415             :             
     416           0 :             if(fGeometry->GetTriggerMappingVersion() == 1){
     417           0 :               fGeometry->GetAbsFastORIndexFromTRU(iTRU, j, idx);
     418             :             } else {
     419           0 :               fGeometry->GetTRUFromSTU(i, j, jTRU, jADC, detectorID);
     420           0 :               fGeometry->GetAbsFastORIndexFromTRU(jTRU, jADC, idx);
     421             :             }
     422             :             
     423           0 :             if (fRawDigitIndex[idx] >= 0)
     424             :             {
     425           0 :               dig = (AliEMCALTriggerRawDigit*)fRawDigits->At(fRawDigitIndex[idx]);
     426             :               
     427             : //               if (!dig->GetNSamples()) AliDebug(10,Form("TRG digit of id: %4d found in STU but has no time sample in F-ALTRO!",idx));
     428           0 :             }
     429             :             else
     430             :             {
     431             : //               AliDebug(10,Form("TRG digit of id: %4d found in STU but not in F-ALTRO! Create a new digit!",idx));
     432             :               
     433           0 :               fRawDigitIndex[idx] = fRawDigits->GetEntriesFast();
     434           0 :               new((*fRawDigits)[fRawDigits->GetEntriesFast()]) AliEMCALTriggerRawDigit(idx, 0x0, 0);
     435             :               
     436           0 :               dig = (AliEMCALTriggerRawDigit*)fRawDigits->At(fRawDigitIndex[idx]);
     437             :             }
     438             :             
     439           0 :             dig->SetL1TimeSum(adc[j]);
     440             :           }
     441           0 :         }
     442           0 :       }
     443             :       
     444             :       // List of patches in EMCal coordinate system
     445             :       
     446             : //       for (Int_t i = 0; i < fSTURawStream->GetNL0GammaPatch(); i++)
     447             : //       {
     448             : //         fSTURawStream->GetL0GammaPatch(i, iTRU, x);
     449             : //         
     450             : //         iTRU = fGeometry->GetTRUIndexFromSTUIndex(iTRU, detectorID);
     451             : //         
     452             : //         const Int_t sizePatchL0 =
     453             : //         ((AliEMCALTriggerTRUDCSConfig*)fDCSConfig->GetTriggerDCSConfig()->GetTRUArr()->At(fGeometry->GetOnlineIndexFromTRUIndex(iTRU)))->GetSegmentation()
     454             : //         *
     455             : //         ((AliEMCALTriggerTRUDCSConfig*)fDCSConfig->GetTriggerDCSConfig()->GetTRUArr()->At(fGeometry->GetOnlineIndexFromTRUIndex(iTRU)))->GetSegmentation();
     456             : //         
     457             : //         if (AliDebugLevel()) printf("| STU => Found L0 patch id: %2d in TRU# %2d\n", x, iTRU);
     458             : //         
     459             : //         Int_t idFastOR[4];
     460             : //         for (Int_t j = 0; j < 4; j++) idFastOR[j] = -1;
     461             : //         
     462             : //         if (fGeometry->GetFastORIndexFromL0Index(iTRU, x, idFastOR, sizePatchL0))
     463             : //         {
     464             : //           idx = idFastOR[1];
     465             : //           
     466             : //           Int_t px, py;
     467             : //           if (fGeometry->GetPositionInEMCALFromAbsFastORIndex(idx, px, py))
     468             : //           {
     469             : //             if (AliDebugLevel()) printf("| STU => Add L0 patch at (%2d , %2d)\n", px, py);
     470             : //             
     471             : //             if (fRawDigitIndex[idx] >= 0)
     472             : //             {
     473             : //               dig = (AliEMCALTriggerRawDigit*)fRawDigits->At(fRawDigitIndex[idx]);
     474             : //             }
     475             : //             else
     476             : //             {
     477             : //               fRawDigitIndex[idx] = fRawDigits->GetEntriesFast();
     478             : //               new((*fRawDigits)[fRawDigits->GetEntriesFast()]) AliEMCALTriggerRawDigit(idx, 0x0, 0);
     479             : //               
     480             : //               dig = (AliEMCALTriggerRawDigit*)fRawDigits->At(fRawDigitIndex[idx]);
     481             : //             }
     482             : //             
     483             : //             dig->SetTriggerBit(kL0,1);
     484             : //           }
     485             : //         }
     486             : //       }
     487             :       
     488           0 :       for (int ithr = 0; ithr < 2; ithr++) {
     489           0 :         for (Int_t i = 0; i < fSTURawStream->GetNL1GammaPatch(ithr); i++) {
     490           0 :           if (fSTURawStream->GetL1GammaPatch(i, ithr, iTRU, x, y)) { // col (0..23), row (0..3)
     491             : //             if (AliDebugLevel()) printf("| STU => Found L1 gamma patch at (%2d , %2d) in TRU# %2d\n", x, y, iTRU);
     492             :             
     493           0 :             Int_t vx, vy, lphi;
     494             :             
     495           0 :             if (fGeometry->GetTriggerMappingVersion() == 1) {
     496           0 :               iTRU = fGeometry->GetTRUIndexFromSTUIndex(iTRU, detectorID);
     497           0 :               vx = 23 - x; 
     498           0 :               vy = y + 4 * int(iTRU / 2); // Position in EMCal frame
     499           0 :               if (iTRU % 2) vx += 24; // C side
     500           0 :               vx = vx - int(sizeL1gsubr.X()) * int(sizeL1gpatch.X()) + 1;
     501             :               
     502           0 :               fGeometry->GetAbsFastORIndexFromPositionInEMCAL(vx, vy, idx);
     503             :               lphi = 63;
     504           0 :             }
     505             :             else {
     506           0 :               fGeometry->GetTRUFromSTU(iTRU, x, y, jTRU, vx, vy, detectorID);
     507           0 :               fGeometry->GetAbsFastORIndexFromPositionInTRU(jTRU, vx, vy, idx);
     508             :               lphi = 103;
     509             :             }
     510             :             
     511           0 :             if (vx >= 0 && vy < lphi) {
     512             : //               if (AliDebugLevel()) printf("| STU => Add L1 gamma [%d] patch at (%2d , %2d)\n", ithr, vx, vy);
     513             :               
     514           0 :               if (fRawDigitIndex[idx] >= 0) {
     515           0 :                 dig = (AliEMCALTriggerRawDigit*)fRawDigits->At(fRawDigitIndex[idx]);
     516           0 :               }
     517             :               else {
     518           0 :                 fRawDigitIndex[idx] = fRawDigits->GetEntriesFast();
     519           0 :                 new((*fRawDigits)[fRawDigits->GetEntriesFast()]) AliEMCALTriggerRawDigit(idx, 0x0, 0);
     520             :                 
     521           0 :                 dig = (AliEMCALTriggerRawDigit*)fRawDigits->At(fRawDigitIndex[idx]);
     522             :               }
     523             :               
     524           0 :               dig->SetTriggerBit(kL1GammaHigh + ithr,1);
     525           0 :             }
     526           0 :           }
     527             :         }
     528             :         
     529           0 :         for (Int_t i = 0; i < fSTURawStream->GetNL1JetPatch(ithr); i++) {
     530           0 :           if (fSTURawStream->GetL1JetPatch(i, ithr, x, y)) { // col (0,15), row (0,11)
     531             :             Int_t vx, vy;
     532           0 :             if (fGeometry->GetTriggerMappingVersion() == 1) {
     533           0 :               vx = 11 - y - int(sizeL1jpatch.X()) + 1;              
     534           0 :               vy = 15 - x - int(sizeL1jpatch.Y()) + 1;
     535           0 :             } 
     536             :             else {
     537             :               vx = y;
     538           0 :               vy = x;
     539             :             }
     540             : 
     541           0 :             vx *= int(sizeL1jsubr.X());
     542           0 :             vy *= int(sizeL1jsubr.Y());
     543             :             
     544             : //             AliDebug(1, Form("| STU => Found L1 jet [%d] patch at (%2d , %2d)\n", ithr, x, y));
     545             :             
     546           0 :             if (x >= 0 && y >= 0) {
     547           0 :               if (fGeometry->GetAbsFastORIndexFromPositionInEMCAL(vx, vy, idx)) {
     548             : //                 if (AliDebugLevel()) printf("| STU => Add L1 jet patch at (%2d , %2d)\n", x, y);
     549             :                 
     550           0 :                 if (fRawDigitIndex[idx] >= 0) {
     551           0 :                   dig = (AliEMCALTriggerRawDigit*)fRawDigits->At(fRawDigitIndex[idx]);
     552           0 :                 } 
     553             :                 else {
     554           0 :                   fRawDigitIndex[idx] = fRawDigits->GetEntriesFast();
     555           0 :                   new((*fRawDigits)[fRawDigits->GetEntriesFast()]) AliEMCALTriggerRawDigit(idx, 0x0, 0);
     556             :                   
     557           0 :                   dig = (AliEMCALTriggerRawDigit*)fRawDigits->At(fRawDigitIndex[idx]);
     558             :                 }
     559             :                 
     560           0 :                 dig->SetTriggerBit(kL1JetHigh + ithr,1);
     561           0 :               }
     562             :             }
     563           0 :           }
     564             :         }
     565             :       }
     566             :       
     567           0 :       if (detectorID) {
     568           0 :         UInt_t sregion[36] = {0};
     569           0 :         fSTURawStream->GetPHOSSubregion(sregion);
     570           0 :         for (int isr=0;isr<36;isr++) {
     571           0 :           if (fGeometry->GetAbsFastORIndexFromPHOSSubregion(isr, idx)) {
     572           0 :             if (fRawDigitIndex[idx] >= 0) {
     573           0 :               dig = (AliEMCALTriggerRawDigit*)fRawDigits->At(fRawDigitIndex[idx]);
     574           0 :             }
     575             :             else {
     576           0 :               fRawDigitIndex[idx] = fRawDigits->GetEntriesFast();
     577           0 :               new((*fRawDigits)[fRawDigits->GetEntriesFast()]) AliEMCALTriggerRawDigit(idx, 0x0, 0);
     578             :               
     579           0 :               dig = (AliEMCALTriggerRawDigit*)fRawDigits->At(fRawDigitIndex[idx]);
     580             :             }
     581             :             
     582           0 :             dig->SetL1SubRegion(sregion[isr]);
     583             :           }
     584             :         }
     585           0 :       }
     586           0 :     }
     587           8 :   }
     588           4 : }
     589             : 
     590             : //_______________
     591             : void AliEMCALTriggerRawDigitMaker::Reset()
     592             : {
     593             :         // Reset
     594             :         
     595             :         Int_t nRawDigits = 4992;
     596       39948 :         for (Int_t i = 0; i < nRawDigits; i++) fRawDigitIndex[i] = -1;
     597           4 : }
     598             : 
     599             : 

Generated by: LCOV version 1.11