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$
// $MpId: AliMpDDLStore.cxx,v 1.4 2006/05/24 13:58:34 ivana Exp $
// Category: management

//-----------------------------------------------------------------------------
// Class AliMpDDLStore
// --------------------
// The top container class for DDLs, det elements and bus patched
// It provides acces to DDL, det element and bus patches objects
// via various characteristics.
// Authors: Ivana Hrivnacova, IPN Orsay
//          Christian Finck, SUBATECH Nantes
//-----------------------------------------------------------------------------

#include <cstdlib>
#include "AliMpDDLStore.h"
#include "AliMpExMapIterator.h"
#include "AliMpConstants.h"
#include "AliMpDEStore.h"
#include "AliMpFrtCrocusConstants.h"
#include "AliMpDDL.h"
#include "AliMpFiles.h"
#include "AliMpDataStreams.h"
#include "AliMpHelper.h"
#include "AliMpDEManager.h"
#include "AliMpManuStore.h"
#include "AliMpDetElement.h"
#include "AliMpBusPatch.h"
#include "AliMpTriggerCrate.h"
#include "AliMpLocalBoard.h"
#include "AliMpSegmentation.h"
#include "AliMpVSegmentation.h"
#include "AliMpStringObjMap.h"
#include "AliMpEncodePair.h"
#include "AliMpIntPair.h"

#include "AliLog.h"

#include <Riostream.h>
#include <TList.h>
#include <TObjArray.h>
#include <TString.h>
#include <TObjString.h>
#include <TClass.h>

/// \cond CLASSIMP
ClassImp(AliMpDDLStore)
/// \endcond

AliMpDDLStore* AliMpDDLStore::fgInstance = 0;
const Int_t    AliMpDDLStore::fgkNofDDLs = 20;
const Int_t    AliMpDDLStore::fgkNofTriggerDDLs = 2;

//
// static methods
//

//______________________________________________________________________________
const TString&  AliMpDDLStore::GetRevertKeyword()
{
  /// A keyword for ReadBusPatchSpecial()
  static const TString kRevertKeyword = "REVERT"; 
  return kRevertKeyword;
}  

//______________________________________________________________________________
const TString&  AliMpDDLStore::GetExplicitKeyword()
{
  /// A keyword for ReadBusPatchSpecial()
  static const TString  kExplicitKeyword = "EXPLICIT";
  return kExplicitKeyword;
}  

//______________________________________________________________________________
AliMpDDLStore* AliMpDDLStore::Instance(Bool_t warn) 
{
    /// Create the DDL store if it does not yet exist
    /// and return its instance

    if ( ! fgInstance && warn  ) {
        AliWarningClass("DDL Store has not been loaded");
    }

    return fgInstance;
}

//______________________________________________________________________________
AliMpDDLStore* AliMpDDLStore::ReadData(const AliMpDataStreams& dataStreams,
                                       Bool_t warn) 
{
    /// Load the DDL store from ASCII data files
    /// and return its instance

    if ( fgInstance ) {
        if ( warn )
            AliWarningClass("DDL Store has been already loaded");
        return fgInstance;
    }

    if ( dataStreams.GetReadFromFiles() )
      AliInfoClass("Reading DDL Store from ASCII files.");

    fgInstance = new AliMpDDLStore(dataStreams);
    return fgInstance;
}

//
// ctors, dtor
//

//______________________________________________________________________________
AliMpDDLStore::AliMpDDLStore(const AliMpDataStreams& dataStreams)
        : TObject(),
        fDDLs(fgkNofDDLs+fgkNofTriggerDDLs), // FIXEME
        fBusPatches(),
        fManuList12(),
        fManuBridge2(),
        fRegionalTrigger()
{
  /// Standard constructor
  
  AliDebug(1,"");
  fDDLs.SetOwner(true);
  fBusPatches.SetOwner(true);
  fBusPatches.SetSize(900);

  // Load segmentation & DE store data
  if ( ! AliMpSegmentation::Instance(false) )
    AliMpSegmentation::ReadData(dataStreams, true);
    
  // Create all detection elements
  ReadDDLs(dataStreams);
  ReadTrigger(dataStreams);
  SetTriggerDDLs();
  SetManus();
  ReadBusPatchSpecial(dataStreams);
  SetPatchModules();
  ReadBusPatchInfo(dataStreams);
}

