From 5a92f8e68be78131761a3edee3059bbc1e0de341 Mon Sep 17 00:00:00 2001 From: pcrochet Date: Mon, 5 Feb 2007 16:48:49 +0000 Subject: [PATCH] bug fixed & correct handling of local empty slots and copy cards (Christian) --- MUON/AliMUONDigitMaker.cxx | 9 +- MUON/AliMUONPayloadTrigger.cxx | 7 +- MUON/AliMUONTriggerCrateStore.cxx | 132 +++++++++++++++--------------- 3 files changed, 76 insertions(+), 72 deletions(-) diff --git a/MUON/AliMUONDigitMaker.cxx b/MUON/AliMUONDigitMaker.cxx index 624c8b6ff5a..1cc2c4ed115 100644 --- a/MUON/AliMUONDigitMaker.cxx +++ b/MUON/AliMUONDigitMaker.cxx @@ -350,14 +350,15 @@ Int_t AliMUONDigitMaker::ReadTriggerDDL(AliRawReader* rawReader) localStruct = regHeader->GetLocalEntry(iLocal); - // if card has triggered - if (!localStruct->GetTriggerY() || !localStruct->GetTriggerX()) { - + // if card exist + if (localStruct) { AliMUONLocalTriggerBoard* localBoard = (AliMUONLocalTriggerBoard*)boards->At(localStruct->GetId()+1); - loCircuit = localBoard->GetNumber(); + // skip copy cards + if( !(loCircuit = localBoard->GetNumber()) ) + continue; if (fDigitFlag) { // fill local trigger diff --git a/MUON/AliMUONPayloadTrigger.cxx b/MUON/AliMUONPayloadTrigger.cxx index 2a871082cb7..2d57c95b4f1 100644 --- a/MUON/AliMUONPayloadTrigger.cxx +++ b/MUON/AliMUONPayloadTrigger.cxx @@ -72,7 +72,7 @@ AliMUONPayloadTrigger::~AliMUONPayloadTrigger() Bool_t AliMUONPayloadTrigger::Decode(UInt_t *buffer) { /// decode trigger DDL - /// store only non-empty structures (TrigY ==0) + /// store only notified cards // reading DDL for trigger @@ -165,7 +165,10 @@ Bool_t AliMUONPayloadTrigger::Decode(UInt_t *buffer) #else printf("Wrong end of local word %x instead of %x\n",buffer[index-1], fLocalStruct->GetEndOfLocal()); #endif - + // fill only if card notified + if (fLocalStruct->GetData(0) == fLocalStruct->GetDisableWord()) + continue; + fDDLTrigger->AddLocStruct(*fLocalStruct, iReg); } // local card loop diff --git a/MUON/AliMUONTriggerCrateStore.cxx b/MUON/AliMUONTriggerCrateStore.cxx index de30d1d1393..6de3e59242c 100644 --- a/MUON/AliMUONTriggerCrateStore.cxx +++ b/MUON/AliMUONTriggerCrateStore.cxx @@ -272,104 +272,104 @@ AliMUONTriggerCrateStore::NumberOfLocalBoards() const void AliMUONTriggerCrateStore::ReadFromFile(const char* file) { - /// Read crate and local board information from file. - fCrates = new AliMpExMap(kTRUE); - fLocalBoards = new AliMpExMap(kFALSE); + /// Read crate and local board information from file. + fCrates = new AliMpExMap(kTRUE); + fLocalBoards = new AliMpExMap(kFALSE); - ifstream myInputFile(gSystem->ExpandPathName(file), ios::in); + ifstream myInputFile(gSystem->ExpandPathName(file), ios::in); - string sLine, sValue; + string sLine, sValue; - if ( !myInputFile ) - { - AliError("TRIGGER ELECTRONICS CONFIGURATION FILE COULD NOT BE OPENED"); - } - else - { - while (getline(myInputFile,sLine)) + if ( !myInputFile ) { - if (sLine.empty()) continue; // Ignore empty lines - else + AliError("TRIGGER ELECTRONICS CONFIGURATION FILE COULD NOT BE OPENED"); + } + else + { + while (getline(myInputFile,sLine)) { - const Int_t kMaxfields = 15; char **fields = new char*[kMaxfields]; + if (sLine.empty()) continue; // Ignore empty lines + else + { + const Int_t kMaxfields = 15; char **fields = new char*[kMaxfields]; - char s[100]; + char s[100]; - if (sLine.find("Board",0) != string::npos) - { - strcpy(s,sLine.c_str()); + if (sLine.find("Board",0) != string::npos) + { + strcpy(s,sLine.c_str()); - Int_t numlines = 0; + Int_t numlines = 0; - for (char *token = strtok(s, " "); - token != NULL; - token = strtok(NULL, " ")) - { - fields[numlines] = new char[strlen(token)+1]; - strcpy(fields[numlines++],token); - } + for (char *token = strtok(s, " "); + token != NULL; + token = strtok(NULL, " ")) + { + fields[numlines] = new char[strlen(token)+1]; + strcpy(fields[numlines++],token); + } - char str[10]; strcpy(str, fields[6]); strcat(str, fields[7]); + char str[10]; strcpy(str, fields[6]); strcat(str, fields[7]); - AliMUONTriggerCrate *crate = Crate(str); + AliMUONTriggerCrate *crate = Crate(str); - if (!crate) - { - AddCrate(str); crate = Crate(str); + if (!crate) + { + AddCrate(str); crate = Crate(str); - AliMUONRegionalTriggerBoard *rboard = new AliMUONRegionalTriggerBoard(); - crate->AddBoard(rboard, 0); - } + AliMUONRegionalTriggerBoard *rboard = new AliMUONRegionalTriggerBoard(); + crate->AddBoard(rboard, 0); + } - // CONVENTION: SLOT 0 HOLDS THE REGIONAL BOARD - Int_t sl = atoi(fields[10]); + // CONVENTION: SLOT 0 HOLDS THE REGIONAL BOARD + Int_t sl = atoi(fields[10]); // AliMUONTriggerLut* lut = calibData->TriggerLut(); - AliMUONLocalTriggerBoard *board = - new AliMUONLocalTriggerBoard(fields[4], sl, 0x0); + AliMUONLocalTriggerBoard *board = + new AliMUONLocalTriggerBoard(fields[4], sl, 0x0); - if (strcmp(fields[1],"nn")) - { - Int_t sboard = atoi(fields[1]); + if (strcmp(fields[1],"nn")) + { + Int_t sboard = atoi(fields[1]); - board->SetNumber(sboard); - fLocalBoards->Add(sboard,board); + board->SetNumber(sboard); + fLocalBoards->Add(sboard,board); -// fCrateMap[sboard-1] = new char[strlen(str)+1]; strcpy(fCrateMap[sboard-1], str); -// fBoardMap[sboard-1] = sl; - } +// fCrateMap[sboard-1] = new char[strlen(str)+1]; strcpy(fCrateMap[sboard-1], str); +// fBoardMap[sboard-1] = sl; + } - board->SetCrate(str); + board->SetCrate(str); - crate->AddBoard(board, sl); + crate->AddBoard(board, sl); - while (getline(myInputFile,sLine)) if (sLine.find("transv",0) != string::npos) break; + while (getline(myInputFile,sLine)) if (sLine.find("transv",0) != string::npos) break; - strcpy(s,sLine.c_str()); + strcpy(s,sLine.c_str()); - for (char *token = strtok(s, " "); - token != NULL; - token = strtok(NULL, " ")) if (!strcmp(token,"NONE")) board->SetTC(kFALSE); + for (char *token = strtok(s, " "); + token != NULL; + token = strtok(NULL, " ")) if (!strcmp(token,"NONE")) board->SetTC(kFALSE); - while (getline(myInputFile,sLine)) if (sLine.find("Switch",0) != string::npos) break; + while (getline(myInputFile,sLine)) if (sLine.find("Switch",0) != string::npos) break; - while (getline(myInputFile,sLine)) if (!sLine.empty()) break; + while (getline(myInputFile,sLine)) if (!sLine.empty()) break; - strcpy(s,sLine.c_str()); + strcpy(s,sLine.c_str()); - Int_t lines = 0; + Int_t lines = 0; - for (char *token = strtok(s, " "); - token != NULL; - token = strtok(NULL, " ")) board->SetSwitch(lines++, atoi(token)); + for (char *token = strtok(s, " "); + token != NULL; + token = strtok(NULL, " ")) board->SetSwitch(lines++, atoi(token)); - for (Int_t i = 0; i