]>
Commit | Line | Data |
---|---|---|
03e41177 | 1 | /**************************************************************************\r |
2 | * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *\r | |
3 | * *\r | |
4 | * Author: The ALICE Off-line Project. *\r | |
5 | * Contributors are mentioned in the code where appropriate. *\r | |
6 | * *\r | |
7 | * Permission to use, copy, modify and distribute this software and its *\r | |
8 | * documentation strictly for non-commercial purposes is hereby granted *\r | |
9 | * without fee, provided that the above copyright notice appears in all *\r | |
10 | * copies and that both the copyright notice and this permission notice *\r | |
11 | * appear in the supporting documentation. The authors make no claims *\r | |
12 | * about the suitability of this software for any purpose. It is *\r | |
13 | * provided "as is" without express or implied warranty. *\r | |
14 | **************************************************************************/\r | |
15 | \r | |
16 | ///////////////////////////////////////////////////////////////////////////////\r | |
17 | // //\r | |
18 | // Reads ACORDE DDL raw data from raw data stream //\r | |
19 | // //\r | |
20 | ///////////////////////////////////////////////////////////////////////////////\r | |
21 | \r | |
22 | #include "AliACORDERawStream.h"\r | |
23 | #include "AliRawReader.h"\r | |
24 | #include "AliLog.h"\r | |
25 | #include "AliDAQ.h"\r | |
820ad81a | 26 | #include "AliRawReaderRoot.h"\r |
03e41177 | 27 | \r |
28 | ClassImp(AliACORDERawStream)\r | |
29 | \r | |
30 | //_____________________________________________________________________________\r | |
31 | AliACORDERawStream::AliACORDERawStream(AliRawReader* rawReader) :\r | |
32 | fRawReader(rawReader),\r | |
33 | fPosition(-1),\r | |
34 | fData(NULL),\r | |
35 | fDataSize(0)\r | |
36 | {\r | |
37 | //\r | |
38 | // Create an object to read ACORDE raw data\r | |
39 | //\r | |
40 | // Created: 04 Feb 2008 Mario Sitta\r | |
41 | //\r | |
42 | \r | |
d2c6bacf | 43 | fWord[0] = fWord[1] = fWord[2] = fWord[3] = 0;\r |
44 | \r | |
03e41177 | 45 | // Select the raw data corresponding to the ACORDE detector id\r |
46 | // fRawReader->Reset();\r | |
47 | AliDebug(1,Form("Selecting raw data for detector %d",AliDAQ::DetectorID("ACORDE")));\r | |
48 | fRawReader->Select("ACORDE");\r | |
49 | \r | |
50 | }\r | |
51 | \r | |
52 | //_____________________________________________________________________________\r | |
53 | AliACORDERawStream::AliACORDERawStream(const AliACORDERawStream &r) :\r | |
54 | TObject(),\r | |
55 | fRawReader(r.fRawReader),\r | |
56 | fPosition(-1),\r | |
57 | fData(NULL),\r | |
58 | fDataSize(0)\r | |
59 | {\r | |
60 | // Simple copy constructor\r | |
61 | ((AliACORDERawStream &) r).Copy(*this);\r | |
62 | }\r | |
63 | \r | |
64 | //_____________________________________________________________________________\r | |
65 | AliACORDERawStream::~AliACORDERawStream()\r | |
66 | {\r | |
67 | // Default destructor\r | |
68 | }\r | |
69 | \r | |
70 | //_____________________________________________________________________________\r | |
71 | AliACORDERawStream &AliACORDERawStream::operator=(const AliACORDERawStream &r)\r | |
72 | {\r | |
73 | // Simple operator=\r | |
74 | if (this != &r) ((AliACORDERawStream &) r).Copy(*this);\r | |
75 | return *this;\r | |
76 | }\r | |
77 | \r | |
78 | //_____________________________________________________________________________\r | |
79 | void AliACORDERawStream::Reset()\r | |
80 | {\r | |
81 | //\r | |
82 | // Reset the raw stream parameters\r | |
83 | //\r | |
84 | // Input:\r | |
85 | //\r | |
86 | // Output:\r | |
87 | //\r | |
88 | // Created: 04 Feb 2008 Mario Sitta\r | |
89 | //\r | |
90 | \r | |
91 | fPosition = -1;\r | |
92 | fData = NULL;\r | |
93 | \r | |
94 | if (fRawReader) fRawReader->Reset();\r | |
95 | }\r | |
96 | \r | |
97 | //_____________________________________________________________________________\r | |
98 | Bool_t AliACORDERawStream::Next()\r | |
99 | {\r | |
100 | //\r | |
101 | // Read next digit from the ACORDE raw data stream;\r | |
102 | // return kFALSE in case of error or no digits left\r | |
103 | //\r | |
104 | // Input:\r | |
105 | //\r | |
106 | // Output:\r | |
107 | //\r | |
108 | // Created: 04 Feb 2008 Mario Sitta\r | |
109 | //\r | |
110 | \r | |
111 | if (fPosition >= 0) return kFALSE;\r | |
112 | \r | |
113 | if (!fRawReader->ReadNextData(fData)) return kFALSE;\r | |
114 | if (fRawReader->GetDataSize() == 0) return kFALSE;\r | |
115 | \r | |
116 | fDataSize = fRawReader->GetDataSize();\r | |
117 | if (fDataSize != 16) {\r | |
d2c6bacf | 118 | fRawReader->AddFatalErrorLog(kRawDataSizeErr,Form("size %d != 16",fDataSize));\r |
119 | AliWarning(Form("Wrong ACORDE raw data size: %d, expected 16 bytes!",fDataSize));\r | |
03e41177 | 120 | return kFALSE;\r |
121 | }\r | |
122 | \r | |
123 | fPosition = 0;\r | |
124 | \r | |
125 | for (Int_t i=0; i<4; i++)\r | |
126 | fWord[i] = GetNextWord();\r | |
127 | \r | |
128 | return kTRUE;\r | |
129 | }\r | |
130 | \r | |
131 | //_____________________________________________________________________________\r | |
132 | UInt_t AliACORDERawStream::GetWord(Int_t index) const\r | |
133 | {\r | |
134 | //\r | |
135 | // Returns the ``index'' word from ACORDE raw data.\r | |
136 | //\r | |
137 | // Input:\r | |
138 | // index : the index of the requested word\r | |
139 | // Output:\r | |
140 | // word : the 32 bit ``index'' word\r | |
141 | //\r | |
142 | // Created: 12 Feb 2008 Mario Sitta\r | |
143 | //\r | |
144 | \r | |
145 | if (index < 0 || index > 3) {\r | |
146 | AliWarning(Form("Wrong word index %d, returning 0",index));\r | |
147 | return 0;\r | |
148 | } else {\r | |
149 | return fWord[index];\r | |
150 | }\r | |
151 | \r | |
152 | }\r | |
153 | \r | |
154 | //_____________________________________________________________________________\r | |
155 | UInt_t AliACORDERawStream::GetNextWord()\r | |
156 | {\r | |
157 | //\r | |
158 | // Returns the next 32 bit word inside the raw data payload.\r | |
159 | // The method is supposed to be endian (platform) independent.\r | |
160 | //\r | |
161 | // Input:\r | |
162 | //\r | |
163 | // Output:\r | |
164 | // word : a 32 bit word containing the data\r | |
165 | //\r | |
166 | // Created: 04 Feb 2008 Mario Sitta\r | |
167 | //\r | |
168 | \r | |
169 | if (!fData || fPosition < 0)\r | |
170 | AliFatal("Raw data payload buffer is not yet initialized !");\r | |
171 | \r | |
172 | UInt_t word = 0;\r | |
173 | word |= fData[fPosition++];\r | |
174 | word |= fData[fPosition++] << 8;\r | |
175 | word |= fData[fPosition++] << 16;\r | |
176 | word |= fData[fPosition++] << 24;\r | |
177 | \r | |
178 | return word;\r | |
179 | }\r | |
180 | \r | |
820ad81a | 181 | //_____________________________________________________________________________\r |
182 | \r | |
183 | Int_t AliACORDERawStream::GetNEvents(char* fileName) \r | |
184 | {\r | |
185 | // Returns the Total Number of Events recorded by ACORDE \r | |
186 | // Note: it may be a better way to do it !!\r | |
187 | // Input: fileName to Analyze\r | |
188 | // Output: Number of Total Events (fNEvents) in fileName\r | |
189 | // Created: 25 March 2008\r | |
190 | // Author: Mario Rodriguez Cahuantzi <mrodrigu@mail.cern.ch>\r | |
191 | \r | |
192 | AliRawReader* rCount = new AliRawReaderRoot(fileName);\r | |
193 | Int_t DyM=0;\r | |
194 | Int_t fNEvents=0;\r | |
195 | while(DyM==0)\r | |
196 | {\r | |
197 | if (!rCount->NextEvent()) DyM=1;\r | |
198 | else fNEvents++;\r | |
199 | }\r | |
d2c6bacf | 200 | delete rCount;\r |
820ad81a | 201 | return fNEvents;\r |
202 | }\r | |
203 | \r | |
204 | //____________________________________________________________________________\r |