diff --git a/Trigger/TrigT1/TrigT1RPClogic/src/decodeSL.cxx b/Trigger/TrigT1/TrigT1RPClogic/src/decodeSL.cxx index 24513fcf0dcb8765e40489e2925eef3ff5536020..28e56462ec14b3429b65b90909d3a5564e7a3305 100755 --- a/Trigger/TrigT1/TrigT1RPClogic/src/decodeSL.cxx +++ b/Trigger/TrigT1/TrigT1RPClogic/src/decodeSL.cxx @@ -1,20 +1,34 @@ /* - Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration */ #include "TrigT1RPClogic/decodeSL.h" +namespace{ + /* + * Note implicit sign extension: field with type unsigned short (16 bits, unsigned) + * is promoted in (unsigned short)field << posit to type int (32 bits, signed), + * then sign-extended to type unsigned long (64 bits, unsigned). If + * (unsigned short)field << posit is greater than 0x7FFFFFFF, the upper bits of the + * result will all be 1. + */ + unsigned short + code(unsigned long int slword, unsigned short int field, unsigned short int posit){ + return ((slword&((unsigned short int) field<<posit))>>posit); + } +} + namespace TriggerRPC{ //****************************************************************************// unsigned short int moreThan2(unsigned long int slword) { // -// returns 1 if the rae more than 2 candidates in a sector +// returns 1 if there are more than 2 candidates in a sector // returns 0 otherwise // unsigned short int field=0x1; unsigned short int posit=0; - return ((slword&((unsigned short int) field<<posit))>>posit); + return code(slword, field, posit); } //****************************************************************************// unsigned short int ROI1(unsigned long int slword) { @@ -23,7 +37,7 @@ unsigned short int ROI1(unsigned long int slword) { // unsigned short int field=0x1f; unsigned short int posit=1; - return ((slword&((unsigned short int) field<<posit))>>posit); + return code(slword, field, posit); } //****************************************************************************// unsigned short int OVL1(unsigned long int slword) { @@ -32,7 +46,7 @@ unsigned short int OVL1(unsigned long int slword) { // unsigned short int field=0x3; unsigned short int posit=8; - return ((slword&((unsigned short int) field<<posit))>>posit); + return code(slword, field, posit); } //****************************************************************************// unsigned short int ROI2(unsigned long int slword) { @@ -41,7 +55,7 @@ unsigned short int ROI2(unsigned long int slword) { // unsigned short int field=0x1f; unsigned short int posit=10; - return ((slword&((unsigned short int) field<<posit))>>posit); + return code(slword, field, posit); } //****************************************************************************// unsigned short int OVL2(unsigned long int slword) { @@ -50,7 +64,7 @@ unsigned short int OVL2(unsigned long int slword) { // unsigned short int field=0x3; unsigned short int posit=17; - return ((slword&((unsigned short int) field<<posit))>>posit); + return code(slword, field, posit); } //****************************************************************************// unsigned short int PT1(unsigned long int slword) { @@ -59,7 +73,7 @@ unsigned short int PT1(unsigned long int slword) { // unsigned short int field=0x7; unsigned short int posit=19; - unsigned short int ptcode=((slword&((unsigned short int) field<<posit))>>posit); + unsigned short int ptcode = code(slword, field, posit); if(!ptcode) { return 0; } else { @@ -74,7 +88,7 @@ unsigned short int PT2(unsigned long int slword) { // unsigned short int field=0x7; unsigned short int posit=22; - unsigned short int ptcode=((slword&((unsigned short int) field<<posit))>>posit); + unsigned short int ptcode = code(slword, field, posit); if(!ptcode) { return 0; } else { @@ -85,22 +99,22 @@ unsigned short int PT2(unsigned long int slword) { //****************************************************************************// unsigned short moreThan1_1(unsigned long int slword) { // -// returns 1 if the are more than 1 candidates in ROI1 +// returns 1 if there is more than 1 candidate in ROI1 // returns 0 otherwise // unsigned short int field=0x1; unsigned short int posit=25; - return ((slword&((unsigned short int) field<<posit))>>posit); + return code(slword, field, posit); } //****************************************************************************// unsigned short moreThan1_2(unsigned long int slword) { // -// returns 1 if the are more than 1 candidates in ROI2 +// returns 1 if there is more than 1 candidate in ROI2 // returns 0 otherwise // unsigned short int field=0x1; unsigned short int posit=26; - return ((slword&((unsigned short int) field<<posit))>>posit); + return code(slword, field, posit); } //****************************************************************************// unsigned short BunchXID(unsigned long int slword) { @@ -109,7 +123,7 @@ unsigned short BunchXID(unsigned long int slword) { // unsigned short int field=0x7; unsigned short int posit=27; - return ((slword&((unsigned short int) field<<posit))>>posit); + return code(slword, field, posit); }