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$

#include "AliMUONTriggerIO.h"
#include "AliMUONTriggerLut.h"
#include "AliMUONCalibParamNI.h"
#include "AliMUONVStore.h"

#include "AliMpCDB.h"
#include "AliMpHelper.h"
#include "AliMpConstants.h"
#include "AliMpDDL.h"
#include "AliMpFiles.h"
#include "AliMpDDLStore.h"
#include "AliMpLocalBoard.h"
#include "AliMpTriggerCrate.h"
#include "AliMUONGlobalCrateConfig.h"
#include "AliMUONRegionalTriggerConfig.h"
#include "AliMUONTriggerCrateConfig.h"

#include "AliLog.h"

#include <Riostream.h>
#include <TSystem.h>

/// \class AliMUONTriggerIO
///
/// Handles read/write of masks and LUT to/from online files, 
/// to be used by Shuttle and Trigger DA.
/// 
/// \author Laurent Aphecetche, Christian Finck Subatech
/// \author Bogdan Vulpescu, LPC Clermont-Ferrand

using std::endl;
using std::cout;
using std::ofstream;
/// \cond CLASSIMP
ClassImp(AliMUONTriggerIO)
/// \endcond


const UInt_t AliMUONTriggerIO::fgkLocalLutSize = 1 << 14; // 16384

//_____________________________________________________________________________
AliMUONTriggerIO::AliMUONTriggerIO() 
    : TObject(), 
      fRegionalTrigger()
{
  /// ctor
}

//_____________________________________________________________________________
AliMUONTriggerIO::AliMUONTriggerIO(const char* regionalFileToRead) 
    :TObject(), 
     fRegionalTrigger()
{
  /// ctor
  ReadRegionalConfig(regionalFileToRead,0);
}

//_____________________________________________________________________________
AliMUONTriggerIO::~AliMUONTriggerIO()
{
  /// dtor
}

//_____________________________________________________________________________
Bool_t 
AliMUONTriggerIO::DeCompAddress(UChar_t &ypos, UChar_t &ytri, UChar_t &xdev, UChar_t &xpos, 
                                UShort_t address) const
{  
  /// decompose the 15-bits address
  
  UChar_t bitsYpos = 4;
  UChar_t bitsYtri = 1;
  UChar_t bitsXdev = 5;
  //  UChar_t bitsXpos = 5;
  
  UShort_t maskYpos = 0x000F; // ...0 00001111
  UShort_t maskYtri = 0x0001; // ...0 00000001
  UShort_t maskXdev = 0x001F; // ...0 00011111
  UShort_t maskXpos = 0x001F; // ...0 00011111
  
  ypos =  address                                  & maskYpos;
  ytri = (address >>  bitsYpos)                    & maskYtri;
  xdev = (address >> (bitsYpos+bitsYtri))          & maskXdev;
  xpos = (address >> (bitsYpos+bitsYtri+bitsXdev)) & maskXpos;

  // convert deviation format
  // online: sign 1bit , dev 4bit
  // sign    dev    trigger
  // 0       1-15   mu-
  // 1       1-15   mu+
  // 0       0      mu+, mu- infinite momentum (unde)
  // 1       0      no x-trigger
  // offline: dev 5bit
  // sign    dev    trigger
  // -        0-14  mu-
  // -       16-31  mu+
  // -       15     mu+, mu- infinite momentum (unde)

  Int_t iXdevOff, iXdevOn, iXdev, sign;
  Bool_t trigx;

  iXdev = xdev;

  iXdevOn = sign = 0;
  iXdevOn +=  iXdev & 0x0F;
  sign    += (iXdev >> 4) & 0x01;
  if (iXdevOn == 0) {
    if (sign == 0) {
      iXdevOff = 15;
      trigx = kTRUE;
    } else {
      iXdevOff = 15;
      trigx = kFALSE;
    }
  } else {
    trigx = kTRUE;
    if (sign == 0) {
      iXdevOff = - iXdevOn + 15;  // gives range  0-14
    } else {
      iXdevOff = + iXdevOn + 15;  // gives range 16-30 !
    }
  }

  xdev = iXdevOff;

  return trigx;

}

//_____________________________________________________________________________
void 
AliMUONTriggerIO::FillLut(AliMUONTriggerLut& lut,
                          Int_t icirc, UChar_t istripX, UChar_t idev,  
                          Int_t lutLpt[16][2], Int_t lutHpt[16][2]) 
{
  /// Fill the LUT histograms
  
  if (icirc == 0 && istripX == 0 && idev == 0) 
  {
    AliDebug(1,"Copy board, not filled ...");
    return;
  }
  
  Short_t iLptPlus, iLptMinu, iLptUnde;
  Short_t iHptPlus, iHptMinu, iHptUnde;

  iLptPlus = iLptMinu = iLptUnde = 0;
  iHptPlus = iHptMinu = iHptUnde = 0;
  
  for (Int_t istripY=0; istripY<16; istripY++) 
  {
    if (lutLpt[istripY][1] == 0 && lutLpt[istripY][0] ==1)
      iLptMinu=iLptMinu+(1 << istripY);
    if (lutLpt[istripY][1] == 1 && lutLpt[istripY][0] ==0)
      iLptPlus=iLptPlus+(1 << istripY);
    if (lutLpt[istripY][1] == 1 && lutLpt[istripY][0] ==1)
      iLptUnde=iLptUnde+(1 << istripY);
    
    if (lutHpt[istripY][1] == 0 && lutHpt[istripY][0] ==1)
      iHptMinu=iHptMinu+(1 << istripY);
    if (lutHpt[istripY][1] == 1 && lutHpt[istripY][0] ==0)
      iHptPlus=iHptPlus+(1 << istripY);
    if (lutHpt[istripY][1] == 1 && lutHpt[istripY][0] ==1)
      iHptUnde=iHptUnde+(1 << istripY);
    
  } // loop on istripY
  
  lut.SetContent("LptMinu",icirc,istripX,idev,iLptMinu);
  lut.SetContent("LptUnde",icirc,istripX,idev,iLptUnde);
  lut.SetContent("LptPlus",icirc,istripX,idev,iLptPlus);

  lut.SetContent("HptMinu",icirc,istripX,idev,iHptMinu);
  lut.SetContent("HptUnde",icirc,istripX,idev,iHptUnde);
  lut.SetContent("HptPlus",icirc,istripX,idev,iHptPlus);
}

//_____________________________________________________________________________
Int_t
AliMUONTriggerIO::ReadLocalMasks(const char* localFile, AliMUONVStore& localMasks) const
{
  /// Fills the local masks store from file
  
  if ( !NofLocalBoards() )
  {
    AliError("No local board to read");
    return 0;
  }
  
  FILE* fp = fopen(gSystem->ExpandPathName(localFile),"r");
  if (!fp)
  {
    AliError(Form("Could not read file %s",localFile));
    return 0;
  }
  
  UShort_t maskBuffer[8];
  
  Int_t localBoardIndex(0);
    
  while ( fread ( maskBuffer, 2, 8, fp ) )
  {
    Int_t localBoardId = fRegionalTrigger.LocalBoardId(localBoardIndex);
    AliDebug(1,Form("LB %03d X1 %4x X2 %4x X3 %4x X4 %4x "
                    "Y1 %4x Y2 %4x Y3 %4x Y4 %4x",
                    localBoardId,
                    maskBuffer[0],
                    maskBuffer[1],
                    maskBuffer[2],
                    maskBuffer[3],
                    maskBuffer[4],
                    maskBuffer[5],
                    maskBuffer[6],
                    maskBuffer[7]));
    
    if ( localBoardId > 0 ) 
    {
      AliMUONVCalibParam* localBoard = new AliMUONCalibParamNI(1,8,localBoardId,0,0);
      for ( Int_t index = 0; index < 8; ++index )
      {
        localBoard->SetValueAsInt(index,0,maskBuffer[index]);
      }
      localMasks.Add(localBoard);
    }
    else
    {
      AliError(Form("Oups. Got localBoardId=%d for index=%d",localBoardId,localBoardIndex));
    }
    
    ++localBoardIndex;
  }
  
  if ( localBoardIndex != NofLocalBoards() ) 
  {
    AliError(Form("Read %d out of %d local boards",
                  localBoardIndex, NofLocalBoards()));
  }
  
  fclose(fp);
  
  return localBoardIndex+1;
}

