]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - MUON/AliMUONLocalTrigger.cxx
DQM configure file
[u/mrichter/AliRoot.git] / MUON / AliMUONLocalTrigger.cxx
index 7203c3868c42d84084570ced2daa78efb9aa61d2..8edceef1bed6063a1a5ba978e28e73522ffdc693 100644 (file)
 
 /* $Id$ */
 
+
 #include "AliMUONLocalTrigger.h"
-#include <assert.h>
 #include "AliLog.h"
+#include "AliMUONLocalStruct.h"
+#include "AliMUONRawStreamTriggerHP.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
+//-----------------------------------------------------------------------------
 
+using std::endl;
+using std::cout;
+/// \cond CLASSIMP
 ClassImp(AliMUONLocalTrigger)
+/// \endcond
+
 //----------------------------------------------------------------------
 AliMUONLocalTrigger::AliMUONLocalTrigger()
-  : TObject(), fDigits(0)
-{
-// constructor
-  fLoCircuit = 0;
-  fLoStripX  = 0;
-  fLoDev     = 0;
-  fLoStripY  = 0;
-  fLoLpt     = 0;
-  fLoHpt     = 0;
-  fLoApt     = 0;
-
-  fX1Pattern  = 0;
-  fX2Pattern  = 0;
-  fX3Pattern  = 0;
-  fX4Pattern  = 0;
+  : TObject(), 
+    fLoCircuit(0),
+    fLoStripX(0),
+    fLoDev(0),
+    fLoSdev(1),
+    fLoTrigY(1),
+    fLoStripY(15),
+    fLoLpt(0),
+    fLoHpt(0),
+    
+    fX1Pattern(0),
+    fX2Pattern(0),
+    fX3Pattern(0),
+    fX4Pattern(0),
+    
+    fY1Pattern(0),
+    fY2Pattern(0),
+    fY3Pattern(0),
+    fY4Pattern(0),
 
-  fY1Pattern  = 0;
-  fY2Pattern  = 0;
-  fY3Pattern  = 0;
-  fY4Pattern  = 0;
-
-  fLoDecision = 0;
+    fHitPatternFromResponse(0xFF),
+    fTriggerWithoutChamber(0)
+{
+/// Default constructor
 }
 //----------------------------------------------------------------------
 AliMUONLocalTrigger::AliMUONLocalTrigger(const AliMUONLocalTrigger& theMUONLocalTrig)
-  : TObject(theMUONLocalTrig)
-{
-// copy constructor (useful for TClonesArray)
-  fLoCircuit = theMUONLocalTrig.fLoCircuit;
-  fLoStripX  = theMUONLocalTrig.fLoStripX;         
-  fLoDev     = theMUONLocalTrig.fLoDev;           
-  fLoStripY  = theMUONLocalTrig.fLoStripY;           
-  fLoLpt     = theMUONLocalTrig.fLoLpt;
-  fLoHpt     = theMUONLocalTrig.fLoHpt;
-  fLoApt     = theMUONLocalTrig.fLoApt;
-
-  fX1Pattern  = theMUONLocalTrig.fX1Pattern;
-  fX2Pattern  = theMUONLocalTrig.fX2Pattern;
-  fX3Pattern  = theMUONLocalTrig.fX3Pattern;
-  fX4Pattern  = theMUONLocalTrig.fX4Pattern;
+    : TObject(theMUONLocalTrig),
+      fLoCircuit(theMUONLocalTrig.fLoCircuit),
+      fLoStripX(theMUONLocalTrig.fLoStripX),
+      fLoDev(theMUONLocalTrig.fLoDev),
+      fLoSdev(theMUONLocalTrig.fLoSdev),
+      fLoTrigY(theMUONLocalTrig.fLoTrigY),
+      fLoStripY(theMUONLocalTrig.fLoStripY),
+      fLoLpt(theMUONLocalTrig.fLoLpt),
+      fLoHpt(theMUONLocalTrig.fLoHpt),
+      
+      fX1Pattern(theMUONLocalTrig.fX1Pattern),
+      fX2Pattern(theMUONLocalTrig.fX2Pattern),
+      fX3Pattern(theMUONLocalTrig.fX3Pattern),
+      fX4Pattern(theMUONLocalTrig.fX4Pattern),
+      
+      fY1Pattern(theMUONLocalTrig.fY1Pattern),
+      fY2Pattern(theMUONLocalTrig.fY2Pattern),
+      fY3Pattern(theMUONLocalTrig.fY3Pattern),
+      fY4Pattern(theMUONLocalTrig.fY4Pattern),
 
-  fY1Pattern  = theMUONLocalTrig.fY1Pattern;
-  fY2Pattern  = theMUONLocalTrig.fY2Pattern;
-  fY3Pattern  = theMUONLocalTrig.fY3Pattern;
-  fY4Pattern  = theMUONLocalTrig.fY4Pattern;
+      fHitPatternFromResponse(theMUONLocalTrig.fHitPatternFromResponse),
+      fTriggerWithoutChamber(theMUONLocalTrig.fTriggerWithoutChamber)
+{
+/// Copy constructor (useful for TClonesArray)
 
-  fLoDecision =  theMUONLocalTrig.fLoDecision;
+}
 
-  fDigits = theMUONLocalTrig.fDigits;
+//----------------------------------------------------------------------
+AliMUONLocalTrigger::~AliMUONLocalTrigger()
+{
+/// Destructor
 }
+
 //----------------------------------------------------------------------
 AliMUONLocalTrigger& AliMUONLocalTrigger::operator=(const AliMUONLocalTrigger& theMUONLocalTrig)
 {
-// equal operator (useful for non-pointer member in TClonesArray)
+/// Assigment operator;
+/// equal operator (useful for non-pointer member in TClonesArray)
+
   if (this == &theMUONLocalTrig)
     return *this;
 
@@ -85,10 +114,11 @@ 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;
-  fLoApt     = theMUONLocalTrig.fLoApt;
 
   fX1Pattern  = theMUONLocalTrig.fX1Pattern;
   fX2Pattern  = theMUONLocalTrig.fX2Pattern;
@@ -100,96 +130,229 @@ AliMUONLocalTrigger& AliMUONLocalTrigger::operator=(const AliMUONLocalTrigger& t
   fY3Pattern  = theMUONLocalTrig.fY3Pattern;
   fY4Pattern  = theMUONLocalTrig.fY4Pattern;
 
-  fLoDecision =  theMUONLocalTrig.fLoDecision;
-
-  fDigits = theMUONLocalTrig.fDigits;
+  fHitPatternFromResponse = theMUONLocalTrig.fHitPatternFromResponse;
+  fTriggerWithoutChamber = theMUONLocalTrig.fTriggerWithoutChamber;
 
   return *this;
 }
 
+
 //----------------------------------------------------------------------
-AliMUONLocalTrigger::AliMUONLocalTrigger(const Int_t* localtr, const TArrayI& digits)
-{
-// add a local trigger object 
-  fLoCircuit = localtr[0];
-  fLoStripX  = localtr[1];         
-  fLoDev     = localtr[2];           
-  fLoStripY  = localtr[3];           
-  fLoLpt     = localtr[4];
-  fLoHpt     = localtr[5];
-  fLoApt     = localtr[6];
-
-  // 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];
-
-  fDigits = digits;
+Char_t AliMUONLocalTrigger::GetLoDecision() const
+{
+/// Get local decision 
+/// from H(L)pt;
+/// returns local trigger decision
+
+  Char_t rv = (fLoLpt & 0x3);
+  rv |= (fLoHpt << 2) & 0xC;
+
+  return rv;
+}
+
+//___________________________________________
+void AliMUONLocalTrigger::GetXPattern(TArrayS& array) const
+{
+    /// return array of X pattern
+    Short_t vec[4] = {GetX1Pattern(), GetX2Pattern(), GetX3Pattern(), GetX4Pattern()};
+    array.Set(4, vec);
 }
+
+//___________________________________________
+void AliMUONLocalTrigger::GetYPattern(TArrayS& array) const
+{
+    /// return array of Y pattern
+    Short_t vec[4] = {GetY1Pattern(), GetY2Pattern(), GetY3Pattern(), GetY4Pattern()};
+    array.Set(4, vec);
+}
+
+//___________________________________________
+Bool_t
+AliMUONLocalTrigger::IsNull() const
+{
+  /// 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 );          
+}
+
 //----------------------------------------------------------------------
-Char_t AliMUONLocalTrigger::GetLoDecision()
+void AliMUONLocalTrigger::SetLocalStruct(Int_t loCircuit, AliMUONLocalStruct& localStruct)
 {
-  fLoDecision  = (fLoLpt & 0x3);
-  fLoDecision |= (fLoHpt << 2) & 0xC;
+/// Set local trigger info from rawdata localStruct
+
+  // set id'
+  SetLoCircuit(loCircuit);
+
+  // 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.GetTrigY());
+  // set L(H)pt
+  SetLoLpt(localStruct.GetLpt());
+  SetLoHpt(localStruct.GetHpt());
+
+  // set pattern X
+  SetX1Pattern(localStruct.GetX1());
+  SetX2Pattern(localStruct.GetX2());
+  SetX3Pattern(localStruct.GetX3());
+  SetX4Pattern(localStruct.GetX4());
+
+  // set pattern Y
+  SetY1Pattern(localStruct.GetY1());
+  SetY2Pattern(localStruct.GetY2());
+  SetY3Pattern(localStruct.GetY3());
+  SetY4Pattern(localStruct.GetY4());
 
-  return fLoDecision;
 }
 
 //----------------------------------------------------------------------
-void AliMUONLocalTrigger::GetDigit(
-               Int_t i, Int_t& chamber, Int_t& cathode, Int_t& digit
-       ) const
+void AliMUONLocalTrigger::SetLocalStruct(Int_t loCircuit, const AliMUONRawStreamTriggerHP::AliLocalStruct& localStruct)
 {
-// 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 ]
+/// Set local trigger info from rawdata localStruct (new raw reader)
+
+  // set id'
+  SetLoCircuit(loCircuit);
+
+  // 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.GetTrigY());
+  // set L(H)pt
+  SetLoLpt(localStruct.GetLpt());
+  SetLoHpt(localStruct.GetHpt());
+
+  // set pattern X
+  SetX1Pattern(localStruct.GetX1());
+  SetX2Pattern(localStruct.GetX2());
+  SetX3Pattern(localStruct.GetX3());
+  SetX4Pattern(localStruct.GetX4());
+
+  // set pattern Y
+  SetY1Pattern(localStruct.GetY1());
+  SetY2Pattern(localStruct.GetY2());
+  SetY3Pattern(localStruct.GetY3());
+  SetY4Pattern(localStruct.GetY4());
+
+}
 
-       Int_t digitnumber = fDigits[i];
-       DecodeDigitNumber(digitnumber, chamber, cathode, digit);
+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;
+    }
+  }
 }
 
 //----------------------------------------------------------------------
-Int_t AliMUONLocalTrigger::EncodeDigitNumber(
-               Int_t chamber, Int_t cathode, Int_t digit
-       )
+void AliMUONLocalTrigger::Print(Option_t* opt) 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.
+/// Printing Local Trigger information
+
+  TString sopt(opt);
+  sopt.ToUpper();
 
-       assert( 0 <= cathode && cathode <= 1 );
-       assert( 0 <= chamber && chamber <= 13 );
+  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())) << endl;
+  
+  if ( sopt.Contains("FULL") ) { 
 
-       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;
-       };
+    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;
+  }
+}
 
