CMS 3D CMS Logo

List of all members | Public Types | Public Member Functions | Private Types | Private Attributes | Static Private Attributes
CSCMotherboardME3141RPC Class Reference

#include <CSCMotherboardME3141RPC.h>

Inheritance diagram for CSCMotherboardME3141RPC:
CSCMotherboard

Public Types

enum  MEX1Station { ME31 = 1, ME41 }
 

Public Member Functions

int assignRPCRoll (double eta)
 
void clear ()
 
CSCCorrelatedLCTDigi constructLCTsRPC (const CSCALCTDigi &alct, const CSCCLCTDigi &clct, const RPCDigisBX &digis=RPCDigisBX())
 
CSCCorrelatedLCTDigi constructLCTsRPC (const CSCCLCTDigi &clct, const RPCDigi &rpc, int roll, bool oldDataFormat)
 
CSCCorrelatedLCTDigi constructLCTsRPC (const CSCALCTDigi &alct, const RPCDigi &rpc, bool oldDataFormat)
 
void correlateLCTsRPC (CSCALCTDigi bestALCT, CSCALCTDigi secondALCT, CSCCLCTDigi bestCLCT, CSCCLCTDigi secondCLCT, CSCCorrelatedLCTDigi &lct1, CSCCorrelatedLCTDigi &lct2, const RPCDigisBX &digis=RPCDigisBX())
 
void correlateLCTsRPC (CSCCLCTDigi bestCLCT, CSCCLCTDigi secondCLCT, RPCDigi rpcDigi, int roll, CSCCorrelatedLCTDigi &lct1, CSCCorrelatedLCTDigi &lct2)
 
void correlateLCTsRPC (CSCALCTDigi bestALCT, CSCALCTDigi secondALCT, RPCDigi rpcPad, CSCCorrelatedLCTDigi &lct1, CSCCorrelatedLCTDigi &lct2)
 
std::map< int, std::pair< double, double > > createRPCRollLUT (RPCDetId id)
 
 CSCMotherboardME3141RPC (unsigned endcap, unsigned station, unsigned sector, unsigned subsector, unsigned chamber, const edm::ParameterSet &conf)
 
unsigned int findQualityRPC (const CSCALCTDigi &aLCT, const CSCCLCTDigi &cLCT, bool hasRPC)
 
std::vector< CSCCorrelatedLCTDigigetLCTs ()
 
bool hasRE31andRE41 ()
 
RPCDigisBX matchingRPCDigis (const CSCCLCTDigi &cLCT, const RPCDigisBX &digis=RPCDigisBX(), bool first=true)
 
RPCDigisBX matchingRPCDigis (const CSCALCTDigi &aLCT, const RPCDigisBX &digis=RPCDigisBX(), bool first=true)
 
RPCDigisBX matchingRPCDigis (const CSCCLCTDigi &cLCT, const CSCALCTDigi &aLCT, const RPCDigisBX &digis=RPCDigisBX(), bool first=true)
 
void printRPCTriggerDigis (int minBX, int maxBx)
 
std::vector< CSCCorrelatedLCTDigireadoutLCTs ()
 
void retrieveRPCDigis (const RPCDigiCollection *digis, unsigned id)
 
void run (const CSCWireDigiCollection *wiredc, const CSCComparatorDigiCollection *compdc, const RPCDigiCollection *rpcDigis)
 
void setCSCGeometry (const CSCGeometry *g)
 set CSC and RPC geometries for the matching needs More...
 
void setRPCGeometry (const RPCGeometry *g)
 
std::vector< CSCCorrelatedLCTDigisortLCTsByQuality (int bx)
 
std::vector< CSCCorrelatedLCTDigisortLCTsByQuality (std::vector< CSCCorrelatedLCTDigi >)
 
std::vector< CSCCorrelatedLCTDigisortLCTsByRPCDPhi (int bx)
 
std::vector< CSCCorrelatedLCTDigisortLCTsByRPCDPhi (std::vector< CSCCorrelatedLCTDigi >)
 
 ~CSCMotherboardME3141RPC () override
 
- Public Member Functions inherited from CSCMotherboard
void clear ()
 
 CSCMotherboard (unsigned endcap, unsigned station, unsigned sector, unsigned subsector, unsigned chamber, const edm::ParameterSet &conf)
 
 CSCMotherboard ()
 
std::vector< CSCCorrelatedLCTDigigetLCTs ()
 
std::vector< CSCCorrelatedLCTDigireadoutLCTs ()
 
void run (const std::vector< int > w_time[CSCConstants::NUM_LAYERS][CSCConstants::MAX_NUM_WIRES], const std::vector< int > hs_times[CSCConstants::NUM_LAYERS][CSCConstants::NUM_HALF_STRIPS_7CFEBS], const std::vector< int > ds_times[CSCConstants::NUM_LAYERS][CSCConstants::NUM_HALF_STRIPS_7CFEBS])
 
void run (const CSCWireDigiCollection *wiredc, const CSCComparatorDigiCollection *compdc)
 
void setConfigParameters (const CSCDBL1TPParameters *conf)
 
virtual ~CSCMotherboard ()=default
 

Private Types

typedef std::pair< unsigned int, const RPCDigiRPCDigiBX
 
typedef std::map< int, RPCDigisBXRPCDigis
 
typedef std::vector< RPCDigiBXRPCDigisBX
 

Private Attributes

std::vector< CSCALCTDigialctV
 
CSCCorrelatedLCTDigi allLCTs [MAX_LCT_BINS][15][2]
 
bool buildLCTfromALCTandRPC_
 
bool buildLCTfromCLCTandRPC_
 
bool buildLCTfromLowQstubandRPC_
 
std::vector< CSCCLCTDigiclctV
 
const CSCGeometrycsc_g
 
std::map< int, std::pair< int, int > > cscHsToRpcStrip_
 
std::map< int, int > cscWgToRpcRoll_
 
bool debug_luts_
 
bool debug_rpc_dphi
 
bool debug_rpc_matching_
 
bool drop_used_clcts
 
bool dropLowQualityCLCTsNoRPCs_
 
bool match_earliest_clct_me3141_only
 
unsigned int max_me3141_lcts
 
int maxDeltaBXRPC_
 
int maxDeltaStripRPC_
 
int maxDeltaStripRPCEven_
 
int maxDeltaStripRPCOdd_
 
int maxDeltaWg_
 
int pref [MAX_LCT_BINS]
 
bool promoteALCTRPCpattern_
 
bool promoteALCTRPCquality_
 
bool promoteCLCTRPCquality_
 
const RPCGeometryrpc_g
 
RPCDigis rpcDigis_
 
std::map< int, std::pair< double, double > > rpcRollToEtaLimits_
 
std::map< int, int > rpcStripToCscHs_
 
bool runME3141ILT_
 
unsigned int tmb_cross_bx_algo
 
bool useOldLCTDataFormat_
 

Static Private Attributes

static const double lut_pt_vs_dphi_rpccsc_me31 [8][3]
 
static const double lut_pt_vs_dphi_rpccsc_me41 [8][3]
 
static const double lut_wg_me31_eta_even [96][2]
 
static const double lut_wg_me31_eta_odd [96][2]
 
static const double lut_wg_me41_eta_even [96][2]
 
static const double lut_wg_me41_eta_odd [96][2]
 

Additional Inherited Members

- Public Attributes inherited from CSCMotherboard
std::unique_ptr< CSCAnodeLCTProcessoralct
 
std::unique_ptr< CSCCathodeLCTProcessorclct
 
- Protected Types inherited from CSCMotherboard
enum  { MAX_LCT_BINS = 16 }
 
- Protected Member Functions inherited from CSCMotherboard
void checkConfigParameters ()
 
CSCCorrelatedLCTDigi constructLCTs (const CSCALCTDigi &aLCT, const CSCCLCTDigi &cLCT, int)
 
void correlateLCTs (CSCALCTDigi bestALCT, CSCALCTDigi secondALCT, CSCCLCTDigi bestCLCT, CSCCLCTDigi secondCLCT)
 
void dumpConfigParams () const
 
unsigned int encodePattern (const int ptn, const int highPt)
 
unsigned int findQuality (const CSCALCTDigi &aLCT, const CSCCLCTDigi &cLCT)
 
void testLCT ()
 
- Static Protected Member Functions inherited from CSCMotherboard
static bool sortByGEMDphi (const CSCCorrelatedLCTDigi &, const CSCCorrelatedLCTDigi &)
 
static bool sortByQuality (const CSCCorrelatedLCTDigi &, const CSCCorrelatedLCTDigi &)
 
- Protected Attributes inherited from CSCMotherboard
unsigned int alct_trig_enable
 
unsigned int clct_trig_enable
 
bool drop_used_alcts
 
int early_tbins
 
CSCCorrelatedLCTDigi firstLCT [MAX_LCT_BINS]
 
int infoV
 
bool isMTCC
 
bool isSLHC
 
bool isTMB07
 
int lct_central_bx
 
unsigned int match_trig_enable
 
unsigned int match_trig_window_size
 
unsigned int mpc_block_me1a
 
bool readout_earliest_2
 
CSCCorrelatedLCTDigi secondLCT [MAX_LCT_BINS]
 
const unsigned theEndcap
 
unsigned theRing
 
const unsigned theSector
 
const unsigned theStation
 
const unsigned theSubsector
 
const unsigned theTrigChamber
 
unsigned int tmb_l1a_window_size
 
- Static Protected Attributes inherited from CSCMotherboard
static const unsigned int def_alct_trig_enable = 0
 
static const unsigned int def_clct_trig_enable = 0
 
static const unsigned int def_match_trig_enable = 1
 
static const unsigned int def_match_trig_window_size = 7
 
static const unsigned int def_mpc_block_me1a = 1
 
static const unsigned int def_tmb_l1a_window_size = 7
 

Detailed Description

Definition at line 26 of file CSCMotherboardME3141RPC.h.

Member Typedef Documentation

typedef std::pair<unsigned int, const RPCDigi> CSCMotherboardME3141RPC::RPCDigiBX
private

Definition at line 28 of file CSCMotherboardME3141RPC.h.

typedef std::map<int, RPCDigisBX> CSCMotherboardME3141RPC::RPCDigis
private

Definition at line 30 of file CSCMotherboardME3141RPC.h.

typedef std::vector<RPCDigiBX> CSCMotherboardME3141RPC::RPCDigisBX
private

Definition at line 29 of file CSCMotherboardME3141RPC.h.

Member Enumeration Documentation

labels for ME1a and ME1B

Enumerator
ME31 
ME41 

Definition at line 48 of file CSCMotherboardME3141RPC.h.

Constructor & Destructor Documentation

CSCMotherboardME3141RPC::CSCMotherboardME3141RPC ( unsigned  endcap,
unsigned  station,
unsigned  sector,
unsigned  subsector,
unsigned  chamber,
const edm::ParameterSet conf 
)

Normal constructor.

Definition at line 94 of file CSCMotherboardME3141RPC.cc.

References buildLCTfromALCTandRPC_, buildLCTfromCLCTandRPC_, buildLCTfromLowQstubandRPC_, debug_luts_, debug_rpc_matching_, drop_used_clcts, dropLowQualityCLCTsNoRPCs_, edm::ParameterSet::getParameter(), CSCMotherboard::isSLHC, funct::m, match_earliest_clct_me3141_only, CSCMotherboard::match_trig_window_size, max_me3141_lcts, maxDeltaBXRPC_, maxDeltaStripRPCEven_, maxDeltaStripRPCOdd_, maxDeltaWg_, pref, promoteALCTRPCpattern_, promoteALCTRPCquality_, promoteCLCTRPCquality_, runME3141ILT_, tmb_cross_bx_algo, and useOldLCTDataFormat_.

