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 "AliMpDCSNamer.h"

#include "AliCodeTimer.h"
#include "AliLog.h"
#include "AliMpArea.h"
#include "AliMpDEIterator.h"
#include "AliMpDEManager.h"
#include "AliMpHelper.h"
#include "AliMpMotifMap.h"
#include "AliMpMotifPosition.h"
#include "AliMpSector.h"
#include "AliMpSegmentation.h"
#include "AliMpSlat.h"
#include "AliMpConstants.h"
#include <Riostream.h>
#include <TMap.h>
#include <TObjArray.h>
#include <TObjString.h>
#include <TString.h>
#include <TSystem.h>

//-----------------------------------------------------------------------------
/// \class AliMpDCSNamer
/// 
/// A utility class to manage DCS aliases names, in particular the
/// two conventions used to number the detection elements within a detector.
///
/// \author: Laurent Aphecetche and Diego Stocco, Subatech
//-----------------------------------------------------------------------------

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

const char* AliMpDCSNamer::fgkDCSChannelSt345Pattern[] = 
{ "MchHvLvLeft/Chamber%02dLeft/Slat%02d.actual.vMon",
  "MchHvLvRight/Chamber%02dRight/Slat%02d.actual.vMon" 
};

const char* AliMpDCSNamer::fgkDCSChannelSt12Pattern[] = 
{
  "MchHvLvLeft/Chamber%02dLeft/Quad%dSect%d.actual.vMon",
  "MchHvLvRight/Chamber%02dRight/Quad%dSect%d.actual.vMon"
};

const char* AliMpDCSNamer::fgkDCSQuadrantPattern[] =
{
  "MchHvLvLeft/Chamber%02dLeft/Quad%d",
  "MchHvLvRight/Chamber%02dRight/Quad%d"  
};

const char* AliMpDCSNamer::fgkDCSChamberPattern[] =
{
  "MchHvLvLeft/Chamber%02dLeft",
  "MchHvLvRight/Chamber%02dRight"
};

const char* AliMpDCSNamer::fgkDCSSideTrackerName[] = { "Left", "Right" };


const char* AliMpDCSNamer::fgkDCSSwitchSt345Pattern = "MchDE%04dsw%d.inValue";

const char* AliMpDCSNamer::fgkDCSChannelTriggerPatternRead[] = {"MTR_%3sSIDE_MT%2i_RPC%i_HV.%14s", "MTR_%2sSIDE_MT%2i_RPC%i_HV.%14s"};
const char* AliMpDCSNamer::fgkDCSChannelTriggerPattern[] = {"MTR_%3sSIDE_MT%2i_RPC%i_HV.%s", "MTR_%2sSIDE_MT%2i_RPC%i_HV.%s"};
const char* AliMpDCSNamer::fgkDCSSideTriggerName[] = { "OUT", "IN" };
const char* AliMpDCSNamer::fgkDCSMeasureName[] = { "vEff", "actual.iMon" };

const char* AliMpDCSNamer::fgkDetectorName[] = { "TRACKER", "TRIGGER" };

//_____________________________________________________________________________
AliMpDCSNamer::AliMpDCSNamer():
fDetector(-1)
{
  SetDetector("TRACKER");
  /// default ctor 
}

//_____________________________________________________________________________
AliMpDCSNamer::AliMpDCSNamer(const char* detName):
fDetector(-1)
{
  /// ctor taking the detector name as argument (either trigger or tracker)
  SetDetector(detName);
}

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

//_____________________________________________________________________________
Bool_t AliMpDCSNamer::SetDetector(const char* detName)
{
  /// Set the detector type
  /// \param detName = tracker, trigger

  TString sDetName(detName);
  Bool_t isOk(kTRUE);
  sDetName.ToUpper();
  if(sDetName.Contains(fgkDetectorName[kTrackerDet]))
    fDetector = kTrackerDet;
  else if(sDetName.Contains(fgkDetectorName[kTriggerDet]))
    fDetector = kTriggerDet;
  else {
    AliWarning("Detector name must be either tracker or trigger. Default tracker selected");
    isOk = kFALSE;
  }
  return isOk;
}


