+++ /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. *
- **************************************************************************/
-
-////////////////////////////////////
-//
-// MUON Raw Data reader in ALICE-MUON
-// Class version 3 (further details could be found in Alice-note)
-//
-// Implemented non-constant buspatch numbers for tracking
-// with correct DDL id (first guess)
-// (Ch. Finck, dec 2005)
-//
-//
-// Raw2Digits:
-// Using real mapping for tracker
-// Indranil Das (Adapted for runloader: Ch. Finck) july 05
-// Add reader for scaler trigger events
-// Use memcpy instead of assignment elt by elt
-// (Ch. Finck, Jan 06)
-//
-////////////////////////////////////
-
-#include <fstream>
-#include <string>
-
-#include <TClonesArray.h>
-
-#include "AliBitPacking.h"
-#include "AliRawReader.h"
-#include "AliLog.h"
-#include "AliRun.h"
-
-#include "AliMpBusPatch.h"
-
-#include "AliMUON.h"
-#include "AliMUONRawReader.h"
-#include "AliMUONDigit.h"
-
-#include "AliMUONConstants.h"
-#include "AliMUONData.h"
-
-#include "AliMUONSubEventTracker.h"
-#include "AliMUONScalerEventTrigger.h"
-#include "AliMUONSubEventTrigger.h"
-#include "AliMUONDDLTracker.h"
-#include "AliMUONDDLTrigger.h"
-
-#include "AliMUONLocalTrigger.h"
-#include "AliMUONGlobalTrigger.h"
-
-#include "AliMUONGeometrySegmentation.h"
-#include "AliMUONGeometryModule.h"
-#include "AliMUONGeometryStore.h"
-#include "AliMpSegFactory.h"
-#include "AliMpPlaneType.h"
-#include "AliMpVSegmentation.h"
-#include "AliMpHelper.h"
-#include "AliMpPad.h"
-#include "AliMpDEManager.h"
-
-ClassImp(AliMUONRawReader) // Class implementation in ROOT context
-//__________________________________________________________________________
-AliMUONRawReader::AliMUONRawReader(AliMUONData* data)
-: TObject(),
- fScalerEvent(kFALSE)
-{
-// Standard Constructor
-
- AliDebug(1,"");
-
- // initialize segmentation factory
- fSegFactory = new AliMpSegFactory();
-
- // initialize container
- fMUONData = data;
-
- // ddl pointer
- fDDLTracker = new AliMUONDDLTracker();
- fDDLTrigger = new AliMUONDDLTrigger();
-
- fBusPatchManager = new AliMpBusPatch();
- fBusPatchManager->ReadBusPatchFile();
-
- fTrackerTimer.Start(kTRUE); fTrackerTimer.Stop();
- fTriggerTimer.Start(kTRUE); fTriggerTimer.Stop();
- fMappingTimer.Start(kTRUE); fMappingTimer.Stop();
-}
-
-//__________________________________________________________________________
-AliMUONRawReader::AliMUONRawReader()
- : TObject(),
- fMUONData(0),
- fSegFactory(0),
- fDDLTracker(0),
- fDDLTrigger(0),
- fBusPatchManager(0),
- fScalerEvent(kFALSE)
-{
- // Default Constructor
- AliDebug(1,"");
- fTrackerTimer.Start(kTRUE); fTrackerTimer.Stop();
- fTriggerTimer.Start(kTRUE); fTriggerTimer.Stop();
- fMappingTimer.Start(kTRUE); fMappingTimer.Stop();
-}
-
-//_______________________________________________________________________
-AliMUONRawReader::AliMUONRawReader (const AliMUONRawReader& rhs)
- : TObject(rhs)
-{
-// Protected copy constructor
-
- AliFatal("Not implemented.");
-}
-
-//_______________________________________________________________________
-AliMUONRawReader &
-AliMUONRawReader::operator=(const AliMUONRawReader& rhs)
-{
-// Protected assignement operator
-
- if (this == &rhs) return *this;
-
- AliFatal("Not implemented.");
-
- return *this;
-}
-
-//__________________________________________________________________________
-AliMUONRawReader::~AliMUONRawReader()
-{
-// Destructor
-
- delete fSegFactory;
-
- delete fDDLTracker;
- delete fDDLTrigger;
-
- delete fBusPatchManager;
-
- AliInfo(Form("Execution time for MUON tracker : R:%.2fs C:%.2fs",
- fTrackerTimer.RealTime(),fTrackerTimer.CpuTime()));
- AliInfo(Form(" Execution time for MUON tracker (mapping calls part) "
- ": R:%.2fs C:%.2fs",
- fMappingTimer.RealTime(),fMappingTimer.CpuTime()));
- AliInfo(Form("Execution time for MUON trigger : R:%.2fs C:%.2fs",
- fTriggerTimer.RealTime(),fTriggerTimer.CpuTime()));
-
-}
-
-//____________________________________________________________________
-Int_t AliMUONRawReader::Raw2Digits(AliRawReader* rawReader)
-{
-
- // generate digits
- ReadTrackerDDL(rawReader);
-
- // generate trigger
- ReadTriggerDDL(rawReader);
-
- return kTRUE;
-
-}
-
-//____________________________________________________________________
-Int_t AliMUONRawReader::ReadTrackerDDL(AliRawReader* rawReader)
-{
- // reading tracker DDL
- // filling the TClonesArray in MUONData
- //
- fTrackerTimer.Start(kFALSE);
-
- AliMUONSubEventTracker* subEventTracker = new AliMUONSubEventTracker();
- AliMUONDigit* digit = new AliMUONDigit();
-
-
- //Read Header Size of DDL,Block,DSP and BusPatch (put k before constant imb'cile)
-
- Int_t kDDLHeaderSize = fDDLTracker->GetHeaderSize();
- Int_t kBlockHeaderSize = fDDLTracker->GetBlkHeaderLength();
- Int_t kDspHeaderSize = fDDLTracker->GetDspHeaderLength();
- Int_t kBusPatchHeaderSize = subEventTracker->GetHeaderLength();
-
- Int_t totalDDLSize, totalBlockSize, totalDspSize , totalBusPatchSize, dataSize;
-
-
- Int_t iBusPerDSP[5];//number of bus patches per DSP
- Int_t iDspMax; //number max of DSP per block
-
- // minimum data size (only header's)
- Int_t blankDDLSize;
- Int_t blankBlockSize;
- Int_t blankDspSize;
-
- for(Int_t iDDL = 0; iDDL < 20; iDDL++) { // DDL loop
-
- AliDebug(3, Form("Chamber %d\n", iDDL/2 +1 ));
-
- // getting DSP info
- fBusPatchManager->GetDspInfo(iDDL/2, iDspMax, iBusPerDSP);
-
- // Each DDL is made with 2 Blocks each of which consists of 5 DSP's at most and each of DSP has at most 5 buspatches.
- // This information is used to calculate the size of headers (DDL,Block and DSP) which has no interesting data.
- blankDDLSize = kDDLHeaderSize + 2*kBlockHeaderSize + 2*iDspMax*kDspHeaderSize;
- blankBlockSize = kBlockHeaderSize + iDspMax*kDspHeaderSize;
-
- for (Int_t i = 0; i < iDspMax; i++) {
- blankDDLSize += 2*iBusPerDSP[i]*kBusPatchHeaderSize;
- blankBlockSize += iBusPerDSP[i]*kBusPatchHeaderSize;
- }
- rawReader->Reset();
- rawReader->Select(0X9, iDDL, iDDL); //Select the DDL file to be read
-
- rawReader->ReadHeader();
-
- totalDDLSize = (rawReader->GetDataSize() + sizeof(AliRawDataHeader))/4; // 4 is multiplied to convert byte 2 words
-
- if(totalDDLSize > blankDDLSize) { // Compare the DDL header with an empty DDL header size to read the file
-
- Int_t totalDataWord = rawReader->GetDataSize(); // in bytes
- UInt_t *buffer = new UInt_t[totalDataWord/4];
-
- rawReader->ReadNext((UChar_t*)buffer, totalDataWord);
-
- // elex info
- Int_t buspatchId;
- UChar_t channelId;
- UShort_t manuId;
- Char_t parity;
- UShort_t charge;
-
- // indexes
- Int_t indexDsp;
- Int_t indexBusPatch;
- Int_t index = 0;
-
- for(Int_t iBlock = 0; iBlock < 2 ;iBlock++){ // loop over 2 blocks
- totalBlockSize = buffer[index];
-
- if(totalBlockSize > blankBlockSize) { // compare block header
- index += kBlockHeaderSize;
-
- for(Int_t iDsp = 0; iDsp < iDspMax ;iDsp++){ //DSP loop
-
- totalDspSize = buffer[index];
- indexDsp = index;
-
- blankDspSize = kDspHeaderSize + iBusPerDSP[iDsp]*kBusPatchHeaderSize; // no data just header
-
- if(totalDspSize > blankDspSize) { // Compare DSP Header
- index += kDspHeaderSize;
-
- for(Int_t iBusPatch = 0; iBusPatch < iBusPerDSP[iDsp]; iBusPatch++) {
-
- //copy buffer into header structure
- memcpy(subEventTracker->GetBusPatchHeader(), &buffer[index], kBusPatchHeaderSize*4);
-
- totalBusPatchSize = subEventTracker->GetTotalLength();
- buspatchId = subEventTracker->GetBusPatchId();
- indexBusPatch = index;
-
-
- if(totalBusPatchSize > kBusPatchHeaderSize) { //Check Buspatch header, not empty events
-
- index += kBusPatchHeaderSize;
- dataSize = subEventTracker->GetLength();
- Int_t bufSize = subEventTracker->GetBufSize();
-
- if(dataSize>0) { // check data present
- if (dataSize > bufSize) subEventTracker->SetAlloc(dataSize);
-
- //copy buffer into data structure
- memcpy(subEventTracker->GetData(), &buffer[index], dataSize*4);
- index += dataSize;
-
- for(Int_t iData = 0; iData < dataSize; iData++) {
-
- // digits info
- parity = subEventTracker->GetParity(iData); // test later for parity
- manuId = subEventTracker->GetManuId(iData);
- channelId = subEventTracker->GetChannelId(iData);
- charge = subEventTracker->GetCharge(iData);
-
- // set charge
- digit->SetSignal(charge);
- digit->SetPhysicsSignal(charge);
- digit->SetADC(charge);
- Int_t error = GetMapping(buspatchId,manuId,channelId,digit); // Get Back the hits at pads
- if (error) continue;
-
- // debugging
- if (AliLog::GetGlobalDebugLevel() == 3) {
- Int_t padX = digit->PadX();
- Int_t padY = digit->PadY();
- Int_t iCath = digit->Cathode();
- Int_t detElemId = digit->DetElemId();
-
- AliDebug(1,Form("output detElemId %d busPatchid %d PadX %d PadY %d iCath %d \n",
- detElemId, buspatchId, padX, padY, iCath));
-
- AliDebug(3,Form("detElemId %d Padx %d Pady %d, Cath %d, charge %d",detElemId, padX, padY, iCath, charge));
- }
-
- // fill digits
- fMUONData->AddDigit(iDDL/2, *digit);
-
- } // data loop
- } // dataSize test
- } // testing buspatch
-
- index = indexBusPatch + totalBusPatchSize;
-
- } //buspatch loop
-
- } // dsp test
-
- index = indexDsp + totalDspSize;
-
- } // dsp loop
-
- } //block test
-
- index = totalBlockSize;
-
- } //block loop
-
- delete[] buffer;
- } //loop checking the header size of DDL
-
- //delete rawReader;
- } // DDL loop
-
-
- delete subEventTracker;
- delete digit;
-
- fTrackerTimer.Stop();
-
- return kTRUE;
-}
-
-//____________________________________________________________________
-Int_t AliMUONRawReader::GetMapping(Int_t busPatchId, UShort_t manuId,
- UChar_t channelId, AliMUONDigit* digit )
-{
-
- // mapping for tracker
-
- fMappingTimer.Start(kFALSE);
-
- // getting DE from buspatch
- Int_t detElemId = fBusPatchManager->GetDEfromBus(busPatchId);
- AliDebug(3,Form("detElemId: %d busPatchId %d\n", detElemId, busPatchId));
-
- AliMpVSegmentation* seg = fSegFactory->CreateMpSegmentationByElectronics(detElemId, manuId);
- AliMpPad pad = seg->PadByLocation(AliMpIntPair(manuId,channelId),kTRUE);
-
- if (!pad.IsValid())
- {
- AliWarning(Form("No pad for detElemId: %d, busPatchId %d, manuId: %d, channelId: %d\n",
- detElemId, busPatchId, manuId, channelId));
- fMappingTimer.Stop();
- return kTRUE;
- } // return error
-
- // Getting padX, padY and cathode number.
- Int_t padX = pad.GetIndices().GetFirst();
- Int_t padY = pad.GetIndices().GetSecond();
- Int_t iCath = AliMpDEManager::GetCathod(detElemId,seg->PlaneType());
-
- // storing into digits
- digit->SetPadX(padX);
- digit->SetPadY(padY);
- digit->SetCathode(iCath);
- digit->SetDetElemId(detElemId);
- digit->SetElectronics(manuId,channelId);
-
- AliDebug(3,Form("detElemId: %d, busPatchId %d, manuId: %d, channelId: %d, padx: %d pady %d\n",
- detElemId, busPatchId, manuId, channelId, padX, padY));
- StdoutToAliDebug(3,digit->Print(););
-
- fMappingTimer.Stop();
- return kFALSE;
-}
-
-//____________________________________________________________________
-Int_t AliMUONRawReader::ReadTriggerDDL(AliRawReader* rawReader)
-{
-
- // reading DDL for trigger
-
- fTriggerTimer.Start(kFALSE);
-
- AliMUONSubEventTrigger* subEventTrigger = new AliMUONSubEventTrigger();
- AliMUONScalerEventTrigger* scalerEvent = 0x0;
-
- AliMUONGlobalTrigger* globalTrigger = 0x0;
- AliMUONLocalTrigger* localTrigger = new AliMUONLocalTrigger();
-
-
- //Int_t kDDLHeaderSize = fDDLTrigger->GetHeaderSize();
- // we dont need this, as size of ddl data is same for triger and no trigger
-
- Int_t kDDLEnhanceHeaderSize = fDDLTrigger->GetHeaderLength();
- Int_t kRegHeaderSize = subEventTrigger->GetRegHeaderLength() ;
-
- Int_t loCircuit, loStripX, loDev, loStripY, loLpt, loHpt;
- Char_t loDecision;
-
- UShort_t x1Pattern, x2Pattern, x3Pattern, x4Pattern;
- UShort_t y1Pattern, y2Pattern, y3Pattern, y4Pattern;
-
- // loop over the two ddl's
- for(Int_t iDDL = 0; iDDL < 2; iDDL++) { //DDL loop
-
- rawReader->Reset();
- rawReader->Select(0XA,iDDL,iDDL); //Select the DDL file to be read
-
- rawReader->ReadHeader();
-
- Int_t totalDataWord = rawReader->GetDataSize(); // in bytes
- UInt_t *buffer = new UInt_t[totalDataWord/4];
-
- rawReader->ReadNext((UChar_t*)buffer, totalDataWord);
-
- Int_t index = 0;
- fDDLTrigger->SetDDLWord(buffer[index++]);
-
- if(fDDLTrigger->GetEventType() == 2) {
- fScalerEvent = kTRUE;
- scalerEvent = new AliMUONScalerEventTrigger();
- } else
- fScalerEvent = kFALSE;
-
- if(fScalerEvent) {
- // 6 DARC scaler words
- memcpy(scalerEvent->GetDarcScalers(), &buffer[index], scalerEvent->GetDarcScalerLength()*4);
- index += scalerEvent->GetDarcScalerLength();
- }
-
- // 4 words of global board input + Global board output
- memcpy(fDDLTrigger->GetGlobalInput(), &buffer[index], (kDDLEnhanceHeaderSize-1)*4);
- index += kDDLEnhanceHeaderSize - 1; // kind tricky cos scaler info in-between Darc header
-
- if(fScalerEvent) {
- // 10 Global scaler words
- memcpy(scalerEvent->GetGlobalScalers(), &buffer[index], scalerEvent->GetGlobalScalerLength()*4);
- index += scalerEvent->GetGlobalScalerLength();
- }
-
- // fill global trigger information
- globalTrigger = GetGlobalTriggerPattern(fDDLTrigger->GetGlobalOuput());
- fMUONData->AddGlobalTrigger(*globalTrigger);
-
- // 8 regional boards
- for (Int_t iReg = 0; iReg < 8; iReg++) { //loop over regeonal card
-
- memcpy(subEventTrigger->GetRegHeader(), &buffer[index], kRegHeaderSize*4);
- index += kRegHeaderSize;
-
- // 11 regional scaler word
- if(fScalerEvent) {
- memcpy(scalerEvent->GetRegScalers(), &buffer[index], scalerEvent->GetRegScalerLength()*4);
- index += scalerEvent->GetRegScalerLength();
- }
-
- // 16 local cards per regional board
- for (Int_t iLoc = 0; iLoc < 16; iLoc++) { //loop over local card
-
- Int_t iLocIndex = index;
-
- // 5 word trigger information
- for(Int_t iData = 0; iData < 5 ;iData++ ){
- subEventTrigger->SetLocalData(buffer[index++],5*iLoc+iData); //read local data
- }
-
- if(buffer[iLocIndex] > 0) {
-
- loCircuit = (Int_t)subEventTrigger->GetLocalId(iLoc)+ 16*iReg + 128*iDDL;
- loStripX = (Int_t)subEventTrigger->GetXPos(iLoc);
- loStripY = (Int_t)subEventTrigger->GetYPos(iLoc);
- loDev = (Int_t)subEventTrigger->GetXDev(iLoc);
-
- // fill local trigger
- localTrigger->SetLoCircuit(loCircuit);
- localTrigger->SetLoStripX(loStripX );
- localTrigger->SetLoStripY(loStripY);
- localTrigger->SetLoDev(loDev);
-
- loDecision = subEventTrigger->GetLocalDec(iLoc);
- loLpt = loDecision & 0x3;
- loHpt = (loDecision >> 2) & 0x3;
-
- // fill local trigger
- localTrigger->SetLoLpt(loLpt);
- localTrigger->SetLoHpt(loHpt);
-
- //getting pattern from subvent
- x1Pattern = subEventTrigger->GetX1(iLoc);
- x2Pattern = subEventTrigger->GetX2(iLoc);
- x3Pattern = subEventTrigger->GetX3(iLoc);
- x4Pattern = subEventTrigger->GetX4(iLoc);
-
- y1Pattern = subEventTrigger->GetY1(iLoc);
- y2Pattern = subEventTrigger->GetY2(iLoc);
- y3Pattern = subEventTrigger->GetY3(iLoc);
- y4Pattern = subEventTrigger->GetY4(iLoc);
-
- // fill local trigger
- localTrigger->SetX1Pattern(x1Pattern);
- localTrigger->SetX2Pattern(x2Pattern);
- localTrigger->SetX3Pattern(x3Pattern);
- localTrigger->SetX4Pattern(x4Pattern);
-
- localTrigger->SetY1Pattern(y1Pattern);
- localTrigger->SetY2Pattern(y2Pattern);
- localTrigger->SetY3Pattern(y3Pattern);
- localTrigger->SetY4Pattern(y4Pattern);
- fMUONData->AddLocalTrigger(*localTrigger);
-
- } // if buffer[] > 0
-
- // 45 regional scaler word
- if(fScalerEvent) {
- memcpy(scalerEvent->GetLocalScalers(), &buffer[index], scalerEvent->GetLocalScalerLength()*4);
- index += scalerEvent->GetLocalScalerLength();
- }
-
- } // local card loop
-
- } // regional card loop
-
- delete [] buffer;
- } // DDL loop
-
- delete subEventTrigger;
- delete globalTrigger;
- delete localTrigger;
-
- delete scalerEvent;
-
- fTriggerTimer.Stop();
- return kTRUE;
-
-}
-//____________________________________________________________________
-AliMUONGlobalTrigger* AliMUONRawReader::GetGlobalTriggerPattern(Int_t gloTrigPat) const
-{
- // global trigger pattern calculation
-
- Int_t globalSinglePlus[3]; // tot num of single plus
- Int_t globalSingleMinus[3]; // tot num of single minus
- Int_t globalSingleUndef[3]; // tot num of single undefined
- Int_t globalPairUnlike[3]; // tot num of unlike-sign pairs
- Int_t globalPairLike[3]; // tot num of like-sign pairs
-
-
- for (Int_t i = 0; i < 3; i++) {
-
- globalSinglePlus[i] = (gloTrigPat >> i) & 0x1;
- globalSingleMinus[i] = (gloTrigPat >> (i+3)) & 0x1;
- globalSingleUndef[i] = (gloTrigPat >> (i+6)) & 0x1;
- globalPairUnlike[i] = (gloTrigPat >> (i+9)) & 0x1;
- globalPairLike[i] = (gloTrigPat >> (i+12)) & 0x1;
- }
-
- return (new AliMUONGlobalTrigger(globalSinglePlus, globalSingleMinus,
- globalSingleUndef, globalPairUnlike,
- globalPairLike));
-
-}
-
+++ /dev/null
-#ifndef ALIMUONRAWREADER_H
-#define ALIMUONRAWREADER_H
-/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
- * See cxx source for full Copyright notice */
-
-/*$Id$*/
-
-/// \ingroup rec
-/// \class AliMUONRawReader
-/// \brief Raw data class for trigger and tracker chambers
-///
-/// Readding Raw data class for trigger and tracker chambers
-
-#include <TObject.h>
-#include "TStopwatch.h"
-
-class AliMpBusPatch;
-class AliMUONData;
-class AliMUONDigit;
-class AliMUONDDLTracker;
-class AliMUONDDLTrigger;
-class AliMUONGlobalTrigger;
-class AliRawReader;
-class AliMpSegFactory;
-
-class AliMUONRawReader : public TObject
-{
- public:
- AliMUONRawReader(AliMUONData* data); // Constructor
- virtual ~AliMUONRawReader(void); // Destructor
-
- // write raw data
- Int_t Raw2Digits(AliRawReader* rawReader);
-
- Int_t ReadTrackerDDL(AliRawReader* rawReader);
- Int_t ReadTriggerDDL(AliRawReader* rawReader);
-
- AliMUONData* GetMUONData() {return fMUONData;}
-
- Int_t GetMapping(Int_t buspatchId, UShort_t manuId,
- UChar_t channelId, AliMUONDigit* digit );
-
- AliMUONGlobalTrigger* GetGlobalTriggerPattern(Int_t gloTrg) const;
-
- void SetScalerEvent() {fScalerEvent = kTRUE;}
-
- protected:
- AliMUONRawReader(); // Default constructor
- AliMUONRawReader (const AliMUONRawReader& rhs); // copy constructor
- AliMUONRawReader& operator=(const AliMUONRawReader& rhs); // assignment operator
-
- private:
-
- AliMUONData* fMUONData; //! Data container for MUON subsystem
-
- AliMpSegFactory* fSegFactory; //! Mapping segmentation factory
-
- AliMUONDDLTracker* fDDLTracker; //! DDL tracker class pointers
- AliMUONDDLTrigger* fDDLTrigger; //! DDL trigger class pointers
-
- AliMpBusPatch* fBusPatchManager; //! buspatch versus DE's & DDL
-
- Bool_t fScalerEvent; // flag to generates scaler event
-
- TStopwatch fTrackerTimer; //!
- TStopwatch fTriggerTimer; //!
- TStopwatch fMappingTimer; //!
-
- ClassDef(AliMUONRawReader,0) // MUON cluster reconstructor in ALICE
-};
-
-#endif
+++ /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. *
- **************************************************************************/
-
-
-///////////////////////////////////////////////////////////////////////////////
-///
-/// This class provides access to MUON digits in raw data.
-///
-/// It loops over all MUON digits in the raw data given by the AliRawReader.
-/// The Next method goes to the next digit. If there are no digits left
-/// it returns kFALSE.
-///
-/// First version implement only the structure for the moment
-///
-///////////////////////////////////////////////////////////////////////////////
-
-#include "AliMUONRawStream.h"
-
-#include "AliRawReader.h"
-#include "AliLog.h"
-
-
-ClassImp(AliMUONRawStream)
-
-
-AliMUONRawStream::AliMUONRawStream(AliRawReader* rawReader)
-{
-// create an object to read MUON raw digits
-
- fRawReader = rawReader;
- fRawReader->Select(0);
- fData = new UShort_t[fgkDataMax];
- fDataSize = fPosition = 0;
- fCount = 0;
-
-}
-
-AliMUONRawStream::AliMUONRawStream(const AliMUONRawStream& stream) :
- TObject(stream)
-{
- AliFatal("copy constructor not implemented");
-}
-
-AliMUONRawStream& AliMUONRawStream::operator = (const AliMUONRawStream&
- /* stream */)
-{
- AliFatal("assignment operator not implemented");
- return *this;
-}
-
-AliMUONRawStream::~AliMUONRawStream()
-{
-// clean up
-
- delete[] fData;
-}
-
-
-Bool_t AliMUONRawStream::Next()
-{
-// read the next raw digit
-// returns kFALSE if there is no digit left
-
- AliFatal("method not implemented for raw data input");
-
-
- return kFALSE;
-}
-
-
+++ /dev/null
-#ifndef ALIMUONRAWSTREAM_H
-#define ALIMUONRAWSTREAM_H
-/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
- * See cxx source for full Copyright notice */
-
-/*$Id$*/
-
-/// \ingroup rec
-/// \class AliMUONRawStream
-/// \brief Class for reading MUON raw digits
-///
-///////////////////////////////////////////////////////////////////////////////
-///
-/// This class provides access to MUON digits in raw data.
-///
-///////////////////////////////////////////////////////////////////////////////
-
-#include <TObject.h>
-
-class AliRawReader;
-
-
-class AliMUONRawStream: public TObject {
- public :
- AliMUONRawStream(AliRawReader* rawReader);
- AliMUONRawStream(const AliMUONRawStream& stream);
- AliMUONRawStream& operator = (const AliMUONRawStream& stream);
- virtual ~AliMUONRawStream();
-
- virtual Bool_t Next();
-
-
- protected :
-
- AliRawReader* fRawReader; // object for reading the raw data
-
-
- static const Int_t fgkDataMax = 10000000; // size of array for uncompressed raw data
- UShort_t* fData; // uncompressed raw data
- Int_t fDataSize; // actual size of the uncompressed raw data
- Int_t fPosition; // current position in fData
- Int_t fCount; // counter of words to be read for current trailer
-
-
- ClassDef(AliMUONRawStream, 0) // base class for reading MUON raw digits
-};
-
-#endif
+++ /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. *
- **************************************************************************/
-
-#include "AliMUONScalerEventTrigger.h"
-
-const Int_t AliMUONScalerEventTrigger::fgkLocalScalerLength = 45;
-const Int_t AliMUONScalerEventTrigger::fgkRegScalerLength = 8;
-const Int_t AliMUONScalerEventTrigger::fgkGlobalScalerLength = 10;
-const Int_t AliMUONScalerEventTrigger::fgkDarcScalerLength = 6;
-
-ClassImp(AliMUONScalerEventTrigger)
-
-//___________________________________________
-AliMUONScalerEventTrigger::AliMUONScalerEventTrigger()
- : fLocalL0(0),
- fLocalHold(0),
- fLocalClk(0),
- fLocalLPtNTrig(0),
- fLocalHPtNTrig(0),
- fLocalLPtRTrig(0),
- fLocalHPtRTrig(0),
- fLocalLPtLTrig(0),
- fLocalHPtLTrig(0),
- fLocalLPtSTrig(0),
- fLocalHPtSTrig(0),
- fLocalEOS(0),
- fLocalReset(0),
-
- fRegL0(0),
- fRegClk(0),
- fRegHold(0),
-
- fGlobalL0(0),
- fGlobalClk(0),
- fGlobalHold(0),
- fGlobalSpare(0),
-
- fDarcL0R(0),
- fDarcL0U(0),
- fDarcL0P(0),
- fDarcL0S(0),
- fDarcClk(0),
- fDarcHold(0)
-{
- for (Int_t i = 0; i < 8*4; i++)
- fLocalScaler[i] = 0;
-
- for (Int_t i = 0; i < 8; i++)
- fRegScaler[i] = 0;
-
- for (Int_t i = 0; i < 6; i++)
- fGlobalScaler[i] = 0;
-
-}
-//___________________________________________
-void AliMUONScalerEventTrigger::SetNumbers()
-{
- // set crasy numbers for scaler words, while no beam is coming
-
- fLocalL0 = 1000;
- fLocalHold = 100;
- fLocalClk = 10000;
- fLocalLPtNTrig = 1;
- fLocalHPtNTrig = 1;
- fLocalLPtRTrig = 2;
- fLocalHPtRTrig = 2;
- fLocalLPtLTrig = 3;
- fLocalHPtLTrig = 3;
- fLocalLPtSTrig = 4;
- fLocalHPtSTrig = 4;
- fLocalEOS = 0x2AA;
- fLocalReset = 10;
-
- fRegL0 = 1000;
- fRegClk = 10000;
- fRegHold = 100;
-
- fGlobalL0 = 1000;
- fGlobalClk = 10000;
- fGlobalHold = 100;
- fGlobalSpare = 1;
-
- fDarcL0R = 1000;
- fDarcL0U = 900;
- fDarcL0P = 800;
- fDarcL0S = 700;
- fDarcClk = 10000;
- fDarcHold = 100;
-
- for (Int_t i = 0; i < 8*4; i++)
- fLocalScaler[i] = i;
-
- for (Int_t i = 0; i < 8; i++)
- fRegScaler[i] = i;
-
- for (Int_t i = 0; i < 6; i++)
- fGlobalScaler[i] = i;
-
-}
+++ /dev/null
-#ifndef ALIMUONSCALEREVENTTRIGGER_H
-#define ALIMUONSCALEREVENTTRIGGER_H
-/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
- * See cxx source for full Copyright notice */
-
-/*$Id$*/
-
-/// \ingroup rec
-/// \class AliMUONScalerEventTrigger
-/// \brief MUON scaler event trigger
-
-#include <TObject.h>
-
-class AliMUONScalerEventTrigger : public TObject{
-
-public:
- AliMUONScalerEventTrigger();
- virtual ~AliMUONScalerEventTrigger(){;}
-
- // local get methods
- UInt_t GetLocalL0() const {return fLocalL0;}
- UInt_t GetLocalHold() const {return fLocalHold;}
- UInt_t GetLocalClock() const {return fLocalClk;}
- UChar_t GetLocalSwitch() const {return (fLocalEOS >> 2) & 0x3FF;}
- UChar_t GetLocalComptXY() const {return fLocalEOS & 3;}
-
- UShort_t GetXY1(Int_t n) {return (n % 2 == 0) ?
- (fLocalScaler[n] & 0xFFFF) : (fLocalScaler[n] >> 16) & 0xFFFF;}
- UShort_t GetXY2(Int_t n) {return (n % 2 == 0) ?
- (fLocalScaler[8 + n] & 0xFFFF) : (fLocalScaler[8 + n] >> 16) & 0xFFFF;}
- UShort_t GetXY3(Int_t n) {return (n % 2 == 0) ?
- (fLocalScaler[8*2 + n] & 0xFFFF) : (fLocalScaler[8*2 + n] >> 16) & 0xFFFF;}
- UShort_t GetXY4(Int_t n) {return (n % 2 == 0) ?
- (fLocalScaler[8*3 + n] & 0xFFFF) : (fLocalScaler[8*3 + n] >> 16) & 0xFFFF;}
-
- // regional get methods
- UInt_t GetRegL0() const {return fRegL0;}
- UInt_t GetRegClock() const {return fRegClk;}
- const UInt_t* GetRegScaler() const {return fRegScaler;}
- UInt_t GetRegHold() const {return fRegHold;}
-
- // global get methods
- UInt_t GetGlobalL0() const {return fGlobalL0;}
- UInt_t GetGlobalClock() const {return fGlobalClk;}
- const UInt_t* GetGlobalScaler() const {return fGlobalScaler;}
- UInt_t GetGlobalHold() const {return fGlobalHold;}
- UInt_t GetGlobalSpare() const {return fGlobalSpare;}
-
- // DARC get methods
- UInt_t GetDarcL0R() const {return fDarcL0R;}
- UInt_t GetDarcL0U() const {return fDarcL0U;}
- UInt_t GetDarcL0P() const {return fDarcL0P;}
- UInt_t GetDarcL0S() const {return fDarcL0S;}
- UInt_t GetDarcClock() const {return fDarcClk;}
- UInt_t GetDarcHold() const {return fDarcHold;}
-
- // don't use setting methods but memcpy
- UInt_t* GetLocalScalers() {return &fLocalL0;}
- UInt_t* GetRegScalers() {return &fRegL0;}
- UInt_t* GetGlobalScalers() {return &fGlobalL0;}
- UInt_t* GetDarcScalers() {return &fDarcL0R;}
-
- // get scaler length
- Int_t GetLocalScalerLength() const {return fgkLocalScalerLength;}
- Int_t GetRegScalerLength() const {return fgkRegScalerLength;}
- Int_t GetGlobalScalerLength() const {return fgkGlobalScalerLength;}
- Int_t GetDarcScalerLength() const {return fgkDarcScalerLength;}
-
- // set random numbers to fill variable
- void SetNumbers();
-
- private:
-
- // local card scalers
- UInt_t fLocalL0; // local L0
- UInt_t fLocalHold; // local hold (dead time)
- UInt_t fLocalClk; // local clock
-
- UInt_t fLocalLPtNTrig; // local low Pt no trigger
- UInt_t fLocalHPtNTrig; // local high Pt no trigger
-
- UInt_t fLocalLPtRTrig; // local low Pt right trigger
- UInt_t fLocalHPtRTrig; // local high Pt right trigger
-
- UInt_t fLocalLPtLTrig; // local low Pt left trigger
- UInt_t fLocalHPtLTrig; // local high Pt left trigger
-
- UInt_t fLocalLPtSTrig; // local low Pt straight trigger
- UInt_t fLocalHPtSTrig; // local high Pt straight trigger
-
- UInt_t fLocalScaler[8*4]; // local data
- UInt_t fLocalEOS; // contains switches conf. & flag for reading X (0) or Y (1) in fLocalScaler
- UInt_t fLocalReset; // reset signal
- static const Int_t fgkLocalScalerLength; // length of local scaler in word
-
- // regional card scalers
- UInt_t fRegL0; // regional L0
- UInt_t fRegClk; // regional clock
- UInt_t fRegScaler[8]; // regional ouput
- UInt_t fRegHold; // regional hold (dead time)
- static const Int_t fgkRegScalerLength; // length of regional scaler in word
-
- // global card scalers
- UInt_t fGlobalL0; // global L0
- UInt_t fGlobalClk; // global clock
- UInt_t fGlobalScaler[6]; // global ouput
- UInt_t fGlobalHold; // global hold (dead time)
- UInt_t fGlobalSpare; // global spare
- static const Int_t fgkGlobalScalerLength; // length of global scaler in word
-
- // DARC Scalers
- UInt_t fDarcL0R; // DARC L0 received
- UInt_t fDarcL0U; // DARC L0 used
- UInt_t fDarcL0P; // DARC Physical L0
- UInt_t fDarcL0S; // DARC Software (checking) L0
- UInt_t fDarcClk; // DARC clock
- UInt_t fDarcHold; // DARC hold (dead time)
- static const Int_t fgkDarcScalerLength; // length of DARC scaler in word
-
- ClassDef(AliMUONScalerEventTrigger,1)
-};
-#endif
+++ /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. *
- **************************************************************************/
-
-// $Id$
-
-#include "AliMUONSubEventTracker.h"
-
-#include "AliLog.h"
-
-///
-/// Bus patch structure for tracker raw data
-/// each Dsp contains at most 5 bus patch structure
-/// Beside the total length and length of the below data
-/// the header of the block contains the bus patch id, trigger words
-/// and data structure itself (11bits for manu id, 6 bits for channel id and
-/// 12 bits for charge)
-///
-
-
-const Int_t AliMUONSubEventTracker::fgkHeaderLength = 4;
-
-ClassImp(AliMUONSubEventTracker)
-
-//___________________________________________
-AliMUONSubEventTracker::AliMUONSubEventTracker()
- : TObject(),
- fTotalLength(0),
- fLength(0),
- fBusPatchId(0),
- fTriggerWord(0),
- fBufSize(1024)
-{
- //
- //ctor
- //
- fData = new UInt_t[fBufSize];
-}
-//___________________________________________
-AliMUONSubEventTracker::~AliMUONSubEventTracker()
-{
- //
- // dtor
- //
- delete[] fData;
-}
-
-//___________________________________________
-void AliMUONSubEventTracker::SetAlloc(Int_t size)
-{
- //
- // Allocate size per default 1024;
- // return if size < 1024
- //
- if (size < fBufSize)
- return;
- else
- ResizeData(size);
-}
-//___________________________________________
-void AliMUONSubEventTracker::AddData(UInt_t data)
-{
- // could have used class from ROOT
- // but the structure must be as simple as possible
- // to be written on disc blockwise, not so sure ?
- if (fLength == fBufSize)
- ResizeData();
- fData[fLength++] = data;
- fTotalLength = fLength + 4;
-}
-
-//___________________________________________
-void AliMUONSubEventTracker::ResizeData(Int_t size)
-{
- // In case of resizing the vector
- // the most simplest way to do it
- //
- if (size == 0)
- fBufSize *= 2;
- else
- fBufSize = size;
- UInt_t* newData = new UInt_t[fBufSize];
- for (Int_t i = 0; i < fLength; i++)
- newData[i] = fData[i];
- delete[] fData;
- fData = newData;
-}
-//___________________________________________
-AliMUONSubEventTracker::
-AliMUONSubEventTracker(const AliMUONSubEventTracker& event): TObject(event)
-{
- //
- // copy ctor
- //
- fTotalLength = event.fTotalLength;
- fLength = event.fLength;
- fBusPatchId = event.fBusPatchId;
- fTriggerWord = event.fTriggerWord;
- fBufSize = event.fBufSize;
-
- fData = new UInt_t[event.fBufSize];
- for (int i = 0; i < event.fBufSize; i++)
- fData[i] = event.fData[i];
-}
-//___________________________________________
-AliMUONSubEventTracker&
-AliMUONSubEventTracker::operator=(const AliMUONSubEventTracker& event)
-{
- //
- // assignment operator
- //
- if (this == &event) return *this;
- fTotalLength = event.fTotalLength;
- fLength = event.fLength;
- fBusPatchId = event.fBusPatchId;
- fTriggerWord = event.fTriggerWord;
- fBufSize = event.fBufSize;
-
- delete [] fData;
- fData = new UInt_t[event.fBufSize];
- for (int i = 0; i < event.fBufSize; i++)
- fData[i] = event.fData[i];
-
- return *this;
-}
-//___________________________________________
-Int_t AliMUONSubEventTracker::Compare(const TObject *obj) const
-{
- //
- // sort bus patch by bus patch number
- // important for AliMUONRawWriter
- //
- AliMUONSubEventTracker* event = (AliMUONSubEventTracker*) obj;
- return (fBusPatchId > event->GetBusPatchId()) ? 1 : -1;
-}
-
-//___________________________________________
-UInt_t AliMUONSubEventTracker::GetData(Int_t n) const
-{
- //
- // get data
- //
- if ( n>=0 && n<fLength ) return fData[n];
-
- AliError("Index outside limits.");
- return 0;
-}
-
-//___________________________________________
-Char_t AliMUONSubEventTracker::GetParity(Int_t n) const
-{
- //
- // get pariry
- //
- if ( n>=0 && n<fLength ) return (Char_t)(fData[n] >> 29) & 0x7;
-
- AliError("Index outside limits.");
- return 0;
-}
-
-//___________________________________________
-UShort_t AliMUONSubEventTracker::GetManuId(Int_t n) const
-{
- //
- // get manu Id
- //
- if ( n>=0 && n<fLength ) return (UShort_t)(fData[n] >> 18) & 0x7FF;
-
- AliError("Index outside limits.");
- return 0;
-}
-
-//___________________________________________
-Char_t AliMUONSubEventTracker::GetChannelId(Int_t n) const
-{
- //
- // get channel Id
- //
- if ( n>=0 && n<fLength ) return (Char_t)(fData[n] >> 12) & 0x3F;
-
- AliError("Index outside limits.");
- return 0;
-}
-
-//___________________________________________
-UShort_t AliMUONSubEventTracker::GetCharge(Int_t n) const
-{
- //
- // get charge (in ADC)
- //
- if ( n>=0 && n<fLength ) return (UShort_t)(fData[n] & 0xFFF);
-
- AliError("Index outside limits.");
- return 0;
-}
+++ /dev/null
-#ifndef ALIMUONSUBEVENTTRACKER_H
-#define ALIMUONSUBEVENTTRACKER_H
-/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
- * See cxx source for full Copyright notice */
-
-/*$Id$*/
-
-/// \ingroup rec
-/// \class AliMUONSubEventTracker
-/// \brief MUON subevent tracker
-///
-/// Bus patch structure for tracker raw data
-/// each Dsp contains at most 5 bus patch structure
-/// Beside the total length and length of the below data
-/// the header of the block contains the bus patch id, trigger words
-/// and data structure itself (11bits for manu id, 6 bits for channel id and
-/// 12 bits for charge)
-///
-/// \author Christian Finck
-
-#include <TObject.h>
-
-class AliMUONSubEventTracker : public TObject {
-
-public:
- AliMUONSubEventTracker ();
- virtual ~AliMUONSubEventTracker ();
- AliMUONSubEventTracker(const AliMUONSubEventTracker& rhs);
- AliMUONSubEventTracker& operator=(const AliMUONSubEventTracker& rhs);
-
- Int_t GetTotalLength() const {return fTotalLength;}
- Int_t GetLength() const {return fLength;}
- Int_t GetBufSize() const {return fBufSize;}
- Int_t GetBusPatchId() const {return fBusPatchId;}
- Int_t GetTriggerWord() const {return fTriggerWord;}
- UInt_t GetData(Int_t n) const;
- UInt_t* GetData() const {return fData;}
-
- Char_t GetParity(Int_t n) const;
- UShort_t GetManuId(Int_t n) const;
- Char_t GetChannelId(Int_t n) const;
- UShort_t GetCharge(Int_t n) const;
-
- void SetBusPatchId(Int_t b) {fBusPatchId = b;}
- void SetTriggerWord(Int_t w) {fTriggerWord = w;}
-
- void AddData(UInt_t d);
- void SetAlloc(Int_t size);
-
- Bool_t IsSortable() const {return kTRUE;}
- Int_t Compare(const TObject *obj) const;
-
- Int_t GetHeaderLength() const {return fgkHeaderLength;}
-
- Int_t* GetBusPatchHeader() {return &fTotalLength;}
-
- private:
- Int_t fTotalLength; // total length of buspatch structure
- Int_t fLength; // length of raw data
- Int_t fBusPatchId; // bus patch id
- Int_t fTriggerWord ; // counter trigger word
-
- static const Int_t fgkHeaderLength; // header length in word
-
- UInt_t* fData; // data
-
- Int_t fBufSize; // initial size for data array
-
- void ResizeData(Int_t size = 0);
-
- ClassDef(AliMUONSubEventTracker,1) // MUON DDL Tracker
-};
-#endif
+++ /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. *
- **************************************************************************/
-
-#include "AliMUONSubEventTrigger.h"
-
-const Int_t AliMUONSubEventTrigger::fgkRegHeaderLength = 3;
-
-ClassImp(AliMUONSubEventTrigger)
-
-//___________________________________________
-AliMUONSubEventTrigger::AliMUONSubEventTrigger()
- : TObject(),
- fRegWord(0)
-{
- for (Int_t i = 0; i < 16*5; i++)
- fLocalData[i] = 0;
-
- fRegInput[0] = fRegInput[1] = 0;
-
-}
+++ /dev/null
-#ifndef ALIMUONSUBEVENTTRIGGER_H
-#define ALIMUONSUBEVENTTRIGGER_H
-/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
- * See cxx source for full Copyright notice */
-
-/*$Id$*/
-
-/// \ingroup rec
-/// \class AliMUONSubEventTrigger
-/// \brief MUON subevent trigger
-
-#include <TObject.h>
-
-class AliMUONSubEventTrigger : public TObject{
-
-public:
- AliMUONSubEventTrigger();
- virtual ~AliMUONSubEventTrigger(){;}
-
-
- UInt_t GetRegWord() const {return fRegWord;}
- UInt_t GetRegInput(Int_t n) const {return fRegInput[n];}
- UInt_t GetLocalData(Int_t n) const {return fLocalData[n];}
-
- //MBZ:3,serialNb:5,Version:8,RegId:4,MBZ:4,RegOut:8
- Char_t GetSerialNb() {return (Char_t)(fRegWord >> 24) & 0x1F;}
- Char_t GetVersion() {return (Char_t)(fRegWord >> 16) & 0xFF;}
- Char_t GetRegId() {return (Char_t)(fRegWord >> 12) & 0x0F;}
- Char_t GetRegOutput() {return (Char_t)(fRegWord) & 0xFF;}
-
- UShort_t GetX2(Int_t n) {return (fLocalData[5*n] >> 16) & 0xFFFF;}
- UShort_t GetX1(Int_t n) {return (fLocalData[5*n]) & 0xFFFF;}
- UShort_t GetX4(Int_t n) {return (fLocalData[5*n + 1] >> 16) & 0xFFFF;}
- UShort_t GetX3(Int_t n) {return (fLocalData[5*n + 1]) & 0xFFFF;}
-
- UShort_t GetY2(Int_t n) {return (fLocalData[5*n + 2] >> 16) & 0xFFFF;}
- UShort_t GetY1(Int_t n) {return (fLocalData[5*n + 2]) & 0xFFFF;}
- UShort_t GetY4(Int_t n) {return (fLocalData[5*n + 3] >> 16) & 0xFFFF;}
- UShort_t GetY3(Int_t n) {return (fLocalData[5*n + 3]) & 0xFFFF;}
-
- Char_t GetLocalId(Int_t n) {return fLocalData[5*n + 4] >> 19 & 0xF;}
- Char_t GetLocalDec(Int_t n) {return fLocalData[5*n + 4] >> 15 & 0xF;}
- Char_t GetTriggerY(Int_t n) {return fLocalData[5*n + 4] >> 14 & 0x1;}
- Char_t GetYPos(Int_t n) {return fLocalData[5*n + 4] >> 10 & 0xF;}
- Char_t GetXDev(Int_t n) {return fLocalData[5*n + 4] >> 5 & 0x1F;}
- Char_t GetXPos(Int_t n) {return fLocalData[5*n + 4] & 0x1F;}
-
- void SetRegWord(UInt_t w) {fRegWord = w;}
- void SetRegInput(UInt_t in, Int_t n) {fRegInput[n] = in;}
- void SetLocalData(UInt_t d, Int_t n) {fLocalData[n] = d;}
-
- Int_t GetRegHeaderLength() const {return fgkRegHeaderLength;}
- UInt_t* GetRegHeader() {return &fRegWord;}
-
- private:
-
- UInt_t fRegWord; // first word
- UInt_t fRegInput[2]; // regional input
-
- static const Int_t fgkRegHeaderLength; // header length in word
-
- UInt_t fLocalData[16*5]; // local data
-
- ClassDef(AliMUONSubEventTrigger,3)
-};
-#endif