97  :
98  CSCMotherboard(endcap, station, sector, subsector, chamber, conf)
99 {
100  const edm::ParameterSet commonParams(conf.getParameter<edm::ParameterSet>("commonParam"));
101  runME3141ILT_ = commonParams.getParameter<bool>("runME3141ILT");
102 
103  if (!isSLHC) edm::LogError("L1CSCTPEmulatorConfigError")
104  << "+++ Upgrade CSCMotherboardME3141RPC constructed while isSLHC is not set! +++\n";
105 
106  const edm::ParameterSet me3141tmbParams(conf.getParameter<edm::ParameterSet>("me3141tmbSLHCRPC"));
107 
108  // whether to not reuse CLCTs that were used by previous matching ALCTs
109  // in ALCT-to-CLCT algorithm
110  drop_used_clcts = me3141tmbParams.getParameter<bool>("tmbDropUsedClcts");
111 
112  match_earliest_clct_me3141_only = me3141tmbParams.getParameter<bool>("matchEarliestClctME3141Only");
113 
114  tmb_cross_bx_algo = me3141tmbParams.getParameter<unsigned int>("tmbCrossBxAlgorithm");
115 
116  // maximum lcts per BX in ME2
117  max_me3141_lcts = me3141tmbParams.getParameter<unsigned int>("maxME3141LCTs");
118 
120  for (unsigned int m=2; m<match_trig_window_size; m+=2)
121  {
122  pref[m-1] = pref[0] - m/2;
123  pref[m] = pref[0] + m/2;
124  }
125 
126  //----------------------------------------------------------------------------------------//
127 
128  // R P C - C S C I N T E G R A T E D L O C A L A L G O R I T H M
129 
130  //----------------------------------------------------------------------------------------//
131 
132  // debug
133  debug_luts_ = me3141tmbParams.getParameter<bool>("debugLUTs");
134  debug_rpc_matching_ = me3141tmbParams.getParameter<bool>("debugMatching");
135 
136  // deltas used to match to RPC digis
137  maxDeltaBXRPC_ = me3141tmbParams.getParameter<int>("maxDeltaBXRPC");
138  maxDeltaStripRPCOdd_ = me3141tmbParams.getParameter<int>("maxDeltaStripRPCOdd");
139  maxDeltaStripRPCEven_ = me3141tmbParams.getParameter<int>("maxDeltaStripRPCEven");
140  maxDeltaWg_ = me3141tmbParams.getParameter<int>("maxDeltaWg");
141 
142  // use "old" or "new" dataformat for integrated LCTs?
143  useOldLCTDataFormat_ = me3141tmbParams.getParameter<bool>("useOldLCTDataFormat");
144 
145  // drop low quality stubs if they don't have RPCs
146  dropLowQualityCLCTsNoRPCs_ = me3141tmbParams.getParameter<bool>("dropLowQualityCLCTsNoRPCs");
147 
148  // build LCT from CLCT and RPC
149  buildLCTfromALCTandRPC_ = me3141tmbParams.getParameter<bool>("buildLCTfromALCTandRPC");
150  buildLCTfromCLCTandRPC_ = me3141tmbParams.getParameter<bool>("buildLCTfromCLCTandRPC");
151  buildLCTfromLowQstubandRPC_ = me3141tmbParams.getParameter<bool>("buildLCTfromLowQstubandRPC");
152 
153  // promote ALCT-RPC pattern
154  promoteALCTRPCpattern_ = me3141tmbParams.getParameter<bool>("promoteALCTRPCpattern");
155 
156  // promote ALCT-CLCT-RPC quality
157  promoteALCTRPCquality_ = me3141tmbParams.getParameter<bool>("promoteALCTRPCquality");
158  promoteCLCTRPCquality_ = me3141tmbParams.getParameter<bool>("promoteCLCTRPCquality");
159 }
T getParameter(std::string const &) const
unsigned int match_trig_window_size
CSCMotherboardME3141RPC::~CSCMotherboardME3141RPC ( )
override

Default destructor.

Definition at line 161 of file CSCMotherboardME3141RPC.cc.

162 {
163 }

Member Function Documentation

int CSCMotherboardME3141RPC::assignRPCRoll ( double  eta)

Definition at line 556 of file CSCMotherboardME3141RPC.cc.

References maxEta, cutBasedElectronID_CSA14_50ns_V0_cff::minEta, AlCaHLTBitMon_ParallelJobs::p, mps_fire::result, and rpcRollToEtaLimits_.

Referenced by run(), and setRPCGeometry().

557 {
558  int result = -99;
559  for (const auto& p : rpcRollToEtaLimits_) {
560  const float minEta((p.second).first);
561  const float maxEta((p.second).second);
562  if (minEta <= eta and eta <= maxEta) {
563  result = p.first;
564  break;
565  }
566  }
567  return result;
568 }
double maxEta
std::map< int, std::pair< double, double > > rpcRollToEtaLimits_
void CSCMotherboardME3141RPC::clear ( void  )

Clears correlated LCT and passes clear signal on to cathode and anode LCT processors.

Definition at line 165 of file CSCMotherboardME3141RPC.cc.

References allLCTs, CSCMotherboard::clear(), cscHsToRpcStrip_, cscWgToRpcRoll_, mps_fire::i, CSCMotherboard::match_trig_window_size, CSCMotherboard::MAX_LCT_BINS, rpcDigis_, rpcRollToEtaLimits_, and rpcStripToCscHs_.

Referenced by run().

166 {
168 
169  for (int bx = 0; bx < MAX_LCT_BINS; bx++)
170  for (unsigned int mbx = 0; mbx < match_trig_window_size; mbx++)
171  for (int i=0;i<2;i++)
172  allLCTs[bx][mbx][i].clear();
173 
174  rpcRollToEtaLimits_.clear();
175  cscWgToRpcRoll_.clear();
176  rpcStripToCscHs_.clear();
177  cscHsToRpcStrip_.clear();
178  rpcDigis_.clear();
179 }
std::map< int, int > cscWgToRpcRoll_
std::map< int, int > rpcStripToCscHs_
unsigned int match_trig_window_size
std::map< int, std::pair< int, int > > cscHsToRpcStrip_
std::map< int, std::pair< double, double > > rpcRollToEtaLimits_
CSCCorrelatedLCTDigi allLCTs[MAX_LCT_BINS][15][2]
CSCCorrelatedLCTDigi CSCMotherboardME3141RPC::constructLCTsRPC ( const CSCALCTDigi alct,
const CSCCLCTDigi clct,
const RPCDigisBX digis = RPCDigisBX() 
)

Definition at line 903 of file CSCMotherboardME3141RPC.cc.

References CSCMotherboard::encodePattern(), findQualityRPC(), CSCCLCTDigi::getBend(), CSCALCTDigi::getBX(), CSCCLCTDigi::getBX(), CSCCLCTDigi::getKeyStrip(), CSCALCTDigi::getKeyWG(), CSCCLCTDigi::getPattern(), CSCCLCTDigi::getStripType(), CSCALCTDigi::isValid(), CSCMotherboard::lct_central_bx, listBenchmarks::pattern, btvTracks_cfi::quality, edm::second(), and CSCMotherboard::theTrigChamber.

Referenced by correlateLCTsRPC(), and setRPCGeometry().

904 {
905  // CLCT pattern number
906  unsigned int pattern = encodePattern(cLCT.getPattern(), cLCT.getStripType());
907 
908  // LCT quality number
909  unsigned int quality = findQualityRPC(aLCT, cLCT, !digis.empty());
910 
911  // Bunch crossing: get it from cathode LCT if anode LCT is not there.
912  int bx = aLCT.isValid() ? aLCT.getBX() : cLCT.getBX();
913  if (!digis.empty()) bx = lct_central_bx + digis[0].second.bx(); // fix this!!!
914 
915  // construct correlated LCT; temporarily assign track number of 0.
916  int trknmb = 0;
917  CSCCorrelatedLCTDigi thisLCT(trknmb, 1, quality, aLCT.getKeyWG(),
918  cLCT.getKeyStrip(), pattern, cLCT.getBend(),
919  bx, 0, 0, 0, theTrigChamber);
920  return thisLCT;
921 }
const unsigned theTrigChamber
U second(std::pair< T, U > const &p)
unsigned int encodePattern(const int ptn, const int highPt)
unsigned int findQualityRPC(const CSCALCTDigi &aLCT, const CSCCLCTDigi &cLCT, bool hasRPC)
CSCCorrelatedLCTDigi CSCMotherboardME3141RPC::constructLCTsRPC ( const CSCCLCTDigi clct,
const RPCDigi rpc,
int  roll,
bool  oldDataFormat 
)

Definition at line 924 of file CSCMotherboardME3141RPC.cc.

References RPCDigi::bx(), CSCMotherboard::encodePattern(), CSCCLCTDigi::getBend(), CSCCLCTDigi::getKeyStrip(), CSCCLCTDigi::getPattern(), CSCCLCTDigi::getStripType(), CSCMotherboard::lct_central_bx, listBenchmarks::pattern, promoteCLCTRPCquality_, btvTracks_cfi::quality, and CSCMotherboard::theTrigChamber.

927 {
928  if (oldDataFormat){
929  // CLCT pattern number - for the time being, do not include RPCs in the pattern
930  unsigned int pattern = encodePattern(clct.getPattern(), clct.getStripType());
931 
932  // LCT quality number - dummy quality
933  unsigned int quality = promoteCLCTRPCquality_ ? 14 : 11;
934 
935  // Bunch crossing: pick RPC bx
936  int bx = rpc.bx() + lct_central_bx;
937 
938  // pick a random WG in the roll range
939  int wg(4);
940 
941  // construct correlated LCT; temporarily assign track number of 0.
942  return CSCCorrelatedLCTDigi(0, 1, quality, wg, clct.getKeyStrip(), pattern, clct.getBend(), bx, 0, 0, 0, theTrigChamber);
943  }
944  else {
945  // CLCT pattern number - no pattern
946  unsigned int pattern = 0;//encodePatternRPC(clct.getPattern(), clct.getStripType());
947 
948  // LCT quality number - dummy quality
949  unsigned int quality = 5;//findQualityRPC(alct, rpc);
950 
951  // Bunch crossing: get it from cathode LCT if anode LCT is not there.
952  int bx = rpc.bx() + lct_central_bx;;
953 
954  // ALCT WG
955  int wg(0);
956 
957  // construct correlated LCT; temporarily assign track number of 0.
958  return CSCCorrelatedLCTDigi(0, 1, quality, wg, 0, pattern, 0, bx, 0, 0, 0, theTrigChamber);
959  }
960 }
int bx() const
Definition: RPCDigi.h:29
const unsigned theTrigChamber
int getStripType() const
return striptype
Definition: CSCCLCTDigi.h:39
int getBend() const
return bend
Definition: CSCCLCTDigi.h:42
unsigned int encodePattern(const int ptn, const int highPt)
int getPattern() const
return pattern
Definition: CSCCLCTDigi.h:36
int getKeyStrip() const
Definition: CSCCLCTDigi.h:65
CSCCorrelatedLCTDigi CSCMotherboardME3141RPC::constructLCTsRPC ( const CSCALCTDigi alct,
const RPCDigi rpc,
bool  oldDataFormat 
)

Definition at line 963 of file CSCMotherboardME3141RPC.cc.

References RPCDigi::bx(), CSCALCTDigi::getKeyWG(), CSCMotherboard::lct_central_bx, listBenchmarks::pattern, promoteALCTRPCpattern_, promoteALCTRPCquality_, btvTracks_cfi::quality, rpcStripToCscHs_, RPCDigi::strip(), and CSCMotherboard::theTrigChamber.