//______________________________________________________________________________
AliMpDDLStore::AliMpDDLStore(TRootIOCtor* ioCtor)
        : TObject(),
        fDDLs(),
        fBusPatches(ioCtor),
        fRegionalTrigger(ioCtor)
{
    /// Constructor for I0

    AliDebug(1,"");

    fgInstance = this;
}


//______________________________________________________________________________
AliMpDDLStore::~AliMpDDLStore() 
{
    /// Destructor

    AliDebug(1,"");

    // DDL objects are deleted with fDDLs
    // Bus patches objects are deleted with fBusPatches

    fgInstance = 0;
}

//
// private methods
//

//______________________________________________________________________________
Int_t  AliMpDDLStore::GetManuListIndex(Int_t detElemId) const 
{
    /// Return the index of the manu list for given detElemId

    return AliMpDEManager::GetChamberId(detElemId)*4 + (detElemId % 100);
}


//______________________________________________________________________________
Int_t AliMpDDLStore::GetBusPatchIndex(Int_t detElemId, Int_t manuId) const 
{
    /// Calculate the index of the buspatch from manuId

    Int_t pos = 0;
    AliMp::StationType stationType = AliMpDEManager::GetStationType(detElemId);
    static Int_t manuMask = AliMpConstants::ManuMask(AliMp::kNonBendingPlane) - 1;

    if( stationType == AliMp::kStation345) {
        pos = (manuId & manuMask)/100;
    } else {
        Int_t idx = GetManuListIndex(detElemId);

        // using array defined from DetElemIdToBusPatch.dat file
        for (pos = fManuList12[idx].GetSize()-1; pos >= 0; --pos)
            if ( manuId >= fManuList12[idx].At(pos))
                break;
    }

    return pos;
}

//______________________________________________________________________________
Bool_t AliMpDDLStore::ReadDDLs(const AliMpDataStreams& dataStreams)
{
    /// Read ddl <-> bus patch file

    istream& in 
      = dataStreams.
          CreateDataStream(AliMpFiles::BusPatchFilePath());

    char line[255];

    while ( in.getline(line,255) ) {

        if ( line[0] == '#' )
            continue;

        TString tmp(AliMpHelper::Normalize(line));

        TObjArray* stringList = tmp.Tokenize(TString(" "));

        TString sDE = ((TObjString*)stringList->At(0))->GetString();
        Int_t idDE  = atoi(sDE.Data());

        if ( ! AliMpDEManager::IsValidDetElemId(idDE, false) ) {
            AliErrorStream() << "DetElemId "<< idDE << " not valid." << endl;
            delete stringList;
	    return false;
        }

        TString busPatch = ((TObjString*)stringList->At(1))->GetString();


        TString sDDL = ((TObjString*)stringList->At(2))->GetString();
        Int_t  iDDL  = atoi(sDDL.Data());

        if ( iDDL < 0 || iDDL >= fgkNofDDLs ) {
            AliErrorStream() << "DDL id "<< iDDL << " outside limits." << endl;
            delete stringList;
	    return false;
        }

        AliDebugStream(3)
        << "idDE " << idDE << " buspatch " << busPatch.Data() << " iDDL " << iDDL
        << endl;

        // reading 1st manu Id for each bus patch (station 1 & 2)
        if(AliMpDEManager::GetStationType(idDE) != AliMp::kStation345) {

            TString sManu = ((TObjString*)stringList->At(3))->GetString();
            AliMpHelper::DecodeName(sManu,',',fManuList12[GetManuListIndex(idDE)]);

            if(AliMpDEManager::GetStation12Type(idDE) == AliMq::kStation2) {
                TString sManuBridge = ((TObjString*)stringList->At(4))->GetString();
                AliMpHelper::DecodeName(sManuBridge,',',fManuBridge2[GetManuListIndex(idDE)]);
            }

        }

        delete stringList;

        AliMpDDL* ddl = GetDDL(iDDL, false);
        if ( !ddl) {
            ddl = new AliMpDDL(iDDL);
            fDDLs.AddAt(ddl, iDDL);
        }
        ddl->AddDE(idDE);

        TArrayI busPatchList;
        // decoding range of buspatch
        AliMpHelper::DecodeName(busPatch,';',busPatchList);

        // Update DE
        AliMpDetElement* de = AliMpDEManager::GetDetElement(idDE);
        de->SetDdlId(iDDL);
        // filling buspatch -> idDE
        for (Int_t i = 0; i < busPatchList.GetSize(); i++) {
            fBusPatches.Add(busPatchList[i],
                            new AliMpBusPatch(busPatchList[i], idDE, iDDL));
            de->AddBusPatch(busPatchList[i]);
        }
    }

    // Fill bus patch Ids array in DDLs now
    for ( Int_t i=0; i<fDDLs.GetEntriesFast(); i++ ) {
        AliMpDDL* ddl = (AliMpDDL*) fDDLs.At(i);
        ddl->FillBusPatchIds();
    }

    delete &in;
    return true;
}

