ROOT logo
/**************************************************************************
 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 *                                                                        *
 * Author: The ALICE Off-line Project.                                    *
 * Contributors are mentioned in the code where appropriate.              *
 *                                                                        *
 * Permission to use, copy, modify and distribute this software and its   *
 * documentation strictly for non-commercial purposes is hereby granted   *
 * without fee, provided that the above copyright notice appears in all   *
 * copies and that both the copyright notice and this permission notice   *
 * appear in the supporting documentation. The authors make no claims     *
 * about the suitability of this software for any purpose. It is          *
 * provided "as is" without express or implied warranty.                  *
 **************************************************************************/

// $Id$

//-----------------------------------------------------------------------------
/// \class AliMUONDigitMaker
/// MUON Digit maker from rawdata.
///
/// Raw2Digits:
/// Using real mapping  for tracker
/// Indranil Das (Adapted for runloader: Ch. Finck) july 05
///
/// Implemented non-constant buspatch numbers for tracking
/// with correct DDL id.
/// (Ch. Finck, dec 05)
///
/// Add reader for scaler trigger events
/// Use memcpy instead of assignment elt by elt
/// (Ch. Finck, Jan 06)
///
/// Using new interface with AliMUONRawStreamTracker(Trigger)
/// (New interface of AliMUONRawReader class)
/// (further details could be found in Alice-note)
/// (Ch. Finck, March 06)
///
/// Add (S)Digit maker tracker (for free)
/// and for trigger. Create trigger inverse mapping.
///
/// \author Ch. Finck, oct 06 
//-----------------------------------------------------------------------------

#include "AliMUONDigitMaker.h"

#include "AliMUONDDLTrigger.h"
#include "AliMUONDarcHeader.h"
#include "AliMUONVDigit.h"
#include "AliMUONVDigitStore.h"
#include "AliMUONGlobalTrigger.h"
#include "AliMUONLocalStruct.h"
#include "AliMUONLocalTrigger.h"
#include "AliMUONLogger.h"
#include "AliMUONRawStreamTrackerHP.h"
#include "AliMUONRawStreamTriggerHP.h"
#include "AliMUONRegHeader.h"
#include "AliMUONVTriggerStore.h"
#include "AliMpCDB.h"
#include "AliMpDetElement.h"
#include "AliMpTriggerCrate.h"
#include "AliMpLocalBoard.h"
#include "AliMpCathodType.h"
#include "AliMpDDLStore.h"
#include "AliMpDEManager.h"
#include "AliMpPad.h"
#include "AliMpSegmentation.h"
#include "AliMpVSegmentation.h"
#include "AliCodeTimer.h"
#include "AliLog.h"
#include "AliRawReader.h"
#include <TArrayS.h>

using std::endl;
using std::cout;
/// \cond CLASSIMP
ClassImp(AliMUONDigitMaker) // Class implementation in ROOT context
/// \endcond

//__________________________________________________________________________
AliMUONDigitMaker::AliMUONDigitMaker(Bool_t enableErrorLogger, Bool_t a, Bool_t b) :
TObject(),
fScalerEvent(kFALSE),
fMakeTriggerDigits(kFALSE),
fMakeTrackerDigits(kFALSE),
fRawStreamTracker(new AliMUONRawStreamTrackerHP),
fRawStreamTrigger(new AliMUONRawStreamTriggerHP),
fDigitStore(0x0),
fTriggerStore(0x0),
fLogger(new AliMUONLogger(10000)){
  /// ctor 
  
  if  ( !a || !b ) AliFatal("no longer supported");
  
  AliDebug(1,"");
  
  // Standard Constructor
  if (enableErrorLogger) 
  {
    fRawStreamTracker->EnabbleErrorLogger();
    fRawStreamTrigger->EnabbleErrorLogger();
  }
  else
  {
    fRawStreamTracker->DisableWarnings();
  }
  
  SetMakeTriggerDigits();
  SetMakeTrackerDigits();
  
  // Load mapping
  if ( ! AliMpCDB::LoadDDLStore() ) {
    AliFatal("Could not access mapping from OCDB !");
  }
}

//__________________________________________________________________________
AliMUONDigitMaker::AliMUONDigitMaker(Bool_t enableErrorLogger) :
TObject(),
    fScalerEvent(kFALSE),
    fMakeTriggerDigits(kFALSE),
    fMakeTrackerDigits(kFALSE),
    fRawStreamTracker(new AliMUONRawStreamTrackerHP),
    fRawStreamTrigger(new AliMUONRawStreamTriggerHP),
    fDigitStore(0x0),
    fTriggerStore(0x0),
  fLogger(new AliMUONLogger(10000))
{
  /// ctor 

  AliDebug(1,"");
  
  // Standard Constructor
  if (enableErrorLogger) 
  {
    fRawStreamTracker->EnabbleErrorLogger();
    fRawStreamTrigger->EnabbleErrorLogger();
  }
  else
  {
    fRawStreamTracker->DisableWarnings();
  }

  SetMakeTriggerDigits();
  SetMakeTrackerDigits();

  // Load mapping
  if ( ! AliMpCDB::LoadDDLStore() ) {
    AliFatal("Could not access mapping from OCDB !");
  }
}