//_____________________________________________________________________________
void 
AliMpDCSNamer::AliasesAsLdif(const char* ldiffile) const
{
/// Export the aliases in LDIF format

  ofstream out(ldiffile);
  
  TObjArray* a = CompactAliases();
  
  TIter next(a);
  TObjString* s;

  // Some header. host name and port probably not up to date.
  TString detName = (fDetector == kTriggerDet) ? "MTR" : "MCH";

  out << "#" << detName.Data() << " config" << endl
      << "dn: det=" << detName.Data() <<",o=alice,dc=cern,dc=ch" << endl
      << "objectClass: AliShuttleDetector" << endl
      << "det: " << detName.Data() << endl
      << "StrictRunOrder: 1" << endl
      << "responsible: aphecetc@in2p3.fr" << endl
      << "DCSHost: aldcs053.cern.ch" << endl
      << "DCSPort: 4242" <<endl;
  
  while ( ( s = (TObjString*)(next()) ) )
  {
    out << "DCSalias: " << s->String().Data() << endl;
  }
  
  out.close();
  
  delete a;
}

//_____________________________________________________________________________
TObjArray*
AliMpDCSNamer::CompactAliases() const
{
  /// Generate a compact list of aliases, for Shuttle test
  /// This one is completely hand-made, in contrast with GenerateAliases()
  /// method

  TObjArray* a = new TObjArray;
  a->SetOwner(kTRUE);

  switch(fDetector){
  case kTrackerDet:
    // St 12 (DCS Channels)
    a->Add(new TObjString("MchHvLvRight/Chamber[00..03]Right/Quad0Sect[0..2].actual.vMon"));
    a->Add(new TObjString("MchHvLvLeft/Chamber[00..03]Left/Quad1Sect[0..2].actual.vMon"));
    a->Add(new TObjString("MchHvLvLeft/Chamber[00..03]Left/Quad2Sect[0..2].actual.vMon"));
    a->Add(new TObjString("MchHvLvRight/Chamber[00..03]Right/Quad3Sect[0..2].actual.vMon"));
  
    // St345 (DCS Channels)
  
    a->Add(new TObjString("MchHvLvRight/Chamber[04..09]Right/Slat[00..08].actual.vMon"));
    a->Add(new TObjString("MchHvLvLeft/Chamber[04..09]Left/Slat[00..08].actual.vMon"));

    a->Add(new TObjString("MchHvLvRight/Chamber[06..09]Right/Slat[09..12].actual.vMon"));
    a->Add(new TObjString("MchHvLvLeft/Chamber[06..09]Left/Slat[09..12].actual.vMon"));
    break;
    
  case kTriggerDet:
    a->Add(new TObjString("MTR_OUTSIDE_MT[11..12]Right/RPC[1..9]_HV.imon"));
    a->Add(new TObjString("MTR_OUTSIDE_MT[21..22]Right/RPC[1..9]_HV.imon"));
    a->Add(new TObjString("MTR_INSIDE_MT[11..12]Right/RPC[1..9]_HV.imon"));
    a->Add(new TObjString("MTR_INSIDE_MT[21..22]Right/RPC[1..9]_HV.imon"));

    a->Add(new TObjString("MTR_OUTSIDE_MT[11..12]Right/RPC[1..9]_HV.vmon"));
    a->Add(new TObjString("MTR_OUTSIDE_MT[21..22]Right/RPC[1..9]_HV.vmon"));
    a->Add(new TObjString("MTR_INSIDE_MT[11..12]Right/RPC[1..9]_HV.vmon"));
    a->Add(new TObjString("MTR_INSIDE_MT[21..22]Right/RPC[1..9]_HV.vmon"));
  }
  

  if(fDetector == kTrackerDet){
    // St345 (DCS Switches)
    AliMpDEIterator it;
  
    it.First();
  
    while (!it.IsDone())
    {
      Int_t detElemId = it.CurrentDEId();
      if ( AliMpDEManager::GetStationType(detElemId) == AliMp::kStation345 )
      {
	a->Add(new TObjString(Form("MchDE%04dsw[0..%d].inValue",detElemId,NumberOfPCBs(detElemId)-1)));
      }
      it.Next();
    }
  }
  
  return a;
}