//______________________________________________________________________________
Bool_t  AliMpDDLStore::ReadTrigger(const AliMpDataStreams& dataStreams)
{
    /// create trigger DDL object and Global crate object
  
  if ( ! fRegionalTrigger.ReadData(dataStreams) ) return false;

  return true;
}

//______________________________________________________________________________
Bool_t  
AliMpDDLStore::SetTriggerDDLs() 
{
  /// Create trigger DDLs and set DDL Ids in the regional trigger

  Int_t iDDL = -1;
  TIter next(fRegionalTrigger.CreateCrateIterator());
  AliMpTriggerCrate* crate;
  
  while ( ( crate = static_cast<AliMpTriggerCrate*>(next()) ) )
  {
    TString crateName = crate->GetName();

    // determine ddl number vs crate side
    if (crateName.Contains("R"))
      iDDL = fgkNofDDLs; // starts where tracker ends
    else
      iDDL = fgkNofDDLs + 1;

    // Create DDL if it does not yet exist and set it to the crate
    AliMpDDL* ddl = (AliMpDDL*)fDDLs.At(iDDL);
    if ( !ddl) {
      ddl = new AliMpDDL(iDDL);
      fDDLs.AddAt(ddl, iDDL);
    }
    crate->SetDdlId(iDDL);
    
    
    // Add trigger crate number for given ddl if not present
    if ( !ddl->HasTriggerCrateId(crate->GetId()) )
      ddl->AddTriggerCrate(crate->GetId());
    
    
    // Loop over local boards in this crate

    for ( Int_t j=0; j<crate->GetNofLocalBoards(); ++j ) 
    {
      Int_t localBoardId = crate->GetLocalBoardId(j);
      AliMpLocalBoard* localBoard 
        = fRegionalTrigger.FindLocalBoard(localBoardId);
      if (!localBoard ) {
        AliFatalClass("Cannot find local board.");
        return kFALSE;
      }   
      
      // Loop over DEs in this localBoard 
        
      for ( Int_t k=0; k<localBoard->GetNofDEs(); ++k ) 
      {
    
        Int_t deId = localBoard->GetDEId(k);
        AliMpDetElement* de = AliMpDEManager::GetDetElement(deId);

        if ( de->GetDdlId() == -1 ) de->SetDdlId(iDDL);

        if ( ! ddl->HasDEId(deId) ) ddl->AddDE(deId);
      }   
    }
  }
  return kTRUE;
}

