]>
Commit | Line | Data |
---|---|---|
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 | |
31 | ClassImp(AliVZEROTriggerData)\r | |
32 | //________________________________________________________________\r | |
33 | \r | |
34 | AliVZEROTriggerData::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 | |
70 | AliVZEROTriggerData::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 | |
110 | AliVZEROTriggerData::~AliVZEROTriggerData(){\r | |
e370cdfe | 111 | // destructor\r |
a08520b8 | 112 | }\r |
113 | //_____________________________________________________________________________\r | |
114 | void 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 | |
132 | void 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 | |
188 | void 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 | |
197 | UShort_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 | |
207 | void 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 | |
216 | UShort_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 | |
226 | void 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 | |
233 | UShort_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 | |
241 | void 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 | |
248 | UShort_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 | |
256 | void 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 | |
263 | Bool_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 | |
271 | void 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 | |
278 | Bool_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 | |
286 | void 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 | |
294 | void 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 | |
301 | void 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 | |
308 | void 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 | |
315 | void 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 | |
322 | void 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 | |
329 | void 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 | |
336 | void 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 | |
343 | void 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 | |
350 | void 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 | |
357 | void 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 | |
368 | void 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 | |
375 | void 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 | |
386 | void 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 | |
393 | void 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 | |
404 | void 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 | |
411 | void 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 | |
422 | void 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 | |
428 | void 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 | |
435 | void 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 | |
441 | void 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 | |
448 | void 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 | |
454 | void 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 | |
461 | void 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 | |
467 | void 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 | |
474 | void 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 | |
481 | void 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 |
488 | void 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 | |
495 | void 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 | |
528 | void 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 | |
535 | void 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 | 588 | Bool_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 |