//_____________________________________________________________________________
Int_t 
AliMpDCSNamer::DCS2DE(Int_t chId, Int_t side, Int_t dcsNumber) const
{
  /// Convert DCS Tracker "slat number" (old convention) to DE (new) convention.
  ///
  /// \param chamberId : chamber number (starting at 0)
  /// \param side : 0 for Left, 1 for Right
  /// \param dcsNumber : slat number in DCS convention
  ///
  /// note that dcsNumber should be >=0 and < number of DEs/2 in chamber

  Int_t de(-1);
  Int_t chamberId = chId;

  if(fDetector == kTrackerDet){ // Tracker

    Int_t nofDE = AliMpDEManager::GetNofDEInChamber(chamberId);
  
    Int_t half = nofDE/2;
  
    dcsNumber = half - dcsNumber;
  
    Int_t quarter = nofDE/4;
    Int_t threeQuarter = half + quarter;
  
    if ( side == 0 ) // left
    {
      de = threeQuarter + 1 - dcsNumber;
    }
    else if ( side == 1 ) // right
    {
      if ( dcsNumber <= quarter )
      {
	de = dcsNumber + threeQuarter;
      }
      else
      {
	de = dcsNumber - quarter - 1;
      }
    }
  }
  else { // Trigger

    if ( chId < 19 ) chamberId = chId - 1;
    else chamberId = chId - 9;

    Int_t nofDE = AliMpDEManager::GetNofDEInChamber(chamberId);

    if ( side == 0 ) // left -> Outside
    {
      de = 14 - dcsNumber;
    }
    else if ( side == 1 ) // right -> Inside
    {
      if (nofDE>0)
	de = (13 + dcsNumber) % nofDE;
    }
  }
  
  return (chamberId+1)*100 + de;
}


//_____________________________________________________________________________
Int_t
AliMpDCSNamer::DetElemId2DCS(Int_t detElemId, Int_t& side, Int_t &chId) const
{
  /// Convert DE to DCS "slat number"
  /// @see DCS2DE

  CheckConsistency(detElemId);
  
  Int_t chamberId = AliMpDEManager::GetChamberId(detElemId);
  if ( chamberId < 0 ) 
  {
    AliDebug(1,Form("DetElemId %d invalid",detElemId));
    return -1;
  }
  Int_t dcsNumber = (detElemId-(chamberId+1)*100);

  switch ( AliMpDEManager::GetStationType(detElemId) )
  {
    case AliMp::kStation12:
    {
      switch (dcsNumber)
      {
        case 0:
        case 3:
          side = 1; // right
          break;
        case 1:
        case 2:
          side = 0; // left
        default:
          break;
      }
    }
      break;
    case AliMp::kStation345:
    {
      Int_t nofDE = AliMpDEManager::GetNofDEInChamber(chamberId);
      
      Int_t quarter = nofDE/4;
      
      Int_t half = nofDE/2;
      
      Int_t threeQuarter = half + quarter;  
      
      side = -1;
      
      if ( dcsNumber <= quarter ) 
      {
        dcsNumber += quarter + 1 ;
        side = 1; // right
      }
      else if ( dcsNumber <= threeQuarter )
      {
        dcsNumber = ( threeQuarter - dcsNumber + 1 );
        side = 0; // left
      }
      else if ( dcsNumber > threeQuarter ) 
      {
        dcsNumber = dcsNumber - threeQuarter;
        side = 1; // right
      }
      else
      {
        AliFatal("oups");
      }  
      // dcs convention change : numbering from top, not from bottom
      dcsNumber = half-dcsNumber;
    }
      break;
    case AliMp::kStationTrigger:
    {
      if (chamberId < AliMpConstants::NofChambers()-2)
	chId = chamberId + 1;
      else chId = 23 + chamberId - AliMpConstants::NofChambers();

      Int_t nofDE = AliMpDEManager::GetNofDEInChamber(chamberId);

      if ( dcsNumber >=5 && dcsNumber <= 13 ) {
	side = 0;
	dcsNumber = 14 - dcsNumber;
      }
      else {
	side = 1;
	if (nofDE>0)
	  dcsNumber = (5 + dcsNumber) % nofDE;
      }
      AliDebug(10, Form("detElemId %i  -> MT%i_side%i_L%i", detElemId, chId, side, dcsNumber));
    }
      break;
    default:
      break;
  }

  return dcsNumber;
}