//______________________________________________________________________________
Bool_t AliMpDDLStore::SetManus() 
{
    /// Set manus for each bus patch

    Int_t manuMask = AliMpConstants::ManuMask(AliMp::kNonBendingPlane) - 1;

    // loop over DDL
    for (Int_t iDDL = 0; iDDL < fgkNofDDLs; ++iDDL) {

        AliDebug(3, Form("DDL # %d\n", iDDL));

        AliMpDDL* ddl = GetDDL(iDDL);

        // loop over DE in the given DDL
        for (Int_t detElemIdx = 0; detElemIdx < ddl->GetNofDEs(); ++detElemIdx) {

            Int_t detElemId = ddl->GetDEId(detElemIdx);

            AliMpDetElement* detElement = GetDetElement(detElemId);

            AliMp::StationType stationType = AliMpDEManager::GetStationType(detElemId);


            // list of manu per DE on both cathode
            TList manuList;
            for ( Int_t cath = 0; cath < 2 ; ++cath ) {
                const AliMpVSegmentation* seg
                = AliMpSegmentation::Instance()->GetMpSegmentation(detElemId,AliMp::GetCathodType(cath));

                AliMp::PlaneType planeType = detElement->GetPlaneType(AliMp::GetCathodType(cath));

                TArrayI manus;
                seg->GetAllElectronicCardIDs(manus);

                // filling TList manu
                for ( Int_t im = 0; im < manus.GetSize(); ++im ) {

                    AliMpIntPair* manu = 0x0;
                    if( stationType == AliMp::kStation345)
                        manu = new AliMpIntPair((manus[im] & manuMask), planeType, kTRUE); //remove offset for NB
                    else
                        manu = new AliMpIntPair(manus[im], planeType, kTRUE); //keep offset for NB

                    manuList.Add(manu);

                    detElement->AddManu(manus[im]);
                }
            }// cathode

            manuList.Sort(); // sort regardless B or NB plane

            // filling manu to the corresponding buspatch
            for (Int_t iEntry = 0; iEntry < manuList.GetEntries(); ++iEntry) {

                AliMpIntPair* manuPtr = (AliMpIntPair*)manuList.At(iEntry);

                Int_t manuId = manuPtr->GetFirst();
                Int_t pos    = GetBusPatchIndex(detElemId, manuId);

                if (pos > detElement->GetNofBusPatches()) {
                    AliError(Form("pos greater %d than size %d manuId %d detElemId %d \n",
                                  pos, detElement->GetNofBusPatches(), manuId, detElemId));
                    return false;
                }

                // get buspatch and fill manus
                Int_t busPatchId = detElement->GetBusPatchId(pos);
                AliMpBusPatch* busPatch = GetBusPatch(busPatchId);

                if( stationType == AliMp::kStation345) {

                    if (manuPtr->GetSecond())
                        busPatch->AddManu(manuId+manuMask+1); // add offset again after sorted
                    else
                        busPatch->AddManu(manuId);

                } else {

                    busPatch->AddManu(manuId);

                }
            }

            manuList.Delete();

            if (AliDebugLevel() == 3) {

                // print out for checking
                for(Int_t pos = 0; pos < detElement->GetNofBusPatches(); ++pos) {
                    Int_t busPatchId = detElement->GetBusPatchId(pos);
                    AliMpBusPatch* busPatch = GetBusPatch(busPatchId);
                    printf("BusPatch: %d\n", busPatch->GetId());
                    for (Int_t iEntry = 0; iEntry < busPatch->GetNofManus(); ++iEntry)
                        printf("manu Id: %d\n", busPatch->GetManuId(iEntry));
                }
            }

        } // detection element loop
    }// DDL loop

    return true;
}

