LCOV - code coverage report
Current view: top level - MUON/MUONtrigger - AliMUONLocalTrigger.cxx (source / functions) Hit Total Coverage
Test: coverage.info Lines: 92 160 57.5 %
Date: 2016-06-14 17:26:59 Functions: 16 22 72.7 %

          Line data    Source code
       1             : /**************************************************************************
       2             :  * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
       3             :  *                                                                        *
       4             :  * Author: The ALICE Off-line Project.                                    *
       5             :  * Contributors are mentioned in the code where appropriate.              *
       6             :  *                                                                        *
       7             :  * Permission to use, copy, modify and distribute this software and its   *
       8             :  * documentation strictly for non-commercial purposes is hereby granted   *
       9             :  * without fee, provided that the above copyright notice appears in all   *
      10             :  * copies and that both the copyright notice and this permission notice   *
      11             :  * appear in the supporting documentation. The authors make no claims     *
      12             :  * about the suitability of this software for any purpose. It is          *
      13             :  * provided "as is" without express or implied warranty.                  *
      14             :  **************************************************************************/
      15             : 
      16             : /* $Id$ */
      17             : 
      18             : 
      19             : #include "AliMUONLocalTrigger.h"
      20             : #include "AliLog.h"
      21             : #include "AliMUONLocalStruct.h"
      22             : #include "AliMUONRawStreamTriggerHP.h"
      23             : #include <Riostream.h>
      24             : #include <TArrayS.h>
      25             : 
      26             : //-----------------------------------------------------------------------------
      27             : /// \class AliMUONLocalTrigger
      28             : /// Local Trigger algorithm data outputs
      29             : /// (contains local trigger decision and bit patterns)                \n
      30             : /// Add SetLocalStruct method for rawdata  (Ch. Finck)
      31             : /// \author Ph. Crochet
      32             : //-----------------------------------------------------------------------------
      33             : 
      34             : using std::endl;
      35             : using std::cout;
      36             : /// \cond CLASSIMP
      37          18 : ClassImp(AliMUONLocalTrigger)
      38             : /// \endcond
      39             : 
      40             : //----------------------------------------------------------------------
      41             : AliMUONLocalTrigger::AliMUONLocalTrigger()
      42        2668 :   : TObject(), 
      43        2668 :     fLoCircuit(0),
      44        2668 :     fLoStripX(0),
      45        2668 :     fLoDev(0),
      46        2668 :     fLoSdev(1),
      47        2668 :     fLoTrigY(1),
      48        2668 :     fLoStripY(15),
      49        2668 :     fLoLpt(0),
      50        2668 :     fLoHpt(0),
      51             :     
      52        2668 :     fX1Pattern(0),
      53        2668 :     fX2Pattern(0),
      54        2668 :     fX3Pattern(0),
      55        2668 :     fX4Pattern(0),
      56             :     
      57        2668 :     fY1Pattern(0),
      58        2668 :     fY2Pattern(0),
      59        2668 :     fY3Pattern(0),
      60        2668 :     fY4Pattern(0),
      61             : 
      62        2668 :     fHitPatternFromResponse(0xFF),
      63        2668 :     fTriggerWithoutChamber(0)
      64       13340 : {
      65             : /// Default constructor
      66        5336 : }
      67             : //----------------------------------------------------------------------
      68             : AliMUONLocalTrigger::AliMUONLocalTrigger(const AliMUONLocalTrigger& theMUONLocalTrig)
      69      173460 :     : TObject(theMUONLocalTrig),
      70      173460 :       fLoCircuit(theMUONLocalTrig.fLoCircuit),
      71      173460 :       fLoStripX(theMUONLocalTrig.fLoStripX),
      72      173460 :       fLoDev(theMUONLocalTrig.fLoDev),
      73      173460 :       fLoSdev(theMUONLocalTrig.fLoSdev),
      74      173460 :       fLoTrigY(theMUONLocalTrig.fLoTrigY),
      75      173460 :       fLoStripY(theMUONLocalTrig.fLoStripY),
      76      173460 :       fLoLpt(theMUONLocalTrig.fLoLpt),
      77      173460 :       fLoHpt(theMUONLocalTrig.fLoHpt),
      78             :       
      79      173460 :       fX1Pattern(theMUONLocalTrig.fX1Pattern),
      80      173460 :       fX2Pattern(theMUONLocalTrig.fX2Pattern),
      81      173460 :       fX3Pattern(theMUONLocalTrig.fX3Pattern),
      82      173460 :       fX4Pattern(theMUONLocalTrig.fX4Pattern),
      83             :       
      84      173460 :       fY1Pattern(theMUONLocalTrig.fY1Pattern),
      85      173460 :       fY2Pattern(theMUONLocalTrig.fY2Pattern),
      86      173460 :       fY3Pattern(theMUONLocalTrig.fY3Pattern),
      87      173460 :       fY4Pattern(theMUONLocalTrig.fY4Pattern),
      88             : 
      89      173460 :       fHitPatternFromResponse(theMUONLocalTrig.fHitPatternFromResponse),
      90      173460 :       fTriggerWithoutChamber(theMUONLocalTrig.fTriggerWithoutChamber)
      91      867300 : {
      92             : /// Copy constructor (useful for TClonesArray)
      93             : 
      94      346920 : }
      95             : 
      96             : //----------------------------------------------------------------------
      97             : AliMUONLocalTrigger::~AliMUONLocalTrigger()
      98       16990 : {
      99             : /// Destructor
     100       19581 : }
     101             : 
     102             : //----------------------------------------------------------------------
     103             : AliMUONLocalTrigger& AliMUONLocalTrigger::operator=(const AliMUONLocalTrigger& theMUONLocalTrig)
     104             : {
     105             : /// Assigment operator;
     106             : /// equal operator (useful for non-pointer member in TClonesArray)
     107             : 
     108           0 :   if (this == &theMUONLocalTrig)
     109           0 :     return *this;
     110             : 
     111             :   // base class assignement
     112           0 :   TObject::operator=(theMUONLocalTrig);
     113             : 
     114           0 :   fLoCircuit = theMUONLocalTrig.fLoCircuit;
     115           0 :   fLoStripX  = theMUONLocalTrig.fLoStripX;         
     116           0 :   fLoDev     = theMUONLocalTrig.fLoDev;           
     117           0 :   fLoSdev    = theMUONLocalTrig.fLoSdev;           
     118           0 :   fLoTrigY   = theMUONLocalTrig.fLoTrigY;           
     119           0 :   fLoStripY  = theMUONLocalTrig.fLoStripY;           
     120           0 :   fLoLpt     = theMUONLocalTrig.fLoLpt;
     121           0 :   fLoHpt     = theMUONLocalTrig.fLoHpt;
     122             : 
     123           0 :   fX1Pattern  = theMUONLocalTrig.fX1Pattern;
     124           0 :   fX2Pattern  = theMUONLocalTrig.fX2Pattern;
     125           0 :   fX3Pattern  = theMUONLocalTrig.fX3Pattern;
     126           0 :   fX4Pattern  = theMUONLocalTrig.fX4Pattern;
     127             : 
     128           0 :   fY1Pattern  = theMUONLocalTrig.fY1Pattern;
     129           0 :   fY2Pattern  = theMUONLocalTrig.fY2Pattern;
     130           0 :   fY3Pattern  = theMUONLocalTrig.fY3Pattern;
     131           0 :   fY4Pattern  = theMUONLocalTrig.fY4Pattern;
     132             : 
     133           0 :   fHitPatternFromResponse = theMUONLocalTrig.fHitPatternFromResponse;
     134           0 :   fTriggerWithoutChamber = theMUONLocalTrig.fTriggerWithoutChamber;
     135             : 
     136           0 :   return *this;
     137           0 : }
     138             : 
     139             : 
     140             : //----------------------------------------------------------------------
     141             : Char_t AliMUONLocalTrigger::GetLoDecision() const
     142             : {
     143             : /// Get local decision 
     144             : /// from H(L)pt;
     145             : /// returns local trigger decision
     146             : 
     147        1872 :   Char_t rv = (fLoLpt & 0x3);
     148         936 :   rv |= (fLoHpt << 2) & 0xC;
     149             : 
     150         936 :   return rv;
     151             : }
     152             : 
     153             : //___________________________________________
     154             : void AliMUONLocalTrigger::GetXPattern(TArrayS& array) const
     155             : {
     156             :     /// return array of X pattern
     157        1546 :   Short_t vec[4] = {static_cast<Short_t>(GetX1Pattern()), static_cast<Short_t>(GetX2Pattern()), static_cast<Short_t>(GetX3Pattern()), static_cast<Short_t>(GetX4Pattern())};
     158         773 :     array.Set(4, vec);
     159         773 : }
     160             : 
     161             : //___________________________________________
     162             : void AliMUONLocalTrigger::GetYPattern(TArrayS& array) const
     163             : {
     164             :     /// return array of Y pattern
     165        1546 :   Short_t vec[4] = {static_cast<Short_t>(GetY1Pattern()), static_cast<Short_t>(GetY2Pattern()), static_cast<Short_t>(GetY3Pattern()), static_cast<Short_t>(GetY4Pattern())};
     166         773 :     array.Set(4, vec);
     167         773 : }
     168             : 
     169             : //___________________________________________
     170             : Bool_t
     171             : AliMUONLocalTrigger::IsNull() const
     172             : {
     173             :   /// Whether or not this card has something usefull to say or not
     174      519816 :   return ( fX1Pattern == 0 &&
     175      171077 :            fX2Pattern == 0 &&
     176      171075 :            fX3Pattern == 0 &&
     177      171064 :            fX4Pattern == 0 &&
     178      171064 :            fY1Pattern == 0 &&
     179      170149 :            fY2Pattern == 0 &&
     180      170149 :            fY3Pattern == 0 &&
     181      170147 :            fY4Pattern == 0 );          
     182             : }
     183             : 
     184             : //----------------------------------------------------------------------
     185             : void AliMUONLocalTrigger::SetLocalStruct(Int_t loCircuit, AliMUONLocalStruct& localStruct)
     186             : {
     187             : /// Set local trigger info from rawdata localStruct
     188             : 
     189             :   // set id'
     190           0 :   SetLoCircuit(loCircuit);
     191             : 
     192             :   // set X, Y, dev, Sdev and TrigY
     193           0 :   SetLoStripX((Int_t)localStruct.GetXPos());
     194           0 :   SetLoStripY((Int_t)localStruct.GetYPos());
     195           0 :   SetLoDev((Int_t)localStruct.GetXDev());
     196           0 :   SetLoSdev((Int_t)localStruct.GetSXDev());
     197           0 :   SetLoTrigY((Int_t)localStruct.GetTrigY());
     198             :  
     199             :   // set L(H)pt
     200           0 :   SetLoLpt(localStruct.GetLpt());
     201           0 :   SetLoHpt(localStruct.GetHpt());
     202             : 
     203             :   // set pattern X
     204           0 :   SetX1Pattern(localStruct.GetX1());
     205           0 :   SetX2Pattern(localStruct.GetX2());
     206           0 :   SetX3Pattern(localStruct.GetX3());
     207           0 :   SetX4Pattern(localStruct.GetX4());
     208             : 
     209             :   // set pattern Y
     210           0 :   SetY1Pattern(localStruct.GetY1());
     211           0 :   SetY2Pattern(localStruct.GetY2());
     212           0 :   SetY3Pattern(localStruct.GetY3());
     213           0 :   SetY4Pattern(localStruct.GetY4());
     214             : 
     215           0 : }
     216             : 
     217             : //----------------------------------------------------------------------
     218             : void AliMUONLocalTrigger::SetLocalStruct(Int_t loCircuit, const AliMUONRawStreamTriggerHP::AliLocalStruct& localStruct)
     219             : {
     220             : /// Set local trigger info from rawdata localStruct (new raw reader)
     221             : 
     222             :   // set id'
     223        1936 :   SetLoCircuit(loCircuit);
     224             : 
     225             :   // set X, Y, dev, Sdev and TrigY
     226         968 :   SetLoStripX((Int_t)localStruct.GetXPos());
     227         968 :   SetLoStripY((Int_t)localStruct.GetYPos());
     228         968 :   SetLoDev((Int_t)localStruct.GetXDev());
     229         968 :   SetLoSdev((Int_t)localStruct.GetSXDev());
     230         968 :   SetLoTrigY((Int_t)localStruct.GetTrigY());
     231             :  
     232             :   // set L(H)pt
     233         968 :   SetLoLpt(localStruct.GetLpt());
     234         968 :   SetLoHpt(localStruct.GetHpt());
     235             : 
     236             :   // set pattern X
     237         968 :   SetX1Pattern(localStruct.GetX1());
     238         968 :   SetX2Pattern(localStruct.GetX2());
     239         968 :   SetX3Pattern(localStruct.GetX3());
     240         968 :   SetX4Pattern(localStruct.GetX4());
     241             : 
     242             :   // set pattern Y
     243         968 :   SetY1Pattern(localStruct.GetY1());
     244         968 :   SetY2Pattern(localStruct.GetY2());
     245         968 :   SetY3Pattern(localStruct.GetY3());
     246         968 :   SetY4Pattern(localStruct.GetY4());
     247             : 
     248         968 : }
     249             : 
     250             : namespace
     251             : {
     252             :   const char* AsString(Int_t t)
     253             :   {
     254           0 :     switch (t)
     255             :     {
     256             :       case 0:
     257           0 :         return "no";
     258             :         break;
     259             :       case 1:
     260           0 :         return "minus";
     261             :         break;
     262             :       case 2:
     263           0 :         return "plus";
     264             :         break;
     265             :       case 3:
     266           0 :         return "undef";
     267             :         break;
     268             :       default:
     269           0 :         return "";
     270             :         break;
     271             :     }
     272           0 :   }
     273             : }
     274             : 
     275             : //----------------------------------------------------------------------
     276             : void AliMUONLocalTrigger::Print(Option_t* opt) const
     277             : {
     278             : /// Printing Local Trigger information
     279             : 
     280           0 :   TString sopt(opt);
     281           0 :   sopt.ToUpper();
     282             : 
     283           0 :   cout << Form("Circuit %3d Decision %2d StripX %2d Dev %2d(%1d) StripY %2d Lpt %6s Hpt %6s",
     284           0 :                LoCircuit(), GetLoDecision(),
     285           0 :                LoStripX(), LoDev(), LoSdev(), LoStripY(),
     286           0 :                AsString(LoLpt()),AsString(LoHpt())) << endl;
     287             :   
     288           0 :   if ( sopt.Contains("FULL") ) { 
     289             : 
     290           0 :     cout << Form("Xpatterns = 0x %04x %04x %04x %04x",
     291           0 :                  fX1Pattern,fX2Pattern,fX3Pattern,fX4Pattern) << endl;
     292           0 :     cout << Form("Ypatterns = 0x %04x %04x %04x %04x",
     293           0 :                  fY1Pattern,fY2Pattern,fY3Pattern,fY4Pattern) << endl;
     294             :   }
     295           0 : }
     296             : 
     297             : //----------------------------------------------------------------------
     298             : Int_t AliMUONLocalTrigger::GetDeviation() const
     299             : {
     300             :   /// return deviation
     301             :   
     302          56 :   Int_t deviation = LoDev(); 
     303             :   Int_t sign = 0;
     304          40 :   if ( !LoSdev() &&  deviation ) sign=-1;
     305          28 :   if ( !LoSdev() && !deviation ) sign= 0;
     306          44 :   if (  LoSdev() == 1 )          sign=+1;
     307          28 :   deviation *= sign;
     308          28 :   deviation += 15;
     309          28 :   return deviation;
     310             : }
     311             : 
     312             : //----------------------------------------------------------------------
     313             : void AliMUONLocalTrigger::SetDeviation(Int_t deviation)
     314             : {
     315             :   /// set LoDev and LoSDev according to deviation
     316             :   
     317           0 :   deviation -= 15;
     318           0 :   if (deviation > 0) {
     319           0 :     SetLoDev(deviation);
     320           0 :     SetLoSdev(1);
     321           0 :   } else {
     322           0 :     SetLoDev(-deviation);
     323           0 :     SetLoSdev(0);
     324             :   }
     325           0 : }
     326             : 
     327             : //----------------------------------------------------------------------
     328             : const char*
     329             : AliMUONLocalTrigger::GetName() const
     330             : {
     331             : /// Generate name
     332             : 
     333           0 :   return Form("LocalBoard%3d",LoCircuit());
     334             : }
     335             : 
     336             : 
     337             : //----------------------------------------------------------------------
     338             : Bool_t AliMUONLocalTrigger::IsTrigX() const
     339             : {
     340             : /// Trigger response X strips
     341             :   Bool_t xTrig;
     342         332 :   if ( LoSdev()==1 && LoDev()==0 && 
     343         128 :        LoStripX()==0) xTrig=kFALSE; // no trigger in X
     344             :   else xTrig = kTRUE;                       // trigger in X
     345          94 :   return xTrig;
     346             : }
     347             : 
     348             : 
     349             : //----------------------------------------------------------------------
     350             : Bool_t AliMUONLocalTrigger::IsTrigY() const
     351             : {
     352             : /// Trigger response Y strips
     353             :   Bool_t yTrig;
     354          62 :   if ( LoTrigY()==1 && 
     355           4 :        LoStripY()==15 ) yTrig = kFALSE; // no trigger in Y
     356             :   else yTrig = kTRUE;                          // trigger in Y
     357          30 :   return yTrig;
     358             : }

Generated by: LCOV version 1.11