1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
17 // $MpId: AliMpTrigger.cxx,v 1.4 2006/05/24 13:58:52 ivana Exp $
19 //-----------------------------------------------------------------------------
20 // Class AliMUONRegionalTriggerConfig
21 // --------------------
22 // The class defines the configuration of regional trigger crate
23 // Author: Ch. Finck, Subatech Nantes
24 //-----------------------------------------------------------------------------
26 #include "AliMUONRegionalTriggerConfig.h"
27 #include "AliMUONTriggerCrateConfig.h"
28 #include "AliMpConstants.h"
29 #include "AliMpHelper.h"
30 #include "AliMpExMapIterator.h"
31 #include "AliMpRegionalTrigger.h"
35 #include <Riostream.h>
42 ClassImp(AliMUONRegionalTriggerConfig)
46 //______________________________________________________________________________
47 AliMUONRegionalTriggerConfig::AliMUONRegionalTriggerConfig()
51 /// Standard constructor
53 fTriggerCrates.SetOwner(true);
54 fTriggerCrates.SetSize(AliMpConstants::LocalBoardNofChannels());
57 //______________________________________________________________________________
58 AliMUONRegionalTriggerConfig::AliMUONRegionalTriggerConfig(const AliMUONRegionalTriggerConfig& rhs)
60 fTriggerCrates(rhs.fTriggerCrates)
65 //______________________________________________________________________________
66 AliMUONRegionalTriggerConfig& AliMUONRegionalTriggerConfig::operator=(const AliMUONRegionalTriggerConfig& rhs)
68 /// Assignment operator
70 // check assignment to self
71 if (this == &rhs) return *this;
73 // base class assignment
74 TObject::operator=(rhs);
76 // assignment operator
77 fTriggerCrates = rhs.fTriggerCrates;
82 //______________________________________________________________________________
83 AliMUONRegionalTriggerConfig::~AliMUONRegionalTriggerConfig()
92 //______________________________________________________________________________
93 Int_t AliMUONRegionalTriggerConfig::ReadData(const TString& fileName)
95 /// Load the Regional trigger from ASCII data file
97 // Read first data contained in mapping object
99 AliMpRegionalTrigger mpRegionalTrigger;
100 mpRegionalTrigger.SetTriggerCratesOwner(kFALSE);
101 if ( ! mpRegionalTrigger.ReadData(fileName) ) {
103 << "Reading mapping regional trigger from file " << fileName.Data() << " failed."
108 // Fill calibration object from mapping object
110 TIterator* it = mpRegionalTrigger.CreateCrateIterator();
111 AliMpTriggerCrate* mpTriggerCrate;
112 while ( ( mpTriggerCrate = (AliMpTriggerCrate*)it->Next() ) ) {
114 mpTriggerCrate->GetName(), new AliMUONTriggerCrateConfig(mpTriggerCrate));
120 // Read remaining calibration data from file
122 ifstream in(fileName.Data(), ios::in);
125 << "Local Trigger Board Mapping File " << fileName.Data() << " not found" << endl;
130 Int_t mode, coincidence;
134 // decode file and store in objects
139 if (!strlen(line)) break;
140 TString crateName(AliMpHelper::Normalize(line));
146 sscanf(line,"%d",&mode);
150 sscanf(line,"%d",&coincidence);
154 sscanf(line,"%hx",&mask);
156 // read # local board
158 sscanf(line,"%d",&nofBoards);
160 AliMUONTriggerCrateConfig* crateConfig
161 = (AliMUONTriggerCrateConfig*)(fTriggerCrates.GetValue(crateName.Data()));
163 // This should never happen, but let's test it anyway
164 if ( ! crateConfig ) {
166 << "Cannot find AliMUONTriggerCrateConfig " << crateName.Data() << endl;
170 crateConfig->SetMode(mode);
171 crateConfig->SetCoinc(coincidence);
172 crateConfig->SetMask(mask);
174 // Skipp local board data
175 for ( Int_t i = 0; i < 3*nofBoards; ++i )
179 return fTriggerCrates.GetSize();
182 //______________________________________________________________________________
183 AliMUONTriggerCrateConfig* AliMUONRegionalTriggerConfig::FindTriggerCrate(TString name,
186 /// Return trigger crate with given name
188 AliMUONTriggerCrateConfig* crate
189 = (AliMUONTriggerCrateConfig*) fTriggerCrates.GetValue(name.Data());
191 if ( ! crate && warn ) {
193 << "Trigger crate with name = " << name.Data() << " not defined." << endl;
199 //______________________________________________________________________________
200 Int_t AliMUONRegionalTriggerConfig::GetNofTriggerCrates() const
202 /// Return number of trigger crates
204 return fTriggerCrates.GetSize();
207 //______________________________________________________________________________
209 AliMUONRegionalTriggerConfig::CreateCrateIterator() const
211 /// Return trigger crates iterator
212 return fTriggerCrates.CreateIterator();