Copy/paste error + aligned source
[u/mrichter/AliRoot.git] / TRD / AliTRDSignalIndex.h
CommitLineData
ffc57435 1#ifndef ALITRDSIGNALINDEX_H
2#define ALITRDSIGNALINDEX_H
ca21baaa 3
4/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
5 * See cxx source for full Copyright notice */
6
7/* $Id$ */
8
9#include "TObject.h"
10
c8ab4518 11////////////////////////////////////////////////////////////////////////////
12// //
13// General container for data from TRD detector segments //
14// Adapted from AliDigits, origin M.Ivanov //
15// //
16// Author: //
17// Mateusz Ploskon (ploskon@ikf.uni-frankfurt.de) //
18// //
19////////////////////////////////////////////////////////////////////////////
ca21baaa 20
ca21baaa 21class AliTRDSignalIndex : public TObject
22{
c8ab4518 23
ca21baaa 24 public:
25
26 AliTRDSignalIndex();
27 AliTRDSignalIndex(Int_t nrow, Int_t ncol,Int_t ntime);
28 AliTRDSignalIndex(const AliTRDSignalIndex &d);
c8ab4518 29 virtual ~AliTRDSignalIndex();
ca21baaa 30 AliTRDSignalIndex &operator=(const AliTRDSignalIndex &d);
ca21baaa 31
e484a267 32 void Copy(TObject &d) const;
33 void Allocate(const Int_t nrow, const Int_t ncol, const Int_t ntime);
34
35 void Reset();
36 void ResetContentConditional(const Int_t nrow, const Int_t ncol, const Int_t ntime);
37 void ResetContent();
38 void ResetCounters();
ffc57435 39 void ResetTbinCounter() const { };
e484a267 40
41 void ResetArrays();
42
43 void AddIndexRC(const Int_t row, const Int_t col);
44
45 // Get the next pad (row and column) and return kTRUE on success
46 Bool_t NextRCIndex(Int_t &row, Int_t &col);
47 // Get the next timebin of a pad (row and column) and return kTRUE on success
48 Bool_t NextRCTbinIndex(Int_t &row, Int_t &col, Int_t &tbin);
49 // Get the next active timebin and return kTRUE on success
50 Bool_t NextTbinIndex(Int_t &tbin);
51
52 Int_t GetCurrentRow() const { return fCurrRow; }
53 Int_t GetCurrentCol() const { return fCurrCol; }
54 Int_t GetCurrentTbin() const { return fCurrTbin; }
55
56 Bool_t IsBoolIndex(Int_t row, Int_t col) const {return fBoolIndex[row*fNcols+col];};
57 void InitSortedIndex();
58
59 // Clear the array, actually destroy and recreate w/o allocating
60 void ClearAll();
61 // Return kTRUE if array allocated and there is no need to call allocate
62 Bool_t IsAllocated() const { if (!fBoolIndex) return kFALSE;
63 if (fMaxLimit <= 0) return kFALSE;
64 else return kTRUE;}
65
66 void SetSM(const Int_t ix) { fSM = ix; }
67 void SetStack(const Int_t ix) { fStack = ix; }
68 void SetLayer(const Int_t ix) { fLayer = ix; }
69 void SetDetNumber(const Int_t ix) { fDet = ix; }
c8ab4518 70
e484a267 71 Int_t GetDetNumber() const { return fDet; } // Get Det number
72 Int_t GetLayer() const { return fLayer; } // Layer position of the chamber in TRD
73 Int_t GetStack() const { return fStack; } // Stack position of the chamber in TRD
74 Int_t GetSM() const { return fSM; } // Super module of the TRD
75 Short_t *GetArray() const { return fSortedIndex; } // Get the array pointer for god knows what reason
ca21baaa 76
e484a267 77 Bool_t HasEntry() const { return fHasEntry; } // Return status if has an entry
ca21baaa 78
e484a267 79 Int_t GetNrow() const { return fNrows; } // Get Nrows
80 Int_t GetNcol() const { return fNcols; } // Get Ncols
81 Int_t GetNtime() const { return fNtbins; } // Get Ntbins
ca21baaa 82
c8ab4518 83 private:
ca21baaa 84
c8ab4518 85 Int_t fDet; // Detector number
053767a4 86 Int_t fLayer; // Layer position in the full TRD
87 Int_t fStack; // Stack position in the full TRD
c8ab4518 88 Int_t fSM; // Super module - position in the full TRD
ca21baaa 89
ffc57435 90 Bool_t *fBoolIndex; // Indices
91 Short_t *fSortedIndex; // Sorted indices
064d808d 92 Int_t fMaxLimit; // Max number of things in the array
93 Int_t fPositionRC; // Position in the SortedIndex
94 Bool_t fSortedWasInit; // Was SortedIndex initialized?
ca21baaa 95
064d808d 96 Int_t fCurrRow; // Last Row read out of SortedIndex
97 Int_t fCurrCol; // Last Col read out of SortedIndex
98 Int_t fCurrTbin; // Last outgiven Tbin
99
c8ab4518 100 Int_t fNrows; // Number of rows in the chamber
101 Int_t fNcols; // Number of cols in the chamber
102 Int_t fNtbins; // Number of tbins in the chamber
ca21baaa 103
c8ab4518 104 Bool_t fHasEntry; // kTRUE flag if we have an entry
ca21baaa 105
c8ab4518 106 ClassDef(AliTRDSignalIndex,2) // Data container for one TRD detector segment
ca21baaa 107
108};
ca21baaa 109#endif
064d808d 110
111/*
112Comment from 22 Dec 2008
113
114The structure of the Index was changed. Now no Tbin is saved anymore,
115only RC combination are saved! (reasons see below)
116
117For the readout, all tbins for a RC combination must be read out to find
118the time bin of signal > 0.
119
120THE WRITING PROCEDURE:
121AddIndexTBin is now obsolate, use AddIndexRC instead as AddIndexTBin will
122be deleted in future.
123
124example that gives exactely the same output as before:
125as it was:
126 AliTRDSignalIndexes *indexes;
127 AliTRDarrayADC *Signal; //or AliTRDarraySignal *Signal;
128 if(Signal->GetDataB(row, col, time)>0)
129 indexes->AddIndexTBin(row, col, time);
130
131as it should be from no on:
132 AliTRDSignalIndexes *indexes;
133 AliTRDarrayADC *Signal; //or AliTRDarraySignal *Signal;
134 if(Signal->GetDataB(row, col, time)>0)
135 indexes->AddIndexRC(row, col);
136
137
138
139THE READING PROCEDURE:
140In most cases you can leave anything as it is.
141See more in the example.
142
143example:
144as it was:
145 AliTRDSignalIndexes *indexes;
146 AliTRDarraySignal *Signal;
147 while(indexes->NextRCTbinIndex(row, col, time))
148 {...}
149
150as it should be from no on to get the exactely the same output as before:
151 AliTRDSignalIndexes *indexes;
152 AliTRDarraySignal *Signal;
153 while(indexes->NextRCTbinIndex(row, col, time))
154 if(Signal->GetData(row, col, time)>0)
155 {...}
156
157as it should be idealy:
158 AliTRDSignalIndexes *indexes;
159 AliTRDarraySignal *Signal;
160 for(time = 0; time < Ntime; time++)
161 while(indexes->NextRCIndex(row, col, time))
162 if(Signal->GetData(row, col, time)>0)
163 {...}
164
165
166REASON OF THE CHANGES:
167
168The array saved the information nicely, but it turned out that sorting
169the array by column would have many benefits.
170I.e. it is crucial for fivePadClusters and it if much faster to allocate.
171But the sorting is not fast if the tbin is also saved.
172Moreover the tbin information was alsmost useless because,
173whenever an RC index existed, many of the possible tbins where used.
174
175Theodor Rascanu
176
177*/