//_____________________________________________________________________________
TString
AliMpDCSNamer::DCSNameFromAlias(const char* dcsAlias) const
{
  /// Convert a (possibly partial) aliasname to a name (only for MCH)
  
  TString salias(dcsAlias);
  
  if ( !salias.Contains("MchHvLv") ) return dcsAlias;
  
  Int_t quadrantNumber(-1);
  Int_t chamberNumber(-1);
  Int_t side(-1);
  
  if ( salias.Contains("Left")) side = 0;
  if ( salias.Contains("Right")) side = 1;
  
  if ( side < 0 ) return "";
  
  TString channelName;
  
  if ( salias.Contains("Slat") )
  {
    Int_t slatNumber(-1);
    sscanf(salias.Data(),fgkDCSChannelSt345Pattern[side],&chamberNumber,&slatNumber);
    ++chamberNumber;
    ++slatNumber;
    channelName = TString::Format(fgkDCSChannelSt345Pattern[side],chamberNumber,slatNumber);
  }
  else if ( salias.Contains("Sect") )
  {
    Int_t sectorNumber(-1);
    sscanf(salias.Data(),fgkDCSChannelSt12Pattern[side],&chamberNumber,&quadrantNumber,&sectorNumber);
    ++chamberNumber;
    ++quadrantNumber;
    ++sectorNumber;
    channelName =  TString::Format(fgkDCSChannelSt12Pattern[side],chamberNumber,quadrantNumber,sectorNumber);
  }
  else if ( salias.Contains("Quad") )
  {
    sscanf(salias.Data(),fgkDCSQuadrantPattern[side],&chamberNumber,&quadrantNumber);
    ++chamberNumber;
    ++quadrantNumber;
    channelName =  TString::Format(fgkDCSQuadrantPattern[side],chamberNumber,quadrantNumber);
  }
  else if ( salias.Contains("Chamber") )
  {
    sscanf(salias.Data(),fgkDCSChamberPattern[side],&chamberNumber);
    ++chamberNumber;
    channelName =  TString::Format(fgkDCSChamberPattern[side],chamberNumber);
  }

  if ( TString(dcsAlias).Contains("iMon") )
  {
    channelName.ReplaceAll("vMon","iMon");
  }
  
  return channelName;
}

//_____________________________________________________________________________
TString
AliMpDCSNamer::DCSAliasFromName(const char* dcsName) const
{
  /// Convert a (possibly partial) dcsname to an alias (only for MCH)
  
  TString sname(dcsName);
  
  if ( !sname.Contains("MchHvLv") ) return dcsName;
  
  Int_t quadrantNumber(-1);
  Int_t chamberNumber(-1);
  Int_t side(-1);
  
  if ( sname.Contains("Left")) side = 0;
  if ( sname.Contains("Right")) side = 1;
  
  if ( side < 0 ) return "";
  
  TString channelName;
  
  if ( sname.Contains("Slat") )
  {
    Int_t slatNumber(-1);
    sscanf(sname.Data(),fgkDCSChannelSt345Pattern[side],&chamberNumber,&slatNumber);
    --chamberNumber;
    --slatNumber;
    channelName = TString::Format(fgkDCSChannelSt345Pattern[side],chamberNumber,slatNumber);
  }
  else if ( sname.Contains("Sect") )
  {
    Int_t sectorNumber(-1);
    sscanf(sname.Data(),fgkDCSChannelSt12Pattern[side],&chamberNumber,&quadrantNumber,&sectorNumber);
    --chamberNumber;
    --quadrantNumber;
    --sectorNumber;
    channelName =  TString::Format(fgkDCSChannelSt12Pattern[side],chamberNumber,quadrantNumber,sectorNumber);
  }
  else if ( sname.Contains("Quad") )
  {
    sscanf(sname.Data(),fgkDCSQuadrantPattern[side],&chamberNumber,&quadrantNumber);
    --chamberNumber;
    --quadrantNumber;
    channelName =  TString::Format(fgkDCSQuadrantPattern[side],chamberNumber,quadrantNumber);
  }
  else if ( sname.Contains("Chamber") )
  {
    sscanf(sname.Data(),fgkDCSChamberPattern[side],&chamberNumber);
    --chamberNumber;
    channelName =  TString::Format(fgkDCSChamberPattern[side],chamberNumber);
  }
  
  if ( TString(dcsName).Contains("iMon") )
  {
    channelName.ReplaceAll("vMon","iMon");
  }
  
  return channelName;
}

