]> git.uio.no Git - u/mrichter/AliRoot.git/blob - TPC/AliTPCRawStreamFast.cxx
Test beam raw data reading
[u/mrichter/AliRoot.git] / TPC / AliTPCRawStreamFast.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 "AliTPCRawStreamFast.h"
32 #include "AliRawReader.h"
33 #include "AliLog.h"
34 #include "AliTPCAltroMapping.h"
35
36 ClassImp(AliTPCRawStreamFast)
37
38 //_____________________________________________________________________________
39 AliTPCRawStreamFast::AliTPCRawStreamFast(AliRawReader* rawReader) :
40   AliAltroRawStreamFast(rawReader),
41   fSector(-1),
42   fPrevSector(-1),
43   fRow(-1),
44   fPrevRow(-1),
45   fPad(-1),
46   fPrevPad(-1),
47   fIsMapOwner(kTRUE)
48 {
49   // create an object to read TPC raw digits
50
51   SelectRawData("TPC");
52
53   TString path = gSystem->Getenv("ALICE_ROOT");
54   path += "/TPC/mapping/Patch";
55   TString path2;
56   for(Int_t i = 0; i < 6; i++) {
57     path2 = path;
58     path2 += i;
59     path2 += ".data";
60     fMapping[i] = new AliTPCAltroMapping(path2.Data());
61   }
62
63   //fNoAltroMapping = kFALSE;
64 }
65 /*
66 //_____________________________________________________________________________
67 AliTPCRawStreamFast::AliTPCRawStreamFast(const AliTPCRawStreamFast& stream) :
68   AliAltroRawStreamFast(stream),
69   fSector(stream.fSector),
70   fPrevSector(stream.fPrevSector),
71   fRow(stream.fRow),
72   fPrevRow(stream.fPrevRow),
73   fPad(stream.fPad),
74   fPrevPad(stream.fPrevPad),
75   fIsMapOwner(kFALSE)
76 {
77   for(Int_t i = 0; i < 6; i++) fMapping[i] = stream.fMapping[i];
78 }
79
80 //_____________________________________________________________________________
81 AliTPCRawStreamFast& AliTPCRawStreamFast::operator = (const AliTPCRawStreamFast& stream)
82 {
83   if(&stream == this) return *this;
84
85   ((AliAltroRawStreamFast *)this)->operator=(stream);
86
87   fSector = stream.fSector;
88   fPrevSector = stream.fPrevSector;
89   fRow = stream.fRow;
90   fPrevRow = stream.fPrevRow;
91   fPad = stream.fPad;
92   fPrevPad = stream.fPrevPad;
93   fIsMapOwner = kFALSE;
94
95   for(Int_t i = 0; i < 6; i++) fMapping[i] = stream.fMapping[i];
96
97   return *this;
98 }
99 */
100 //_____________________________________________________________________________
101 AliTPCRawStreamFast::~AliTPCRawStreamFast()
102 {
103 // destructor
104
105   if (fIsMapOwner)
106     for(Int_t i = 0; i < 6; i++) delete fMapping[i];
107 }
108
109 //_____________________________________________________________________________
110 void AliTPCRawStreamFast::Reset()
111 {
112   // reset tpc raw stream params
113   AliAltroRawStreamFast::Reset();
114   fSector = fPrevSector = fRow = fPrevRow = fPad = fPrevPad = -1;
115 }
116
117 //_____________________________________________________________________________
118 Bool_t AliTPCRawStreamFast::NextChannel()
119 {
120   // Read next TPC Channel
121   // Apply the TPC altro mapping to get
122   // the sector,pad-row and pad indeces
123   fPrevSector = fSector;
124   fPrevRow = fRow;
125   fPrevPad = fPad;
126   if (AliAltroRawStreamFast::NextChannel()) {
127       //    if (IsNewHWAddress())
128       if ( GetHWAddress() > -1 )
129       ApplyAltroMapping();
130     return kTRUE;
131   }
132   else
133     return kFALSE;
134 }
135
136 //_____________________________________________________________________________
137 void AliTPCRawStreamFast::ApplyAltroMapping()
138 {
139   // Take the DDL index, load
140   // the corresponding altro mapping
141   // object and fill the sector,row and pad indeces
142   Int_t ddlNumber = GetDDLNumber();
143   Int_t patchIndex;
144   if (ddlNumber < 72) {
145     fSector = ddlNumber / 2;
146     patchIndex = ddlNumber % 2;
147   }
148   else {
149     fSector = (ddlNumber - 72) / 4 + 36;
150     patchIndex = (ddlNumber - 72) % 4 + 2;
151   }
152
153   Short_t hwAddress = GetHWAddress();
154   fRow = fMapping[patchIndex]->GetPadRow(hwAddress);
155   fPad = fMapping[patchIndex]->GetPad(hwAddress);
156
157 //  if ((fRow < 0) || (fPad < 0))
158 //    AddMappingErrorLog(Form("hw=%d",hwAddress));
159 }