966 {
967  if (oldDataFormat){
968  // CLCT pattern number - set it to a highest value
969  // hack to get LCTs in the CSCTF
970  unsigned int pattern = promoteALCTRPCpattern_ ? 10 : 0;
971 
972  // LCT quality number - set it to a very high value
973  // hack to get LCTs in the CSCTF
974  unsigned int quality = promoteALCTRPCquality_ ? 14 : 11;
975 
976  // Bunch crossing
977  int bx = rpc.bx() + lct_central_bx;
978 
979  // get keyStrip from LUT
980  int keyStrip = rpcStripToCscHs_[rpc.strip()];
981 
982  // get wiregroup from ALCT
983  int wg = alct.getKeyWG();
984 
985  // construct correlated LCT; temporarily assign track number of 0.
986  return CSCCorrelatedLCTDigi(0, 1, quality, wg, keyStrip, pattern, 0, bx, 0, 0, 0, theTrigChamber);
987  }
988  else {
989  // CLCT pattern number - no pattern
990  unsigned int pattern = 0;
991 
992  // LCT quality number
993  unsigned int quality = 1;
994 
995  // Bunch crossing
996  int bx = rpc.bx() + lct_central_bx;
997 
998  // get keyStrip from LUT
999  int keyStrip = rpcStripToCscHs_[rpc.strip()];
1000  // get wiregroup from ALCT
1001  int wg = alct.getKeyWG();
1002 
1003  // construct correlated LCT; temporarily assign track number of 0.
1004  return CSCCorrelatedLCTDigi(0, 1, quality, wg, keyStrip, pattern, 0, bx, 0, 0, 0, theTrigChamber);
1005  }
1006 }
std::map< int, int > rpcStripToCscHs_
int bx() const
Definition: RPCDigi.h:29
const unsigned theTrigChamber
int strip() const
Definition: RPCDigi.h:28
int getKeyWG() const
return key wire group
Definition: CSCALCTDigi.h:45
void CSCMotherboardME3141RPC::correlateLCTsRPC ( CSCALCTDigi  bestALCT,
CSCALCTDigi  secondALCT,
CSCCLCTDigi  bestCLCT,
CSCCLCTDigi  secondCLCT,
CSCCorrelatedLCTDigi lct1,
CSCCorrelatedLCTDigi lct2,
const RPCDigisBX digis = RPCDigisBX() 
)

Definition at line 870 of file CSCMotherboardME3141RPC.cc.

References CSCMotherboard::alct_trig_enable, CSCMotherboard::clct_trig_enable, constructLCTsRPC(), CSCCLCTDigi::isValid(), CSCALCTDigi::isValid(), CSCMotherboard::match_trig_enable, or, and CSCCorrelatedLCTDigi::setTrknmb().

Referenced by run(), and setRPCGeometry().

874 {
875  bool anodeBestValid = bestALCT.isValid();
876  bool anodeSecondValid = secondALCT.isValid();
877  bool cathodeBestValid = bestCLCT.isValid();
878  bool cathodeSecondValid = secondCLCT.isValid();
879 
880  if (anodeBestValid and !anodeSecondValid) secondALCT = bestALCT;
881  if (!anodeBestValid and anodeSecondValid) bestALCT = secondALCT;
882  if (cathodeBestValid and !cathodeSecondValid) secondCLCT = bestCLCT;
883  if (!cathodeBestValid and cathodeSecondValid) bestCLCT = secondCLCT;
884 
885  // ALCT-CLCT matching conditions are defined by "trig_enable" configuration
886  // parameters.
887  if ((alct_trig_enable and bestALCT.isValid()) or
888  (clct_trig_enable and bestCLCT.isValid()) or
889  (match_trig_enable and bestALCT.isValid() and bestCLCT.isValid())){
890  lct1 = constructLCTsRPC(bestALCT, bestCLCT, digis);
891  lct1.setTrknmb(1);
892  }
893 
894  if (((secondALCT != bestALCT) or (secondCLCT != bestCLCT)) and
895  ((alct_trig_enable and secondALCT.isValid()) or
896  (clct_trig_enable and secondCLCT.isValid()) or
897  (match_trig_enable and secondALCT.isValid() and secondCLCT.isValid()))){
898  lct2 = constructLCTsRPC(secondALCT, secondCLCT, digis);
899  lct2.setTrknmb(2);
900  }
901 }
unsigned int clct_trig_enable
bool isValid() const
check ALCT validity (1 - valid ALCT)
Definition: CSCALCTDigi.h:30
The Signals That Services Can Subscribe To This is based on ActivityRegistry and is current per Services can connect to the signals distributed by the ActivityRegistry in order to monitor the activity of the application Each possible callback has some defined which we here list in angle e< void, edm::EventID const &, edm::Timestamp const & > We also list in braces which AR_WATCH_USING_METHOD_ is used for those or
Definition: Activities.doc:12
bool isValid() const
check CLCT validity (1 - valid CLCT)
Definition: CSCCLCTDigi.h:30
unsigned int match_trig_enable
unsigned int alct_trig_enable
void setTrknmb(const uint16_t number)
Set track number (1,2) after sorting LCTs.
CSCCorrelatedLCTDigi constructLCTsRPC(const CSCALCTDigi &alct, const CSCCLCTDigi &clct, const RPCDigisBX &digis=RPCDigisBX())
void CSCMotherboardME3141RPC::correlateLCTsRPC ( CSCCLCTDigi  bestCLCT,
CSCCLCTDigi  secondCLCT,
RPCDigi  rpcDigi,
int  roll,
CSCCorrelatedLCTDigi lct1,
CSCCorrelatedLCTDigi lct2 
)

Definition at line 814 of file CSCMotherboardME3141RPC.cc.

References CSCMotherboard::clct_trig_enable, constructLCTsRPC(), CSCCLCTDigi::isValid(), CSCMotherboard::match_trig_enable, or, CSCCorrelatedLCTDigi::setTrknmb(), and useOldLCTDataFormat_.

819 {
820  bool cathodeBestValid = bestCLCT.isValid();
821  bool cathodeSecondValid = secondCLCT.isValid();
822 
823  if (cathodeBestValid and !cathodeSecondValid) secondCLCT = bestCLCT;
824  if (!cathodeBestValid and cathodeSecondValid) bestCLCT = secondCLCT;
825 
826  if ((clct_trig_enable and bestCLCT.isValid()) or
827  (match_trig_enable and bestCLCT.isValid()))
828  {
829  lct1 = constructLCTsRPC(bestCLCT, rpcDigi, roll, useOldLCTDataFormat_);
830  lct1.setTrknmb(1);
831  }
832 
833  if ((clct_trig_enable and secondCLCT.isValid()) or
834  (match_trig_enable and secondCLCT.isValid() and secondCLCT != bestCLCT))
835  {
836  lct2 = constructLCTsRPC(secondCLCT, rpcDigi, roll, useOldLCTDataFormat_);
837  lct2.setTrknmb(2);
838  }
839 }
unsigned int clct_trig_enable
The Signals That Services Can Subscribe To This is based on ActivityRegistry and is current per Services can connect to the signals distributed by the ActivityRegistry in order to monitor the activity of the application Each possible callback has some defined which we here list in angle e< void, edm::EventID const &, edm::Timestamp const & > We also list in braces which AR_WATCH_USING_METHOD_ is used for those or
Definition: Activities.doc:12
bool isValid() const
check CLCT validity (1 - valid CLCT)
Definition: CSCCLCTDigi.h:30
unsigned int match_trig_enable
void setTrknmb(const uint16_t number)
Set track number (1,2) after sorting LCTs.
CSCCorrelatedLCTDigi constructLCTsRPC(const CSCALCTDigi &alct, const CSCCLCTDigi &clct, const RPCDigisBX &digis=RPCDigisBX())
void CSCMotherboardME3141RPC::correlateLCTsRPC ( CSCALCTDigi  bestALCT,
CSCALCTDigi  secondALCT,
RPCDigi  rpcPad,
CSCCorrelatedLCTDigi lct1,
CSCCorrelatedLCTDigi lct2 
)

Definition at line 842 of file CSCMotherboardME3141RPC.cc.

References CSCMotherboard::alct_trig_enable, constructLCTsRPC(), CSCALCTDigi::isValid(), CSCMotherboard::match_trig_enable, or, CSCCorrelatedLCTDigi::setTrknmb(), and useOldLCTDataFormat_.

847 {
848  bool anodeBestValid = bestALCT.isValid();
849  bool anodeSecondValid = secondALCT.isValid();
850 
851  if (anodeBestValid and !anodeSecondValid) secondALCT = bestALCT;
852  if (!anodeBestValid and anodeSecondValid) bestALCT = secondALCT;
853 
854  if ((alct_trig_enable and bestALCT.isValid()) or
855  (match_trig_enable and bestALCT.isValid()))
856  {
857  lct1 = constructLCTsRPC(bestALCT, rpcDigi, useOldLCTDataFormat_);
858  lct1.setTrknmb(1);
859  }
860 
861  if ((alct_trig_enable and secondALCT.isValid()) or
862  (match_trig_enable and secondALCT.isValid() and secondALCT != bestALCT))
863  {
864  lct2 = constructLCTsRPC(secondALCT, rpcDigi, useOldLCTDataFormat_);
865  lct2.setTrknmb(2);
866  }
867 }
bool isValid() const
check ALCT validity (1 - valid ALCT)
Definition: CSCALCTDigi.h:30
The Signals That Services Can Subscribe To This is based on ActivityRegistry and is current per Services can connect to the signals distributed by the ActivityRegistry in order to monitor the activity of the application Each possible callback has some defined which we here list in angle e< void, edm::EventID const &, edm::Timestamp const & > We also list in braces which AR_WATCH_USING_METHOD_ is used for those or
Definition: Activities.doc:12
unsigned int match_trig_enable
unsigned int alct_trig_enable
void setTrknmb(const uint16_t number)
Set track number (1,2) after sorting LCTs.
CSCCorrelatedLCTDigi constructLCTsRPC(const CSCALCTDigi &alct, const CSCCLCTDigi &clct, const RPCDigisBX &digis=RPCDigisBX())
std::map< int, std::pair< double, double > > CSCMotherboardME3141RPC::createRPCRollLUT ( RPCDetId  id)

Definition at line 533 of file CSCMotherboardME3141RPC.cc.

References funct::abs(), relativeConstraints::chamber, RPCGeometry::chamber(), mps_fire::i, mps_fire::result, and rpc_g.

Referenced by run(), and setRPCGeometry().

534 {
535  std::map<int,std::pair<double,double> > result;
536 
537  auto chamber(rpc_g->chamber(id));
538  if (chamber==nullptr) return result;
539 
540  for(int i = 1; i<= chamber->nrolls(); ++i){
541  auto roll(chamber->roll(i));
542  if (roll==nullptr) continue;
543 
544  const float half_striplength(roll->specs()->specificTopology().stripLength()/2.);
545  const LocalPoint lp_top(0., half_striplength, 0.);
546  const LocalPoint lp_bottom(0., -half_striplength, 0.);
547  const GlobalPoint gp_top(roll->toGlobal(lp_top));
548  const GlobalPoint gp_bottom(roll->toGlobal(lp_bottom));
549  //result[i] = std::make_pair(floorf(gp_top.eta() * 100) / 100, ceilf(gp_bottom.eta() * 100) / 100);
550  result[i] = std::make_pair(std::abs(gp_top.eta()), std::abs(gp_bottom.eta()));
551  }
552  return result;
553 }
const RPCChamber * chamber(RPCDetId id) const
Definition: RPCGeometry.cc:71
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
unsigned int CSCMotherboardME3141RPC::findQualityRPC ( const CSCALCTDigi aLCT,
const CSCCLCTDigi cLCT,
bool  hasRPC 
)

Definition at line 689 of file CSCMotherboardME3141RPC.cc.

References CSCALCTDigi::getAccelerator(), CSCCLCTDigi::getPattern(), CSCCLCTDigi::getQuality(), CSCALCTDigi::getQuality(), CSCCLCTDigi::getStripType(), CSCMotherboard::infoV, CSCMotherboard::isTMB07, CSCALCTDigi::isValid(), CSCCLCTDigi::isValid(), PFRecoTauDiscriminationByIsolation_cfi::offset, or, listBenchmarks::pattern, and btvTracks_cfi::quality.

Referenced by constructLCTsRPC(), and setRPCGeometry().