//__________________________________________________________________________
AliMUONDigitMaker::~AliMUONDigitMaker()
{
  /// clean up
  /// and time processing measure

  delete fRawStreamTracker;
  delete fRawStreamTrigger;
  delete fLogger;
}

//____________________________________________________________________
void
AliMUONDigitMaker::Print(Option_t*) const
{
  /// Printout

  cout << "RawStreamerTracker class=" << fRawStreamTracker->ClassName()
       << " MakeTriggerDigits=" << fMakeTriggerDigits
       << " ScalerEvent=" << fScalerEvent
       << " DigitStore=" << fDigitStore
       << " TriggerStore=" << fTriggerStore << endl;

  if ( fLogger ) fLogger->Print();
}

//____________________________________________________________________
Int_t
AliMUONDigitMaker::Raw2Digits(AliRawReader* rawReader, 
                                        AliMUONVDigitStore* digitStore,
                                        AliMUONVTriggerStore* triggerStore)
{
  /// Main method to creates digit
  /// for tracker 
  /// and trigger

  AliDebug(1,Form("rawReader=%p digitStore=%p triggerStore=%p",
                  rawReader,digitStore,triggerStore));
  
  fDigitStore = digitStore;
  fTriggerStore = triggerStore;
  
  if (!fDigitStore && !fTriggerStore)
  {
    fLogger->Log("No digit or trigger store given. Nothing to do...");
    return kTriggerBAD & kTrackerBAD;
  }
  
  Int_t tracker(kOK);
  Int_t trigger(kOK);
  
  if ( fDigitStore ) fDigitStore->Clear(); // insure we start with an empty container

  if ( fMakeTrackerDigits ) {
    if ( fDigitStore ) tracker = ReadTrackerDDL(rawReader);
    else fLogger->Log("Asking for tracker digits but digitStore is null");
  }
  
  if ( fTriggerStore || fMakeTriggerDigits ) 
  {
    if ( fTriggerStore ) fTriggerStore->Clear();
    if ( fMakeTriggerDigits && !fDigitStore ) 
    {
      fLogger->Log("Asking for trigger digits but digitStore is null");
    }
    else
    {
      trigger = ReadTriggerDDL(rawReader);
    }
  }
  
  return tracker | trigger;
}

//____________________________________________________________________
Int_t
AliMUONDigitMaker::ReadTrackerDDL(AliRawReader* rawReader)
{
  /// Reading tracker DDL
  /// filling the fDigitStore container, which must not be null

  AliDebug(1,"");
  
  AliCodeTimerAuto("",0);

  // elex info
  Int_t    buspatchId;
  UChar_t  channelId;
  UShort_t manuId;
  UShort_t charge; 

  fRawStreamTracker->SetReader(rawReader);
  fRawStreamTracker->First();
  
  while ( fRawStreamTracker->Next(buspatchId,manuId,channelId,charge,kTRUE) )
  {    
    // getting DE from buspatch
    Int_t detElemId = AliMpDDLStore::Instance()->GetDEfromBus(buspatchId);

    AliMpDetElement* de = AliMpDDLStore::Instance()->GetDetElement(detElemId);

    if (!de)
      {
	fLogger->Log(Form("DE %04d does not exist !", detElemId));
	continue;
      }

    if (!de->IsConnectedChannel(manuId,channelId))
      {
	// non connected pad, do nothing (this is not an error !)
	continue;
      }

    const AliMpVSegmentation* seg 
      = AliMpSegmentation::Instance()->GetMpSegmentationByElectronics(detElemId, 
                                                                      manuId);  

    if (!seg)
    {
      fLogger->Log(Form("(DE,MANUID)=(%04d,%04d) is not valid",detElemId,manuId));
      continue;
    }
    
    AliMp::CathodType cathodeType = de->GetCathodType(seg->PlaneType());

    AliMpPad pad = seg->PadByLocation(manuId,channelId,kFALSE);

    if (!pad.IsValid())
    {
      fLogger->Log(Form("No pad for detElemId: %d, manuId: %d, channelId: %d",
                    detElemId, manuId, channelId));
      continue;
    } 

    AliMUONVDigit* digit = fDigitStore->Add(detElemId,manuId,channelId,cathodeType,
                                            AliMUONVDigitStore::kDeny);

    if (!digit)
    {
      fLogger->Log(Form("Digit DE %04d Manu %04d Channel %02d could not be added",
                    detElemId, manuId, channelId));
      continue;
    }
    
    digit->SetPadXY(pad.GetIx(),pad.GetIy());
    
    digit->SetADC(charge);

  }
  
  if ( fRawStreamTracker->IsErrorMessage() ) 
  {
    return kTrackerBAD;
  }
  
  return kOK;
}

