--- /dev/null
+//_____________________________________________________//
+// //
+// This macro reads ACORDE DDL Raw Data and //
+// converts it into Digits //
+// //
+//____________________________________________________ //
+
+
+void ACORDERaw2Digits(Int_t nEvents = 1, char* fileName = "alien:///alice/data/2008/LHC08a_ACORDE/000016788/raw/08000016788014.20.root")
+{
+ // Reads DDL data from fileName
+
+ TStopwatch timer;
+ timer.Start();
+
+ TGrid::Connect("alien://");
+
+ AliRawReader* rawReader = 0x0;
+// rawReader = new AliRawReaderFile(fileName); // DDL files
+ rawReader = new AliRawReaderRoot(fileName); // DDL files
+
+ AliACORDERawStream* rawStream = new AliACORDERawStream(rawReader);
+
+ for (Int_t i=0; i<nEvents; i++) {
+ printf("=========== EVENT %d ===========\n",i);
+ if (!rawReader->NextEvent())
+ break;
+
+ rawStream->Reset();
+ if (!rawStream->Next())
+ break;
+ printf("Data size is %d\n",rawStream->DataSize());
+ for (Int_t j=0; j<4; j++)
+ printf(" %x",rawStream->GetWord(j));
+ printf("\n");
+ }
+
+ delete rawReader;
+ delete rawStream;
+
+ timer.Stop();
+ timer.Print();
+}
--- /dev/null
+//_____________________________________________________//
+// //
+// This macro reads ACORDE DDL Raw Data and //
+// converts it into Digits //
+// //
+//____________________________________________________ //
+
+
+void ACORDERaw2Digits(Int_t nEvents = 1, char* fileName = "rawdata.root")
+{
+ // Reads DDL data from fileName
+
+ TStopwatch timer;
+ timer.Start();
+
+// Creates a TreeD to dump Digits
+
+ AliRunLoader* rl = AliRunLoader::Open("galice.root");
+
+ AliACORDELoader* loader = (AliACORDELoader*) rl->GetLoader("ACORDELoader");
+
+ if(!loader) {
+ AliError("no ACORDE loader found");
+ return kFALSE; }
+
+ TTree* treeD = loader->TreeD();
+ if(!treeD) {
+ loader->MakeTree("D");
+ treeD = loader->TreeD(); }
+
+ AliACORDEdigit digit;
+ AliACORDEdigit* pdigit = &digit;
+ const Int_t kBufferSize = 4000;
+
+ treeD->Branch("ACORDE", "AliACORDEdigit", &pdigit, kBufferSize);
+
+ AliRawReader* rawReader = 0x0;
+// rawReader = new AliRawReaderFile(fileName); // DDL files
+ rawReader = new AliRawReaderRoot(fileName); // DDL files
+
+ AliACORDERawStream* rawStream = new AliACORDERawStream(rawReader);
+
+ for (Int_t i=0; i<nEvents; i++) {
+ printf("=========== EVENT %d ===========\n",i);
+ if (!rawReader->NextEvent())
+ break;
+
+ rawStream->Reset();
+ if (!rawStream->Next())
+ break;
+ printf("Data size is %d\n",rawStream->DataSize());
+ /*
+ for(Int_t i=0; i<64; i++) {
+ new(pdigit) AliACORDEdigit(i, (Int_t)rawStream->GetADC(i), (Int_t)rawStream->GetTime(i));
+ treeD->Fill();
+ }
+ */
+// Checks if everything is OK by printing results
+
+// for(int i=0;i<64;i++) {
+// printf("Channel %d : %d %d \n",i,rawStream->GetADC(i),rawStream->GetTime(i)); }
+// treeD->Print(); printf(" \n");
+ }
+
+ loader->WriteDigits("OVERWRITE");
+ loader->UnloadDigits();
+
+ delete rawReader;
+ delete rawStream;
+
+ timer.Stop();
+ timer.Print();
+}
--- /dev/null
+/**************************************************************************
+ * 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;
+}
+
--- /dev/null
+#ifndef ALIACORDERAWSTREAM_H
+#define ALIACORDERAWSTREAM_H
+/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+ * See cxx source for full Copyright notice */
+
+/* $Id: AliACORDERawStream.h 20210 2007-08-18 08:41:30Z hristov $ */
+
+///////////////////////////////////////////////////////////////////////////////
+// //
+// Reads ACORDE DDL raw data from raw data stream //
+// //
+///////////////////////////////////////////////////////////////////////////////
+
+#include "TObject.h"
+
+class AliRawReader;
+
+class AliACORDERawStream : public TObject {
+
+ public:
+
+ AliACORDERawStream(AliRawReader*);
+ virtual ~AliACORDERawStream();
+// AliACORDERawStream &operator=(const AliACORDERawStream &r);
+
+ virtual void Reset();
+ virtual Bool_t Next();
+
+ Int_t DataSize() const { return fDataSize; }
+ UInt_t GetWord(Int_t index) const;
+
+ enum EACORDERawStreamError {
+ kRawDataSizeErr = 1
+ };
+
+ private:
+
+ UInt_t GetNextWord();
+ UShort_t GetNextShort();
+
+
+ AliRawReader* fRawReader; // object for reading the raw data
+ Int_t fPosition; // current position in the raw-data payload
+ UChar_t* fData; // pointer to raw data payload
+
+ Int_t fDataSize; // data size
+
+ UInt_t fWord[4]; // data vector
+
+ ClassDef(AliACORDERawStream,0) // class for reading ACORDE DDL raw data
+
+};
+
+typedef AliACORDERawStream AliCRTRawStream; // for backward compatibility
+
+#endif