1 /**************************************************************************
\r
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
\r
4 * Author: The ALICE Off-line Project. *
\r
5 * Contributors are mentioned in the code where appropriate. *
\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
16 ///////////////////////////////////////////////////////////////////////////////
\r
18 // Reads ACORDE DDL raw data from raw data stream //
\r
20 ///////////////////////////////////////////////////////////////////////////////
\r
22 #include "AliACORDERawStream.h"
\r
23 #include "AliRawReader.h"
\r
26 #include "AliRawReaderRoot.h"
\r
28 ClassImp(AliACORDERawStream)
\r
30 //_____________________________________________________________________________
\r
31 AliACORDERawStream::AliACORDERawStream(AliRawReader* rawReader) :
\r
32 fRawReader(rawReader),
\r
38 // Create an object to read ACORDE raw data
\r
40 // Created: 04 Feb 2008 Mario Sitta
\r
43 fWord[0] = fWord[1] = fWord[2] = fWord[3] = 0;
\r
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
52 //_____________________________________________________________________________
\r
53 AliACORDERawStream::AliACORDERawStream(const AliACORDERawStream &r) :
\r
55 fRawReader(r.fRawReader),
\r
60 // Simple copy constructor
\r
61 ((AliACORDERawStream &) r).Copy(*this);
\r
64 //_____________________________________________________________________________
\r
65 AliACORDERawStream::~AliACORDERawStream()
\r
67 // Default destructor
\r
70 //_____________________________________________________________________________
\r
71 AliACORDERawStream &AliACORDERawStream::operator=(const AliACORDERawStream &r)
\r
74 if (this != &r) ((AliACORDERawStream &) r).Copy(*this);
\r
78 //_____________________________________________________________________________
\r
79 void AliACORDERawStream::Reset()
\r
82 // Reset the raw stream parameters
\r
88 // Created: 04 Feb 2008 Mario Sitta
\r
94 if (fRawReader) fRawReader->Reset();
\r
97 //_____________________________________________________________________________
\r
98 Bool_t AliACORDERawStream::Next()
\r
101 // Read next digit from the ACORDE raw data stream;
\r
102 // return kFALSE in case of error or no digits left
\r
108 // Created: 04 Feb 2008 Mario Sitta
\r
111 if (fPosition >= 0) return kFALSE;
\r
113 if (!fRawReader->ReadNextData(fData)) return kFALSE;
\r
114 if (fRawReader->GetDataSize() == 0) return kFALSE;
\r
116 fDataSize = fRawReader->GetDataSize();
\r
117 if (fDataSize != 16) {
\r
118 fRawReader->AddFatalErrorLog(kRawDataSizeErr,Form("size %d != 16",fDataSize));
\r
119 AliWarning(Form("Wrong ACORDE raw data size: %d, expected 16 bytes!",fDataSize));
\r
125 for (Int_t i=0; i<4; i++)
\r
126 fWord[i] = GetNextWord();
\r
131 //_____________________________________________________________________________
\r
132 UInt_t AliACORDERawStream::GetWord(Int_t index) const
\r
135 // Returns the ``index'' word from ACORDE raw data.
\r
138 // index : the index of the requested word
\r
140 // word : the 32 bit ``index'' word
\r
142 // Created: 12 Feb 2008 Mario Sitta
\r
145 if (index < 0 || index > 3) {
\r
146 AliWarning(Form("Wrong word index %d, returning 0",index));
\r
149 return fWord[index];
\r
154 //_____________________________________________________________________________
\r
155 UInt_t AliACORDERawStream::GetNextWord()
\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
164 // word : a 32 bit word containing the data
\r
166 // Created: 04 Feb 2008 Mario Sitta
\r
169 if (!fData || fPosition < 0)
\r
170 AliFatal("Raw data payload buffer is not yet initialized !");
\r
173 word |= fData[fPosition++];
\r
174 word |= fData[fPosition++] << 8;
\r
175 word |= fData[fPosition++] << 16;
\r
176 word |= fData[fPosition++] << 24;
\r
181 //_____________________________________________________________________________
\r
183 Int_t AliACORDERawStream::GetNEvents(char* fileName)
\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
192 AliRawReader* rCount = new AliRawReaderRoot(fileName);
\r
197 if (!rCount->NextEvent()) DyM=1;
\r
204 //____________________________________________________________________________
\r