ROOT logo
/**************************************************************************
 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 *                                                                        *
 * Author: The ALICE Off-line Project.                                    *
 * Contributors are mentioned in the code where appropriate.              *
 *                                                                        *
 * Permission to use, copy, modify and distribute this software and its   *
 * documentation strictly for non-commercial purposes is hereby granted   *
 * without fee, provided that the above copyright notice appears in all   *
 * copies and that both the copyright notice and this permission notice   *
 * appear in the supporting documentation. The authors make no claims     *
 * about the suitability of this software for any purpose. It is          *
 * provided "as is" without express or implied warranty.                  *
 **************************************************************************/

/* $Id$ */

//-----------------------------------------------------------------------------
/// \class AliMUONRegionalTriggerBoard
/// Dimuon regional trigger implementation:
/// - entry are local board responses
/// - output is 12-bit word
/// - algorithm is similar to the global one
///
/// \author Rachid Guernane (LPCCFd)
/// Corrected by Christian Finck (Subatech)
//-----------------------------------------------------------------------------

#include "AliMUONRegionalTriggerBoard.h"

#include "AliLog.h"

#include "TBits.h"

#include <Riostream.h>

using std::endl;
using std::cout;
/// \cond CLASSIMP
ClassImp(AliMUONRegionalTriggerBoard)
/// \endcond

//___________________________________________
AliMUONRegionalTriggerBoard::AliMUONRegionalTriggerBoard()
  : AliMUONTriggerBoard(),
    fMask(0x0)   
{
/// Default constructor
   for (Int_t i=0; i<16; i++) fLocalResponse[i] = 0;
}

//___________________________________________
AliMUONRegionalTriggerBoard::AliMUONRegionalTriggerBoard(const char *name, Int_t a) 
  : AliMUONTriggerBoard(name, a),
    fMask(0x0)   
{
/// Standard constructor
   for (Int_t i=0; i<16; i++) fLocalResponse[i] = 0;
}

//___________________________________________
AliMUONRegionalTriggerBoard::~AliMUONRegionalTriggerBoard()
{
/// Destructor
}

//___________________________________________
void AliMUONRegionalTriggerBoard::Response()
{
/// response is given following the regional algorithm
// output from local trigger algorithm
// [+, -] * [Hpt, Lpt]
// transformed to [+, -, US, LS] * [Hpt, Lpt]

  if ( IsNull() ) return; // Do nothing if all local responses are null

  Int_t t[16];

   for (Int_t i = 0; i < 16; ++i)
   {
     if ((fMask >> i) & 0x1)
      t[i] = fLocalResponse[i];
     else
       t[i] = 0;
   }
   
   Int_t rank = 8;

   for (Int_t i = 0; i < 4; ++i)
   {
      Int_t ip = 0;
      
      for (Int_t j = 0; j < rank; ++j)
      {
         UShort_t lthres = Algo(t[2*j],t[2*j+1],"LPT",i);
	 	 
         UShort_t hthres = Algo(t[2*j],t[2*j+1],"HPT",i); hthres <<= 4;

         t[ip] = lthres | hthres;

         ip++;
      }
      
      rank /= 2; 
   }

   fResponse = t[0]; // 8-bit [H4:L4]
}