690 {
691 
692  /*
693  Same LCT quality definition as standard LCTs
694  a4 and c4 takes RPCs into account!!!
695  */
696 
697  unsigned int quality = 0;
698 
699  if (!isTMB07) {
700  bool isDistrip = (cLCT.getStripType() == 0);
701 
702  if (aLCT.isValid() && !(cLCT.isValid())) { // no CLCT
703  if (aLCT.getAccelerator()) {quality = 1;}
704  else {quality = 3;}
705  }
706  else if (!(aLCT.isValid()) && cLCT.isValid()) { // no ALCT
707  if (isDistrip) {quality = 4;}
708  else {quality = 5;}
709  }
710  else if (aLCT.isValid() && cLCT.isValid()) { // both ALCT and CLCT
711  if (aLCT.getAccelerator()) {quality = 2;} // accelerator muon
712  else { // collision muon
713  // CLCT quality is, in fact, the number of layers hit, so subtract 3
714  // to get quality analogous to ALCT one.
715  int sumQual = aLCT.getQuality() + (cLCT.getQuality()-3);
716  if (sumQual < 1 || sumQual > 6) {
717  if (infoV >= 0) edm::LogWarning("L1CSCTPEmulatorWrongValues")
718  << "+++ findQuality: sumQual = " << sumQual << "+++ \n";
719  }
720  if (isDistrip) { // distrip pattern
721  if (sumQual == 2) {quality = 6;}
722  else if (sumQual == 3) {quality = 7;}
723  else if (sumQual == 4) {quality = 8;}
724  else if (sumQual == 5) {quality = 9;}
725  else if (sumQual == 6) {quality = 10;}
726  }
727  else { // halfstrip pattern
728  if (sumQual == 2) {quality = 11;}
729  else if (sumQual == 3) {quality = 12;}
730  else if (sumQual == 4) {quality = 13;}
731  else if (sumQual == 5) {quality = 14;}
732  else if (sumQual == 6) {quality = 15;}
733  }
734  }
735  }
736  }
737 #ifdef OLD
738  else {
739  // Temporary definition, used until July 2008.
740  // First if statement is fictitious, just to help the CSC TF emulator
741  // handle such cases (one needs to make sure they will be accounted for
742  // in the new quality definition.
743  if (!(aLCT.isValid()) || !(cLCT.isValid())) {
744  if (aLCT.isValid() && !(cLCT.isValid())) quality = 1; // no CLCT
745  else if (!(aLCT.isValid()) && cLCT.isValid()) quality = 2; // no ALCT
746  else quality = 0; // both absent; should never happen.
747  }
748  else {
749  // Sum of ALCT and CLCT quality bits. CLCT quality is, in fact, the
750  // number of layers hit, so subtract 3 to put it to the same footing as
751  // the ALCT quality.
752  int sumQual = aLCT.getQuality() + (cLCT.getQuality()-3);
753  if (sumQual < 1 || sumQual > 6) {
754  if (infoV >= 0) edm::LogWarning("L1CSCTPEmulatorWrongValues")
755  << "+++ findQuality: Unexpected sumQual = " << sumQual << "+++\n";
756  }
757 
758  // LCT quality is basically the sum of ALCT and CLCT qualities, but split
759  // in two groups depending on the CLCT pattern id (higher quality for
760  // straighter patterns).
761  int offset = 0;
762  if (cLCT.getPattern() <= 7) offset = 4;
763  else offset = 9;
764  quality = offset + sumQual;
765  }
766  }
767 #endif
768  else {
769  // 2008 definition.
770  if (!(aLCT.isValid()) || !(cLCT.isValid())) {
771  if (aLCT.isValid() && !(cLCT.isValid())) quality = 1; // no CLCT
772  else if (!(aLCT.isValid()) && cLCT.isValid()) quality = 2; // no ALCT
773  else quality = 0; // both absent; should never happen.
774  }
775  else {
776  const int pattern(cLCT.getPattern());
777  if (pattern == 1) quality = 3; // layer-trigger in CLCT
778  else {
779  // ALCT quality is the number of layers hit minus 3.
780  // CLCT quality is the number of layers hit.
781  int n_rpc = 0;
782  if (hasRPC) n_rpc = 1;
783  const bool a4((aLCT.getQuality() >= 1 and aLCT.getQuality() != 4) or
784  (aLCT.getQuality() == 4 and n_rpc >=1));
785  const bool c4((cLCT.getQuality() >= 4) or (cLCT.getQuality() >= 3 and n_rpc>=1));
786  // quality = 4; "reserved for low-quality muons in future"
787  if (!a4 && !c4) quality = 5; // marginal anode and cathode
788  else if ( a4 && !c4) quality = 6; // HQ anode, but marginal cathode
789  else if (!a4 && c4) quality = 7; // HQ cathode, but marginal anode
790  else if ( a4 && c4) {
791  if (aLCT.getAccelerator()) quality = 8; // HQ muon, but accel ALCT
792  else {
793  // quality = 9; "reserved for HQ muons with future patterns
794  // quality = 10; "reserved for HQ muons with future patterns
795  if (pattern == 2 || pattern == 3) quality = 11;
796  else if (pattern == 4 || pattern == 5) quality = 12;
797  else if (pattern == 6 || pattern == 7) quality = 13;
798  else if (pattern == 8 || pattern == 9) quality = 14;
799  else if (pattern == 10) quality = 15;
800  else {
801  if (infoV >= 0) edm::LogWarning("L1CSCTPEmulatorWrongValues")
802  << "+++ findQuality: Unexpected CLCT pattern id = "
803  << pattern << "+++\n";
804  }
805  }
806  }
807  }
808  }
809  }
810  return quality;
811 }
int getQuality() const
return quality of a pattern (number of layers hit!)
Definition: CSCCLCTDigi.h:33
bool isValid() const
check ALCT validity (1 - valid ALCT)
Definition: CSCALCTDigi.h:30
int getStripType() const
return striptype
Definition: CSCCLCTDigi.h:39
The Signals That Services Can Subscribe To This is based on ActivityRegistry and is current per Services can connect to the signals distributed by the ActivityRegistry in order to monitor the activity of the application Each possible callback has some defined which we here list in angle e< void, edm::EventID const &, edm::Timestamp const & > We also list in braces which AR_WATCH_USING_METHOD_ is used for those or
Definition: Activities.doc:12
bool isValid() const
check CLCT validity (1 - valid CLCT)
Definition: CSCCLCTDigi.h:30
int getQuality() const
return quality of a pattern
Definition: CSCALCTDigi.h:33
int getAccelerator() const
Definition: CSCALCTDigi.h:37
int getPattern() const
return pattern
Definition: CSCCLCTDigi.h:36
std::vector< CSCCorrelatedLCTDigi > CSCMotherboardME3141RPC::getLCTs ( )

Definition at line 1016 of file CSCMotherboardME3141RPC.cc.

References allLCTs, mps_fire::i, CSCMotherboard::match_trig_window_size, CSCMotherboard::MAX_LCT_BINS, mps_fire::result, sortLCTsByQuality(), and tmb_cross_bx_algo.

Referenced by readoutLCTs(), and setRPCGeometry().

1017 {
1018  std::vector<CSCCorrelatedLCTDigi> result;
1019  for (int bx = 0; bx < MAX_LCT_BINS; bx++) {
1020  std::vector<CSCCorrelatedLCTDigi> tmpV;
1021  if (tmb_cross_bx_algo == 3) {
1022  tmpV = sortLCTsByQuality(bx);
1023  result.insert(result.end(), tmpV.begin(), tmpV.end());
1024  }
1025  else {
1026  for (unsigned int mbx = 0; mbx < match_trig_window_size; mbx++) {
1027  for (int i=0;i<2;i++) {
1028  if (allLCTs[bx][mbx][i].isValid()) {
1029  result.push_back(allLCTs[bx][mbx][i]);
1030  }
1031  }
1032  }
1033  }
1034  }
1035  return result;
1036 }
unsigned int match_trig_window_size
std::vector< CSCCorrelatedLCTDigi > sortLCTsByQuality(int bx)
CSCCorrelatedLCTDigi allLCTs[MAX_LCT_BINS][15][2]
bool CSCMotherboardME3141RPC::hasRE31andRE41 ( )

Definition at line 524 of file CSCMotherboardME3141RPC.cc.

References RPCGeometry::chamber(), and rpc_g.

Referenced by run(), and setRPCGeometry().

525 {
526  // just pick two random chambers
527  auto aRE31(rpc_g->chamber(RPCDetId(1,1,3,2,1,1,0)));
528  auto aRE41(rpc_g->chamber(RPCDetId(-1,1,4,3,1,2,0)));
529  return aRE31 and aRE41;
530 }
const RPCChamber * chamber(RPCDetId id) const
Definition: RPCGeometry.cc:71
CSCMotherboardME3141RPC::RPCDigisBX CSCMotherboardME3141RPC::matchingRPCDigis ( const CSCCLCTDigi cLCT,
const RPCDigisBX digis = RPCDigisBX(),
bool  first = true 
)

Definition at line 609 of file CSCMotherboardME3141RPC.cc.

References funct::abs(), gather_cfg::cout, cscHsToRpcStrip_, debug, CSCCLCTDigi::getKeyStrip(), maxDeltaStripRPC_, or, AlCaHLTBitMon_ParallelJobs::p, mps_fire::result, and digi_MixPreMix_cfi::strip.

Referenced by matchingRPCDigis(), run(), and setRPCGeometry().

610 {
612 
613  const int lowStrip(cscHsToRpcStrip_[clct.getKeyStrip()].first);
614  const int highStrip(cscHsToRpcStrip_[clct.getKeyStrip()].second);
615  const bool debug(false);
616  if (debug) std::cout << "lowStrip " << lowStrip << " highStrip " << highStrip << " delta strip " << maxDeltaStripRPC_ <<std::endl;
617  for (const auto& p: digis){
618  auto strip((p.second).strip());
619  if (debug) std::cout << "strip " << strip << std::endl;
620  if (std::abs(lowStrip - strip) <= maxDeltaStripRPC_ or std::abs(strip - highStrip) <= maxDeltaStripRPC_){
621  if (debug) std::cout << "++Matches! " << std::endl;
622  result.push_back(p);
623  if (first) return result;
624  }
625  }
626  return result;
627 }
The Signals That Services Can Subscribe To This is based on ActivityRegistry and is current per Services can connect to the signals distributed by the ActivityRegistry in order to monitor the activity of the application Each possible callback has some defined which we here list in angle e< void, edm::EventID const &, edm::Timestamp const & > We also list in braces which AR_WATCH_USING_METHOD_ is used for those or
Definition: Activities.doc:12
std::map< int, std::pair< int, int > > cscHsToRpcStrip_
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
#define debug
Definition: HDRShower.cc:19
std::vector< RPCDigiBX > RPCDigisBX
std::unique_ptr< CSCCathodeLCTProcessor > clct
CSCMotherboardME3141RPC::RPCDigisBX CSCMotherboardME3141RPC::matchingRPCDigis ( const CSCALCTDigi aLCT,
const RPCDigisBX digis = RPCDigisBX(),
bool  first = true 
)

Definition at line 631 of file CSCMotherboardME3141RPC.cc.

References gather_cfg::cout, cscWgToRpcRoll_, debug, CSCALCTDigi::getKeyWG(), maxDeltaWg_, AlCaHLTBitMon_ParallelJobs::p, mps_fire::result, and RPCDetId::roll().