//_____________________________________________________________________________
TString
AliMpDCSNamer::DCSAliasName(Int_t detElemId, Int_t sector, Int_t dcsMeasure) const
{
  /// Return the alias name of the DCS Channel for a given DCS area
  /// \param detElemId
  /// \param sector = 0,1 or 2 for St12, and is unused for st345 and trigger
  /// \param dcsMeasure = kDCSHV, kDCSI
  
  Int_t chamberId = AliMpDEManager::GetChamberId(detElemId);
  if ( chamberId < 0 ) return "";
  
  Int_t side(-1), chId(-1);
  Int_t dcsNumber = DetElemId2DCS(detElemId,side,chId);
  
  TString aliasName;
  
  switch (AliMpDEManager::GetStationType(detElemId))
  {
    case AliMp::kStation12:
      aliasName.Form(fgkDCSChannelSt12Pattern[side],chamberId,dcsNumber,sector);
      break;
    case AliMp::kStation345:
      aliasName.Form(fgkDCSChannelSt345Pattern[side],chamberId,dcsNumber);
      break;
    case AliMp::kStationTrigger:
      return TString::Format(fgkDCSChannelTriggerPattern[side],fgkDCSSideTriggerName[side],chId,dcsNumber,fgkDCSMeasureName[dcsMeasure]);
      break;
    default:
      return "";
      break;
  }
  
  if ( dcsMeasure == AliMpDCSNamer::kDCSI )
  {
    aliasName.ReplaceAll("vMon","iMon");
  }
  
  return aliasName;
  
}

//_____________________________________________________________________________
TString
AliMpDCSNamer::DCSSwitchAliasName(Int_t detElemId, Int_t pcbNumber) const
{
  /// Return the alias name of the DCS Switch for a given PCB 
  /// within a slat of St345
  
  if (AliMpDEManager::GetStationType(detElemId) == AliMp::kStation345)
  {
    return TString::Format(fgkDCSSwitchSt345Pattern,detElemId,pcbNumber);
  }
  return "";
}

//_____________________________________________________________________________
Int_t 
AliMpDCSNamer::DCSIndexFromDCSAlias(const char* dcsAlias) const
{
  /// Converts the dcs alias to a hv index 
  ///
  /// dcsAlias has one of the following 3 forms :
  ///
  /// MchHvLv[Left|Right]/Chamber##[Left|Right]/Chamber##[Left|Right]Slat##.actual.vMon
  ///
  /// MchHvLv[Left|Right]/Chamber##[Left|Right]/Chamber##[Left|Right]Quad#Sect#.actual.vMon
  ///
  /// MchDE####dsw#.inValue
  
  TString sDcsAlias(dcsAlias);
  Int_t de(-1);
  Int_t sw(-1);
  
  int side(-1);
  
  if ( sDcsAlias.Contains("Left") )
  {
    side = 0;
  }
  else if ( sDcsAlias.Contains("Right") )
  {
    side = 1;
  }
  else
  {
    /// it's a switch
    sscanf(sDcsAlias.Data(),fgkDCSSwitchSt345Pattern,&de,&sw);
    return sw;
  }
  
  int n1(-1);
  int n3(-1);
  int n4(-1);
  
  if ( sDcsAlias.Contains("Quad") )
  {
    sscanf(sDcsAlias.Data(),fgkDCSChannelSt12Pattern[side],&n1,&n3,&n4);    
    return n4;
  }
  
  return -2;
}

//_____________________________________________________________________________
Int_t 
AliMpDCSNamer::DetElemIdFromDCSAlias(const char* dcsAlias) const
{
  /// Converts the dcs alias to a detection element identifier
  ///
  /// dcsAlias has one of the following forms :
  ///
  /// MchHvLv[Left|Right]/Chamber##[Left|Right]/Chamber##[Left|Right]Slat##.actual.vMon
  ///
  /// MchHvLv[Left|Right]/Chamber##[Left|Right]/Chamber##[Left|Right]Quad#Sect#.actual.vMon
  ///
  /// MTR_Side[OUTSIDE|INSIDE]_MTChamber##_RPC#_HV.Type[actual.iMon|vEff]
  
  AliDebug(1,Form("dcsAlias=%s",dcsAlias));
  
  TString sDcsAlias(dcsAlias);
  
  int side(-1);

  const char** sideName = (fDetector == kTriggerDet) ? fgkDCSSideTriggerName : fgkDCSSideTrackerName;

  for(Int_t iside=0; iside<2; iside++){
    if ( sDcsAlias.Contains(sideName[iside]) ) {
      side = iside;
      break;
    }
  }
  if(side<0) return -2;
  
  int n1(-1);
  int n3(-1);
  int n4(-1);
  char type[15];
  char cside[4];
  int detElemId(-1);
  
  if ( sDcsAlias.Contains("Slat") )
  {
    sscanf(sDcsAlias.Data(),fgkDCSChannelSt345Pattern[side],&n1,&n3);
    detElemId = DCS2DE(n1,side,n3);
    AliDebug(1,Form("Slat side=%d n1=%d n3=%d de=%d",side,n1,n3,detElemId));
  }
  else if ( sDcsAlias.Contains("Quad") )
  {
    sscanf(sDcsAlias.Data(),fgkDCSChannelSt12Pattern[side],&n1,&n3,&n4);    
    detElemId = 100*(n1+1) + n3;
    AliDebug(1,Form("Quad side=%d n1=%d n3=%d n4=%d de=%d",side,n1,n3,n4,detElemId));
  }
  else if ( sDcsAlias.Contains("MT") )
  {
    sscanf(sDcsAlias.Data(),fgkDCSChannelTriggerPatternRead[side],cside,&n1,&n3,type);
    detElemId = DCS2DE(n1,side,n3);
    AliDebug(1,Form("Slat side=%d n1=%d n3=%d de=%d",side,n1,n3,detElemId));
  }
  else
  {
    return -3;
  }
  
  if ( !AliMpDEManager::IsValidDetElemId(detElemId)  )
  {
    AliError(Form("Invalid aliasName %s",dcsAlias));
    return -1;
  }
  
  return detElemId;
}

