Removing extra semicolons (FedoraCore3, gcc 3.4.2)
[u/mrichter/AliRoot.git] / FMD / AliFMDRawReader.cxx
CommitLineData
e802be3e 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// Class to read ADC values from a AliRawReader object.
21//
7684b53c 22// This class uses the AliFMDRawStreamer class to read the ALTRO
23// formatted data.
24//
25// +-------+
26// | TTask |
27// +-------+
28// ^
29// |
30// +-----------------+ <<references>> +--------------+
31// | AliFMDRawReader |<>----------------| AliRawReader |
32// +-----------------+ +--------------+
33// | ^
34// | <<uses>> |
35// V |
36// +-----------------+ <<uses>> |
37// | AliFMDRawStream |------------------------+
38// +-----------------+
39// |
40// V
41// +----------------+
42// | AliAltroStream |
43// +----------------+
44//
56b1929b 45#include <AliLog.h> // ALILOG_H
e802be3e 46#include "AliFMD.h" // ALIFMD_H
47#include "AliFMDDigit.h" // ALIFMDDIGIT_H
48#include "AliFMDRawStream.h" // ALIFMDRAWSTREAM_H
49#include "AliRawReader.h" // ALIRAWREADER_H
50#include "AliFMDRawReader.h" // ALIFMDRAWREADER_H
56b1929b 51#include <TArrayI.h> // ROOT_TArrayI
e802be3e 52// #include <TClonesArray.h> // ROOT_TClonesArray
53
54//____________________________________________________________________
925e6570 55ClassImp(AliFMDRawReader)
e802be3e 56
57//____________________________________________________________________
58AliFMDRawReader::AliFMDRawReader(AliFMD* fmd, AliRawReader* reader)
59 : TTask("FMDRawReader", "Reader of Raw ADC values from the FMD"),
60 fFMD(fmd),
61 fReader(reader)
62{
56b1929b 63 // Default CTOR
64 SetSampleRate(fmd->GetSampleRate());
e802be3e 65}
66
67
68//____________________________________________________________________
69void
70AliFMDRawReader::Exec(Option_t*)
71{
56b1929b 72 // Read raw data into the digits array
e802be3e 73 if (!fReader->ReadHeader()) {
74 Error("ReadAdcs", "Couldn't read header");
75 return;
76 }
77
78 // Use AliAltroRawStream to read the ALTRO format. No need to
79 // reinvent the wheel :-)
80 AliFMDRawStream input(fReader, fSampleRate);
81 // Select FMD DDL's
82 fReader->Select(AliFMD::kBaseDDL >> 8);
83
84 Int_t oldDDL = -1;
85 Int_t count = 0;
86 UShort_t detector = 1; // Must be one here
87 UShort_t oldDetector = 0;
88 Bool_t next = kTRUE;
89
90 // local Cache
91 TArrayI counts(10);
92 counts.Reset(-1);
93
94 // Loop over data in file
95 while (next) {
96 next = input.Next();
97
98 count++;
99 Int_t ddl = fReader->GetDDLID();
100 if (ddl != oldDDL || input.IsNewStrip() || !next) {
101 // Make a new digit, if we have some data (oldDetector == 0,
102 // means that we haven't really read anything yet - that is,
103 // it's the first time we get here).
104 if (oldDetector > 0) {
105 // Got a new strip.
106 AliDebug(10, Form("Add a new strip: FMD%d%c[%2d,%3d] "
107 "(current: FMD%d%c[%2d,%3d])",
108 oldDetector, input.PrevRing(),
109 input.PrevSector() , input.PrevStrip(),
110 detector , input.Ring(), input.Sector(),
111 input.Strip()));
112 fFMD->AddDigit(oldDetector,
113 input.PrevRing(),
114 input.PrevSector(),
115 input.PrevStrip(),
116 counts[0], counts[1], counts[2]);
117#if 0
118 AliFMDDigit* digit =
119 static_cast<AliFMDDigit*>(fFMD->Digits()->
120 UncheckedAt(fFMD->GetNdigits()-1));
121#endif
122 }
123
124 if (!next) {
125 AliDebug(10, Form("Read %d channels for FMD%d",
126 count + 1, detector));
127 break;
128 }
129
130
131 // If we got a new DDL, it means we have a new detector.
132 if (ddl != oldDDL) {
133 if (detector != 0)
134 AliDebug(10, Form("Read %d channels for FMD%d",
135 count + 1, detector));
136 // Reset counts, and update the DDL cache
137 count = 0;
138 oldDDL = ddl;
139 // Check that we're processing a FMD detector
140 Int_t detId = fReader->GetDetectorID();
141 if (detId != (AliFMD::kBaseDDL >> 8)) {
142 Error("ReadAdcs", "Detector ID %d != %d",
143 detId, (AliFMD::kBaseDDL >> 8));
144 break;
145 }
146 // Figure out what detector we're deling with
147 oldDetector = detector;
148 switch (ddl) {
149 case 0: detector = 1; break;
150 case 1: detector = 2; break;
151 case 2: detector = 3; break;
152 default:
153 Error("ReadAdcs", "Unknown DDL 0x%x for FMD", ddl);
154 return;
155 }
156 AliDebug(10, Form("Reading ADCs for 0x%x - That is FMD%d",
157 fReader->GetEquipmentId(), detector));
158 }
159 counts.Reset(-1);
160 }
161
162 counts[input.Sample()] = input.Count();
163
164 AliDebug(10, Form("ADC of FMD%d%c[%2d,%3d] += %d",
165 detector, input.Ring(), input.Sector(),
166 input.Strip(), input.Count()));
167 oldDetector = detector;
168 }
169 return;
170
171}
172
173//____________________________________________________________________
174//
175// EOF
176//