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 "AliMUONTriggerCrateStore.h"
#include "AliMpExMapIterator.h"
#include "AliMUONTriggerCrate.h"
#include "AliMUONLocalTriggerBoard.h"
#include "AliMUONRegionalTriggerBoard.h"
#include "AliMUONRegionalTriggerConfig.h"
#include "AliMUONGlobalCrateConfig.h"
#include "AliMUONTriggerCrateConfig.h"
#include "AliMUONCalibrationData.h"
#include "AliMUONTriggerLut.h"

#include "AliMpTriggerCrate.h"
#include "AliMpLocalBoard.h"
#include "AliMpDDLStore.h"
#include "AliMpExMap.h"
#include "AliLog.h"

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

#include <cstdio>

//-----------------------------------------------------------------------------
/// \class AliMUONTriggerCrateStore
/// 
/// A container of trigger crate objects that offers iteration
/// over both the crates themselves and the local boards they contain
///
/// \author Laurent Aphecetche
//-----------------------------------------------------------------------------

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

//_____________________________________________________________________________
AliMUONTriggerCrateStore::AliMUONTriggerCrateStore()
: TObject(),
fCrates(0x0),
fLocalBoards(0x0)
{
/// Default constructor
}

//_____________________________________________________________________________
AliMUONTriggerCrateStore::~AliMUONTriggerCrateStore()
{
/// Destructor
  delete fCrates;
  delete fLocalBoards;
}

//_____________________________________________________________________________
void 
AliMUONTriggerCrateStore::AddCrate(const char *name)
{
  /// create and add a crate to our map
  if (!fCrates)
  {
    AliError("Object not properly initialized");
    return;
  }

  AliDebug(1,Form("Adding crate %s",name));
  TObject* there = fCrates->GetValue(name);
  if (there)
  {
    AliError(Form("Cannot add crate %s because it's already there !",name));
  }
  else
  {
    fCrates->Add(name,new AliMUONTriggerCrate(name,17));
  }
}

//_____________________________________________________________________________
AliMUONLocalTriggerBoard* 
AliMUONTriggerCrateStore::LocalBoard(Int_t boardNumber) const
{
  /// return a board by number
  
  if ( !fLocalBoards )
  {
    AliError("Object not properly initialized");
    return 0x0;
  }

  return static_cast<AliMUONLocalTriggerBoard*>(fLocalBoards->GetValue(boardNumber));
}

//_____________________________________________________________________________
TIterator*
AliMUONTriggerCrateStore::CreateCrateIterator() const
{
  /// Create iterator over crates

  return fCrates ? fCrates->CreateIterator() : 0x0;
}

//_____________________________________________________________________________
TIterator*
AliMUONTriggerCrateStore::CreateLocalBoardIterator() const
{
  /// Create iterator over local boards

  return fLocalBoards ? fLocalBoards->CreateIterator() : 0x0;
}

//_____________________________________________________________________________
AliMUONTriggerCrate* 
AliMUONTriggerCrateStore::Crate(const char *name) const
{
  /// return a crate by name
  if ( !fCrates )
  {
    AliError("Object not properly initialized");
    return 0x0;
  }
  return static_cast<AliMUONTriggerCrate*>(fCrates->GetValue(name));
}

// to be removed once AliMUONDigitMaker is linked with new mapping
//_____________________________________________________________________________
AliMUONTriggerCrate* 
AliMUONTriggerCrateStore::Crate(Int_t ddl, Int_t reg) const
{
  /// return a crate by name
  if ( !fCrates )
  {
    AliError("Object not properly initialized");
    return 0x0;
  }
  TString name = GetCrateName(ddl, reg);
  return static_cast<AliMUONTriggerCrate*>(fCrates->GetValue(name.Data()));
}
//____________________________________________________________________
TString AliMUONTriggerCrateStore::GetCrateName(Int_t ddl, Int_t reg) const
{
  /// set crate name from DDL & reg number

  Char_t name[10];
  switch(reg) {
      case 0:
      case 1:
	snprintf(name,10,"%d", reg+1);
	break;
      case 2:
	strcpy(name, "2-3");
	break;
      case 3:
      case 4:
      case 5:
      case 6:
      case 7:
	snprintf(name,10,"%d", reg);
	break;
  }

  // crate Right for first DDL
  if (ddl == 0)
    strncat(name, "R", 1);
  else 
    strncat(name, "L", 1); 

  return TString(name);
}
//_____________________________________________________________________________
Int_t
AliMUONTriggerCrateStore::NumberOfCrates() const
{
  /// Number of crates we're holding
  if ( fCrates ) return fCrates->GetSize();
  return 0;
}

