]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - MUON/AliMUONRawWriter.cxx
Fixed Coverity defect (DIVIDE_BY_ZERO)
[u/mrichter/AliRoot.git] / MUON / AliMUONRawWriter.cxx
index 12cbfa46e180ff26887647de178663cbe1e9c0bd..d783d441343da0765c2f3ef031dfe37f96ec0cbe 100644 (file)
@@ -63,6 +63,7 @@
 #include "AliMUONVTriggerStore.h"
 #include "AliCodeTimer.h"
 
+#include "AliMpCDB.h"
 #include "AliMpDDLStore.h"
 #include "AliMpDDL.h"
 #include "AliMpRegionalTrigger.h"
@@ -113,6 +114,13 @@ AliMUONRawWriter::AliMUONRawWriter()
   fBlockHeader->SetDataKey(fBlockHeader->GetDefaultDataKey());
   fDspHeader->SetDataKey(fDspHeader->GetDefaultDataKey());
 
+  // Load mapping
+  if ( ! fDDLStore ) {
+    if ( ! AliMpCDB::LoadDDLStore() ) {
+      AliFatal("Could not access mapping from OCDB !");
+    }
+    fDDLStore = AliMpDDLStore::Instance();
+  }  
 }
 
 //__________________________________________________________________________
@@ -148,21 +156,20 @@ void  AliMUONRawWriter::LocalWordPacking(UInt_t& word, UInt_t locId, UInt_t locD
 }
 
 //____________________________________________________________________
