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: AliMpTrigger.cxx,v 1.4 2006/05/24 13:58:52 ivana Exp $

//-----------------------------------------------------------------------------
// Class AliMUONRegionalTriggerConfig
// --------------------
// The class defines the configuration of regional trigger crate
// Author: Ch. Finck, Subatech Nantes
//-----------------------------------------------------------------------------

#include "AliMUONRegionalTriggerConfig.h"
#include "AliMUONTriggerCrateConfig.h"
#include "AliMpConstants.h"
#include "AliMpHelper.h"
#include "AliMpExMapIterator.h"
#include "AliMpRegionalTrigger.h"
#include "AliLog.h"

#include <TArrayI.h>
#include <Riostream.h>
#include <TClass.h>
#include <TSystem.h>
#include <TList.h>


using std::cout;
using std::endl;
using std::ifstream;
using std::ios;
/// \cond CLASSIMP
ClassImp(AliMUONRegionalTriggerConfig)
/// \endcond


//______________________________________________________________________________
AliMUONRegionalTriggerConfig::AliMUONRegionalTriggerConfig()
  : TObject(),
    fTriggerCrates()
{
/// Standard constructor
  
    fTriggerCrates.SetOwner(true);
    fTriggerCrates.SetSize(AliMpConstants::LocalBoardNofChannels());
}

//______________________________________________________________________________
AliMUONRegionalTriggerConfig::AliMUONRegionalTriggerConfig(const AliMUONRegionalTriggerConfig& rhs)
  : TObject(rhs),
    fTriggerCrates(rhs.fTriggerCrates)
{
/// Copy constructor
}  

//______________________________________________________________________________
AliMUONRegionalTriggerConfig& AliMUONRegionalTriggerConfig::operator=(const AliMUONRegionalTriggerConfig& rhs)
{
/// Assignment operator

  // check assignment to self
  if (this == &rhs) return *this;

  // base class assignment
  TObject::operator=(rhs);

  // assignment operator
  fTriggerCrates = rhs.fTriggerCrates;
  
  return *this;
}  

//______________________________________________________________________________
AliMUONRegionalTriggerConfig::~AliMUONRegionalTriggerConfig()
{
/// Destructor
}

//
// public methods
//

//______________________________________________________________________________
Int_t AliMUONRegionalTriggerConfig::ReadData(const TString& fileName)
{
    /// Load the Regional trigger from ASCII data file

    // Read first data contained in mapping object
    //
    AliMpRegionalTrigger mpRegionalTrigger;
    mpRegionalTrigger.SetTriggerCratesOwner(kFALSE); 
    if ( ! mpRegionalTrigger.ReadData(fileName) ) {
        AliErrorStream()
           << "Reading mapping regional trigger from file " << fileName.Data() << " failed." 
           << endl;
        return 0;
    }

    // Fill calibration object from mapping object
    //
    TIterator* it = mpRegionalTrigger.CreateCrateIterator();
    AliMpTriggerCrate* mpTriggerCrate;
    while ( ( mpTriggerCrate = (AliMpTriggerCrate*)it->Next() ) ) {
      fTriggerCrates.Add(
        mpTriggerCrate->GetName(), new AliMUONTriggerCrateConfig(mpTriggerCrate));
    }    
    delete it;     
        
    // 

    // Read remaining calibration data from file
    //
    ifstream in(fileName.Data(), ios::in);
    if ( ! in.good() ) {
        AliErrorStream()
           << "Local Trigger Board Mapping File " << fileName.Data() << " not found" << endl;
        return 0;
    }

    UShort_t mask;
    Int_t mode, coincidence;
    Int_t nofBoards;
    char line[80];

    // decode file and store in objects
    while (!in.eof())
    {
      // Get name
      in.getline(line,80);
      if (!strlen(line)) break;
      TString crateName(AliMpHelper::Normalize(line));

      in.getline(line,80);    
  
      // read mode
      in.getline(line,80);
      sscanf(line,"%d",&mode);

      // read coincidence
      in.getline(line,80);
      sscanf(line,"%d",&coincidence);

      // read mask
      in.getline(line,80);
      sscanf(line,"%hx",&mask);
      
      // read # local board
      in.getline(line,80);
      sscanf(line,"%d",&nofBoards);

      AliMUONTriggerCrateConfig*  crateConfig 
        = (AliMUONTriggerCrateConfig*)(fTriggerCrates.GetValue(crateName.Data()));
        
      // This should never happen, but let's test it anyway  
      if ( ! crateConfig ) {
        AliErrorStream()
           << "Cannot find AliMUONTriggerCrateConfig " << crateName.Data() << endl;
        return 0;
      }
       
      crateConfig->SetMode(mode);
      crateConfig->SetCoinc(coincidence);
      crateConfig->SetMask(mask);
      
      // Skipp local board data
      for ( Int_t i = 0; i < 3*nofBoards; ++i ) 
          in.getline(line,80);
    }

    return fTriggerCrates.GetSize();
}

//______________________________________________________________________________
AliMUONTriggerCrateConfig* AliMUONRegionalTriggerConfig::FindTriggerCrate(TString name, 
                                                          Bool_t warn) const  
{
    /// Return trigger crate with given name

    AliMUONTriggerCrateConfig* crate
    = (AliMUONTriggerCrateConfig*) fTriggerCrates.GetValue(name.Data());

    if ( ! crate && warn ) {
        AliErrorStream()
        << "Trigger crate with name = " << name.Data() << " not defined." << endl;
    }

    return crate;
}

//______________________________________________________________________________
Int_t AliMUONRegionalTriggerConfig::GetNofTriggerCrates() const 
{ 
    /// Return number of trigger crates

    return fTriggerCrates.GetSize(); 
}

//______________________________________________________________________________
TIterator* 
AliMUONRegionalTriggerConfig::CreateCrateIterator() const 
{ 
  /// Return trigger crates iterator
  return fTriggerCrates.CreateIterator(); 
}




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