//___________________________________________
UShort_t AliMUONRegionalTriggerBoard::Algo(UShort_t i, UShort_t j, const char *thres, Int_t level)
{
/// implementation of the regional algorithm
/// similar to the global algorithm except for the
/// input layer

/// level = 0  a ,b = local response = Hpt (+|-) | Lpt (+|-)    
/// level > 0  a ,b = reg  response  =  Hpt (+|-|us|ls) |  Lpt (+|-|us|ls)    
   
  TBits a(8), b(8); a.Set(8,&i); b.Set(8,&j);

   TBits trg1(2), trg2(2), trg(2);

   if (!strcmp(thres,"LPT"))
   {
  
      if (!level) 
      {         
         trg1[0] = a[0]; trg1[1] = a[1]; 
         trg2[0] = b[0]; trg2[1] = b[1];
      }
      else
      {
         trg1[0] = a[2]; trg1[1] = a[3]; 
         trg2[0] = b[2]; trg2[1] = b[3];
      }
   }
   else
   {
      if (!level)
      {         
         trg1[0] = a[2]; trg1[1] = a[3]; 
         trg2[0] = b[2]; trg2[1] = b[3];
      }
      else
      {
         trg1[0] = a[6]; trg1[1] = a[7]; 
         trg2[0] = b[6]; trg2[1] = b[7];         
      }
   }
       
   TBits trgLS1(1), trgUS1(1), trgLS2(1), trgUS2(1), trgLS(1), trgUS(1);

   if (!level) 
   {
      trgLS1[0] = trgUS1[0] = trgLS2[0] = trgUS2[0] = 0;
   }
   else
   {
       if (!strcmp(thres,"LPT"))
      {
         //trgLS1[0] = a[1]; trgUS1[0] = a[0]; 
         //trgLS2[0] = b[1]; trgUS2[0] = b[0];
         trgLS1[0] = a[0]; trgUS1[0] = a[1]; 
         trgLS2[0] = b[0]; trgUS2[0] = b[1];
      }
      else
      {
         //trgLS1[0] = a[5]; trgUS1[0] = a[4]; 
         //trgLS2[0] = b[5]; trgUS2[0] = b[4];         
         trgLS1[0] = a[4]; trgUS1[0] = a[5]; 
         trgLS2[0] = b[4]; trgUS2[0] = b[5];         
      }
   }

   trgLS[0] = ( trg1[0] & trg2[0] ) | ( trg1[1] & trg2[1] ) | trgLS1[0] | trgLS2[0];
   trgUS[0] = ( trg1[0] & trg2[1] ) | ( trg1[1] & trg2[0] ) | trgUS1[0] | trgUS2[0];
   
   trg[0] = trg1[0] | trg2[0];
   trg[1] = trg1[1] | trg2[1];
   
   TBits v(4);
   
   //v[0] = trgUS[0]; 
   //v[1] = trgLS[0];
   v[0] = trgLS[0]; 
   v[1] = trgUS[0];
   v[2] = trg[0];
   v[3] = trg[1];
   UShort_t rv = 0;
   v.Get(&rv);
   return rv;
}

//___________________________________________
void AliMUONRegionalTriggerBoard::Scan(Option_t*) const
{
/// scan local board entries 

  for (Int_t i=0; i<16; i++) 
   {
      TBits b;
      b.Set(6,&fLocalResponse[i]);
      
      cout << "Entry " << i << " is " << b << endl;
      
   }
   
}
//___________________________________________
void AliMUONRegionalTriggerBoard::Mask(UShort_t mask)
{
/// mask entry index

    fMask = mask;
}

//___________________________________________
Bool_t AliMUONRegionalTriggerBoard::IsNull()
{
  /// Check if all local response are null
  for (Int_t i=0; i<16; i++) {
    if ( fLocalResponse[i] ) return kFALSE;
  }
  return kTRUE;
}


