#include "AliMUONRegionalTriggerConfig.h"
#include "AliMUONTriggerCrateConfig.h"
#include "AliMpConstants.h"
-#include "AliMpFiles.h"
#include "AliMpHelper.h"
-
+#include "AliMpExMapIterator.h"
+#include "AliMpRegionalTrigger.h"
#include "AliLog.h"
#include <TArrayI.h>
#include <Riostream.h>
#include <TClass.h>
#include <TSystem.h>
+#include <TList.h>
+using std::cout;
+using std::endl;
+using std::ifstream;
+using std::ios;
/// \cond CLASSIMP
ClassImp(AliMUONRegionalTriggerConfig)
/// \endcond
//______________________________________________________________________________
AliMUONRegionalTriggerConfig::AliMUONRegionalTriggerConfig()
: TObject(),
- fTriggerCrates(true)
+ fTriggerCrates()
{
/// Standard constructor
//______________________________________________________________________________
Int_t AliMUONRegionalTriggerConfig::ReadData(const TString& fileName)
{
-/// Load the Regional trigger from ASCII data files
-/// and return its instance
-
- TString inFileName(fileName);
- if ( inFileName == "" )
- inFileName = AliMpFiles::LocalTriggerBoardMapping();
-
- inFileName = gSystem->ExpandPathName(inFileName.Data());
-
- ifstream in(inFileName.Data(), ios::in);
-
- if (!in) {
- AliErrorStream()
- << "Local Trigger Board Mapping File " << fileName.Data() << " not found" << endl;
- return kFALSE;
+ /// Load the Regional trigger from ASCII data file
+
+ // Read first data contained in mapping object
+ //
+ AliMpRegionalTrigger mpRegionalTrigger;
+ mpRegionalTrigger.SetTriggerCratesOwner(kFALSE);
+ if ( ! mpRegionalTrigger.ReadData(fileName) ) {
+ AliErrorStream()
+ << "Reading mapping regional trigger from file " << fileName.Data() << " failed."
+ << endl;
+ return 0;
}
- AliMUONTriggerCrateConfig* crate = 0x0;
+ // Fill calibration object from mapping object
+ //
+ TIterator* it = mpRegionalTrigger.CreateCrateIterator();
+ AliMpTriggerCrate* mpTriggerCrate;
+ while ( ( mpTriggerCrate = (AliMpTriggerCrate*)it->Next() ) ) {
+ fTriggerCrates.Add(
+ mpTriggerCrate->GetName(), new AliMUONTriggerCrateConfig(mpTriggerCrate));
+ }
+ delete it;
+
+ //
+
+ // Read remaining calibration data from file
+ //
+ ifstream in(fileName.Data(), ios::in);
+ if ( ! in.good() ) {
+ AliErrorStream()
+ << "Local Trigger Board Mapping File " << fileName.Data() << " not found" << endl;
+ return 0;
+ }
- TArrayI list;
- UShort_t crateId, mask;
+ UShort_t mask;
Int_t mode, coincidence;
- Int_t localBoardId = 0;
+ Int_t nofBoards;
char line[80];
-
+
+ // decode file and store in objects
while (!in.eof())
{
+ // Get name
in.getline(line,80);
if (!strlen(line)) break;
TString crateName(AliMpHelper::Normalize(line));
-
+
in.getline(line,80);
- sscanf(line,"%hx",&crateId);
+ // read mode
in.getline(line,80);
sscanf(line,"%d",&mode);
-
+
+ // read coincidence
in.getline(line,80);
sscanf(line,"%d",&coincidence);
-
+
+ // read mask
in.getline(line,80);
sscanf(line,"%hx",&mask);
- crate = (AliMUONTriggerCrateConfig*)(fTriggerCrates.GetValue(crateName.Data()));
- if (!crate)
- {
- // cout << "Creating crate: " << crateName.Data() << endl;
- crate = new AliMUONTriggerCrateConfig(crateName.Data(), crateId, mask, mode, coincidence);
- fTriggerCrates.Add(crateName.Data(), crate);
+ // read # local board
+ in.getline(line,80);
+ sscanf(line,"%d",&nofBoards);
+
+ AliMUONTriggerCrateConfig* crateConfig
+ = (AliMUONTriggerCrateConfig*)(fTriggerCrates.GetValue(crateName.Data()));
+
+ // This should never happen, but let's test it anyway
+ if ( ! crateConfig ) {
+ AliErrorStream()
+ << "Cannot find AliMUONTriggerCrateConfig " << crateName.Data() << endl;
+ return 0;
}
+
+ crateConfig->SetMode(mode);
+ crateConfig->SetCoinc(coincidence);
+ crateConfig->SetMask(mask);
- Char_t localBoardName[20];
- Int_t slot;
- UInt_t switches;
-
- for ( Int_t i = 0; i < AliMpConstants::LocalBoardNofChannels(); ++i )
- {
- if ( (mask >> i ) & 0x1 )
- {
- // read local board
- in.getline(line,80);
- sscanf(line,"%02d %s %03d %03x",&slot,localBoardName,&localBoardId,&switches);
- crate->AddLocalBoard(localBoardId);
-
- // skip DEs for local board
- in.getline(line,80);
-
- // skip copy number and transverse connector
+ // Skipp local board data
+ for ( Int_t i = 0; i < 3*nofBoards; ++i )
in.getline(line,80);
- }
- }
}
+
return fTriggerCrates.GetSize();
}
-
//______________________________________________________________________________
AliMUONTriggerCrateConfig* AliMUONRegionalTriggerConfig::FindTriggerCrate(TString name,
- Bool_t warn) const {
+ Bool_t warn) const
+{
/// Return trigger crate with given name
AliMUONTriggerCrateConfig* crate
}
//______________________________________________________________________________
-AliMUONTriggerCrateConfig* AliMUONRegionalTriggerConfig::GetTriggerCrate(Int_t index) const
+TIterator*
+AliMUONRegionalTriggerConfig::CreateCrateIterator() const
{
- /// Return the trigger crates with given index;
-
- return static_cast<AliMUONTriggerCrateConfig*>(fTriggerCrates.GetObject(index));
-}
-
-//______________________________________________________________________________
-AliMUONTriggerCrateConfig* AliMUONRegionalTriggerConfig::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.
-
- return static_cast<AliMUONTriggerCrateConfig*>(fTriggerCrates.GetObjectFast(index));
+ /// Return trigger crates iterator
+ return fTriggerCrates.CreateIterator();
}