//______________________________________________________________________________
Bool_t AliMpDDLStore::ReadBusPatchSpecial(const AliMpDataStreams& dataStreams)
{
/// Read file with bus patches with a special order of manus
/// and reset the manus arrays filled via SetManu function

  istream& in 
    = dataStreams.
        CreateDataStream(AliMpFiles::BusPatchSpecialFilePath());

  char line[255];

  while ( in.getline(line,255) ) {

    if ( line[0] == '#' ) continue;

    TString tmp(AliMpHelper::Normalize(line));
    TObjArray* stringList = tmp.Tokenize(TString(" "));

    TString sKey = ((TObjString*)stringList->At(0))->GetString();
    
    TString sDDL = ((TObjString*)stringList->At(1))->GetString();
    TArrayI ddlList;
    AliMpHelper::DecodeName(sDDL,';',ddlList);

    TString sBusPatch = ((TObjString*)stringList->At(2))->GetString();
    TArrayI busPatchList;
    AliMpHelper::DecodeName(sBusPatch,',',busPatchList);
    
    // Loop over DDL and Bus Patch
    for (Int_t iDDL = 0; iDDL < ddlList.GetSize(); ++iDDL ) {
      for (Int_t iBusPatch = 0; iBusPatch < busPatchList.GetSize(); ++iBusPatch) {
        // Global bus patch ID
        Int_t busPatchID 
          = AliMpBusPatch::GetGlobalBusID(
              busPatchList.At(iBusPatch), ddlList.At(iDDL));
        
        // Get this bus patch
        AliMpBusPatch* busPatch = GetBusPatch(busPatchID);
        if ( ! busPatch ) {
          AliErrorStream() << "Bus patch " << busPatchID << " does not exist." << endl;
          delete stringList;
	  return kFALSE;
        }
     
        if ( sKey == GetRevertKeyword() ) {
          AliDebugStream(3)
            << "Reverting readout of bus patch " << busPatchID  << endl;
        
          // Now revert the manus in this bus patch
          busPatch->RevertReadout();     
        }
        else if ( sKey == GetExplicitKeyword() ) {
        
          busPatch->ResetReadout();

          TString sManus = ((TObjString*)stringList->At(3))->GetString();
          TArrayI manuList;
          AliMpHelper::DecodeName(sManus,',',manuList);

          AliDebugStream(3)
            << "Reseting readout of bus patch " << busPatchID  
            << "  manus: " << sManus.Data() << endl;

          for (Int_t i = 0; i < manuList.GetSize(); i++) {
            busPatch->AddManu(manuList.At(i));
          }
        }
        else {             
          AliErrorStream() << "Unrecognized key." << endl;
          delete stringList;
	  return kFALSE;
        }
      }
    }
    delete stringList;
  }
  
  delete &in;
  
  return kTRUE;
}    
 

//______________________________________________________________________________
Bool_t AliMpDDLStore::SetPatchModules() 
{
    /// Compute the number of manu per PCB for each buspatch

    AliMpDEIterator it;
    Bool_t result = true;

    for ( it.First(); !it.IsDone(); it.Next() ) {

        AliMpDetElement* detElement = it.CurrentDE();

        for (Int_t i = 0; i < detElement->GetNofBusPatches(); ++i) {
            AliMpBusPatch* busPatch = GetBusPatch(detElement->GetBusPatchId(i));
            Bool_t newResult = false;
            Int_t idDE = busPatch->GetDEId();

            if (AliMpDEManager::GetStation12Type(idDE) == AliMq::kStation2 )
                newResult = busPatch->SetNofManusPerModule(fManuBridge2[GetManuListIndex(idDE)].At(i));
            else
                newResult = busPatch->SetNofManusPerModule();
            result = result && newResult;
        }
    }

    return result;
}

