GetClusterFast function implemented (No getter before) (Marian)
[u/mrichter/AliRoot.git] / TPC / AliTPCRawStream.cxx
1 /**************************************************************************
2  * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3  *                                                                        *
4  * Author: The ALICE Off-line Project.                                    *
5  * Contributors are mentioned in the code where appropriate.              *
6  *                                                                        *
7  * Permission to use, copy, modify and distribute this software and its   *
8  * documentation strictly for non-commercial purposes is hereby granted   *
9  * without fee, provided that the above copyright notice appears in all   *
10  * copies and that both the copyright notice and this permission notice   *
11  * appear in the supporting documentation. The authors make no claims     *
12  * about the suitability of this software for any purpose. It is          *
13  * provided "as is" without express or implied warranty.                  *
14  **************************************************************************/
15
16 /* $Id$ */
17
18 ///////////////////////////////////////////////////////////////////////////////
19 ///
20 /// This class provides access to TPC digits in raw data.
21 ///
22 /// It loops over all TPC digits in the raw data given by the AliRawReader.
23 /// The Next method goes to the next digit. If there are no digits left
24 /// it returns kFALSE.
25 /// Several getters provide information about the current digit.
26 ///
27 ///////////////////////////////////////////////////////////////////////////////
28
29 #include <TSystem.h>
30
31 #include "AliTPCRawStream.h"
32 #include "AliRawReader.h"
33 #include "AliLog.h"
34 #include "AliTPCAltroMapping.h"
35
36 ClassImp(AliTPCRawStream)
37
38 //_____________________________________________________________________________
39 AliTPCRawStream::AliTPCRawStream(AliRawReader* rawReader) :
40   AliAltroRawStream(rawReader),
41   fSector(-1),
42   fPrevSector(-1),
43   fRow(-1),
44   fPrevRow(-1),
45   fPad(-1),
46   fPrevPad(-1)
47 {
48   // create an object to read TPC raw digits
49
50   SelectRawData(0);
51
52   TString path = gSystem->Getenv("ALICE_ROOT");
53   path += "/TPC/mapping/Patch";
54   TString path2;
55   for(Int_t i = 0; i < 6; i++) {
56     path2 = path;
57     path2 += i;
58     path2 += ".data";
59     fMapping[i] = new AliTPCAltroMapping(path2.Data());
60   }
61
62   fNoAltroMapping = kFALSE;
63 }
64
65 //_____________________________________________________________________________
66 AliTPCRawStream::AliTPCRawStream(const AliTPCRawStream& stream) :
67   AliAltroRawStream(stream),
68   fSector(-1),
69   fPrevSector(-1),
70   fRow(-1),
71   fPrevRow(-1),
72   fPad(-1),
73   fPrevPad(-1)
74 {
75   Fatal("AliTPCRawStream", "copy constructor not implemented");
76 }
77
78 //_____________________________________________________________________________
79 AliTPCRawStream& AliTPCRawStream::operator = (const AliTPCRawStream& 
80                                               /* stream */)
81 {
82   Fatal("operator =", "assignment operator not implemented");
83   return *this;
84 }
85
86 //_____________________________________________________________________________
87 AliTPCRawStream::~AliTPCRawStream()
88 {
89 // destructor
90
91   for(Int_t i = 0; i < 6; i++) delete fMapping[i];
92 }
93
94 //_____________________________________________________________________________
95 void AliTPCRawStream::Reset()
96 {
97   // reset tpc raw stream params
98   AliAltroRawStream::Reset();
99   fSector = fPrevSector = fRow = fPrevRow = fPad = fPrevPad = -1;
100 }
101
102 //_____________________________________________________________________________
103 Bool_t AliTPCRawStream::Next()
104 {
105   // Read next TPC signal
106   // Apply the TPC altro mapping to get
107   // the sector,pad-row and pad indeces
108   fPrevSector = fSector;
109   fPrevRow = fRow;
110   fPrevPad = fPad;
111   if (AliAltroRawStream::Next()) {
112     if (IsNewHWAddress())
113       ApplyAltroMapping();
114     return kTRUE;
115   }
116   else
117     return kFALSE;
118 }
119
120 //_____________________________________________________________________________
121 void AliTPCRawStream::ApplyAltroMapping()
122 {
123   // Take the DDL index, load
124   // the corresponding altro mapping
125   // object and fill the sector,row and pad indeces
126   Int_t ddlNumber = GetDDLNumber();
127   Int_t patchIndex;
128   if (ddlNumber < 72) {
129     fSector = ddlNumber / 2;
130     patchIndex = ddlNumber % 2;
131   }
132   else {
133     fSector = (ddlNumber - 72) / 4 + 36;
134     patchIndex = (ddlNumber - 72) % 4 + 2;
135   }
136
137   Short_t hwAddress = GetHWAddress();
138   fRow = fMapping[patchIndex]->GetPadRow(hwAddress);
139   fPad = fMapping[patchIndex]->GetPad(hwAddress);
140
141 }