//_____________________________________________________________________________
Int_t
AliMUONTriggerCrateStore::NumberOfLocalBoards() const
{
  /// Number of local boards we're holding
  if ( fLocalBoards ) return fLocalBoards->GetSize();
  return 0;
}

//_____________________________________________________________________________
void
AliMUONTriggerCrateStore::ReadFromFile(AliMUONCalibrationData* calibData) 
{
  /// create crate and local board objects from mapping & calib (Ch.F)
    fCrates = new AliMpExMap;
    fCrates->SetOwner(kTRUE);
    fLocalBoards = new AliMpExMap;
    fLocalBoards->SetOwner(kFALSE);
  
  
   AliMUONTriggerLut* lut = calibData->TriggerLut();

  if (!lut)
   AliWarning("No valid trigger LUT in CDB");
  
  AliMUONRegionalTriggerConfig* regionalConfig = calibData->RegionalTriggerConfig();
  if (!regionalConfig) {
     AliError("No valid regional trigger configuration in CDB");
     return;
  }   
  
  TIter next(AliMpDDLStore::Instance()->GetRegionalTrigger()->CreateCrateIterator());
  AliMpTriggerCrate* crateMapping;
  
  while ( ( crateMapping = static_cast<AliMpTriggerCrate*>(next()) ) )
    {
    
      TString crateName = crateMapping->GetName();
      AliMUONTriggerCrate *crate = Crate(crateName.Data());
    
    AliMUONTriggerCrateConfig* crateConfig =  regionalConfig->FindTriggerCrate(crateName);

      if (!crate) 
      {
	AddCrate(crateName.Data()); 
	crate = Crate(crateName.Data());
	AliDebug(3, Form("crate name %s\n", crateName.Data()));
	AliMUONRegionalTriggerBoard *rboard = new AliMUONRegionalTriggerBoard();
	crate->AddBoard(rboard, 0);
      }   
	
      for(Int_t iLocal = 0; iLocal < crateMapping->GetNofLocalBoards(); ++iLocal) { 
      
	Int_t localBoardId = crateMapping->GetLocalBoardId(iLocal);
	if (!localBoardId) continue; //empty slot, should not happen

	AliMpLocalBoard* localBoardMapping = AliMpDDLStore::Instance()->GetLocalBoard(localBoardId);
	AliDebug(3, Form("local name %s id %d\n", localBoardMapping->GetName(), localBoardId));
      
	Int_t slot = localBoardMapping->GetSlot();
      AliMUONLocalTriggerBoard *board = new AliMUONLocalTriggerBoard(localBoardMapping);
      board->SetCoinc44(crateConfig->GetCoinc());
      board->SetLUT(lut);

      
    fLocalBoards->Add(localBoardId, board);
      
	crate->AddBoard(board, slot);
      
      } // iLocal
    } // while
}

 AliMUONTriggerCrateStore.cxx:1
 AliMUONTriggerCrateStore.cxx:2
 AliMUONTriggerCrateStore.cxx:3
 AliMUONTriggerCrateStore.cxx:4
 AliMUONTriggerCrateStore.cxx:5
 AliMUONTriggerCrateStore.cxx:6
 AliMUONTriggerCrateStore.cxx:7
 AliMUONTriggerCrateStore.cxx:8
 AliMUONTriggerCrateStore.cxx:9
 AliMUONTriggerCrateStore.cxx:10
 AliMUONTriggerCrateStore.cxx:11
 AliMUONTriggerCrateStore.cxx:12
 AliMUONTriggerCrateStore.cxx:13
 AliMUONTriggerCrateStore.cxx:14
 AliMUONTriggerCrateStore.cxx:15
 AliMUONTriggerCrateStore.cxx:16
 AliMUONTriggerCrateStore.cxx:17
 AliMUONTriggerCrateStore.cxx:18
 AliMUONTriggerCrateStore.cxx:19
 AliMUONTriggerCrateStore.cxx:20
 AliMUONTriggerCrateStore.cxx:21
 AliMUONTriggerCrateStore.cxx:22
 AliMUONTriggerCrateStore.cxx:23
 AliMUONTriggerCrateStore.cxx:24
 AliMUONTriggerCrateStore.cxx:25
 AliMUONTriggerCrateStore.cxx:26
 AliMUONTriggerCrateStore.cxx:27
 AliMUONTriggerCrateStore.cxx:28
 AliMUONTriggerCrateStore.cxx:29
 AliMUONTriggerCrateStore.cxx:30
 AliMUONTriggerCrateStore.cxx:31
 AliMUONTriggerCrateStore.cxx:32
 AliMUONTriggerCrateStore.cxx:33
 AliMUONTriggerCrateStore.cxx:34
 AliMUONTriggerCrateStore.cxx:35
 AliMUONTriggerCrateStore.cxx:36
 AliMUONTriggerCrateStore.cxx:37
 AliMUONTriggerCrateStore.cxx:38
 AliMUONTriggerCrateStore.cxx:39
 AliMUONTriggerCrateStore.cxx:40
 AliMUONTriggerCrateStore.cxx:41
 AliMUONTriggerCrateStore.cxx:42
 AliMUONTriggerCrateStore.cxx:43
 AliMUONTriggerCrateStore.cxx:44
 AliMUONTriggerCrateStore.cxx:45
 AliMUONTriggerCrateStore.cxx:46
 AliMUONTriggerCrateStore.cxx:47
 AliMUONTriggerCrateStore.cxx:48
 AliMUONTriggerCrateStore.cxx:49
 AliMUONTriggerCrateStore.cxx:50
 AliMUONTriggerCrateStore.cxx:51
 AliMUONTriggerCrateStore.cxx:52
 AliMUONTriggerCrateStore.cxx:53
 AliMUONTriggerCrateStore.cxx:54
 AliMUONTriggerCrateStore.cxx:55
 AliMUONTriggerCrateStore.cxx:56
 AliMUONTriggerCrateStore.cxx:57
 AliMUONTriggerCrateStore.cxx:58
 AliMUONTriggerCrateStore.cxx:59
 AliMUONTriggerCrateStore.cxx:60
 AliMUONTriggerCrateStore.cxx:61
 AliMUONTriggerCrateStore.cxx:62
 AliMUONTriggerCrateStore.cxx:63
 AliMUONTriggerCrateStore.cxx:64
 AliMUONTriggerCrateStore.cxx:65
 AliMUONTriggerCrateStore.cxx:66
 AliMUONTriggerCrateStore.cxx:67
 AliMUONTriggerCrateStore.cxx:68
 AliMUONTriggerCrateStore.cxx:69
 AliMUONTriggerCrateStore.cxx:70
 AliMUONTriggerCrateStore.cxx:71
 AliMUONTriggerCrateStore.cxx:72
 AliMUONTriggerCrateStore.cxx:73
 AliMUONTriggerCrateStore.cxx:74
 AliMUONTriggerCrateStore.cxx:75
 AliMUONTriggerCrateStore.cxx:76
 AliMUONTriggerCrateStore.cxx:77
 AliMUONTriggerCrateStore.cxx:78
 AliMUONTriggerCrateStore.cxx:79
 AliMUONTriggerCrateStore.cxx:80
 AliMUONTriggerCrateStore.cxx:81
 AliMUONTriggerCrateStore.cxx:82
 AliMUONTriggerCrateStore.cxx:83
 AliMUONTriggerCrateStore.cxx:84
 AliMUONTriggerCrateStore.cxx:85
 AliMUONTriggerCrateStore.cxx:86
 AliMUONTriggerCrateStore.cxx:87
 AliMUONTriggerCrateStore.cxx:88
 AliMUONTriggerCrateStore.cxx:89
 AliMUONTriggerCrateStore.cxx:90
 AliMUONTriggerCrateStore.cxx:91
 AliMUONTriggerCrateStore.cxx:92
 AliMUONTriggerCrateStore.cxx:93
 AliMUONTriggerCrateStore.cxx:94
 AliMUONTriggerCrateStore.cxx:95
 AliMUONTriggerCrateStore.cxx:96
 AliMUONTriggerCrateStore.cxx:97
 AliMUONTriggerCrateStore.cxx:98
 AliMUONTriggerCrateStore.cxx:99
 AliMUONTriggerCrateStore.cxx:100
 AliMUONTriggerCrateStore.cxx:101
 AliMUONTriggerCrateStore.cxx:102
 AliMUONTriggerCrateStore.cxx:103
 AliMUONTriggerCrateStore.cxx:104
 AliMUONTriggerCrateStore.cxx:105
 AliMUONTriggerCrateStore.cxx:106
 AliMUONTriggerCrateStore.cxx:107
 AliMUONTriggerCrateStore.cxx:108
 AliMUONTriggerCrateStore.cxx:109
 AliMUONTriggerCrateStore.cxx:110
 AliMUONTriggerCrateStore.cxx:111
 AliMUONTriggerCrateStore.cxx:112
 AliMUONTriggerCrateStore.cxx:113
 AliMUONTriggerCrateStore.cxx:114
 AliMUONTriggerCrateStore.cxx:115
 AliMUONTriggerCrateStore.cxx:116
 AliMUONTriggerCrateStore.cxx:117
 AliMUONTriggerCrateStore.cxx:118
 AliMUONTriggerCrateStore.cxx:119
 AliMUONTriggerCrateStore.cxx:120
 AliMUONTriggerCrateStore.cxx:121
 AliMUONTriggerCrateStore.cxx:122
 AliMUONTriggerCrateStore.cxx:123
 AliMUONTriggerCrateStore.cxx:124
 AliMUONTriggerCrateStore.cxx:125
 AliMUONTriggerCrateStore.cxx:126
 AliMUONTriggerCrateStore.cxx:127
 AliMUONTriggerCrateStore.cxx:128
 AliMUONTriggerCrateStore.cxx:129
 AliMUONTriggerCrateStore.cxx:130
 AliMUONTriggerCrateStore.cxx:131
 AliMUONTriggerCrateStore.cxx:132
 AliMUONTriggerCrateStore.cxx:133
 AliMUONTriggerCrateStore.cxx:134
 AliMUONTriggerCrateStore.cxx:135
 AliMUONTriggerCrateStore.cxx:136
 AliMUONTriggerCrateStore.cxx:137
 AliMUONTriggerCrateStore.cxx:138
 AliMUONTriggerCrateStore.cxx:139
 AliMUONTriggerCrateStore.cxx:140
 AliMUONTriggerCrateStore.cxx:141
 AliMUONTriggerCrateStore.cxx:142
 AliMUONTriggerCrateStore.cxx:143
 AliMUONTriggerCrateStore.cxx:144
 AliMUONTriggerCrateStore.cxx:145
 AliMUONTriggerCrateStore.cxx:146
 AliMUONTriggerCrateStore.cxx:147
 AliMUONTriggerCrateStore.cxx:148
 AliMUONTriggerCrateStore.cxx:149
 AliMUONTriggerCrateStore.cxx:150
 AliMUONTriggerCrateStore.cxx:151
 AliMUONTriggerCrateStore.cxx:152
 AliMUONTriggerCrateStore.cxx:153
 AliMUONTriggerCrateStore.cxx:154
 AliMUONTriggerCrateStore.cxx:155
 AliMUONTriggerCrateStore.cxx:156
 AliMUONTriggerCrateStore.cxx:157
 AliMUONTriggerCrateStore.cxx:158
 AliMUONTriggerCrateStore.cxx:159
 AliMUONTriggerCrateStore.cxx:160
 AliMUONTriggerCrateStore.cxx:161
 AliMUONTriggerCrateStore.cxx:162
 AliMUONTriggerCrateStore.cxx:163
 AliMUONTriggerCrateStore.cxx:164
 AliMUONTriggerCrateStore.cxx:165
 AliMUONTriggerCrateStore.cxx:166
 AliMUONTriggerCrateStore.cxx:167
 AliMUONTriggerCrateStore.cxx:168
 AliMUONTriggerCrateStore.cxx:169
 AliMUONTriggerCrateStore.cxx:170
 AliMUONTriggerCrateStore.cxx:171
 AliMUONTriggerCrateStore.cxx:172
 AliMUONTriggerCrateStore.cxx:173
 AliMUONTriggerCrateStore.cxx:174
 AliMUONTriggerCrateStore.cxx:175
 AliMUONTriggerCrateStore.cxx:176
 AliMUONTriggerCrateStore.cxx:177
 AliMUONTriggerCrateStore.cxx:178
 AliMUONTriggerCrateStore.cxx:179
 AliMUONTriggerCrateStore.cxx:180
 AliMUONTriggerCrateStore.cxx:181
 AliMUONTriggerCrateStore.cxx:182
 AliMUONTriggerCrateStore.cxx:183
 AliMUONTriggerCrateStore.cxx:184
 AliMUONTriggerCrateStore.cxx:185
 AliMUONTriggerCrateStore.cxx:186
 AliMUONTriggerCrateStore.cxx:187
 AliMUONTriggerCrateStore.cxx:188
 AliMUONTriggerCrateStore.cxx:189
 AliMUONTriggerCrateStore.cxx:190
 AliMUONTriggerCrateStore.cxx:191
 AliMUONTriggerCrateStore.cxx:192
 AliMUONTriggerCrateStore.cxx:193
 AliMUONTriggerCrateStore.cxx:194
 AliMUONTriggerCrateStore.cxx:195
 AliMUONTriggerCrateStore.cxx:196
 AliMUONTriggerCrateStore.cxx:197
 AliMUONTriggerCrateStore.cxx:198
 AliMUONTriggerCrateStore.cxx:199
 AliMUONTriggerCrateStore.cxx:200
 AliMUONTriggerCrateStore.cxx:201
 AliMUONTriggerCrateStore.cxx:202
 AliMUONTriggerCrateStore.cxx:203
 AliMUONTriggerCrateStore.cxx:204
 AliMUONTriggerCrateStore.cxx:205
 AliMUONTriggerCrateStore.cxx:206
 AliMUONTriggerCrateStore.cxx:207
 AliMUONTriggerCrateStore.cxx:208
 AliMUONTriggerCrateStore.cxx:209
 AliMUONTriggerCrateStore.cxx:210
 AliMUONTriggerCrateStore.cxx:211
 AliMUONTriggerCrateStore.cxx:212
 AliMUONTriggerCrateStore.cxx:213
 AliMUONTriggerCrateStore.cxx:214
 AliMUONTriggerCrateStore.cxx:215
 AliMUONTriggerCrateStore.cxx:216
 AliMUONTriggerCrateStore.cxx:217
 AliMUONTriggerCrateStore.cxx:218
 AliMUONTriggerCrateStore.cxx:219
 AliMUONTriggerCrateStore.cxx:220
 AliMUONTriggerCrateStore.cxx:221
 AliMUONTriggerCrateStore.cxx:222
 AliMUONTriggerCrateStore.cxx:223
 AliMUONTriggerCrateStore.cxx:224
 AliMUONTriggerCrateStore.cxx:225
 AliMUONTriggerCrateStore.cxx:226
 AliMUONTriggerCrateStore.cxx:227
 AliMUONTriggerCrateStore.cxx:228
 AliMUONTriggerCrateStore.cxx:229
 AliMUONTriggerCrateStore.cxx:230
 AliMUONTriggerCrateStore.cxx:231
 AliMUONTriggerCrateStore.cxx:232
 AliMUONTriggerCrateStore.cxx:233
 AliMUONTriggerCrateStore.cxx:234
 AliMUONTriggerCrateStore.cxx:235
 AliMUONTriggerCrateStore.cxx:236
 AliMUONTriggerCrateStore.cxx:237
 AliMUONTriggerCrateStore.cxx:238
 AliMUONTriggerCrateStore.cxx:239
 AliMUONTriggerCrateStore.cxx:240
 AliMUONTriggerCrateStore.cxx:241
 AliMUONTriggerCrateStore.cxx:242
 AliMUONTriggerCrateStore.cxx:243
 AliMUONTriggerCrateStore.cxx:244
 AliMUONTriggerCrateStore.cxx:245
 AliMUONTriggerCrateStore.cxx:246
 AliMUONTriggerCrateStore.cxx:247
 AliMUONTriggerCrateStore.cxx:248
 AliMUONTriggerCrateStore.cxx:249
 AliMUONTriggerCrateStore.cxx:250
 AliMUONTriggerCrateStore.cxx:251
 AliMUONTriggerCrateStore.cxx:252
 AliMUONTriggerCrateStore.cxx:253
 AliMUONTriggerCrateStore.cxx:254
 AliMUONTriggerCrateStore.cxx:255
 AliMUONTriggerCrateStore.cxx:256
 AliMUONTriggerCrateStore.cxx:257
 AliMUONTriggerCrateStore.cxx:258
 AliMUONTriggerCrateStore.cxx:259
 AliMUONTriggerCrateStore.cxx:260
 AliMUONTriggerCrateStore.cxx:261
 AliMUONTriggerCrateStore.cxx:262
 AliMUONTriggerCrateStore.cxx:263
 AliMUONTriggerCrateStore.cxx:264
 AliMUONTriggerCrateStore.cxx:265
 AliMUONTriggerCrateStore.cxx:266