]> git.uio.no Git - u/mrichter/AliRoot.git/blame - TRD/AliTRDSaxHandler.cxx
Moving reconstruction settings to the reco params, new cosmics reco param OCDB entry...
[u/mrichter/AliRoot.git] / TRD / AliTRDSaxHandler.cxx
CommitLineData
6b36d985 1/*************************************************************************\r
2 * * Copyright(c) 1998-2008, ALICE Experiment at CERN, All rights reserved. *\r
3 * * *\r
4 * * Author: The ALICE Off-line Project. *\r
5 * * Contributors are mentioned in the code where appropriate. *\r
6 * * *\r
7 * * Permission to use, copy, modify and distribute this software and its *\r
8 * * documentation strictly for non-commercial purposes is hereby granted *\r
9 * * without fee, provided that the above copyright notice appears in all *\r
10 * * copies and that both the copyright notice and this permission notice *\r
11 * * appear in the supporting documentation. The authors make no claims *\r
12 * * about the suitability of this software for any purpose. It is *\r
13 * * provided "as is" without express or implied warranty. *\r
14 * **************************************************************************/\r
15\r
16/* $Id: AliTRDSaxHandler.cxx 26327 2008-06-02 15:36:18Z cblume $ */\r
17\r
18////////////////////////////////////////////////////////////////////////////\r
19// //\r
20// The SAX XML file handler used in the preprocessor //\r
21// //\r
22// Author: //\r
23// Frederick Kramer (kramer@ikf.uni-frankfurt.de) //\r
24// //\r
25////////////////////////////////////////////////////////////////////////////\r
26\r
6b36d985 27#include <TList.h>\r
28#include <TXMLAttr.h>\r
6b36d985 29#include <TObjArray.h>\r
dc48fccf 30#include <TMath.h>\r
6b36d985 31\r
32#include "AliLog.h"\r
33\r
34#include "AliTRDSaxHandler.h"\r
35#include "AliTRDgeometry.h"\r
36\r
37#include "Cal/AliTRDCalDCS.h"\r
38#include "Cal/AliTRDCalDCSFEE.h"\r
39#include "Cal/AliTRDCalDCSPTR.h"\r
40#include "Cal/AliTRDCalDCSGTU.h"\r
41\r
42ClassImp(AliTRDSaxHandler)\r
6af58a56 43 \r
6b36d985 44//_____________________________________________________________________________\r
45AliTRDSaxHandler::AliTRDSaxHandler()\r
46 :TObject()\r
47 ,fHandlerStatus(0)\r
48 ,fNDCSPTR(0)\r
49 ,fNDCSGTU(0)\r
50 ,fFEEArr(new TObjArray(540))\r
51 ,fPTRArr(new TObjArray(6))\r
52 ,fGTUArr(new TObjArray(19))\r
53 ,fSystem(0)\r
6af58a56 54 ,fInsideRstate(0)\r
6b36d985 55 ,fCurrentSM(0)\r
56 ,fCurrentStack(0)\r
6af58a56 57 ,fCurrentROB(-1)\r
58 ,fCurrentMCM(-1)\r
6b36d985 59 ,fContent(0)\r
60 ,fDCSFEEObj(0)\r
61 ,fDCSPTRObj(0)\r
62 ,fDCSGTUObj(0)\r
63 ,fCalDCSObj(new AliTRDCalDCS())\r
64{\r
65 //\r
66 // AliTRDSaxHandler default constructor\r
67 //\r
68 fFEEArr->SetOwner();\r
69 fPTRArr->SetOwner();\r
70 fGTUArr->SetOwner();\r
71}\r
72\r
73//_____________________________________________________________________________\r
74AliTRDSaxHandler::AliTRDSaxHandler(const AliTRDSaxHandler &sh)\r
75 :TObject(sh)\r
76 ,fHandlerStatus(0)\r
77 ,fNDCSPTR(0)\r
78 ,fNDCSGTU(0)\r
79 ,fFEEArr(0)\r
80 ,fPTRArr(0)\r
81 ,fGTUArr(0)\r
82 ,fSystem(0)\r
6af58a56 83 ,fInsideRstate(0)\r
6b36d985 84 ,fCurrentSM(0)\r
85 ,fCurrentStack(0)\r
6af58a56 86 ,fCurrentROB(-1)\r
87 ,fCurrentMCM(-1)\r
6b36d985 88 ,fContent(0)\r
89 ,fDCSFEEObj(0)\r
90 ,fDCSPTRObj(0)\r
91 ,fDCSGTUObj(0)\r
92 ,fCalDCSObj(0)\r
93{\r
94 //\r
95 // AliTRDSaxHandler copy constructor\r
96 //\r
97}\r
98\r
99//_____________________________________________________________________________\r
100AliTRDSaxHandler &AliTRDSaxHandler::operator=(const AliTRDSaxHandler &sh)\r
101{\r
102 //\r
103 // Assignment operator\r
104 //\r
105 if (&sh == this) return *this;\r
106\r
107 new (this) AliTRDSaxHandler(sh);\r
108 return *this;\r
109}\r
110\r
111//_____________________________________________________________________________\r
112AliTRDSaxHandler::~AliTRDSaxHandler()\r
113{\r
114 //\r
115 // AliTRDSaxHandler destructor\r
116 //\r
117\r
118 if (fFEEArr) {\r
119 delete fFEEArr;\r
120 fFEEArr = 0x0;\r
121 }\r
122 if (fPTRArr) {\r
123 delete fPTRArr;\r
124 fPTRArr = 0x0;\r
125 }\r
126 if (fGTUArr) {\r
127 delete fGTUArr;\r
128 fGTUArr = 0x0;\r
129 }\r
130 if (fCalDCSObj) {\r
131 delete fCalDCSObj;\r
132 fCalDCSObj = 0x0;\r
133 }\r
134\r
135}\r
136\r
137//_____________________________________________________________________________\r
138AliTRDCalDCS* AliTRDSaxHandler::GetCalDCSObj()\r
139{\r
140 // put the arrays in the global calibration object and return this\r
6b36d985 141 fCalDCSObj->SetFEEArr(fFEEArr);\r
142 fCalDCSObj->SetPTRArr(fPTRArr);\r
143 fCalDCSObj->SetGTUArr(fGTUArr);\r
144 return fCalDCSObj;\r
145}\r
146\r
147//_____________________________________________________________________________\r
148void AliTRDSaxHandler::OnStartDocument()\r
149{\r
150 // if something should happen right at the beginning of the\r
151 // XML document, this must happen here\r
152}\r
153\r
154//_____________________________________________________________________________\r
155void AliTRDSaxHandler::OnEndDocument()\r
156{\r
157 // if something should happen at the end of the XML document\r
158 // this must be done here\r
159}\r
160\r
161//_____________________________________________________________________________\r
162void AliTRDSaxHandler::OnStartElement(const char *name, const TList *attributes)\r
163{\r
164 // when a new XML element is found, it is processed here\r
165 fContent = "";\r
166 Int_t dcsId = 0;\r
167 TString strName = name;\r
168 TString dcsTitle = "";\r
169\r
170 // set the current system if necessary\r
171 if (strName.Contains("FEE")) fSystem = kInsideFEE;\r
172 if (strName.Contains("PTR")) fSystem = kInsidePTR;\r
173 if (strName.Contains("GTU")) fSystem = kInsideGTU;\r
174\r
6af58a56 175 // set if we are inside rstate \r
176 // (in principle not necessary - just to be more safe against stupid tags)\r
177 if (strName.Contains("rstate")) fInsideRstate = 1;\r
178\r
6b36d985 179 // get the attributes of the element\r
180 TXMLAttr *attr;\r
181 TIter next(attributes);\r
182 while ((attr = (TXMLAttr*) next())) {\r
183 TString attribName = attr->GetName();\r
184 if (attribName.Contains("id") && strName.Contains("DCS")) {\r
185 dcsTitle = name;\r
186 dcsId = atoi(attr->GetValue());\r
187 }\r
188 if (attribName.Contains("roc") && strName.Contains("ack")) {\r
189 if (atoi(attr->GetValue()) != fDCSFEEObj->GetDCSid())\r
190 fDCSFEEObj->SetStatusBit(3); // consistence check\r
191 }\r
6af58a56 192 if (attribName.Contains("rob") && (fInsideRstate == 1)) {\r
193 fCurrentROB = atoi(attr->GetValue());\r
194 }\r
195 if (attribName.Contains("mcm") && (fInsideRstate == 1)) {\r
196 fCurrentMCM = atoi(attr->GetValue());\r
197 }\r
6b36d985 198 if (attribName.Contains("sm") && strName.Contains("DCS")) {\r
199 fCurrentSM = atoi(attr->GetValue()); // only for GTU/PTR\r
200 }\r
201 if (attribName.Contains("id") && strName.Contains("STACK")) {\r
202 fCurrentStack = atoi(attr->GetValue()); // only for GTU/PTR\r
203 }\r
204 }\r
205\r
206 // if there is a new DCS element put it in the correct array\r
207 if (strName.Contains("DCS")) {\r
208 if (fSystem == kInsideFEE) {\r
209 fDCSFEEObj = new AliTRDCalDCSFEE(name,dcsTitle);\r
210 fDCSFEEObj->SetDCSid(dcsId);\r
211 }\r
212 if (fSystem == kInsidePTR) {\r
213 fDCSPTRObj = new AliTRDCalDCSPTR(name,dcsTitle);\r
214 fDCSPTRObj->SetDCSid(dcsId);\r
215 }\r
216 if (fSystem == kInsideGTU) {\r
217 fDCSGTUObj = new AliTRDCalDCSGTU(name,dcsTitle);\r
218 fDCSGTUObj->SetDCSid(dcsId);\r
219 }\r
220 }\r
221}\r
222\r
223//_____________________________________________________________________________\r
224void AliTRDSaxHandler::OnEndElement(const char *name)\r
225{\r
226 // do everything that needs to be done when an end tag of an element is found\r
227 TString strName = name;\r
228 \r
229 // if done with this DCS board, put it in the correct array\r
230 // no check for </ack> necessary since this check is done during XML validation\r
231 if (strName.Contains("DCS")) {\r
232 if (fSystem == kInsideFEE) {\r
233 Int_t detID = 0;\r
234 if (fDCSFEEObj->GetStatusBit() == 0) {\r
235 // if there were no errors (StatusBit==0) the following should match\r
236 detID = fDCSFEEObj->GetDCSid();\r
237 AliTRDgeometry aliGeo;\r
238 Int_t calDetID = aliGeo.GetDetector(fDCSFEEObj->GetLayer(),\r
239 fDCSFEEObj->GetStack(),\r
240 fDCSFEEObj->GetSM());\r
241 if (detID != calDetID) fDCSFEEObj->SetStatusBit(4);\r
242 } else {\r
243 // if the dcs board didn't properly respond, don't compare\r
244 detID = fDCSFEEObj->GetDCSid();\r
245 }\r
246 fFEEArr->AddAt(fDCSFEEObj,detID);\r
247 }\r
248 if (fSystem == kInsidePTR) {\r
249 fPTRArr->AddAt(fDCSPTRObj,fNDCSPTR);\r
250 fNDCSPTR++;\r
251 }\r
252 if (fSystem == kInsideGTU) {\r
253 fGTUArr->AddAt(fDCSGTUObj,fNDCSGTU);\r
254 fNDCSGTU++;\r
255 }\r
256 fCurrentSM = 99; // 99 for no SM set\r
257 fDCSFEEObj = 0; // just to be sure\r
258 return;\r
259 }\r
260\r
261 // done with this stack?\r
262 if (strName.Contains("STACK")) {\r
263 fCurrentStack = 99; // 99 for no stack set\r
264 }\r
265\r
6af58a56 266 // outside of rstate again?\r
267 if (strName.Contains("rstate")) {\r
268 fInsideRstate = 0;\r
269 fCurrentROB = -1;\r
270 fCurrentMCM = -1;\r
271 }\r
272 if (strName.Contains("ro-board")) fCurrentROB = -1;\r
273 \r
6b36d985 274 // store informations of the FEE DCS-Board\r
275 if (fSystem == kInsideFEE) {\r
6af58a56 276 if (strName.Contains("DNR")) fDCSFEEObj->SetStatusBit(fContent.Atoi());\r
277 if (strName.Contains("CFGNME")) fDCSFEEObj->SetConfigName(fContent);\r
278 if (strName.Contains("CFGTAG")) fDCSFEEObj->SetConfigTag(fContent.Atoi());\r
279 if (strName.Contains("CFGVRSN")) fDCSFEEObj->SetConfigVersion(fContent);\r
280 if (strName.Contains("NTB")) fDCSFEEObj->SetNumberOfTimeBins(fContent.Atoi());\r
281 if (strName.Contains("SM-ID")) fDCSFEEObj->SetSM(fContent.Atoi());\r
282 if (strName.Contains("STACK-ID")) fDCSFEEObj->SetStack(fContent.Atoi());\r
283 if (strName.Contains("LAYER-ID")) fDCSFEEObj->SetLayer(fContent.Atoi());\r
6b36d985 284 if (strName.Contains("SINGLEHITTHRES")) fDCSFEEObj->SetSingleHitThres(fContent.Atoi());\r
6af58a56 285 if (strName.Contains("THRPADCLSTHRS")) fDCSFEEObj->SetThreePadClustThres(fContent.Atoi());\r
286 if (strName.Contains("SELNOZS")) fDCSFEEObj->SetSelectiveNoZS(fContent.Atoi());\r
287 if (strName.Contains("FASTSTATNOISE")) fDCSFEEObj->SetFastStatNoise(fContent.Atoi());\r
288 if (strName.Contains("FILTWEIGHT")) fDCSFEEObj->SetTCFilterWeight(fContent.Atoi());\r
6b36d985 289 if (strName.Contains("FILTSHRTDCYPRM")) fDCSFEEObj->SetTCFilterShortDecPar(fContent.Atoi());\r
6af58a56 290 if (strName.Contains("FILTLNGDCYPRM")) fDCSFEEObj->SetTCFilterLongDecPar(fContent.Atoi());\r
291 if (strName.Contains("FLTR")) fDCSFEEObj->SetFilterType(fContent);\r
292 if (strName.Contains("READOUTPAR")) fDCSFEEObj->SetReadoutParam(fContent);\r
293 if (strName.Contains("TESTPATTERN")) fDCSFEEObj->SetTestPattern(fContent);\r
294 if (strName.Contains("TRCKLTMODE")) fDCSFEEObj->SetTrackletMode(fContent);\r
295 if (strName.Contains("TRCKLTDEF")) fDCSFEEObj->SetTrackletDef(fContent);\r
296 if (strName.Contains("TRIGGERSETUP")) fDCSFEEObj->SetTriggerSetup(fContent);\r
297 if (strName.Contains("ADDOPTIONS")) fDCSFEEObj->SetAddOptions(fContent);\r
298 if (fInsideRstate == 1) {\r
299 if (fCurrentROB>=0 && fCurrentMCM>=0) {\r
300 if (strName.Contains("gsm")) fDCSFEEObj->SetMCMGlobalState(fCurrentROB, fCurrentMCM, fContent.Atoi());\r
301 if (strName.Contains("ni")) fDCSFEEObj->SetMCMStateNI(fCurrentROB, fCurrentMCM, fContent.Atoi());\r
302 if (strName.Contains("ev")) fDCSFEEObj->SetMCMEventCnt(fCurrentROB, fCurrentMCM, fContent.Atoi());\r
303 if (strName.Contains("ptrg")) fDCSFEEObj->SetMCMPtCnt(fCurrentROB, fCurrentMCM, fContent.Atoi());\r
304 }\r
305 }\r
6b36d985 306 }\r
307\r
308 \r
309 // store pretrigger informations\r
310 if (fSystem == kInsidePTR) {\r
311 // no informations available yet\r
312 }\r
313 // store GTU informations\r
314 if (fSystem == kInsideGTU) {\r
315 if (strName.Contains("SMMASK"))\r
316 fHandlerStatus = fDCSGTUObj->SetSMMask(fContent);\r
317 if (strName.Contains("LINKMASK")) \r
318 fHandlerStatus = fDCSGTUObj->SetLinkMask(fCurrentSM, fCurrentStack, fContent);\r
319 if (strName.Contains("STMASK"))\r
320 fDCSGTUObj->SetStackMaskBit(fCurrentSM, fCurrentStack, fContent.Atoi());\r
321 }\r
322}\r
323\r
324//_____________________________________________________________________________\r
325void AliTRDSaxHandler::OnCharacters(const char *characters)\r
326{\r
327 // copy the the text content of an XML element\r
328 fContent = characters;\r
329}\r
330\r
331//_____________________________________________________________________________\r
332void AliTRDSaxHandler::OnComment(const char* /*text*/)\r
333{\r
334 // comments within the XML file are ignored\r
335}\r
336\r
337//_____________________________________________________________________________\r
338void AliTRDSaxHandler::OnWarning(const char *text)\r
339{\r
340 // process warnings here\r
341 AliInfo(Form("Warning: %s",text));\r
342}\r
343\r
344//_____________________________________________________________________________\r
345void AliTRDSaxHandler::OnError(const char *text)\r
346{\r
347 // process errors here\r
348 AliError(Form("Error: %s",text));\r
349}\r
350\r
351//_____________________________________________________________________________\r
352void AliTRDSaxHandler::OnFatalError(const char *text)\r
353{\r
354 // process fatal errors here\r
355 AliError(Form("Fatal error: %s",text)); // use AliFatal?\r
356}\r
357\r
358//_____________________________________________________________________________\r
359void AliTRDSaxHandler::OnCdataBlock(const char* /*text*/, Int_t /*len*/)\r
360{\r
361 // process character data blocks here\r
362 // not implemented and should not be used here\r
363}\r
364\r