//______________________________________________________________________________
Bool_t AliMpDDLStore::ReadBusPatchInfo(const AliMpDataStreams& dataStreams)
{
    /// read the buspatch info file and set buspatch info

    istream& in 
      = dataStreams.
          CreateDataStream(AliMpFiles::BusPatchInfoFilePath());

    char line[255];

    for (Int_t iDDL = 0; iDDL < fgkNofDDLs; ++iDDL ) {
        AliMpDDL* ddl = GetDDL(iDDL);

        for (Int_t iBusPatch = 0; iBusPatch < ddl->GetNofBusPatches(); ++iBusPatch) {

            do {
                if (!in.getline(line,255)) {
                    AliWarning(Form("Wrong size in bus patch length file; index %d DDL %d",
                                    iBusPatch, iDDL));
                    return false;
                }
            } while(line[0] == '#');

            TString tmp(AliMpHelper::Normalize(line));

            TObjArray* stringList = tmp.Tokenize(TString(" "));

            // Crocus label
            TString crLabel    = ((TObjString*)stringList->At(0))->GetString();
            Int_t pos          = crLabel.First('-');
            tmp                = crLabel(pos-2, crLabel.Length()-pos+2);
            TArrayI list;
            AliMpHelper::DecodeName(tmp.Data(), '-', list);
            
            Int_t localDDLId  = list[0];
            Int_t frtId       = list[1] - 1; // begin at zero ! 
            Int_t localBusId  = list[2];

            // Add FRT number for given ddl if not present
            if ( !ddl->HasFrtId(frtId) )
              ddl->AddFrt(frtId);

            // BP & translator label
            TString label      = ((TObjString*)stringList->At(1))->GetString();
            TString transLabel = ((TObjString*)stringList->At(2))->GetString();

            // BP length
            TString sLength    = ((TObjString*)stringList->At(3))->GetString();
            Float_t length     = sLength.Atof();

            delete stringList;
                       
            if (localBusId != iBusPatch + 1)
               AliWarning(Form("Wrong local buspatch id %d instead of %d", iBusPatch+1, localBusId));
               
            if(localDDLId != ddl->GetId()+1)
                AliWarning(Form("Wrong local DDL id %d instead of %d", ddl->GetId()+1, localDDLId));

            Int_t busPatchId = ddl->GetBusPatchId(iBusPatch);
            AliMpBusPatch* busPatch = GetBusPatch(busPatchId);
            busPatch->SetCableLength(length);
            busPatch->SetCableLabel(label);
            busPatch->SetTranslatorLabel(transLabel);
            busPatch->SetFrtId(frtId);

        }
    }
    
    delete &in;

    return true;
}


//________________________________________________________________
Int_t AliMpDDLStore::GetLocalBoardId(TString name) const {
    /// return the first board with a given side and line

  TIter next(fRegionalTrigger.CreateLocalBoardIterator());
  AliMpLocalBoard* local;
  
  while ( ( local = static_cast<AliMpLocalBoard*>(next()) ) )
  {
        TString tmp(&local->GetName()[4], 2);
        if (name.Contains(tmp))
            if (name[0] == local->GetName()[0])
                return local->GetId();
    }

    return 0;
}

//
// public methods
//


//______________________________________________________________________________
AliMpDDL* AliMpDDLStore::GetDDL(Int_t ddlId, Bool_t warn) const {
    /// Return DDL for given ddlId

    AliMpDDL* ddl
    = (AliMpDDL*)fDDLs.At(ddlId);

    if ( ! ddl && warn ) {
        AliErrorStream()
        << "DDL with Id = " << ddlId << " not defined." << endl;
    }

    return ddl;
}

//______________________________________________________________________________
AliMpDetElement*  AliMpDDLStore::GetDetElement(Int_t detElemId, Bool_t warn) const {
    /// Return detection element with given detElemId

    if ( ! AliMpDEStore::Instance() ) {
        AliFatal("DE Store has not been loaded.");
        return 0;
    }

    return AliMpDEStore::Instance()->GetDetElement(detElemId, warn);
}

//______________________________________________________________________________
AliMpBusPatch* AliMpDDLStore::GetBusPatch(Int_t busPatchId, Bool_t warn) const {
    /// Return bus patch with given Id

    AliMpBusPatch* busPatch
    = (AliMpBusPatch*) fBusPatches.GetValue(busPatchId);

    if ( ! busPatch && warn ) {
        AliErrorStream()
        << "Bus patch with Id = " << busPatchId << " not defined." << endl;
    }

    return busPatch;
}


