1. Introduction of equipment id map. The map is taken from simple ascii formatted...
authorcvetan <cvetan@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 30 May 2006 11:23:34 +0000 (11:23 +0000)
committercvetan <cvetan@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 30 May 2006 11:23:34 +0000 (11:23 +0000)
RAW/AliRawReader.cxx
RAW/AliRawReader.h

index 7d91bc1..21668b5 100644 (file)
@@ -36,6 +36,7 @@
 ///
 ///////////////////////////////////////////////////////////////////////////////
 
+#include <Riostream.h>
 #include "AliRawReader.h"
 
 
@@ -43,6 +44,8 @@ ClassImp(AliRawReader)
 
 
 AliRawReader::AliRawReader() :
+  fEquipmentIdsIn(NULL),
+  fEquipmentIdsOut(NULL),
   fRequireHeader(kTRUE),
   fHeader(NULL),
   fCount(0),
@@ -54,11 +57,44 @@ AliRawReader::AliRawReader() :
   fErrorCode(0)
 {
 // default constructor: initialize data members
+}
 
+Bool_t AliRawReader::LoadEquipmentIdsMap(const char *fileName)
+{
+  // Open the mapping file
+  // and load the mapping data
+  ifstream input(fileName);
+  if (input.is_open()) {
+    Warning("AliRawReader","Equipment ID mapping file is found !");
+    const Int_t kMaxDDL = 256;
+    fEquipmentIdsIn = new TArrayI(kMaxDDL);
+    fEquipmentIdsOut = new TArrayI(kMaxDDL);
+    Int_t equipIn, equipOut;
+    Int_t nIds = 0;
+    while (input >> equipIn >> equipOut) {
+      if (nIds >= kMaxDDL) {
+       Error("AliRawReader","Too many equipment Id mappings found ! Truncating the list !");
+       break;
+      }
+      fEquipmentIdsIn->AddAt(equipIn,nIds); 
+      fEquipmentIdsOut->AddAt(equipOut,nIds);
+      nIds++;
+    }
+    fEquipmentIdsIn->Set(nIds);
+    fEquipmentIdsOut->Set(nIds);
+    input.close();
+    return kTRUE;
+  }
+  else {
+    Error("AliRawReader","equipment id map file is not found ! Skipping the mapping !");
+    return kFALSE;
+  }
 }
 
 AliRawReader::AliRawReader(const AliRawReader& rawReader) :
   TObject(rawReader),
+  fEquipmentIdsIn(rawReader.fEquipmentIdsIn),
+  fEquipmentIdsOut(rawReader.fEquipmentIdsOut),
   fRequireHeader(rawReader.fRequireHeader),
   fHeader(rawReader.fHeader),
   fCount(rawReader.fCount),
@@ -70,12 +106,13 @@ AliRawReader::AliRawReader(const AliRawReader& rawReader) :
   fErrorCode(0)
 {
 // copy constructor
-
 }
 
 AliRawReader& AliRawReader::operator = (const AliRawReader& rawReader)
 {
 // assignment operator
+  fEquipmentIdsIn = rawReader.fEquipmentIdsIn;
+  fEquipmentIdsOut = rawReader.fEquipmentIdsOut;
 
   fHeader = rawReader.fHeader;
   fCount = rawReader.fCount;
@@ -91,6 +128,64 @@ AliRawReader& AliRawReader::operator = (const AliRawReader& rawReader)
   return *this;
 }
 