//_____________________________________________________________________________
void
AliMUONTriggerIO::ReadLocalLUT(AliMUONTriggerLut& lut,
                               Int_t localBoardId,
                               FILE* flut)
{
  /// Read the LUT for one local board from an online file

  UShort_t address;
  
  UChar_t buffer[fgkLocalLutSize];   // 32768 hpt/lpt addresses divided by two
  UChar_t mask1 = 0xF0;
  UChar_t mask2 = 0x0F;
  UChar_t maskHpt = 0x0C;
  UChar_t maskLpt = 0x03;
  UChar_t lh, lpt, hpt;
  
  UChar_t xpos, xdev, ypos, ytri;
  
  Int_t lutLpt[16][2], lutHpt[16][2];

  Int_t boardnr = localBoardId;
  
  AliDebug(1,Form("Reading LUT values for local board %d",boardnr));
  
  Int_t ny = 0;
  Bool_t trigx = kFALSE;
  
  // read two lut addresses at once, 32768/2=16384 times
  if (fread(buffer,fgkLocalLutSize,1,flut) == 0) {
    AliWarning("Error reading the LUT file");
    return;
  }

  // create the 32767 addresses for the 4-bits lpt and hpt half-bytes
  for (UShort_t ilut = 0; ilut < fgkLocalLutSize*2; ilut += 2) 
  {
    
    // 1st 4-bits half-byte
    address = ilut;   
    lh = (buffer[ilut/2] & mask1) >> 4;
    
    // Lpt and Hpt response
    hpt = (lh & maskHpt) >> 2;
    lpt =  lh & maskLpt;
    
    // decompose the 15-bits address
    trigx = DeCompAddress(ypos,ytri,xdev,xpos,address);
    
    // calculate group of y-strips
    if (trigx && (ny < 16)) 
    {
      lutLpt[ny][0] =  lpt & 1;
      lutLpt[ny][1] = (lpt & 2) >> 1;
      lutHpt[ny][0] =  hpt & 1;
      lutHpt[ny][1] = (hpt & 2) >> 1;
      ny++;
      if (ny == 16) 
      {
        ny = 0;
        // ytri == 1 means no trigger in y-direction
        if (ytri == 0) 
        {
          FillLut(lut,boardnr,xpos,xdev,lutLpt,lutHpt);
        }
      }
    }
    
    // 2nd 4-bits half-byte
    address = ilut+1; 
    lh = (buffer[ilut/2] & mask2);
    
    // Lpt and Hpt response
    hpt = (lh & maskHpt) >> 2;
    lpt =  lh & maskLpt;
    
    // decompose the 15-bits address
    trigx = DeCompAddress(ypos,ytri,xdev,xpos,address);
    
    // calculate group of y-strips
    if (trigx && (ny < 16)) 
    {
      lutLpt[ny][0] =  lpt & 1;
      lutLpt[ny][1] = (lpt & 2) >> 1;
      lutHpt[ny][0] =  hpt & 1;
      lutHpt[ny][1] = (hpt & 2) >> 1;
      ny++;
      if (ny == 16) 
      {
        ny = 0;
        // ytri == 1 means no trigger in y-direction
        if (ytri == 0) 
        {
          FillLut(lut,boardnr,xpos,xdev,lutLpt,lutHpt);
        }
      }
    }
  }
}

//_____________________________________________________________________________
Bool_t 
AliMUONTriggerIO::ReadLUT(const char* lutFileToRead, AliMUONTriggerLut& lut)
{
  /// Fill the LUT object from online file
  
  if ( !NofLocalBoards() )
  {
    AliError("No local board id defined. Must read a regional file first");
    return kFALSE;
  }
  
  FILE* flut = fopen(gSystem->ExpandPathName(lutFileToRead),"rb");
  if (!flut) 
  {
    AliError(Form("Could not read LUT file %s",lutFileToRead));
    return kFALSE;
  }   
  
  for ( Int_t i = 0; i < NofLocalBoards(); ++i ) 
  {
    ReadLocalLUT(lut,fRegionalTrigger.LocalBoardId(i),flut);
  }
  
  // 
  // 1st/2nd cut code   pt cut [GeV/c]
  //
  // 0                 0.5 (a.k.a. Apt)
  // 1                 1.0 (a.k.a. Lpt)
  // 2                 1.7 (a.k.a. Hpt)
  // 3                 4.2 (a.k.a. infinity)
  // 4                 free
  // .
  // .
  // .
  //15                 default (for backward compatibility)

  UChar_t lutCode = 0xFF;

  if (!fread(&lutCode,1,1,flut)) {
    AliWarning("No LUT info in the file (old version)");
  }
  AliInfo(Form("LUT code: 0x%02x",lutCode));

  fclose(flut);

  lut.SetLutCode(lutCode);

  return kTRUE;
  
}

//_____________________________________________________________________________
Bool_t 
AliMUONTriggerIO::ReadConfig(const char* localFile,
                             const char* regionalFile,
                             const char* globalFile,
                             AliMUONVStore* localMasks,
                             AliMUONRegionalTriggerConfig* regionalConfig,
                             AliMUONGlobalCrateConfig* globalConfig)
{
  /// Fill the various masks store from files
  
  if ( !regionalConfig || !regionalFile || strlen(regionalFile)==0 ) 
  {
    AliError("Must have a regional file name to proceeed");
    return kFALSE;
  }
  
  AliDebug(1,Form("regionalConfig=%p",regionalConfig));
  
  Int_t nCrates = ReadRegionalConfig(regionalFile, regionalConfig);

  if (!nCrates) 
  {
    AliError("nCrates=0 !");
    return kFALSE;
  }
  
  if (localMasks && localFile && strlen(localFile) > 0 )
  {
    Int_t nLocal = ReadLocalMasks(localFile,*localMasks);
    AliDebug(1,Form("Read masks for %d local boards",nLocal));
  }
  
  Int_t nDarc = ReadGlobalConfig(globalFile, globalConfig);
  AliDebug(1,Form("Read config for %d DARC boards",nDarc));
  
  if (!nDarc) return kFALSE;
  
  return kTRUE;
}



//_____________________________________________________________________________
 Int_t 
 AliMUONTriggerIO::ReadGlobalConfig(const char* globalFile, AliMUONGlobalCrateConfig* globalConfig) const
{
  /// read the global crate file
  /// the masks are disable bit for each crate, 8 per darc board
  /// bit value 0 means enable, 1 means disable                                                 * 
  
  Int_t nDarc = 0;
  if ( !(nDarc = globalConfig->ReadData(globalFile)) ) return 0;
  
  return nDarc;
}
 
//_____________________________________________________________________________
Int_t
AliMUONTriggerIO::ReadRegionalConfig(const char* regionalFile, AliMUONRegionalTriggerConfig* regionalConfig)
{
  /// Read regional file to fill  
  
  AliDebug(1,Form("regionalConfig=%p",regionalConfig));
  
  Int_t nCrates = 0;
  if ( !(nCrates = regionalConfig->ReadData(regionalFile)) ) return 0;

  // read the mapping file also
  if ( ! fRegionalTrigger.ReadData(regionalFile) ) return 0;

  return nCrates;  
}


//_____________________________________________________________________________
Bool_t 
AliMUONTriggerIO::WriteLUT(const AliMUONTriggerLut& lut,
                           const char* lutFileToWrite)
{
  /// Convert an offline lut into an online (binary) lut file
  
  if ( !NofLocalBoards() )
  {
    AliError("No local board id defined. Must read a regional file first");
    return kFALSE;
  }
  
  FILE* flut = fopen(gSystem->ExpandPathName(lutFileToWrite),"wb");
  if (!flut) 
  {
    AliError(Form("Could not create output LUT file %s",lutFileToWrite));
    return kFALSE;
  }   
  
  for ( Int_t i = 0; i < NofLocalBoards(); ++i ) 
  {
    WriteLocalLUT(lut,fRegionalTrigger.LocalBoardId(i),flut);
  }
  
  fclose(flut);
  
  return kTRUE;
}


//_____________________________________________________________________________
Bool_t 
AliMUONTriggerIO::WriteConfig(const char* localFile,
			     const char* regionalFile,
			     const char* globalFile,
			     const AliMUONVStore* localMasks,
                    AliMUONRegionalTriggerConfig* regionalConfig,
                    AliMUONGlobalCrateConfig* globalConfig) const
{
/// write config files

    Bool_t ok;
    ok  = WriteLocalMasks(localFile, *localMasks);
    ok &= WriteRegionalConfig(regionalFile, regionalConfig);
    ok &= WriteGlobalConfig(globalFile, globalConfig);
    
    return ok;


}

 
 //_____________________________________________________________________________
