]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
bug fixed & correct handling of local empty slots and copy cards (Christian)
authorpcrochet <pcrochet@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 5 Feb 2007 16:48:49 +0000 (16:48 +0000)
committerpcrochet <pcrochet@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 5 Feb 2007 16:48:49 +0000 (16:48 +0000)
MUON/AliMUONDigitMaker.cxx
MUON/AliMUONPayloadTrigger.cxx
MUON/AliMUONTriggerCrateStore.cxx

index 624c8b6ff5ae045c768aacc1fcaffae2f9130484..1cc2c4ed1158826c537cb84c141cb78a2d742105 100644 (file)
@@ -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
index 2a871082cb7b05ac7b41b6dee8edfcc48a88b018..2d57c95b4f18479c55605dfa341aed15f1305e70 100644 (file)
@@ -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
index de30d1d1393b00fd97b5c6b28755c755ae6a3a50..6de3e59242cad105ec57f271d9acddf89cd9b19f 100644 (file)
@@ -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<numlines; i++) 
-            if (fields[i]) {delete [] fields[i]; fields[i] = 0;}
+           for (Int_t i = 0; i<numlines; i++) 
+               if (fields[i]) {delete [] fields[i]; fields[i] = 0;}
               
-              delete [] fields; fields = 0;
-        }
+           delete [] fields; fields = 0;
+         }
+       }
       }
     }
-  }
 }