X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=MUON%2FAliMUONTriggerElectronics.cxx;h=b2e8b9b3bebd25756f18acf2fdd34b13835fd85d;hb=116c6c505147540eabf82e361a2405eda869db53;hp=a400f5fff3c0d4c0b59e89bdcfa733ca88ec8ed1;hpb=fd19a81944b32810d520f56070dc0ecadf726072;p=u%2Fmrichter%2FAliRoot.git diff --git a/MUON/AliMUONTriggerElectronics.cxx b/MUON/AliMUONTriggerElectronics.cxx index a400f5fff3c..b2e8b9b3beb 100644 --- a/MUON/AliMUONTriggerElectronics.cxx +++ b/MUON/AliMUONTriggerElectronics.cxx @@ -15,12 +15,16 @@ /* $Id$ */ -//*-- Author: Rachid Guernane (LPCCFd) -//* Manager class for muon trigger electronics -//* Client of trigger board classes -//* Debugged by Ph. Crochet & Ch. Finck -//* Interfaced with new mapping Ch. Finck -//* +//----------------------------------------------------------------------------- +// Class AliMUONTriggerElectronics +//-------------------------------- +// Manager class for muon trigger electronics +// Client of trigger board classes +// Debugged by Ph. Crochet & Ch. Finck +// Interfaced with new mapping Ch. Finck +// +// Author: Rachid Guernane (LPCCFd) +//----------------------------------------------------------------------------- #include "AliLoader.h" #include "AliLog.h" @@ -37,6 +41,9 @@ #include "AliMUONTriggerCrate.h" #include "AliMUONTriggerCrateStore.h" #include "AliMUONTriggerElectronics.h" +#include "AliMUONTriggerCrateConfig.h" +#include "AliMUONRegionalTriggerConfig.h" +#include "AliMUONGlobalCrateConfig.h" #include "AliMUONVTriggerStore.h" #include "AliMUONVCalibParam.h" #include "AliMpCathodType.h" @@ -78,8 +85,9 @@ AliMUONTriggerElectronics::AliMUONTriggerElectronics(AliMUONCalibrationData* cal } SetCopyInput(); + Factory(calibData); - LoadMasks(calibData); + LoadMasks(calibData); } //___________________________________________ @@ -95,22 +103,23 @@ AliMUONTriggerElectronics::~AliMUONTriggerElectronics() } } + //___________________________________________ void AliMUONTriggerElectronics::SetCopyInput() { -/// set list of copy input - + /// set list of copy input + for (Int_t iDDL = 0; iDDL < 2; ++iDDL) { - + for(Int_t iReg = 0; iReg < 8; ++iReg){ //reg loop - + AliMpTriggerCrate* crateMapping = AliMpDDLStore::Instance()->GetTriggerCrate(iDDL, iReg); - + for(Int_t iLocal = 0; iLocal < crateMapping->GetNofLocalBoards(); ++iLocal) { - + Int_t localBoardFromId = crateMapping->GetLocalBoardId(iLocal); if (!localBoardFromId) continue; //empty slot, should not happen - + AliMpLocalBoard* localBoardFrom = AliMpDDLStore::Instance()->GetLocalBoard(localBoardFromId); Int_t localBoardToId; if ((localBoardToId = localBoardFrom->GetInputXto())) { @@ -119,25 +128,25 @@ void AliMUONTriggerElectronics::SetCopyInput() Int_t slotFrom = localBoardFrom->GetSlot(); TString crateTo = localBoardTo->GetCrate(); Int_t slotTo = localBoardTo->GetSlot(); - + fCopyXInput[0]->Add(new AliMpIntPair(AliMpExMap::GetIndex(crateFrom), slotFrom)); fCopyXInput[1]->Add(new AliMpIntPair(AliMpExMap::GetIndex(crateTo), slotTo)); AliDebug(3, Form("copy xInputs from local %s_%d to %s_%d\n", crateFrom.Data(), slotFrom, crateTo.Data(), slotTo)); } - + if ((localBoardToId = localBoardFrom->GetInputYto())) { AliMpLocalBoard* localBoardTo = AliMpDDLStore::Instance()->GetLocalBoard(localBoardToId); TString crateFrom = localBoardFrom->GetCrate(); Int_t slotFrom = localBoardFrom->GetSlot(); TString crateTo = localBoardTo->GetCrate(); Int_t slotTo = localBoardTo->GetSlot(); - + fCopyYInput[0]->Add(new AliMpIntPair(AliMpExMap::GetIndex(crateFrom), slotFrom)); fCopyYInput[1]->Add(new AliMpIntPair(AliMpExMap::GetIndex(crateTo), slotTo)); AliDebug(3, Form("copy yInputs from local %s_%d to %s_%d\n", crateFrom.Data(), slotFrom, crateTo.Data(), slotTo)); - + } } @@ -151,31 +160,7 @@ void AliMUONTriggerElectronics::Factory(AliMUONCalibrationData* calibData) /// BUILD ALL ELECTRONICS /// -// get coinc44 from AliMUON (added 12/09/06) - AliMUON *pMUON = (AliMUON*)gAlice->GetModule("MUON"); - Int_t coinc44 = pMUON->GetTriggerCoinc44(); - if (coinc44 != 0 && coinc44 != 1) { - AliFatal("Coinc 44 should be equal to 0 or 1"); - return; - } - - fCrates->ReadFromFile(); - - if ( !calibData ) return; - - AliMUONTriggerLut* lut = calibData->TriggerLut(); - - if (!lut) return; - - AliMUONLocalTriggerBoard* localBoard; - - fCrates->FirstLocalBoard(); - - while ( (localBoard=fCrates->NextLocalBoard()) ) - { - localBoard->SetLUT(lut); - localBoard->SetCoinc44(coinc44); - } + fCrates->ReadFromFile(calibData); } //___________________________________________ @@ -290,10 +275,9 @@ void AliMUONTriggerElectronics::Feed(const AliMUONVDigitStore& digitStore) // FILL UP/DOWN OF CURRENT BOARD (DONE VIA J3 BUS IN REAL LIFE) AliMUONTriggerCrate* cr; + TIter next2(fCrates->CreateCrateIterator()); - fCrates->FirstCrate(); - - while ( ( cr = fCrates->NextCrate() ) ) + while ( ( cr = static_cast(next2()) ) ) { TObjArray *boards = cr->Boards(); @@ -333,10 +317,9 @@ void AliMUONTriggerElectronics::Feed(UShort_t pattern[2][4]) /// FILL INPUTS /// AliMUONTriggerCrate* cr; + TIter next(fCrates->CreateCrateIterator()); - fCrates->FirstCrate(); - - while ( ( cr = fCrates->NextCrate() ) ) + while ( ( cr = static_cast(next()) ) ) { TObjArray *boards = cr->Boards(); @@ -373,10 +356,9 @@ void AliMUONTriggerElectronics::Scan(Option_t *option) /// AliMUONTriggerCrate* cr; + TIter next(fCrates->CreateCrateIterator()); - fCrates->FirstCrate(); - - while ( ( cr = fCrates->NextCrate() ) ) + while ( ( cr = static_cast(next()) ) ) { TObjArray *boards = cr->Boards(); @@ -408,10 +390,8 @@ void AliMUONTriggerElectronics::Reset() /// AliMUONTriggerCrate* cr; - - fCrates->FirstCrate(); - - while ( ( cr = fCrates->NextCrate() ) ) + TIter next(fCrates->CreateCrateIterator()); + while ( ( cr = static_cast(next()) ) ) { TObjArray *boards = cr->Boards(); @@ -424,35 +404,42 @@ void AliMUONTriggerElectronics::Reset() } } + //_______________________________________________________________________ void AliMUONTriggerElectronics::LoadMasks(AliMUONCalibrationData* calibData) { - /// LOAD MASKS FROM CDB + /// Load mask from config in CDB + // Set mask + + AliMUONRegionalTriggerConfig* regionalConfig = calibData->RegionalTriggerConfig(); + if (!regionalConfig) + AliWarning("No valid regional trigger configuration in CDB"); - // SET MASKS AliMUONTriggerCrate* cr; - - fCrates->FirstCrate(); + TIter next(fCrates->CreateCrateIterator()); Int_t irb(0); - while ( ( cr = fCrates->NextCrate() ) ) + while ( ( cr = static_cast(next()) ) ) { TObjArray *boards = cr->Boards(); - AliMUONRegionalTriggerBoard *regb = - (AliMUONRegionalTriggerBoard*)boards->At(0); + AliMUONRegionalTriggerBoard *regb = (AliMUONRegionalTriggerBoard*)boards->At(0); - AliMUONVCalibParam* regionalBoardMasks = calibData->RegionalTriggerBoardMasks(irb); + AliMUONTriggerCrateConfig* crateConfig = regionalConfig->FindTriggerCrate(cr->GetName()); - for ( Int_t i = 0; i < regionalBoardMasks->Size(); ++i ) + if (!crateConfig) { - UShort_t rmask = static_cast(regionalBoardMasks->ValueAsInt(i) & 0x3F); - regb->Mask(i,rmask); + AliError(Form("Crate %s not present in configuration !!!", cr->GetName())); + return; } + UShort_t rmask= crateConfig->GetMask(); + + regb->Mask(rmask); + for (Int_t j = 1; j < boards->GetEntries(); j++) { AliMUONLocalTriggerBoard *b = (AliMUONLocalTriggerBoard*)boards->At(j); @@ -472,25 +459,27 @@ void AliMUONTriggerElectronics::LoadMasks(AliMUONCalibrationData* calibData) ++irb; } - AliMUONVCalibParam* globalBoardMasks = calibData->GlobalTriggerBoardMasks(); - for ( Int_t i = 0; i < globalBoardMasks->Size(); ++i ) - { - UShort_t gmask = static_cast(globalBoardMasks->ValueAsInt(i) & 0xFFF); - fGlobalTriggerBoard->Mask(i,gmask); - } -} + AliMUONGlobalCrateConfig * globalConfig = calibData->GlobalTriggerCrateConfig(); + if (!globalConfig) + AliWarning("No valid trigger crate configuration in CDB"); + + UShort_t gmask = 0; + gmask = globalConfig->GetFirstDarcDisable(); + fGlobalTriggerBoard->Mask(0,gmask); + gmask = globalConfig->GetSecondDarcDisable(); + fGlobalTriggerBoard->Mask(1,gmask); +} //___________________________________________ void AliMUONTriggerElectronics::LocalResponse() { -/// \todo add comment +/// Compute the response for local cards AliMUONTriggerCrate* cr; + TIter next(fCrates->CreateCrateIterator()); - fCrates->FirstCrate(); - - while ( ( cr = fCrates->NextCrate() ) ) + while ( ( cr = static_cast(next()) ) ) { TObjArray *boards = cr->Boards(); @@ -536,10 +525,9 @@ void AliMUONTriggerElectronics::RegionalResponse() { /// Compute the response for all regional cards. AliMUONTriggerCrate* cr; + TIter next(fCrates->CreateCrateIterator()); - fCrates->FirstCrate(); - - while ( ( cr = fCrates->NextCrate() ) ) + while ( ( cr = static_cast(next()) ) ) { TObjArray *boards = cr->Boards(); @@ -560,8 +548,6 @@ void AliMUONTriggerElectronics::GlobalResponse() UShort_t regional[16]; AliMUONTriggerCrate* cr; - - fCrates->FirstCrate(); Int_t irb(0); if ( !fCrates->NumberOfCrates() >= 16 ) @@ -569,8 +555,10 @@ void AliMUONTriggerElectronics::GlobalResponse() AliFatal(Form("Something is wrong : too many crates %d", fCrates->NumberOfCrates())); } - - while ( ( cr = fCrates->NextCrate() ) ) + + TIter next(fCrates->CreateCrateIterator()); + + while ( ( cr = static_cast(next()))) { AliMUONTriggerBoard* rb = static_cast(cr->Boards()->At(0));