X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=TRD%2FAliTRDarrayADC.h;h=17c09349db1cc7a3ae065b5e427164cb1bf334ee;hb=c388cdcbd2e6e7c4170db22af357aa487006a72c;hp=c31c6beb381153bc52eb5e65dbc85a5aa064d6db;hpb=705d9e7b6abef5d5933bb526fe4535b8417ac529;p=u%2Fmrichter%2FAliRoot.git diff --git a/TRD/AliTRDarrayADC.h b/TRD/AliTRDarrayADC.h index c31c6beb381..17c09349db1 100644 --- a/TRD/AliTRDarrayADC.h +++ b/TRD/AliTRDarrayADC.h @@ -13,6 +13,7 @@ #include +class AliTRDSignalIndex; class AliTRDarrayADC: public TObject { public: @@ -26,12 +27,13 @@ class AliTRDarrayADC: public TObject void Allocate(Int_t nrow, Int_t ncol, Int_t ntime); void SetNdet(Int_t ndet) {fNdet=ndet;}; Int_t GetNdet() const {return fNdet;}; - void SetData(Int_t nrow, Int_t ncol, Int_t ntime, Short_t value) - {fADC[(nrow*fNcol+ncol)*fNtime+ntime]=value;}; + void SetDataByAdcCol(Int_t nrow, Int_t ncol, Int_t ntime, Short_t value) + {fADC[(nrow*fNumberOfChannels+ncol)*fNtime+ntime]=value;} Bool_t HasData() const {return fNtime ? 1 : 0;}; - Short_t GetData(Int_t nrow, Int_t ncol, Int_t ntime) const - {return fADC[(nrow*fNcol+ncol)*fNtime+ntime];}; - Short_t GetDataB(Int_t nrow, Int_t ncol, Int_t ntime) const; + Short_t GetDataByAdcCol(Int_t nrow, Int_t ncol, Int_t ntime) const + {return fADC[(nrow*fNumberOfChannels+ncol)*fNtime+ntime];}; + inline void GetData(Int_t r, Int_t c, Int_t t, Int_t n, Short_t *vals) const; + Short_t GetDataBits(Int_t nrow, Int_t ncol, Int_t ntime) const; UChar_t GetPadStatus(Int_t nrow, Int_t ncol, Int_t ntime) const; void SetPadStatus(Int_t nrow, Int_t ncol, Int_t ntime, UChar_t status); Bool_t IsPadCorrupted(Int_t nrow, Int_t ncol, Int_t ntime); @@ -43,17 +45,73 @@ class AliTRDarrayADC: public TObject Int_t GetDim() const {return fNAdim;}; void DeleteNegatives(); void Reset(); + void ConditionalReset(AliTRDSignalIndex* idx); + inline Short_t* GetDataAddress(Int_t nrow, Int_t ncol, Int_t ntime = 0) const; + inline Short_t GetData(Int_t nrow, Int_t ncol, Int_t ntime) const; + inline void SetData(Int_t nrow, Int_t ncol, Int_t ntime, Short_t value); + static void CreateLut(); protected: Int_t fNdet; //ID number of the chamber Int_t fNrow; //Number of rows - Int_t fNcol; //Number of columns + Int_t fNcol; //Number of columns(pads) + Int_t fNumberOfChannels; // Number of MCM channels per row Int_t fNtime; //Number of time bins Int_t fNAdim; //Dimension of the ADC array Short_t* fADC; //[fNAdim] //Pointer to adc values + static Short_t *fgLutPadNumbering; // [fNcol] Look Up Table - ClassDef(AliTRDarrayADC,1) //ADC container class + ClassDef(AliTRDarrayADC,4) //ADC container class }; + +//________________________________________________________________________________ +Short_t* AliTRDarrayADC::GetDataAddress(Int_t nrow, Int_t ncol, Int_t ntime) const +{ + // + // Get the address of the given pad + // + + Int_t corrcolumn = fgLutPadNumbering[ncol]; + + return &fADC[(nrow*fNumberOfChannels+corrcolumn)*fNtime+ntime]; + +} +//________________________________________________________________________________ +Short_t AliTRDarrayADC::GetData(Int_t nrow, Int_t ncol, Int_t ntime) const +{ + // + // Get the data using the pad numbering. + // To access data using the mcm scheme use instead + // the method GetDataByAdcCol + // + + Int_t corrcolumn = fgLutPadNumbering[ncol]; + + return fADC[(nrow*fNumberOfChannels+corrcolumn)*fNtime+ntime]; + +} +//________________________________________________________________________________ +void AliTRDarrayADC::SetData(Int_t nrow, Int_t ncol, Int_t ntime, Short_t value) +{ + // + // Set the data using the pad numbering. + // To write data using the mcm scheme use instead + // the method SetDataByAdcCol + // + + Int_t colnumb = fgLutPadNumbering[ncol]; + + fADC[(nrow*fNumberOfChannels+colnumb)*fNtime+ntime] = value; + +} + +void AliTRDarrayADC::GetData(Int_t r, Int_t c, Int_t t, Int_t n, Short_t *vals) const +{ + Int_t colNum = fgLutPadNumbering[c]; + for(Int_t ic=n, idx = (r*fNumberOfChannels+colNum)*fNtime+t; ic--; idx+=fNtime) vals[ic] = fADC[idx]; + } + #endif +