Bool_t 
AliMUONTriggerIO::WriteGlobalConfig(const char* globalFile, AliMUONGlobalCrateConfig* globalConfig) const
{
    /// write global config

  ofstream out;
  Int_t disable = 0;
  
  out.open(globalFile);
  if (!out.good())
  {
    AliError(Form("Could not create output global file %s", globalFile));
    return kFALSE;
  }
   
  out << globalConfig->GetName() << endl;
  out << Form("0x%x",globalConfig->GetGlobalCrateEnable()) << endl;
  
  // Jtag
  out << globalConfig->GetJtagName() << endl;
  out << Form("0x%08lx", globalConfig->GetJtagVmeAddr()) << endl;
  out << Form("%d %d %d", globalConfig->GetJtagClockDiv(), 
              globalConfig->GetJtagRxPhase(), globalConfig->GetJtagRdDelay()) << endl;
 
  for (Int_t i = 0; i < globalConfig->GetJtagNofLines(); ++i)
    out << Form("%d ", globalConfig->GetEnableJtag(i));
  out << endl;

  
  for (Int_t i = 0; i < globalConfig->GetJtagNofLines(); ++i)
  {
    out << i << endl;
    for (Int_t j = 0; j < globalConfig->GetJtagNofLines(); ++j)
      out << Form(" %s", globalConfig->GetJtagCrateName(i,j).Data()) << endl;
  }
  
  // first darc board
  out << globalConfig->GetFirstDarcName() << endl;
  out << Form("0x%08lx", globalConfig->GetFirstDarcVmeAddr()) << endl;
  out << globalConfig->GetFirstDarcType() << endl;
  disable = globalConfig->GetFirstDarcDisable();
  out << Form("0x%02x", disable) << endl;
  out << Form("0x%x", globalConfig->GetFirstDarcL0Delay()) << endl;
  out << Form("0x%x", globalConfig->GetFirstDarcL1TimeOut()) << endl;
  out << Form("0x%x", globalConfig->GetFirstDarcGlobalL0()) << endl;
  out << Form("0x%x", globalConfig->GetFirstDarcConfig()) << endl;
  
  // second darc board
  out << globalConfig->GetSecondDarcName() << endl;
  out << Form("0x%08lx", globalConfig->GetSecondDarcVmeAddr()) << endl;
  out << globalConfig->GetSecondDarcType() << endl;
  disable = globalConfig->GetSecondDarcDisable();
  out << Form("0x%02x", disable) << endl;
  out << Form("0x%x", globalConfig->GetSecondDarcL0Delay()) << endl;
  out << Form("0x%x", globalConfig->GetSecondDarcL1TimeOut()) << endl; 
  out << Form("0x%x", globalConfig->GetSecondDarcGlobalL0()) << endl; 
  out << Form("0x%x", globalConfig->GetSecondDarcConfig()) << endl; 
  
  // global board
  out << globalConfig->GetGlobalName() << endl;
  out << Form("0x%08lx", globalConfig->GetGlobalVmeAddr()) << endl;
  for (Int_t i = 0; i < globalConfig->GetGlobalNofRegisters(); ++i)
    out << Form("0x%x", globalConfig->GetGlobalRegister(i)) << endl;
  
  // Fet board
  out << globalConfig->GetFetName() << endl;
  out << Form("0x%08lx", globalConfig->GetFetVmeAddr()) << endl;
  for (Int_t i = 0; i < globalConfig->GetFetNofRegisters(); ++i)
    out << Form("0x%x", globalConfig->GetFetRegister(i)) << endl;
  
  return kTRUE;
}
 
//_____________________________________________________________________________
Bool_t
AliMUONTriggerIO::WriteRegionalConfig(const char* regionalFile, AliMUONRegionalTriggerConfig* regionalConfig) const
{

    /// write regional mask with the current configuration
   /// if regional masks not defined, take the one from current configuration

    ofstream out;
    out.open(regionalFile);
          
    if (!out.good())
    {
      AliError(Form("Could not create output regional file %s",regionalFile));
      return kFALSE;
    }

    Int_t nCrate = fRegionalTrigger.GetNofTriggerCrates();
    if (!nCrate)
    {
      AliError("Could not write regional no configuration in memory");
      return kFALSE;
    }

    Int_t nofDDLs = 0;
    TString name;
    AliMpTriggerCrate* crate;
    for (Int_t ddlId = 0; ddlId < 2; ddlId++) // right & left side            
      {
	for (Int_t crateId = 0; crateId < 8; crateId++) // 8 crates/regional boards for each side.
	  {
	    
	    name = AliMpTriggerCrate::GenerateName(crateId, ddlId, nofDDLs);
	    
	    crate = fRegionalTrigger.FindTriggerCrate(name, false);
	    
	    AliMUONTriggerCrateConfig* crateConfig = regionalConfig->FindTriggerCrate(crate->GetName());
	    if (!crateConfig) 
	      {
		AliError(Form("Cannot find crate %s in CDB", crate->GetName()));
		return kFALSE;
	      }
	    
	    out << crate->GetName()  << endl;
	    out << Form("%02x", crate->GetId())   << endl;
	    out << crateConfig->GetMode()  << endl;
	    out << crateConfig->GetCoinc() << endl;
	    out << Form("%04x", crateConfig->GetMask()) << endl;
	    out << Form("%02d",crate->GetNofLocalBoards()) << endl;
	    
	    for (Int_t iLocal = 0; iLocal < crate->GetNofLocalBoards(); ++iLocal) 
	      {
		Int_t localBoardId = crate->GetLocalBoardId(iLocal);
		
		AliMpLocalBoard* board = fRegionalTrigger.FindLocalBoard(localBoardId);
		
		out << Form("%02d ", board->GetSlot())  
		    << board->GetName() 
		    << Form(" %03d ", localBoardId) 
		    << Form("%03x", board->GetSwitch()) 
		    << endl;
		
		out << " ";
		
		if (board->IsNotified()) {
		  for (Int_t i = 0; i < board->GetNofDEs(); ++i)
		    out << Form("%4d ", board->GetDEId(i));
		} else {
		  out << Form("%4d ", 0);
		}
		out << endl;
		
		// print copy card numbers & TC
		out << Form(" %4d %4d", board->GetInputXfrom(), board->GetInputXto());
		out << Form(" %4d %4d", board->GetInputYfrom(), board->GetInputYto());
		out << Form(" %4d",     board->GetTC()) << endl;
	      }
	  }
      }

    out.close();
    
    return kTRUE;
}


//_____________________________________________________________________________
Bool_t 
AliMUONTriggerIO::WriteLocalMasks(const char* localFile, const AliMUONVStore& localMasks) const
{
    /// write local mask
    /// removing/adding enable for a local board need a update of the configuration 
    /// before calling this method
    /// mask are written for all boards including the copy card (Ch.F.)

    FILE* fp = fopen(gSystem->ExpandPathName(localFile),"wb");
    if (!fp) 
    {
      AliError(Form("Could not create output local file %s",localFile));
      return kFALSE;
    }   

    UShort_t maskBuffer[8];
    Int_t localBoardIndex(0);
    while (localBoardIndex < NofLocalBoards()) {

      Int_t localBoardId = fRegionalTrigger.LocalBoardId(localBoardIndex);

      AliMUONVCalibParam* localMask = 
	static_cast<AliMUONVCalibParam*>(localMasks.FindObject(localBoardId));

      for (Int_t index = 0; index < 8; ++index) 
	{
	  maskBuffer[index] = localMask->ValueAsInt(index,0); 
	}
      
      fwrite ( maskBuffer, 2, 8, fp); 

      ++localBoardIndex;

    }

    fclose(fp);

    return kTRUE;

}