-Int_t AliMUONRawWriter::Digits2Raw(AliMUONVDigitStore* digitStore,
-                                   AliMUONVTriggerStore* triggerStore)
+Int_t AliMUONRawWriter::Digits2Raw(const AliMUONVDigitStore* digitStore,
+                                   const AliMUONVTriggerStore* triggerStore)
 {
   /// convert digits of the current event to raw data
 
-  AliCodeTimerAuto("")
+  AliCodeTimerAuto("",0)
   
   Int_t idDDL;
-  Char_t name[255];
 
   // tracking chambers
   
   if ( digitStore ) 
   {
-    AliCodeTimerAuto("for Tracker")
+    AliCodeTimerAuto("for Tracker",1)
 
     AliMpExMap busPatchMap;
 
@@ -189,7 +196,7 @@ Int_t AliMUONRawWriter::Digits2Raw(AliMUONVDigitStore* digitStore,
  
   if ( triggerStore )
   {
-    AliCodeTimerAuto("for Trigger")
+    AliCodeTimerAuto("for Trigger",1)
 
     // trigger chambers
     
@@ -197,12 +204,10 @@ Int_t AliMUONRawWriter::Digits2Raw(AliMUONVDigitStore* digitStore,
     
     // open files
     idDDL = 0;// MUTR
-    strcpy(name,AliDAQ::DdlFileName("MUONTRG",idDDL));
-    file[0] = new AliFstream(name);
+    file[0] = new AliFstream(AliDAQ::DdlFileName("MUONTRG",idDDL));
     
     idDDL = 1;// MUTR
-    strcpy(name,AliDAQ::DdlFileName("MUONTRG",idDDL));
-    file[1] = new AliFstream(name);
+    file[1] = new AliFstream(AliDAQ::DdlFileName("MUONTRG",idDDL));
       
     WriteTriggerDDL(*triggerStore,file);
       
@@ -223,7 +228,7 @@ AliMUONRawWriter::Digits2BusPatchMap(const AliMUONVDigitStore& digitStore,
 {
   /// Create bus patch structures corresponding to digits in the store
   
-  AliCodeTimerAuto("")
+  AliCodeTimerAuto("",0)
   
   static const Int_t kMAXADC = (1<<12)-1; // We code the charge on a 12 bits ADC.
     
@@ -316,7 +321,7 @@ AliMUONRawWriter::WriteTrackerDDL(AliMpExMap& busPatchMap, Int_t iDDL)
   // (((43 manus max per bus patch *64 channels + 4 bus patch words) * 5 bus patch 
   //   + 10 dsp words)*5 dsps + 8 block words)*2 blocks 
  
-  AliCodeTimerAuto("")
+  AliCodeTimerAuto("",0)
 
   if (fHeader == 0x0) {
     AliError("Raw data header must be set");
@@ -450,7 +455,7 @@ Int_t AliMUONRawWriter::WriteTriggerDDL(const AliMUONVTriggerStore& triggerStore
 {
   /// Write trigger DDL
   
-  AliCodeTimerAuto("")
+  AliCodeTimerAuto("",0)
 
   if (fHeader == 0x0) {
     AliError("Raw data header must be set");
@@ -563,7 +568,7 @@ Int_t AliMUONRawWriter::WriteTriggerDDL(const AliMUONVTriggerStore& triggerStore
 
     if (fScalerEvent) {
       // 10 Global scaler words
-      memcpy(fDarcHeader->GetGlobalScalers(), &buffer[index], kGlobalScalerLength*4);
+      memcpy(&buffer[index], fDarcHeader->GetGlobalScalers(), kGlobalScalerLength*4);
       index += kGlobalScalerLength;
     }
 
@@ -578,13 +583,17 @@ Int_t AliMUONRawWriter::WriteTriggerDDL(const AliMUONVTriggerStore& triggerStore
         // crate info
       AliMpTriggerCrate* crate = AliMpDDLStore::Instance()->GetTriggerCrate(iDDL, iReg);
 
-      if (!crate) 
-       AliWarning(Form("Missing crate number %d in DDL %d\n", iReg, iDDL));
+      if (!crate) {
+        AliError(Form("Missing crate number %d in DDL %d\n", iReg, iDDL));
+        continue;
+      }  
 
       // regional info tree, make sure that no reg card missing
       AliMUONRegionalTrigger* regTrg  = triggerStore.FindRegional(crate->GetId());
-      if (!regTrg) 
+      if (!regTrg) {
         AliError(Form("Missing regional board %d in trigger Store\n", crate->GetId()));
+        continue;
+      }  
     
       // Regional card header
       word = 0;
@@ -593,8 +602,8 @@ Int_t AliMUONRawWriter::WriteTriggerDDL(const AliMUONVTriggerStore& triggerStore
       fRegHeader->SetDarcWord(word);
 
       regOut    = regTrg->GetOutput();
-      regInpHpt = regTrg->GetLocalOutput(0);
-      regInpLpt = regTrg->GetLocalOutput(1);
+      regInpLpt = regTrg->GetLocalOutput(0);
+      regInpHpt = regTrg->GetLocalOutput(1);
 
       // fill darc word, not darc status for the moment (empty)
       //see  AliMUONRegHeader.h for details
@@ -635,28 +644,29 @@ Int_t AliMUONRawWriter::WriteTriggerDDL(const AliMUONVTriggerStore& triggerStore
          if (localBoard->IsNotified()) {// if notified board 
            AliMUONLocalTrigger* locTrg = triggerStore.FindLocal(localBoardId);
 
-           locCard = locTrg->LoCircuit();
-           locDec  = locTrg->GetLoDecision();
-           trigY   = locTrg->LoTrigY();
-           posY    = locTrg->LoStripY();
-           posX    = locTrg->LoStripX();
-           devX    = locTrg->LoDev();
-           sdevX   = locTrg->LoSdev();
-                 
-           AliDebug(4,Form("loctrg %d, posX %d, posY %d, devX %d\n", 
-                           locTrg->LoCircuit(),locTrg->LoStripX(),locTrg->LoStripY(),locTrg->LoDev()));  
-           //packing word
-           word = 0;
-           LocalWordPacking(word, (UInt_t)iLoc, (UInt_t)locDec, (UInt_t)trigY, (UInt_t)posY, 
-                            (UInt_t)posX, (UInt_t)sdevX, (UInt_t)devX);
-
-           buffer[index++] = (locTrg->GetX1Pattern() | (locTrg->GetX2Pattern() << 16));
-           buffer[index++] = (locTrg->GetX3Pattern() | (locTrg->GetX4Pattern() << 16));
-           buffer[index++] = (locTrg->GetY1Pattern() | (locTrg->GetY2Pattern() << 16));
-           buffer[index++] = (locTrg->GetY3Pattern() | (locTrg->GetY4Pattern() << 16));
-           buffer[index++] = (Int_t)word; // data word
-                     
-               
+      if (locTrg)
+      {
+        locCard = locTrg->LoCircuit();
+        locDec  = locTrg->GetLoDecision();
+        trigY   = locTrg->LoTrigY();
+        posY    = locTrg->LoStripY();
+        posX    = locTrg->LoStripX();
+        devX    = locTrg->LoDev();
+        sdevX   = locTrg->LoSdev();
+        
+        AliDebug(4,Form("loctrg %d, posX %d, posY %d, devX %d\n", 
+                        locTrg->LoCircuit(),locTrg->LoStripX(),locTrg->LoStripY(),locTrg->LoDev()));  
+        //packing word
+        word = 0;
+        LocalWordPacking(word, (UInt_t)iLoc, (UInt_t)locDec, (UInt_t)trigY, (UInt_t)posY, 
+                         (UInt_t)posX, (UInt_t)sdevX, (UInt_t)devX);
+        
+        buffer[index++] = (locTrg->GetX1Pattern() | (locTrg->GetX2Pattern() << 16));
+        buffer[index++] = (locTrg->GetX3Pattern() | (locTrg->GetX4Pattern() << 16));
+        buffer[index++] = (locTrg->GetY1Pattern() | (locTrg->GetY2Pattern() << 16));
+        buffer[index++] = (locTrg->GetY3Pattern() | (locTrg->GetY4Pattern() << 16));
+        buffer[index++] = (Int_t)word; // data word
+      }
          }
          // fill copy card X-Y inputs from the notified cards 
          if (localBoard->GetInputXfrom() && localBoard->GetInputYfrom()) 
@@ -670,11 +680,14 @@ Int_t AliMUONRawWriter::WriteTriggerDDL(const AliMUONVTriggerStore& triggerStore
            Int_t localFromId = localBoard->GetInputXfrom();
            AliMUONLocalTrigger* locTrgfrom  = triggerStore.FindLocal(localFromId);
 
-           buffer[index++] = 0; // copy only X3-4 & Y1-4
-           buffer[index++] = (locTrgfrom->GetX3Pattern() | (locTrgfrom->GetX4Pattern() << 16));
-           buffer[index++] = (locTrgfrom->GetY1Pattern() | (locTrgfrom->GetY2Pattern() << 16));
-           buffer[index++] = (locTrgfrom->GetY3Pattern() | (locTrgfrom->GetY4Pattern() << 16));
-           buffer[index++] = word;
+      if ( locTrgfrom ) 
+      {
+        buffer[index++] = 0; // copy only X3-4 & Y1-4
+        buffer[index++] = (locTrgfrom->GetX3Pattern() | (locTrgfrom->GetX4Pattern() << 16));
+        buffer[index++] = (locTrgfrom->GetY1Pattern() | (locTrgfrom->GetY2Pattern() << 16));
+        buffer[index++] = (locTrgfrom->GetY3Pattern() | (locTrgfrom->GetY4Pattern() << 16));
+        buffer[index++] = word;
+      }
          }
 
        } else { 
@@ -694,7 +707,7 @@ Int_t AliMUONRawWriter::WriteTriggerDDL(const AliMUONVTriggerStore& triggerStore
          
       } // local card 
       // fill regional header with local output
-      fRegHeader->SetInput(regInpHpt, 0);
+      fRegHeader->SetInput(regInpLpt, 0);
       fRegHeader->SetInput(regInpHpt, 1);
       memcpy(&buffer[indexReg],fRegHeader->GetHeader(),kRegHeaderLength*4);