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 AliMpRegionalTrigger
21 // --------------------
22 // The class defines the properties of regional trigger crate
23 // Author: Ch. Finck, Subatech Nantes
24 //-----------------------------------------------------------------------------
26 #include "AliMpRegionalTrigger.h"
27 #include "AliMpExMapIterator.h"
28 #include "AliMpTriggerCrate.h"
29 #include "AliMpLocalBoard.h"
30 #include "AliMpConstants.h"
31 #include "AliMpFiles.h"
32 #include "AliMpDataStreams.h"
33 #include "AliMpHelper.h"
38 #include <Riostream.h>
44 ClassImp(AliMpRegionalTrigger)
48 //______________________________________________________________________________
49 AliMpRegionalTrigger::AliMpRegionalTrigger()
53 fLocalBoardArray(AliMpConstants::TotalNofLocalBoards()+1) // included non-notified boards
55 /// Standard constructor
57 fTriggerCrates.SetOwner(true);
58 fTriggerCrates.SetSize(AliMpConstants::LocalBoardNofChannels());
61 //______________________________________________________________________________
62 AliMpRegionalTrigger::AliMpRegionalTrigger(const AliMpRegionalTrigger& rhs)
64 fTriggerCrates(rhs.fTriggerCrates),
65 fLocalBoardMap(rhs.fLocalBoardMap),
66 fLocalBoardArray(rhs.fLocalBoardArray)
71 //______________________________________________________________________________
72 AliMpRegionalTrigger::AliMpRegionalTrigger(TRootIOCtor* ioCtor)
74 fTriggerCrates(ioCtor),
75 fLocalBoardMap(ioCtor),
78 /// Constructor for I0
81 //______________________________________________________________________________
82 AliMpRegionalTrigger& AliMpRegionalTrigger::operator=(const AliMpRegionalTrigger& rhs)
84 /// Assignment operator
86 // check assignment to self
87 if (this == &rhs) return *this;
89 // base class assignment
90 TObject::operator=(rhs);
92 // assignment operator
93 fTriggerCrates = rhs.fTriggerCrates;
94 fLocalBoardArray = rhs.fLocalBoardArray;
99 //______________________________________________________________________________
100 AliMpRegionalTrigger::~AliMpRegionalTrigger()
110 //______________________________________________________________________________
111 Bool_t AliMpRegionalTrigger::ReadData(istream& in)
113 /// Load the Regional trigger from ASCII data files
114 /// and fill objects. Return false if reading fails
116 if ( !in.good() ) return kFALSE;
118 Int_t localBoardId = 0;
122 Int_t localBoardIndex(0);
125 // decode file and store in objects
129 if (!strlen(line)) break;
130 TString crateName(AliMpHelper::Normalize(line));
133 sscanf(line,"%hx",&crateId);
135 // skip data which are not stored in mapping object
136 // (mode, coincidence, mask)
141 // read # local board
143 sscanf(line,"%d",&nofBoards);
145 AliMpTriggerCrate* crate
146 = (AliMpTriggerCrate*)(fTriggerCrates.GetValue(crateName.Data()));
148 crate = new AliMpTriggerCrate(crateName.Data(), crateId);
149 fTriggerCrates.Add(crateName.Data(), crate);
152 Char_t localBoardName[20];
156 for ( Int_t i = 0; i < nofBoards; ++i )
159 sscanf(line,"%02d %19s %03d %03x",&slot,localBoardName,&localBoardId,&switches);
160 AliMpLocalBoard* board = new AliMpLocalBoard(localBoardId, localBoardName, slot);
161 board->SetSwitch(switches);
162 board->SetCrate(crateName);
164 if (localBoardId > AliMpConstants::NofLocalBoards())
165 board->SetNotified(false); // copy cards
167 crate->AddLocalBoard(localBoardId);
169 // add list of DEs for local board
172 TString tmp(AliMpHelper::Normalize(line));
173 AliMpHelper::DecodeName(tmp,' ',listInt);
174 for (Int_t ii = 0; ii < listInt.GetSize(); ++ii) {
175 if ( listInt[ii] ) board->AddDE(listInt[ii]);
178 // set copy number and transverse connector
180 TString tmp1 = AliMpHelper::Normalize(line);
181 AliMpHelper::DecodeName(tmp1,' ',listInt);
183 board->SetInputXfrom(listInt[0]);
184 board->SetInputXto(listInt[1]);
186 board->SetInputYfrom(listInt[2]);
187 board->SetInputYto(listInt[3]);
189 board->SetTC(listInt[4]);
191 // add local board into array
192 fLocalBoardArray.AddAt(board,localBoardIndex);
193 fLocalBoardMap.Add(board->GetId(),board);
199 AliDebug(1,Form("%d trigger crate created",fTriggerCrates.GetSize()));
200 AliDebug(1,Form("%d local board added to the map",fLocalBoardMap.GetSize()));
201 AliDebug(1,Form("%d local board referenced from the array",fLocalBoardArray.GetLast()+1));
210 //______________________________________________________________________________
211 Bool_t AliMpRegionalTrigger::ReadData(const TString& fileName)
213 /// Load the Regional trigger from ASCII data files
214 /// and return its instance
216 AliDebugStream(2) << "Read data from file " << fileName.Data() << endl;
218 TString inFileName(fileName);
219 inFileName = gSystem->ExpandPathName(inFileName.Data());
220 ifstream inFile(inFileName.Data(), ios::in);
221 if ( ! inFile.good() ) {
223 << "Local Trigger Board Mapping File " << fileName.Data() << " not found" << endl;
227 return ReadData(inFile);
230 //______________________________________________________________________________
231 Bool_t AliMpRegionalTrigger::ReadData(const AliMpDataStreams& dataStreams)
233 /// Load the Regional trigger from ASCII data files
234 /// and return its instance
236 AliDebugStream(2) << "Read data from stream " << endl;
239 CreateDataStream(AliMpFiles::LocalTriggerBoardMapping());
241 Bool_t result = ReadData(in);
247 //______________________________________________________________________________
248 AliMpLocalBoard* AliMpRegionalTrigger::FindLocalBoard(Int_t localBoardId,
250 /// Return local board with given Id
252 AliMpLocalBoard* localBoard
253 = static_cast<AliMpLocalBoard*>(fLocalBoardMap.GetValue(localBoardId));
255 if ( ! localBoard && warn ) {
257 << "Loacl board with localBoardId = " << localBoardId << " not found." << endl;
263 //______________________________________________________________________________
264 AliMpTriggerCrate* AliMpRegionalTrigger::FindTriggerCrate(TString name,
266 /// Return trigger crate with given name
268 AliMpTriggerCrate* crate
269 = (AliMpTriggerCrate*) fTriggerCrates.GetValue(name.Data());
271 if ( ! crate && warn ) {
273 << "Trigger crate with name = " << name.Data() << " not defined." << endl;
279 //______________________________________________________________________________
280 Int_t AliMpRegionalTrigger::GetNofTriggerCrates() const
282 /// Return number of trigger crates
284 return fTriggerCrates.GetSize();
287 //______________________________________________________________________________
288 Int_t AliMpRegionalTrigger::GetNofLocalBoards() const
290 /// Return number of local boards
292 return fLocalBoardArray.GetLast()+1;
295 //______________________________________________________________________________
297 AliMpRegionalTrigger::CreateCrateIterator() const
299 /// Create iterator over crates
301 return fTriggerCrates.CreateIterator();
304 //______________________________________________________________________________
306 AliMpRegionalTrigger::CreateLocalBoardIterator() const
308 /// Create iterator over local boards
310 return fLocalBoardArray.MakeIterator();
313 //______________________________________________________________________________
315 AliMpRegionalTrigger::LocalBoardId(Int_t index) const
317 /// Return local board Id for the local boards with a given index
319 AliMpLocalBoard* lb = static_cast<AliMpLocalBoard*>(fLocalBoardArray.At(index));
324 AliError(Form("Could not get local board at index %d",index));
328 //______________________________________________________________________________
329 void AliMpRegionalTrigger::SetTriggerCratesOwner(Bool_t owner)
331 /// Set ownership to trigger crates
333 fTriggerCrates.SetOwner(owner);