//_____________________________________________________________________________
void
AliMUONTriggerIO::WriteLocalLUT(const AliMUONTriggerLut& lut,
                                Int_t localBoardId,
                                FILE* flut)
{
  /// loop over the address for the 4-bits lpt and hpt decisions

  const Int_t kMaskYpos = 0x0F;
  const Int_t kMaskYtri = 0x01;
  const Int_t kMaskXdev = 0x1F;
  const Int_t kMaskXpos = 0x1F;

  UChar_t buffer[fgkLocalLutSize];  // 32768 hpt/lpt addresses divided by two
  Int_t bc = 0;
  
  for (UInt_t i = 0; i < fgkLocalLutSize*2; ++i) 
  {
    Int_t lutLpt[2] = { 0 };
    Int_t lutHpt[2] = { 0 };
    
    // decompose address
    Int_t iYpos =   i                    & kMaskYpos;	
    Int_t iYtri = ( i >>   4           ) & kMaskYtri;
    Int_t iXdev = ( i >> ( 4 + 1 )     ) & kMaskXdev;
    Int_t iXpos = ( i >> ( 4 + 1 + 5 ) ) & kMaskXpos;
    
    // convert deviation format
    // online: sign 1bit , dev 4bit
    // sign    dev    trigger
    // 0       1-15   mu-
    // 1       1-15   mu+
    // 0       0      mu+, mu- infinite momentum (unde)
    // 1       0      no x-trigger
    // offline: dev 5bit
    // sign    dev    trigger
    // -        0-14  mu-
    // -       16-31  mu+
    // -       15     mu+, mu- infinite momentum (unde)
    Int_t iXdevOn  = 0;
    Int_t iXdevOff = 0;
    Int_t sign     = 0;
    Bool_t trigx = kFALSE;
    iXdevOn +=  iXdev & 0x0F;
    sign    += (iXdev >> 4) & 0x01;
    if (iXdevOn == 0) {
      if (sign == 0) {
	iXdevOff = 15;
	trigx = kTRUE;
      } else {
	iXdevOff = 15;
	trigx = kFALSE;
      }
    } else {
      trigx = kTRUE;
      if (sign == 0) {
	iXdevOff = - iXdevOn + 15;  // gives range  0-14
      } else {
	iXdevOff = + iXdevOn + 15;  // gives range 16-30 !
      }
    }
    iXdev = iXdevOff;

    // iYtri == 1 means no trigger in y-direction
    if (iYtri == 0 && trigx) 
    {
      lut.GetLutOutput(localBoardId,iXpos,iXdev,iYpos,lutLpt,lutHpt);
    }
    
    // fill byte
    if (i%2 == 0) 
    {
      // upper half-byte
      buffer[bc] = 0;	    
      buffer[bc] += lutHpt[1] << 7;
      buffer[bc] += lutHpt[0] << 6;
      buffer[bc] += lutLpt[1] << 5;
      buffer[bc] += lutLpt[0] << 4;
    } else {
      // lower half-byte
      buffer[bc] += lutHpt[1] << 3;
      buffer[bc] += lutHpt[0] << 2;
      buffer[bc] += lutLpt[1] << 1;
      buffer[bc] += lutLpt[0] << 0;
      bc++;
    }
  }
  fwrite(&buffer,bc,1,flut);
}  

//_____________________________________________________________________________
Int_t 
AliMUONTriggerIO::LocalBoardId(Int_t index) const
{  
  /// Return the i-th localBoardId, or -1 if index is out of bounds

  return fRegionalTrigger.LocalBoardId(index);
}


//______________________________________________________________________________

