]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - MUON/AliMUONLocalTriggerBoard.cxx
Added protection and 2 levels for problems
[u/mrichter/AliRoot.git] / MUON / AliMUONLocalTriggerBoard.cxx
index 37fe3a7049537f19cd26a54a337fc7ec60cbe2f2..937d7cf891d601f87a673fa1aed58cc9ef27f763 100644 (file)
@@ -63,8 +63,9 @@ AliMUONLocalTriggerBoard::AliMUONLocalTriggerBoard()
       fCrate(0),
       fTC(kTRUE),
       fStripX11(0),
-      fStripY11(0),
+      fStripY11(15),
       fDev(0),
+      fTrigY(1),
       fOutput(0),
       fLUT(0x0),
       fCoinc44(0)      
@@ -95,8 +96,9 @@ AliMUONLocalTriggerBoard::AliMUONLocalTriggerBoard(const char *name, Int_t a,
       fCrate(0),
       fTC(kTRUE),
       fStripX11(0),
-      fStripY11(0),
+      fStripY11(15),
       fDev(0),
+      fTrigY(1),
       fOutput(0),
       fLUT(lut),
       fCoinc44(0)
@@ -140,7 +142,10 @@ void AliMUONLocalTriggerBoard::Reset()
 
    fOutput = 0;
    
-   fStripX11 = fStripY11 = fDev = 0;
+   fStripX11 = 0;
+   fStripY11 = 15;
+   fDev = 0;
+   fTrigY = 1;
 
    for (Int_t i=0; i<2; i++) fLutLpt[i] = fLutHpt[i] = 0;
 }
@@ -1055,40 +1060,49 @@ void AliMUONLocalTriggerBoard::LocalTrigger()
 {
 /// L0 trigger after LUT
 ///
-    Int_t deviation=0, iStripY=0, iStripX=0;
+    Int_t deviation=0;
+    Int_t iStripY=0;
+    Int_t iStripX=0;
+    Bool_t xOutput=kFALSE;
+    Bool_t yOutput=kFALSE;
 
    for (Int_t i=0; i<4; i++) deviation += static_cast<int>( fMinDev[i] << i );
    for (Int_t i=0; i<4; i++) iStripY   += static_cast<int>( fCoordY[i] << i );
 
-   if (fMinDev[4]==1 && !deviation) fOutput=0;     // No trigger
-   else 
-   {
-      if (fCoordY[4]==1 && iStripY==15) fOutput=0; // No trigger
-      else 
-         fOutput=1;
-   }
-  
-   if (fOutput) 
-   { 
-      for (Int_t i=0; i<5; i++) iStripX += static_cast<int>( fMinDevStrip[i] << i );
+   if (fMinDev[4]==1 && !deviation) xOutput=kFALSE;  // no trigger in X
+   else xOutput=kTRUE;                               // trigger in X
+   if (fCoordY[4]==1 && iStripY==15) yOutput=kFALSE; // no trigger in Y
+   else yOutput=kTRUE;                               // trigger in Y
 
+   if (xOutput) {
+      for (Int_t i=0; i<5; i++) iStripX += static_cast<int>( fMinDevStrip[i] << i );
       fDev      = deviation;
-      fStripY11 = iStripY;
       fStripX11 = iStripX;
-
-      Int_t sign = 0;
-
-      if ( !fMinDev[4] &&  deviation ) sign=-1;
-      if ( !fMinDev[4] && !deviation ) sign= 0;
-      if (  fMinDev[4] == 1 )          sign=+1;    
-
-      fDev *= sign; 
-
+   }
+   if (yOutput) {
+      fStripY11 = iStripY;
+      fTrigY    = fCoordY[4];
+   }
+  
+//   cout << " Local Trigger " << " " << fNumber << " " << 
+//       xOutput << " " << yOutput << " " << fDev << " " << fStripX11 << " " <<
+//       fTrigY << " " << fStripY11 << "\n";
+
+   if (xOutput && yOutput){ // trigger in X and Y
+       fOutput =1;
+
+       Int_t sign = 0;
+       if ( !fMinDev[4] &&  deviation ) sign=-1;
+       if ( !fMinDev[4] && !deviation ) sign= 0;
+       if (  fMinDev[4] == 1 )          sign=+1;    
+       
+       deviation *= sign; 
+       
 //    calculate deviation in [0;+30]
-      fDev += 15;
-
+       deviation += 15;
+       
 //    GET LUT OUTPUT FOR icirc/istripX1/deviation/istripY
-      fLUT->GetLutOutput(fNumber, fStripX11, fDev, fStripY11, fLutLpt, fLutHpt);
+       fLUT->GetLutOutput(fNumber, fStripX11, deviation, fStripY11, fLutLpt, fLutHpt);
    }  
 }
 
@@ -1306,7 +1320,7 @@ void AliMUONLocalTriggerBoard::Response()
    TrigY(yY1, yY2, yY3, yY4, yY3U, yY3D, yY4U, yY4D);
    
 // ASIGN fLutLpt, fLutHpt
-   LocalTrigger(); 
+   LocalTrigger();
 
    fResponse = fLutLpt[0]                      + 
        static_cast<int>(fLutLpt[1]<<1) +