//_____________________________________________________________________________
Int_t AliMpDCSNamer::DCSvariableFromDCSAlias(const char* dcsAlias) const
{
  /// Get DCS variable from an alias (trigger)
  
  TString sDcsAlias(dcsAlias);

  Int_t dcsMeasurement = -1;

  for(Int_t iMeas=0; iMeas<kNDCSMeas; iMeas++){
    if ( sDcsAlias.Contains(fgkDCSMeasureName[iMeas]) ) {
      dcsMeasurement = iMeas;
      break;
    }
  }

  return dcsMeasurement;
}


//_____________________________________________________________________________
TObjArray*
AliMpDCSNamer::GenerateAliases() const
{
  /// Generate DCS alias names, for MUON Tracker High Voltage system.
  /// or for MUON Trigger HV and current system.
  ///
  /// We first generate aliases of DCS channels :
  ///
  /// St 1 ch  1 : 12 channels
  ///      ch  2 : 12 channels 
  /// St 2 ch  3 : 12 channels
  ///      ch  4 : 12 channels
  /// St 3 ch  5 : 18 channels
  ///      ch  6 : 18 channels
  /// St 4 ch  7 : 26 channels
  ///      ch  8 : 26 channels
  /// St 5 ch  9 : 26 channels
  ///      ch 10 : 26 channels
  ///
  /// then aliases of DCS switches (only for St345) : 1 switch per PCB.
  ///
  /// Returns a TObjArray of TObjString(=alias name)
  
  TObjArray* aliases = new TObjArray;
  aliases->SetOwner(kTRUE);
  
  Int_t nMeasures = (fDetector == kTriggerDet) ? kNDCSMeas : 1;
  
  for(Int_t iMeas=0; iMeas<nMeasures; iMeas++){
    
    AliMpDEIterator it;
    
    it.First();
    
    while (!it.IsDone())
    {
      Int_t detElemId = it.CurrentDEId();
      switch (fDetector){
        case kTrackerDet:
        {
          switch ( AliMpDEManager::GetStationType(detElemId) )
          {
            case AliMp::kStation12:
              for ( int sector = 0; sector < 3; ++sector)
              {
                aliases->Add(new TObjString(DCSAliasName(detElemId,sector)));
                aliases->Add(new TObjString(DCSAliasName(detElemId,sector,AliMpDCSNamer::kDCSI)));
              }
              break;
            case AliMp::kStation345:
              aliases->Add(new TObjString(DCSAliasName(detElemId)));
              aliases->Add(new TObjString(DCSAliasName(detElemId,0,AliMpDCSNamer::kDCSI)));
              for ( Int_t i = 0; i < NumberOfPCBs(detElemId); ++i )
              {
                aliases->Add(new TObjString(DCSSwitchAliasName(detElemId,i)));
              }
              break;
            default:
              break;
          }
        }
          break;
        case kTriggerDet:
        {
          switch ( AliMpDEManager::GetStationType(detElemId) )
          {
            case AliMp::kStationTrigger:
              AliDebug(10,Form("Current DetElemId %i",detElemId));
              aliases->Add(new TObjString(DCSAliasName(detElemId,0,iMeas)));
              break;
            default:
              break;
          }
        }
          break;
      }
      it.Next();
    } // loop on detElemId
  } // Loop on measurement type
  
  return aliases;
}