-       return ((cathode & 0x1) << 31) | ((chamber & 0xF) << 27) | digit;
+//----------------------------------------------------------------------
+Int_t AliMUONLocalTrigger::GetDeviation() const
+{
+  /// return deviation
+  
+  Int_t deviation = LoDev(); 
+  Int_t sign = 0;
+  if ( !LoSdev() &&  deviation ) sign=-1;
+  if ( !LoSdev() && !deviation ) sign= 0;
+  if (  LoSdev() == 1 )          sign=+1;
+  deviation *= sign;
+  deviation += 15;
+  return deviation;
+}
+
+//----------------------------------------------------------------------
+void AliMUONLocalTrigger::SetDeviation(Int_t deviation)
+{
+  /// set LoDev and LoSDev according to deviation
+  
+  deviation -= 15;
+  if (deviation > 0) {
+    SetLoDev(deviation);
+    SetLoSdev(1);
+  } else {
+    SetLoDev(-deviation);
+    SetLoSdev(0);
+  }
 }
 
 //----------------------------------------------------------------------
-void AliMUONLocalTrigger::DecodeDigitNumber(
-               Int_t digitnumber,
-               Int_t& chamber, Int_t& cathode, Int_t& digit
-       )
+const char*
+AliMUONLocalTrigger::GetName() const
 {
-// Decodes a digit number into information about the digit.
-// One can subsequently fetch the digit with
-// AliMUONDataInterface::Digit(chamber, cathode, digit)
+/// Generate name
 
-       cathode = (digitnumber >> 31) & 0x1;
-       chamber = (digitnumber >> 27) & 0xF;
-       digit = digitnumber & 0x7FFFFFF;
+  return Form("LocalBoard%3d",LoCircuit());
 }
 
+
+//----------------------------------------------------------------------
+Bool_t AliMUONLocalTrigger::IsTrigX() const
+{
+/// Trigger response X strips
+  Bool_t xTrig;
+  if ( LoSdev()==1 && LoDev()==0 && 
+       LoStripX()==0) xTrig=kFALSE; // no trigger in X
+  else xTrig = kTRUE;                       // trigger in X
+  return xTrig;
+}
+
+
+//----------------------------------------------------------------------
+Bool_t AliMUONLocalTrigger::IsTrigY() const
+{
+/// Trigger response Y strips
+  Bool_t yTrig;
+  if ( LoTrigY()==1 && 
+       LoStripY()==15 ) yTrig = kFALSE; // no trigger in Y
+  else yTrig = kTRUE;                          // trigger in Y
+  return yTrig;
+}