Common class for raw data reading and ALTRO mappiing for PHOS and EMCAL (Gustavo...
authorhristov <hristov@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 23 Nov 2006 13:40:44 +0000 (13:40 +0000)
committerhristov <hristov@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 23 Nov 2006 13:40:44 +0000 (13:40 +0000)
13 files changed:
PHOS/AliPHOS.cxx
PHOS/AliPHOSCalibHistoProducer.cxx
PHOS/AliPHOSGetter.cxx
PHOS/PHOSbaseLinkDef.h
PHOS/libPHOSbase.pkg
RAW/AliCaloAltroMapping.cxx [new file with mode: 0644]
RAW/AliCaloAltroMapping.h [new file with mode: 0644]
RAW/AliCaloRawStream.cxx [new file with mode: 0644]
RAW/AliCaloRawStream.h [new file with mode: 0644]
RAW/RAWbaseLinkDef.h
RAW/RAWrecLinkDef.h
RAW/libRAWDatabase.pkg
RAW/libRAWDatarec.pkg

index b29eb13..901a28e 100644 (file)
@@ -16,6 +16,9 @@
 /* History of cvs commits:
  *
  * $Log$
+ * Revision 1.103  2006/11/14 17:11:15  hristov
+ * Removing inheritances from TAttLine, TAttMarker and AliRndm in AliModule. The copy constructor and assignment operators are moved to the private part of the class and not implemented. The corresponding changes are propagated to the detectors
+ *
  * Revision 1.102  2006/10/27 17:14:27  kharlov
  * Introduce AliDebug and AliLog (B.Polichtchouk)
  *
@@ -92,7 +95,7 @@ class TFile;
 #include "AliPHOSDigit.h"
 #include "AliAltroBuffer.h"
 #include "AliAltroMapping.h"
-#include "AliPHOSAltroMapping.h"
+#include "AliCaloAltroMapping.h"
 #include "AliLog.h"
 #include "AliCDBManager.h"
 #include "AliCDBEntry.h"
@@ -510,7 +513,7 @@ void AliPHOS::Digits2Raw()
       path += iRCU;
       path += ".data";
 
-      AliAltroMapping* mapping = new AliPHOSAltroMapping(path.Data());
+      AliAltroMapping* mapping = new AliCaloAltroMapping(path.Data());
       buffer = new AliAltroBuffer(fileName.Data(),mapping);
       buffer->WriteDataHeader(kTRUE, kFALSE);  //Dummy;
 
index a35b7c8..a439687 100644 (file)
@@ -30,7 +30,7 @@
 #include "TH1.h"
 #include "TFile.h"
 #include "AliRawReader.h"
-#include "AliPHOSRawStream.h"
+#include "AliCaloRawStream.h"
 
 ClassImp(AliPHOSCalibHistoProducer)
 
@@ -85,7 +85,7 @@ void AliPHOSCalibHistoProducer::Run()
   Int_t iEvent = 0;
   Int_t runNum = 0;
 
-  AliPHOSRawStream in(fRawReader);
+  AliCaloRawStream in(fRawReader,"PHOS");
   if(fIsOldRCUFormat)
     in.SetOldRCUFormat(kTRUE);
 
index 50091c3..26680e7 100644 (file)
@@ -62,7 +62,7 @@
 #include "AliPHOSLoader.h"
 #include "AliRunLoader.h"
 #include "AliStack.h"  
-#include "AliPHOSRawStream.h"
+#include "AliCaloRawStream.h"
 #include "AliRawReaderFile.h"
 #include "AliLog.h"
 #include "AliCDBLocal.h"
@@ -733,8 +733,7 @@ Int_t AliPHOSGetter::ReadRaw(AliRawReader *rawReader,Bool_t isOldRCUFormat)
   // Reimplemented by Boris Polichtchouk (Jul 2006)
   // to make it working with the Jul-Aug 2006 beam test data.
  
-
-  AliPHOSRawStream in(rawReader);
+  AliCaloRawStream in(rawReader,"PHOS");
   in.SetOldRCUFormat(isOldRCUFormat);
  
   TF1 * signalF = new TF1("signal", AliPHOS::RawResponseFunction, 0, PHOS()->GetRawFormatTimeMax(), 4);
index 97c87f2..35a68c6 100644 (file)
@@ -16,8 +16,6 @@
 #pragma link C++ class AliPHOSHit+;
 #pragma link C++ class AliPHOSTrackSegmentMaker+;
 #pragma link C++ class AliPHOSPID+;
-#pragma link C++ class AliPHOSAltroMapping+;
-#pragma link C++ class AliPHOSRawStream+;
 #pragma link C++ class AliPHOSClusterizer+;
 #pragma link C++ class AliPHOSCalibrationDB+;
 #pragma link C++ class AliPHOSDigitizer+;
index f63b296..fdd3ead 100644 (file)
@@ -6,7 +6,7 @@ SRCS          =  AliPHOS.cxx \
                  AliPHOSLoader.cxx AliPHOSGetter.cxx \
                  AliPHOSGetterLight.cxx \
                  AliPHOSHit.cxx AliPHOSTrackSegmentMaker.cxx  AliPHOSPID.cxx \
-                AliPHOSAltroMapping.cxx AliPHOSRawStream.cxx AliPHOSClusterizer.cxx \
+                AliPHOSClusterizer.cxx \
                 AliPHOSCalibrationDB.cxx AliPHOSDigitizer.cxx \
                 AliPHOSSDigitizer.cxx AliPHOSDigit.cxx \
                 AliPHOSFastRecParticle.cxx AliPHOSRawStream2004.cxx \
diff --git a/RAW/AliCaloAltroMapping.cxx b/RAW/AliCaloAltroMapping.cxx
new file mode 100644 (file)
index 0000000..927413c
--- /dev/null
@@ -0,0 +1,275 @@
+/**************************************************************************
+ * 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.                  *
+ **************************************************************************/
+/* $Id$ */
+
+// This class handles the mapping of the Altro channels in the PHOS/EMCAL
+// The mapping is read from an external mapping files
+// Author: C.Cheshkov
+
+/// Exported from PHOS to be used also by EMCAL
+/// November 2006 Gustavo Conesa Balbastre
+
+#include "AliCaloAltroMapping.h"
+#include "AliLog.h"
+#include <Riostream.h>
+//#include <stdlib.h>
+
+
+ClassImp(AliCaloAltroMapping)
+
+//_____________________________________________________________________________
+AliCaloAltroMapping::AliCaloAltroMapping(const char *mappingFile):
+  AliAltroMapping(mappingFile),
+  fMinRow(0),
+  fMaxRow(0),
+  fMinCol(0),
+  fMaxCol(0),
+  fMapping(NULL),
+  fInvMappingLow(NULL),
+  fInvMappingHigh(NULL)
+{
+  // Constructor
+  ReadMapping();
+  CloseMappingFile();
+}
+
+//_____________________________________________________________________________
+AliCaloAltroMapping::~AliCaloAltroMapping()
+{
+  // destructor
+  DeleteMappingArrays();
+}
+
+//_____________________________________________________________________________
+AliCaloAltroMapping::AliCaloAltroMapping(const AliCaloAltroMapping& mapping):
+  AliAltroMapping(mapping),
+  fMinRow(mapping.fMinRow),
+  fMaxRow(mapping.fMaxRow),
+  fMinCol(mapping.fMinCol),
+  fMaxCol(mapping.fMaxCol),
+  fMapping(mapping.fMapping),
+  fInvMappingLow(mapping.fInvMappingLow),
+  fInvMappingHigh(mapping.fInvMappingHigh)
+{
+// Copy Constructor
+
+  Fatal("AliCaloAltroMapping", "copy constructor not implemented");
+}
+
+//_____________________________________________________________________________
+AliCaloAltroMapping& AliCaloAltroMapping::operator = (const AliCaloAltroMapping& /*mapping*/)
+{
+//Assigment operator
+
+  Fatal("operator =", "assignment operator not implemented");
+  return *this;
+}
+
+//_____________________________________________________________________________
+Bool_t AliCaloAltroMapping::ReadMapping()
+{
+  // Initalizes the ALTRO mapping from a file
+  // Look at the Calo module for the format of
+  // the mapping file
+  if (!fIn) {
+    AliFatal("Mapping file has not been opened !");
+    return kFALSE;
+  }
+
+  fMinRow = 0x7fffffff;
+  fMaxRow = 0;
+  fMinCol = 0x7fffffff;
+  fMaxCol = 0;
+  fMapping = new Short_t*[fMaxHWAddress+1];
+  for (Int_t i = 0; i <= fMaxHWAddress; i++) {
+    fMapping[i] = new Short_t[3];
+    fMapping[i][0] = fMapping[i][1] = fMapping[i][2] = -1;
+  }
+  for(Int_t i = 0; i < fNumberOfChannels ; i++) { // 1792 = 2*896 channels connected to each RCU
+    Int_t hwAddress;
+    if (!(*fIn >> hwAddress)) {
+      AliFatal("Syntax of the mapping file is wrong !");
+      return kFALSE;
+    }
+    if (hwAddress > fMaxHWAddress) {
+      AliFatal(Form("Hardware (ALTRO) adress (%d) outside the range (0 -> %d) !",hwAddress,fMaxHWAddress));
+      return kFALSE;
+    }
+    Int_t row,col,gain;
+    if (!(*fIn >> row >> col >> gain)) {
+      AliFatal("Syntax of the mapping file is wrong !");
+      return kFALSE;
+    }
+
+    if (gain < 0 || gain > 1) {
+      AliFatal(Form("Wrong gain value found (%d)! Should be 0 or 1 !",gain));
+      return kFALSE;
+    }
+    fMapping[hwAddress][0] = row;
+    fMapping[hwAddress][1] = col;
+    fMapping[hwAddress][2] = gain;
+
+    if (row > fMaxRow) fMaxRow = row;
+    if (row < fMinRow) fMinRow = row;
+    if (col > fMaxCol) fMaxCol = col;
+    if (col < fMinCol) fMinCol = col;
+
+  }
+
+  fInvMappingLow  = new Short_t*[fMaxRow - fMinRow + 1];
+  fInvMappingHigh = new Short_t*[fMaxRow - fMinRow + 1];
+  for (Int_t i = 0; i <= (fMaxRow - fMinRow); i++) {
+    fInvMappingLow[i]  = new Short_t[fMaxCol - fMinCol + 1];
+    fInvMappingHigh[i] = new Short_t[fMaxCol - fMinCol + 1];
+    for (Int_t j = 0; j <= (fMaxCol - fMinCol); j++) {
+      fInvMappingLow[i][j]  = -1;
+      fInvMappingHigh[i][j] = -1;
+    }
+  }
+
+  for(Int_t i = 0; i <= fMaxHWAddress; i++) {
+    Int_t row = fMapping[i][0];
+    Int_t col = fMapping[i][1];
+    Int_t gain = fMapping[i][2];
+    if(row != -1 && col != -1) {
+      if (gain == 0)
+       fInvMappingLow[row-fMinRow][col-fMinCol] = i;
+      if (gain == 1)
+       fInvMappingHigh[row-fMinRow][col-fMinCol] = i;
+    }
+  }
+
+  return kTRUE;
+}
+
+//_____________________________________________________________________________
+Int_t AliCaloAltroMapping::GetHWAddress(Int_t row, Int_t col, Int_t gain) const
+{
+  // Get the content of the mapping array
+  // return -1 in case there is no hardware
+  // adress defined for these row-column-gain
+  if (!fInvMappingLow || !fInvMappingHigh) {
+    AliWarning("Mapping array was not initalized correctly !");
+    return -1;
+  }
+  if (row < fMinRow || row > fMaxRow) {
+    AliWarning(Form("Index of row (%d) outside the range (%d -> %d) !",row,fMinRow,fMaxRow));
+    return -1;
+  }
+  if (col < fMinCol || col > fMaxCol) {
+    AliWarning(Form("Index of column (%d) outside the range (0 -> %d) !",col,fMinCol,fMaxCol));
+    return -1;
+  }
+  if (gain < 0 || gain > 1) {
+    AliWarning(Form("Invalid gain (%d)! Should be 0 or 1 !",gain));
+    return -1;
+  }
+  Int_t hwAddress = -1;
+  if (gain == 0)
+    hwAddress = fInvMappingLow[row-fMinRow][col-fMinCol];
+  if (gain == 1)
+    hwAddress = fInvMappingHigh[row-fMinRow][col-fMinCol];
+
+  if (hwAddress == -1)
+    AliWarning(Form("Hardware (ALTRO) adress is not defined for these row (%d), column (%d) and gain (%d) !",row,col,gain));
+
+  return hwAddress;
+}
+
+//_____________________________________________________________________________
+Int_t AliCaloAltroMapping::GetPadRow(Int_t hwAddress) const
+{
+  // Return the row index
+  // Note the difference w.r.t to the base class notation
+  if (!fMapping) {
+    AliWarning("Mapping array was not initalized correctly !");
+    return -1;
+  }
+  if (hwAddress > fMaxHWAddress) {
+    AliWarning(Form("Hardware (ALTRO) adress (%d) outside the range (0 -> %d) !",hwAddress,fMaxHWAddress));
+    return -1;
+  }
+  Int_t row = fMapping[hwAddress][0];
+  if (row == -1)
+    AliWarning(Form("Hardware (ALTRO) adress (%d) is not defined !",hwAddress));
+
+  return row;
+}
+
+//_____________________________________________________________________________
+Int_t AliCaloAltroMapping::GetPad(Int_t hwAddress) const
+{
+  // Return the column index
+  // Note the difference w.r.t to the base class notation
+  if (!fMapping) {
+    AliWarning("Mapping array was not initalized correctly !");
+    return -1;
+  }
+  if (hwAddress > fMaxHWAddress) {
+    AliWarning(Form("Hardware (ALTRO) adress (%d) outside the range (0 -> %d) !",hwAddress,fMaxHWAddress));
+    return -1;
+  }
+  Int_t col = fMapping[hwAddress][1];
+  if (col == -1)
+    AliWarning(Form("Hardware (ALTRO) adress (%d) is not defined !",hwAddress));
+
+  return col;
+}
+
+//_____________________________________________________________________________
+Int_t AliCaloAltroMapping::GetSector(Int_t hwAddress) const
+{
+  // Return the gain factor (0/1)
+  // Note the difference w.r.t to the base class notation
+  if (!fMapping) {
+    AliWarning("Mapping array was not initalized correctly !");
+    return -1;
+  }
+  if (hwAddress > fMaxHWAddress) {
+    AliWarning(Form("Hardware (ALTRO) adress (%d) outside the range (0 -> %d) !",hwAddress,fMaxHWAddress));
+    return -1;
+  }
+  Int_t gain = fMapping[hwAddress][2];
+  if (gain == -1)
+    AliWarning(Form("Hardware (ALTRO) adress (%d) is not defined !",hwAddress));
+
+  return gain;
+}
+
+//_____________________________________________________________________________
+void AliCaloAltroMapping::DeleteMappingArrays()
+{
+  // Deletes the arrays which have been
+  // allocated during the reading of the
+  // mapping file
+  if (fMapping) {
+    for (Int_t i = 0; i <= fMaxHWAddress; i++) delete [] fMapping[i];
+    delete [] fMapping;
+  }
+
+  if (fInvMappingLow) {
+    for (Int_t i = 0; i <= (fMaxRow - fMinRow); i++)
+      delete [] fInvMappingLow[i];
+    delete [] fInvMappingLow;
+  }
+
+  if (fInvMappingHigh) {
+    for (Int_t i = 0; i <= (fMaxRow - fMinRow); i++)
+      delete [] fInvMappingHigh[i];
+    delete [] fInvMappingHigh;
+  }
+}
diff --git a/RAW/AliCaloAltroMapping.h b/RAW/AliCaloAltroMapping.h
new file mode 100644 (file)
index 0000000..4bac77b
--- /dev/null
@@ -0,0 +1,55 @@
+#ifndef ALICALOALTROMAPPING_H
+#define ALICALOALTROMAPPING_H
+/* Copyright(c) 1998-2003, ALICE Experiment at CERN, All rights reserved. *
+ * See cxx source for full Copyright notice                               */
+
+/* $Id$ */
+
+//////////////////////////////////////////////////////////
+// Class used to setup the mapping of hardware adresses //
+// in ALTRO to Calo cells (column and row index +       //
+// low/high gain.                                       //
+// The mapping is defined in an external mapping files  //
+// separately. The class derives from the base altro    //
+// mapping class defined in the RAW package.            //
+//////////////////////////////////////////////////////////
+
+/// Exported from PHOS to be used also by EMCAL
+/// November 2006 Gustavo Conesa Balbastre
+
+#include "AliAltroMapping.h"
+
+class AliCaloAltroMapping: public AliAltroMapping {
+ public:
+  AliCaloAltroMapping(const char *mappingFile);
+  virtual ~AliCaloAltroMapping();
+
+  AliCaloAltroMapping(const AliCaloAltroMapping& mapping);
+  AliCaloAltroMapping& operator = (const AliCaloAltroMapping& mapping);
+
+  // In case of PHOS/EMCAL the relevant segmentation is row-column-gain
+  // or eta-phi-gain
+  virtual Int_t GetHWAddress(Int_t row, Int_t column, Int_t gain) const;
+  // Get Row (not pad-row as in the base class)
+  virtual Int_t GetPadRow(Int_t hwAddress) const;
+  // Get Column (not pad as in the base class)
+  virtual Int_t GetPad(Int_t hwAddress) const;
+  // Get Gain (0/1) (not sector as in the base class)
+  virtual Int_t GetSector(Int_t hwAddress) const;
+
+ protected:
+  virtual Bool_t ReadMapping();
+  virtual void   DeleteMappingArrays();
+
+  Int_t     fMinRow;        // Minimum row index
+  Int_t     fMaxRow;        // Maximum row index
+  Int_t     fMinCol;        // Minimum column index
+  Int_t     fMaxCol;        // Maximum column index
+  Short_t **fMapping;       // Array which connects hardware adresses to row and column indeces
+  Short_t **fInvMappingLow; // Inverse of fMapping (Low gain)
+  Short_t **fInvMappingHigh;// Inverse of fMapping (High gain)
+
+  ClassDef(AliCaloAltroMapping,1)  // Altro mapping handler class
+};
+
+#endif
diff --git a/RAW/AliCaloRawStream.cxx b/RAW/AliCaloRawStream.cxx
new file mode 100644 (file)
index 0000000..af9508f
--- /dev/null
@@ -0,0 +1,151 @@
+/**************************************************************************
+ * 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.                  *
+ **************************************************************************/
+
+/* $Id$ */
+
+///////////////////////////////////////////////////////////////////////////////
+///
+/// This class provides access to PHOS/EMCAL digits in raw data.
+///
+/// It loops over all PHOS/EMCAL digits in the raw data given by the AliRawReader.
+/// The Next method goes to the next digit. If there are no digits left
+/// it returns kFALSE.
+/// Several getters provide information about the current digit.
+/// usage: 
+/// root > AliRawReaderFile rawReader ; 
+/// root > AliCaloRawStream input(&rawReader) ; 
+/// root > while (input.Next()) .....
+///
+///Modification: Class exported from PHOS to be used by EMCAL and PHOS
+///November 2006 Gustavo Conesa Balbastre 
+///////////////////////////////////////////////////////////////////////////////
+
+#include <TString.h>
+#include <TSystem.h>
+
+#include "AliCaloRawStream.h"
+#include "AliRawReader.h"
+#include "AliCaloAltroMapping.h"
+
+ClassImp(AliCaloRawStream)
+
+
+//_____________________________________________________________________________
+  AliCaloRawStream::AliCaloRawStream(AliRawReader* rawReader, TString calo) :
+  AliAltroRawStream(rawReader),
+  fModule(-1),
+  fPrevModule(-1),
+  fRow(-1),
+  fPrevRow(-1),
+  fColumn(-1),
+  fPrevColumn(-1),
+  fGain(0)
+{
+// create an object to read PHOS/EMCAL raw digits
+
+  SelectRawData(calo);
+
+  // PHOS and EMCAL have differen number of RCU per module
+  fNRCU = 4;
+  if(calo == "EMCAL")  fNRCU = 2;
+
+  TString path = gSystem->Getenv("ALICE_ROOT/");
+  path += calo+"/mapping/RCU";
+  TString path2;
+  for(Int_t i = 0; i < fNRCU; i++) {
+    path2 = path;
+    path2 += i;
+    path2 += ".data";
+    fMapping[i] = new AliCaloAltroMapping(path2.Data());
+  }
+
+  SetNoAltroMapping(kFALSE);
+}
+
+//_____________________________________________________________________________
+AliCaloRawStream::AliCaloRawStream(const AliCaloRawStream& stream) :
+  AliAltroRawStream(stream),
+  fModule(-1),
+  fPrevModule(-1),
+  fRow(-1),
+  fPrevRow(-1),
+  fColumn(-1),
+  fPrevColumn(-1),
+  fGain(0),
+  fNRCU(0)
+{  
+  Fatal("AliCaloRawStream", "copy constructor not implemented");
+}
+
+//_____________________________________________________________________________
+AliCaloRawStream& AliCaloRawStream::operator = (const AliCaloRawStream& 
+                                             /* stream */)
+{
+  Fatal("operator =", "assignment operator not implemented");
+  return *this;
+}
+
+//_____________________________________________________________________________
+AliCaloRawStream::~AliCaloRawStream()
+{
+// destructor
+
+  for(Int_t i = 0; i < fNRCU; i++) delete fMapping[i];
+}
+
+//_____________________________________________________________________________
+void AliCaloRawStream::Reset()
+{
+  // reset phos/emcal raw stream params
+  AliAltroRawStream::Reset();
+  fModule = fPrevModule = fRow = fPrevRow = fColumn = fPrevColumn = -1;
+  fGain = 0;
+}
+
+//_____________________________________________________________________________
+Bool_t AliCaloRawStream::Next()
+{
+  // Read next PHOS/EMCAL signal
+  // Apply the PHOS/EMCAL altro mapping to get
+  // the module,row and column indeces
+  fPrevModule = fModule;
+  fPrevRow = fRow;
+  fPrevColumn = fColumn;
+  if (AliAltroRawStream::Next()) {
+    if (IsNewHWAddress())
+      ApplyAltroMapping();
+    return kTRUE;
+  }
+  else
+    return kFALSE;
+}
+
+//_____________________________________________________________________________
+void AliCaloRawStream::ApplyAltroMapping()
+{
+  // Take the DDL index, load
+  // the corresponding altro mapping
+  // object and fill the sector,row and pad indeces
+  Int_t ddlNumber = GetDDLNumber();
+  fModule = ddlNumber / fNRCU;
+
+  Int_t rcuIndex = ddlNumber % fNRCU;
+
+  Short_t hwAddress = GetHWAddress();
+  fRow = fMapping[rcuIndex]->GetPadRow(hwAddress);
+  fColumn = fMapping[rcuIndex]->GetPad(hwAddress);
+  fGain = fMapping[rcuIndex]->GetSector(hwAddress);
+
+}
diff --git a/RAW/AliCaloRawStream.h b/RAW/AliCaloRawStream.h
new file mode 100644 (file)
index 0000000..320e8e1
--- /dev/null
@@ -0,0 +1,66 @@
+#ifndef ALICALORAWSTREAM_H
+#define ALICALORAWSTREAM_H
+/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+ * See cxx source for full Copyright notice                               */
+
+/* $Id$ */
+
+///////////////////////////////////////////////////////////////////////////////
+///
+/// This class provides access to Calo digits in raw data.
+///
+///Modification: Class exported from PHOS to be used by EMCAL and PHOS
+///November 2006 Gustavo Conesa Balbastre 
+///////////////////////////////////////////////////////////////////////////////
+
+// --- ROOT system ---
+
+// --- AliRoot header files ---
+#include "AliAltroRawStream.h"
+class AliRawReader;
+class AliAltroMapping;
+
+class AliCaloRawStream: public AliAltroRawStream {
+
+public :
+  AliCaloRawStream(AliRawReader* rawReader,  TString calo);
+  virtual ~AliCaloRawStream();
+  virtual void             Reset();
+  virtual Bool_t           Next();
+  
+  Int_t            GetModule()     const {return fModule;}
+  Int_t            GetRow()        const {return fRow;}
+  Int_t            GetColumn()     const {return fColumn;}
+  Int_t            GetPrevModule() const {return fPrevModule;}
+  Int_t            GetPrevRow()    const {return fPrevRow;}
+  Int_t            GetPrevColumn() const {return fPrevColumn;}
+  Bool_t           IsNewModule()   const {return GetModule() != GetPrevModule();}
+  Bool_t           IsNewRow()      const {return (GetRow() != GetPrevRow()) || IsNewModule();}
+  Bool_t           IsNewColumn()   const {return (GetColumn() != GetPrevColumn()) || IsNewRow();}
+  Bool_t           IsLowGain()     const {return (!fGain);} 
+  Int_t            GetNRCU() const {return fNRCU;}
+
+protected:
+
+  AliCaloRawStream(const AliCaloRawStream& stream);
+  AliCaloRawStream& operator = (const AliCaloRawStream& stream);
+
+  virtual void ApplyAltroMapping();
+
+  Int_t            fModule;       // index of current module
+  Int_t            fPrevModule;   // index of previous module
+  Int_t            fRow;          // index of current row
+  Int_t            fPrevRow;      // index of previous row
+  Int_t            fColumn;       // index of current column
+  Int_t            fPrevColumn;   // index of previous column
+  Bool_t          fGain;         // low (0) or (1) high gain
+  Int_t            fNRCU;   // number of RCU per (super)module
+  AliAltroMapping *fMapping[4];   // pointers to ALTRO mapping
+
+  ClassDef(AliCaloRawStream, 0)   // class for reading PHOS/EMCAL raw digits
+
+};
+
+#endif
+
index 29a8070..911f35c 100644 (file)
@@ -12,6 +12,7 @@
 #pragma link C++ class AliRawData;
 #pragma link C++ class AliStats;
 #pragma link C++ class AliAltroMapping+;
+#pragma link C++ class AliCaloAltroMapping+;
 #pragma link C++ class AliDAQ+;
 
 #endif
index 246c60a..f1eaac4 100644 (file)
@@ -13,6 +13,7 @@
 #pragma link C++ class AliRawReaderMemory+;
 #pragma link C++ class AliAltroRawStream+;
 #pragma link C++ class AliAltroRawStreamOld+;
+#pragma link C++ class AliCaloRawStream+;
 #pragma link C++ class AliVMERawStream+;
 
 #endif
index fab8638..f31ccda 100644 (file)
@@ -3,7 +3,7 @@
 SRCS:=  AliRawEventHeaderBase.cxx AliRawEquipmentHeader.cxx \
        AliRawData.cxx AliRawEquipment.cxx AliRawEvent.cxx \
        AliStats.cxx \
-       AliAltroMapping.cxx \
+       AliAltroMapping.cxx AliCaloAltroMapping.cxx \
        AliDAQ.cxx
 
 HDRS:= $(SRCS:.cxx=.h)
index 8af6e0c..c7b6faf 100644 (file)
@@ -5,7 +5,7 @@ SRCS:=  AliFilter.cxx \
        AliRawReaderDate.cxx AliRawReaderDateV3.cxx \
        AliRawReaderMemory.cxx \
        AliAltroRawStream.cxx \
-       AliAltroRawStreamOld.cxx \
+       AliAltroRawStreamOld.cxx AliCaloRawStream.cxx \
        AliVMERawStream.cxx
 
 HDRS:= $(SRCS:.cxx=.h)