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 "AliMpFiles.h"
30 #include "AliMpHelper.h"
31 #include "AliMpExMapIterator.h"
35 #include <Riostream.h>
41 ClassImp(AliMUONRegionalTriggerConfig)
45 //______________________________________________________________________________
46 AliMUONRegionalTriggerConfig::AliMUONRegionalTriggerConfig()
50 /// Standard constructor
52 fTriggerCrates.SetOwner(true);
53 fTriggerCrates.SetSize(AliMpConstants::LocalBoardNofChannels());
56 //______________________________________________________________________________
57 AliMUONRegionalTriggerConfig::AliMUONRegionalTriggerConfig(const AliMUONRegionalTriggerConfig& rhs)
59 fTriggerCrates(rhs.fTriggerCrates)
64 //______________________________________________________________________________
65 AliMUONRegionalTriggerConfig& AliMUONRegionalTriggerConfig::operator=(const AliMUONRegionalTriggerConfig& rhs)
67 /// Assignment operator
69 // check assignment to self
70 if (this == &rhs) return *this;
72 // base class assignment
73 TObject::operator=(rhs);
75 // assignment operator
76 fTriggerCrates = rhs.fTriggerCrates;
81 //______________________________________________________________________________
82 AliMUONRegionalTriggerConfig::~AliMUONRegionalTriggerConfig()
91 //______________________________________________________________________________
92 Int_t AliMUONRegionalTriggerConfig::ReadData(const TString& fileName)
94 /// Load the Regional trigger from ASCII data files
95 /// and return its instance
97 TString inFileName(fileName);
98 if ( inFileName == "" )
99 inFileName = AliMpFiles::LocalTriggerBoardMapping();
101 inFileName = gSystem->ExpandPathName(inFileName.Data());
103 ifstream in(inFileName.Data(), ios::in);
107 << "Local Trigger Board Mapping File " << fileName.Data() << " not found" << endl;
111 AliMUONTriggerCrateConfig* crate = 0x0;
114 UShort_t crateId, mask;
115 Int_t mode, coincidence;
116 Int_t localBoardId = 0;
122 if (!strlen(line)) break;
123 TString crateName(AliMpHelper::Normalize(line));
126 sscanf(line,"%hx",&crateId);
129 sscanf(line,"%d",&mode);
132 sscanf(line,"%d",&coincidence);
135 sscanf(line,"%hx",&mask);
137 crate = (AliMUONTriggerCrateConfig*)(fTriggerCrates.GetValue(crateName.Data()));
140 // cout << "Creating crate: " << crateName.Data() << endl;
141 crate = new AliMUONTriggerCrateConfig(crateName.Data(), crateId, mask, mode, coincidence);
142 fTriggerCrates.Add(crateName.Data(), crate);
145 Char_t localBoardName[20];
149 for ( Int_t i = 0; i < AliMpConstants::LocalBoardNofChannels(); ++i )
151 if ( (mask >> i ) & 0x1 )
155 sscanf(line,"%02d %s %03d %03x",&slot,localBoardName,&localBoardId,&switches);
156 crate->AddLocalBoard(localBoardId);
158 // skip DEs for local board
161 // skip copy number and transverse connector
166 return fTriggerCrates.GetSize();
170 //______________________________________________________________________________
171 AliMUONTriggerCrateConfig* AliMUONRegionalTriggerConfig::FindTriggerCrate(TString name,
173 /// Return trigger crate with given name
175 AliMUONTriggerCrateConfig* crate
176 = (AliMUONTriggerCrateConfig*) fTriggerCrates.GetValue(name.Data());
178 if ( ! crate && warn ) {
180 << "Trigger crate with name = " << name.Data() << " not defined." << endl;
186 //______________________________________________________________________________
187 Int_t AliMUONRegionalTriggerConfig::GetNofTriggerCrates() const
189 /// Return number of trigger crates
191 return fTriggerCrates.GetSize();
194 //______________________________________________________________________________
196 AliMUONRegionalTriggerConfig::CreateCrateIterator() const
198 /// Return trigger crates iterator
199 return fTriggerCrates.CreateIterator();