///
/// \author Ch. Finck, Subatech, April 2006
///
+/// Added example routines to show how to use the interface of the high
+/// performance decoder AliMUONRawStreamTriggerrHP.
+/// -- Artur Szostak <artursz@iafrica.com>
+///
/// Implement "digits" iterator.
/// This macro is interface with AliRawReader for RAW.
/// The different stucture of the patload are readout and stored in TClonesArray
#if !defined(__CINT__) || defined(__MAKECINT__)
// RAW includes
-#include "AliRawReaderDate.h"
+#include "AliRawReader.h"
#include "AliRawReaderFile.h"
#include "AliRawReaderRoot.h"
// MUON includes
#include "AliMUONRawStreamTrigger.h"
+#include "AliMUONRawStreamTriggerHP.h"
#include "AliMUONDarcHeader.h"
#include "AliMUONRegHeader.h"
#include "AliMUONLocalStruct.h"
TStopwatch timer;
timer.Start(kTRUE);
- AliRawReader* rawReader = 0x0;
+ AliRawReader* rawReader = AliRawReader::Create(fileName.Data());
- if (fileName.EndsWith("/")) {
- rawReader = new AliRawReaderFile(fileName);// DDL files
- } else if (fileName.EndsWith(".root")) {
- rawReader = new AliRawReaderRoot(fileName);
- }
-
-
// Load mapping
if ( ! AliMpCDB::LoadDDLStore() ) {
printf("Could not access mapping from OCDB !\n");
}
+void MUONRawStreamTriggerHPExpert(Int_t maxEvent = 1, Int_t minDDL = 0, Int_t maxDDL = 1, TString fileName = "./")
+{
+ /// Decodes raw MUON trigger data using the fast decoder.
+
+ TStopwatch timer;
+ timer.Start(kTRUE);
+
+ AliRawReader* rawReader = AliRawReader::Create(fileName.Data());
+
+ // Load mapping
+ if ( ! AliMpCDB::LoadDDLStore() ) {
+ printf("Could not access mapping from OCDB !\n");
+ }
+
+ // raw stream
+ AliMUONRawStreamTriggerHP* rawStream = new AliMUONRawStreamTriggerHP(rawReader);
+
+ // Light weight interfaces to the raw data.
+ const AliMUONRawStreamTriggerHP::AliHeader* darcHeader = 0x0;
+ const AliMUONRawStreamTriggerHP::AliRegionalHeader* regHeader = 0x0;
+ const AliMUONRawStreamTriggerHP::AliLocalStruct* localStruct = 0x0;
+
+ // Loop over events.
+ Int_t iEvent = 0;
+
+ while (rawReader->NextEvent()) {
+
+ if (iEvent == maxEvent)
+ break;
+
+ printf("Event %d\n",iEvent++);
+
+ // read DDL while < 2 DDL
+ while(rawStream->NextDDL()) {
+
+ if (rawStream->GetDDL() < minDDL || rawStream->GetDDL() > maxDDL)
+ continue;
+
+ printf("\niDDL %d\n", rawStream->GetDDL());
+
+ darcHeader = rawStream->GetHeaders();
+
+ printf("Global output %x\n", (Int_t)darcHeader->GetGlobalOutput());
+
+ // loop over regional structures
+ Int_t nReg = (Int_t) rawStream->GetRegionalHeaderCount();
+ for(Int_t iReg = 0; iReg < nReg ;iReg++){ //REG loop
+
+// printf("RegionalId %d\n", iReg);
+
+ regHeader = rawStream->GetRegionalHeader(iReg);
+
+ // crate info
+ AliMpTriggerCrate* crate = AliMpDDLStore::Instance()->
+ GetTriggerCrate(rawStream->GetDDL(), iReg);
+
+ // loop over local structures
+ Int_t nLocal = rawStream->GetLocalStructCount(iReg);
+ for(Int_t iLocal = 0; iLocal < nLocal; iLocal++) {
+
+ localStruct = rawStream->GetLocalStruct(iReg, iLocal);
+
+ Int_t iLocCard = crate->GetLocalBoardId(localStruct->GetId());
+
+ if ( !iLocCard ) continue; // empty slot
+
+ // check if trigger
+ if (localStruct->GetTriggerX()
+ || localStruct->GetTriggerY()) { // no empty data
+
+ printf("LocalId %d\n", localStruct->GetId());
+
+ Int_t loStripX = (Int_t)localStruct->GetXPos();
+ Int_t loStripY = (Int_t)localStruct->GetYPos();
+ Int_t loDev = (Int_t)localStruct->GetXDev();
+
+ printf("iLocCard: %d, XPos: %d, YPos: %d Dev: %d\n", iLocCard, loStripX, loStripY, loDev);
+
+ }
+ } // iLocal
+ } // iReg
+ } // NextDDL
+ }// NextEvent
+
+ delete rawReader;
+ delete rawStream;
+
+ timer.Print();
+
+}
+
+
+void MUONRawStreamTriggerHPExpert2(Int_t maxEvent = 1, Int_t minDDL = 0, Int_t maxDDL = 1, TString fileName = "./")
+{
+ /// Decodes raw MUON trigger data using the fast decoder.
+ /// This method shows a slightly different method of iteration over the
+ /// data using the AliMUONRawStreamTriggerHP interface.
+
+ TStopwatch timer;
+ timer.Start(kTRUE);
+
+ AliRawReader* rawReader = AliRawReader::Create(fileName.Data());
+
+ // Load mapping
+ if ( ! AliMpCDB::LoadDDLStore() ) {
+ printf("Could not access mapping from OCDB !\n");
+ }
+
+ // raw stream
+ AliMUONRawStreamTriggerHP* rawStream = new AliMUONRawStreamTriggerHP(rawReader);
+
+ // Light weight interfaces to the raw data.
+ const AliMUONRawStreamTriggerHP::AliHeader* darcHeader = 0x0;
+ const AliMUONRawStreamTriggerHP::AliRegionalHeader* regHeader = 0x0;
+ const AliMUONRawStreamTriggerHP::AliLocalStruct* localStruct = 0x0;
+
+ // Loop over events.
+ Int_t iEvent = 0;
+
+ while (rawReader->NextEvent()) {
+
+ if (iEvent == maxEvent)
+ break;
+
+ printf("Event %d\n",iEvent++);
+
+ // read DDL while < 2 DDL
+ while(rawStream->NextDDL()) {
+
+ if (rawStream->GetDDL() < minDDL || rawStream->GetDDL() > maxDDL)
+ continue;
+
+ printf("\niDDL %d\n", rawStream->GetDDL());
+
+ darcHeader = rawStream->GetHeaders();
+
+ printf("Global output %x\n", (Int_t)darcHeader->GetGlobalOutput());
+
+ // loop over regional structures
+ Int_t nReg = (Int_t) rawStream->GetRegionalHeaderCount();
+ for(Int_t iReg = 0; iReg < nReg ;iReg++){ //REG loop
+
+// printf("RegionalId %d\n", iReg);
+
+ regHeader = rawStream->GetRegionalHeader(iReg);
+
+ // crate info
+ AliMpTriggerCrate* crate = AliMpDDLStore::Instance()->
+ GetTriggerCrate(rawStream->GetDDL(), iReg);
+
+ // loop over local structures
+ Int_t nLocal = regHeader->GetLocalStructCount();
+ for(Int_t iLocal = 0; iLocal < nLocal; iLocal++) {
+
+ localStruct = regHeader->GetLocalStruct(iLocal);
+
+ Int_t iLocCard = crate->GetLocalBoardId(localStruct->GetId());
+
+ if ( !iLocCard ) continue; // empty slot
+
+ // check if trigger
+ if (localStruct->GetTriggerX()
+ || localStruct->GetTriggerY()) { // no empty data
+
+ printf("LocalId %d\n", localStruct->GetId());
+
+ Int_t loStripX = (Int_t)localStruct->GetXPos();
+ Int_t loStripY = (Int_t)localStruct->GetYPos();
+ Int_t loDev = (Int_t)localStruct->GetXDev();
+
+ printf("iLocCard: %d, XPos: %d, YPos: %d Dev: %d\n", iLocCard, loStripX, loStripY, loDev);
+
+ }
+ } // iLocal
+ } // iReg
+ } // NextDDL
+ }// NextEvent
+
+ delete rawReader;
+ delete rawStream;
+
+ timer.Print();
+
+}
+
+
+void MUONRawStreamTriggerHPExpert3(Int_t maxEvent = 1, Int_t minDDL = 0, Int_t maxDDL = 1, TString fileName = "./")
+{
+ /// Decodes raw MUON trigger data using the fast decoder.
+ /// This method shows a jet another method of iteration over the
+ /// data using the AliMUONRawStreamTriggerHP interface.
+
+ TStopwatch timer;
+ timer.Start(kTRUE);
+
+ AliRawReader* rawReader = AliRawReader::Create(fileName.Data());
+
+ // Load mapping
+ if ( ! AliMpCDB::LoadDDLStore() ) {
+ printf("Could not access mapping from OCDB !\n");
+ }
+
+ // raw stream
+ AliMUONRawStreamTriggerHP* rawStream = new AliMUONRawStreamTriggerHP(rawReader);
+
+ // Light weight interfaces to the raw data.
+ const AliMUONRawStreamTriggerHP::AliHeader* darcHeader = 0x0;
+ const AliMUONRawStreamTriggerHP::AliRegionalHeader* regHeader = 0x0;
+ const AliMUONRawStreamTriggerHP::AliLocalStruct* localStruct = 0x0;
+
+ // Loop over events.
+ Int_t iEvent = 0;
+
+ while (rawReader->NextEvent()) {
+
+ if (iEvent == maxEvent)
+ break;
+
+ printf("Event %d\n",iEvent++);
+
+ // read DDL while < 2 DDL
+ while(rawStream->NextDDL()) {
+
+ if (rawStream->GetDDL() < minDDL || rawStream->GetDDL() > maxDDL)
+ continue;
+
+ printf("\niDDL %d\n", rawStream->GetDDL());
+
+ darcHeader = rawStream->GetHeaders();
+
+ printf("Global output %x\n", (Int_t)darcHeader->GetGlobalOutput());
+
+ // loop over regional structures
+ Int_t iReg = 0;
+ regHeader = rawStream->GetFirstRegionalHeader();
+ while (regHeader != NULL)
+ {
+// printf("RegionalId %d\n", iReg);
+
+ regHeader = rawStream->GetRegionalHeader(iReg);
+
+ // crate info
+ AliMpTriggerCrate* crate = AliMpDDLStore::Instance()->
+ GetTriggerCrate(rawStream->GetDDL(), iReg);
+
+ // loop over local structures
+ Int_t iLocal = 0;
+ localStruct = regHeader->GetFirstLocalStruct();
+ while (localStruct != NULL)
+ {
+ Int_t iLocCard = crate->GetLocalBoardId(localStruct->GetId());
+ if ( !iLocCard ) continue; // empty slot
+
+ // check if trigger
+ if (localStruct->GetTriggerX()
+ || localStruct->GetTriggerY()) { // no empty data
+
+ printf("LocalId %d\n", localStruct->GetId());
+
+ Int_t loStripX = (Int_t)localStruct->GetXPos();
+ Int_t loStripY = (Int_t)localStruct->GetYPos();
+ Int_t loDev = (Int_t)localStruct->GetXDev();
+
+ printf("iLocCard: %d, XPos: %d, YPos: %d Dev: %d\n", iLocCard, loStripX, loStripY, loDev);
+
+ }
+ iLocal++;
+ localStruct = localStruct->Next();
+ } // iLocal
+ iReg++;
+ regHeader = regHeader->Next();
+ } // iReg
+ } // NextDDL
+ }// NextEvent
+
+ delete rawReader;
+ delete rawStream;
+
+ timer.Print();
+
+}
+
+
void MUONRawStreamTriggerSimple(Int_t maxEvent = 1, TString fileName = "./")
{
/// Reads the raw data in fileName, using a simplified interface (iterator
timer.Print();
}
+
+
+void MUONRawStreamTriggerHPSimple(Int_t maxEvent = 1, TString fileName = "./")
+{
+ /// Reads the raw data in fileName, using the simplified interface of the
+ /// high performance decoder.
+
+ TStopwatch timer;
+ timer.Start(kTRUE);
+
+ AliRawReader* rawReader = AliRawReader::Create(fileName.Data());
+ AliMUONRawStreamTriggerHP* rawStream = new AliMUONRawStreamTriggerHP(rawReader);
+
+ UChar_t id;
+ UChar_t dec;
+ Bool_t trigY;
+ UChar_t yPos;
+ UChar_t sXDev;
+ UChar_t xDev;
+ UChar_t xPos;
+ Bool_t triggerX;
+ Bool_t triggerY;
+ TArrayS xPattern;
+ TArrayS yPattern;
+
+ // Loop over events
+ Int_t iEvent = 0;
+
+ while (rawReader->NextEvent())
+ {
+
+ if (iEvent == maxEvent)
+ break;
+
+ printf("Event %d\n", iEvent++);
+
+ rawStream->First();
+
+ // read while there are digits
+ while ( rawStream->Next(id, dec, trigY, yPos, sXDev, xDev, xPos,
+ triggerX, triggerY, xPattern, yPattern) )
+ {
+ if ( triggerX || triggerY ) // no empty data
+ printf("iLocCard: %d, XPos: %d, YPos: %d Dev: %d\n", id, xPos, yPos, xDev);
+ }// Next
+ }// NextEvent
+
+ delete rawReader;
+ delete rawStream;
+
+ timer.Print();
+}
+
+
+void MUONRawStreamTriggerHPSimple2(Int_t maxEvent = 1, TString fileName = "./")
+{
+ /// Reads the raw data in fileName, using the simplified interface of the
+ /// high performance decoder.
+
+ TStopwatch timer;
+ timer.Start(kTRUE);
+
+ AliRawReader* rawReader = AliRawReader::Create(fileName.Data());
+ AliMUONRawStreamTriggerHP* rawStream = new AliMUONRawStreamTriggerHP(rawReader);
+
+ const AliMUONRawStreamTriggerHP::AliLocalStruct* localStruct;
+
+ // Loop over events
+ Int_t iEvent = 0;
+
+ while (rawReader->NextEvent())
+ {
+
+ if (iEvent == maxEvent)
+ break;
+
+ printf("Event %d\n", iEvent++);
+
+ rawStream->First();
+
+ // read while there are digits
+ while ( (localStruct = rawStream->Next()) != NULL )
+ {
+ if ( localStruct->GetTriggerX() || localStruct->GetTriggerY() ) // no empty data
+ printf("iLocCard: %d, XPos: %d, YPos: %d Dev: %d\n",
+ localStruct->GetId(),
+ localStruct->GetXPos(),
+ localStruct->GetYPos(),
+ localStruct->GetXDev()
+ );
+ }// Next
+ }// NextEvent
+
+ delete rawReader;
+ delete rawStream;
+
+ timer.Print();
+}
+