//______________________________________________________________________________
AliMpLocalBoard* AliMpDDLStore::GetLocalBoard(Int_t localBoardId, Bool_t warn) const {
    /// Return bus patch with given Id

    return fRegionalTrigger.FindLocalBoard(localBoardId, warn);
}

//______________________________________________________________________________
AliMpTriggerCrate* AliMpDDLStore::GetTriggerCrate(TString name, Bool_t warn) const  {
    /// Return trigger crate with given name

    return fRegionalTrigger.FindTriggerCrate(name, warn);
}

//______________________________________________________________________________
AliMpTriggerCrate* AliMpDDLStore::GetTriggerCrate(Int_t ddlId, Int_t index, Bool_t warn) const  {
    /// Return trigger crate with given ddl and index crate

    if (ddlId == 0 || ddlId == 1)
        ddlId += fgkNofDDLs;

    AliMpDDL* ddl = GetDDL(ddlId, warn);
    if ( ! ddl )
        return 0;

    if ( index >= ddl->GetNofTriggerCrates() ) {
        AliError(Form("crate id %d greater than array[%d]", index, ddl->GetNofTriggerCrates()));
        return 0;
    }

    TString name = AliMpTriggerCrate::GenerateName(index, ddlId, fgkNofDDLs);

    return GetTriggerCrate(name, warn);
}

//______________________________________________________________________________
Int_t  AliMpDDLStore::GetDEfromBus(Int_t busPatchId) const {
    /// Return detection element Id for given busPatchId

    AliMpBusPatch* busPatch = GetBusPatch(busPatchId);

    if ( ! busPatch ) {
        AliErrorStream()
        << "Bus patch with Id = " << busPatchId << " not defined." << endl;
        return 0;
    }

    return busPatch->GetDEId();
}

//______________________________________________________________________________
Int_t  AliMpDDLStore::GetDEfromLocalBoard(Int_t localBoardId, Int_t chamberId) const {
    /// Return detElemId for local board Id and chamber id.

    AliMpLocalBoard* localBoard = GetLocalBoard(localBoardId);

    if ( ! localBoard ) {
        AliErrorStream()
        << "Loacl board with Id = " << localBoardId << " not defined." << endl;
        return 0;
    }

    return localBoard->GetDEIdByChamber(chamberId);
}

//______________________________________________________________________________
Int_t  AliMpDDLStore::GetDDLfromBus(Int_t busPatchId) const {
    /// Return DDL Id for given busPatchId

    AliMpBusPatch* busPatch = GetBusPatch(busPatchId);

    if ( ! busPatch ) {
        AliErrorStream()
        << "Bus patch with Id = " << busPatchId << " not defined." << endl;
        return 0;
    }

    return busPatch->GetDdlId();
}

//______________________________________________________________________________
Int_t AliMpDDLStore::GetBusPatchId(Int_t detElemId, Int_t manuId) const {
    /// Return bus patch for a given manuId

    AliMpDetElement* detElement = GetDetElement(detElemId);
    Int_t pos = GetBusPatchIndex(detElemId, manuId);

    if ( pos >= detElement->GetNofBusPatches() ) 
    {
        AliErrorStream()
        << "Pos = " << pos
        << " greater than the size = " <<  detElement->GetNofBusPatches()
        << " for detElemId = " << detElemId
        << " manuId = " << manuId << endl;
        return -1;
    }

    return detElement->GetBusPatchId(pos);
}