632 {
634 
635  int Wg = alct.getKeyWG();
636  std::vector<int> Rolls;
637  Rolls.push_back(cscWgToRpcRoll_[Wg]);
639  Rolls.push_back(cscWgToRpcRoll_[Wg-maxDeltaWg_]);
640  if ((unsigned int)(Wg+maxDeltaWg_)<cscWgToRpcRoll_.size() && cscWgToRpcRoll_[Wg] != cscWgToRpcRoll_[Wg+maxDeltaWg_])
641  Rolls.push_back(cscWgToRpcRoll_[Wg+maxDeltaWg_]);
642 
643  const bool debug(false);
644  if (debug) std::cout << "ALCT keyWG " << alct.getKeyWG() << std::endl;
645  for (auto alctRoll : Rolls)
646  {
647  if (debug) std::cout << " roll " << alctRoll << std::endl;
648  for (const auto& p: digis){
649  auto digiRoll(RPCDetId(p.first).roll());
650  if (debug) std::cout << "Candidate ALCT: " << digiRoll << std::endl;
651  if (alctRoll != digiRoll) continue;
652  if (debug) std::cout << "++Matches! " << std::endl;
653  result.push_back(p);
654  if (first) return result;
655  }
656  }
657  return result;
658 }
std::map< int, int > cscWgToRpcRoll_
int roll() const
Definition: RPCDetId.h:120
#define debug
Definition: HDRShower.cc:19
std::vector< RPCDigiBX > RPCDigisBX
std::unique_ptr< CSCAnodeLCTProcessor > alct
CSCMotherboardME3141RPC::RPCDigisBX CSCMotherboardME3141RPC::matchingRPCDigis ( const CSCCLCTDigi cLCT,
const CSCALCTDigi aLCT,
const RPCDigisBX digis = RPCDigisBX(),
bool  first = true 
)

Definition at line 662 of file CSCMotherboardME3141RPC.cc.

References gather_cfg::cout, debug, matchingRPCDigis(), AlCaHLTBitMon_ParallelJobs::p, lumiQueryAPI::q, and mps_fire::result.

663 {
665 
666  // Fetch all (!) digis matching to ALCTs and CLCTs
667  auto digisClct(matchingRPCDigis(clct, digis, false));
668  auto digisAlct(matchingRPCDigis(alct, digis, false));
669 
670  const bool debug(false);
671  if (debug) std::cout << "-----------------------------------------------------------------------"<<std::endl;
672  // Check if the digis overlap
673  for (const auto& p : digisAlct){
674  if (debug) std::cout<< "Candidate RPC digis for ALCT: " << p.first << " " << p.second << std::endl;
675  for (auto q: digisClct){
676  if (debug) std::cout<< "++Candidate RPC digis for CLCT: " << q.first << " " << q.second << std::endl;
677  // look for exactly the same digis
678  if (p.first != q.first) continue;
679  // if (not RPCDigi(*(p.second))==*(q.second)) continue;
680  if (debug) std::cout << "++Matches! " << std::endl;
681  result.push_back(p);
682  if (first) return result;
683  }
684  }
685  if (debug) std::cout << "-----------------------------------------------------------------------"<<std::endl;
686  return result;
687 }
#define debug
Definition: HDRShower.cc:19
RPCDigisBX matchingRPCDigis(const CSCCLCTDigi &cLCT, const RPCDigisBX &digis=RPCDigisBX(), bool first=true)
std::vector< RPCDigiBX > RPCDigisBX
std::unique_ptr< CSCAnodeLCTProcessor > alct
std::unique_ptr< CSCCathodeLCTProcessor > clct
void CSCMotherboardME3141RPC::printRPCTriggerDigis ( int  minBX,
int  maxBx 
)

Definition at line 589 of file CSCMotherboardME3141RPC.cc.

References gather_cfg::cout, plotBeamSpotDB::first, and rpcDigis_.

Referenced by run(), and setRPCGeometry().

590 {
591  std::cout << "------------------------------------------------------------------------" << std::endl;
592  bool first = true;
593  for (int bx = bx_start; bx <= bx_stop; bx++) {
594  std::vector<std::pair<unsigned int, const RPCDigi> > in_strips = rpcDigis_[bx];
595  if (first) {
596  std::cout << "* RPC trigger digis: " << std::endl;
597  }
598  first = false;
599  std::cout << "N(digis) BX " << bx << " : " << in_strips.size() << std::endl;
600  for (const auto& digi : in_strips){
601  const auto roll_id(RPCDetId(digi.first));
602  std::cout << "\tdetId " << digi.first << " " << roll_id << ", digi = " << digi.second.strip() << ", BX = " << digi.second.bx() + 6 << std::endl;
603  }
604  }
605 }
std::vector< CSCCorrelatedLCTDigi > CSCMotherboardME3141RPC::readoutLCTs ( )

Definition at line 1010 of file CSCMotherboardME3141RPC.cc.

References getLCTs().

Referenced by CSCTriggerPrimitivesBuilder::build(), run(), and setRPCGeometry().

1011 {
1012  return getLCTs();
1013 }
std::vector< CSCCorrelatedLCTDigi > getLCTs()
void CSCMotherboardME3141RPC::retrieveRPCDigis ( const RPCDigiCollection digis,
unsigned  id 
)

Definition at line 571 of file CSCMotherboardME3141RPC.cc.

References relativeConstraints::chamber, RPCGeometry::chamber(), CSCMotherboard::lct_central_bx, maxDeltaBXRPC_, rpc_g, and rpcDigis_.

Referenced by run(), and setRPCGeometry().

572 {
573  if (rpcDigis == nullptr) return;
574 
575  auto chamber(rpc_g->chamber(RPCDetId(id)));
576  for (auto roll : chamber->rolls()) {
577  RPCDetId roll_id(roll->id());
578  auto digis_in_det = rpcDigis->get(roll_id);
579  for (auto digi = digis_in_det.first; digi != digis_in_det.second; ++digi) {
580  const int bx_shifted(lct_central_bx + digi->bx());
581  for (int bx = bx_shifted - maxDeltaBXRPC_;bx <= bx_shifted + maxDeltaBXRPC_; ++bx) {
582  rpcDigis_[bx].push_back(std::make_pair(roll_id(), *digi));
583  }
584  }
585  }
586 }
const RPCChamber * chamber(RPCDetId id) const
Definition: RPCGeometry.cc:71
void CSCMotherboardME3141RPC::run ( const CSCWireDigiCollection wiredc,
const CSCComparatorDigiCollection compdc,
const RPCDigiCollection rpcDigis 
)

Run function for normal usage. Runs cathode and anode LCT processors, takes results and correlates into CorrelatedLCT.

Definition at line 182 of file CSCMotherboardME3141RPC.cc.

References funct::abs(), CSCMotherboard::alct, alctV, allLCTs, assignRPCRoll(), buildLCTfromALCTandRPC_, buildLCTfromCLCTandRPC_, buildLCTfromLowQstubandRPC_, EnergyCorrector::c, CSCTriggerGeomManager::chamber(), RPCGeometry::chamber(), CSCMotherboard::clct, clctV, CSCCorrelatedLCTDigi::clear(), clear(), correlateLCTsRPC(), gather_cfg::cout, createRPCRollLUT(), cscHsToRpcStrip_, cscWgToRpcRoll_, debug_luts_, debug_rpc_matching_, drop_used_clcts, dropLowQualityCLCTsNoRPCs_, PVValHelper::eta, plotBeamSpotDB::first, CSCTriggerGeometry::get(), runTauDisplay::gp, hasRE31andRE41(), mps_fire::i, CSCMotherboard::infoV, createfilelist::int, CSCMotherboard::lct_central_bx, LogDebug, lut_wg_me31_eta_even, lut_wg_me31_eta_odd, lut_wg_me41_eta_even, lut_wg_me41_eta_odd, match_earliest_clct_me3141_only, CSCMotherboard::match_trig_window_size, matchingRPCDigis(), CSCAnodeLCTProcessor::MAX_ALCT_BINS, CSCCathodeLCTProcessor::MAX_CLCT_BINS, CSCMotherboard::MAX_LCT_BINS, maxDeltaStripRPC_, maxDeltaStripRPCEven_, maxDeltaStripRPCOdd_, gen::n, or, AlCaHLTBitMon_ParallelJobs::p, pref, printRPCTriggerDigis(), btvTracks_cfi::quality, DetId::rawId(), readoutLCTs(), retrieveRPCDigis(), rpc_g, rpcDigis_, rpcRollToEtaLimits_, rpcStripToCscHs_, runME3141ILT_, digi_MixPreMix_cfi::strip, CSCMotherboard::theEndcap, CSCMotherboard::theSector, CSCMotherboard::theStation, CSCMotherboard::theSubsector, CSCMotherboard::theTrigChamber, tmb_cross_bx_algo, CSCTriggerNumbering::triggerCscIdFromLabels(), and CSCTriggerNumbering::triggerSectorFromLabels().

Referenced by CSCTriggerPrimitivesBuilder::build().

