X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=PHOS%2FAliPHOSRawStream.cxx;h=b41eb9d7192305cd399a43f1530843ef553dfa20;hb=ea4a87ee287044e3bd73af7297cc256e75fe078f;hp=1c1557b2b6dc2e7c1edae9a74953023a442a8479;hpb=65792ca0a6fa6abd7b334fa1e4afd0af7d9aa563;p=u%2Fmrichter%2FAliRoot.git diff --git a/PHOS/AliPHOSRawStream.cxx b/PHOS/AliPHOSRawStream.cxx index 1c1557b2b6d..b41eb9d7192 100644 --- a/PHOS/AliPHOSRawStream.cxx +++ b/PHOS/AliPHOSRawStream.cxx @@ -23,20 +23,121 @@ /// 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 +#include + #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); + }