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 AliMpGlobalCrate
21 // --------------------
22 // The class defines the properties of trigger crate
23 // Author: Ch. Finck, Subatech Nantes
24 //-----------------------------------------------------------------------------
26 #include "AliMpGlobalCrate.h"
27 #include "AliMpConstants.h"
28 #include "AliMpFiles.h"
29 #include "AliMpHelper.h"
34 #include <Riostream.h>
38 ClassImp(AliMpGlobalCrate)
41 const Char_t* AliMpGlobalCrate::fgkJtagName = "JtagBoard";
42 const Char_t* AliMpGlobalCrate::fgkFirstDarcName = "LeftDarcBoard";
43 const Char_t* AliMpGlobalCrate::fgkSecondDarcName = "RightDarcBoard";
44 const Char_t* AliMpGlobalCrate::fgkGlobalName = "GlobalBoard";
45 const Char_t* AliMpGlobalCrate::fgkFetName = "FetBoard";
47 const Int_t AliMpGlobalCrate::fgkGlobalNofRegisters = 13;
48 const Int_t AliMpGlobalCrate::fgkFetNofRegisters = 7;
49 const Int_t AliMpGlobalCrate::fgkJtagNofLines = 4;
50 //______________________________________________________________________________
51 AliMpGlobalCrate::AliMpGlobalCrate()
52 : TNamed("GlobalCrate", "mapping trigger global crate"),
59 fFirstDarcVmeAddr(0x0),
63 fFirstDarcL1TimeOut(0),
64 fSecondDarcVmeAddr(0x0),
66 fSecondDarcDisable(0),
67 fSecondDarcL0Delay(0),
68 fSecondDarcL1TimeOut(0),
72 /// Standard constructor
74 for (Int_t i = 0; i < fgkGlobalNofRegisters; ++i)
75 fGlobalRegisters[i] = 0;
77 for (Int_t j = 0; j < fgkFetNofRegisters; ++j)
81 //______________________________________________________________________________
82 AliMpGlobalCrate::AliMpGlobalCrate(TRootIOCtor* /*ioCtor*/)
83 : TNamed("GlobalCrate", "mapping trigger global crate"),
90 fFirstDarcVmeAddr(0x0),
94 fFirstDarcL1TimeOut(0),
95 fSecondDarcVmeAddr(0x0),
97 fSecondDarcDisable(0),
98 fSecondDarcL0Delay(0),
99 fSecondDarcL1TimeOut(0),
105 /// Root IO constructor
108 //______________________________________________________________________________
109 AliMpGlobalCrate::~AliMpGlobalCrate()
114 //______________________________________________________________________________
115 Bool_t AliMpGlobalCrate::ReadData(const TString& fileName)
117 /// Fill trigger global crate object from ascii file
118 /// put the method static to be used by other class w/o initializing object
120 TString inFileName(fileName);
121 if ( inFileName == "" )
122 inFileName = AliMpFiles::GlobalTriggerBoardMapping();
124 inFileName = gSystem->ExpandPathName(inFileName.Data());
126 ifstream in(inFileName.Data(), ios::in);
130 << "Global Trigger Board Mapping File " << fileName.Data() << " not found" << endl;
137 in.getline(line, 255);
138 TString tmp(AliMpHelper::Normalize(line));
140 if (!tmp.Contains(GetName()))
141 printf("Wrong Global Crate File");
143 in.getline(line, 255);
144 tmp = AliMpHelper::Normalize(line);
146 if (tmp.Contains(GetJtagName())) {
148 in.getline(line, 255);
149 TString tmp(AliMpHelper::Normalize(line));
151 sscanf(tmp.Data(), "%lx", &addr);
152 SetJtagVmeAddr(addr);
153 //AliDebug(1, Form("Jtag Vme Address: 0x%x", addr));
155 // clk div, rx phase, read delay
156 in.getline(line, 255);
157 tmp = AliMpHelper::Normalize(line);
159 AliMpHelper::DecodeName(line, ' ', list);
160 SetJtagClockDiv(list[0]);
161 SetJtagRxPhase(list[1]);
162 SetJtagRdDelay(list[2]);
163 //AliDebug(1, Form("Jtag Clock Div: %d, Rx Phase: %d, Read Delay %d", list[0], list[1], list[2]));
166 in.getline(line, 255);
167 tmp = AliMpHelper::Normalize(line);
168 AliMpHelper::DecodeName(line, ' ', list);
170 for (Int_t i = 0; i < GetJtagNofLines(); ++i)
171 enable |= (list[i] << i);
172 SetEnableJtag(enable);
173 //AliDebug(1, Form("Jtag Enable: 0x%x", enable));
175 for (Int_t i = 0; i < GetJtagNofLines(); ++i) {
176 in.getline(line, 255);
177 for (Int_t j = 0; j < GetJtagNofLines(); ++j) {
178 in.getline(line, 255);
179 tmp = AliMpHelper::Normalize(line);
180 SetJtagCrateName(i*GetJtagNofLines() + j, tmp);
181 //AliDebug(1, Form("Jtag Crate Name: %s", tmp.Data()));
186 in.getline(line, 255);
187 tmp = AliMpHelper::Normalize(line);
188 if (tmp.Contains(GetFirstDarcName())) {
190 in.getline(line, 255);
191 TString tmp(AliMpHelper::Normalize(line));
193 sscanf(tmp.Data(), "%lx", &addr);
194 SetFirstDarcVmeAddr(addr);
195 //AliDebug(1, Form("First Darc Vme Address: 0x%x", addr));
198 in.getline(line, 255);
199 tmp = AliMpHelper::Normalize(line);
200 SetFirstDarcType(tmp.Atoi());
201 //AliDebug(1, Form("First Darc Type: %d", tmp.Atoi()));
204 in.getline(line, 255);
206 tmp = AliMpHelper::Normalize(line);
207 sscanf(tmp.Data(), "%x", &item);
208 SetFirstDarcDisable(item);
209 //AliDebug(1, Form("First Darc Enable: 0x%x", item));
212 in.getline(line, 255);
213 tmp = AliMpHelper::Normalize(line);
214 sscanf(tmp.Data(), "%x", &item);
215 SetFirstDarcL0Delay(item);
216 //AliDebug(1, Form("First Darc L0 Delay: 0x%x", item));
219 in.getline(line, 255);
220 tmp = AliMpHelper::Normalize(line);
221 sscanf(tmp.Data(), "%x", &item);
222 SetFirstDarcL1TimeOut(item);
223 //AliDebug(1, Form("First Darc L1 Time Out: 0x%x", item));
226 in.getline(line, 255);
227 tmp = AliMpHelper::Normalize(line);
228 if (tmp.Contains(GetSecondDarcName())) {
230 in.getline(line, 255);
231 TString tmp(AliMpHelper::Normalize(line));
233 sscanf(tmp.Data(), "%lx", &addr);
234 SetSecondDarcVmeAddr(addr);
235 //AliDebug(1, Form("Second Darc Vme Address: 0x%x", addr));
238 in.getline(line, 255);
239 tmp = AliMpHelper::Normalize(line);
240 SetSecondDarcType(tmp.Atoi());
241 //AliDebug(1, Form("Second Darc Type: %d", tmp.Atoi()));
244 in.getline(line, 255);
246 tmp = AliMpHelper::Normalize(line);
247 sscanf(tmp.Data(), "%x", &item);
248 SetSecondDarcDisable(item);
249 //AliDebug(1, Form("Second Darc Enable: 0x%x", item));
252 in.getline(line, 255);
253 tmp = AliMpHelper::Normalize(line);
254 sscanf(tmp.Data(), "%x", &item);
255 SetSecondDarcL0Delay(item);
256 //AliDebug(1, Form("Second Darc L0 Delay: 0x%x", item));
259 in.getline(line, 255);
260 tmp = AliMpHelper::Normalize(line);
261 sscanf(tmp.Data(), "%x", &item);
262 SetSecondDarcL1TimeOut(item);
263 //AliDebug(1, Form("Second Darc L1 Time Out: 0x%x", item));
266 in.getline(line, 255);
267 tmp = AliMpHelper::Normalize(line);
268 if (tmp.Contains(GetGlobalName())) {
269 in.getline(line, 255);
270 TString tmp(AliMpHelper::Normalize(line));
272 sscanf(tmp.Data(), "%lx", &addr);
273 SetGlobalVmeAddr(addr);
274 //AliDebug(1, Form("Global Vme Address: 0x%x", addr));
276 for (Int_t i = 0; i < GetGlobalNofRegisters(); ++i) {
277 in.getline(line, 255);
278 TString tmp(AliMpHelper::Normalize(line));
280 sscanf(tmp.Data(), "%x", ®);
281 SetGlobalRegister(i, reg);
282 //AliDebug(1, Form("Global Register %d: 0x%x", i, reg));
286 in.getline(line, 255);
287 tmp = AliMpHelper::Normalize(line);
288 if (tmp.Contains(GetFetName())) {
289 in.getline(line, 255);
290 TString tmp(AliMpHelper::Normalize(line));
292 sscanf(tmp.Data(), "%lx", &addr);
294 //AliDebug(1, Form("Fet Vme Address: 0x%x", addr));
296 for (Int_t i = 0; i < GetFetNofRegisters(); ++i) {
297 in.getline(line, 255);
298 TString tmp(AliMpHelper::Normalize(line));
300 sscanf(tmp.Data(), "%x", ®);
301 SetFetRegister(i, reg);
302 //AliDebug(1, Form("Fet Register %d: 0x%x", i, reg));
309 //______________________________________________________________________________
310 Bool_t AliMpGlobalCrate::GetEnableJtag(Int_t index) const
312 /// returns enable mask for a given Jtag line
314 if (index > fgkJtagNofLines) {
315 AliWarning("Index size too big for Jtag line");
318 return ((fEnableJtag >> index) & 0x1);
322 //______________________________________________________________________________
323 void AliMpGlobalCrate::SetJtagCrateName(Int_t index, TString name)
325 /// Get Jtag crate name for a given index
326 if (index > AliMpConstants::LocalBoardNofChannels()) {
327 AliWarning("Index size too big for Jtag line");
330 fJtagCrateName[index] = name;
333 //______________________________________________________________________________
334 TString AliMpGlobalCrate::GetJtagCrateName(Int_t jtagLine, Int_t index) const
336 /// Get the crate name for a given line and a given index
337 if (jtagLine > AliMpConstants::LocalBoardNofChannels() || index > AliMpConstants::LocalBoardNofChannels())
340 return fJtagCrateName[jtagLine*fgkJtagNofLines + index];
343 //______________________________________________________________________________
344 UInt_t AliMpGlobalCrate::GetGlobalRegister(Int_t index) const
346 /// return global register for a given index
347 if (index > fgkGlobalNofRegisters) {
348 AliWarning("Index size too big for Global Register");
351 return fGlobalRegisters[index];
354 //______________________________________________________________________________
355 void AliMpGlobalCrate::SetGlobalRegister(Int_t index, UInt_t reg)
357 /// set Global register for a given index
358 if (index > fgkGlobalNofRegisters) {
359 AliWarning("Index size too big for Global Register");
362 fGlobalRegisters[index] = reg;
365 //______________________________________________________________________________
366 UInt_t AliMpGlobalCrate::GetFetRegister(Int_t index) const
368 /// return global register for a given index
369 if (index > fgkFetNofRegisters) {
370 AliWarning("Index size too big for Fet Register");
373 return fFetRegisters[index];
376 //______________________________________________________________________________
377 void AliMpGlobalCrate::SetFetRegister(Int_t index, UInt_t reg)
379 /// set Global register for a given index
380 if (index > fgkFetNofRegisters) {
381 AliWarning("Index size too big for Global Register");
384 fFetRegisters[index] = reg;