//___________________________________________
void AliMUONRegionalTriggerBoard::Reset()
{
  /// Reset board

  for (Int_t i=0; i<16; ++i) fLocalResponse[i] = 0;

  fResponse = 0;
  
}
 AliMUONRegionalTriggerBoard.cxx:1
 AliMUONRegionalTriggerBoard.cxx:2
 AliMUONRegionalTriggerBoard.cxx:3
 AliMUONRegionalTriggerBoard.cxx:4
 AliMUONRegionalTriggerBoard.cxx:5
 AliMUONRegionalTriggerBoard.cxx:6
 AliMUONRegionalTriggerBoard.cxx:7
 AliMUONRegionalTriggerBoard.cxx:8
 AliMUONRegionalTriggerBoard.cxx:9
 AliMUONRegionalTriggerBoard.cxx:10
 AliMUONRegionalTriggerBoard.cxx:11
 AliMUONRegionalTriggerBoard.cxx:12
 AliMUONRegionalTriggerBoard.cxx:13
 AliMUONRegionalTriggerBoard.cxx:14
 AliMUONRegionalTriggerBoard.cxx:15
 AliMUONRegionalTriggerBoard.cxx:16
 AliMUONRegionalTriggerBoard.cxx:17
 AliMUONRegionalTriggerBoard.cxx:18
 AliMUONRegionalTriggerBoard.cxx:19
 AliMUONRegionalTriggerBoard.cxx:20
 AliMUONRegionalTriggerBoard.cxx:21
 AliMUONRegionalTriggerBoard.cxx:22
 AliMUONRegionalTriggerBoard.cxx:23
 AliMUONRegionalTriggerBoard.cxx:24
 AliMUONRegionalTriggerBoard.cxx:25
 AliMUONRegionalTriggerBoard.cxx:26
 AliMUONRegionalTriggerBoard.cxx:27
 AliMUONRegionalTriggerBoard.cxx:28
 AliMUONRegionalTriggerBoard.cxx:29
 AliMUONRegionalTriggerBoard.cxx:30
 AliMUONRegionalTriggerBoard.cxx:31
 AliMUONRegionalTriggerBoard.cxx:32
 AliMUONRegionalTriggerBoard.cxx:33
 AliMUONRegionalTriggerBoard.cxx:34
 AliMUONRegionalTriggerBoard.cxx:35
 AliMUONRegionalTriggerBoard.cxx:36
 AliMUONRegionalTriggerBoard.cxx:37
 AliMUONRegionalTriggerBoard.cxx:38
 AliMUONRegionalTriggerBoard.cxx:39
 AliMUONRegionalTriggerBoard.cxx:40
 AliMUONRegionalTriggerBoard.cxx:41
 AliMUONRegionalTriggerBoard.cxx:42
 AliMUONRegionalTriggerBoard.cxx:43
 AliMUONRegionalTriggerBoard.cxx:44
 AliMUONRegionalTriggerBoard.cxx:45
 AliMUONRegionalTriggerBoard.cxx:46
 AliMUONRegionalTriggerBoard.cxx:47
 AliMUONRegionalTriggerBoard.cxx:48
 AliMUONRegionalTriggerBoard.cxx:49
 AliMUONRegionalTriggerBoard.cxx:50
 AliMUONRegionalTriggerBoard.cxx:51
 AliMUONRegionalTriggerBoard.cxx:52
 AliMUONRegionalTriggerBoard.cxx:53
 AliMUONRegionalTriggerBoard.cxx:54
 AliMUONRegionalTriggerBoard.cxx:55
 AliMUONRegionalTriggerBoard.cxx:56
 AliMUONRegionalTriggerBoard.cxx:57
 AliMUONRegionalTriggerBoard.cxx:58
 AliMUONRegionalTriggerBoard.cxx:59
 AliMUONRegionalTriggerBoard.cxx:60
 AliMUONRegionalTriggerBoard.cxx:61
 AliMUONRegionalTriggerBoard.cxx:62
 AliMUONRegionalTriggerBoard.cxx:63
 AliMUONRegionalTriggerBoard.cxx:64
 AliMUONRegionalTriggerBoard.cxx:65
 AliMUONRegionalTriggerBoard.cxx:66
 AliMUONRegionalTriggerBoard.cxx:67
 AliMUONRegionalTriggerBoard.cxx:68
 AliMUONRegionalTriggerBoard.cxx:69
 AliMUONRegionalTriggerBoard.cxx:70
 AliMUONRegionalTriggerBoard.cxx:71
 AliMUONRegionalTriggerBoard.cxx:72
 AliMUONRegionalTriggerBoard.cxx:73
 AliMUONRegionalTriggerBoard.cxx:74
 AliMUONRegionalTriggerBoard.cxx:75
 AliMUONRegionalTriggerBoard.cxx:76
 AliMUONRegionalTriggerBoard.cxx:77
 AliMUONRegionalTriggerBoard.cxx:78
 AliMUONRegionalTriggerBoard.cxx:79
 AliMUONRegionalTriggerBoard.cxx:80
 AliMUONRegionalTriggerBoard.cxx:81
 AliMUONRegionalTriggerBoard.cxx:82
 AliMUONRegionalTriggerBoard.cxx:83
 AliMUONRegionalTriggerBoard.cxx:84
 AliMUONRegionalTriggerBoard.cxx:85
 AliMUONRegionalTriggerBoard.cxx:86
 AliMUONRegionalTriggerBoard.cxx:87
 AliMUONRegionalTriggerBoard.cxx:88
 AliMUONRegionalTriggerBoard.cxx:89
 AliMUONRegionalTriggerBoard.cxx:90
 AliMUONRegionalTriggerBoard.cxx:91
 AliMUONRegionalTriggerBoard.cxx:92
 AliMUONRegionalTriggerBoard.cxx:93
 AliMUONRegionalTriggerBoard.cxx:94
 AliMUONRegionalTriggerBoard.cxx:95
 AliMUONRegionalTriggerBoard.cxx:96
 AliMUONRegionalTriggerBoard.cxx:97
 AliMUONRegionalTriggerBoard.cxx:98
 AliMUONRegionalTriggerBoard.cxx:99
 AliMUONRegionalTriggerBoard.cxx:100
 AliMUONRegionalTriggerBoard.cxx:101
 AliMUONRegionalTriggerBoard.cxx:102
 AliMUONRegionalTriggerBoard.cxx:103
 AliMUONRegionalTriggerBoard.cxx:104
 AliMUONRegionalTriggerBoard.cxx:105
 AliMUONRegionalTriggerBoard.cxx:106
 AliMUONRegionalTriggerBoard.cxx:107
 AliMUONRegionalTriggerBoard.cxx:108
 AliMUONRegionalTriggerBoard.cxx:109
 AliMUONRegionalTriggerBoard.cxx:110
 AliMUONRegionalTriggerBoard.cxx:111
 AliMUONRegionalTriggerBoard.cxx:112
 AliMUONRegionalTriggerBoard.cxx:113
 AliMUONRegionalTriggerBoard.cxx:114
 AliMUONRegionalTriggerBoard.cxx:115
 AliMUONRegionalTriggerBoard.cxx:116
 AliMUONRegionalTriggerBoard.cxx:117
 AliMUONRegionalTriggerBoard.cxx:118
 AliMUONRegionalTriggerBoard.cxx:119
 AliMUONRegionalTriggerBoard.cxx:120
 AliMUONRegionalTriggerBoard.cxx:121
 AliMUONRegionalTriggerBoard.cxx:122
 AliMUONRegionalTriggerBoard.cxx:123
 AliMUONRegionalTriggerBoard.cxx:124
 AliMUONRegionalTriggerBoard.cxx:125
 AliMUONRegionalTriggerBoard.cxx:126
 AliMUONRegionalTriggerBoard.cxx:127
 AliMUONRegionalTriggerBoard.cxx:128
 AliMUONRegionalTriggerBoard.cxx:129
 AliMUONRegionalTriggerBoard.cxx:130
 AliMUONRegionalTriggerBoard.cxx:131
 AliMUONRegionalTriggerBoard.cxx:132
 AliMUONRegionalTriggerBoard.cxx:133
 AliMUONRegionalTriggerBoard.cxx:134
 AliMUONRegionalTriggerBoard.cxx:135
 AliMUONRegionalTriggerBoard.cxx:136
 AliMUONRegionalTriggerBoard.cxx:137
 AliMUONRegionalTriggerBoard.cxx:138
 AliMUONRegionalTriggerBoard.cxx:139
 AliMUONRegionalTriggerBoard.cxx:140
 AliMUONRegionalTriggerBoard.cxx:141
 AliMUONRegionalTriggerBoard.cxx:142
 AliMUONRegionalTriggerBoard.cxx:143
 AliMUONRegionalTriggerBoard.cxx:144
 AliMUONRegionalTriggerBoard.cxx:145
 AliMUONRegionalTriggerBoard.cxx:146
 AliMUONRegionalTriggerBoard.cxx:147
 AliMUONRegionalTriggerBoard.cxx:148
 AliMUONRegionalTriggerBoard.cxx:149
 AliMUONRegionalTriggerBoard.cxx:150
 AliMUONRegionalTriggerBoard.cxx:151
 AliMUONRegionalTriggerBoard.cxx:152
 AliMUONRegionalTriggerBoard.cxx:153
 AliMUONRegionalTriggerBoard.cxx:154
 AliMUONRegionalTriggerBoard.cxx:155
 AliMUONRegionalTriggerBoard.cxx:156
 AliMUONRegionalTriggerBoard.cxx:157
 AliMUONRegionalTriggerBoard.cxx:158
 AliMUONRegionalTriggerBoard.cxx:159
 AliMUONRegionalTriggerBoard.cxx:160
 AliMUONRegionalTriggerBoard.cxx:161
 AliMUONRegionalTriggerBoard.cxx:162
 AliMUONRegionalTriggerBoard.cxx:163
 AliMUONRegionalTriggerBoard.cxx:164
 AliMUONRegionalTriggerBoard.cxx:165
 AliMUONRegionalTriggerBoard.cxx:166
 AliMUONRegionalTriggerBoard.cxx:167
 AliMUONRegionalTriggerBoard.cxx:168
 AliMUONRegionalTriggerBoard.cxx:169
 AliMUONRegionalTriggerBoard.cxx:170
 AliMUONRegionalTriggerBoard.cxx:171
 AliMUONRegionalTriggerBoard.cxx:172
 AliMUONRegionalTriggerBoard.cxx:173
 AliMUONRegionalTriggerBoard.cxx:174
 AliMUONRegionalTriggerBoard.cxx:175
 AliMUONRegionalTriggerBoard.cxx:176
 AliMUONRegionalTriggerBoard.cxx:177
 AliMUONRegionalTriggerBoard.cxx:178
 AliMUONRegionalTriggerBoard.cxx:179
 AliMUONRegionalTriggerBoard.cxx:180
 AliMUONRegionalTriggerBoard.cxx:181
 AliMUONRegionalTriggerBoard.cxx:182
 AliMUONRegionalTriggerBoard.cxx:183
 AliMUONRegionalTriggerBoard.cxx:184
 AliMUONRegionalTriggerBoard.cxx:185
 AliMUONRegionalTriggerBoard.cxx:186
 AliMUONRegionalTriggerBoard.cxx:187
 AliMUONRegionalTriggerBoard.cxx:188
 AliMUONRegionalTriggerBoard.cxx:189
 AliMUONRegionalTriggerBoard.cxx:190
 AliMUONRegionalTriggerBoard.cxx:191
 AliMUONRegionalTriggerBoard.cxx:192
 AliMUONRegionalTriggerBoard.cxx:193
 AliMUONRegionalTriggerBoard.cxx:194
 AliMUONRegionalTriggerBoard.cxx:195
 AliMUONRegionalTriggerBoard.cxx:196
 AliMUONRegionalTriggerBoard.cxx:197
 AliMUONRegionalTriggerBoard.cxx:198
 AliMUONRegionalTriggerBoard.cxx:199
 AliMUONRegionalTriggerBoard.cxx:200
 AliMUONRegionalTriggerBoard.cxx:201
 AliMUONRegionalTriggerBoard.cxx:202
 AliMUONRegionalTriggerBoard.cxx:203
 AliMUONRegionalTriggerBoard.cxx:204
 AliMUONRegionalTriggerBoard.cxx:205
 AliMUONRegionalTriggerBoard.cxx:206
 AliMUONRegionalTriggerBoard.cxx:207
 AliMUONRegionalTriggerBoard.cxx:208
 AliMUONRegionalTriggerBoard.cxx:209
 AliMUONRegionalTriggerBoard.cxx:210
 AliMUONRegionalTriggerBoard.cxx:211
 AliMUONRegionalTriggerBoard.cxx:212
 AliMUONRegionalTriggerBoard.cxx:213
 AliMUONRegionalTriggerBoard.cxx:214
 AliMUONRegionalTriggerBoard.cxx:215
 AliMUONRegionalTriggerBoard.cxx:216
 AliMUONRegionalTriggerBoard.cxx:217
 AliMUONRegionalTriggerBoard.cxx:218
 AliMUONRegionalTriggerBoard.cxx:219
 AliMUONRegionalTriggerBoard.cxx:220
 AliMUONRegionalTriggerBoard.cxx:221
 AliMUONRegionalTriggerBoard.cxx:222
 AliMUONRegionalTriggerBoard.cxx:223
 AliMUONRegionalTriggerBoard.cxx:224
 AliMUONRegionalTriggerBoard.cxx:225
 AliMUONRegionalTriggerBoard.cxx:226
 AliMUONRegionalTriggerBoard.cxx:227
 AliMUONRegionalTriggerBoard.cxx:228
 AliMUONRegionalTriggerBoard.cxx:229
 AliMUONRegionalTriggerBoard.cxx:230
 AliMUONRegionalTriggerBoard.cxx:231
 AliMUONRegionalTriggerBoard.cxx:232
 AliMUONRegionalTriggerBoard.cxx:233
 AliMUONRegionalTriggerBoard.cxx:234
 AliMUONRegionalTriggerBoard.cxx:235
 AliMUONRegionalTriggerBoard.cxx:236
 AliMUONRegionalTriggerBoard.cxx:237
 AliMUONRegionalTriggerBoard.cxx:238