//_____________________________________________________________________________
Int_t 
AliMpDCSNamer::ManuId2Index(Int_t detElemId, Int_t manuId) const
{
  /// Convert (de,manu) to hv index, depending on the station
  
  AliMp::StationType stationType = AliMpDEManager::GetStationType(detElemId);
  if ( stationType == AliMp::kStation345 ) 
  {
    return ManuId2PCBIndex(detElemId,manuId);
  }
  else if ( stationType == AliMp::kStation12 ) 
  {
    return ManuId2Sector(detElemId,manuId);
  }
  return -1;
}

//_____________________________________________________________________________
Int_t 
AliMpDCSNamer::ManuId2PCBIndex(Int_t detElemId, Int_t manuId) const
{
  /// Returns the index of PCB (within a St345 slat) for a given manu number.
  /// Returns -1 if (detElemId,manuId) is incorrect
  
  AliCodeTimerAuto("",0)
  
  const AliMpSlat* slat 
    = AliMpSegmentation::Instance()->GetSlatByElectronics(detElemId, manuId);
  if ( ! slat ) return -1;
  
  return slat->FindPCBIndexByMotifPositionID(manuId);
}

//_____________________________________________________________________________
Int_t 
AliMpDCSNamer::ManuId2Sector(Int_t detElemId, Int_t manuId) const
{
  /// Return the DCS-sector number (within a St12 quadrant) for a given manu number.
  
  AliCodeTimerAuto("",0)
  
  const AliMpSector* sector 
    = AliMpSegmentation::Instance()->GetSectorByElectronics(detElemId, manuId);
  if ( ! sector ) return -1;
  
  const AliMpMotifMap* motifMap = sector->GetMotifMap();
  const AliMpMotifPosition* motifPos = motifMap->FindMotifPosition(manuId);

  Double_t lowerLeftX 
    = motifPos->GetPositionX()-motifPos->GetDimensionX();
  
  Double_t x = lowerLeftX*10.0; // cm -> mm
  Int_t isector(-1);

  AliMq::Station12Type stationType = AliMpDEManager::GetStation12Type(detElemId);
  
  if ( stationType == AliMq::kStation1 ) 
  {
    if ( x < -10 ) AliFatal("");
    
    if ( x < 291.65 ) isector = 0;
    else if ( x < 585.65 ) isector = 1;
    else if ( x < 879.65 ) isector = 2;
  }
  else
  {
    if ( x < -140 ) AliFatal("");
    
    if ( x < 283.75 ) isector = 0;
    else if ( x < 606.25 ) isector = 1;
    else if ( x < 1158.75 ) isector = 2;
  }
  
  return isector;
}

//_____________________________________________________________________________
Int_t 
AliMpDCSNamer::NumberOfPCBs(Int_t detElemId) const
{
  /// Returns the number of PCB in a given detection element
  /// Only works for St345
  
  AliMp::StationType stationType = AliMpDEManager::GetStationType(detElemId);
  if ( stationType != AliMp::kStation345 )
  {
    return 0;
  }
  else
  {
    const AliMpSlat* slat 
      = AliMpSegmentation::Instance()->GetSlat(detElemId, AliMp::kCath0);
    return slat->GetSize();
  }
}

//_____________________________________________________________________________
Bool_t AliMpDCSNamer::CheckConsistency(Int_t detElemId) const
{
  //
  /// Check that the required detElemId either belongs to tracker or trigger
  /// consistently with the initial definition of the namer
  //

  Bool_t isConsistent(kFALSE);
  TString requestInfo;
  switch(AliMpDEManager::GetStationType(detElemId))
  {
  case AliMp::kStation12:
  case AliMp::kStation345:
    if (fDetector == kTrackerDet) isConsistent = kTRUE;
    requestInfo = "TRACKER";
    break;
  case AliMp::kStationTrigger:
    if (fDetector == kTriggerDet) isConsistent = kTRUE;
    requestInfo = "TRIGGER";
    break;
  default:
    break;
  }

  if(!isConsistent) AliWarning(Form("Requesting information for %s station but class initialized for %s",requestInfo.Data(), fgkDetectorName[fDetector]));

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