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 b29eb13e2cf5a3d54dcbb13a6911bc34e6cfce76..901a28e0db60bfb6c09a060164255c0566e7a73a 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 a35b7c81fa70fb0bd1a0f5b0627bbe5efa8d0fb7..a4396877141668264333f260abcc3ecd742b8a2b 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 50091c33f7c69a215eada83fd9e42873cf478c58..26680e75f3d4e8839fe48cfe8ed266955f01b9fa 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 97c87f28025de2e8626fa082c001ac9c6254c05a..35a68c696cca24ddefbbdb96fc7761032ec608c3 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 f63b296b77927851e00a05b2d39876355c8daf28..fdd3ead394ea6371810a2e7cac7dc8a1beda49e4 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 29a8070e673c97e048c2de3996fc40ace769ae81..911f35c6a3d67eb3738c06b7652092ae4a714b8c 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 246c60aba73652b66a455b0924b7f8a260c9ea02..f1eaac4489d43b945698b4c6876865728b24a544 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 fab86384fad13fd7f07a8477936eea29dc7610f4..f31ccda5b730236e5acfee7f8454730cd9ab856b 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 8af6e0c966abbb1fb485d91b5bf8a8f0d8c53c64..c7b6fafaf00a6951c93cf25d6ada67b3a05727b0 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)