185 {
186  clear();
187 
188  if (!( alct and clct and runME3141ILT_))
189  {
190  if (infoV >= 0) edm::LogError("L1CSCTPEmulatorSetupError")
191  << "+++ run() called for non-existing ALCT/CLCT processor! +++ \n";
192  return;
193  }
194 
195  alctV = alct->run(wiredc); // run anodeLCT
196  clctV = clct->run(compdc); // run cathodeLCT
197 
198  bool rpcGeometryAvailable(false);
199  if (rpc_g != nullptr) {
200  if (infoV >= 0) edm::LogInfo("L1CSCTPEmulatorSetupInfo")
201  << "+++ run() called for RPC-CSC integrated trigger! +++ \n";
202  rpcGeometryAvailable = true;
203  }
204  const bool hasCorrectRPCGeometry((not rpcGeometryAvailable) or (rpcGeometryAvailable and not hasRE31andRE41()));
205 
206  // retrieve CSCChamber geometry
208  const CSCChamber* cscChamber(geo_manager->chamber(theEndcap, theStation, theSector, theSubsector, theTrigChamber));
209  const CSCDetId csc_id(cscChamber->id());
210 
211  // trigger geometry
212  const CSCLayer* keyLayer(cscChamber->layer(3));
213  const CSCLayerGeometry* keyLayerGeometry(keyLayer->geometry());
214  const int region((theEndcap == 1) ? 1: -1);
215  const bool isEven(csc_id.chamber()%2==0);
216  const int csc_trig_sect(CSCTriggerNumbering::triggerSectorFromLabels(csc_id));
217  const int csc_trig_id( CSCTriggerNumbering::triggerCscIdFromLabels(csc_id));
218  const int csc_trig_chid((3*(csc_trig_sect-1)+csc_trig_id)%18 +1);
219  const int rpc_trig_sect((csc_trig_chid-1)/3+1);
220  const int rpc_trig_subsect((csc_trig_chid-1)%3+1);
221  const RPCDetId rpc_id(region,1,theStation,rpc_trig_sect,1,rpc_trig_subsect,0);
222  const RPCChamber* rpcChamber(rpc_g->chamber(rpc_id));
223 
224  if (runME3141ILT_){
225 
226  // check for RE3/1-RE4/1 geometry
227  if (hasCorrectRPCGeometry) {
228  if (infoV >= 0) edm::LogInfo("L1CSCTPEmulatorSetupError")
229  << "+++ run() called for RPC-CSC integrated trigger without valid RPC geometry! +++ \n";
230  return;
231  }
232 
233  // LUT<roll,<etaMin,etaMax> >
235 
236  if (debug_luts_){
237  std::cout << "RPC det " <<rpc_id<<" CSC det "<< csc_id << std::endl;
238  for (const auto& p : rpcRollToEtaLimits_) {
239  std::cout << "roll "<< p.first << " min eta " << (p.second).first << " max eta " << (p.second).second << std::endl;
240  }
241  }
242 
243  // loop on all wiregroups to create a LUT <WG,roll>
244  const int numberOfWG(keyLayerGeometry->numberOfWireGroups());
245  for (int i = 0; i< numberOfWG; ++i){
246  auto eta(theStation==3 ?
247  (isEven ? lut_wg_me31_eta_even[i][1] : lut_wg_me31_eta_odd[i][1]) :
248  (isEven ? lut_wg_me41_eta_even[i][1] : lut_wg_me41_eta_odd[i][1]));
250  }
251  if (debug_luts_){
252  for (const auto& p : cscWgToRpcRoll_) {
253  auto eta(theStation==3 ?
254  (isEven ? lut_wg_me31_eta_even[p.first][1] : lut_wg_me31_eta_odd[p.first][1]) :
255  (isEven ? lut_wg_me41_eta_even[p.first][1] : lut_wg_me41_eta_odd[p.first][1]));
256 
257  std::cout << "WG "<< p.first << " RPC roll " << p.second << " "
258  << rpcRollToEtaLimits_[p.second].first << " "
259  << rpcRollToEtaLimits_[p.second].second << " " << eta << std::endl;
260  }
261  }
262 
263  // pick any roll
264  auto randRoll(rpcChamber->roll(2));
265 
266  auto nStrips(keyLayerGeometry->numberOfStrips());
267  for (float i = 0; i< nStrips; i = i+0.5){
268  const LocalPoint lpCSC(keyLayerGeometry->topology()->localPosition(i));
269  const GlobalPoint gp(keyLayer->toGlobal(lpCSC));
270  const LocalPoint lpRPC(randRoll->toLocal(gp));
271  const int HS(i/0.5);
272  const bool edge(HS < 5 or HS > 155);
273  const float strip(edge ? -99 : randRoll->strip(lpRPC));
274  // HS are wrapped-around
275  cscHsToRpcStrip_[HS] = std::make_pair(std::floor(strip),std::ceil(strip));
276  }
277  if (debug_luts_){
278  std::cout << "detId " << csc_id << std::endl;
279  std::cout << "CSCHSToRPCStrip LUT in" << std::endl;
280  for (const auto& p : cscHsToRpcStrip_) {
281  std::cout << "CSC HS "<< p.first << " RPC Strip low " << (p.second).first << " RPC Strip high " << (p.second).second << std::endl;
282  }
283  }
284 
285  const int nRPCStrips(randRoll->nstrips());
286  for (int i = 0; i< nRPCStrips; ++i){
287  const LocalPoint lpRPC(randRoll->centreOfStrip(i));
288  const GlobalPoint gp(randRoll->toGlobal(lpRPC));
289  const LocalPoint lpCSC(keyLayer->toLocal(gp));
290  const float strip(keyLayerGeometry->strip(lpCSC));
291  // HS are wrapped-around
292  rpcStripToCscHs_[i] = (int) (strip - 0.25)/0.5;
293  }
294  if (debug_luts_){
295  std::cout << "detId " << csc_id << std::endl;
296  std::cout << "RPCStripToCSCHs LUT" << std::endl;
297  for (const auto& p : rpcStripToCscHs_) {
298  std::cout << "RPC Strip "<< p.first << " CSC HS: " << p.second << std::endl;
299  }
300  }
301  //select correct scenarios, even or odd
303 
304  rpcDigis_.clear();
305  retrieveRPCDigis(rpcDigis, rpc_id.rawId());
306  }
307 
308  const bool hasRPCDigis(!rpcDigis_.empty());
309 
310  int used_clct_mask[20];
311  for (int c=0;c<20;++c) used_clct_mask[c]=0;
312 
313  // ALCT centric matching
314  for (int bx_alct = 0; bx_alct < CSCAnodeLCTProcessor::MAX_ALCT_BINS; bx_alct++)
315  {
316  if (alct->bestALCT[bx_alct].isValid())
317  {
318  const int bx_clct_start(bx_alct - match_trig_window_size/2);
319  const int bx_clct_stop(bx_alct + match_trig_window_size/2);
320  if (debug_rpc_matching_){
321  std::cout << "========================================================================" << std::endl;
322  std::cout << "ALCT-CLCT matching in ME" << theStation << "/1 chamber: " << csc_id << std::endl;
323  std::cout << "------------------------------------------------------------------------" << std::endl;
324  std::cout << "+++ Best ALCT Details: " << alct->bestALCT[bx_alct] << std::endl;
325  std::cout << "+++ Second ALCT Details: " << alct->secondALCT[bx_alct] << std::endl;
326  std::cout << "------------------------------------------------------------------------" << std::endl;
327  if (hasRPCDigis) std::cout << "RPC Chamber " << rpc_id << std::endl;
328  if (hasRPCDigis) printRPCTriggerDigis(bx_clct_start, bx_clct_stop);
329 
330  std::cout << "------------------------------------------------------------------------" << std::endl;
331  std::cout << "Attempt ALCT-CLCT matching in ME" << theStation << "/1 in bx range: [" << bx_clct_start << "," << bx_clct_stop << "]" << std::endl;
332  }
333 
334  // low quality ALCT
335  const bool lowQualityALCT(alct->bestALCT[bx_alct].getQuality() == 0);
336 
337  // ALCT-to-CLCT
338  int nSuccesFulMatches = 0;
339  for (int bx_clct = bx_clct_start; bx_clct <= bx_clct_stop; bx_clct++) {
340  if (bx_clct < 0 or bx_clct >= CSCCathodeLCTProcessor::MAX_CLCT_BINS) continue;
341  if (drop_used_clcts and used_clct_mask[bx_clct]) continue;
342  if (clct->bestCLCT[bx_clct].isValid()) {
343 
344  // pick the digi that corresponds
345  auto matchingDigis(matchingRPCDigis(clct->bestCLCT[bx_clct], alct->bestALCT[bx_alct], rpcDigis_[bx_alct], false));
346 
347  // clct quality
348  const int quality(clct->bestCLCT[bx_clct].getQuality());
349  // low quality ALCT or CLCT
350  const bool lowQuality(quality<4 or lowQualityALCT);
351 
352  if (runME3141ILT_ and dropLowQualityCLCTsNoRPCs_ and lowQuality and hasRPCDigis){
353  int nFound(!matchingDigis.empty());
354  const bool clctInEdge(clct->bestCLCT[bx_clct].getKeyStrip() < 5 or clct->bestCLCT[bx_clct].getKeyStrip() > 155);
355  if (clctInEdge){
356  if (debug_rpc_matching_) std::cout << "\tInfo: low quality ALCT or CLCT in CSC chamber edge, don't care about RPC digis" << std::endl;
357  }
358  else {
359  if (nFound != 0){
360  if (debug_rpc_matching_) std::cout << "\tInfo: low quality ALCT or CLCT with " << nFound << " matching RPC trigger digis" << std::endl;
361  }
362  else {
363  if (debug_rpc_matching_) std::cout << "\tWarning: low quality ALCT or CLCT without matching RPC trigger digi" << std::endl;
364  continue;
365  }
366  }
367  }
368 
369  int mbx = bx_clct-bx_clct_start;
370  correlateLCTsRPC(alct->bestALCT[bx_alct], alct->secondALCT[bx_alct],
371  clct->bestCLCT[bx_clct], clct->secondCLCT[bx_clct],
372  allLCTs[bx_alct][mbx][0], allLCTs[bx_alct][mbx][1], matchingDigis);
373  ++nSuccesFulMatches;
374  if (debug_rpc_matching_) {
375  // if (infoV > 1) LogTrace("CSCMotherboard")
376  std::cout
377  << "Successful ALCT-CLCT match: bx_clct = " << bx_clct
378  << "; match window: [" << bx_clct_start << "; " << bx_clct_stop
379  << "]; bx_alct = " << bx_alct << std::endl;
380  std::cout << "+++ Best CLCT Details: " << clct->secondCLCT[bx_clct]<< std::endl;
381  std::cout << "+++ Second CLCT Details: " << clct->secondCLCT[bx_clct]<< std::endl;
382  }
383  if (allLCTs[bx_alct][mbx][0].isValid()) {
384  used_clct_mask[bx_clct] += 1;
386  }
387  }
388  }
389  // ALCT-RPC digi matching
390  int nSuccesFulRPCMatches = 0;
391  if (runME3141ILT_ and nSuccesFulMatches==0 and buildLCTfromALCTandRPC_ and hasRPCDigis){
392  if (debug_rpc_matching_) std::cout << "++No valid ALCT-CLCT matches in ME"<<theStation<<"1" << std::endl;
393  for (int bx_rpc = bx_clct_start; bx_rpc <= bx_clct_stop; bx_rpc++) {
394  if (lowQualityALCT and !buildLCTfromLowQstubandRPC_) continue; // build lct from low-Q ALCTs and rpc if para is set true
395  if (not hasRPCDigis) continue;
396 
397  // find the best matching copad - first one
398  auto digis(matchingRPCDigis(alct->bestALCT[bx_alct], rpcDigis_[bx_rpc], true));
399  if (debug_rpc_matching_) std::cout << "\t++Number of matching RPC Digis in BX " << bx_alct << " : "<< digis.size() << std::endl;
400  if (digis.empty()) continue;
401 
402  correlateLCTsRPC(alct->bestALCT[bx_alct], alct->secondALCT[bx_alct],
403  digis.at(0).second, allLCTs[bx_alct][0][0], allLCTs[bx_alct][0][1]);
404  if (allLCTs[bx_alct][0][0].isValid()) {
405  ++nSuccesFulRPCMatches;
407  }
408  if (debug_rpc_matching_) {
409  std::cout << "Successful ALCT-RPC digi match in ME"<<theStation<<"1: bx_alct = " << bx_alct << std::endl << std::endl;
410  std::cout << "------------------------------------------------------------------------" << std::endl << std::endl;
411  }
412  }
413  }
414  }
415  else{
416  auto digis(rpcDigis_[bx_alct]);
417  if (runME3141ILT_ and !digis.empty() and buildLCTfromCLCTandRPC_) {
418  //const int bx_clct_start(bx_alct - match_trig_window_size/2);
419  //const int bx_clct_stop(bx_alct + match_trig_window_size/2);
420  // RPC-to-CLCT
421  int nSuccesFulMatches = 0;
422  // for (int bx_clct = bx_clct_start; bx_clct <= bx_clct_stop; bx_clct++)
423  // {
424  // if (bx_clct < 0 or bx_clct >= CSCCathodeLCTProcessor::MAX_CLCT_BINS) continue;
425  if (drop_used_clcts and used_clct_mask[bx_alct]) continue;
426  if (clct->bestCLCT[bx_alct].isValid())
427  {
428  if (debug_rpc_matching_){
429  std::cout << "========================================================================" << std::endl;
430  std::cout << "RPC-CLCT matching in ME" << theStation << "/1 chamber: " << cscChamber->id() << " in bx: "<<bx_alct<< std::endl;
431  std::cout << "------------------------------------------------------------------------" << std::endl;
432  }
433  const int quality(clct->bestCLCT[bx_alct].getQuality());
434  // we also use low-Q stubs for the time being
435  if (quality < 4 and !buildLCTfromLowQstubandRPC_) continue;
436 
437  ++nSuccesFulMatches;
438 
439  int mbx = std::abs(clct->bestCLCT[bx_alct].getBX()-bx_alct);
440  int bx_rpc = lct_central_bx;
441  correlateLCTsRPC(clct->bestCLCT[bx_alct], clct->secondCLCT[bx_alct], digis[0].second, RPCDetId(digis[0].first).roll(),
442  allLCTs[bx_rpc][mbx][0], allLCTs[bx_rpc][mbx][1]);
443  if (debug_rpc_matching_) {
444  // if (infoV > 1) LogTrace("CSCMotherboard")
445  std::cout << "Successful RPC-CLCT match in ME"<<theStation<<"/1: bx_alct = " << bx_alct
446  << std::endl;
447  std::cout << "+++ Best CLCT Details: "<< clct->bestCLCT[bx_alct]<< std::endl;
448  std::cout << "+++ Second CLCT Details: " << clct->secondCLCT[bx_alct]<< std::endl;
449  }
450  if (allLCTs[bx_rpc][mbx][0].isValid()) {
451  used_clct_mask[bx_alct] += 1;
453  }
454  }
455  }
456  }
457  }
458 
459  // reduction of nLCTs per each BX
460  for (int bx = 0; bx < MAX_LCT_BINS; bx++)
461  {
462  // counting
463  unsigned int n=0;
464  for (unsigned int mbx = 0; mbx < match_trig_window_size; mbx++)
465  for (int i=0;i<2;i++)
466  {
467  int cbx = bx + mbx - match_trig_window_size/2;
468  if (allLCTs[bx][mbx][i].isValid())
469  {
470  ++n;
471  if (infoV > 0) LogDebug("CSCMotherboard")
472  << "LCT"<<i+1<<" "<<bx<<"/"<<cbx<<": "<<allLCTs[bx][mbx][i]<<std::endl;
473  }
474  }
475 
476  // some simple cross-bx sorting algorithms
477  if (tmb_cross_bx_algo == 1 and (n>2))
478  {
479  n=0;
480  for (unsigned int mbx = 0; mbx < match_trig_window_size; mbx++)
481  for (int i=0;i<2;i++)
482  {
483  if (allLCTs[bx][pref[mbx]][i].isValid())
484  {
485  n++;
486  if (n>2) allLCTs[bx][pref[mbx]][i].clear();
487  }
488  }
489 
490  n=0;
491  for (unsigned int mbx = 0; mbx < match_trig_window_size; mbx++)
492  for (int i=0;i<2;i++)
493  {
494  int cbx = bx + mbx - match_trig_window_size/2;
495  if (allLCTs[bx][mbx][i].isValid())
496  {
497  n++;
498  if (infoV > 0) LogDebug("CSCMotherboard")
499  << "LCT"<<i+1<<" "<<bx<<"/"<<cbx<<": "<<allLCTs[bx][mbx][i]<<std::endl;
500  }
501  }
502  if (infoV > 0 and n>0) LogDebug("CSCMotherboard")
503  <<"bx "<<bx<<" nnLCT:"<<n<<" "<<n<<std::endl;
504  } // x-bx sorting
505  }
506 
507  bool first = true;
508  unsigned int n=0;
509  for (const auto& p : readoutLCTs()) {
510  if (debug_rpc_matching_ and first){
511  std::cout << "========================================================================" << std::endl;
512  std::cout << "Counting the final LCTs" << std::endl;
513  std::cout << "========================================================================" << std::endl;
514  first = false;
515  std::cout << "tmb_cross_bx_algo: " << tmb_cross_bx_algo << std::endl;
516  }
517  n++;
519  std::cout << "LCT "<<n<<" " << p <<std::endl;
520  }
521 }
#define LogDebug(id)
const unsigned theSector
static const double lut_wg_me41_eta_odd[96][2]
std::map< int, int > cscWgToRpcRoll_
std::map< int, int > rpcStripToCscHs_
std::vector< CSCCLCTDigi > clctV
unsigned int match_trig_window_size
const unsigned theTrigChamber
const unsigned theEndcap
std::vector< CSCCorrelatedLCTDigi > readoutLCTs()
const RPCChamber * chamber(RPCDetId id) const
Definition: RPCGeometry.cc:71
void printRPCTriggerDigis(int minBX, int maxBx)
const unsigned theStation
static CSCTriggerGeomManager * get()
std::map< int, std::pair< double, double > > createRPCRollLUT(RPCDetId id)
The Signals That Services Can Subscribe To This is based on ActivityRegistry and is current per Services can connect to the signals distributed by the ActivityRegistry in order to monitor the activity of the application Each possible callback has some defined which we here list in angle e< void, edm::EventID const &, edm::Timestamp const & > We also list in braces which AR_WATCH_USING_METHOD_ is used for those or
Definition: Activities.doc:12
std::map< int, std::pair< int, int > > cscHsToRpcStrip_
const unsigned theSubsector
static const double lut_wg_me41_eta_even[96][2]
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
static const double lut_wg_me31_eta_odd[96][2]
static int triggerCscIdFromLabels(int station, int ring, int chamber)
std::map< int, std::pair< double, double > > rpcRollToEtaLimits_
CSCCorrelatedLCTDigi allLCTs[MAX_LCT_BINS][15][2]
static int triggerSectorFromLabels(int station, int ring, int chamber)
RPCDigisBX matchingRPCDigis(const CSCCLCTDigi &cLCT, const RPCDigisBX &digis=RPCDigisBX(), bool first=true)
std::unique_ptr< CSCAnodeLCTProcessor > alct
void correlateLCTsRPC(CSCALCTDigi bestALCT, CSCALCTDigi secondALCT, CSCCLCTDigi bestCLCT, CSCCLCTDigi secondCLCT, CSCCorrelatedLCTDigi &lct1, CSCCorrelatedLCTDigi &lct2, const RPCDigisBX &digis=RPCDigisBX())
std::unique_ptr< CSCCathodeLCTProcessor > clct
std::vector< CSCALCTDigi > alctV
void retrieveRPCDigis(const RPCDigiCollection *digis, unsigned id)
static const double lut_wg_me31_eta_even[96][2]
void CSCMotherboardME3141RPC::setCSCGeometry ( const CSCGeometry g)
inline

