]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - MUON/AliMUONLocalTrigger.cxx
Protection if the compiler is not gcc
[u/mrichter/AliRoot.git] / MUON / AliMUONLocalTrigger.cxx
index 53e4bb5ca21722173b02f4febe30b827bb958207..f7a4577bfcad377254875deed50a387f62d2f80d 100644 (file)
 
 
 #include "AliMUONLocalTrigger.h"
-#include <assert.h>
 #include "AliLog.h"
 #include "AliMUONLocalStruct.h"
+#include <Riostream.h>
+#include <TArrayS.h>
 
+//-----------------------------------------------------------------------------
 /// \class AliMUONLocalTrigger
 /// Local Trigger algorithm data outputs
 /// (contains local trigger decision and bit patterns)                \n
 /// Add SetLocalStruct method for rawdata  (Ch. Finck)
 /// \author Ph. Crochet
+//-----------------------------------------------------------------------------
 
 /// \cond CLASSIMP
 ClassImp(AliMUONLocalTrigger)
@@ -37,7 +40,9 @@ AliMUONLocalTrigger::AliMUONLocalTrigger()
     fLoCircuit(0),
     fLoStripX(0),
     fLoDev(0),
-    fLoStripY(0),
+    fLoSdev(1),
+    fLoTrigY(1),
+    fLoStripY(15),
     fLoLpt(0),
     fLoHpt(0),
     
@@ -49,10 +54,7 @@ AliMUONLocalTrigger::AliMUONLocalTrigger()
     fY1Pattern(0),
     fY2Pattern(0),
     fY3Pattern(0),
-    fY4Pattern(0),
-    
-    fLoDecision(0),
-    fDigits(0)
+    fY4Pattern(0)
 {
 /// Default constructor
 }
