X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=TRD%2FAliTRDSignalIndex.h;h=3be9cc0409c3b026424ce46cba157013f72c2eb5;hb=4ea997df718622ff648fa363cd4b55e26c4485cd;hp=6b5b85f25e046e1adafc09e221e0e4f6651a2916;hpb=001be6643b3e1d0153e8f084c4a7c21bd96af816;p=u%2Fmrichter%2FAliRoot.git diff --git a/TRD/AliTRDSignalIndex.h b/TRD/AliTRDSignalIndex.h index 6b5b85f25e0..3be9cc0409c 100644 --- a/TRD/AliTRDSignalIndex.h +++ b/TRD/AliTRDSignalIndex.h @@ -1,5 +1,5 @@ -#ifndef AliTRDSIGNALINDEX_H -#define AliTRDSIGNALINDEX_H +#ifndef ALITRDSIGNALINDEX_H +#define ALITRDSIGNALINDEX_H /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * * See cxx source for full Copyright notice */ @@ -8,161 +8,170 @@ #include "TObject.h" -///////////////////////////////////////////////////////////// -// General container for data from TRD detector segments // -// Adapted from AliDigits, origin M.Ivanov // -///////////////////////////////////////////////////////////// - -//class TArrayI; -#include "TArrayI.h" +//////////////////////////////////////////////////////////////////////////// +// // +// General container for data from TRD detector segments // +// Adapted from AliDigits, origin M.Ivanov // +// // +// Author: // +// Mateusz Ploskon (ploskon@ikf.uni-frankfurt.de) // +// // +//////////////////////////////////////////////////////////////////////////// class AliTRDSignalIndex : public TObject { + public: AliTRDSignalIndex(); AliTRDSignalIndex(Int_t nrow, Int_t ncol,Int_t ntime); AliTRDSignalIndex(const AliTRDSignalIndex &d); - virtual ~AliTRDSignalIndex(); // destructor + virtual ~AliTRDSignalIndex(); AliTRDSignalIndex &operator=(const AliTRDSignalIndex &d); - virtual void Copy(TObject &d) const; - virtual void Allocate(Int_t nrow, Int_t ncol,Int_t ntime); - virtual void Reset(); - - virtual void ResetContentConditional(Int_t nrow, Int_t ncol,Int_t ntime); - virtual void ResetContent(); - - virtual void ResetCounters() - { - // reset the counters/iterators - fPositionRow = 0; - fPositionCol = fPositionRow + 1; - fPositionTbin = 1; - - fLastRow = -1; - fLastCol = -1; - fLastTbin = -1; - - fResetCounters = kTRUE; - } - - virtual void ResetTbinCounter() - { - // reset the time bin counter - - fPositionTbin = 1; - } - - virtual void AddIndexTBin(Int_t row, Int_t col, Int_t tbin); - - Bool_t NextRCIndex(Int_t &row, Int_t &col); // get the next pad (row and column) and return kTRUE on success - Bool_t NextRCTbinIndex(Int_t &row, Int_t &col, Int_t &tbin); // get the next timebin of a pad (row and column) and return kTRUE on success - Bool_t NextTbinIndex(Int_t &tbin); // get the next active timebin and return kTRUE on success - - Int_t GetCurrentRow() {return (*fIndex)[fPositionRow];} // current row - Int_t GetCurrentCol() {return (*fIndex)[fPositionCol];} // current col - Int_t GetCurtentTbin() {return (*fIndex)[fPositionCol + fPositionTbin];} //current tbin - - void ClearAll(); // clear the array, actually destroy and recreate w/o allocating - - //void Dump(); // printf content - one way of iterating demo - //void Dump2(); // printf content - another way of iterating demo - - //Bool_t IsAllocated() const {if (fIndex) return kTRUE; else return kFALSE;} - Bool_t IsAllocated() const - { - // return kTRUE if array allocated and there is no need to call allocate - if (!fIndex) - return kFALSE; - if (fIndex->GetSize() <= 0) - return kFALSE; - else return kTRUE; - } - - void SetSM(Int_t ix) - { - // Set which SM - fSM = ix; - }; - - void SetStack(Int_t ix) - { - // Set which stack - fStack = ix; - }; - - void SetChamber(Int_t ix) - { - // aka set stack - SetStack(ix); - } - - void SetLayer(Int_t ix) - { - // Set which layer - fLayer = ix; - }; - - void SetPlane(Int_t ix) - { - // aka set plane - SetLayer(ix); - } - - void SetDetNumber(Int_t ix) - { - // Set Det Number - fDet = ix; - } - - virtual Int_t GetDetNumber() const {return fDet;} // Get Det number - virtual Int_t GetLayer() const {return fLayer;} // Layer = Plane = position of the chamber in TRD - virtual Int_t GetPlane() const {return fLayer;} // Layer = Plane = position of the chamber in TRD - virtual Int_t GetStack() const {return fStack;} // Stack = Chameber = position of the chamber in TRD - virtual Int_t GetChamber() const {return fStack;} // Stack = Chameber = position of the chamber in TRD - virtual Int_t GetSM() const {return fSM;} // Super module of the TRD - virtual Bool_t HasEntry() const {return fHasEntry;} // Return status if has an entry + void Copy(TObject &d) const; + void Allocate(const Int_t nrow, const Int_t ncol, const Int_t ntime); - TArrayI *GetArray() const {return fIndex;} // Get the tarrayi pointer for god knows what reason + void Reset(); + void ResetContentConditional(const Int_t nrow, const Int_t ncol, const Int_t ntime); + void ResetContent(); + void ResetCounters(); + void ResetTbinCounter() const { }; - virtual Int_t GetNrow() const {return fNrows;} // Get Nrows - virtual Int_t GetNcol() const {return fNcols;} // Get Ncols - virtual Int_t GetNtime() const {return fNtbins;} // Get Ntbins + void ResetArrays(); - //enum { kMaxRows = 16, kMaxTbins = 24, kMaxCols = 144}; + void AddIndexRC(const Int_t row, const Int_t col); - private: + // Get the next pad (row and column) and return kTRUE on success + Bool_t NextRCIndex(Int_t &row, Int_t &col); + // Get the next timebin of a pad (row and column) and return kTRUE on success + Bool_t NextRCTbinIndex(Int_t &row, Int_t &col, Int_t &tbin); + // Get the next active timebin and return kTRUE on success + Bool_t NextTbinIndex(Int_t &tbin); - Int_t fDet; // det number - Int_t fLayer; // aka plane - position in the full TRD - Int_t fStack; // aka chamber - position in the full TRD - Int_t fSM; // super module - position in the full TRD + Int_t GetCurrentRow() const { return fCurrRow; } + Int_t GetCurrentCol() const { return fCurrCol; } + Int_t GetCurrentTbin() const { return fCurrTbin; } - protected: + Bool_t IsBoolIndex(Int_t row, Int_t col) const {return fBoolIndex[row*fNcols+col];}; + void InitSortedIndex(); - TArrayI *fIndex; //! monitor active pads and tbins + // Clear the array, actually destroy and recreate w/o allocating + void ClearAll(); + // Return kTRUE if array allocated and there is no need to call allocate + Bool_t IsAllocated() const { if (!fBoolIndex) return kFALSE; + if (fMaxLimit <= 0) return kFALSE; + else return kTRUE;} - Int_t fPositionRow; // position in the index - jumps by 1 + 1 + fNtbins - Int_t fPositionCol; // position in the index - jumps by 1 + 1 + fNtbins - Int_t fPositionTbin; // position in the tbin - goes from 0 to fNtbins + void SetSM(const Int_t ix) { fSM = ix; } + void SetStack(const Int_t ix) { fStack = ix; } + void SetLayer(const Int_t ix) { fLayer = ix; } + void SetDetNumber(const Int_t ix) { fDet = ix; } + + Int_t GetDetNumber() const { return fDet; } // Get Det number + Int_t GetLayer() const { return fLayer; } // Layer position of the chamber in TRD + Int_t GetStack() const { return fStack; } // Stack position of the chamber in TRD + Int_t GetSM() const { return fSM; } // Super module of the TRD + Short_t *GetArray() const { return fSortedIndex; } // Get the array pointer for god knows what reason - Int_t fLastRow; // to keep track what is the RC combination - Int_t fLastCol; // to keep track what is the RC combination - Int_t fLastTbin; // to keep track what is the Tbin - will catch if raw data bogus + Bool_t HasEntry() const { return fHasEntry; } // Return status if has an entry - Int_t fNrows; // number of rows in the chamber - Int_t fNcols; // number of cols in the chamber - Int_t fNtbins; // number of tbins in the chamber + Int_t GetNrow() const { return fNrows; } // Get Nrows + Int_t GetNcol() const { return fNcols; } // Get Ncols + Int_t GetNtime() const { return fNtbins; } // Get Ntbins - Int_t fMaxLimit; // max number of things in the array = nrow * ncol * ntime + nrow * ncol * 2 + private: - Bool_t fResetCounters; // reset counter status + Int_t fDet; // Detector number + Int_t fLayer; // Layer position in the full TRD + Int_t fStack; // Stack position in the full TRD + Int_t fSM; // Super module - position in the full TRD - Bool_t fHasEntry; // kTRUE flag if we have an entry + Bool_t *fBoolIndex; // Indices + Short_t *fSortedIndex; // Sorted indices + Int_t fMaxLimit; // Max number of things in the array + Int_t fPositionRC; // Position in the SortedIndex + Bool_t fSortedWasInit; // Was SortedIndex initialized? - ClassDef(AliTRDSignalIndex,1) // Data container for one TRD detector segment + Int_t fCurrRow; // Last Row read out of SortedIndex + Int_t fCurrCol; // Last Col read out of SortedIndex + Int_t fCurrTbin; // Last outgiven Tbin + + Int_t fNrows; // Number of rows in the chamber + Int_t fNcols; // Number of cols in the chamber + Int_t fNtbins; // Number of tbins in the chamber + + Bool_t fHasEntry; // kTRUE flag if we have an entry + + ClassDef(AliTRDSignalIndex,2) // Data container for one TRD detector segment }; - #endif + +/* +Comment from 22 Dec 2008 + +The structure of the Index was changed. Now no Tbin is saved anymore, +only RC combination are saved! (reasons see below) + +For the readout, all tbins for a RC combination must be read out to find +the time bin of signal > 0. + +THE WRITING PROCEDURE: +AddIndexTBin is now obsolate, use AddIndexRC instead as AddIndexTBin will +be deleted in future. + +example that gives exactely the same output as before: +as it was: + AliTRDSignalIndexes *indexes; + AliTRDarrayADC *Signal; //or AliTRDarraySignal *Signal; + if(Signal->GetDataB(row, col, time)>0) + indexes->AddIndexTBin(row, col, time); + +as it should be from no on: + AliTRDSignalIndexes *indexes; + AliTRDarrayADC *Signal; //or AliTRDarraySignal *Signal; + if(Signal->GetDataB(row, col, time)>0) + indexes->AddIndexRC(row, col); + + + +THE READING PROCEDURE: +In most cases you can leave anything as it is. +See more in the example. + +example: +as it was: + AliTRDSignalIndexes *indexes; + AliTRDarraySignal *Signal; + while(indexes->NextRCTbinIndex(row, col, time)) + {...} + +as it should be from no on to get the exactely the same output as before: + AliTRDSignalIndexes *indexes; + AliTRDarraySignal *Signal; + while(indexes->NextRCTbinIndex(row, col, time)) + if(Signal->GetData(row, col, time)>0) + {...} + +as it should be idealy: + AliTRDSignalIndexes *indexes; + AliTRDarraySignal *Signal; + for(time = 0; time < Ntime; time++) + while(indexes->NextRCIndex(row, col, time)) + if(Signal->GetData(row, col, time)>0) + {...} + + +REASON OF THE CHANGES: + +The array saved the information nicely, but it turned out that sorting +the array by column would have many benefits. +I.e. it is crucial for fivePadClusters and it if much faster to allocate. +But the sorting is not fast if the tbin is also saved. +Moreover the tbin information was alsmost useless because, +whenever an RC index existed, many of the possible tbins where used. + +Theodor Rascanu + +*/