#include <TDataMember.h>
#include <TList.h>
#include <TMethodCall.h>
+#include <TDataType.h>
#include "AliLog.h"
#include "AliRawEventHeaderBase.h"
#include <Riostream.h>
+using std::cout;
+using std::endl;
ClassImp(AliRawEventHeaderBase)
//______________________________________________________________________________
fExtendedDataSize(0),
fExtendedAllocSize(0),
fExtendedData(NULL),
-fIsSwapped(kFALSE)
+fIsSwapped(kFALSE),
+fHeaderSize(0),
+fHeaderBegin(NULL),
+fFirstEqIndex(-1),
+fLastEqIndex(-1)
{
// Default constructor
}
//______________________________________________________________________________
-void *AliRawEventHeaderBase::HeaderBegin()
+void *AliRawEventHeaderBase::HeaderBegin() const
{
// Returns the pointer to the first data member
// beyond the base class data members
+ if (fHeaderBegin) return fHeaderBegin;
+
TList *datalist = IsA()->GetListOfDataMembers();
TIter next(datalist);
TDataMember *member = (TDataMember *)next();
- if(!strcmp(member->GetTypeName(),"TClass"))
+ if(strstr(member->GetTypeName(),"TClass"))
member = (TDataMember *)next();
- return (void *)((char *)this+member->GetOffset());
+ void *ptr = (void *)((char *)this+member->GetOffset());
+ const_cast<AliRawEventHeaderBase*>(this)->fHeaderBegin = ptr;
+
+ return ptr;
}
//______________________________________________________________________________
// Returns the size of the data members list
// beyond the base class data members
+ if (fHeaderSize) return fHeaderSize;
+
Int_t size = 0;
TList *datalist = IsA()->GetListOfDataMembers();
TIter next(datalist);
TDataMember *member;
while ((member=(TDataMember *)next()) != 0x0) {
- if (!strcmp(member->GetTypeName(),"TClass")) continue;
+ if (strstr(member->GetTypeName(),"TClass")) continue;
UInt_t unitsize = member->GetUnitSize();
UInt_t ndim = member->GetArrayDim();
if (ndim == 0)
for(UInt_t i=0;i<ndim;i++) size += member->GetMaxIndex(i)*unitsize;
}
+ const_cast<AliRawEventHeaderBase*>(this)->fHeaderSize = size;
+
return size;
}
// Get event type as a string.
// Will fail in case data header
// does not contain eventType field
- Int_t eventType = Get("Type");
+ UInt_t eventType = Get("Type");
+
+ return GetTypeName(eventType);
+}
+
+//______________________________________________________________________________
+const char *AliRawEventHeaderBase::GetTypeName(UInt_t eventType)
+{
+ // Get event type as a string.
+ // Static method that could be used
+ // from everywhere inside aliroot
switch (eventType) {
case kStartOfRun:
// in front
char buf[256] = "f";
- strcat(buf,datamember);
+ strncat(buf,datamember,sizeof(buf)-2);
TDataMember *member = IsA()->GetDataMember(buf);
if (!member) {
return 0;
}
- if (strcmp(member->GetTypeName(),"UInt_t") != 0) {
+ TDataType * dataType = member->GetDataType();
+ if (!dataType || dataType->GetType() != kUInt_t) {
AliFatal(Form("Member %s is not of type UInt_t!",buf));
return 0;
}
// in front
char buf[256] = "f";
- strcat(buf,datamember);
+ strncat(buf,datamember,sizeof(buf)-2);
TDataMember *member = IsA()->GetDataMember(buf);
if (!member) {
// return 0;
// }
- if (strcmp(member->GetTypeName(),"UInt_t") != 0) {
+ TDataType * dataType = member->GetDataType();
+ if (!dataType || dataType->GetType() != kUInt_t) {
AliFatal(Form("Member %s is not of type UInt_t*!",buf));
return 0;
}
cout << opt << " Type attribute: " << GetP("TypeAttribute")[0] << "-" << GetP("TypeAttribute")[1] << "-" << GetP("TypeAttribute")[2] << endl;
cout << opt << " GDC: " << Get("GdcId") << " LDC: " << Get("LdcId") << endl;
}
+
+//_____________________________________________________________________________
+void AliRawEventHeaderBase::AddEqIndex(Int_t index)
+{
+ // Adds an equipment by changing properly
+ // the first and last equipment indexes
+ if (fFirstEqIndex < 0) fFirstEqIndex = index;
+ if (index > fLastEqIndex) fLastEqIndex = index;
+}
+
+//_____________________________________________________________________________
+void AliRawEventHeaderBase::Reset()
+{
+ fFirstEqIndex = fLastEqIndex = -1;
+}