//-----------------------------------------------------------------------------
#include "AliMpRegionalTrigger.h"
+#include "AliMpExMapIterator.h"
#include "AliMpTriggerCrate.h"
#include "AliMpLocalBoard.h"
#include "AliMpConstants.h"
#include "AliMpFiles.h"
+#include "AliMpDataStreams.h"
#include "AliMpHelper.h"
#include "AliLog.h"
//______________________________________________________________________________
AliMpRegionalTrigger::AliMpRegionalTrigger()
: TObject(),
- fTriggerCrates(true),
- fLocalBoards(true)
+ fTriggerCrates(),
+ fLocalBoardMap(),
+ fLocalBoardArray(AliMpConstants::TotalNofLocalBoards()+1) // included non-notified boards
{
-/// Standard constructor
+ /// Standard constructor
fTriggerCrates.SetOwner(true);
fTriggerCrates.SetSize(AliMpConstants::LocalBoardNofChannels());
-
- fLocalBoards.SetOwner(true);
- fLocalBoards.SetSize(AliMpConstants::TotalNofLocalBoards()); // included non-notified boards
}
//______________________________________________________________________________
AliMpRegionalTrigger::AliMpRegionalTrigger(const AliMpRegionalTrigger& rhs)
: TObject(rhs),
fTriggerCrates(rhs.fTriggerCrates),
- fLocalBoards(rhs.fLocalBoards)
+ fLocalBoardMap(rhs.fLocalBoardMap),
+ fLocalBoardArray(rhs.fLocalBoardArray)
{
/// Copy constructor
}
//______________________________________________________________________________
-AliMpRegionalTrigger::AliMpRegionalTrigger(TRootIOCtor* /*ioCtor*/)
+AliMpRegionalTrigger::AliMpRegionalTrigger(TRootIOCtor* ioCtor)
: TObject(),
- fTriggerCrates(),
- fLocalBoards()
+ fTriggerCrates(ioCtor),
+ fLocalBoardMap(ioCtor),
+ fLocalBoardArray()
{
/// Constructor for I0
}
// assignment operator
fTriggerCrates = rhs.fTriggerCrates;
- fLocalBoards = rhs.fLocalBoards;
+ fLocalBoardArray = rhs.fLocalBoardArray;
return *this;
}
/// Destructor
}
+
+//
+// private methods
+//
+
+//______________________________________________________________________________
+Bool_t AliMpRegionalTrigger::ReadData(istream& in)
+{
+/// Load the Regional trigger from ASCII data files
+/// and fill objects. Return false if reading fails
+
+ if ( !in.good() ) return kFALSE;
+
+ Int_t localBoardId = 0;
+ TArrayI listInt;
+ UShort_t crateId;
+ Int_t nofBoards;
+ Int_t localBoardIndex(0);
+ char line[80];
+
+ // decode file and store in objects
+ while (!in.eof())
+ {
+ in.getline(line,80);
+ if (!strlen(line)) break;
+ TString crateName(AliMpHelper::Normalize(line));
+
+ in.getline(line,80);
+ sscanf(line,"%hx",&crateId);
+
+ // skip data which are not stored in mapping object
+ // (mode, coincidence, mask)
+ in.getline(line,80);
+ in.getline(line,80);
+ in.getline(line,80);
+
+ // read # local board
+ in.getline(line,80);
+ sscanf(line,"%d",&nofBoards);
+
+ AliMpTriggerCrate* crate
+ = (AliMpTriggerCrate*)(fTriggerCrates.GetValue(crateName.Data()));
+ if (!crate) {
+ crate = new AliMpTriggerCrate(crateName.Data(), crateId);
+ fTriggerCrates.Add(crateName.Data(), crate);
+ }
+
+ Char_t localBoardName[20];
+ Int_t slot;
+ UInt_t switches;
+
+ for ( Int_t i = 0; i < nofBoards; ++i )
+ {
+ in.getline(line,80);
+ sscanf(line,"%02d %s %03d %03x",&slot,localBoardName,&localBoardId,&switches);
+ AliMpLocalBoard* board = new AliMpLocalBoard(localBoardId, localBoardName, slot);
+ board->SetSwitch(switches);
+ board->SetCrate(crateName);
+
+ if (localBoardId > AliMpConstants::NofLocalBoards())
+ board->SetNotified(false); // copy cards
+
+ crate->AddLocalBoard(localBoardId);
+
+ // add list of DEs for local board
+ listInt.Reset();
+ in.getline(line,80);
+ TString tmp(AliMpHelper::Normalize(line));
+ AliMpHelper::DecodeName(tmp,' ',listInt);
+ for (Int_t ii = 0; ii < listInt.GetSize(); ++ii) {
+ if ( listInt[ii] ) board->AddDE(listInt[ii]);
+ }
+
+ // set copy number and transverse connector
+ in.getline(line,80);
+ TString tmp1 = AliMpHelper::Normalize(line);
+ AliMpHelper::DecodeName(tmp1,' ',listInt);
+
+ board->SetInputXfrom(listInt[0]);
+ board->SetInputXto(listInt[1]);
+
+ board->SetInputYfrom(listInt[2]);
+ board->SetInputYto(listInt[3]);
+
+ board->SetTC(listInt[4]);
+
+ // add local board into array
+ fLocalBoardArray.AddAt(board,localBoardIndex);
+ fLocalBoardMap.Add(board->GetId(),board);
+
+ ++localBoardIndex;
+ }
+ }
+
+ AliDebug(1,Form("%d trigger crate created",fTriggerCrates.GetSize()));
+ AliDebug(1,Form("%d local board added to the map",fLocalBoardMap.GetSize()));
+ AliDebug(1,Form("%d local board referenced from the array",fLocalBoardArray.GetLast()+1));
+
+ return kTRUE;
+}
+
//
// public methods
//
/// Load the Regional trigger from ASCII data files
/// and return its instance
- TString inFileName(fileName);
- if ( inFileName == "" )
- inFileName = AliMpFiles::LocalTriggerBoardMapping();
+ AliDebugStream(2) << "Read data from file " << fileName.Data() << endl;
+ TString inFileName(fileName);
inFileName = gSystem->ExpandPathName(inFileName.Data());
-
- ifstream in(inFileName.Data(), ios::in);
-
- if (!in) {
+ ifstream inFile(inFileName.Data(), ios::in);
+ if ( ! inFile.good() ) {
AliErrorStream()
<< "Local Trigger Board Mapping File " << fileName.Data() << " not found" << endl;
return kFALSE;
}
+
+ return ReadData(inFile);
+}
- AliMpLocalBoard* board = 0x0;
- AliMpTriggerCrate* crate = 0x0;
-
-
- Int_t localBoardId = 0;
- TArrayI list;
- UShort_t crateId, mask;
- Int_t mode, coincidence;
+//______________________________________________________________________________
+Bool_t AliMpRegionalTrigger::ReadData(const AliMpDataStreams& dataStreams)
+{
+/// Load the Regional trigger from ASCII data files
+/// and return its instance
- char line[80];
-
- while (!in.eof())
- {
- in.getline(line,80);
- if (!strlen(line)) break;
- TString crateName(AliMpHelper::Normalize(line));
-
- in.getline(line,80);
- sscanf(line,"%hx",&crateId);
-
- in.getline(line,80);
- sscanf(line,"%d",&mode);
-
- in.getline(line,80);
- sscanf(line,"%d",&coincidence);
-
- in.getline(line,80);
- sscanf(line,"%hx",&mask);
-
- crate = (AliMpTriggerCrate*)(fTriggerCrates.GetValue(crateName.Data()));
- if (!crate)
- {
- // cout << "Creating crate: " << crateName.Data() << endl;
- crate = new AliMpTriggerCrate(crateName.Data(), crateId, mask, mode, coincidence);
- fTriggerCrates.Add(crateName.Data(), crate);
- }
-
- Char_t localBoardName[20];
- Int_t slot;
- UInt_t switches;
-
- for ( Int_t i = 0; i < AliMpConstants::LocalBoardNofChannels(); ++i )
- {
- if ( (mask >> i ) & 0x1 )
- {
- in.getline(line,80);
- sscanf(line,"%02d %s %03d %03x",&slot,localBoardName,&localBoardId,&switches);
- // cout << " Creating local board: " << localBoardId << endl;
- board = new AliMpLocalBoard(localBoardId, localBoardName, slot);
- board->SetSwitch(switches);
- board->SetCrate(crateName);
-
- if (localBoardId > AliMpConstants::NofLocalBoards())
- board->SetNotified(false); // copy cards
-
- crate->AddLocalBoard(localBoardId);
-
- // add list of DEs for local board
- list.Reset();
- in.getline(line,80);
- TString tmp(AliMpHelper::Normalize(line));
- AliMpHelper::DecodeName(tmp,' ',list);
- for (Int_t i = 0; i < list.GetSize(); ++i) {
- if ( list[i] ) board->AddDE(list[i]);
- }
-
- // set copy number and transverse connector
- in.getline(line,80);
- tmp = AliMpHelper::Normalize(line);
- AliMpHelper::DecodeName(tmp,' ',list);
+ AliDebugStream(2) << "Read data from stream " << endl;
+ istream& in
+ = dataStreams.
+ CreateDataStream(AliMpFiles::LocalTriggerBoardMapping());
+
+ Bool_t result = ReadData(in);
- board->SetInputXfrom(list[0]);
- board->SetInputXto(list[1]);
-
- board->SetInputYfrom(list[2]);
- board->SetInputYto(list[3]);
-
- board->SetTC(list[4]);
-
- // add local board into map
- fLocalBoards.Add(board->GetId(), board);
- }
- }
- }
- return kTRUE;
+ delete ∈
+ return result;
}
//______________________________________________________________________________
AliMpLocalBoard* AliMpRegionalTrigger::FindLocalBoard(Int_t localBoardId,
Bool_t warn) const {
- /// Return bus patch with given Id
+ /// Return local board with given Id
AliMpLocalBoard* localBoard
- = (AliMpLocalBoard*) fLocalBoards.GetValue(localBoardId);
-
+ = static_cast<AliMpLocalBoard*>(fLocalBoardMap.GetValue(localBoardId));
+
if ( ! localBoard && warn ) {
AliErrorStream()
- << "Local board with Id = " << localBoardId << " not defined." << endl;
- }
+ << "Loacl board with localBoardId = " << localBoardId << " not found." << endl;
+ }
return localBoard;
}
}
//______________________________________________________________________________
-AliMpTriggerCrate* AliMpRegionalTrigger::GetTriggerCrate(Int_t index) const
+Int_t AliMpRegionalTrigger::GetNofLocalBoards() const
{
- /// Return the trigger crates with given index;
-
- return static_cast<AliMpTriggerCrate*>(fTriggerCrates.GetObject(index));
+ /// Return number of local boards
+
+ return fLocalBoardArray.GetLast()+1;
}
//______________________________________________________________________________
-AliMpTriggerCrate* AliMpRegionalTrigger::GetTriggerCrateFast(Int_t index) const
-{
- /// Return the trigger crates with given index;
- /// the index is not checked as we use the fast method in AliMpExMap.
+TIterator*
+AliMpRegionalTrigger::CreateCrateIterator() const
+{
+ /// Create iterator over crates
- return static_cast<AliMpTriggerCrate*>(fTriggerCrates.GetObjectFast(index));
+ return fTriggerCrates.CreateIterator();
}
//______________________________________________________________________________
-Int_t AliMpRegionalTrigger::GetNofLocalBoards() const
-{
- /// Return number of local boards
-
- return fLocalBoards.GetSize();
-}
+TIterator*
+AliMpRegionalTrigger::CreateLocalBoardIterator() const
+{
+ /// Create iterator over local boards
-//______________________________________________________________________________
-AliMpLocalBoard* AliMpRegionalTrigger::GetLocalBoard(Int_t index) const
-{
- /// Return local board with given index;
-
- return static_cast<AliMpLocalBoard*>(fLocalBoards.GetObject(index));
+ return fLocalBoardArray.MakeIterator();
}
//______________________________________________________________________________
-AliMpLocalBoard* AliMpRegionalTrigger::GetLocalBoardFast(Int_t index) const
-{
- /// Return local board with given index;
- /// the index is not checked as we use the fast method in AliMpExMap.
-
- return static_cast<AliMpLocalBoard*>(fLocalBoards.GetObjectFast(index));
+Int_t
+AliMpRegionalTrigger::LocalBoardId(Int_t index) const
+{
+ /// Return local board Id for the local boards with a given index
+
+ AliMpLocalBoard* lb = static_cast<AliMpLocalBoard*>(fLocalBoardArray.At(index));
+ if (lb)
+ {
+ return lb->GetId();
+ }
+ AliError(Form("Could not get local board at index %d",index));
+ return -1;
}
+//______________________________________________________________________________
+void AliMpRegionalTrigger::SetTriggerCratesOwner(Bool_t owner)
+{
+ /// Set ownership to trigger crates
-
-
+ fTriggerCrates.SetOwner(owner);
+}