/// 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 > AliPHOSRawStream input(&rawReader) ;
+/// root > while (input.Next()) .....
///////////////////////////////////////////////////////////////////////////////
+#include <TString.h>
+#include <TSystem.h>
+
#include "AliPHOSRawStream.h"
#include "AliRawReader.h"
+#include "AliPHOSAltroMapping.h"
ClassImp(AliPHOSRawStream)
//_____________________________________________________________________________
AliPHOSRawStream::AliPHOSRawStream(AliRawReader* rawReader) :
- AliAltroRawStream(rawReader)
+ AliAltroRawStream(rawReader),
+ fModule(-1),
+ fPrevModule(-1),
+ fRow(-1),
+ fPrevRow(-1),
+ fColumn(-1),
+ fPrevColumn(-1),
+ fGain(0)
{
// create an object to read PHOS raw digits
- fRawReader->Select(6);
+ SelectRawData("PHOS");
+
+ TString path = gSystem->Getenv("ALICE_ROOT");
+ path += "/PHOS/mapping/RCU";
+ TString path2;
+ for(Int_t i = 0; i < 4; i++) {
+ path2 = path;
+ path2 += i;
+ path2 += ".data";
+ fMapping[i] = new AliPHOSAltroMapping(path2.Data());
+ }
+
+ SetNoAltroMapping(kFALSE);
+}
+
+//_____________________________________________________________________________
+AliPHOSRawStream::AliPHOSRawStream(const AliPHOSRawStream& stream) :
+ AliAltroRawStream(stream),
+ fModule(-1),
+ fPrevModule(-1),
+ fRow(-1),
+ fPrevRow(-1),
+ fColumn(-1),
+ fPrevColumn(-1),
+ fGain(0)
+{
+ Fatal("AliPHOSRawStream", "copy constructor not implemented");
+}
+
+//_____________________________________________________________________________
+AliPHOSRawStream& AliPHOSRawStream::operator = (const AliPHOSRawStream&
+ /* stream */)
+{
+ Fatal("operator =", "assignment operator not implemented");
+ return *this;
+}
+
+//_____________________________________________________________________________
+AliPHOSRawStream::~AliPHOSRawStream()
+{
+// destructor
+
+ for(Int_t i = 0; i < 4; i++) delete fMapping[i];
+}
+
+//_____________________________________________________________________________
+void AliPHOSRawStream::Reset()
+{
+ // reset phos raw stream params
+ AliAltroRawStream::Reset();
+ fModule = fPrevModule = fRow = fPrevRow = fColumn = fPrevColumn = -1;
+ fGain = 0;
+}
+
+//_____________________________________________________________________________
+Bool_t AliPHOSRawStream::Next()
+{
+ // Read next PHOS signal
+ // Apply the PHOS 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 AliPHOSRawStream::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 / 4;
+
+ Int_t rcuIndex = ddlNumber % 4;
+
+ Short_t hwAddress = GetHWAddress();
+ fRow = fMapping[rcuIndex]->GetPadRow(hwAddress);
+ fColumn = fMapping[rcuIndex]->GetPad(hwAddress);
+ fGain = fMapping[rcuIndex]->GetSector(hwAddress);
+
}