]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - RAW/AliRawEventHeaderBase.cxx
ATO-78 a.) adding aliases used for gain correction fitting \n b)Kr and QA prefix...
[u/mrichter/AliRoot.git] / RAW / AliRawEventHeaderBase.cxx
index 742d0623c404be7bc99eec3260ab0144b947dd56..bdaa25bc496eb9c8c1047a2e2c41669d59f9f272 100644 (file)
 #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)
 
 //______________________________________________________________________________
@@ -49,25 +52,34 @@ fVersion(0),
 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;
 }
 
 //______________________________________________________________________________
@@ -76,13 +88,15 @@ Int_t AliRawEventHeaderBase::HeaderSize() const
   // 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)
@@ -91,6 +105,8 @@ Int_t AliRawEventHeaderBase::HeaderSize() const
       for(UInt_t i=0;i<ndim;i++) size += member->GetMaxIndex(i)*unitsize;
   }
 
+  const_cast<AliRawEventHeaderBase*>(this)->fHeaderSize = size;
+
   return size;
 }
 
@@ -125,7 +141,17 @@ const char *AliRawEventHeaderBase::GetTypeName() const
    // 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:
@@ -346,7 +372,7 @@ UInt_t AliRawEventHeaderBase::Get(const char *datamember) const
   // in front
 
   char buf[256] = "f";
-  strcat(buf,datamember);
+  strncat(buf,datamember,sizeof(buf)-2);
 
   TDataMember *member = IsA()->GetDataMember(buf);
   if (!member) {
@@ -359,7 +385,8 @@ UInt_t AliRawEventHeaderBase::Get(const char *datamember) const
     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;
   }
@@ -379,7 +406,7 @@ const UInt_t* AliRawEventHeaderBase::GetP(const char *datamember) const
   // in front
 
   char buf[256] = "f";
-  strcat(buf,datamember);
+  strncat(buf,datamember,sizeof(buf)-2);
 
   TDataMember *member = IsA()->GetDataMember(buf);
   if (!member) {
@@ -392,7 +419,8 @@ const UInt_t* AliRawEventHeaderBase::GetP(const char *datamember) const
   //    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;
   }
@@ -420,3 +448,18 @@ void AliRawEventHeaderBase::Print( const Option_t* opt ) const
   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;
+}