@@ -62,6 +64,8 @@ AliMUONLocalTrigger::AliMUONLocalTrigger(const AliMUONLocalTrigger& theMUONLocal
       fLoCircuit(theMUONLocalTrig.fLoCircuit),
       fLoStripX(theMUONLocalTrig.fLoStripX),
       fLoDev(theMUONLocalTrig.fLoDev),
+      fLoSdev(theMUONLocalTrig.fLoSdev),
+      fLoTrigY(theMUONLocalTrig.fLoTrigY),
       fLoStripY(theMUONLocalTrig.fLoStripY),
       fLoLpt(theMUONLocalTrig.fLoLpt),
       fLoHpt(theMUONLocalTrig.fLoHpt),
@@ -74,14 +78,18 @@ AliMUONLocalTrigger::AliMUONLocalTrigger(const AliMUONLocalTrigger& theMUONLocal
       fY1Pattern(theMUONLocalTrig.fY1Pattern),
       fY2Pattern(theMUONLocalTrig.fY2Pattern),
       fY3Pattern(theMUONLocalTrig.fY3Pattern),
-      fY4Pattern(theMUONLocalTrig.fY4Pattern),
-      
-      fLoDecision(theMUONLocalTrig.fLoDecision),
-      fDigits(theMUONLocalTrig.fDigits)
+      fY4Pattern(theMUONLocalTrig.fY4Pattern)
 {
 /// Copy constructor (useful for TClonesArray)
 
 }
+
+//----------------------------------------------------------------------
+AliMUONLocalTrigger::~AliMUONLocalTrigger()
+{
+/// Destructor
+}
+
 //----------------------------------------------------------------------
 AliMUONLocalTrigger& AliMUONLocalTrigger::operator=(const AliMUONLocalTrigger& theMUONLocalTrig)
 {
@@ -97,6 +105,8 @@ AliMUONLocalTrigger& AliMUONLocalTrigger::operator=(const AliMUONLocalTrigger& t
   fLoCircuit = theMUONLocalTrig.fLoCircuit;
   fLoStripX  = theMUONLocalTrig.fLoStripX;         
   fLoDev     = theMUONLocalTrig.fLoDev;           
+  fLoSdev    = theMUONLocalTrig.fLoSdev;           
+  fLoTrigY   = theMUONLocalTrig.fLoTrigY;           
   fLoStripY  = theMUONLocalTrig.fLoStripY;           
   fLoLpt     = theMUONLocalTrig.fLoLpt;
   fLoHpt     = theMUONLocalTrig.fLoHpt;
@@ -111,97 +121,52 @@ AliMUONLocalTrigger& AliMUONLocalTrigger::operator=(const AliMUONLocalTrigger& t
   fY3Pattern  = theMUONLocalTrig.fY3Pattern;
   fY4Pattern  = theMUONLocalTrig.fY4Pattern;
 
-  fLoDecision =  theMUONLocalTrig.fLoDecision;
-
-  fDigits = theMUONLocalTrig.fDigits;
-
   return *this;
 }
 
-//----------------------------------------------------------------------
-AliMUONLocalTrigger::AliMUONLocalTrigger(const Int_t* localtr, const TArrayI& digits) :
-    fLoCircuit(localtr[0]),
-    fLoStripX(localtr[1]),      
-    fLoDev(localtr[2]),      
-    fLoStripY(localtr[3]),          
-    fLoLpt(localtr[4]),
-    fLoHpt(localtr[5]),
-     // keep on with this way
-    fX1Pattern((UShort_t)localtr[7]),
-    fX2Pattern((UShort_t)localtr[8]),
-    fX3Pattern((UShort_t)localtr[9]),
-    fX4Pattern((UShort_t)localtr[10]),
-    
-    fY1Pattern((UShort_t)localtr[11]),
-    fY2Pattern((UShort_t)localtr[12]),
-    fY3Pattern((UShort_t)localtr[13]),
-    fY4Pattern((UShort_t)localtr[14]),
-    
-    fLoDecision(0),
-    fDigits(digits)
-{
-/// Add a local trigger object
-}
 
 //----------------------------------------------------------------------
-Char_t AliMUONLocalTrigger::GetLoDecision()
+Char_t AliMUONLocalTrigger::GetLoDecision() const
 {
 /// Get local decision 
 /// from H(L)pt;
 /// returns local trigger decision
 
-  fLoDecision  = (fLoLpt & 0x3);
-  fLoDecision |= (fLoHpt << 2) & 0xC;
+  Char_t rv = (fLoLpt & 0x3);
+  rv |= (fLoHpt << 2) & 0xC;
 
-  return fLoDecision;
+  return rv;
 }
 
-//----------------------------------------------------------------------
-void AliMUONLocalTrigger::GetDigit(
-               Int_t i, Int_t& chamber, Int_t& cathode, Int_t& digit) const
+//___________________________________________
+void AliMUONLocalTrigger::GetXPattern(TArrayS& array) const
 {
-/// Returns the i'th digit that fired this circuit.
-/// The number of digits can be found with NumberOfDigits(), that is 
-/// i is valid in the range [ 0 , NumberOfDigits() - 1 ]
-
-       Int_t digitnumber = fDigits[i];
-       DecodeDigitNumber(digitnumber, chamber, cathode, digit);
+    /// return array of X pattern
+    Short_t vec[4] = {GetX1Pattern(), GetX2Pattern(), GetX3Pattern(), GetX4Pattern()};
+    array.Set(4, vec);
 }
 
-//----------------------------------------------------------------------
-Int_t AliMUONLocalTrigger::EncodeDigitNumber(Int_t chamber, Int_t cathode, 
-                                            Int_t digit)
+//___________________________________________
+void AliMUONLocalTrigger::GetYPattern(TArrayS& array) const
 {
-/// Encodes a 32-bit digit number from digit information to be stored
-/// in internal integer arrays. Note that the value of the digit parameter
-/// can not be larger than 0x07FFFFFF.
-
-       assert( 0 <= cathode && cathode <= 1 );
-       assert( 0 <= chamber && chamber <= 13 );
-
-       if ((digit & 0xF8000000) != 0)
-       {
-               AliErrorGeneral("AliMUONLocalTrigger", Form(
-                       "Digit index value is to large: 0x%8.8X. Maximum supported value is 0x07FFFFFF.",
-                       cathode, chamber, digit
-               ));
-               return -1;
-       };
-
-       return ((cathode & 0x1) << 31) | ((chamber & 0xF) << 27) | digit;
+    /// return array of Y pattern
+    Short_t vec[4] = {GetY1Pattern(), GetY2Pattern(), GetY3Pattern(), GetY4Pattern()};
+    array.Set(4, vec);
 }
 
-//----------------------------------------------------------------------
-void AliMUONLocalTrigger::DecodeDigitNumber(Int_t digitnumber, Int_t& chamber, 
-                                           Int_t& cathode, Int_t& digit)
+//___________________________________________
+Bool_t
+AliMUONLocalTrigger::IsNull() const
 {
-/// Decodes a digit number into information about the digit.
-/// One can subsequently fetch the digit with
-/// AliMUONDataInterface::Digit(chamber, cathode, digit)
-
-       cathode = (digitnumber >> 31) & 0x1;
-       chamber = (digitnumber >> 27) & 0xF;
-       digit = digitnumber & 0x7FFFFFF;
+  /// Whether or not this card has something usefull to say or not
+  return ( fX1Pattern == 0 &&
+           fX2Pattern == 0 &&
+           fX3Pattern == 0 &&
+           fX4Pattern == 0 &&
+           fY1Pattern == 0 &&
+           fY2Pattern == 0 &&
+           fY3Pattern == 0 &&
+           fY4Pattern == 0 );          
 }
 
 //----------------------------------------------------------------------
@@ -212,10 +177,12 @@ void AliMUONLocalTrigger::SetLocalStruct(Int_t loCircuit, AliMUONLocalStruct& lo
   // set id'
   SetLoCircuit(loCircuit);
 
-  // set X, Y dev  
+  // set X, Y, dev, Sdev and TrigY
   SetLoStripX((Int_t)localStruct.GetXPos());
   SetLoStripY((Int_t)localStruct.GetYPos());
   SetLoDev((Int_t)localStruct.GetXDev());
+  SetLoSdev((Int_t)localStruct.GetSXDev());
+  SetLoTrigY((Int_t)localStruct.GetTriggerY());
  
   // set L(H)pt
   SetLoLpt(localStruct.GetLpt());
@@ -235,19 +202,58 @@ void AliMUONLocalTrigger::SetLocalStruct(Int_t loCircuit, AliMUONLocalStruct& lo
 
 }
 
+namespace
+{
+  const char* AsString(Int_t t)
+  {
+    switch (t)
+    {
+      case 0:
+        return "no";
+        break;
+      case 1:
+        return "minus";
+        break;
+      case 2:
+        return "plus";
+        break;
+      case 3:
+        return "undef";
+        break;
+      default:
+        return "";
+        break;
+    }
+  }
+}
+
 //----------------------------------------------------------------------
 void AliMUONLocalTrigger::Print(Option_t* opt) const
 {
-  //
-  // Printing Local Trigger information
-  //
+/// Printing Local Trigger information
+
   TString sopt(opt);
   sopt.ToUpper();
-  if ( sopt.Contains("FULL") ) { 
 
-      printf("<AliMUONLocalTrigger> Circuit %d StripX %d Dev %d StripY %d Lpt %d Hpt %d \n",LoCircuit(),LoStripX(),LoDev(),LoStripY(),LoLpt(),LoHpt());
+  cout << Form("Circuit %3d Decision %2d StripX %2d Dev %2d(%1d) StripY %2d Lpt %6s Hpt %6s",
+               LoCircuit(), GetLoDecision(),
+               LoStripX(), LoDev(), LoSdev(), LoStripY(),
+               AsString(LoLpt()),AsString(LoHpt()),IsNull()) << endl;
+  
+  if ( sopt.Contains("FULL") ) { 
 
+    cout << Form("Xpatterns = 0x %04x %04x %04x %04x",
+                 fX1Pattern,fX2Pattern,fX3Pattern,fX4Pattern) << endl;
+    cout << Form("Ypatterns = 0x %04x %04x %04x %04x",
+                 fY1Pattern,fY2Pattern,fY3Pattern,fY4Pattern) << endl;
   }
 }
 
+//----------------------------------------------------------------------
+const char*
+AliMUONLocalTrigger::GetName() const
+{
+/// Generate name
+
+  return Form("LocalBoard%3d",LoCircuit());
+}