//____________________________________________________________________
Int_t
AliMUONDigitMaker::ReadTriggerDDL(AliRawReader* rawReader)
{
  /// reading tracker DDL like ReadTriggerDDL but with fast decoder interface.
  /// filling the fTriggerStore container, which must not be null

  const AliMUONRawStreamTriggerHP::AliHeader*          darcHeader  = 0x0;
  const AliMUONRawStreamTriggerHP::AliRegionalHeader*  regHeader   = 0x0;
  const AliMUONRawStreamTriggerHP::AliLocalStruct*     localStruct = 0x0;

  Int_t loCircuit;

  fRawStreamTrigger->SetReader(rawReader);

  while (fRawStreamTrigger->NextDDL())
  {
    darcHeader = fRawStreamTrigger->GetHeaders();
    
    // fill global trigger information
    if (fTriggerStore) 
    {
      if (darcHeader->GetGlobalFlag()) 
      {
          AliMUONGlobalTrigger globalTrigger;
          globalTrigger.SetFromGlobalResponse(darcHeader->GetGlobalOutput());
          globalTrigger.SetFromGlobalInput(darcHeader->GetGlobalHeader()->fInput);
          fTriggerStore->SetGlobal(globalTrigger);
      }
    }
    
    Int_t nReg = fRawStreamTrigger->GetRegionalHeaderCount();
    
    for(Int_t iReg = 0; iReg < nReg ;iReg++)
    {   //reg loop
      

      // crate info  
      AliMpTriggerCrate* crate = AliMpDDLStore::Instance()->
                                GetTriggerCrate(fRawStreamTrigger->GetDDL(), iReg);
      
      if (!crate) {
        fLogger->Log(Form("Missing crate number %d in DDL %d\n", iReg, fRawStreamTrigger->GetDDL()));
        continue;
      }
      
      regHeader =  fRawStreamTrigger->GetRegionalHeader(iReg);
      
      Int_t nLocal = regHeader->GetLocalStructCount();
      for(Int_t iLocal = 0; iLocal < nLocal; iLocal++) 
      {
        
        localStruct = regHeader->GetLocalStruct(iLocal);
        
        // if card exist
        if (localStruct) {
          
          loCircuit = crate->GetLocalBoardId(localStruct->GetId());
          
          if ( !loCircuit ) continue; // empty slot
          
          
          if (fTriggerStore)
          {
            // fill local trigger
            AliMUONLocalTrigger localTrigger;
            localTrigger.SetLocalStruct(loCircuit, *localStruct);
            fTriggerStore->Add(localTrigger);
          }
          
          if ( fMakeTriggerDigits )
          {
            //FIXEME should find something better than a TArray
            TArrayS xyPattern[2];
            
            localStruct->GetXPattern(xyPattern[0]);
            localStruct->GetYPattern(xyPattern[1]);
            
            TriggerDigits(loCircuit, xyPattern, *fDigitStore);
          }
        } // if triggerY
      } // iLocal
    } // iReg
  } // NextDDL
  
  return kOK;
}

//____________________________________________________________________
Int_t AliMUONDigitMaker::TriggerDigits(Int_t nBoard, 
                                       const TArrayS* xyPattern,
                                       AliMUONVDigitStore& digitStore, Bool_t warn) const
{
  /// make digits for trigger from pattern, and add them to digitStore

  AliCodeTimerAuto("",0);
  
  Int_t detElemId;

  AliMpLocalBoard* localBoard = AliMpDDLStore::Instance()->GetLocalBoard(nBoard);
  
  if ( ! localBoard->IsNotified() ) {
    // Copy board
    // The mapping is not correct for copy boards
    // Use the one of corresponding phyiscal board
    nBoard = localBoard->GetInputXfrom();
  }

  Int_t n,b;

  // loop over x1-4 and y1-4
  for (Int_t iChamber = 0; iChamber < 4; ++iChamber)
  {
    for (Int_t iCath = 0; iCath < 2; ++iCath)
    {
      Int_t pattern = (Int_t)xyPattern[iCath].At(iChamber); 
      if (!pattern) continue;
      
      // get detElemId
      detElemId = AliMpDDLStore::Instance()->GetDEfromLocalBoard(nBoard, iChamber);
        
        const AliMpVSegmentation* seg 
          = AliMpSegmentation::Instance()
          ->GetMpSegmentation(detElemId, AliMp::GetCathodType(iCath));  
        
        // loop over the 16 bits of pattern
        for (Int_t ibitxy = 0; ibitxy < 16; ++ibitxy) 
        {
          if ((pattern >> ibitxy) & 0x1) 
          {            
            // not quite sure about this
            Int_t offset = 0;
            if (iCath && localBoard->GetSwitch(AliMpLocalBoard::kZeroAllYLSB)) offset = -8;
            
            AliMpPad pad = seg->PadByLocation(nBoard,ibitxy+offset,warn);
                        
            if (!pad.IsValid()) 
            {
              fLogger->Log(Form("No pad for detElemId: %d, nboard %d, ibitxy: %d\n",
                              detElemId, nBoard, ibitxy));
              continue;
            }

            n = pad.GetLocalBoardId(0); // always take first location so that digits are not inserted several times
	    b = pad.GetLocalBoardChannel(0);

	    AliDebug(1,Form("Using localBoard %d ixy %d instead of %d,%d",
			    n,b,nBoard,ibitxy));

	    AliMUONVDigit* digit = digitStore.Add(detElemId,n,b,iCath,AliMUONVDigitStore::kDeny);
            
            if (!digit)
            {
		AliDebug(1, Form("Digit DE %04d LocalBoard %03d ibitxy %02d cath %d already in store",
				 detElemId,nBoard,ibitxy,iCath));
		continue;
            }
            
            Int_t padX = pad.GetIx();
            Int_t padY = pad.GetIy();
            
            // fill digit
            digit->SetPadXY(padX,padY);
            digit->SetCharge(1.);
          }// xyPattern
        }// ibitxy
    }// cath
  } // ichamber
  
  return kTRUE;
}