Int_t AliMUONTriggerIO::LocalBoardId(Int_t ddlId, Int_t crateId, Int_t localId) const
{
    /// Return local board id from crate and local indexes.
    
    Int_t nofDDLs = 0;
    TString name = AliMpTriggerCrate::GenerateName(crateId, ddlId, nofDDLs);

    AliMpTriggerCrate* crate = fRegionalTrigger.FindTriggerCrate(name, false);
    return crate->GetLocalBoardId(localId);
}
 AliMUONTriggerIO.cxx:1
 AliMUONTriggerIO.cxx:2
 AliMUONTriggerIO.cxx:3
 AliMUONTriggerIO.cxx:4
 AliMUONTriggerIO.cxx:5
 AliMUONTriggerIO.cxx:6
 AliMUONTriggerIO.cxx:7
 AliMUONTriggerIO.cxx:8
 AliMUONTriggerIO.cxx:9
 AliMUONTriggerIO.cxx:10
 AliMUONTriggerIO.cxx:11
 AliMUONTriggerIO.cxx:12
 AliMUONTriggerIO.cxx:13
 AliMUONTriggerIO.cxx:14
 AliMUONTriggerIO.cxx:15
 AliMUONTriggerIO.cxx:16
 AliMUONTriggerIO.cxx:17
 AliMUONTriggerIO.cxx:18
 AliMUONTriggerIO.cxx:19
 AliMUONTriggerIO.cxx:20
 AliMUONTriggerIO.cxx:21
 AliMUONTriggerIO.cxx:22
 AliMUONTriggerIO.cxx:23
 AliMUONTriggerIO.cxx:24
 AliMUONTriggerIO.cxx:25
 AliMUONTriggerIO.cxx:26
 AliMUONTriggerIO.cxx:27
 AliMUONTriggerIO.cxx:28
 AliMUONTriggerIO.cxx:29
 AliMUONTriggerIO.cxx:30
 AliMUONTriggerIO.cxx:31
 AliMUONTriggerIO.cxx:32
 AliMUONTriggerIO.cxx:33
 AliMUONTriggerIO.cxx:34
 AliMUONTriggerIO.cxx:35
 AliMUONTriggerIO.cxx:36
 AliMUONTriggerIO.cxx:37
 AliMUONTriggerIO.cxx:38
 AliMUONTriggerIO.cxx:39
 AliMUONTriggerIO.cxx:40
 AliMUONTriggerIO.cxx:41
 AliMUONTriggerIO.cxx:42
 AliMUONTriggerIO.cxx:43
 AliMUONTriggerIO.cxx:44
 AliMUONTriggerIO.cxx:45
 AliMUONTriggerIO.cxx:46
 AliMUONTriggerIO.cxx:47
 AliMUONTriggerIO.cxx:48
 AliMUONTriggerIO.cxx:49
 AliMUONTriggerIO.cxx:50
 AliMUONTriggerIO.cxx:51
 AliMUONTriggerIO.cxx:52
 AliMUONTriggerIO.cxx:53
 AliMUONTriggerIO.cxx:54
 AliMUONTriggerIO.cxx:55
 AliMUONTriggerIO.cxx:56
 AliMUONTriggerIO.cxx:57
 AliMUONTriggerIO.cxx:58
 AliMUONTriggerIO.cxx:59
 AliMUONTriggerIO.cxx:60
 AliMUONTriggerIO.cxx:61
 AliMUONTriggerIO.cxx:62
 AliMUONTriggerIO.cxx:63
 AliMUONTriggerIO.cxx:64
 AliMUONTriggerIO.cxx:65
 AliMUONTriggerIO.cxx:66
 AliMUONTriggerIO.cxx:67
 AliMUONTriggerIO.cxx:68
 AliMUONTriggerIO.cxx:69
 AliMUONTriggerIO.cxx:70
 AliMUONTriggerIO.cxx:71
 AliMUONTriggerIO.cxx:72
 AliMUONTriggerIO.cxx:73
 AliMUONTriggerIO.cxx:74
 AliMUONTriggerIO.cxx:75
 AliMUONTriggerIO.cxx:76
 AliMUONTriggerIO.cxx:77
 AliMUONTriggerIO.cxx:78
 AliMUONTriggerIO.cxx:79
 AliMUONTriggerIO.cxx:80
 AliMUONTriggerIO.cxx:81
 AliMUONTriggerIO.cxx:82
 AliMUONTriggerIO.cxx:83
 AliMUONTriggerIO.cxx:84
 AliMUONTriggerIO.cxx:85
 AliMUONTriggerIO.cxx:86
 AliMUONTriggerIO.cxx:87
 AliMUONTriggerIO.cxx:88
 AliMUONTriggerIO.cxx:89
 AliMUONTriggerIO.cxx:90
 AliMUONTriggerIO.cxx:91
 AliMUONTriggerIO.cxx:92
 AliMUONTriggerIO.cxx:93
 AliMUONTriggerIO.cxx:94
 AliMUONTriggerIO.cxx:95
 AliMUONTriggerIO.cxx:96
 AliMUONTriggerIO.cxx:97
 AliMUONTriggerIO.cxx:98
 AliMUONTriggerIO.cxx:99
 AliMUONTriggerIO.cxx:100
 AliMUONTriggerIO.cxx:101
 AliMUONTriggerIO.cxx:102
 AliMUONTriggerIO.cxx:103
 AliMUONTriggerIO.cxx:104
 AliMUONTriggerIO.cxx:105
 AliMUONTriggerIO.cxx:106
 AliMUONTriggerIO.cxx:107
 AliMUONTriggerIO.cxx:108
 AliMUONTriggerIO.cxx:109
 AliMUONTriggerIO.cxx:110
 AliMUONTriggerIO.cxx:111
 AliMUONTriggerIO.cxx:112
 AliMUONTriggerIO.cxx:113
 AliMUONTriggerIO.cxx:114
 AliMUONTriggerIO.cxx:115
 AliMUONTriggerIO.cxx:116
 AliMUONTriggerIO.cxx:117
 AliMUONTriggerIO.cxx:118
 AliMUONTriggerIO.cxx:119
 AliMUONTriggerIO.cxx:120
 AliMUONTriggerIO.cxx:121
 AliMUONTriggerIO.cxx:122
 AliMUONTriggerIO.cxx:123
 AliMUONTriggerIO.cxx:124
 AliMUONTriggerIO.cxx:125
 AliMUONTriggerIO.cxx:126
 AliMUONTriggerIO.cxx:127
 AliMUONTriggerIO.cxx:128
 AliMUONTriggerIO.cxx:129
 AliMUONTriggerIO.cxx:130
 AliMUONTriggerIO.cxx:131
 AliMUONTriggerIO.cxx:132
 AliMUONTriggerIO.cxx:133
 AliMUONTriggerIO.cxx:134
 AliMUONTriggerIO.cxx:135
 AliMUONTriggerIO.cxx:136
 AliMUONTriggerIO.cxx:137
 AliMUONTriggerIO.cxx:138
 AliMUONTriggerIO.cxx:139
 AliMUONTriggerIO.cxx:140
 AliMUONTriggerIO.cxx:141
 AliMUONTriggerIO.cxx:142
 AliMUONTriggerIO.cxx:143
 AliMUONTriggerIO.cxx:144
 AliMUONTriggerIO.cxx:145
 AliMUONTriggerIO.cxx:146
 AliMUONTriggerIO.cxx:147
 AliMUONTriggerIO.cxx:148
 AliMUONTriggerIO.cxx:149
 AliMUONTriggerIO.cxx:150
 AliMUONTriggerIO.cxx:151
 AliMUONTriggerIO.cxx:152
 AliMUONTriggerIO.cxx:153
 AliMUONTriggerIO.cxx:154
 AliMUONTriggerIO.cxx:155
 AliMUONTriggerIO.cxx:156
 AliMUONTriggerIO.cxx:157
 AliMUONTriggerIO.cxx:158
 AliMUONTriggerIO.cxx:159
 AliMUONTriggerIO.cxx:160
 AliMUONTriggerIO.cxx:161
 AliMUONTriggerIO.cxx:162
 AliMUONTriggerIO.cxx:163
 AliMUONTriggerIO.cxx:164
 AliMUONTriggerIO.cxx:165
 AliMUONTriggerIO.cxx:166
 AliMUONTriggerIO.cxx:167
 AliMUONTriggerIO.cxx:168
 AliMUONTriggerIO.cxx:169
 AliMUONTriggerIO.cxx:170
 AliMUONTriggerIO.cxx:171
 AliMUONTriggerIO.cxx:172
 AliMUONTriggerIO.cxx:173
 AliMUONTriggerIO.cxx:174
 AliMUONTriggerIO.cxx:175
 AliMUONTriggerIO.cxx:176
 AliMUONTriggerIO.cxx:177
 AliMUONTriggerIO.cxx:178
 AliMUONTriggerIO.cxx:179
 AliMUONTriggerIO.cxx:180
 AliMUONTriggerIO.cxx:181
 AliMUONTriggerIO.cxx:182
 AliMUONTriggerIO.cxx:183
 AliMUONTriggerIO.cxx:184
 AliMUONTriggerIO.cxx:185
 AliMUONTriggerIO.cxx:186
 AliMUONTriggerIO.cxx:187
 AliMUONTriggerIO.cxx:188
 AliMUONTriggerIO.cxx:189
 AliMUONTriggerIO.cxx:190
 AliMUONTriggerIO.cxx:191
 AliMUONTriggerIO.cxx:192
 AliMUONTriggerIO.cxx:193
 AliMUONTriggerIO.cxx:194
 AliMUONTriggerIO.cxx:195
 AliMUONTriggerIO.cxx:196
 AliMUONTriggerIO.cxx:197
 AliMUONTriggerIO.cxx:198
 AliMUONTriggerIO.cxx:199
 AliMUONTriggerIO.cxx:200
 AliMUONTriggerIO.cxx:201
 AliMUONTriggerIO.cxx:202
 AliMUONTriggerIO.cxx:203
 AliMUONTriggerIO.cxx:204
 AliMUONTriggerIO.cxx:205
 AliMUONTriggerIO.cxx:206
 AliMUONTriggerIO.cxx:207
 AliMUONTriggerIO.cxx:208
 AliMUONTriggerIO.cxx:209
 AliMUONTriggerIO.cxx:210
 AliMUONTriggerIO.cxx:211
 AliMUONTriggerIO.cxx:212
 AliMUONTriggerIO.cxx:213
 AliMUONTriggerIO.cxx:214
 AliMUONTriggerIO.cxx:215
 AliMUONTriggerIO.cxx:216
 AliMUONTriggerIO.cxx:217
 AliMUONTriggerIO.cxx:218
 AliMUONTriggerIO.cxx:219
 AliMUONTriggerIO.cxx:220
 AliMUONTriggerIO.cxx:221
 AliMUONTriggerIO.cxx:222
 AliMUONTriggerIO.cxx:223
 AliMUONTriggerIO.cxx:224
 AliMUONTriggerIO.cxx:225
 AliMUONTriggerIO.cxx:226
 AliMUONTriggerIO.cxx:227
 AliMUONTriggerIO.cxx:228
 AliMUONTriggerIO.cxx:229
 AliMUONTriggerIO.cxx:230
 AliMUONTriggerIO.cxx:231
 AliMUONTriggerIO.cxx:232
 AliMUONTriggerIO.cxx:233
 AliMUONTriggerIO.cxx:234
 AliMUONTriggerIO.cxx:235
 AliMUONTriggerIO.cxx:236
 AliMUONTriggerIO.cxx:237
 AliMUONTriggerIO.cxx:238
 AliMUONTriggerIO.cxx:239
 AliMUONTriggerIO.cxx:240
 AliMUONTriggerIO.cxx:241
 AliMUONTriggerIO.cxx:242
 AliMUONTriggerIO.cxx:243
 AliMUONTriggerIO.cxx:244
 AliMUONTriggerIO.cxx:245
 AliMUONTriggerIO.cxx:246
 AliMUONTriggerIO.cxx:247
 AliMUONTriggerIO.cxx:248
 AliMUONTriggerIO.cxx:249
 AliMUONTriggerIO.cxx:250
 AliMUONTriggerIO.cxx:251
 AliMUONTriggerIO.cxx:252
 AliMUONTriggerIO.cxx:253
 AliMUONTriggerIO.cxx:254
 AliMUONTriggerIO.cxx:255
 AliMUONTriggerIO.cxx:256
 AliMUONTriggerIO.cxx:257
 AliMUONTriggerIO.cxx:258
 AliMUONTriggerIO.cxx:259
 AliMUONTriggerIO.cxx:260
 AliMUONTriggerIO.cxx:261
 AliMUONTriggerIO.cxx:262
 AliMUONTriggerIO.cxx:263
 AliMUONTriggerIO.cxx:264
 AliMUONTriggerIO.cxx:265
 AliMUONTriggerIO.cxx:266
 AliMUONTriggerIO.cxx:267
 AliMUONTriggerIO.cxx:268
 AliMUONTriggerIO.cxx:269
 AliMUONTriggerIO.cxx:270
 AliMUONTriggerIO.cxx:271
 AliMUONTriggerIO.cxx:272
 AliMUONTriggerIO.cxx:273
 AliMUONTriggerIO.cxx:274
 AliMUONTriggerIO.cxx:275
 AliMUONTriggerIO.cxx:276
 AliMUONTriggerIO.cxx:277
 AliMUONTriggerIO.cxx:278
 AliMUONTriggerIO.cxx:279
 AliMUONTriggerIO.cxx:280
 AliMUONTriggerIO.cxx:281
 AliMUONTriggerIO.cxx:282
 AliMUONTriggerIO.cxx:283
 AliMUONTriggerIO.cxx:284
 AliMUONTriggerIO.cxx:285
 AliMUONTriggerIO.cxx:286
 AliMUONTriggerIO.cxx:287
 AliMUONTriggerIO.cxx:288
 AliMUONTriggerIO.cxx:289
 AliMUONTriggerIO.cxx:290
 AliMUONTriggerIO.cxx:291
 AliMUONTriggerIO.cxx:292
 AliMUONTriggerIO.cxx:293
 AliMUONTriggerIO.cxx:294
 AliMUONTriggerIO.cxx:295
 AliMUONTriggerIO.cxx:296
 AliMUONTriggerIO.cxx:297
 AliMUONTriggerIO.cxx:298
 AliMUONTriggerIO.cxx:299
 AliMUONTriggerIO.cxx:300
 AliMUONTriggerIO.cxx:301
 AliMUONTriggerIO.cxx:302
 AliMUONTriggerIO.cxx:303
 AliMUONTriggerIO.cxx:304
 AliMUONTriggerIO.cxx:305
 AliMUONTriggerIO.cxx:306
 AliMUONTriggerIO.cxx:307
 AliMUONTriggerIO.cxx:308
 AliMUONTriggerIO.cxx:309
 AliMUONTriggerIO.cxx:310
 AliMUONTriggerIO.cxx:311
 AliMUONTriggerIO.cxx:312
 AliMUONTriggerIO.cxx:313
 AliMUONTriggerIO.cxx:314
 AliMUONTriggerIO.cxx:315
 AliMUONTriggerIO.cxx:316
 AliMUONTriggerIO.cxx:317
 AliMUONTriggerIO.cxx:318
 AliMUONTriggerIO.cxx:319
 AliMUONTriggerIO.cxx:320
 AliMUONTriggerIO.cxx:321
 AliMUONTriggerIO.cxx:322
 AliMUONTriggerIO.cxx:323
 AliMUONTriggerIO.cxx:324
 AliMUONTriggerIO.cxx:325
 AliMUONTriggerIO.cxx:326
 AliMUONTriggerIO.cxx:327
 AliMUONTriggerIO.cxx:328
 AliMUONTriggerIO.cxx:329
 AliMUONTriggerIO.cxx:330
 AliMUONTriggerIO.cxx:331
 AliMUONTriggerIO.cxx:332
 AliMUONTriggerIO.cxx:333
 AliMUONTriggerIO.cxx:334
 AliMUONTriggerIO.cxx:335
 AliMUONTriggerIO.cxx:336
 AliMUONTriggerIO.cxx:337
 AliMUONTriggerIO.cxx:338
 AliMUONTriggerIO.cxx:339
 AliMUONTriggerIO.cxx:340
 AliMUONTriggerIO.cxx:341
 AliMUONTriggerIO.cxx:342
 AliMUONTriggerIO.cxx:343
 AliMUONTriggerIO.cxx:344
 AliMUONTriggerIO.cxx:345
 AliMUONTriggerIO.cxx:346
 AliMUONTriggerIO.cxx:347
 AliMUONTriggerIO.cxx:348
 AliMUONTriggerIO.cxx:349
 AliMUONTriggerIO.cxx:350
 AliMUONTriggerIO.cxx:351
 AliMUONTriggerIO.cxx:352
 AliMUONTriggerIO.cxx:353
 AliMUONTriggerIO.cxx:354
 AliMUONTriggerIO.cxx:355
 AliMUONTriggerIO.cxx:356
 AliMUONTriggerIO.cxx:357
 AliMUONTriggerIO.cxx:358
 AliMUONTriggerIO.cxx:359
 AliMUONTriggerIO.cxx:360
 AliMUONTriggerIO.cxx:361
 AliMUONTriggerIO.cxx:362
 AliMUONTriggerIO.cxx:363
 AliMUONTriggerIO.cxx:364
 AliMUONTriggerIO.cxx:365
 AliMUONTriggerIO.cxx:366
 AliMUONTriggerIO.cxx:367
 AliMUONTriggerIO.cxx:368
 AliMUONTriggerIO.cxx:369
 AliMUONTriggerIO.cxx:370
 AliMUONTriggerIO.cxx:371
 AliMUONTriggerIO.cxx:372
 AliMUONTriggerIO.cxx:373
 AliMUONTriggerIO.cxx:374
 AliMUONTriggerIO.cxx:375
 AliMUONTriggerIO.cxx:376
 AliMUONTriggerIO.cxx:377
 AliMUONTriggerIO.cxx:378
 AliMUONTriggerIO.cxx:379
 AliMUONTriggerIO.cxx:380
 AliMUONTriggerIO.cxx:381
 AliMUONTriggerIO.cxx:382
 AliMUONTriggerIO.cxx:383
 AliMUONTriggerIO.cxx:384
 AliMUONTriggerIO.cxx:385
 AliMUONTriggerIO.cxx:386
 AliMUONTriggerIO.cxx:387
 AliMUONTriggerIO.cxx:388
 AliMUONTriggerIO.cxx:389
 AliMUONTriggerIO.cxx:390
 AliMUONTriggerIO.cxx:391
 AliMUONTriggerIO.cxx:392
 AliMUONTriggerIO.cxx:393
 AliMUONTriggerIO.cxx:394
 AliMUONTriggerIO.cxx:395
 AliMUONTriggerIO.cxx:396
 AliMUONTriggerIO.cxx:397
 AliMUONTriggerIO.cxx:398
 AliMUONTriggerIO.cxx:399
 AliMUONTriggerIO.cxx:400
 AliMUONTriggerIO.cxx:401
 AliMUONTriggerIO.cxx:402
 AliMUONTriggerIO.cxx:403
 AliMUONTriggerIO.cxx:404
 AliMUONTriggerIO.cxx:405
 AliMUONTriggerIO.cxx:406
 AliMUONTriggerIO.cxx:407
 AliMUONTriggerIO.cxx:408
 AliMUONTriggerIO.cxx:409
 AliMUONTriggerIO.cxx:410
 AliMUONTriggerIO.cxx:411
 AliMUONTriggerIO.cxx:412
 AliMUONTriggerIO.cxx:413
 AliMUONTriggerIO.cxx:414
 AliMUONTriggerIO.cxx:415
 AliMUONTriggerIO.cxx:416
 AliMUONTriggerIO.cxx:417
 AliMUONTriggerIO.cxx:418
 AliMUONTriggerIO.cxx:419
 AliMUONTriggerIO.cxx:420
 AliMUONTriggerIO.cxx:421
 AliMUONTriggerIO.cxx:422
 AliMUONTriggerIO.cxx:423
 AliMUONTriggerIO.cxx:424
 AliMUONTriggerIO.cxx:425
 AliMUONTriggerIO.cxx:426
 AliMUONTriggerIO.cxx:427
 AliMUONTriggerIO.cxx:428
 AliMUONTriggerIO.cxx:429
 AliMUONTriggerIO.cxx:430
 AliMUONTriggerIO.cxx:431
 AliMUONTriggerIO.cxx:432
 AliMUONTriggerIO.cxx:433
 AliMUONTriggerIO.cxx:434
 AliMUONTriggerIO.cxx:435
 AliMUONTriggerIO.cxx:436
 AliMUONTriggerIO.cxx:437
 AliMUONTriggerIO.cxx:438
 AliMUONTriggerIO.cxx:439
 AliMUONTriggerIO.cxx:440
 AliMUONTriggerIO.cxx:441
 AliMUONTriggerIO.cxx:442
 AliMUONTriggerIO.cxx:443
 AliMUONTriggerIO.cxx:444
 AliMUONTriggerIO.cxx:445
 AliMUONTriggerIO.cxx:446
 AliMUONTriggerIO.cxx:447
 AliMUONTriggerIO.cxx:448
 AliMUONTriggerIO.cxx:449
 AliMUONTriggerIO.cxx:450
 AliMUONTriggerIO.cxx:451
 AliMUONTriggerIO.cxx:452
 AliMUONTriggerIO.cxx:453
 AliMUONTriggerIO.cxx:454
 AliMUONTriggerIO.cxx:455
 AliMUONTriggerIO.cxx:456
 AliMUONTriggerIO.cxx:457
 AliMUONTriggerIO.cxx:458
 AliMUONTriggerIO.cxx:459
 AliMUONTriggerIO.cxx:460
 AliMUONTriggerIO.cxx:461
 AliMUONTriggerIO.cxx:462
 AliMUONTriggerIO.cxx:463
 AliMUONTriggerIO.cxx:464
 AliMUONTriggerIO.cxx:465
 AliMUONTriggerIO.cxx:466
 AliMUONTriggerIO.cxx:467
 AliMUONTriggerIO.cxx:468
 AliMUONTriggerIO.cxx:469
 AliMUONTriggerIO.cxx:470
 AliMUONTriggerIO.cxx:471
 AliMUONTriggerIO.cxx:472
 AliMUONTriggerIO.cxx:473
 AliMUONTriggerIO.cxx:474
 AliMUONTriggerIO.cxx:475
 AliMUONTriggerIO.cxx:476
 AliMUONTriggerIO.cxx:477
 AliMUONTriggerIO.cxx:478
 AliMUONTriggerIO.cxx:479
 AliMUONTriggerIO.cxx:480
 AliMUONTriggerIO.cxx:481
 AliMUONTriggerIO.cxx:482
 AliMUONTriggerIO.cxx:483
 AliMUONTriggerIO.cxx:484
 AliMUONTriggerIO.cxx:485
 AliMUONTriggerIO.cxx:486
 AliMUONTriggerIO.cxx:487
 AliMUONTriggerIO.cxx:488
 AliMUONTriggerIO.cxx:489
 AliMUONTriggerIO.cxx:490
 AliMUONTriggerIO.cxx:491
 AliMUONTriggerIO.cxx:492
 AliMUONTriggerIO.cxx:493
 AliMUONTriggerIO.cxx:494
 AliMUONTriggerIO.cxx:495
 AliMUONTriggerIO.cxx:496
 AliMUONTriggerIO.cxx:497
 AliMUONTriggerIO.cxx:498
 AliMUONTriggerIO.cxx:499
 AliMUONTriggerIO.cxx:500
 AliMUONTriggerIO.cxx:501
 AliMUONTriggerIO.cxx:502
 AliMUONTriggerIO.cxx:503
 AliMUONTriggerIO.cxx:504
 AliMUONTriggerIO.cxx:505
 AliMUONTriggerIO.cxx:506
 AliMUONTriggerIO.cxx:507
 AliMUONTriggerIO.cxx:508
 AliMUONTriggerIO.cxx:509
 AliMUONTriggerIO.cxx:510
 AliMUONTriggerIO.cxx:511
 AliMUONTriggerIO.cxx:512
 AliMUONTriggerIO.cxx:513
 AliMUONTriggerIO.cxx:514
 AliMUONTriggerIO.cxx:515
 AliMUONTriggerIO.cxx:516
 AliMUONTriggerIO.cxx:517
 AliMUONTriggerIO.cxx:518
 AliMUONTriggerIO.cxx:519
 AliMUONTriggerIO.cxx:520
 AliMUONTriggerIO.cxx:521
 AliMUONTriggerIO.cxx:522
 AliMUONTriggerIO.cxx:523
 AliMUONTriggerIO.cxx:524
 AliMUONTriggerIO.cxx:525
 AliMUONTriggerIO.cxx:526
 AliMUONTriggerIO.cxx:527
 AliMUONTriggerIO.cxx:528
 AliMUONTriggerIO.cxx:529
 AliMUONTriggerIO.cxx:530
 AliMUONTriggerIO.cxx:531
 AliMUONTriggerIO.cxx:532
 AliMUONTriggerIO.cxx:533
 AliMUONTriggerIO.cxx:534
 AliMUONTriggerIO.cxx:535
 AliMUONTriggerIO.cxx:536
 AliMUONTriggerIO.cxx:537
 AliMUONTriggerIO.cxx:538
 AliMUONTriggerIO.cxx:539
 AliMUONTriggerIO.cxx:540
 AliMUONTriggerIO.cxx:541
 AliMUONTriggerIO.cxx:542
 AliMUONTriggerIO.cxx:543
 AliMUONTriggerIO.cxx:544
 AliMUONTriggerIO.cxx:545
 AliMUONTriggerIO.cxx:546
 AliMUONTriggerIO.cxx:547
 AliMUONTriggerIO.cxx:548
 AliMUONTriggerIO.cxx:549
 AliMUONTriggerIO.cxx:550
 AliMUONTriggerIO.cxx:551
 AliMUONTriggerIO.cxx:552
 AliMUONTriggerIO.cxx:553
 AliMUONTriggerIO.cxx:554
 AliMUONTriggerIO.cxx:555
 AliMUONTriggerIO.cxx:556
 AliMUONTriggerIO.cxx:557
 AliMUONTriggerIO.cxx:558
 AliMUONTriggerIO.cxx:559
 AliMUONTriggerIO.cxx:560
 AliMUONTriggerIO.cxx:561
 AliMUONTriggerIO.cxx:562
 AliMUONTriggerIO.cxx:563
 AliMUONTriggerIO.cxx:564
 AliMUONTriggerIO.cxx:565
 AliMUONTriggerIO.cxx:566
 AliMUONTriggerIO.cxx:567
 AliMUONTriggerIO.cxx:568
 AliMUONTriggerIO.cxx:569
 AliMUONTriggerIO.cxx:570
 AliMUONTriggerIO.cxx:571
 AliMUONTriggerIO.cxx:572
 AliMUONTriggerIO.cxx:573
 AliMUONTriggerIO.cxx:574
 AliMUONTriggerIO.cxx:575
 AliMUONTriggerIO.cxx:576
 AliMUONTriggerIO.cxx:577
 AliMUONTriggerIO.cxx:578
 AliMUONTriggerIO.cxx:579
 AliMUONTriggerIO.cxx:580
 AliMUONTriggerIO.cxx:581
 AliMUONTriggerIO.cxx:582
 AliMUONTriggerIO.cxx:583
 AliMUONTriggerIO.cxx:584
 AliMUONTriggerIO.cxx:585
 AliMUONTriggerIO.cxx:586
 AliMUONTriggerIO.cxx:587
 AliMUONTriggerIO.cxx:588
 AliMUONTriggerIO.cxx:589
 AliMUONTriggerIO.cxx:590
 AliMUONTriggerIO.cxx:591
 AliMUONTriggerIO.cxx:592
 AliMUONTriggerIO.cxx:593
 AliMUONTriggerIO.cxx:594
 AliMUONTriggerIO.cxx:595
 AliMUONTriggerIO.cxx:596
 AliMUONTriggerIO.cxx:597
 AliMUONTriggerIO.cxx:598
 AliMUONTriggerIO.cxx:599
 AliMUONTriggerIO.cxx:600
 AliMUONTriggerIO.cxx:601
 AliMUONTriggerIO.cxx:602
 AliMUONTriggerIO.cxx:603
 AliMUONTriggerIO.cxx:604
 AliMUONTriggerIO.cxx:605
 AliMUONTriggerIO.cxx:606
 AliMUONTriggerIO.cxx:607
 AliMUONTriggerIO.cxx:608
 AliMUONTriggerIO.cxx:609
 AliMUONTriggerIO.cxx:610
 AliMUONTriggerIO.cxx:611
 AliMUONTriggerIO.cxx:612
 AliMUONTriggerIO.cxx:613
 AliMUONTriggerIO.cxx:614
 AliMUONTriggerIO.cxx:615
 AliMUONTriggerIO.cxx:616
 AliMUONTriggerIO.cxx:617
 AliMUONTriggerIO.cxx:618
 AliMUONTriggerIO.cxx:619
 AliMUONTriggerIO.cxx:620
 AliMUONTriggerIO.cxx:621
 AliMUONTriggerIO.cxx:622
 AliMUONTriggerIO.cxx:623
 AliMUONTriggerIO.cxx:624
 AliMUONTriggerIO.cxx:625
 AliMUONTriggerIO.cxx:626
 AliMUONTriggerIO.cxx:627
 AliMUONTriggerIO.cxx:628
 AliMUONTriggerIO.cxx:629
 AliMUONTriggerIO.cxx:630
 AliMUONTriggerIO.cxx:631
 AliMUONTriggerIO.cxx:632
 AliMUONTriggerIO.cxx:633
 AliMUONTriggerIO.cxx:634
 AliMUONTriggerIO.cxx:635
 AliMUONTriggerIO.cxx:636
 AliMUONTriggerIO.cxx:637
 AliMUONTriggerIO.cxx:638
 AliMUONTriggerIO.cxx:639
 AliMUONTriggerIO.cxx:640
 AliMUONTriggerIO.cxx:641
 AliMUONTriggerIO.cxx:642
 AliMUONTriggerIO.cxx:643
 AliMUONTriggerIO.cxx:644
 AliMUONTriggerIO.cxx:645
 AliMUONTriggerIO.cxx:646
 AliMUONTriggerIO.cxx:647
 AliMUONTriggerIO.cxx:648
 AliMUONTriggerIO.cxx:649
 AliMUONTriggerIO.cxx:650
 AliMUONTriggerIO.cxx:651
 AliMUONTriggerIO.cxx:652
 AliMUONTriggerIO.cxx:653
 AliMUONTriggerIO.cxx:654
 AliMUONTriggerIO.cxx:655
 AliMUONTriggerIO.cxx:656
 AliMUONTriggerIO.cxx:657
 AliMUONTriggerIO.cxx:658
 AliMUONTriggerIO.cxx:659
 AliMUONTriggerIO.cxx:660
 AliMUONTriggerIO.cxx:661
 AliMUONTriggerIO.cxx:662
 AliMUONTriggerIO.cxx:663
 AliMUONTriggerIO.cxx:664
 AliMUONTriggerIO.cxx:665
 AliMUONTriggerIO.cxx:666
 AliMUONTriggerIO.cxx:667
 AliMUONTriggerIO.cxx:668
 AliMUONTriggerIO.cxx:669
 AliMUONTriggerIO.cxx:670
 AliMUONTriggerIO.cxx:671
 AliMUONTriggerIO.cxx:672
 AliMUONTriggerIO.cxx:673
 AliMUONTriggerIO.cxx:674
 AliMUONTriggerIO.cxx:675
 AliMUONTriggerIO.cxx:676
 AliMUONTriggerIO.cxx:677
 AliMUONTriggerIO.cxx:678
 AliMUONTriggerIO.cxx:679
 AliMUONTriggerIO.cxx:680
 AliMUONTriggerIO.cxx:681
 AliMUONTriggerIO.cxx:682
 AliMUONTriggerIO.cxx:683
 AliMUONTriggerIO.cxx:684
 AliMUONTriggerIO.cxx:685
 AliMUONTriggerIO.cxx:686
 AliMUONTriggerIO.cxx:687
 AliMUONTriggerIO.cxx:688
 AliMUONTriggerIO.cxx:689
 AliMUONTriggerIO.cxx:690
 AliMUONTriggerIO.cxx:691
 AliMUONTriggerIO.cxx:692
 AliMUONTriggerIO.cxx:693
 AliMUONTriggerIO.cxx:694
 AliMUONTriggerIO.cxx:695
 AliMUONTriggerIO.cxx:696
 AliMUONTriggerIO.cxx:697
 AliMUONTriggerIO.cxx:698
 AliMUONTriggerIO.cxx:699
 AliMUONTriggerIO.cxx:700
 AliMUONTriggerIO.cxx:701
 AliMUONTriggerIO.cxx:702
 AliMUONTriggerIO.cxx:703
 AliMUONTriggerIO.cxx:704
 AliMUONTriggerIO.cxx:705
 AliMUONTriggerIO.cxx:706
 AliMUONTriggerIO.cxx:707
 AliMUONTriggerIO.cxx:708
 AliMUONTriggerIO.cxx:709
 AliMUONTriggerIO.cxx:710
 AliMUONTriggerIO.cxx:711
 AliMUONTriggerIO.cxx:712
 AliMUONTriggerIO.cxx:713
 AliMUONTriggerIO.cxx:714
 AliMUONTriggerIO.cxx:715
 AliMUONTriggerIO.cxx:716
 AliMUONTriggerIO.cxx:717
 AliMUONTriggerIO.cxx:718
 AliMUONTriggerIO.cxx:719
 AliMUONTriggerIO.cxx:720
 AliMUONTriggerIO.cxx:721
 AliMUONTriggerIO.cxx:722
 AliMUONTriggerIO.cxx:723
 AliMUONTriggerIO.cxx:724
 AliMUONTriggerIO.cxx:725
 AliMUONTriggerIO.cxx:726
 AliMUONTriggerIO.cxx:727
 AliMUONTriggerIO.cxx:728
 AliMUONTriggerIO.cxx:729
 AliMUONTriggerIO.cxx:730
 AliMUONTriggerIO.cxx:731
 AliMUONTriggerIO.cxx:732
 AliMUONTriggerIO.cxx:733
 AliMUONTriggerIO.cxx:734
 AliMUONTriggerIO.cxx:735
 AliMUONTriggerIO.cxx:736
 AliMUONTriggerIO.cxx:737
 AliMUONTriggerIO.cxx:738
 AliMUONTriggerIO.cxx:739
 AliMUONTriggerIO.cxx:740
 AliMUONTriggerIO.cxx:741
 AliMUONTriggerIO.cxx:742
 AliMUONTriggerIO.cxx:743
 AliMUONTriggerIO.cxx:744
 AliMUONTriggerIO.cxx:745
 AliMUONTriggerIO.cxx:746
 AliMUONTriggerIO.cxx:747
 AliMUONTriggerIO.cxx:748
 AliMUONTriggerIO.cxx:749
 AliMUONTriggerIO.cxx:750
 AliMUONTriggerIO.cxx:751
 AliMUONTriggerIO.cxx:752
 AliMUONTriggerIO.cxx:753
 AliMUONTriggerIO.cxx:754
 AliMUONTriggerIO.cxx:755
 AliMUONTriggerIO.cxx:756
 AliMUONTriggerIO.cxx:757
 AliMUONTriggerIO.cxx:758
 AliMUONTriggerIO.cxx:759
 AliMUONTriggerIO.cxx:760
 AliMUONTriggerIO.cxx:761
 AliMUONTriggerIO.cxx:762
 AliMUONTriggerIO.cxx:763
 AliMUONTriggerIO.cxx:764
 AliMUONTriggerIO.cxx:765
 AliMUONTriggerIO.cxx:766
 AliMUONTriggerIO.cxx:767
 AliMUONTriggerIO.cxx:768
 AliMUONTriggerIO.cxx:769
 AliMUONTriggerIO.cxx:770
 AliMUONTriggerIO.cxx:771
 AliMUONTriggerIO.cxx:772
 AliMUONTriggerIO.cxx:773
 AliMUONTriggerIO.cxx:774
 AliMUONTriggerIO.cxx:775
 AliMUONTriggerIO.cxx:776
 AliMUONTriggerIO.cxx:777
 AliMUONTriggerIO.cxx:778
 AliMUONTriggerIO.cxx:779
 AliMUONTriggerIO.cxx:780
 AliMUONTriggerIO.cxx:781
 AliMUONTriggerIO.cxx:782
 AliMUONTriggerIO.cxx:783
 AliMUONTriggerIO.cxx:784
 AliMUONTriggerIO.cxx:785
 AliMUONTriggerIO.cxx:786
 AliMUONTriggerIO.cxx:787
 AliMUONTriggerIO.cxx:788
 AliMUONTriggerIO.cxx:789
 AliMUONTriggerIO.cxx:790
 AliMUONTriggerIO.cxx:791
 AliMUONTriggerIO.cxx:792
 AliMUONTriggerIO.cxx:793
 AliMUONTriggerIO.cxx:794
 AliMUONTriggerIO.cxx:795
 AliMUONTriggerIO.cxx:796
 AliMUONTriggerIO.cxx:797
 AliMUONTriggerIO.cxx:798
 AliMUONTriggerIO.cxx:799
 AliMUONTriggerIO.cxx:800
 AliMUONTriggerIO.cxx:801
 AliMUONTriggerIO.cxx:802
 AliMUONTriggerIO.cxx:803
 AliMUONTriggerIO.cxx:804
 AliMUONTriggerIO.cxx:805
 AliMUONTriggerIO.cxx:806
 AliMUONTriggerIO.cxx:807
 AliMUONTriggerIO.cxx:808
 AliMUONTriggerIO.cxx:809
 AliMUONTriggerIO.cxx:810
 AliMUONTriggerIO.cxx:811
 AliMUONTriggerIO.cxx:812
 AliMUONTriggerIO.cxx:813
 AliMUONTriggerIO.cxx:814
 AliMUONTriggerIO.cxx:815
 AliMUONTriggerIO.cxx:816
 AliMUONTriggerIO.cxx:817
 AliMUONTriggerIO.cxx:818
 AliMUONTriggerIO.cxx:819
 AliMUONTriggerIO.cxx:820
 AliMUONTriggerIO.cxx:821
 AliMUONTriggerIO.cxx:822
 AliMUONTriggerIO.cxx:823
 AliMUONTriggerIO.cxx:824
 AliMUONTriggerIO.cxx:825
 AliMUONTriggerIO.cxx:826
 AliMUONTriggerIO.cxx:827
 AliMUONTriggerIO.cxx:828
 AliMUONTriggerIO.cxx:829
 AliMUONTriggerIO.cxx:830
 AliMUONTriggerIO.cxx:831
 AliMUONTriggerIO.cxx:832
 AliMUONTriggerIO.cxx:833
 AliMUONTriggerIO.cxx:834
 AliMUONTriggerIO.cxx:835
 AliMUONTriggerIO.cxx:836
 AliMUONTriggerIO.cxx:837
 AliMUONTriggerIO.cxx:838
 AliMUONTriggerIO.cxx:839
 AliMUONTriggerIO.cxx:840
 AliMUONTriggerIO.cxx:841
 AliMUONTriggerIO.cxx:842
 AliMUONTriggerIO.cxx:843
 AliMUONTriggerIO.cxx:844
 AliMUONTriggerIO.cxx:845
 AliMUONTriggerIO.cxx:846
 AliMUONTriggerIO.cxx:847
 AliMUONTriggerIO.cxx:848
 AliMUONTriggerIO.cxx:849
 AliMUONTriggerIO.cxx:850
 AliMUONTriggerIO.cxx:851
 AliMUONTriggerIO.cxx:852
 AliMUONTriggerIO.cxx:853