/************************************************************************** * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * * * * Author: The ALICE Off-line Project. * * Contributors are mentioned in the code where appropriate. * * * * Permission to use, copy, modify and distribute this software and its * * documentation strictly for non-commercial purposes is hereby granted * * without fee, provided that the above copyright notice appears in all * * copies and that both the copyright notice and this permission notice * * appear in the supporting documentation. The authors make no claims * * about the suitability of this software for any purpose. It is * * provided "as is" without express or implied warranty. * **************************************************************************/ /* $Log$ Revision 1.3 2007/10/12 13:36:27 cvetan Coding convention fixes from Stefan Revision 1.2 2007/09/17 16:34:54 cvetan The package was overwriting the rootcint flags. This was fixed by applying the necessary changes in the DATE-dependent parts of the code Revision 1.1 2007/09/17 10:23:31 cvetan New TPC monitoring package from Stefan Kniege. The monitoring package can be started by running TPCMonitor.C macro located in macros folder. */ //////////////////////////////////////////////////////////////////////// //// //// AliTPCMonitorDateFormat class //// //// Class for decoding raw data headers in DATE format //// //// Reads event and subevent header informations form DATE files //// //// Authors: Roland Bramm, //// Stefan Kniege, IKF, Frankfurt //// ///////////////////////////////////////////////////////////////////////// #include "AliTPCMonitorDateFormat.h" #include "event.h" #include ClassImp(AliTPCMonitorDateFormat) //____________________________________________________________________________ AliTPCMonitorDateFormat::AliTPCMonitorDateFormat(Char_t* data): fdataPtr(data), fsubEventPtr(data), fcurrentPtr(data), fevent((struct eventHeaderStruct*) fdataPtr), fsubEvent(0), fequipment(0) { // Constructor } //____________________________________________________________________________ AliTPCMonitorDateFormat::AliTPCMonitorDateFormat(const AliTPCMonitorDateFormat &dateformat) : TNamed(dateformat.GetName(),dateformat.GetTitle()), fdataPtr(dateformat.fdataPtr), fsubEventPtr(dateformat.fsubEventPtr), fcurrentPtr(dateformat.fcurrentPtr), fevent((struct eventHeaderStruct*)dateformat.fdataPtr), fsubEvent(dateformat.fsubEvent), fequipment(dateformat.fequipment) { // copy constructor } //____________________________________________________________________________ AliTPCMonitorDateFormat &AliTPCMonitorDateFormat:: operator= (const AliTPCMonitorDateFormat& dateformat) { // assignment operator if(this!=&dateformat) { fdataPtr=dateformat.fdataPtr; fsubEventPtr=dateformat.fsubEventPtr; fcurrentPtr=dateformat.fcurrentPtr; fevent=dateformat.fevent; fsubEvent=dateformat.fsubEvent; fequipment=dateformat.fequipment; } return *this; } //____________________________________________________________________________ AliTPCMonitorDateFormat::~AliTPCMonitorDateFormat() { // Destructor } //____________________________________________________________________________ Int_t AliTPCMonitorDateFormat::GetEventSize()const { // Return event size return (Int_t)fevent->eventSize; } //____________________________________________________________________________ Int_t AliTPCMonitorDateFormat::GetEventHeaderSize()const { // Return event header size return (Int_t)fevent->eventHeadSize; } //____________________________________________________________________________ Int_t AliTPCMonitorDateFormat::GetEventHeaderBaseSize()const { // Return event header base size return (Int_t)EVENT_HEAD_BASE_SIZE; } //____________________________________________________________________________ Int_t AliTPCMonitorDateFormat::GetEventID()const { // Return event ID return (Int_t)EVENT_ID_GET_NB_IN_RUN(fevent->eventId); } //____________________________________________________________________________ Int_t AliTPCMonitorDateFormat::GetEventLDC()const { // Return event LDC return (Int_t)fevent->eventLdcId; } //____________________________________________________________________________ Int_t AliTPCMonitorDateFormat::GetEventGDC()const { // return event GDC return (Int_t)fevent->eventGdcId; } //____________________________________________________________________________ Int_t AliTPCMonitorDateFormat::GetEventRunID()const { // Return run ID return (Int_t)fevent->eventRunNb; } //____________________________________________________________________________ Int_t AliTPCMonitorDateFormat::GetEventVersion()const { // Return event version return (Int_t)fevent->eventVersion; } //____________________________________________________________________________ Int_t AliTPCMonitorDateFormat::GetEventVersionMajor()const { // retrun event version (16-32 bit) return (Int_t)(GetEventVersion()>>16); } //____________________________________________________________________________ Int_t AliTPCMonitorDateFormat::GetEventVersionMinor()const { // return event version (0-15 bit) return (Int_t)(GetEventVersion()&0x0000ffff); } //____________________________________________________________________________ Bool_t AliTPCMonitorDateFormat::IsEventSuperEvent()const { // Check if event ist super event Bool_t retval; if(TEST_SYSTEM_ATTRIBUTE( fevent->eventTypeAttribute, ATTR_SUPER_EVENT ) == 1) retval = true; else retval = false; return retval; } //____________________________________________________________________________ Bool_t AliTPCMonitorDateFormat::IsEventStartOfRun()const { // Check if event ist Start of Run Bool_t retval; if(fevent->eventType == START_OF_RUN) retval = true; else retval = false; return retval; } //____________________________________________________________________________ Bool_t AliTPCMonitorDateFormat::IsEventEndOfRun()const { // Check if event is End of Run Bool_t retval; if(fevent->eventType == END_OF_RUN) retval = true; else retval = false; return retval; } //____________________________________________________________________________ Bool_t AliTPCMonitorDateFormat::IsEventPhysicsEvent()const { // Check if event is Physics event Bool_t retval; if(fevent->eventType == PHYSICS_EVENT) retval = true; else retval = false; return retval; } //____________________________________________________________________________ Bool_t AliTPCMonitorDateFormat::IsEventSwapped()const { // Check if event is swapped Bool_t retval; if(TEST_SYSTEM_ATTRIBUTE( fevent->eventTypeAttribute, ATTR_EVENT_SWAPPED ) == 1) retval = true; else retval = false; return retval; } //____________________________________________________________________________ Bool_t AliTPCMonitorDateFormat::IsEventWrongEndian()const { // Check endian Bool_t retval; if(EVENT_MAGIC_NUMBER == fevent->eventMagic) retval = false; else retval = true; return retval; } //____________________________________________________________________________ void AliTPCMonitorDateFormat::GotoSubEventHeader() { // Set subevent Pointer to sub event if(IsEventSuperEvent() ==true){ fsubEventPtr = fdataPtr+GetEventHeaderSize(); fsubEvent = (struct eventHeaderStruct*) (fsubEventPtr); }else{ fsubEventPtr = fdataPtr; fsubEvent = (struct eventHeaderStruct*) (fsubEventPtr); } } //____________________________________________________________________________ void AliTPCMonitorDateFormat::GotoNextSubEventHeader() { // set subevent pointer to next sub event fsubEventPtr += GetSubEventSize(); fsubEvent = (struct eventHeaderStruct*) (fsubEventPtr); } //____________________________________________________________________________ Bool_t AliTPCMonitorDateFormat::IsLastSubEventHeader()const { // Check if sub event is last sub event Bool_t retval; Int_t position; if(IsEventSuperEvent() ==true){ position = fsubEventPtr - fdataPtr; if( (position+GetSubEventSize()) < GetEventSize() ) retval = false; else retval = true; }else{ position = fsubEventPtr - fdataPtr; if( (position+GetSubEventSize()) < GetEventSize() ) retval = false; else retval = true; } return retval; } //____________________________________________________________________________ Int_t AliTPCMonitorDateFormat::GetSubEventSize()const { // Return sub event size return (Int_t)fsubEvent->eventSize; } //____________________________________________________________________________ Int_t AliTPCMonitorDateFormat::GetSubEventHeaderSize()const { // Return sub event header size return (Int_t)fsubEvent->eventHeadSize; } //____________________________________________________________________________ Int_t AliTPCMonitorDateFormat::GetSubEventLDC()const { // Return sub event LDC return (Int_t)fsubEvent->eventLdcId; } //____________________________________________________________________________ Int_t AliTPCMonitorDateFormat::GetSubEventGDC()const { // return sub event GDC return (Int_t)fsubEvent->eventGdcId; } //____________________________________________________________________________ Bool_t AliTPCMonitorDateFormat::IsSubEventSuperEvent() { // Check if sub event is super event Bool_t retval; if(TEST_SYSTEM_ATTRIBUTE( fsubEvent->eventTypeAttribute, ATTR_SUPER_EVENT ) == 1) retval = true; else retval = false; return retval; } //____________________________________________________________________________ Bool_t AliTPCMonitorDateFormat::IsSubEventStartOfRun()const { // Check if sub event is start of run Bool_t retval; if(fsubEvent->eventType == START_OF_RUN) retval = true; else retval = false; return retval; } //____________________________________________________________________________ Bool_t AliTPCMonitorDateFormat::IsSubEventEndOfRun()const { // Check if sub event is end of run Bool_t retval; if(fsubEvent->eventType == END_OF_RUN) retval = true; else retval = false; return retval; } //____________________________________________________________________________ Bool_t AliTPCMonitorDateFormat::IsSubEventPhysicsEvent()const { // Check if sub event is physics event Bool_t retval; if(fsubEvent->eventType == PHYSICS_EVENT) retval = true; else retval = false; return retval; } //____________________________________________________________________________ void AliTPCMonitorDateFormat::GotoFirstEquipment() { // Set current pointer to first equipment fcurrentPtr = fsubEventPtr + GetSubEventHeaderSize(); fequipment = (struct equipmentHeaderStruct*) (fcurrentPtr); } //____________________________________________________________________________ void AliTPCMonitorDateFormat::GotoNextEquipment() { // Set current pointer to next equipment fcurrentPtr += GetEquipmentSize(); fequipment = (struct equipmentHeaderStruct*) (fcurrentPtr); } //____________________________________________________________________________ Bool_t AliTPCMonitorDateFormat::IsLastEquipment() const { // Check if equipment is last equipment Bool_t retval; Int_t position; position = fcurrentPtr - fsubEventPtr; if( (position+GetEquipmentSize()) < GetSubEventSize() ) retval = false; else retval = true; return retval; } //____________________________________________________________________________ Int_t AliTPCMonitorDateFormat::GetEquipmentSize() const { // Return equipment size return (Int_t)fequipment->equipmentSize; } //____________________________________________________________________________ Int_t AliTPCMonitorDateFormat::GetPayloadSize() const { // Return payload slze Int_t retval = 0; if(GetEventVersion() < 196610){ retval = (Int_t)fequipment->equipmentSize; }else{ retval = (Int_t)fequipment->equipmentSize - GetEquipmentHeaderSize(); } return retval; } //____________________________________________________________________________ Int_t AliTPCMonitorDateFormat::GetEquipmentType() const { // Return equipment type return (Int_t)fequipment->equipmentType; } //____________________________________________________________________________ Int_t AliTPCMonitorDateFormat::GetEquipmentID() const { // Return equipment ID return (Int_t)fequipment->equipmentId; } //____________________________________________________________________________ Int_t* AliTPCMonitorDateFormat::GetEquipmentTypeAttribute() { // Return equipment type attribute return (Int_t*)fequipment->equipmentTypeAttribute; } //____________________________________________________________________________ Int_t AliTPCMonitorDateFormat::GetEquipmentBasicSize() const { // Return equipment basic size return (Int_t)fequipment->equipmentBasicElementSize; } //____________________________________________________________________________ Int_t AliTPCMonitorDateFormat::GetEquipmentHeaderSize() const { // Return equipment header size return sizeof(struct equipmentHeaderStruct); } //____________________________________________________________________________ Char_t *AliTPCMonitorDateFormat::GetFirstDataPointer() { // Return data pointer (after equipment header) Char_t *datapointer; if(GetEventVersion() < 196610){ fcurrentPtr += GetEquipmentHeaderSize(); datapointer = fcurrentPtr; }else{ datapointer = fcurrentPtr + GetEquipmentHeaderSize(); } return datapointer; } //____________________________________________________________________________ Int_t AliTPCMonitorDateFormat::GetPosition() const { // Return current position relative to start of event Int_t retval = (Int_t) (fcurrentPtr - fdataPtr); return retval; } //____________________________________________________________________________ Int_t AliTPCMonitorDateFormat::GetPositionSubEvent() const { // Return subevent position relative to start of event Int_t retval = (Int_t) (fsubEventPtr - fdataPtr); return retval; }