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 **************************************************************************/
18 Revision 1.2 2007/09/17 16:34:54 cvetan
19 The package was overwriting the rootcint flags. This was fixed by applying the necessary changes in the DATE-dependent parts of the code
21 Revision 1.1 2007/09/17 10:23:31 cvetan
22 New TPC monitoring package from Stefan Kniege. The monitoring package can be started by running TPCMonitor.C macro located in macros folder.
27 ////////////////////////////////////////////////////////////////////////
29 // AliTPCMonitorDateFormat class
31 // Class for decoding raw data headers in DATE format
32 // Reads event and subevent header informations form DATE files
34 // Authors: Roland Bramm,
35 // Stefan Kniege, IKF, Frankfurt
37 /////////////////////////////////////////////////////////////////////////
39 #include "AliTPCMonitorDateFormat.h"
42 ClassImp(AliTPCMonitorDateFormat)
43 //____________________________________________________________________________
44 AliTPCMonitorDateFormat::AliTPCMonitorDateFormat(Char_t* data):
48 event((struct eventHeaderStruct*) fdataPtr),
56 //____________________________________________________________________________
57 AliTPCMonitorDateFormat::AliTPCMonitorDateFormat(const AliTPCMonitorDateFormat &dateformat) :
58 TNamed(dateformat.GetName(),dateformat.GetTitle()),
59 fdataPtr(dateformat.fdataPtr),
60 fsubEventPtr(dateformat.fsubEventPtr),
61 fcurrentPtr(dateformat.fcurrentPtr),
62 event((struct eventHeaderStruct*)dateformat.fdataPtr),
63 subEvent(dateformat.subEvent),
64 equipment(dateformat.equipment)
69 //____________________________________________________________________________
70 AliTPCMonitorDateFormat &AliTPCMonitorDateFormat:: operator= (const AliTPCMonitorDateFormat& dateformat)
73 // assignment operator
76 fdataPtr=dateformat.fdataPtr;
77 fsubEventPtr=dateformat.fsubEventPtr;
78 fcurrentPtr=dateformat.fcurrentPtr;
79 event=dateformat.event;
80 subEvent=dateformat.subEvent;
81 equipment=dateformat.equipment;
86 //____________________________________________________________________________
87 AliTPCMonitorDateFormat::~AliTPCMonitorDateFormat()
92 //____________________________________________________________________________
93 Int_t AliTPCMonitorDateFormat::GetEventSize()
96 return (Int_t)event->eventSize;
99 //____________________________________________________________________________
100 Int_t AliTPCMonitorDateFormat::GetEventHeaderSize()
102 // Return event header size
103 return (Int_t)event->eventHeadSize;
106 //____________________________________________________________________________
107 Int_t AliTPCMonitorDateFormat::GetEventHeaderBaseSize()
109 // Return event header base size
110 return (Int_t)EVENT_HEAD_BASE_SIZE;
113 //____________________________________________________________________________
114 Int_t AliTPCMonitorDateFormat::GetEventID()
117 return (Int_t)EVENT_ID_GET_NB_IN_RUN(event->eventId);
120 //____________________________________________________________________________
121 Int_t AliTPCMonitorDateFormat::GetEventLDC()
124 return (Int_t)event->eventLdcId;
127 //____________________________________________________________________________
128 Int_t AliTPCMonitorDateFormat::GetEventGDC()
131 return (Int_t)event->eventGdcId;
134 //____________________________________________________________________________
135 Int_t AliTPCMonitorDateFormat::GetEventRunID()
138 return (Int_t)event->eventRunNb;
141 //____________________________________________________________________________
142 Int_t AliTPCMonitorDateFormat::GetEventVersion()
144 // Return event version
145 return (Int_t)event->eventVersion;
148 //____________________________________________________________________________
149 Int_t AliTPCMonitorDateFormat::GetEventVersionMajor()
151 // retrun event version (16-32 bit)
152 return (Int_t)(GetEventVersion()>>16);
155 //____________________________________________________________________________
156 Int_t AliTPCMonitorDateFormat::GetEventVersionMinor()
158 // return event version (0-15 bit)
159 return (Int_t)(GetEventVersion()&0x0000ffff);
162 //____________________________________________________________________________
163 Bool_t AliTPCMonitorDateFormat::IsEventSuperEvent()
165 // Check if event ist super event
167 if(TEST_SYSTEM_ATTRIBUTE( event->eventTypeAttribute, ATTR_SUPER_EVENT ) == 1)
174 //____________________________________________________________________________
175 Bool_t AliTPCMonitorDateFormat::IsEventStartOfRun()
177 // Check if event ist Start of Run
179 if(event->eventType == START_OF_RUN)
186 //____________________________________________________________________________
187 Bool_t AliTPCMonitorDateFormat::IsEventEndOfRun()
189 // Check if event is End of Run
191 if(event->eventType == END_OF_RUN)
198 //____________________________________________________________________________
199 Bool_t AliTPCMonitorDateFormat::IsEventPhysicsEvent()
201 // Check if event is Physics event
203 if(event->eventType == PHYSICS_EVENT)
210 //____________________________________________________________________________
211 Bool_t AliTPCMonitorDateFormat::IsEventSwapped()
213 // Check if event is swapped
215 if(TEST_SYSTEM_ATTRIBUTE( event->eventTypeAttribute, ATTR_EVENT_SWAPPED ) == 1)
222 //____________________________________________________________________________
223 Bool_t AliTPCMonitorDateFormat::IsEventWrongEndian()
227 if(EVENT_MAGIC_NUMBER == event->eventMagic)
235 //____________________________________________________________________________
236 void AliTPCMonitorDateFormat::GotoSubEventHeader()
238 // Set subevent Pointer to sub event
239 if(IsEventSuperEvent() ==true){
240 fsubEventPtr = fdataPtr+GetEventHeaderSize();
241 subEvent = (struct eventHeaderStruct*) (fsubEventPtr);
243 fsubEventPtr = fdataPtr;
244 subEvent = (struct eventHeaderStruct*) (fsubEventPtr);
248 //____________________________________________________________________________
249 void AliTPCMonitorDateFormat::GotoNextSubEventHeader()
251 // set subevent pointer to next sub event
252 fsubEventPtr += GetSubEventSize();
253 subEvent = (struct eventHeaderStruct*) (fsubEventPtr);
256 //____________________________________________________________________________
257 Bool_t AliTPCMonitorDateFormat::IsLastSubEventHeader()
259 // Check if sub event is last sub event
262 if(IsEventSuperEvent() ==true){
263 position = fsubEventPtr - fdataPtr;
264 if( (position+GetSubEventSize()) < GetEventSize() )
269 position = fsubEventPtr - fdataPtr;
270 if( (position+GetSubEventSize()) < GetEventSize() )
278 //____________________________________________________________________________
279 Int_t AliTPCMonitorDateFormat::GetSubEventSize()
281 // Return sub event size
282 return (Int_t)subEvent->eventSize;
285 //____________________________________________________________________________
286 Int_t AliTPCMonitorDateFormat::GetSubEventHeaderSize()
288 // Return sub event header size
289 return (Int_t)subEvent->eventHeadSize;
292 //____________________________________________________________________________
293 Int_t AliTPCMonitorDateFormat::GetSubEventLDC()
295 // Return sub event LDC
296 return (Int_t)subEvent->eventLdcId;
299 //____________________________________________________________________________
300 Int_t AliTPCMonitorDateFormat::GetSubEventGDC()
302 // return sub event GDC
303 return (Int_t)subEvent->eventGdcId;
307 //____________________________________________________________________________
308 Bool_t AliTPCMonitorDateFormat::IsSubEventSuperEvent()
310 // Check if sub event is super event
312 if(TEST_SYSTEM_ATTRIBUTE( subEvent->eventTypeAttribute, ATTR_SUPER_EVENT ) == 1)
319 //____________________________________________________________________________
320 Bool_t AliTPCMonitorDateFormat::IsSubEventStartOfRun()
322 // Check if sub event is start of run
324 if(subEvent->eventType == START_OF_RUN)
331 //____________________________________________________________________________
332 Bool_t AliTPCMonitorDateFormat::IsSubEventEndOfRun()
334 // Check if sub event is end of run
336 if(subEvent->eventType == END_OF_RUN)
343 //____________________________________________________________________________
344 Bool_t AliTPCMonitorDateFormat::IsSubEventPhysicsEvent()
346 // Check if sub event is physics event
348 if(subEvent->eventType == PHYSICS_EVENT)
355 //____________________________________________________________________________
356 void AliTPCMonitorDateFormat::GotoFirstEquipment()
358 // Set current pointer to first equipment
359 fcurrentPtr = fsubEventPtr + GetSubEventHeaderSize();
360 equipment = (struct equipmentHeaderStruct*) (fcurrentPtr);
363 //____________________________________________________________________________
364 void AliTPCMonitorDateFormat::GotoNextEquipment()
366 // Set current pointer to next equipment
367 fcurrentPtr += GetEquipmentSize();
368 equipment = (struct equipmentHeaderStruct*) (fcurrentPtr);
371 //____________________________________________________________________________
372 Bool_t AliTPCMonitorDateFormat::IsLastEquipment()
374 // Check if equipment is last equipment
377 position = fcurrentPtr - fsubEventPtr;
378 if( (position+GetEquipmentSize()) < GetSubEventSize() )
385 //____________________________________________________________________________
386 Int_t AliTPCMonitorDateFormat::GetEquipmentSize()
388 // Return equipment size
389 return (Int_t)equipment->equipmentSize;
392 //____________________________________________________________________________
393 Int_t AliTPCMonitorDateFormat::GetPayloadSize()
395 // Return payload slze
397 if(GetEventVersion() < 196610){
398 retval = (Int_t)equipment->equipmentSize;
400 retval = (Int_t)equipment->equipmentSize - GetEquipmentHeaderSize();
405 //____________________________________________________________________________
406 Int_t AliTPCMonitorDateFormat::GetEquipmentType()
408 // Return equipment type
409 return (Int_t)equipment->equipmentType;
412 //____________________________________________________________________________
413 Int_t AliTPCMonitorDateFormat::GetEquipmentID()
415 // Return equipment ID
416 return (Int_t)equipment->equipmentId;
419 //____________________________________________________________________________
420 Int_t* AliTPCMonitorDateFormat::GetEquipmentTypeAttribute()
422 // Return equipment type attribute
423 return (Int_t*)equipment->equipmentTypeAttribute;
426 //____________________________________________________________________________
427 Int_t AliTPCMonitorDateFormat::GetEquipmentBasicSize()
429 // Return equipment basic size
430 return (Int_t)equipment->equipmentBasicElementSize;
433 //____________________________________________________________________________
434 Int_t AliTPCMonitorDateFormat::GetEquipmentHeaderSize()
436 // Return equipment header size
437 return sizeof(struct equipmentHeaderStruct);
441 //____________________________________________________________________________
442 Char_t *AliTPCMonitorDateFormat::GetFirstDataPointer()
444 // Return data pointer (after equipment header)
446 if(GetEventVersion() < 196610){
447 fcurrentPtr += GetEquipmentHeaderSize();
448 datapointer = fcurrentPtr;
450 datapointer = fcurrentPtr + GetEquipmentHeaderSize();
456 //____________________________________________________________________________
457 Int_t AliTPCMonitorDateFormat::GetPosition()
459 // Return current position relative to start of event
460 Int_t retval = (Int_t) (fcurrentPtr - fdataPtr);
464 //____________________________________________________________________________
465 Int_t AliTPCMonitorDateFormat::GetPositionSubEvent()
467 // Return subevent position relative to start of event
468 Int_t retval = (Int_t) (fsubEventPtr - fdataPtr);