//______________________________________________________________________________
Bool_t 
AliMUONDigitMaker::TriggerToDigitsStore(const AliMUONVTriggerStore& triggerStore,
					AliMUONVDigitStore& digitStore) const
{
  //
  /// make (S)Digit for trigger
  //
  
  digitStore.Clear();
  
  AliMUONLocalTrigger* locTrg;
  TIter next(triggerStore.CreateLocalIterator());
  
  while ( ( locTrg = static_cast<AliMUONLocalTrigger*>(next()) ) ) 
  {
    if (locTrg->IsNull()) continue;
   
    TArrayS xyPattern[2];
    locTrg->GetXPattern(xyPattern[0]);
    locTrg->GetYPattern(xyPattern[1]);

    Int_t nBoard = locTrg->LoCircuit();
    TriggerDigits(nBoard, xyPattern, digitStore);
  }
  return kTRUE;
}

//______________________________________________________________________________
void 
AliMUONDigitMaker::SetTryRecover(Bool_t flag) 
{
  /// Instruct the decoder to try to recover corrupted raw data.
  /// Only use for specific cases for which you know it will work...
  fRawStreamTracker->TryRecover(flag);
}
 AliMUONDigitMaker.cxx:1
 AliMUONDigitMaker.cxx:2
 AliMUONDigitMaker.cxx:3
 AliMUONDigitMaker.cxx:4
 AliMUONDigitMaker.cxx:5
 AliMUONDigitMaker.cxx:6
 AliMUONDigitMaker.cxx:7
 AliMUONDigitMaker.cxx:8
 AliMUONDigitMaker.cxx:9
 AliMUONDigitMaker.cxx:10
 AliMUONDigitMaker.cxx:11
 AliMUONDigitMaker.cxx:12
 AliMUONDigitMaker.cxx:13
 AliMUONDigitMaker.cxx:14
 AliMUONDigitMaker.cxx:15
 AliMUONDigitMaker.cxx:16
 AliMUONDigitMaker.cxx:17
 AliMUONDigitMaker.cxx:18
 AliMUONDigitMaker.cxx:19
 AliMUONDigitMaker.cxx:20
 AliMUONDigitMaker.cxx:21
 AliMUONDigitMaker.cxx:22
 AliMUONDigitMaker.cxx:23
 AliMUONDigitMaker.cxx:24
 AliMUONDigitMaker.cxx:25
 AliMUONDigitMaker.cxx:26
 AliMUONDigitMaker.cxx:27
 AliMUONDigitMaker.cxx:28
 AliMUONDigitMaker.cxx:29
 AliMUONDigitMaker.cxx:30
 AliMUONDigitMaker.cxx:31
 AliMUONDigitMaker.cxx:32
 AliMUONDigitMaker.cxx:33
 AliMUONDigitMaker.cxx:34
 AliMUONDigitMaker.cxx:35
 AliMUONDigitMaker.cxx:36
 AliMUONDigitMaker.cxx:37
 AliMUONDigitMaker.cxx:38
 AliMUONDigitMaker.cxx:39
 AliMUONDigitMaker.cxx:40
 AliMUONDigitMaker.cxx:41
 AliMUONDigitMaker.cxx:42
 AliMUONDigitMaker.cxx:43
 AliMUONDigitMaker.cxx:44
 AliMUONDigitMaker.cxx:45
 AliMUONDigitMaker.cxx:46
 AliMUONDigitMaker.cxx:47
 AliMUONDigitMaker.cxx:48
 AliMUONDigitMaker.cxx:49
 AliMUONDigitMaker.cxx:50
 AliMUONDigitMaker.cxx:51
 AliMUONDigitMaker.cxx:52
 AliMUONDigitMaker.cxx:53
 AliMUONDigitMaker.cxx:54
 AliMUONDigitMaker.cxx:55
 AliMUONDigitMaker.cxx:56
 AliMUONDigitMaker.cxx:57
 AliMUONDigitMaker.cxx:58
 AliMUONDigitMaker.cxx:59
 AliMUONDigitMaker.cxx:60
 AliMUONDigitMaker.cxx:61
 AliMUONDigitMaker.cxx:62
 AliMUONDigitMaker.cxx:63
 AliMUONDigitMaker.cxx:64
 AliMUONDigitMaker.cxx:65
 AliMUONDigitMaker.cxx:66
 AliMUONDigitMaker.cxx:67
 AliMUONDigitMaker.cxx:68
 AliMUONDigitMaker.cxx:69
 AliMUONDigitMaker.cxx:70
 AliMUONDigitMaker.cxx:71
 AliMUONDigitMaker.cxx:72
 AliMUONDigitMaker.cxx:73
 AliMUONDigitMaker.cxx:74
 AliMUONDigitMaker.cxx:75
 AliMUONDigitMaker.cxx:76
 AliMUONDigitMaker.cxx:77
 AliMUONDigitMaker.cxx:78
 AliMUONDigitMaker.cxx:79
 AliMUONDigitMaker.cxx:80
 AliMUONDigitMaker.cxx:81
 AliMUONDigitMaker.cxx:82
 AliMUONDigitMaker.cxx:83
 AliMUONDigitMaker.cxx:84
 AliMUONDigitMaker.cxx:85
 AliMUONDigitMaker.cxx:86
 AliMUONDigitMaker.cxx:87
 AliMUONDigitMaker.cxx:88
 AliMUONDigitMaker.cxx:89
 AliMUONDigitMaker.cxx:90
 AliMUONDigitMaker.cxx:91
 AliMUONDigitMaker.cxx:92
 AliMUONDigitMaker.cxx:93
 AliMUONDigitMaker.cxx:94
 AliMUONDigitMaker.cxx:95
 AliMUONDigitMaker.cxx:96
 AliMUONDigitMaker.cxx:97
 AliMUONDigitMaker.cxx:98
 AliMUONDigitMaker.cxx:99
 AliMUONDigitMaker.cxx:100
 AliMUONDigitMaker.cxx:101
 AliMUONDigitMaker.cxx:102
 AliMUONDigitMaker.cxx:103
 AliMUONDigitMaker.cxx:104
 AliMUONDigitMaker.cxx:105
 AliMUONDigitMaker.cxx:106
 AliMUONDigitMaker.cxx:107
 AliMUONDigitMaker.cxx:108
 AliMUONDigitMaker.cxx:109
 AliMUONDigitMaker.cxx:110
 AliMUONDigitMaker.cxx:111
 AliMUONDigitMaker.cxx:112
 AliMUONDigitMaker.cxx:113
 AliMUONDigitMaker.cxx:114
 AliMUONDigitMaker.cxx:115
 AliMUONDigitMaker.cxx:116
 AliMUONDigitMaker.cxx:117
 AliMUONDigitMaker.cxx:118
 AliMUONDigitMaker.cxx:119
 AliMUONDigitMaker.cxx:120
 AliMUONDigitMaker.cxx:121
 AliMUONDigitMaker.cxx:122
 AliMUONDigitMaker.cxx:123
 AliMUONDigitMaker.cxx:124
 AliMUONDigitMaker.cxx:125
 AliMUONDigitMaker.cxx:126
 AliMUONDigitMaker.cxx:127
 AliMUONDigitMaker.cxx:128
 AliMUONDigitMaker.cxx:129
 AliMUONDigitMaker.cxx:130
 AliMUONDigitMaker.cxx:131
 AliMUONDigitMaker.cxx:132
 AliMUONDigitMaker.cxx:133
 AliMUONDigitMaker.cxx:134
 AliMUONDigitMaker.cxx:135
 AliMUONDigitMaker.cxx:136
 AliMUONDigitMaker.cxx:137
 AliMUONDigitMaker.cxx:138
 AliMUONDigitMaker.cxx:139
 AliMUONDigitMaker.cxx:140
 AliMUONDigitMaker.cxx:141
 AliMUONDigitMaker.cxx:142
 AliMUONDigitMaker.cxx:143
 AliMUONDigitMaker.cxx:144
 AliMUONDigitMaker.cxx:145
 AliMUONDigitMaker.cxx:146
 AliMUONDigitMaker.cxx:147
 AliMUONDigitMaker.cxx:148
 AliMUONDigitMaker.cxx:149
 AliMUONDigitMaker.cxx:150
 AliMUONDigitMaker.cxx:151
 AliMUONDigitMaker.cxx:152
 AliMUONDigitMaker.cxx:153
 AliMUONDigitMaker.cxx:154
 AliMUONDigitMaker.cxx:155
 AliMUONDigitMaker.cxx:156
 AliMUONDigitMaker.cxx:157
 AliMUONDigitMaker.cxx:158
 AliMUONDigitMaker.cxx:159
 AliMUONDigitMaker.cxx:160
 AliMUONDigitMaker.cxx:161
 AliMUONDigitMaker.cxx:162
 AliMUONDigitMaker.cxx:163
 AliMUONDigitMaker.cxx:164
 AliMUONDigitMaker.cxx:165
 AliMUONDigitMaker.cxx:166
 AliMUONDigitMaker.cxx:167
 AliMUONDigitMaker.cxx:168
 AliMUONDigitMaker.cxx:169
 AliMUONDigitMaker.cxx:170
 AliMUONDigitMaker.cxx:171
 AliMUONDigitMaker.cxx:172
 AliMUONDigitMaker.cxx:173
 AliMUONDigitMaker.cxx:174
 AliMUONDigitMaker.cxx:175
 AliMUONDigitMaker.cxx:176
 AliMUONDigitMaker.cxx:177
 AliMUONDigitMaker.cxx:178
 AliMUONDigitMaker.cxx:179
 AliMUONDigitMaker.cxx:180
 AliMUONDigitMaker.cxx:181
 AliMUONDigitMaker.cxx:182
 AliMUONDigitMaker.cxx:183
 AliMUONDigitMaker.cxx:184
 AliMUONDigitMaker.cxx:185
 AliMUONDigitMaker.cxx:186
 AliMUONDigitMaker.cxx:187
 AliMUONDigitMaker.cxx:188
 AliMUONDigitMaker.cxx:189
 AliMUONDigitMaker.cxx:190
 AliMUONDigitMaker.cxx:191
 AliMUONDigitMaker.cxx:192
 AliMUONDigitMaker.cxx:193
 AliMUONDigitMaker.cxx:194
 AliMUONDigitMaker.cxx:195
 AliMUONDigitMaker.cxx:196
 AliMUONDigitMaker.cxx:197
 AliMUONDigitMaker.cxx:198
 AliMUONDigitMaker.cxx:199
 AliMUONDigitMaker.cxx:200
 AliMUONDigitMaker.cxx:201
 AliMUONDigitMaker.cxx:202
 AliMUONDigitMaker.cxx:203
 AliMUONDigitMaker.cxx:204
 AliMUONDigitMaker.cxx:205
 AliMUONDigitMaker.cxx:206
 AliMUONDigitMaker.cxx:207
 AliMUONDigitMaker.cxx:208
 AliMUONDigitMaker.cxx:209
 AliMUONDigitMaker.cxx:210
 AliMUONDigitMaker.cxx:211
 AliMUONDigitMaker.cxx:212
 AliMUONDigitMaker.cxx:213
 AliMUONDigitMaker.cxx:214
 AliMUONDigitMaker.cxx:215
 AliMUONDigitMaker.cxx:216
 AliMUONDigitMaker.cxx:217
 AliMUONDigitMaker.cxx:218
 AliMUONDigitMaker.cxx:219
 AliMUONDigitMaker.cxx:220
 AliMUONDigitMaker.cxx:221
 AliMUONDigitMaker.cxx:222
 AliMUONDigitMaker.cxx:223
 AliMUONDigitMaker.cxx:224
 AliMUONDigitMaker.cxx:225
 AliMUONDigitMaker.cxx:226
 AliMUONDigitMaker.cxx:227
 AliMUONDigitMaker.cxx:228
 AliMUONDigitMaker.cxx:229
 AliMUONDigitMaker.cxx:230
 AliMUONDigitMaker.cxx:231
 AliMUONDigitMaker.cxx:232
 AliMUONDigitMaker.cxx:233
 AliMUONDigitMaker.cxx:234
 AliMUONDigitMaker.cxx:235
 AliMUONDigitMaker.cxx:236
 AliMUONDigitMaker.cxx:237
 AliMUONDigitMaker.cxx:238
 AliMUONDigitMaker.cxx:239
 AliMUONDigitMaker.cxx:240
 AliMUONDigitMaker.cxx:241
 AliMUONDigitMaker.cxx:242
 AliMUONDigitMaker.cxx:243
 AliMUONDigitMaker.cxx:244
 AliMUONDigitMaker.cxx:245
 AliMUONDigitMaker.cxx:246
 AliMUONDigitMaker.cxx:247
 AliMUONDigitMaker.cxx:248
 AliMUONDigitMaker.cxx:249
 AliMUONDigitMaker.cxx:250
 AliMUONDigitMaker.cxx:251
 AliMUONDigitMaker.cxx:252
 AliMUONDigitMaker.cxx:253
 AliMUONDigitMaker.cxx:254
 AliMUONDigitMaker.cxx:255
 AliMUONDigitMaker.cxx:256
 AliMUONDigitMaker.cxx:257
 AliMUONDigitMaker.cxx:258
 AliMUONDigitMaker.cxx:259
 AliMUONDigitMaker.cxx:260
 AliMUONDigitMaker.cxx:261
 AliMUONDigitMaker.cxx:262
 AliMUONDigitMaker.cxx:263
 AliMUONDigitMaker.cxx:264
 AliMUONDigitMaker.cxx:265
 AliMUONDigitMaker.cxx:266
 AliMUONDigitMaker.cxx:267
 AliMUONDigitMaker.cxx:268
 AliMUONDigitMaker.cxx:269
 AliMUONDigitMaker.cxx:270
 AliMUONDigitMaker.cxx:271
 AliMUONDigitMaker.cxx:272
 AliMUONDigitMaker.cxx:273
 AliMUONDigitMaker.cxx:274
 AliMUONDigitMaker.cxx:275
 AliMUONDigitMaker.cxx:276
 AliMUONDigitMaker.cxx:277
 AliMUONDigitMaker.cxx:278
 AliMUONDigitMaker.cxx:279
 AliMUONDigitMaker.cxx:280
 AliMUONDigitMaker.cxx:281
 AliMUONDigitMaker.cxx:282
 AliMUONDigitMaker.cxx:283
 AliMUONDigitMaker.cxx:284
 AliMUONDigitMaker.cxx:285
 AliMUONDigitMaker.cxx:286
 AliMUONDigitMaker.cxx:287
 AliMUONDigitMaker.cxx:288
 AliMUONDigitMaker.cxx:289
 AliMUONDigitMaker.cxx:290
 AliMUONDigitMaker.cxx:291
 AliMUONDigitMaker.cxx:292
 AliMUONDigitMaker.cxx:293
 AliMUONDigitMaker.cxx:294
 AliMUONDigitMaker.cxx:295
 AliMUONDigitMaker.cxx:296
 AliMUONDigitMaker.cxx:297
 AliMUONDigitMaker.cxx:298
 AliMUONDigitMaker.cxx:299
 AliMUONDigitMaker.cxx:300
 AliMUONDigitMaker.cxx:301
 AliMUONDigitMaker.cxx:302
 AliMUONDigitMaker.cxx:303
 AliMUONDigitMaker.cxx:304
 AliMUONDigitMaker.cxx:305
 AliMUONDigitMaker.cxx:306
 AliMUONDigitMaker.cxx:307
 AliMUONDigitMaker.cxx:308
 AliMUONDigitMaker.cxx:309
 AliMUONDigitMaker.cxx:310
 AliMUONDigitMaker.cxx:311
 AliMUONDigitMaker.cxx:312
 AliMUONDigitMaker.cxx:313
 AliMUONDigitMaker.cxx:314
 AliMUONDigitMaker.cxx:315
 AliMUONDigitMaker.cxx:316
 AliMUONDigitMaker.cxx:317
 AliMUONDigitMaker.cxx:318
 AliMUONDigitMaker.cxx:319
 AliMUONDigitMaker.cxx:320
 AliMUONDigitMaker.cxx:321
 AliMUONDigitMaker.cxx:322
 AliMUONDigitMaker.cxx:323
 AliMUONDigitMaker.cxx:324
 AliMUONDigitMaker.cxx:325
 AliMUONDigitMaker.cxx:326
 AliMUONDigitMaker.cxx:327
 AliMUONDigitMaker.cxx:328
 AliMUONDigitMaker.cxx:329
 AliMUONDigitMaker.cxx:330
 AliMUONDigitMaker.cxx:331
 AliMUONDigitMaker.cxx:332
 AliMUONDigitMaker.cxx:333
 AliMUONDigitMaker.cxx:334
 AliMUONDigitMaker.cxx:335
 AliMUONDigitMaker.cxx:336
 AliMUONDigitMaker.cxx:337
 AliMUONDigitMaker.cxx:338
 AliMUONDigitMaker.cxx:339
 AliMUONDigitMaker.cxx:340
 AliMUONDigitMaker.cxx:341
 AliMUONDigitMaker.cxx:342
 AliMUONDigitMaker.cxx:343
 AliMUONDigitMaker.cxx:344
 AliMUONDigitMaker.cxx:345
 AliMUONDigitMaker.cxx:346
 AliMUONDigitMaker.cxx:347
 AliMUONDigitMaker.cxx:348
 AliMUONDigitMaker.cxx:349
 AliMUONDigitMaker.cxx:350
 AliMUONDigitMaker.cxx:351
 AliMUONDigitMaker.cxx:352
 AliMUONDigitMaker.cxx:353
 AliMUONDigitMaker.cxx:354
 AliMUONDigitMaker.cxx:355
 AliMUONDigitMaker.cxx:356
 AliMUONDigitMaker.cxx:357
 AliMUONDigitMaker.cxx:358
 AliMUONDigitMaker.cxx:359
 AliMUONDigitMaker.cxx:360
 AliMUONDigitMaker.cxx:361
 AliMUONDigitMaker.cxx:362
 AliMUONDigitMaker.cxx:363
 AliMUONDigitMaker.cxx:364
 AliMUONDigitMaker.cxx:365
 AliMUONDigitMaker.cxx:366
 AliMUONDigitMaker.cxx:367
 AliMUONDigitMaker.cxx:368
 AliMUONDigitMaker.cxx:369
 AliMUONDigitMaker.cxx:370
 AliMUONDigitMaker.cxx:371
 AliMUONDigitMaker.cxx:372
 AliMUONDigitMaker.cxx:373
 AliMUONDigitMaker.cxx:374
 AliMUONDigitMaker.cxx:375
 AliMUONDigitMaker.cxx:376
 AliMUONDigitMaker.cxx:377
 AliMUONDigitMaker.cxx:378
 AliMUONDigitMaker.cxx:379
 AliMUONDigitMaker.cxx:380
 AliMUONDigitMaker.cxx:381
 AliMUONDigitMaker.cxx:382
 AliMUONDigitMaker.cxx:383
 AliMUONDigitMaker.cxx:384
 AliMUONDigitMaker.cxx:385
 AliMUONDigitMaker.cxx:386
 AliMUONDigitMaker.cxx:387
 AliMUONDigitMaker.cxx:388
 AliMUONDigitMaker.cxx:389
 AliMUONDigitMaker.cxx:390
 AliMUONDigitMaker.cxx:391
 AliMUONDigitMaker.cxx:392
 AliMUONDigitMaker.cxx:393
 AliMUONDigitMaker.cxx:394
 AliMUONDigitMaker.cxx:395
 AliMUONDigitMaker.cxx:396
 AliMUONDigitMaker.cxx:397
 AliMUONDigitMaker.cxx:398
 AliMUONDigitMaker.cxx:399
 AliMUONDigitMaker.cxx:400
 AliMUONDigitMaker.cxx:401
 AliMUONDigitMaker.cxx:402
 AliMUONDigitMaker.cxx:403
 AliMUONDigitMaker.cxx:404
 AliMUONDigitMaker.cxx:405
 AliMUONDigitMaker.cxx:406
 AliMUONDigitMaker.cxx:407
 AliMUONDigitMaker.cxx:408
 AliMUONDigitMaker.cxx:409
 AliMUONDigitMaker.cxx:410
 AliMUONDigitMaker.cxx:411
 AliMUONDigitMaker.cxx:412
 AliMUONDigitMaker.cxx:413
 AliMUONDigitMaker.cxx:414
 AliMUONDigitMaker.cxx:415
 AliMUONDigitMaker.cxx:416
 AliMUONDigitMaker.cxx:417
 AliMUONDigitMaker.cxx:418
 AliMUONDigitMaker.cxx:419
 AliMUONDigitMaker.cxx:420
 AliMUONDigitMaker.cxx:421
 AliMUONDigitMaker.cxx:422
 AliMUONDigitMaker.cxx:423
 AliMUONDigitMaker.cxx:424
 AliMUONDigitMaker.cxx:425
 AliMUONDigitMaker.cxx:426
 AliMUONDigitMaker.cxx:427
 AliMUONDigitMaker.cxx:428
 AliMUONDigitMaker.cxx:429
 AliMUONDigitMaker.cxx:430
 AliMUONDigitMaker.cxx:431
 AliMUONDigitMaker.cxx:432
 AliMUONDigitMaker.cxx:433
 AliMUONDigitMaker.cxx:434
 AliMUONDigitMaker.cxx:435
 AliMUONDigitMaker.cxx:436
 AliMUONDigitMaker.cxx:437
 AliMUONDigitMaker.cxx:438
 AliMUONDigitMaker.cxx:439
 AliMUONDigitMaker.cxx:440
 AliMUONDigitMaker.cxx:441
 AliMUONDigitMaker.cxx:442
 AliMUONDigitMaker.cxx:443
 AliMUONDigitMaker.cxx:444
 AliMUONDigitMaker.cxx:445
 AliMUONDigitMaker.cxx:446
 AliMUONDigitMaker.cxx:447
 AliMUONDigitMaker.cxx:448
 AliMUONDigitMaker.cxx:449
 AliMUONDigitMaker.cxx:450
 AliMUONDigitMaker.cxx:451
 AliMUONDigitMaker.cxx:452
 AliMUONDigitMaker.cxx:453
 AliMUONDigitMaker.cxx:454
 AliMUONDigitMaker.cxx:455
 AliMUONDigitMaker.cxx:456
 AliMUONDigitMaker.cxx:457
 AliMUONDigitMaker.cxx:458
 AliMUONDigitMaker.cxx:459
 AliMUONDigitMaker.cxx:460
 AliMUONDigitMaker.cxx:461
 AliMUONDigitMaker.cxx:462
 AliMUONDigitMaker.cxx:463
 AliMUONDigitMaker.cxx:464
 AliMUONDigitMaker.cxx:465
 AliMUONDigitMaker.cxx:466
 AliMUONDigitMaker.cxx:467
 AliMUONDigitMaker.cxx:468
 AliMUONDigitMaker.cxx:469
 AliMUONDigitMaker.cxx:470
 AliMUONDigitMaker.cxx:471
 AliMUONDigitMaker.cxx:472
 AliMUONDigitMaker.cxx:473
 AliMUONDigitMaker.cxx:474
 AliMUONDigitMaker.cxx:475
 AliMUONDigitMaker.cxx:476
 AliMUONDigitMaker.cxx:477
 AliMUONDigitMaker.cxx:478
 AliMUONDigitMaker.cxx:479
 AliMUONDigitMaker.cxx:480
 AliMUONDigitMaker.cxx:481
 AliMUONDigitMaker.cxx:482
 AliMUONDigitMaker.cxx:483
 AliMUONDigitMaker.cxx:484
 AliMUONDigitMaker.cxx:485
 AliMUONDigitMaker.cxx:486
 AliMUONDigitMaker.cxx:487
 AliMUONDigitMaker.cxx:488
 AliMUONDigitMaker.cxx:489
 AliMUONDigitMaker.cxx:490
 AliMUONDigitMaker.cxx:491
 AliMUONDigitMaker.cxx:492
 AliMUONDigitMaker.cxx:493
 AliMUONDigitMaker.cxx:494
 AliMUONDigitMaker.cxx:495
 AliMUONDigitMaker.cxx:496
 AliMUONDigitMaker.cxx:497
 AliMUONDigitMaker.cxx:498
 AliMUONDigitMaker.cxx:499
 AliMUONDigitMaker.cxx:500
 AliMUONDigitMaker.cxx:501
 AliMUONDigitMaker.cxx:502
 AliMUONDigitMaker.cxx:503
 AliMUONDigitMaker.cxx:504
 AliMUONDigitMaker.cxx:505
 AliMUONDigitMaker.cxx:506
 AliMUONDigitMaker.cxx:507
 AliMUONDigitMaker.cxx:508
 AliMUONDigitMaker.cxx:509
 AliMUONDigitMaker.cxx:510
 AliMUONDigitMaker.cxx:511
 AliMUONDigitMaker.cxx:512
 AliMUONDigitMaker.cxx:513
 AliMUONDigitMaker.cxx:514
 AliMUONDigitMaker.cxx:515
 AliMUONDigitMaker.cxx:516
 AliMUONDigitMaker.cxx:517
 AliMUONDigitMaker.cxx:518