CMS 3D CMS Logo

List of all members | Public Member Functions | Private Member Functions | Private Attributes
CSCALCTCrossCLCT Class Reference

#include <CSCALCTCrossCLCT.h>

Public Member Functions

 CSCALCTCrossCLCT (unsigned endcap, unsigned station, unsigned ring, bool ignoreAlctCrossClct, const edm::ParameterSet &conf)
 
bool doesALCTCrossCLCT (const CSCALCTDigi &a, const CSCCLCTDigi &c) const
 

Private Member Functions

bool doesWiregroupCrossHalfStrip (int wg, int keystrip) const
 

Private Attributes

unsigned endcap_
 
bool gangedME1a_
 
bool ignoreAlctCrossClct_
 
unsigned ring_
 
unsigned station_
 

Detailed Description

Helper class to check if an ALCT crosses with a CLCT in ME1/1. This check was originally introduced by Vadim Khotilovich in 2010 to improve the quality of the ME1/1 LCTs that are sent to the endcap muon track finder. However, it is the policy of the EMTF group that they would like to receive all LCT information, even if an ME1/1 LCT has no physical crossing half-strips and wiregroups. The EMTF disassembles LCTs into ALCT and CLCT anyway and thus for normal trigger operations this class should not be used. However, in the event that multiple high-quality LCTs are present in ME1/1, this class could be used to trim the unphysical ones. As of writing (April 2021) no plans are in place to implement this feature into the CSC trigger firmware

Author
Sven Dildick (Rice University)

Definition at line 32 of file CSCALCTCrossCLCT.h.

Constructor & Destructor Documentation

◆ CSCALCTCrossCLCT()

CSCALCTCrossCLCT::CSCALCTCrossCLCT ( unsigned  endcap,
unsigned  station,
unsigned  ring,
bool  ignoreAlctCrossClct,
const edm::ParameterSet conf 
)

Member Function Documentation

◆ doesALCTCrossCLCT()

bool CSCALCTCrossCLCT::doesALCTCrossCLCT ( const CSCALCTDigi a,
const CSCCLCTDigi c 
) const

Definition at line 40 of file CSCALCTCrossCLCT.cc.

References a, HltBtagPostValidation_cff::c, doesWiregroupCrossHalfStrip(), ignoreAlctCrossClct_, ring_, and station_.

40  {
41  // both need to valid
42  if (!c.isValid() || !a.isValid()) {
43  return false;
44  }
45 
46  // when non-overlapping half-strips and wiregroups don't matter
48  return true;
49 
50  // overlap only needs to be considered for ME1/1
51  if (station_ == 1 and ring_ == 1) {
52  return doesWiregroupCrossHalfStrip(a.getKeyWG(), c.getKeyStrip());
53  } else
54  return true;
55 }
double a
Definition: hdecay.h:121
bool doesWiregroupCrossHalfStrip(int wg, int keystrip) const

◆ doesWiregroupCrossHalfStrip()

bool CSCALCTCrossCLCT::doesWiregroupCrossHalfStrip ( int  wg,
int  keystrip 
) const
private

Definition at line 57 of file CSCALCTCrossCLCT.cc.

References endcap_, gangedME1a_, CSCConstants::MAX_HALF_STRIP_ME1A_GANGED, CSCConstants::MAX_HALF_STRIP_ME1A_UNGANGED, CSCConstants::MAX_HALF_STRIP_ME1B, and CSCConstants::NUM_WIREGROUPS_ME11.

Referenced by doesALCTCrossCLCT().

57  {
58  // sanity-check for invalid wiregroups
59  if (wiregroup < 0 or wiregroup >= CSCConstants::NUM_WIREGROUPS_ME11)
60  return false;
61 
62  const int min_hs_ME1a = wg_min_hs_ME1a_[wiregroup];
63  const int max_hs_ME1a = wg_max_hs_ME1a_[wiregroup];
64  const int min_hs_ME1a_ganged = wg_min_hs_ME1a_ganged_[wiregroup];
65  const int max_hs_ME1a_ganged = wg_max_hs_ME1a_ganged_[wiregroup];
66  const int min_hs_ME1b = wg_min_hs_ME1b_[wiregroup];
67  const int max_hs_ME1b = wg_max_hs_ME1b_[wiregroup];
68 
69  // ME1/a half-strip starts at 128
70  if (halfstrip > CSCConstants::MAX_HALF_STRIP_ME1B) {
71  if (!gangedME1a_) {
72  // wrap around ME11 HS number for -z endcap
73  if (endcap_ == 2) {
74  // first subtract 128
75  halfstrip -= 1 + CSCConstants::MAX_HALF_STRIP_ME1B;
76  // flip the HS
77  halfstrip = CSCConstants::MAX_HALF_STRIP_ME1A_UNGANGED - halfstrip;
78  // then add 128 again
79  halfstrip += 1 + CSCConstants::MAX_HALF_STRIP_ME1B;
80  }
81  return halfstrip >= min_hs_ME1a && halfstrip <= max_hs_ME1a;
82  }
83 
84  else {
85  // wrap around ME11 HS number for -z endcap
86  if (endcap_ == 2) {
87  // first subtract 128
88  halfstrip -= 1 + CSCConstants::MAX_HALF_STRIP_ME1B;
89  // flip the HS
90  halfstrip = CSCConstants::MAX_HALF_STRIP_ME1A_GANGED - halfstrip;
91  // then add 128 again
92  halfstrip += 1 + CSCConstants::MAX_HALF_STRIP_ME1B;
93  }
94  return halfstrip >= min_hs_ME1a_ganged && halfstrip <= max_hs_ME1a_ganged;
95  }
96  }
97  // ME1/b half-strip ends at 127
98  else if (halfstrip <= CSCConstants::MAX_HALF_STRIP_ME1B) {
99  if (endcap_ == 2) {
100  halfstrip = CSCConstants::MAX_HALF_STRIP_ME1B - halfstrip;
101  }
102  return halfstrip >= min_hs_ME1b && halfstrip <= max_hs_ME1b;
103  }
104  // all other cases, return true
105  else
106  return true;
107 }
static constexpr int MAX_HALF_STRIP_ME1A_UNGANGED
Definition: CSCConstants.h:87
static constexpr int MAX_HALF_STRIP_ME1B
Definition: CSCConstants.h:88
static constexpr int MAX_HALF_STRIP_ME1A_GANGED
Definition: CSCConstants.h:86

Member Data Documentation

◆ endcap_

unsigned CSCALCTCrossCLCT::endcap_
private

Definition at line 48 of file CSCALCTCrossCLCT.h.

Referenced by doesWiregroupCrossHalfStrip().

◆ gangedME1a_

bool CSCALCTCrossCLCT::gangedME1a_
private

Definition at line 51 of file CSCALCTCrossCLCT.h.

Referenced by CSCALCTCrossCLCT(), and doesWiregroupCrossHalfStrip().

◆ ignoreAlctCrossClct_

bool CSCALCTCrossCLCT::ignoreAlctCrossClct_
private

Definition at line 52 of file CSCALCTCrossCLCT.h.

Referenced by CSCALCTCrossCLCT(), and doesALCTCrossCLCT().

◆ ring_

unsigned CSCALCTCrossCLCT::ring_
private

Definition at line 50 of file CSCALCTCrossCLCT.h.

Referenced by doesALCTCrossCLCT().

◆ station_

unsigned CSCALCTCrossCLCT::station_
private

Definition at line 49 of file CSCALCTCrossCLCT.h.

Referenced by doesALCTCrossCLCT().