+AliRawReader::~AliRawReader()
+{
+  // destructor
+  // delete the mapping arrays if
+  // initialized
+  if (fEquipmentIdsIn) delete fEquipmentIdsIn;
+  if (fEquipmentIdsOut) delete fEquipmentIdsOut;
+}
+
+Int_t AliRawReader::GetMappedEquipmentId() const
+{
+  if (!fEquipmentIdsIn || !fEquipmentIdsOut) {
+    Error("AliRawReader","equipment Ids mapping is not initialized !");
+    return GetEquipmentId();
+  }
+  Int_t equipmentId = GetEquipmentId();
+  for(Int_t iId = 0; iId < fEquipmentIdsIn->GetSize(); iId++) {
+    if (equipmentId == fEquipmentIdsIn->At(iId)) {
+      equipmentId = fEquipmentIdsOut->At(iId);
+      break;
+    }
+  }
+  return equipmentId;
+}
+
+Int_t AliRawReader::GetDetectorID() const
+{
+  // Get the detector ID
+  // The list of detector IDs
+  // can be found in AliDAQConfig.h
+  Int_t equipmentId;
+  if (fEquipmentIdsIn && fEquipmentIdsIn)
+    equipmentId = GetMappedEquipmentId();
+  else
+    equipmentId = GetEquipmentId();
+
+  if (equipmentId >= 0)
+    return (equipmentId >> 8);
+  else
+    return -1;
+}
+
+Int_t AliRawReader::GetDDLID() const
+{
+  // Get the DDL ID (within one sub-detector)
+  // The list of detector IDs
+  // can be found in AliDAQConfig.h
+  Int_t equipmentId;
+  if (fEquipmentIdsIn && fEquipmentIdsIn)
+    equipmentId = GetMappedEquipmentId();
+  else
+    equipmentId = GetEquipmentId();
+
+  if (equipmentId >= 0)
+    return (equipmentId & 0xFF);
+  else
+    return -1;
+}
 
 void AliRawReader::Select(Int_t detectorID, Int_t minDDLID, Int_t maxDDLID)
 {
@@ -98,7 +193,7 @@ void AliRawReader::Select(Int_t detectorID, Int_t minDDLID, Int_t maxDDLID)
 // range of DDLs (minDDLID <= DDLID <= maxDDLID).
 // no selection is applied if a value < 0 is used.
 
-  fSelectEquipmentType = 0;
+  fSelectEquipmentType = -1;
   if (minDDLID < 0) minDDLID = 0;
   fSelectMinEquipmentId = (detectorID << 8) + minDDLID;
   if (maxDDLID < 0) maxDDLID = 0xFF;
@@ -131,15 +226,21 @@ Bool_t AliRawReader::IsSelected() const
 
   if (fSkipInvalid && !IsValid()) return kFALSE;
 
-  if (fSelectEquipmentType >= 0) {
+  if (fSelectEquipmentType >= 0)
     if (GetEquipmentType() != fSelectEquipmentType) return kFALSE;
-    if ((fSelectMinEquipmentId >= 0) && 
-       (GetEquipmentId() < fSelectMinEquipmentId))
-      return kFALSE;
-    if ((fSelectMaxEquipmentId >= 0) && 
-       (GetEquipmentId() > fSelectMaxEquipmentId))
-      return kFALSE;
-  }
+
+  Int_t equipmentId;
+  if (fEquipmentIdsIn && fEquipmentIdsIn)
+    equipmentId = GetMappedEquipmentId();
+  else
+    equipmentId = GetEquipmentId();
+
+  if ((fSelectMinEquipmentId >= 0) && 
+      (equipmentId < fSelectMinEquipmentId))
+    return kFALSE;
+  if ((fSelectMaxEquipmentId >= 0) && 
+      (equipmentId > fSelectMaxEquipmentId))
+    return kFALSE;
 
   return kTRUE;
 }
index 13411b7..45d9c37 100644 (file)
@@ -12,6 +12,7 @@
 ///////////////////////////////////////////////////////////////////////////////
 
 #include <TObject.h>
+#include <TArrayI.h>
 #include "AliRawDataHeader.h"
 
 
@@ -20,7 +21,7 @@ class AliRawReader: public TObject {
     AliRawReader();
     AliRawReader(const AliRawReader& rawReader);
     AliRawReader& operator = (const AliRawReader& rawReader);
-    virtual ~AliRawReader() {};
+    virtual ~AliRawReader();
 
     void             Select(Int_t detectorID, 
                            Int_t minDDLID = -1, Int_t maxDDLID = -1);
@@ -46,14 +47,14 @@ class AliRawReader: public TObject {
     virtual Int_t    GetEquipmentSize() const = 0;
     virtual Int_t    GetEquipmentType() const = 0;
     virtual Int_t    GetEquipmentId() const = 0;
+    Int_t            GetMappedEquipmentId() const;
+    Bool_t           LoadEquipmentIdsMap(const char *fileName);
     virtual const UInt_t* GetEquipmentAttributes() const = 0;
     virtual Int_t    GetEquipmentElementSize() const = 0;
     virtual Int_t    GetEquipmentHeaderSize() const = 0;
 
-    Int_t            GetDetectorID() const 
-      {if (GetEquipmentId() >= 0) return (GetEquipmentId() >> 8); else return -1;};
-    Int_t            GetDDLID() const 
-      {if (GetEquipmentId() >= 0) return (GetEquipmentId() & 0xFF); else return -1;};
+    Int_t            GetDetectorID() const;
+    Int_t            GetDDLID() const;
 
     Int_t            GetDataSize() const 
       {if (fHeader) {
@@ -104,18 +105,21 @@ class AliRawReader: public TObject {
     Bool_t           IsSelected() const;
     Bool_t           IsEventSelected() const;
 
-    Bool_t           fRequireHeader; // if false, data without header is accepted
+    TArrayI         *fEquipmentIdsIn;       // array of equipment Ids to be mapped
+    TArrayI         *fEquipmentIdsOut;      // array of mapped equipment Ids
 
-    AliRawDataHeader* fHeader;     // current data header
-    Int_t            fCount;       // counter of bytes to be read for current DDL
+    Bool_t           fRequireHeader;        // if false, data without header is accepted
+
+    AliRawDataHeader* fHeader;              // current data header
+    Int_t            fCount;                // counter of bytes to be read for current DDL
 
     Int_t            fSelectEquipmentType;  // type of selected equipment (<0 = no selection)
     Int_t            fSelectMinEquipmentId; // minimal index of selected equipment (<0 = no selection)
     Int_t            fSelectMaxEquipmentId; // maximal index of selected equipment (<0 = no selection)
-    Bool_t           fSkipInvalid;       // skip invalid data
-    Int_t            fSelectEventType;   // type of selected events (<0 = no selection)
+    Bool_t           fSkipInvalid;          // skip invalid data
+    Int_t            fSelectEventType;      // type of selected events (<0 = no selection)
 
-    Int_t            fErrorCode;         // code of last error
+    Int_t            fErrorCode;            // code of last error
 
     ClassDef(AliRawReader, 0) // base class for reading raw digits
 };