]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - ACORDE/AliACORDERawStream.cxx
Creation of TClonesArray in constructor only, instead of per-event.
[u/mrichter/AliRoot.git] / ACORDE / AliACORDERawStream.cxx
index dbee66ae53ae7dea3b4847e7a4567f0a51d9fc84..92ffc36210a6a0ffc3cfb2186da001d2308f20b7 100644 (file)
-/**************************************************************************
- * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
- *                                                                        *
- * Author: The ALICE Off-line Project.                                    *
- * Contributors are mentioned in the code where appropriate.              *
- *                                                                        *
- * Permission to use, copy, modify and distribute this software and its   *
- * documentation strictly for non-commercial purposes is hereby granted   *
- * without fee, provided that the above copyright notice appears in all   *
- * copies and that both the copyright notice and this permission notice   *
- * appear in the supporting documentation. The authors make no claims     *
- * about the suitability of this software for any purpose. It is          *
- * provided "as is" without express or implied warranty.                  *
- **************************************************************************/
-
-///////////////////////////////////////////////////////////////////////////////
-//                                                                           //
-//  Reads ACORDE DDL raw data from raw data stream                           //
-//                                                                           //
-///////////////////////////////////////////////////////////////////////////////
-
-#include "AliACORDERawStream.h"
-#include "AliRawReader.h"
-#include "AliLog.h"
-#include "AliDAQ.h"
-
-ClassImp(AliACORDERawStream)
-
-//_____________________________________________________________________________
-AliACORDERawStream::AliACORDERawStream(AliRawReader* rawReader) :
-  fRawReader(rawReader),
-  fPosition(-1),
-  fData(NULL),
-  fDataSize(0)
-{
-  //
-  // Create an object to read ACORDE raw data
-  //
-  // Created:      04 Feb 2008  Mario Sitta
-  //
-
-  // Select the raw data corresponding to the ACORDE detector id
-//  fRawReader->Reset();
-  AliDebug(1,Form("Selecting raw data for detector %d",AliDAQ::DetectorID("ACORDE")));
-  fRawReader->Select("ACORDE");
-
-}
-
-//_____________________________________________________________________________
-AliACORDERawStream::~AliACORDERawStream()
-{
-  // Default destructor
-}
-
-//_____________________________________________________________________________
-void AliACORDERawStream::Reset()
-{
-  //
-  // Reset the raw stream parameters
-  //
-  // Input:
-  //
-  // Output:
-  //
-  // Created:      04 Feb 2008  Mario Sitta
-  //
-
-  fPosition = -1;
-  fData = NULL;
-
-  if (fRawReader) fRawReader->Reset();
-}
-
-//_____________________________________________________________________________
-Bool_t AliACORDERawStream::Next()
-{
-  //
-  // Read next digit from the ACORDE raw data stream;
-  // return kFALSE in case of error or no digits left
-  //
-  // Input:
-  //
-  // Output:
-  //
-  // Created:      04 Feb 2008  Mario Sitta
-  //
-
-  if (fPosition >= 0) return kFALSE;
-
-  if (!fRawReader->ReadNextData(fData)) return kFALSE;
-  if (fRawReader->GetDataSize() == 0) return kFALSE;
-
-  fDataSize = fRawReader->GetDataSize();
-  if (fDataSize != 16) {
-    fRawReader->AddFatalErrorLog(kRawDataSizeErr,Form("size %d != 5488",fDataSize));
-    AliWarning(Form("Wrong ACORDE raw data size: %d, expected 5488 bytes!",fDataSize));
-    return kFALSE;
-  }
-
-  fPosition = 0;
-
-  for (Int_t i=0; i<4; i++)
-    fWord[i] = GetNextWord();
-
-  return kTRUE;
-}
-
-//_____________________________________________________________________________
-UInt_t AliACORDERawStream::GetWord(Int_t index) const
-{
-  //
-  // Returns the ``index'' word from ACORDE raw data.
-  //
-  // Input:
-  //         index : the index of the requested word
-  // Output:
-  //         word  : the 32 bit ``index'' word
-  //
-  // Created:      12 Feb 2008  Mario Sitta
-  //
-
-  if (index < 0 || index > 3) {
-    AliWarning(Form("Wrong word index %d, returning 0",index));
-    return 0;
-  } else {
-    return fWord[index];
-  }
-  
-}
-
-//_____________________________________________________________________________
-UInt_t AliACORDERawStream::GetNextWord()
-{
-  //
-  // Returns the next 32 bit word inside the raw data payload.
-  // The method is supposed to be endian (platform) independent.
-  //
-  // Input:
-  //
-  // Output:
-  //         word : a 32 bit word containing the data
-  //
-  // Created:      04 Feb 2008  Mario Sitta
-  //
-
-  if (!fData || fPosition < 0)
-    AliFatal("Raw data payload buffer is not yet initialized !");
-
-  UInt_t word = 0;
-  word |= fData[fPosition++];
-  word |= fData[fPosition++] << 8;
-  word |= fData[fPosition++] << 16;
-  word |= fData[fPosition++] << 24;
-
-  return word;
-}
-
-//_____________________________________________________________________________
-UShort_t AliACORDERawStream::GetNextShort()
-{
-  //
-  // Returns the next 16 bit word inside the raw data payload.
-  // The method is supposed to be endian (platform) independent.
-  //
-  // Input:
-  //
-  // Output:
-  //         word : a 16 bit word containing the data
-  //
-  // Created:      04 Feb 2008  Mario Sitta
-  //
-
-  if (!fData || fPosition < 0) AliFatal("Raw data payload buffer is not yet initialized !");
-
-  UShort_t word = 0;
-  word |= fData[fPosition++];
-  word |= fData[fPosition++] << 8;
-
-  return word;
-}
-
+/**************************************************************************\r
+ * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *\r
+ *                                                                        *\r
+ * Author: The ALICE Off-line Project.                                    *\r
+ * Contributors are mentioned in the code where appropriate.              *\r
+ *                                                                        *\r
+ * Permission to use, copy, modify and distribute this software and its   *\r
+ * documentation strictly for non-commercial purposes is hereby granted   *\r
+ * without fee, provided that the above copyright notice appears in all   *\r
+ * copies and that both the copyright notice and this permission notice   *\r
+ * appear in the supporting documentation. The authors make no claims     *\r
+ * about the suitability of this software for any purpose. It is          *\r
+ * provided "as is" without express or implied warranty.                  *\r
+ **************************************************************************/\r
+\r
+///////////////////////////////////////////////////////////////////////////////\r
+//                                                                           //\r
+//  Reads ACORDE DDL raw data from raw data stream                           //\r
+//                                                                           //\r
+///////////////////////////////////////////////////////////////////////////////\r
+\r
+#include "AliACORDERawStream.h"\r
+#include "AliRawReader.h"\r
+#include "AliLog.h"\r
+#include "AliDAQ.h"\r
+#include "AliRawReaderRoot.h"\r
+\r
+ClassImp(AliACORDERawStream)\r
+\r
+//_____________________________________________________________________________\r
+AliACORDERawStream::AliACORDERawStream(AliRawReader* rawReader) :\r
+  fRawReader(rawReader),\r
+  fPosition(-1),\r
+  fData(NULL),\r
+  fDataSize(0)\r
+{\r
+  //\r
+  // Create an object to read ACORDE raw data\r
+  //\r
+  // Created:      04 Feb 2008  Mario Sitta\r
+  //\r
+\r
+  fWord[0] = fWord[1] = fWord[2] = fWord[3] = 0;\r
+\r
+  // Select the raw data corresponding to the ACORDE detector id\r
+//  fRawReader->Reset();\r
+  AliDebug(1,Form("Selecting raw data for detector %d",AliDAQ::DetectorID("ACORDE")));\r
+  fRawReader->Select("ACORDE");\r
+\r
+}\r
+\r
+//_____________________________________________________________________________\r
+AliACORDERawStream::AliACORDERawStream(const AliACORDERawStream &r) :\r
+  TObject(),\r
+  fRawReader(r.fRawReader),\r
+  fPosition(-1),\r
+  fData(NULL),\r
+  fDataSize(0)\r
+{\r
+  // Simple copy constructor\r
+  ((AliACORDERawStream &) r).Copy(*this);\r
+}\r
+\r
+//_____________________________________________________________________________\r
+AliACORDERawStream::~AliACORDERawStream()\r
+{\r
+  // Default destructor\r
+}\r
+\r
+//_____________________________________________________________________________\r
+AliACORDERawStream &AliACORDERawStream::operator=(const AliACORDERawStream &r)\r
+{\r
+  // Simple operator=\r
+  if (this != &r)  ((AliACORDERawStream &) r).Copy(*this);\r
+  return *this;\r
+}\r
+\r
+//_____________________________________________________________________________\r
+void AliACORDERawStream::Reset()\r
+{\r
+  //\r
+  // Reset the raw stream parameters\r
+  //\r
+  // Input:\r
+  //\r
+  // Output:\r
+  //\r
+  // Created:      04 Feb 2008  Mario Sitta\r
+  //\r
+\r
+  fPosition = -1;\r
+  fData = NULL;\r
+\r
+  if (fRawReader) fRawReader->Reset();\r
+}\r
+\r
+//_____________________________________________________________________________\r
+Bool_t AliACORDERawStream::Next()\r
+{\r
+  //\r
+  // Read next digit from the ACORDE raw data stream;\r
+  // return kFALSE in case of error or no digits left\r
+  //\r
+  // Input:\r
+  //\r
+  // Output:\r
+  //\r
+  // Created:      04 Feb 2008  Mario Sitta\r
+  //\r
+\r
+  if (fPosition >= 0) return kFALSE;\r
+\r
+  if (!fRawReader->ReadNextData(fData)) return kFALSE;\r
+  if (fRawReader->GetDataSize() == 0) return kFALSE;\r
+\r
+  fDataSize = fRawReader->GetDataSize();\r
+  if (fDataSize != 16) {\r
+    fRawReader->AddFatalErrorLog(kRawDataSizeErr,Form("size %d != 16",fDataSize));\r
+    AliWarning(Form("Wrong ACORDE raw data size: %d, expected 16 bytes!",fDataSize));\r
+    return kFALSE;\r
+  }\r
+\r
+  fPosition = 0;\r
+\r
+  for (Int_t i=0; i<4; i++)\r
+    fWord[i] = GetNextWord();\r
+\r
+  return kTRUE;\r
+}\r
+\r
+//_____________________________________________________________________________\r
+UInt_t AliACORDERawStream::GetWord(Int_t index) const\r
+{\r
+  //\r
+  // Returns the ``index'' word from ACORDE raw data.\r
+  //\r
+  // Input:\r
+  //         index : the index of the requested word\r
+  // Output:\r
+  //         word  : the 32 bit ``index'' word\r
+  //\r
+  // Created:      12 Feb 2008  Mario Sitta\r
+  //\r
+\r
+  if (index < 0 || index > 3) {\r
+    AliWarning(Form("Wrong word index %d, returning 0",index));\r
+    return 0;\r
+  } else {\r
+    return fWord[index];\r
+  }\r
+  \r
+}\r
+\r
+//_____________________________________________________________________________\r
+UInt_t AliACORDERawStream::GetNextWord()\r
+{\r
+  //\r
+  // Returns the next 32 bit word inside the raw data payload.\r
+  // The method is supposed to be endian (platform) independent.\r
+  //\r
+  // Input:\r
+  //\r
+  // Output:\r
+  //         word : a 32 bit word containing the data\r
+  //\r
+  // Created:      04 Feb 2008  Mario Sitta\r
+  //\r
+\r
+  if (!fData || fPosition < 0)\r
+    AliFatal("Raw data payload buffer is not yet initialized !");\r
+\r
+  UInt_t word = 0;\r
+  word |= fData[fPosition++];\r
+  word |= fData[fPosition++] << 8;\r
+  word |= fData[fPosition++] << 16;\r
+  word |= fData[fPosition++] << 24;\r
+\r
+  return word;\r
+}\r
+\r
+//_____________________________________________________________________________\r
+\r
+Int_t AliACORDERawStream::GetNEvents(char* fileName) \r
+{\r
+       // Returns the Total Number of Events recorded by ACORDE \r
+       // Note: it may be a better way to do it !!\r
+       // Input: fileName to Analyze\r
+       // Output: Number of Total Events (fNEvents) in fileName\r
+       // Created: 25 March 2008\r
+       // Author: Mario Rodriguez Cahuantzi <mrodrigu@mail.cern.ch>\r
+       \r
+       AliRawReader* rCount = new AliRawReaderRoot(fileName);\r
+       Int_t DyM=0;\r
+       Int_t fNEvents=0;\r
+       while(DyM==0)\r
+       {\r
+       if (!rCount->NextEvent()) DyM=1;\r
+       else fNEvents++;\r
+       }\r
+       delete rCount;\r
+       return fNEvents;\r
+}\r
+\r
+//____________________________________________________________________________\r