set CSC and RPC geometries for the matching needs

Definition at line 55 of file CSCMotherboardME3141RPC.h.

References csc_g, and g.

Referenced by CSCTriggerPrimitivesBuilder::build().

55 { csc_g = g; }
The Signals That Services Can Subscribe To This is based on ActivityRegistry and is current per Services can connect to the signals distributed by the ActivityRegistry in order to monitor the activity of the application Each possible callback has some defined which we here list in angle e g
Definition: Activities.doc:4
void CSCMotherboardME3141RPC::setRPCGeometry ( const RPCGeometry g)
inline

Definition at line 56 of file CSCMotherboardME3141RPC.h.

References CSCMotherboard::alct, assignRPCRoll(), CSCMotherboard::clct, constructLCTsRPC(), correlateLCTsRPC(), createRPCRollLUT(), PVValHelper::eta, findQualityRPC(), plotBeamSpotDB::first, g, getLCTs(), hasRE31andRE41(), matchingRPCDigis(), simTrackMatching_cfi::minBX, printRPCTriggerDigis(), readoutLCTs(), retrieveRPCDigis(), rpc_g, sortLCTsByQuality(), and sortLCTsByRPCDPhi().

Referenced by CSCTriggerPrimitivesBuilder::build().

56 { rpc_g = g; }
The Signals That Services Can Subscribe To This is based on ActivityRegistry and is current per Services can connect to the signals distributed by the ActivityRegistry in order to monitor the activity of the application Each possible callback has some defined which we here list in angle e g
Definition: Activities.doc:4
std::vector< CSCCorrelatedLCTDigi > CSCMotherboardME3141RPC::sortLCTsByQuality ( int  bx)

Methods to sort the LCTs

Definition at line 1039 of file CSCMotherboardME3141RPC.cc.

References allLCTs, mps_fire::i, CSCMotherboard::match_trig_window_size, max_me3141_lcts, and CSCMotherboard::sortByQuality().

Referenced by getLCTs(), and setRPCGeometry().

1040 {
1041  std::vector<CSCCorrelatedLCTDigi> LCTs;
1042  LCTs.clear();
1043  for (unsigned int mbx = 0; mbx < match_trig_window_size; mbx++)
1044  for (int i=0;i<2;i++)
1045  if (allLCTs[bx][mbx][i].isValid())
1046  LCTs.push_back(allLCTs[bx][mbx][i]);
1047 
1048  // return sorted vector with 2 highest quality LCTs
1049  std::sort(LCTs.begin(), LCTs.end(), CSCMotherboard::sortByQuality);
1050  if (LCTs.size()> max_me3141_lcts) LCTs.erase(LCTs.begin()+max_me3141_lcts, LCTs.end());
1051  return LCTs;
1052 }
unsigned int match_trig_window_size
CSCCorrelatedLCTDigi allLCTs[MAX_LCT_BINS][15][2]
static bool sortByQuality(const CSCCorrelatedLCTDigi &, const CSCCorrelatedLCTDigi &)
std::vector<CSCCorrelatedLCTDigi> CSCMotherboardME3141RPC::sortLCTsByQuality ( std::vector< CSCCorrelatedLCTDigi )
std::vector<CSCCorrelatedLCTDigi> CSCMotherboardME3141RPC::sortLCTsByRPCDPhi ( int  bx)

Referenced by setRPCGeometry().

std::vector<CSCCorrelatedLCTDigi> CSCMotherboardME3141RPC::sortLCTsByRPCDPhi ( std::vector< CSCCorrelatedLCTDigi )

Member Data Documentation

std::vector<CSCALCTDigi> CSCMotherboardME3141RPC::alctV
private

Definition at line 116 of file CSCMotherboardME3141RPC.h.

Referenced by run().

CSCCorrelatedLCTDigi CSCMotherboardME3141RPC::allLCTs[MAX_LCT_BINS][15][2]
private

for the case when more than 2 LCTs/BX are allowed; maximum match window = 15

Definition at line 104 of file CSCMotherboardME3141RPC.h.

Referenced by clear(), getLCTs(), run(), and sortLCTsByQuality().

bool CSCMotherboardME3141RPC::buildLCTfromALCTandRPC_
private

Definition at line 151 of file CSCMotherboardME3141RPC.h.

Referenced by CSCMotherboardME3141RPC(), and run().

bool CSCMotherboardME3141RPC::buildLCTfromCLCTandRPC_
private

Definition at line 152 of file CSCMotherboardME3141RPC.h.

Referenced by CSCMotherboardME3141RPC(), and run().

bool CSCMotherboardME3141RPC::buildLCTfromLowQstubandRPC_
private

Definition at line 153 of file CSCMotherboardME3141RPC.h.

Referenced by CSCMotherboardME3141RPC(), and run().

std::vector<CSCCLCTDigi> CSCMotherboardME3141RPC::clctV
private

Definition at line 117 of file CSCMotherboardME3141RPC.h.

Referenced by run().

const CSCGeometry* CSCMotherboardME3141RPC::csc_g
private

Definition at line 113 of file CSCMotherboardME3141RPC.h.

Referenced by setCSCGeometry().

std::map<int,std::pair<int,int> > CSCMotherboardME3141RPC::cscHsToRpcStrip_
private

Definition at line 164 of file CSCMotherboardME3141RPC.h.

Referenced by clear(), matchingRPCDigis(), and run().

std::map<int,int> CSCMotherboardME3141RPC::cscWgToRpcRoll_
private

Definition at line 160 of file CSCMotherboardME3141RPC.h.

Referenced by clear(), matchingRPCDigis(), and run().

bool CSCMotherboardME3141RPC::debug_luts_
private

Definition at line 136 of file CSCMotherboardME3141RPC.h.

Referenced by CSCMotherboardME3141RPC(), and run().

bool CSCMotherboardME3141RPC::debug_rpc_dphi
private

Definition at line 137 of file CSCMotherboardME3141RPC.h.

bool CSCMotherboardME3141RPC::debug_rpc_matching_
private

Definition at line 135 of file CSCMotherboardME3141RPC.h.

Referenced by CSCMotherboardME3141RPC(), and run().

bool CSCMotherboardME3141RPC::drop_used_clcts
private

Definition at line 124 of file CSCMotherboardME3141RPC.h.

Referenced by CSCMotherboardME3141RPC(), and run().

bool CSCMotherboardME3141RPC::dropLowQualityCLCTsNoRPCs_
private

Definition at line 149 of file CSCMotherboardME3141RPC.h.

Referenced by CSCMotherboardME3141RPC(), and run().

const double CSCMotherboardME3141RPC::lut_pt_vs_dphi_rpccsc_me31
staticprivate
Initial value:
= {
{3., 0.02203511, 0.00930056},
{5., 0.02203511, 0.00930056},
{7 , 0.0182579 , 0.00790009},
{10., 0.01066000, 0.00483286},
{15., 0.00722795, 0.00363230},
{20., 0.00562598, 0.00304878},
{30., 0.00416544, 0.00253782},
{40., 0.00342827, 0.00230833} }

Definition at line 106 of file CSCMotherboardME3141RPC.h.

const double CSCMotherboardME3141RPC::lut_pt_vs_dphi_rpccsc_me41
staticprivate
Initial value:
= {
{3., 0.02203511, 0.00930056},
{5., 0.02203511, 0.00930056},
{7 , 0.0182579 , 0.00790009},
{10., 0.01066000, 0.00483286},
{15., 0.00722795, 0.00363230},
{20., 0.00562598, 0.00304878},
{30., 0.00416544, 0.00253782},
{40., 0.00342827, 0.00230833} }