//______________________________________________________________________________
Long_t AliMpDDLStore::GetLinkPortId(Int_t busPatchId) const {

    /// Get link port and DSP from busPatch id.
    /// Return -1 if the value is not valid 
    /// (the validity has to be tested in the client code)

    AliMpBusPatch* busPatch = GetBusPatch(busPatchId);
    Int_t ddlId = busPatch->GetDdlId();
        
    Int_t localBusPatchId = AliMpBusPatch::GetLocalBusID(busPatchId, ddlId) - 1; // begin at zero

    Int_t pos = (localBusPatchId % AliMpFrtCrocusConstants::GetNofBusPatches()); 
    
    return AliMpFrtCrocusConstants::GetLinkPortId(pos);

}

//______________________________________________________________________________
void AliMpDDLStore::PrintAllManu() const {
    /// Print all manu Ids and their serial numbers sorted by detection element
    /// and bus patch.                                                            \n
    /// As serial manu numbers are filled in a different way than manu Ids this
    /// printing allows to check that both ways are consistent

    // Loop over DE
    AliMpDEIterator it;
    for ( it.First(); ! it.IsDone(); it.Next() ) {
        AliMpDetElement* de = it.CurrentDE();
        cout << "DE: " << de->GetId() << endl;

        // Loop over bus patches in this DE
        for ( Int_t i=0; i< de->GetNofBusPatches(); ++i ) {

            AliMpBusPatch* busPatch = GetBusPatch(de->GetBusPatchId(i));
            cout << "  busPatch: " << busPatch->GetId() << endl;

            cout << "    Manu       : ";
            for ( Int_t j=0; j<busPatch->GetNofManus(); ++j ) {
                cout << std::setw(6) << busPatch->GetManuId(j) << " ";
            }
            cout << endl;

            if ( AliMpManuStore::Instance(kFALSE) ) {
              cout << "    Manu serial: ";
              for ( Int_t k=0; k<busPatch->GetNofManus(); ++k ) {
                cout << std::setw(6) 
                     << AliMpManuStore::Instance()
                        ->GetManuSerial(de->GetId(), busPatch->GetManuId(k)) << " ";
              }
              cout << endl;
            }  
        }
    }
}

//______________________________________________________________________________
Int_t  AliMpDDLStore::GetNextDEfromLocalBoard(Int_t localBoardId, Int_t chamberId ) const {
    /// return the next detection element in line

    AliMpLocalBoard* localBoard  =  GetLocalBoard(localBoardId);

    TString name(localBoard->GetName());

    Int_t line = AliMp::PairFirst(localBoard->GetPosition());
    ++line;

    name.Replace(4,1,Form("%d", line));

    Int_t nextLocalId;
    if ((nextLocalId = GetLocalBoardId(name)))
        return GetDEfromLocalBoard(nextLocalId, chamberId);
    else
        return 0;

    return 0;
}

//______________________________________________________________________________
Int_t  AliMpDDLStore::GetPreviousDEfromLocalBoard(Int_t localBoardId, Int_t chamberId) const {
    /// return the previous detection element in line

    AliMpLocalBoard* localBoard  =  GetLocalBoard(localBoardId);

    TString name(localBoard->GetName());

    Int_t line = AliMp::PairFirst(localBoard->GetPosition());
    --line;

    name.Replace(4,1,Form("%d", line));

    Int_t prevLocalId;
    if ((prevLocalId = GetLocalBoardId(name)))
        return GetDEfromLocalBoard(prevLocalId, chamberId);
    else
        return 0;

}

//______________________________________________________________________________
void AliMpDDLStore::SetRegionalTrigger(const AliMpRegionalTrigger& regionalTrigger)
{
/// Replace the existing regional trigger with the given one

  fRegionalTrigger = regionalTrigger;
  
  // Remove the existing trigger DDLsf
  fDDLs.RemoveAt(fgkNofDDLs+1);
  fDDLs.RemoveAt(fgkNofDDLs);
  
  // Set new trigger DDLs from new regional trigger
  SetTriggerDDLs();
}  


//______________________________________________________________________________
TIterator* 
AliMpDDLStore::CreateBusPatchIterator() const
{
/// Create the iterator over bus patches

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