/// root > while (input.Next()) .....
///////////////////////////////////////////////////////////////////////////////
+#include "TClonesArray.h"
+#include "TClass.h"
+
+
+
#include "AliPHOSRawStream.h"
#include "AliRawReader.h"
+#include "AliPHOSConTableDB.h"
+#include "AliPHOSDigit.h"
-ClassImp(AliPHOSRawStream)
+#ifdef ALI_DATE
+#include "event.h"
+#else
+#include "AliPHOSevent.h"
+#endif
+ClassImp(AliPHOSRawStream)
//_____________________________________________________________________________
-AliPHOSRawStream::AliPHOSRawStream(AliRawReader* rawReader) :
- AliAltroRawStream(rawReader)
+AliPHOSRawStream::AliPHOSRawStream(AliRawReader* rawReader) : TObject()
{
-// create an object to read PHOS raw digits
+ fRawReader = rawReader ;
+ fctdb = 0 ;
+}
+//_____________________________________________________________________________
+Bool_t AliPHOSRawStream::ReadDigits(TClonesArray * digits){
+
+ Bool_t isOK = kFALSE ;
+ if(!fctdb){
+ Error("ReadDigits","Connection table not set") ;
+ return kFALSE ;
+ }
- fRawReader->Select(6);
+ if(!digits){
+ Error("ReadDigits","Output array not created") ;
+ return kFALSE ;
+ }
+
+ if(!(digits->GetClass()->InheritsFrom("AliPHOSDigit"))){
+ Error("ReadDigits","Digits contanier made for %s, not AliPHOSDigits",digits->GetClass()->GetName()) ;
+ return kFALSE ;
+ }
+
+ digits->Clear() ;
+
+ //Check, if current event - PHYSICS event
+ if(!((fRawReader->GetType() & EVENT_TYPE_MASK)==PHYSICS_EVENT)){
+ return kFALSE ;
+ }
+
+ //Scan subevents until subevent with digits
+ while(fRawReader->ReadNextData(fData)){
+ switch (fRawReader->GetEquipmentType()){
+ case kPattUnitMarker:
+ if(fRawReader->GetEquipmentId() == kPattUnitEquipId){ //Read PHOS trigger
+ Int_t * patt = (Int_t *)fData;
+ if(fRawReader->GetEquipmentSize() >= (Int_t)sizeof(Int_t))
+ fTrig = patt[0];
+ else
+ fTrig = 0 ;
+ }
+ break;
+ case kPhosAdcMarker:
+ if(fRawReader->GetEquipmentId() == kPhosAdcEquipId){
+ Int_t ndigits = fRawReader->GetEquipmentSize()/sizeof(Int_t);
+ digits->Expand(ndigits) ;
+ for(Int_t i=0; i<ndigits; i++){
+ Int_t * amps = (Int_t *)fData ;
+ Int_t absID = fctdb->Raw2AbsId(i) ;
+ Int_t time = 0;
+ if(absID>0) //Only real digits are filled, last ADC numbers (if any) are scipped
+ new((*digits)[i]) AliPHOSDigit( -1, absID, amps[i], time) ;
+ }
+ digits->Sort() ;
+ digits->Compress() ;
+ digits->Expand(digits->GetEntriesFast()) ;
+
+ //Set indexes in list of digits and make true digitization of the energy
+ for (Int_t id = 0 ; id < digits->GetEntriesFast() ; id++) {
+ AliPHOSDigit * digit = dynamic_cast<AliPHOSDigit*>( digits->At(id) ) ;
+ digit->SetIndexInList(id) ;
+ }
+
+ isOK = kTRUE ;
+ }
+ break;
+ case kTdcMarker:
+ if(fRawReader->GetEquipmentId() == kTdcEquipId){
+ // Probably sometime we will need to handle these data
+ }
+ break;
+ case kChargeAdcMarker:
+ if(fRawReader->GetEquipmentId() == kChargeAdcEquipId){
+ //Probably sometime we will need to handle these data
+ }
+ break;
+ case kScalerMarker:
+ if(fRawReader->GetEquipmentId() == kScalerEquipId){
+ //Probably sometime we will need to handle these data
+ }
+ break;
+ default:
+ break;
+ }
+ }
+ return isOK ;
}
+
///////////////////////////////////////////////////////////////////////////////
// --- ROOT system ---
+class TClonesArray ;
// --- AliRoot header files ---
#include "AliAltroRawStream.h"
class AliRawReader;
+class AliPHOSConTableDB ;
-class AliPHOSRawStream: public AliAltroRawStream {
+class AliPHOSRawStream: public TObject {
public :
AliPHOSRawStream(AliRawReader* rawReader);
- Int_t GetColumn() const {return fPad;}
- Int_t GetModule() const {return fSector;}
- Int_t GetPrevColumn() const {return fPrevPad;}
- Int_t GetPrevModule() const {return fPrevSector;}
- Int_t GetPrevRow() const {return fPrevRow;}
- Int_t GetRow() const {return fRow;}
- Int_t GetSignal() const {return fSignal;}
- Int_t GetTime() const {return fTime;}
- Bool_t IsNewColumn() const {return (GetColumn() != GetPrevColumn()) || IsNewRow();}
- Bool_t IsNewModule() const {return GetModule() != GetPrevModule();}
- Bool_t IsNewRow() const {return (GetRow() != GetPrevRow()) || IsNewModule();}
-
+
+ Bool_t ReadDigits(TClonesArray * digits) ;
+
+//PHOS does not need this method
+ virtual Bool_t Next(){return kFALSE ;} ;
+
+
+ Int_t GetColumn() const {return 0;}
+ Int_t GetModule() const {return 0;}
+ Int_t GetPrevColumn() const {return 0;}
+ Int_t GetPrevModule() const {return 0;}
+ Int_t GetPrevRow() const {return 0;}
+ Int_t GetRow() const {return 0;}
+ Int_t GetSignal() const {return 0;}
+ Int_t GetTime() const {return 0;}
+ Bool_t IsNewColumn() const {return kFALSE; }
+ Bool_t IsNewModule() const {return kFALSE;}
+ Bool_t IsNewRow() const {return kFALSE ;}
+
+
+ void SetConTableDB(AliPHOSConTableDB * ctdb){fctdb = ctdb ;}
+
+ Int_t GetTrigger(void) const {return fTrig ;}
+ Bool_t IsLEDevent(void)const {return fTrig == kLED;}
+ Bool_t IsPULevent(void)const {return fTrig == kPUL;}
+ Bool_t IsPEDevent(void)const {return fTrig == kPED;}
+ Bool_t IsWELevent(void)const {return fTrig == kWEL;}
+ Bool_t IsNELevent(void)const {return fTrig == kNEL;}
+
+
+ public:
+ enum { kLED = 129, // Physics pattern unit for LED events
+ kPUL = 33, // Physics pattern unit for PULSER events
+ kPED = 257, // Physics pattern unit for PEDESTAL events
+ kNEL =1029, // Physics pattern unit for NARROW ELECTRON events
+ kWEL =1027, // Physics pattern unit for WIDE ELECTRON events
+ kSOB =2048, // Pattern unit mask for Start Of Burst trigger or 0 to disable SOB trigger
+ kEOB =4096, // Pattern unit mask for End Of Burst trigger or 0 to disable EOB trigger
+
+ kPattUnitMarker = 27, // Equipment type marker for Pattern Unit
+ kPattUnitEquipId= 64, // Equipment ID for Pattern Unit
+
+ kPhosAdcMarker = 22, // Equipment type marker for PhosAdc (Kurchatov ADC)
+ kPhosAdcEquipId= 16, // Equipment ID for PhosAdc
+
+ kTdcMarker = 26, // Equipment type marker for Tdc
+ kTdcEquipId=128, // Equipment ID for Tdc
+
+ kChargeAdcMarker = 24, // Equipment type marker for ChargeAdc
+ kChargeAdcEquipId= 32, // Equipment ID for ChargeAdc
+
+ kScalerMarker = 25, // Equipment type marker for Scaler
+ kScalerEquipId=256}; // Equipment ID for Scaler
+
+
+protected :
+ AliRawReader* fRawReader; //! object for reading the raw data
+ UChar_t* fData; //! raw data
+ AliPHOSConTableDB * fctdb ; //! connection between RAW index and AbsId of crystal
+
+ Int_t fTrig ; //current trigger
+
ClassDef(AliPHOSRawStream, 0) // class for reading PHOS raw digits
- };
+};
#endif