Definition at line 107 of file CSCMotherboardME3141RPC.h.

const double CSCMotherboardME3141RPC::lut_wg_me31_eta_even
staticprivate
Initial value:
= {
{ 0,2.447},{ 1,2.441},{ 2,2.432},{ 3,2.423},{ 4,2.414},{ 5,2.405},{ 6,2.396},{ 7,2.388},
{ 8,2.379},{ 9,2.371},{10,2.362},{11,2.354},{12,2.345},{13,2.337},{14,2.329},{15,2.321},
{16,2.313},{17,2.305},{18,2.297},{19,2.289},{20,2.281},{21,2.273},{22,2.266},{23,2.258},
{24,2.251},{25,2.243},{26,2.236},{27,2.228},{28,2.221},{29,2.214},{30,2.207},{31,2.200},
{32,2.195},{33,2.183},{34,2.176},{35,2.168},{36,2.160},{37,2.152},{38,2.144},{39,2.136},
{40,2.128},{41,2.120},{42,2.112},{43,2.104},{44,2.097},{45,2.089},{46,2.082},{47,2.074},
{48,2.067},{49,2.059},{50,2.052},{51,2.045},{52,2.038},{53,2.031},{54,2.023},{55,2.016},
{56,2.009},{57,2.003},{58,1.996},{59,1.989},{60,1.982},{61,1.975},{62,1.969},{63,1.962},
{64,1.957},{65,1.948},{66,1.943},{67,1.936},{68,1.930},{69,1.924},{70,1.917},{71,1.911},
{72,1.905},{73,1.899},{74,1.893},{75,1.887},{76,1.881},{77,1.875},{78,1.869},{79,1.863},
{80,1.857},{81,1.851},{82,1.845},{83,1.840},{84,1.834},{85,1.828},{86,1.823},{87,1.817},
{88,1.811},{89,1.806},{90,1.800},{91,1.795},{92,1.790},{93,1.784},{94,1.779},{95,1.774},
}

Definition at line 109 of file CSCMotherboardME3141RPC.h.

Referenced by run().

const double CSCMotherboardME3141RPC::lut_wg_me31_eta_odd
staticprivate
Initial value:
= {
{ 0,2.421},{ 1,2.415},{ 2,2.406},{ 3,2.397},{ 4,2.388},{ 5,2.379},{ 6,2.371},{ 7,2.362},
{ 8,2.353},{ 9,2.345},{10,2.336},{11,2.328},{12,2.319},{13,2.311},{14,2.303},{15,2.295},
{16,2.287},{17,2.279},{18,2.271},{19,2.263},{20,2.255},{21,2.248},{22,2.240},{23,2.232},
{24,2.225},{25,2.217},{26,2.210},{27,2.203},{28,2.195},{29,2.188},{30,2.181},{31,2.174},
{32,2.169},{33,2.157},{34,2.151},{35,2.142},{36,2.134},{37,2.126},{38,2.118},{39,2.110},
{40,2.102},{41,2.094},{42,2.087},{43,2.079},{44,2.071},{45,2.064},{46,2.056},{47,2.049},
{48,2.041},{49,2.034},{50,2.027},{51,2.019},{52,2.012},{53,2.005},{54,1.998},{55,1.991},
{56,1.984},{57,1.977},{58,1.970},{59,1.964},{60,1.957},{61,1.950},{62,1.944},{63,1.937},
{64,1.932},{65,1.922},{66,1.917},{67,1.911},{68,1.905},{69,1.898},{70,1.892},{71,1.886},
{72,1.880},{73,1.874},{74,1.868},{75,1.861},{76,1.855},{77,1.850},{78,1.844},{79,1.838},
{80,1.832},{81,1.826},{82,1.820},{83,1.815},{84,1.809},{85,1.803},{86,1.798},{87,1.792},
{88,1.787},{89,1.781},{90,1.776},{91,1.770},{92,1.765},{93,1.759},{94,1.754},{95,1.749},
}

Definition at line 108 of file CSCMotherboardME3141RPC.h.

Referenced by run().

const double CSCMotherboardME3141RPC::lut_wg_me41_eta_even
staticprivate
Initial value:
= {
{ 0,2.423},{ 1,2.418},{ 2,2.410},{ 3,2.402},{ 4,2.394},{ 5,2.386},{ 6,2.378},{ 7,2.370},
{ 8,2.362},{ 9,2.355},{10,2.347},{11,2.339},{12,2.332},{13,2.324},{14,2.317},{15,2.310},
{16,2.302},{17,2.295},{18,2.288},{19,2.281},{20,2.274},{21,2.267},{22,2.260},{23,2.253},
{24,2.246},{25,2.239},{26,2.233},{27,2.226},{28,2.219},{29,2.213},{30,2.206},{31,2.199},
{32,2.195},{33,2.185},{34,2.180},{35,2.174},{36,2.168},{37,2.161},{38,2.155},{39,2.149},
{40,2.143},{41,2.137},{42,2.131},{43,2.125},{44,2.119},{45,2.113},{46,2.107},{47,2.101},
{48,2.095},{49,2.089},{50,2.084},{51,2.078},{52,2.072},{53,2.067},{54,2.061},{55,2.055},
{56,2.050},{57,2.044},{58,2.039},{59,2.033},{60,2.028},{61,2.023},{62,2.017},{63,2.012},
{64,2.008},{65,2.000},{66,1.996},{67,1.991},{68,1.986},{69,1.981},{70,1.976},{71,1.971},
{72,1.966},{73,1.961},{74,1.956},{75,1.951},{76,1.946},{77,1.941},{78,1.936},{79,1.931},
{80,1.926},{81,1.921},{82,1.917},{83,1.912},{84,1.907},{85,1.902},{86,1.898},{87,1.893},
{88,1.889},{89,1.884},{90,1.879},{91,1.875},{92,1.870},{93,1.866},{94,1.861},{95,1.857},
}

Definition at line 111 of file CSCMotherboardME3141RPC.h.

Referenced by run().

const double CSCMotherboardME3141RPC::lut_wg_me41_eta_odd
staticprivate
Initial value:
= {
{ 0,2.399},{ 1,2.394},{ 2,2.386},{ 3,2.378},{ 4,2.370},{ 5,2.362},{ 6,2.354},{ 7,2.346},
{ 8,2.339},{ 9,2.331},{10,2.323},{11,2.316},{12,2.308},{13,2.301},{14,2.293},{15,2.286},
{16,2.279},{17,2.272},{18,2.264},{19,2.257},{20,2.250},{21,2.243},{22,2.236},{23,2.229},
{24,2.223},{25,2.216},{26,2.209},{27,2.202},{28,2.196},{29,2.189},{30,2.183},{31,2.176},
{32,2.172},{33,2.161},{34,2.157},{35,2.150},{36,2.144},{37,2.138},{38,2.132},{39,2.126},
{40,2.119},{41,2.113},{42,2.107},{43,2.101},{44,2.095},{45,2.089},{46,2.083},{47,2.078},
{48,2.072},{49,2.066},{50,2.060},{51,2.055},{52,2.049},{53,2.043},{54,2.038},{55,2.032},
{56,2.027},{57,2.021},{58,2.016},{59,2.010},{60,2.005},{61,1.999},{62,1.994},{63,1.989},
{64,1.985},{65,1.977},{66,1.973},{67,1.968},{68,1.963},{69,1.958},{70,1.953},{71,1.947},
{72,1.942},{73,1.937},{74,1.932},{75,1.928},{76,1.923},{77,1.918},{78,1.913},{79,1.908},
{80,1.903},{81,1.898},{82,1.894},{83,1.889},{84,1.884},{85,1.879},{86,1.875},{87,1.870},
{88,1.866},{89,1.861},{90,1.856},{91,1.852},{92,1.847},{93,1.843},{94,1.838},{95,1.834},
}

Definition at line 110 of file CSCMotherboardME3141RPC.h.

Referenced by run().

bool CSCMotherboardME3141RPC::match_earliest_clct_me3141_only
private

Definition at line 122 of file CSCMotherboardME3141RPC.h.

Referenced by CSCMotherboardME3141RPC(), and run().

unsigned int CSCMotherboardME3141RPC::max_me3141_lcts
private

maximum lcts per BX in ME2

Definition at line 129 of file CSCMotherboardME3141RPC.h.

Referenced by CSCMotherboardME3141RPC(), and sortLCTsByQuality().

int CSCMotherboardME3141RPC::maxDeltaBXRPC_
private

Definition at line 140 of file CSCMotherboardME3141RPC.h.

Referenced by CSCMotherboardME3141RPC(), and retrieveRPCDigis().

int CSCMotherboardME3141RPC::maxDeltaStripRPC_
private

Definition at line 141 of file CSCMotherboardME3141RPC.h.

Referenced by matchingRPCDigis(), and run().

int CSCMotherboardME3141RPC::maxDeltaStripRPCEven_
private

Definition at line 143 of file CSCMotherboardME3141RPC.h.

Referenced by CSCMotherboardME3141RPC(), and run().

int CSCMotherboardME3141RPC::maxDeltaStripRPCOdd_
private

Definition at line 142 of file CSCMotherboardME3141RPC.h.

Referenced by CSCMotherboardME3141RPC(), and run().

int CSCMotherboardME3141RPC::maxDeltaWg_
private

Definition at line 144 of file CSCMotherboardME3141RPC.h.

Referenced by CSCMotherboardME3141RPC(), and matchingRPCDigis().

int CSCMotherboardME3141RPC::pref[MAX_LCT_BINS]
private

"preferential" index array in matching window for cross-BX sorting

Definition at line 120 of file CSCMotherboardME3141RPC.h.

Referenced by CSCMotherboardME3141RPC(), and run().

bool CSCMotherboardME3141RPC::promoteALCTRPCpattern_
private

Definition at line 157 of file CSCMotherboardME3141RPC.h.

Referenced by constructLCTsRPC(), and CSCMotherboardME3141RPC().

bool CSCMotherboardME3141RPC::promoteALCTRPCquality_
private

Definition at line 156 of file CSCMotherboardME3141RPC.h.

Referenced by constructLCTsRPC(), and CSCMotherboardME3141RPC().

bool CSCMotherboardME3141RPC::promoteCLCTRPCquality_
private

Definition at line 155 of file CSCMotherboardME3141RPC.h.

Referenced by constructLCTsRPC(), and CSCMotherboardME3141RPC().

const RPCGeometry* CSCMotherboardME3141RPC::rpc_g
private
RPCDigis CSCMotherboardME3141RPC::rpcDigis_
private

Definition at line 167 of file CSCMotherboardME3141RPC.h.

Referenced by clear(), printRPCTriggerDigis(), retrieveRPCDigis(), and run().

std::map<int,std::pair<double,double> > CSCMotherboardME3141RPC::rpcRollToEtaLimits_
private

Definition at line 159 of file CSCMotherboardME3141RPC.h.

Referenced by assignRPCRoll(), clear(), and run().

std::map<int,int> CSCMotherboardME3141RPC::rpcStripToCscHs_
private

Definition at line 163 of file CSCMotherboardME3141RPC.h.

Referenced by clear(), constructLCTsRPC(), and run().

bool CSCMotherboardME3141RPC::runME3141ILT_
private

Definition at line 132 of file CSCMotherboardME3141RPC.h.

Referenced by CSCMotherboardME3141RPC(), and run().

unsigned int CSCMotherboardME3141RPC::tmb_cross_bx_algo
private

Definition at line 126 of file CSCMotherboardME3141RPC.h.

Referenced by CSCMotherboardME3141RPC(), getLCTs(), and run().

bool CSCMotherboardME3141RPC::useOldLCTDataFormat_
private

Definition at line 146 of file CSCMotherboardME3141RPC.h.

Referenced by correlateLCTsRPC(), and CSCMotherboardME3141RPC().