]> git.uio.no Git - u/mrichter/AliRoot.git/blame - VZERO/AliVZEROTriggerData.cxx
Introduction of the reconstruction parameters for VZERO. For the moment the reconstru...
[u/mrichter/AliRoot.git] / VZERO / AliVZEROTriggerData.cxx
CommitLineData
a08520b8 1\r
2/**************************************************************************\r
3 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *\r
4 * *\r
5 * Author: The ALICE Off-line Project. *\r
6 * Contributors are mentioned in the code where appropriate. *\r
7 * *\r
8 * Permission to use, copy, modify and distribute this software and its *\r
9 * documentation strictly for non-commercial purposes is hereby granted *\r
10 * without fee, provided that the above copyright notice appears in all *\r
11 * copies and that both the copyright notice and this permission notice *\r
12 * appear in the supporting documentation. The authors make no claims *\r
13 * about the suitability of this software for any purpose. It is *\r
14 * provided "as is" without express or implied warranty. *\r
15 **************************************************************************/\r
16\r
e370cdfe 17// Class AliVZEROTriggerData\r
18// -------------------------\r
19// Retrieves and hold the FEE parameters\r
20// The parameters are recieved from the shuttle \r
21// AliVZEROTriggerData is then used in the AliVZEROTriggerSimulator\r
22//\r
a08520b8 23\r
a08520b8 24#include <TObjString.h>\r
e370cdfe 25#include <TMap.h>\r
a08520b8 26\r
27#include "AliLog.h"\r
28#include "AliDCSValue.h"\r
29#include "AliVZEROTriggerData.h"\r
30\r
31ClassImp(AliVZEROTriggerData)\r
32//________________________________________________________________\r
33\r
34AliVZEROTriggerData::AliVZEROTriggerData() :\r
35 TNamed(),\r
36 fBBAThreshold(0),\r
37 fBBCThreshold(0) , \r
38 fBGAThreshold(0) , \r
39 fBGCThreshold(0) , \r
40 fBBAForBGThreshold(0) , \r
41 fBBCForBGThreshold(0) , \r
42 fCentralityVOAThrLow(0) , \r
43 fCentralityVOAThrHigh(0) , \r
44 fCentralityVOCThrLow(0) , \r
45 fCentralityVOCThrHigh(0) , \r
46 fMultV0AThrLow(0) , \r
47 fMultV0AThrHigh(0) , \r
48 fMultV0CThrLow(0) , \r
49 fMultV0CThrHigh(0),\r
50 fRun(0),\r
51 fStartTime(0),\r
52 fEndTime(0),\r
53 fIsProcessed(kFALSE) \r
54\r
55{\r
e370cdfe 56 // default constructor\r
a08520b8 57 for(int i=0; i<kNCIUBoards ;i++) {\r
58 fClk1Win1[i] = fClk1Win2[i] = 0;\r
59 fDelayClk1Win1[i] = fDelayClk1Win2[i] = 0;\r
60 fClk2Win1[i] = fClk2Win2[i] = 0;\r
61 fDelayClk2Win1[i] = fDelayClk2Win2[i] = 0;\r
62 fLatchWin1[i] = fLatchWin2[i] = 0;\r
63 fResetWin1[i] = fResetWin2[i] = 0;\r
64 fPedestalSubtraction[i] = kFALSE;\r
e58b4e66 65 fTimeResolution[i] = 25./256.; // Default time resolution\r
66 fWidthResolution[i] = 0.4; // Default time width resolution\r
a08520b8 67 }\r
68}\r
69//________________________________________________________________\r
70AliVZEROTriggerData::AliVZEROTriggerData(Int_t nRun, UInt_t startTime, UInt_t endTime) :\r
71 TNamed(),\r
72 fBBAThreshold(0),\r
73 fBBCThreshold(0) , \r
74 fBGAThreshold(0) , \r
75 fBGCThreshold(0) , \r
76 fBBAForBGThreshold(0) , \r
77 fBBCForBGThreshold(0) , \r
78 fCentralityVOAThrLow(0) , \r
79 fCentralityVOAThrHigh(0) , \r
80 fCentralityVOCThrLow(0) , \r
81 fCentralityVOCThrHigh(0) , \r
82 fMultV0AThrLow(0) , \r
83 fMultV0AThrHigh(0) , \r
84 fMultV0CThrLow(0) , \r
85 fMultV0CThrHigh(0),\r
86 fRun(nRun),\r
87 fStartTime(startTime),\r
88 fEndTime(endTime),\r
89 fIsProcessed(kFALSE)\r
90{\r
e370cdfe 91 // Constructor\r
a08520b8 92 for(int i=0; i<kNCIUBoards ;i++) {\r
93 fClk1Win1[i] = fClk1Win2[i] = 0;\r
94 fDelayClk1Win1[i] = fDelayClk1Win2[i] = 0;\r
95 fClk2Win1[i] = fClk2Win2[i] = 0;\r
96 fDelayClk2Win1[i] = fDelayClk2Win2[i] = 0;\r
97 fLatchWin1[i] = fLatchWin2[i] = 0;\r
98 fResetWin1[i] = fResetWin2[i] = 0;\r
99 fPedestalSubtraction[i] = kFALSE;\r
e58b4e66 100 fTimeResolution[i] = 25./256.; // Default time resolution\r
101 fWidthResolution[i] = 0.4; // Default time width resolution\r
a08520b8 102 }\r
103 TString namst = "Trigger_FEE";\r
104 SetName(namst.Data());\r
105 SetTitle(namst.Data());\r
106 \r
107}\r
a08520b8 108\r
109//________________________________________________________________\r
110AliVZEROTriggerData::~AliVZEROTriggerData(){\r
e370cdfe 111 // destructor\r
a08520b8 112}\r
113//_____________________________________________________________________________\r
114void AliVZEROTriggerData::FillData(AliVZERODataFEE * data){\r
e370cdfe 115 // Set all parameters from the data get by the shuttle\r
a08520b8 116 TMap * params = data->GetParameters();\r
117 TIter iter(params); \r
118 TObjString* aliasName;\r
119 \r
120 while (( aliasName = (TObjString*) iter.Next() )) {\r
121 AliDCSValue* aValue = (AliDCSValue*) params->GetValue(aliasName);\r
e58b4e66 122 Float_t val;\r
123 if(aValue) {\r
124 val = aValue->GetFloat();\r
125 //AliInfo(Form("%s : %f",aliasName->String().Data(), val));\r
126 SetParameter(aliasName->String(),val);\r
127 }\r
a08520b8 128 } \r
129}\r
130\r
131//_____________________________________________________________________________\r
132void AliVZEROTriggerData::SetParameter(TString name, Float_t val){\r
e370cdfe 133 // Set given parameter\r
134 \r
a08520b8 135 Int_t iBoard = -1;\r
136 Int_t iChannel = -1;\r
137\r
138 TSeqCollection* nameSplit = name.Tokenize("/");\r
139 TObjString * boardName = (TObjString *)nameSplit->At(2);\r
140 if(!boardName->String().Contains("CCIU")) sscanf(boardName->String().Data(),"CIU%d",&iBoard);\r
141 \r
142 TString paramName = ((TObjString *)nameSplit->At(3))->String();\r
143 Char_t channel[2] ; channel[1] = '\0';\r
144 channel[0] = paramName[paramName.Sizeof()-2];\r
145 sscanf(channel,"%d",&iChannel);\r
146 \r
147 if(name.Contains("DelayClk1Win1")) SetDelayClk1Win1((UShort_t) val,iBoard-1);\r
148 else if(name.Contains("Clk1Win1")) SetClk1Win1((UShort_t) val,iBoard-1);\r
149 else if(name.Contains("DelayClk1Win2")) SetDelayClk1Win2((UShort_t) val,iBoard-1);\r
150 else if(name.Contains("Clk1Win2")) SetClk1Win2((UShort_t) val,iBoard-1);\r
151 else if(name.Contains("DelayClk2Win1")) SetDelayClk2Win1((UShort_t) val,iBoard-1);\r
152 else if(name.Contains("Clk2Win1")) SetClk2Win1((UShort_t) val,iBoard-1);\r
153 else if(name.Contains("DelayClk2Win2")) SetDelayClk2Win2((UShort_t) val,iBoard-1);\r
154 else if(name.Contains("Clk2Win2")) SetClk2Win2((UShort_t) val,iBoard-1);\r
155 else if(name.Contains("LatchWin1")) SetLatchWin1((UShort_t) val,iBoard-1);\r
156 else if(name.Contains("LatchWin2")) SetLatchWin2((UShort_t) val,iBoard-1);\r
157 else if(name.Contains("ResetWin1")) SetResetWin1((UShort_t) val,iBoard-1);\r
158 else if(name.Contains("ResetWin2")) SetResetWin2((UShort_t) val,iBoard-1);\r
159 else if(name.Contains("PedestalSubtraction")) SetPedestalSubtraction((Bool_t) val,iBoard-1);\r
e58b4e66 160 else if(name.Contains("TimeResolution")) SetTimeResolution((UShort_t) val,iBoard-1);\r
161 else if(name.Contains("WidthResolution")) SetWidthResolution((UShort_t) val,iBoard-1);\r
a08520b8 162 else if(name.Contains("BBAThreshold")) SetBBAThreshold((UShort_t) val);\r
163 else if(name.Contains("BBCThreshold")) SetBBCThreshold((UShort_t) val);\r
164 else if(name.Contains("BGAThreshold")) SetBGAThreshold((UShort_t) val);\r
165 else if(name.Contains("BGCThreshold")) SetBGCThreshold((UShort_t) val);\r
166 else if(name.Contains("BBAForBGThreshold")) SetBBAForBGThreshold((UShort_t) val);\r
167 else if(name.Contains("BBCForBGThreshold")) SetBBCForBGThreshold((UShort_t) val);\r
168 else if(name.Contains("CentralityV0AThrLow")) SetCentralityV0AThrLow((UShort_t) val);\r
169 else if(name.Contains("CentralityV0AThrHigh")) SetCentralityV0AThrHigh((UShort_t) val);\r
170 else if(name.Contains("CentralityV0CThrLow")) SetCentralityV0CThrLow((UShort_t) val);\r
171 else if(name.Contains("CentralityV0CThrHigh")) SetCentralityV0CThrHigh((UShort_t) val);\r
172 else if(name.Contains("MultV0AThrLow")) SetMultV0AThrLow((UShort_t) val);\r
173 else if(name.Contains("MultV0AThrHigh")) SetMultV0AThrHigh((UShort_t) val);\r
174 else if(name.Contains("MultV0CThrLow")) SetMultV0CThrLow((UShort_t) val);\r
175 else if(name.Contains("MultV0CThrHigh")) SetMultV0CThrHigh((UShort_t) val);\r
176 else if(name.Contains("TriggerSelect")) SetTriggerSelected((UShort_t) val, iBoard -1);\r
177 else if(name.Contains("EnableCharge")) SetEnableCharge((Bool_t) val, iBoard -1, iChannel-1);\r
178 else if(name.Contains("EnableTiming")) SetEnableTiming((Bool_t) val, iBoard -1, iChannel-1);\r
179 else if(name.Contains("DiscriThr")) SetDiscriThr((UShort_t) val, iBoard -1, iChannel-1);\r
180 else if(name.Contains("DelayHit")) SetDelayHit((UShort_t) val, iBoard -1, iChannel-1);\r
181 else if(name.Contains("PedOdd")) SetPedestal((UShort_t) val, 1, iBoard -1, iChannel-1);\r
182 else if(name.Contains("PedEven")) SetPedestal((UShort_t) val, 0, iBoard -1, iChannel-1);\r
183 else if(name.Contains("PedCutOdd")) SetPedestalCut((UShort_t) val, 1, iBoard -1, iChannel-1);\r
184 else if(name.Contains("PedCutEven")) SetPedestalCut((UShort_t) val, 0, iBoard -1, iChannel-1);\r
185 else AliError(Form("No Setter found for FEE parameter : %s",name.Data()));\r
186}\r
187//________________________________________________________________\r
188void AliVZEROTriggerData::SetPedestalCut(UShort_t val,Int_t integrator, Int_t board, Int_t channel)\r
189{\r
e370cdfe 190 // Set Pedestal Cut of individual channel \r
a08520b8 191 if(board<kNCIUBoards && channel<kNChannels) {\r
192 if(integrator) fPedestalCutOdd[board][channel] = val;\r
193 else fPedestalCutEven[board][channel] = val;\r
194 } else AliError(Form("Impossible to write at : Board %d ; Channel %d",board,channel));\r
195}\r
196//________________________________________________________________\r
197UShort_t AliVZEROTriggerData::GetPedestalCut(Int_t integrator, Int_t board, Int_t channel)\r
198{\r
e370cdfe 199 // Get Pedestal Cut of individual channel \r
a08520b8 200 if(board<kNCIUBoards && channel<kNChannels) {\r
201 if(integrator) return(fPedestalCutOdd[board][channel]);\r
202 else return(fPedestalCutEven[board][channel]);\r
203 }else AliError(Form("Impossible to read at : Board %d ; Channel %d",board,channel));\r
204 return 0;\r
205}\r
206//________________________________________________________________\r
207void AliVZEROTriggerData::SetPedestal(UShort_t val, Int_t integrator, Int_t board, Int_t channel)\r
208{\r
e370cdfe 209 // Set Pedestal of individual channel \r
a08520b8 210 if(board<kNCIUBoards && channel<kNChannels) {\r
211 if(integrator) fPedestalOdd[board][channel] = val;\r
212 else fPedestalEven[board][channel] = val;\r
213 } else AliError(Form("Impossible to write at : Board %d ; Channel %d ; Integrator %d ",board,channel,integrator));\r
214}\r
215//________________________________________________________________\r
216UShort_t AliVZEROTriggerData::GetPedestal(Int_t integrator, Int_t board, Int_t channel)\r
217{\r
e370cdfe 218 // Get Pedestal of individual channel \r
a08520b8 219 if(board<kNCIUBoards && channel<kNChannels) {\r
220 if(integrator) return(fPedestalOdd[board][channel]);\r
221 else return(fPedestalEven[board][channel]);\r
222 } else AliError(Form("Impossible to read at : Board %d ; Channel %d",board,channel));\r
223 return 0;\r
224}\r
225//________________________________________________________________\r
226void AliVZEROTriggerData::SetDelayHit(UShort_t val,Int_t board, Int_t channel)\r
227{\r
e370cdfe 228 // Set Delay of individual channel \r
a08520b8 229 if(board<kNCIUBoards && channel<kNChannels) fDelayHit[board][channel] = val;\r
230 else AliError(Form("Impossible to write at : Board %d ; Channel %d",board,channel));\r
231}\r
232//________________________________________________________________\r
233UShort_t AliVZEROTriggerData::GetDelayHit(Int_t board, Int_t channel)\r
234{\r
e370cdfe 235 // Get Delay of individual channel \r
a08520b8 236 if(board<kNCIUBoards && channel<kNChannels) return(fDelayHit[board][channel]);\r
237 else AliError(Form("Impossible to read at : Board %d ; Channel %d",board,channel));\r
238 return 0;\r
239}\r
240//________________________________________________________________\r
241void AliVZEROTriggerData::SetDiscriThr(UShort_t val,Int_t board, Int_t channel)\r
242{\r
e370cdfe 243 // Set discriminator threshold\r
a08520b8 244 if(board<kNCIUBoards && channel<kNChannels) fDiscriThr[board][channel] = val;\r
245 else AliError(Form("Impossible to write at : Board %d ; Channel %d",board,channel));\r
246}\r
247//________________________________________________________________\r
248UShort_t AliVZEROTriggerData::GetDiscriThr(Int_t board, Int_t channel)\r
249{\r
e370cdfe 250 // Get discriminator threshold\r
a08520b8 251 if(board<kNCIUBoards && channel<kNChannels) return(fDiscriThr[board][channel]);\r
252 else AliError(Form("Impossible to read at : Board %d ; Channel %d",board,channel));\r
253 return 0;\r
254}\r
255//________________________________________________________________\r
256void AliVZEROTriggerData::SetEnableCharge(Bool_t val,Int_t board, Int_t channel)\r
257{\r
e370cdfe 258 // Set the channels enabled for Charge triggers\r
a08520b8 259 if(board<kNCIUBoards && channel<kNChannels) fEnableCharge[board][channel] = val;\r
260 else AliError(Form("Impossible to write at : Board %d ; Channel %d",board,channel));\r
261}\r
262//________________________________________________________________\r
263Bool_t AliVZEROTriggerData::GetEnableCharge(Int_t board, Int_t channel)\r
264{\r
e370cdfe 265 // Get the channels enabled for Charge triggers\r
a08520b8 266 if(board<kNCIUBoards && channel<kNChannels) return(fEnableCharge[board][channel]);\r
267 else AliError(Form("Impossible to read at : Board %d ; Channel %d",board,channel));\r
268 return kFALSE;\r
269}\r
270//________________________________________________________________\r
271void AliVZEROTriggerData::SetEnableTiming(Bool_t val,Int_t board, Int_t channel)\r
272{\r
e370cdfe 273 // Set the channels enabled for Timing triggers\r
a08520b8 274 if(board<kNCIUBoards && channel<kNChannels) fEnableTiming[board][channel] = val;\r
275 else AliError(Form("Impossible to write at : Board %d ; Channel %d",board,channel));\r
276}\r
277//________________________________________________________________\r
278Bool_t AliVZEROTriggerData::GetEnableTiming(Int_t board, Int_t channel)\r
279{\r
e370cdfe 280 // Get the channels enabled for Timing triggers\r
a08520b8 281 if(board<kNCIUBoards && channel<kNChannels) return(fEnableTiming[board][channel]);\r
282 else AliError(Form("Impossible to read at : Board %d ; Channel %d",board,channel));\r
283 return kFALSE;\r
284}\r
285//________________________________________________________________\r
286void AliVZEROTriggerData::SetTriggerSelected(UShort_t trigger, Int_t output)\r
287{\r
e370cdfe 288 // Set the trigger selected on the outputs to CTP\r
a08520b8 289 if(output<kNTriggerOutputs) fTriggerSelected[output] = trigger;\r
290 else AliError(Form("Trigger output number %d not valid",output));\r
291}\r
292\r
293//________________________________________________________________\r
294void AliVZEROTriggerData::SetClk1Win1(UShort_t* clks)\r
295{\r
e370cdfe 296 // Set Win clock of BB\r
a08520b8 297 if(clks) for(int t=0; t<kNCIUBoards; t++) SetClk1Win1(clks[t],t);\r
298 else AliFatal("Profil Clock1 Win1 Not defined.");\r
299}\r
300//________________________________________________________________\r
301void AliVZEROTriggerData::SetClk2Win1(UShort_t* clks)\r
302{\r
e370cdfe 303 // Set Win clock of BB\r
a08520b8 304 if(clks) for(int t=0; t<kNCIUBoards; t++) SetClk2Win1(clks[t],t);\r
305 else AliFatal("Profil Clock2 Win1 Not defined.");\r
306}\r
307//________________________________________________________________\r
308void AliVZEROTriggerData::SetClk1Win1(UShort_t clk, Int_t board)\r
309{\r
e370cdfe 310 // Set Win clock of BB\r
a08520b8 311 if(IsClkValid(clk) && (board<kNCIUBoards)) fClk1Win1[board] = clk;\r
312 else AliError(Form("Profil Clock1 Win1 of board %d is not valid : %d",board,clk));\r
313}\r
314//________________________________________________________________\r
315void AliVZEROTriggerData::SetClk2Win1(UShort_t clk, Int_t board)\r
316{\r
e370cdfe 317 // Set Win clock of BB\r
a08520b8 318 if(IsClkValid(clk) && (board<kNCIUBoards)) fClk2Win1[board] = clk;\r
319 else AliError(Form("Profil Clock2 Win1 of board %d is not valid",board));\r
320}\r
321//________________________________________________________________\r
322void AliVZEROTriggerData::SetClk1Win2(UShort_t* clks)\r
323{\r
e370cdfe 324 // Set Win clock of BG\r
a08520b8 325 if(clks) for(int t=0; t<kNCIUBoards; t++) SetClk1Win2(clks[t],t);\r
326 else AliFatal("Profil Clock1 Win2 Not defined.");\r
327}\r
328//________________________________________________________________\r
329void AliVZEROTriggerData::SetClk2Win2(UShort_t* clks)\r
330{\r
e370cdfe 331 // Set Win clock of BG\r
a08520b8 332 if(clks) for(int t=0; t<kNCIUBoards; t++) SetClk2Win2(clks[t],t);\r
333 else AliFatal("Profil Clock2 Win2 Not defined.");\r
334}\r
335//________________________________________________________________\r
336void AliVZEROTriggerData::SetClk1Win2(UShort_t clk, Int_t board)\r
337{\r
e370cdfe 338 // Set Win clock of BG\r
a08520b8 339 if(IsClkValid(clk) && (board<kNCIUBoards)) fClk1Win2[board] = clk;\r
340 else AliError(Form("Profil Clock1 Win2 of board %d is not valid",board));\r
341}\r
342//________________________________________________________________\r
343void AliVZEROTriggerData::SetClk2Win2(UShort_t clk, Int_t board)\r
344{\r
e370cdfe 345 // Set Win clock of BG\r
a08520b8 346 if(IsClkValid(clk) && (board<kNCIUBoards)) fClk2Win2[board] = clk;\r
347 else AliError(Form("Profil Clock2 Win2 of board %d is not valid",board));\r
348}\r
349//________________________________________________________________\r
350void AliVZEROTriggerData::SetDelayClk1Win1(UShort_t* delays)\r
351{\r
e370cdfe 352 // Set Delay for Win clock of BB\r
a08520b8 353 if(delays) for(int t=0; t<kNCIUBoards; t++) SetDelayClk1Win1(delays[t],t);\r
354 else AliFatal("Profil Clock1 Win1 Delays Not defined.");\r
355}\r
356//________________________________________________________________\r
357void AliVZEROTriggerData::SetDelayClk1Win1(UShort_t delay, Int_t board)\r
358{\r
e370cdfe 359 // Set Delay for Win clock of BB\r
a08520b8 360 if(delay>1023){\r
361 AliWarning(Form("Profil Clock1 Win1 Delay of board %d should be less 1023 is currently %d. Truncated to the first 10 bits",board, delay));\r
362 delay = delay & 0x3FF;\r
363 }\r
364 if(board<kNCIUBoards) fDelayClk1Win1[board] = delay;\r
365 else AliError("Trying to write out of the array");\r
366}\r
367//________________________________________________________________\r
368void AliVZEROTriggerData::SetDelayClk2Win1(UShort_t* delays)\r
369{\r
e370cdfe 370 // Set Delay for Win clock of BB\r
a08520b8 371 if(delays) for(int t=0; t<kNCIUBoards; t++) SetDelayClk2Win1(delays[t],t);\r
372 else AliFatal("Profil Clock2 Win1 Delays Not defined.");\r
373}\r
374//________________________________________________________________\r
375void AliVZEROTriggerData::SetDelayClk2Win1(UShort_t delay, Int_t board)\r
376{\r
e370cdfe 377 // Set Delay for Win clock of BB\r
a08520b8 378 if(delay>1023){\r
379 AliWarning(Form("Profil Clock2 Win1 Delay of board %d should be less 1023 is currently %d. Truncated to the first 10 bits",board, delay));\r
380 delay = delay & 0x3FF;\r
381 }\r
382 if(board<kNCIUBoards) fDelayClk2Win1[board] = delay;\r
383 else AliError("Trying to write out of the array");\r
384}\r
385//________________________________________________________________\r
386void AliVZEROTriggerData::SetDelayClk1Win2(UShort_t* delays)\r
387{\r
e370cdfe 388 // Set Delay for Win clock of BG\r
a08520b8 389 if(delays) for(int t=0; t<kNCIUBoards; t++) SetDelayClk1Win2(delays[t],t);\r
390 else AliFatal("Profil Clock1 Win2 Delays Not defined.");\r
391}\r
392//________________________________________________________________\r
393void AliVZEROTriggerData::SetDelayClk1Win2(UShort_t delay, Int_t board)\r
394{\r
e370cdfe 395 // Set Delay for Win clock of BG\r
a08520b8 396 if(delay>1023){\r
397 AliWarning(Form("Profil Clock1 Win2 Delay of board %d should be less 1023 is currently %d. Truncated to the first 10 bits",board, delay));\r
398 delay = delay & 0x3FF;\r
399 }\r
400 if(board<kNCIUBoards) fDelayClk1Win2[board] = delay;\r
401 else AliError("Trying to write out of the array");\r
402}\r
403//________________________________________________________________\r
404void AliVZEROTriggerData::SetDelayClk2Win2(UShort_t* delays)\r
405{\r
e370cdfe 406 // Set Delay for Win clock of BG\r
a08520b8 407 if(delays) for(int t=0; t<kNCIUBoards; t++) SetDelayClk2Win2(delays[t],t);\r
408 else AliFatal("Profil Clock2 Win2 Delays Not defined.");\r
409}\r
410//________________________________________________________________\r
411void AliVZEROTriggerData::SetDelayClk2Win2(UShort_t delay, Int_t board)\r
412{\r
e370cdfe 413 // Set Delay for Win clock of BG\r
a08520b8 414 if(delay>1023){\r
415 AliWarning(Form("Profil Clock2 Win2 Delay of board %d should be less 1023 is currently %d. Truncated to the first 10 bits",board, delay));\r
416 delay = delay & 0x3FF;\r
417 }\r
418 if(board<kNCIUBoards) fDelayClk2Win2[board] = delay;\r
419 else AliError("Trying to write out of the array");\r
420}\r
421//________________________________________________________________\r
422void AliVZEROTriggerData::SetLatchWin1(UShort_t *latchs){\r
e370cdfe 423 // Set Latch Win clock for BB\r
a08520b8 424 if(latchs) for(int t=0; t<kNCIUBoards; t++) SetLatchWin1(latchs[t],t);\r
425 else AliFatal("Latch Win1 profil Not defined.");\r
426}\r
427//________________________________________________________________\r
428void AliVZEROTriggerData::SetLatchWin1(UShort_t latch, Int_t board)\r
429{\r
e370cdfe 430 // Set Latch Win clock for BB\r
a08520b8 431 if(IsClkValid(latch) && (board<kNCIUBoards)) fLatchWin1[board] = latch;\r
432 else AliError(Form("Latch Win1 profil of board %d is not valid",board));\r
433}\r
434//________________________________________________________________\r
435void AliVZEROTriggerData::SetLatchWin2(UShort_t *latchs){\r
e370cdfe 436 // Set Latch Win clock for BG\r
a08520b8 437 if(latchs) for(int t=0; t<kNCIUBoards; t++) SetLatchWin2(latchs[t],t);\r
438 else AliFatal("Latch Win2 profil Not defined.");\r
439}\r
440//________________________________________________________________\r
441void AliVZEROTriggerData::SetLatchWin2(UShort_t latch, Int_t board)\r
442{\r
e370cdfe 443 // Set Latch Win clock for BG\r
a08520b8 444 if(IsClkValid(latch) && (board<kNCIUBoards)) fLatchWin2[board] = latch;\r
445 else AliError(Form("Latch Win2 profil of board %d is not valid",board));\r
446}\r
447//________________________________________________________________\r
448void AliVZEROTriggerData::SetResetWin1(UShort_t *resets){\r
e370cdfe 449 // Set Reset Win clock for BB\r
a08520b8 450 if(resets) for(int t=0; t<kNCIUBoards; t++) SetResetWin1(resets[t],t);\r
451 else AliFatal("Reset Win1 profil Not defined.");\r
452}\r
453//________________________________________________________________\r
454void AliVZEROTriggerData::SetResetWin1(UShort_t reset, Int_t board)\r
455{\r
e370cdfe 456 // Set Reset Win clock for BB\r
a08520b8 457 if(IsClkValid(reset) && (board<kNCIUBoards)) fResetWin1[board] = reset;\r
458 else AliError(Form("Reset Win1 profil of board %d is not valid",board));\r
459}\r
460//________________________________________________________________\r
461void AliVZEROTriggerData::SetResetWin2(UShort_t *resets){\r
e370cdfe 462 // Set Reset Win clock for BG\r
a08520b8 463 if(resets) for(int t=0; t<kNCIUBoards; t++) SetResetWin2(resets[t],t);\r
464 else AliFatal("Reset Win2 profil Not defined.");\r
465}\r
466//________________________________________________________________\r
467void AliVZEROTriggerData::SetResetWin2(UShort_t reset, Int_t board)\r
468{\r
e370cdfe 469 // Set Reset Win clock for BG\r
a08520b8 470 if(IsClkValid(reset) && (board<kNCIUBoards)) fResetWin2[board] = reset;\r
471 else AliError(Form("Reset Win2 profil of board %d is not valid",board));\r
472}\r
473//________________________________________________________________\r
474void AliVZEROTriggerData::SetPedestalSubtraction(Bool_t *peds){\r
e370cdfe 475 // Set Pedestal Subtraction Parameter\r
a08520b8 476 if(peds) for(int t=0; t<kNCIUBoards; t++) SetPedestalSubtraction(peds[t],t);\r
477 else AliFatal("Pedestal Subtraction Not defined.");\r
478 \r
479}\r
480//________________________________________________________________\r
481void AliVZEROTriggerData::SetPedestalSubtraction(Bool_t ped, Int_t board)\r
482{\r
e370cdfe 483 // Set Pedestal Subtraction Parameter\r
a08520b8 484 if((board<kNCIUBoards)) fPedestalSubtraction[board] = ped;\r
485 else AliError(Form("Board %d is not valid",board));\r
486}\r
e58b4e66 487//________________________________________________________________\r
488void AliVZEROTriggerData::SetTimeResolution(UShort_t *resols){\r
489 // Set Time Resolution of the TDC\r
490 if(resols) for(int t=0; t<kNCIUBoards; t++) SetTimeResolution(resols[t],t);\r
491 else AliFatal("Time Resolution not defined.");\r
492 \r
493}\r
494//________________________________________________________________\r
495void AliVZEROTriggerData::SetTimeResolution(UShort_t resol, Int_t board)\r
496{\r
497 // Set Time Resolution of the TDC\r
498 if((board<kNCIUBoards)) {\r
499 switch(resol){\r
500 case 0:\r
501 fTimeResolution[board] = 25./256.;\r
502 break;\r
503 case 1:\r
504 fTimeResolution[board] = 25./128.;\r
505 break;\r
506 case 2:\r
507 fTimeResolution[board] = 25./64.;\r
508 break;\r
509 case 3:\r
510 fTimeResolution[board] = 25./32.;\r
511 break;\r
512 case 4:\r
513 fTimeResolution[board] = 25./16.;\r
514 break;\r
515 case 5:\r
516 fTimeResolution[board] = 25./8.;\r
517 break;\r
518 case 6:\r
519 fTimeResolution[board] = 6.25;\r
520 break;\r
521 case 7:\r
522 fTimeResolution[board] = 12.5;\r
523 break;\r
524 }\r
525 } else AliError(Form("Board %d is not valid",board));\r
526}\r
527//________________________________________________________________\r
528void AliVZEROTriggerData::SetWidthResolution(UShort_t *resols){\r
529 // Set Time Width Resolution of the TDC\r
530 if(resols) for(int t=0; t<kNCIUBoards; t++) SetWidthResolution(resols[t],t);\r
531 else AliFatal("Width Resolution not defined.");\r
532 \r
533}\r
534//________________________________________________________________\r
535void AliVZEROTriggerData::SetWidthResolution(UShort_t resol, Int_t board)\r
536{\r
537 // Set Time Width Resolution of the TDC\r
538 if((board<kNCIUBoards)){\r
539 switch(resol){\r
540 case 0:\r
541 fWidthResolution[board] = 25./256.;\r
542 break;\r
543 case 1:\r
544 fWidthResolution[board] = 25./128.;\r
545 break;\r
546 case 2:\r
547 fWidthResolution[board] = 25./64.;\r
548 break;\r
549 case 3:\r
550 fWidthResolution[board] = 25./32.;\r
551 break;\r
552 case 4:\r
553 fWidthResolution[board] = 25./16.;\r
554 break;\r
555 case 5:\r
556 fWidthResolution[board] = 25./8.;\r
557 break;\r
558 case 6:\r
559 fWidthResolution[board] = 6.25;\r
560 break;\r
561 case 7:\r
562 fWidthResolution[board] = 12.5;\r
563 break;\r
564 case 8:\r
565 fWidthResolution[board] = 25.;\r
566 break;\r
567 case 9:\r
568 fWidthResolution[board] = 50.;\r
569 break;\r
570 case 10:\r
571 fWidthResolution[board] = 100.;\r
572 break;\r
573 case 11:\r
574 fWidthResolution[board] = 200.;\r
575 break;\r
576 case 12:\r
577 fWidthResolution[board] = 400.;\r
578 break;\r
579 case 13:\r
580 fWidthResolution[board] = 800.;\r
581 break;\r
582 \r
583 }\r
584 }else AliError(Form("Board %d is not valid",board));\r
585}\r
a08520b8 586\r
587//________________________________________________________________\r
e370cdfe 588Bool_t AliVZEROTriggerData::IsClkValid(UShort_t clock) const {\r
589 // Check if the given clock has a valid profil.\r
a08520b8 590 Bool_t word[5];\r
591 Bool_t isValid = kTRUE;\r
e370cdfe 592 Short_t risingEdge = 0;\r
593 Short_t fallingEdge = 0;\r
a08520b8 594 for(int i=0 ; i<5 ; i++) word[i] = (clock >> i) & 0x1;\r
595 \r
596 if(word[0] != word[4]){\r
e370cdfe 597 if(word[4]) fallingEdge++;\r
598 else risingEdge++;\r
a08520b8 599 } \r
600 for(int i=1 ; i<5 ; i++){\r
601 if(word[i] != word[i-1]) {\r
e370cdfe 602 if(word[i-1]) fallingEdge++;\r
603 else risingEdge++;\r
a08520b8 604 }\r
605 }\r
e370cdfe 606 if((fallingEdge>1)||(risingEdge>1)) isValid = kFALSE;\r
607 if(((risingEdge==0)&&(fallingEdge==0)) &&(!word[0])) isValid = kFALSE;\r
a08520b8 608 return isValid;\r
609}\r
610\r
f3051e80 611\r
e370cdfe 612\r