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 ()
 
- 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)
 
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 21 of file CSCMotherboardME3141RPC.h.

Member Typedef Documentation

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

Definition at line 23 of file CSCMotherboardME3141RPC.h.

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

Definition at line 25 of file CSCMotherboardME3141RPC.h.

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

Definition at line 24 of file CSCMotherboardME3141RPC.h.

Member Enumeration Documentation

labels for ME1a and ME1B

Enumerator
ME31 
ME41 

Definition at line 43 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 ( )

Default destructor.

Definition at line 161 of file CSCMotherboardME3141RPC.cc.

162 {
163 }

Member Function Documentation

int CSCMotherboardME3141RPC::assignRPCRoll ( double  eta)

Definition at line 564 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().

565 {
566  int result = -99;
567  for(auto p : rpcRollToEtaLimits_) {
568  const float minEta((p.second).first);
569  const float maxEta((p.second).second);
570  if (minEta <= eta and eta <= maxEta) {
571  result = p.first;
572  break;
573  }
574  }
575  return result;
576 }
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 913 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().

914 {
915  // CLCT pattern number
916  unsigned int pattern = encodePattern(cLCT.getPattern(), cLCT.getStripType());
917 
918  // LCT quality number
919  unsigned int quality = findQualityRPC(aLCT, cLCT, digis.size()!=0);
920 
921  // Bunch crossing: get it from cathode LCT if anode LCT is not there.
922  int bx = aLCT.isValid() ? aLCT.getBX() : cLCT.getBX();
923  if (digis.size()!=0) bx = lct_central_bx + digis[0].second.bx(); // fix this!!!
924 
925  // construct correlated LCT; temporarily assign track number of 0.
926  int trknmb = 0;
927  CSCCorrelatedLCTDigi thisLCT(trknmb, 1, quality, aLCT.getKeyWG(),
928  cLCT.getKeyStrip(), pattern, cLCT.getBend(),
929  bx, 0, 0, 0, theTrigChamber);
930  return thisLCT;
931 }
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 934 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.

937 {
938  if (oldDataFormat){
939  // CLCT pattern number - for the time being, do not include RPCs in the pattern
940  unsigned int pattern = encodePattern(clct.getPattern(), clct.getStripType());
941 
942  // LCT quality number - dummy quality
943  unsigned int quality = promoteCLCTRPCquality_ ? 14 : 11;
944 
945  // Bunch crossing: pick RPC bx
946  int bx = rpc.bx() + lct_central_bx;
947 
948  // pick a random WG in the roll range
949  int wg(4);
950 
951  // construct correlated LCT; temporarily assign track number of 0.
952  return CSCCorrelatedLCTDigi(0, 1, quality, wg, clct.getKeyStrip(), pattern, clct.getBend(), bx, 0, 0, 0, theTrigChamber);
953  }
954  else {
955  // CLCT pattern number - no pattern
956  unsigned int pattern = 0;//encodePatternRPC(clct.getPattern(), clct.getStripType());
957 
958  // LCT quality number - dummy quality
959  unsigned int quality = 5;//findQualityRPC(alct, rpc);
960 
961  // Bunch crossing: get it from cathode LCT if anode LCT is not there.
962  int bx = rpc.bx() + lct_central_bx;;
963 
964  // ALCT WG
965  int wg(0);
966 
967  // construct correlated LCT; temporarily assign track number of 0.
968  return CSCCorrelatedLCTDigi(0, 1, quality, wg, 0, pattern, 0, bx, 0, 0, 0, theTrigChamber);
969  }
970 }
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 973 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.

976 {
977  if (oldDataFormat){
978  // CLCT pattern number - set it to a highest value
979  // hack to get LCTs in the CSCTF
980  unsigned int pattern = promoteALCTRPCpattern_ ? 10 : 0;
981 
982  // LCT quality number - set it to a very high value
983  // hack to get LCTs in the CSCTF
984  unsigned int quality = promoteALCTRPCquality_ ? 14 : 11;
985 
986  // Bunch crossing
987  int bx = rpc.bx() + lct_central_bx;
988 
989  // get keyStrip from LUT
990  int keyStrip = rpcStripToCscHs_[rpc.strip()];
991 
992  // get wiregroup from ALCT
993  int wg = alct.getKeyWG();
994 
995  // construct correlated LCT; temporarily assign track number of 0.
996  return CSCCorrelatedLCTDigi(0, 1, quality, wg, keyStrip, pattern, 0, bx, 0, 0, 0, theTrigChamber);
997  }
998  else {
999  // CLCT pattern number - no pattern
1000  unsigned int pattern = 0;
1001 
1002  // LCT quality number
1003  unsigned int quality = 1;
1004 
1005  // Bunch crossing
1006  int bx = rpc.bx() + lct_central_bx;
1007 
1008  // get keyStrip from LUT
1009  int keyStrip = rpcStripToCscHs_[rpc.strip()];
1010  // get wiregroup from ALCT
1011  int wg = alct.getKeyWG();
1012 
1013  // construct correlated LCT; temporarily assign track number of 0.
1014  return CSCCorrelatedLCTDigi(0, 1, quality, wg, keyStrip, pattern, 0, bx, 0, 0, 0, theTrigChamber);
1015  }
1016 }
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 880 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().

884 {
885  bool anodeBestValid = bestALCT.isValid();
886  bool anodeSecondValid = secondALCT.isValid();
887  bool cathodeBestValid = bestCLCT.isValid();
888  bool cathodeSecondValid = secondCLCT.isValid();
889 
890  if (anodeBestValid and !anodeSecondValid) secondALCT = bestALCT;
891  if (!anodeBestValid and anodeSecondValid) bestALCT = secondALCT;
892  if (cathodeBestValid and !cathodeSecondValid) secondCLCT = bestCLCT;
893  if (!cathodeBestValid and cathodeSecondValid) bestCLCT = secondCLCT;
894 
895  // ALCT-CLCT matching conditions are defined by "trig_enable" configuration
896  // parameters.
897  if ((alct_trig_enable and bestALCT.isValid()) or
898  (clct_trig_enable and bestCLCT.isValid()) or
899  (match_trig_enable and bestALCT.isValid() and bestCLCT.isValid())){
900  lct1 = constructLCTsRPC(bestALCT, bestCLCT, digis);
901  lct1.setTrknmb(1);
902  }
903 
904  if (((secondALCT != bestALCT) or (secondCLCT != bestCLCT)) and
905  ((alct_trig_enable and secondALCT.isValid()) or
906  (clct_trig_enable and secondCLCT.isValid()) or
907  (match_trig_enable and secondALCT.isValid() and secondCLCT.isValid()))){
908  lct2 = constructLCTsRPC(secondALCT, secondCLCT, digis);
909  lct2.setTrknmb(2);
910  }
911 }
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 824 of file CSCMotherboardME3141RPC.cc.

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

829 {
830  bool cathodeBestValid = bestCLCT.isValid();
831  bool cathodeSecondValid = secondCLCT.isValid();
832 
833  if (cathodeBestValid and !cathodeSecondValid) secondCLCT = bestCLCT;
834  if (!cathodeBestValid and cathodeSecondValid) bestCLCT = secondCLCT;
835 
836  if ((clct_trig_enable and bestCLCT.isValid()) or
837  (match_trig_enable and bestCLCT.isValid()))
838  {
839  lct1 = constructLCTsRPC(bestCLCT, rpcDigi, roll, useOldLCTDataFormat_);
840  lct1.setTrknmb(1);
841  }
842 
843  if ((clct_trig_enable and secondCLCT.isValid()) or
844  (match_trig_enable and secondCLCT.isValid() and secondCLCT != bestCLCT))
845  {
846  lct2 = constructLCTsRPC(secondCLCT, rpcDigi, roll, useOldLCTDataFormat_);
847  lct2.setTrknmb(2);
848  }
849 }
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 852 of file CSCMotherboardME3141RPC.cc.

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

857 {
858  bool anodeBestValid = bestALCT.isValid();
859  bool anodeSecondValid = secondALCT.isValid();
860 
861  if (anodeBestValid and !anodeSecondValid) secondALCT = bestALCT;
862  if (!anodeBestValid and anodeSecondValid) bestALCT = secondALCT;
863 
864  if ((alct_trig_enable and bestALCT.isValid()) or
865  (match_trig_enable and bestALCT.isValid()))
866  {
867  lct1 = constructLCTsRPC(bestALCT, rpcDigi, useOldLCTDataFormat_);
868  lct1.setTrknmb(1);
869  }
870 
871  if ((alct_trig_enable and secondALCT.isValid()) or
872  (match_trig_enable and secondALCT.isValid() and secondALCT != bestALCT))
873  {
874  lct2 = constructLCTsRPC(secondALCT, rpcDigi, useOldLCTDataFormat_);
875  lct2.setTrknmb(2);
876  }
877 }
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 541 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().

542 {
543  std::map<int,std::pair<double,double> > result;
544 
545  auto chamber(rpc_g->chamber(id));
546  if (chamber==nullptr) return result;
547 
548  for(int i = 1; i<= chamber->nrolls(); ++i){
549  auto roll(chamber->roll(i));
550  if (roll==nullptr) continue;
551 
552  const float half_striplength(roll->specs()->specificTopology().stripLength()/2.);
553  const LocalPoint lp_top(0., half_striplength, 0.);
554  const LocalPoint lp_bottom(0., -half_striplength, 0.);
555  const GlobalPoint gp_top(roll->toGlobal(lp_top));
556  const GlobalPoint gp_bottom(roll->toGlobal(lp_bottom));
557  //result[i] = std::make_pair(floorf(gp_top.eta() * 100) / 100, ceilf(gp_bottom.eta() * 100) / 100);
558  result[i] = std::make_pair(std::abs(gp_top.eta()), std::abs(gp_bottom.eta()));
559  }
560  return result;
561 }
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 699 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().

700 {
701 
702  /*
703  Same LCT quality definition as standard LCTs
704  a4 and c4 takes RPCs into account!!!
705  */
706 
707  unsigned int quality = 0;
708 
709  if (!isTMB07) {
710  bool isDistrip = (cLCT.getStripType() == 0);
711 
712  if (aLCT.isValid() && !(cLCT.isValid())) { // no CLCT
713  if (aLCT.getAccelerator()) {quality = 1;}
714  else {quality = 3;}
715  }
716  else if (!(aLCT.isValid()) && cLCT.isValid()) { // no ALCT
717  if (isDistrip) {quality = 4;}
718  else {quality = 5;}
719  }
720  else if (aLCT.isValid() && cLCT.isValid()) { // both ALCT and CLCT
721  if (aLCT.getAccelerator()) {quality = 2;} // accelerator muon
722  else { // collision muon
723  // CLCT quality is, in fact, the number of layers hit, so subtract 3
724  // to get quality analogous to ALCT one.
725  int sumQual = aLCT.getQuality() + (cLCT.getQuality()-3);
726  if (sumQual < 1 || sumQual > 6) {
727  if (infoV >= 0) edm::LogWarning("L1CSCTPEmulatorWrongValues")
728  << "+++ findQuality: sumQual = " << sumQual << "+++ \n";
729  }
730  if (isDistrip) { // distrip pattern
731  if (sumQual == 2) {quality = 6;}
732  else if (sumQual == 3) {quality = 7;}
733  else if (sumQual == 4) {quality = 8;}
734  else if (sumQual == 5) {quality = 9;}
735  else if (sumQual == 6) {quality = 10;}
736  }
737  else { // halfstrip pattern
738  if (sumQual == 2) {quality = 11;}
739  else if (sumQual == 3) {quality = 12;}
740  else if (sumQual == 4) {quality = 13;}
741  else if (sumQual == 5) {quality = 14;}
742  else if (sumQual == 6) {quality = 15;}
743  }
744  }
745  }
746  }
747 #ifdef OLD
748  else {
749  // Temporary definition, used until July 2008.
750  // First if statement is fictitious, just to help the CSC TF emulator
751  // handle such cases (one needs to make sure they will be accounted for
752  // in the new quality definition.
753  if (!(aLCT.isValid()) || !(cLCT.isValid())) {
754  if (aLCT.isValid() && !(cLCT.isValid())) quality = 1; // no CLCT
755  else if (!(aLCT.isValid()) && cLCT.isValid()) quality = 2; // no ALCT
756  else quality = 0; // both absent; should never happen.
757  }
758  else {
759  // Sum of ALCT and CLCT quality bits. CLCT quality is, in fact, the
760  // number of layers hit, so subtract 3 to put it to the same footing as
761  // the ALCT quality.
762  int sumQual = aLCT.getQuality() + (cLCT.getQuality()-3);
763  if (sumQual < 1 || sumQual > 6) {
764  if (infoV >= 0) edm::LogWarning("L1CSCTPEmulatorWrongValues")
765  << "+++ findQuality: Unexpected sumQual = " << sumQual << "+++\n";
766  }
767 
768  // LCT quality is basically the sum of ALCT and CLCT qualities, but split
769  // in two groups depending on the CLCT pattern id (higher quality for
770  // straighter patterns).
771  int offset = 0;
772  if (cLCT.getPattern() <= 7) offset = 4;
773  else offset = 9;
774  quality = offset + sumQual;
775  }
776  }
777 #endif
778  else {
779  // 2008 definition.
780  if (!(aLCT.isValid()) || !(cLCT.isValid())) {
781  if (aLCT.isValid() && !(cLCT.isValid())) quality = 1; // no CLCT
782  else if (!(aLCT.isValid()) && cLCT.isValid()) quality = 2; // no ALCT
783  else quality = 0; // both absent; should never happen.
784  }
785  else {
786  const int pattern(cLCT.getPattern());
787  if (pattern == 1) quality = 3; // layer-trigger in CLCT
788  else {
789  // ALCT quality is the number of layers hit minus 3.
790  // CLCT quality is the number of layers hit.
791  int n_rpc = 0;
792  if (hasRPC) n_rpc = 1;
793  const bool a4((aLCT.getQuality() >= 1 and aLCT.getQuality() != 4) or
794  (aLCT.getQuality() == 4 and n_rpc >=1));
795  const bool c4((cLCT.getQuality() >= 4) or (cLCT.getQuality() >= 3 and n_rpc>=1));
796  // quality = 4; "reserved for low-quality muons in future"
797  if (!a4 && !c4) quality = 5; // marginal anode and cathode
798  else if ( a4 && !c4) quality = 6; // HQ anode, but marginal cathode
799  else if (!a4 && c4) quality = 7; // HQ cathode, but marginal anode
800  else if ( a4 && c4) {
801  if (aLCT.getAccelerator()) quality = 8; // HQ muon, but accel ALCT
802  else {
803  // quality = 9; "reserved for HQ muons with future patterns
804  // quality = 10; "reserved for HQ muons with future patterns
805  if (pattern == 2 || pattern == 3) quality = 11;
806  else if (pattern == 4 || pattern == 5) quality = 12;
807  else if (pattern == 6 || pattern == 7) quality = 13;
808  else if (pattern == 8 || pattern == 9) quality = 14;
809  else if (pattern == 10) quality = 15;
810  else {
811  if (infoV >= 0) edm::LogWarning("L1CSCTPEmulatorWrongValues")
812  << "+++ findQuality: Unexpected CLCT pattern id = "
813  << pattern << "+++\n";
814  }
815  }
816  }
817  }
818  }
819  }
820  return quality;
821 }
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 1026 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().

1027 {
1028  std::vector<CSCCorrelatedLCTDigi> result;
1029  for (int bx = 0; bx < MAX_LCT_BINS; bx++) {
1030  std::vector<CSCCorrelatedLCTDigi> tmpV;
1031  if (tmb_cross_bx_algo == 3) {
1032  tmpV = sortLCTsByQuality(bx);
1033  result.insert(result.end(), tmpV.begin(), tmpV.end());
1034  }
1035  else {
1036  for (unsigned int mbx = 0; mbx < match_trig_window_size; mbx++) {
1037  for (int i=0;i<2;i++) {
1038  if (allLCTs[bx][mbx][i].isValid()) {
1039  result.push_back(allLCTs[bx][mbx][i]);
1040  }
1041  }
1042  }
1043  }
1044  }
1045  return result;
1046 }
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 532 of file CSCMotherboardME3141RPC.cc.

References RPCGeometry::chamber(), and rpc_g.

Referenced by run(), and setRPCGeometry().

533 {
534  // just pick two random chambers
535  auto aRE31(rpc_g->chamber(RPCDetId(1,1,3,2,1,1,0)));
536  auto aRE41(rpc_g->chamber(RPCDetId(-1,1,4,3,1,2,0)));
537  return aRE31 and aRE41;
538 }
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 619 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().

620 {
622 
623  const int lowStrip(cscHsToRpcStrip_[clct.getKeyStrip()].first);
624  const int highStrip(cscHsToRpcStrip_[clct.getKeyStrip()].second);
625  const bool debug(false);
626  if (debug) std::cout << "lowStrip " << lowStrip << " highStrip " << highStrip << " delta strip " << maxDeltaStripRPC_ <<std::endl;
627  for (auto p: digis){
628  auto strip((p.second).strip());
629  if (debug) std::cout << "strip " << strip << std::endl;
630  if (std::abs(lowStrip - strip) <= maxDeltaStripRPC_ or std::abs(strip - highStrip) <= maxDeltaStripRPC_){
631  if (debug) std::cout << "++Matches! " << std::endl;
632  result.push_back(p);
633  if (first) return result;
634  }
635  }
636  return result;
637 }
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 641 of file CSCMotherboardME3141RPC.cc.

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

642 {
644 
645  int Wg = alct.getKeyWG();
646  std::vector<int> Rolls;
647  Rolls.push_back(cscWgToRpcRoll_[Wg]);
649  Rolls.push_back(cscWgToRpcRoll_[Wg-maxDeltaWg_]);
650  if ((unsigned int)(Wg+maxDeltaWg_)<cscWgToRpcRoll_.size() && cscWgToRpcRoll_[Wg] != cscWgToRpcRoll_[Wg+maxDeltaWg_])
651  Rolls.push_back(cscWgToRpcRoll_[Wg+maxDeltaWg_]);
652 
653  const bool debug(false);
654  if (debug) std::cout << "ALCT keyWG " << alct.getKeyWG() << std::endl;
655  for (auto alctRoll : Rolls)
656  {
657  if (debug) std::cout << " roll " << alctRoll << std::endl;
658  for (auto p: digis){
659  auto digiRoll(RPCDetId(p.first).roll());
660  if (debug) std::cout << "Candidate ALCT: " << digiRoll << std::endl;
661  if (alctRoll != digiRoll) continue;
662  if (debug) std::cout << "++Matches! " << std::endl;
663  result.push_back(p);
664  if (first) return result;
665  }
666  }
667  return result;
668 }
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 672 of file CSCMotherboardME3141RPC.cc.

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

673 {
675 
676  // Fetch all (!) digis matching to ALCTs and CLCTs
677  auto digisClct(matchingRPCDigis(clct, digis, false));
678  auto digisAlct(matchingRPCDigis(alct, digis, false));
679 
680  const bool debug(false);
681  if (debug) std::cout << "-----------------------------------------------------------------------"<<std::endl;
682  // Check if the digis overlap
683  for (auto p : digisAlct){
684  if (debug) std::cout<< "Candidate RPC digis for ALCT: " << p.first << " " << p.second << std::endl;
685  for (auto q: digisClct){
686  if (debug) std::cout<< "++Candidate RPC digis for CLCT: " << q.first << " " << q.second << std::endl;
687  // look for exactly the same digis
688  if (p.first != q.first) continue;
689  // if (not RPCDigi(*(p.second))==*(q.second)) continue;
690  if (debug) std::cout << "++Matches! " << std::endl;
691  result.push_back(p);
692  if (first) return result;
693  }
694  }
695  if (debug) std::cout << "-----------------------------------------------------------------------"<<std::endl;
696  return result;
697 }
#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 595 of file CSCMotherboardME3141RPC.cc.

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

Referenced by run(), and setRPCGeometry().

596 {
597  std::cout << "------------------------------------------------------------------------" << std::endl;
598  bool first = true;
599  for (int bx = bx_start; bx <= bx_stop; bx++) {
600  std::vector<std::pair<unsigned int, const RPCDigi> > in_strips = rpcDigis_[bx];
601  if (first) {
602  std::cout << "* RPC trigger digis: " << std::endl;
603  }
604  first = false;
605  std::cout << "N(digis) BX " << bx << " : " << in_strips.size() << std::endl;
606  if (rpcDigis_.size()!=0){
607  for (auto digi : in_strips){
608  auto roll_id(RPCDetId(digi.first));
609  std::cout << "\tdetId " << digi.first << " " << roll_id << ", digi = " << digi.second.strip() << ", BX = " << digi.second.bx() + 6 << std::endl;
610  }
611  }
612  else
613  break;
614  }
615 }
std::vector< CSCCorrelatedLCTDigi > CSCMotherboardME3141RPC::readoutLCTs ( )

Definition at line 1020 of file CSCMotherboardME3141RPC.cc.

References getLCTs().

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

1021 {
1022  return getLCTs();
1023 }
std::vector< CSCCorrelatedLCTDigi > getLCTs()
void CSCMotherboardME3141RPC::retrieveRPCDigis ( const RPCDigiCollection digis,
unsigned  id 
)

Definition at line 579 of file CSCMotherboardME3141RPC.cc.

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

Referenced by run(), and setRPCGeometry().

580 {
581  auto chamber(rpc_g->chamber(RPCDetId(id)));
582  for (auto roll : chamber->rolls()) {
583  RPCDetId roll_id(roll->id());
584  auto digis_in_det = rpcDigis->get(roll_id);
585  for (auto digi = digis_in_det.first; digi != digis_in_det.second; ++digi) {
586  const int bx_shifted(lct_central_bx + digi->bx());
587  for (int bx = bx_shifted - maxDeltaBXRPC_;bx <= bx_shifted + maxDeltaBXRPC_; ++bx) {
588  rpcDigis_[bx].push_back(std::make_pair(roll_id(), *digi));
589  }
590  }
591  }
592 }
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_, stringResolutionProvider_cfi::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  if (rpcRollToEtaLimits_.size()) {
239  for(auto p : rpcRollToEtaLimits_) {
240  std::cout << "roll "<< p.first << " min eta " << (p.second).first << " max eta " << (p.second).second << std::endl;
241  }
242  }
243  }
244 
245  // loop on all wiregroups to create a LUT <WG,roll>
246  const int numberOfWG(keyLayerGeometry->numberOfWireGroups());
247  for (int i = 0; i< numberOfWG; ++i){
248  auto eta(theStation==3 ?
249  (isEven ? lut_wg_me31_eta_even[i][1] : lut_wg_me31_eta_odd[i][1]) :
250  (isEven ? lut_wg_me41_eta_even[i][1] : lut_wg_me41_eta_odd[i][1]));
252  }
253  if (debug_luts_){
254  for(auto p : cscWgToRpcRoll_) {
255  auto eta(theStation==3 ?
256  (isEven ? lut_wg_me31_eta_even[p.first][1] : lut_wg_me31_eta_odd[p.first][1]) :
257  (isEven ? lut_wg_me41_eta_even[p.first][1] : lut_wg_me41_eta_odd[p.first][1]));
258 
259  std::cout << "WG "<< p.first << " RPC roll " << p.second << " "
260  << rpcRollToEtaLimits_[p.second].first << " "
261  << rpcRollToEtaLimits_[p.second].second << " " << eta << std::endl;
262  }
263  }
264 
265  // pick any roll
266  auto randRoll(rpcChamber->roll(2));
267 
268  auto nStrips(keyLayerGeometry->numberOfStrips());
269  for (float i = 0; i< nStrips; i = i+0.5){
270  const LocalPoint lpCSC(keyLayerGeometry->topology()->localPosition(i));
271  const GlobalPoint gp(keyLayer->toGlobal(lpCSC));
272  const LocalPoint lpRPC(randRoll->toLocal(gp));
273  const int HS(i/0.5);
274  const bool edge(HS < 5 or HS > 155);
275  const float strip(edge ? -99 : randRoll->strip(lpRPC));
276  // HS are wrapped-around
277  cscHsToRpcStrip_[HS] = std::make_pair(std::floor(strip),std::ceil(strip));
278  }
279  if (debug_luts_){
280  std::cout << "detId " << csc_id << std::endl;
281  std::cout << "CSCHSToRPCStrip LUT in" << std::endl;
282  for(auto p : cscHsToRpcStrip_) {
283  std::cout << "CSC HS "<< p.first << " RPC Strip low " << (p.second).first << " RPC Strip high " << (p.second).second << std::endl;
284  }
285  }
286 
287  const int nRPCStrips(randRoll->nstrips());
288  for (int i = 0; i< nRPCStrips; ++i){
289  const LocalPoint lpRPC(randRoll->centreOfStrip(i));
290  const GlobalPoint gp(randRoll->toGlobal(lpRPC));
291  const LocalPoint lpCSC(keyLayer->toLocal(gp));
292  const float strip(keyLayerGeometry->strip(lpCSC));
293  // HS are wrapped-around
294  rpcStripToCscHs_[i] = (int) (strip - 0.25)/0.5;
295  }
296  if (debug_luts_){
297  std::cout << "detId " << csc_id << std::endl;
298  std::cout << "RPCStripToCSCHs LUT" << std::endl;
299  for(auto p : rpcStripToCscHs_) {
300  std::cout << "RPC Strip "<< p.first << " CSC HS: " << p.second << std::endl;
301  }
302  }
303  //select correct scenarios, even or odd
305 
306  rpcDigis_.clear();
307  retrieveRPCDigis(rpcDigis, rpc_id.rawId());
308  }
309 
310  const bool hasRPCDigis(rpcDigis_.size()!=0);
311 
312  int used_clct_mask[20];
313  for (int c=0;c<20;++c) used_clct_mask[c]=0;
314 
315  // ALCT centric matching
316  for (int bx_alct = 0; bx_alct < CSCAnodeLCTProcessor::MAX_ALCT_BINS; bx_alct++)
317  {
318  if (alct->bestALCT[bx_alct].isValid())
319  {
320  const int bx_clct_start(bx_alct - match_trig_window_size/2);
321  const int bx_clct_stop(bx_alct + match_trig_window_size/2);
322  if (debug_rpc_matching_){
323  std::cout << "========================================================================" << std::endl;
324  std::cout << "ALCT-CLCT matching in ME" << theStation << "/1 chamber: " << csc_id << std::endl;
325  std::cout << "------------------------------------------------------------------------" << std::endl;
326  std::cout << "+++ Best ALCT Details: ";
327  alct->bestALCT[bx_alct].print();
328  std::cout << "+++ Second ALCT Details: ";
329  alct->secondALCT[bx_alct].print();
330  std::cout << "------------------------------------------------------------------------" << std::endl;
331  std::cout << "RPC Chamber " << rpc_id << std::endl;
332  printRPCTriggerDigis(bx_clct_start, bx_clct_stop);
333 
334  std::cout << "------------------------------------------------------------------------" << std::endl;
335  std::cout << "Attempt ALCT-CLCT matching in ME" << theStation << "/1 in bx range: [" << bx_clct_start << "," << bx_clct_stop << "]" << std::endl;
336  }
337 
338  // low quality ALCT
339  const bool lowQualityALCT(alct->bestALCT[bx_alct].getQuality() == 0);
340 
341  // ALCT-to-CLCT
342  int nSuccesFulMatches = 0;
343  for (int bx_clct = bx_clct_start; bx_clct <= bx_clct_stop; bx_clct++) {
344  if (bx_clct < 0 or bx_clct >= CSCCathodeLCTProcessor::MAX_CLCT_BINS) continue;
345  if (drop_used_clcts and used_clct_mask[bx_clct]) continue;
346  if (clct->bestCLCT[bx_clct].isValid()) {
347 
348  // pick the digi that corresponds
349  auto matchingDigis(matchingRPCDigis(clct->bestCLCT[bx_clct], alct->bestALCT[bx_alct], rpcDigis_[bx_alct], false));
350 
351  // clct quality
352  const int quality(clct->bestCLCT[bx_clct].getQuality());
353  // low quality ALCT or CLCT
354  const bool lowQuality(quality<4 or lowQualityALCT);
355 
356  if (runME3141ILT_ and dropLowQualityCLCTsNoRPCs_ and lowQuality and hasRPCDigis){
357  int nFound(matchingDigis.size());
358  const bool clctInEdge(clct->bestCLCT[bx_clct].getKeyStrip() < 5 or clct->bestCLCT[bx_clct].getKeyStrip() > 155);
359  if (clctInEdge){
360  if (debug_rpc_matching_) std::cout << "\tInfo: low quality ALCT or CLCT in CSC chamber edge, don't care about RPC digis" << std::endl;
361  }
362  else {
363  if (nFound != 0){
364  if (debug_rpc_matching_) std::cout << "\tInfo: low quality ALCT or CLCT with " << nFound << " matching RPC trigger digis" << std::endl;
365  }
366  else {
367  if (debug_rpc_matching_) std::cout << "\tWarning: low quality ALCT or CLCT without matching RPC trigger digi" << std::endl;
368  continue;
369  }
370  }
371  }
372 
373  int mbx = bx_clct-bx_clct_start;
374  correlateLCTsRPC(alct->bestALCT[bx_alct], alct->secondALCT[bx_alct],
375  clct->bestCLCT[bx_clct], clct->secondCLCT[bx_clct],
376  allLCTs[bx_alct][mbx][0], allLCTs[bx_alct][mbx][1], matchingDigis);
377  ++nSuccesFulMatches;
378  if (debug_rpc_matching_) {
379  // if (infoV > 1) LogTrace("CSCMotherboard")
380  std::cout
381  << "Successful ALCT-CLCT match: bx_clct = " << bx_clct
382  << "; match window: [" << bx_clct_start << "; " << bx_clct_stop
383  << "]; bx_alct = " << bx_alct << std::endl;
384  std::cout << "+++ Best CLCT Details: ";
385  clct->bestCLCT[bx_clct].print();
386  std::cout << "+++ Second CLCT Details: ";
387  clct->secondCLCT[bx_clct].print();
388  }
389  if (allLCTs[bx_alct][mbx][0].isValid()) {
390  used_clct_mask[bx_clct] += 1;
392  }
393  }
394  }
395  // ALCT-RPC digi matching
396  int nSuccesFulRPCMatches = 0;
397  if (runME3141ILT_ and nSuccesFulMatches==0 and buildLCTfromALCTandRPC_){
398  if (debug_rpc_matching_) std::cout << "++No valid ALCT-CLCT matches in ME"<<theStation<<"1" << std::endl;
399  for (int bx_rpc = bx_clct_start; bx_rpc <= bx_clct_stop; bx_rpc++) {
400  if (lowQualityALCT and !buildLCTfromLowQstubandRPC_) continue; // build lct from low-Q ALCTs and rpc if para is set true
401  if (not hasRPCDigis) continue;
402 
403  // find the best matching copad - first one
404  auto digis(matchingRPCDigis(alct->bestALCT[bx_alct], rpcDigis_[bx_rpc], true));
405  if (debug_rpc_matching_) std::cout << "\t++Number of matching RPC Digis in BX " << bx_alct << " : "<< digis.size() << std::endl;
406  if (digis.size()==0) continue;
407 
408  correlateLCTsRPC(alct->bestALCT[bx_alct], alct->secondALCT[bx_alct],
409  digis.at(0).second, allLCTs[bx_alct][0][0], allLCTs[bx_alct][0][1]);
410  if (allLCTs[bx_alct][0][0].isValid()) {
411  ++nSuccesFulRPCMatches;
413  }
414  if (debug_rpc_matching_) {
415  std::cout << "Successful ALCT-RPC digi match in ME"<<theStation<<"1: bx_alct = " << bx_alct << std::endl << std::endl;
416  std::cout << "------------------------------------------------------------------------" << std::endl << std::endl;
417  }
418  }
419  }
420  }
421  else{
422  auto digis(rpcDigis_[bx_alct]);
423  if (runME3141ILT_ and digis.size() and buildLCTfromCLCTandRPC_) {
424  //const int bx_clct_start(bx_alct - match_trig_window_size/2);
425  //const int bx_clct_stop(bx_alct + match_trig_window_size/2);
426  // RPC-to-CLCT
427  int nSuccesFulMatches = 0;
428  // for (int bx_clct = bx_clct_start; bx_clct <= bx_clct_stop; bx_clct++)
429  // {
430  // if (bx_clct < 0 or bx_clct >= CSCCathodeLCTProcessor::MAX_CLCT_BINS) continue;
431  if (drop_used_clcts and used_clct_mask[bx_alct]) continue;
432  if (clct->bestCLCT[bx_alct].isValid())
433  {
434  if (debug_rpc_matching_){
435  std::cout << "========================================================================" << std::endl;
436  std::cout << "RPC-CLCT matching in ME" << theStation << "/1 chamber: " << cscChamber->id() << " in bx: "<<bx_alct<< std::endl;
437  std::cout << "------------------------------------------------------------------------" << std::endl;
438  }
439  const int quality(clct->bestCLCT[bx_alct].getQuality());
440  // we also use low-Q stubs for the time being
441  if (quality < 4 and !buildLCTfromLowQstubandRPC_) continue;
442 
443  ++nSuccesFulMatches;
444 
445  int mbx = std::abs(clct->bestCLCT[bx_alct].getBX()-bx_alct);
446  int bx_rpc = lct_central_bx;
447  correlateLCTsRPC(clct->bestCLCT[bx_alct], clct->secondCLCT[bx_alct], digis[0].second, RPCDetId(digis[0].first).roll(),
448  allLCTs[bx_rpc][mbx][0], allLCTs[bx_rpc][mbx][1]);
449  if (debug_rpc_matching_) {
450  // if (infoV > 1) LogTrace("CSCMotherboard")
451  std::cout << "Successful RPC-CLCT match in ME"<<theStation<<"/1: bx_alct = " << bx_alct
452  << std::endl;
453  std::cout << "+++ Best CLCT Details: ";
454  clct->bestCLCT[bx_alct].print();
455  std::cout << "+++ Second CLCT Details: ";
456  clct->secondCLCT[bx_alct].print();
457  }
458  if (allLCTs[bx_rpc][mbx][0].isValid()) {
459  used_clct_mask[bx_alct] += 1;
461  }
462  }
463  }
464  }
465  }
466 
467  // reduction of nLCTs per each BX
468  for (int bx = 0; bx < MAX_LCT_BINS; bx++)
469  {
470  // counting
471  unsigned int n=0;
472  for (unsigned int mbx = 0; mbx < match_trig_window_size; mbx++)
473  for (int i=0;i<2;i++)
474  {
475  int cbx = bx + mbx - match_trig_window_size/2;
476  if (allLCTs[bx][mbx][i].isValid())
477  {
478  ++n;
479  if (infoV > 0) LogDebug("CSCMotherboard")
480  << "LCT"<<i+1<<" "<<bx<<"/"<<cbx<<": "<<allLCTs[bx][mbx][i]<<std::endl;
481  }
482  }
483 
484  // some simple cross-bx sorting algorithms
485  if (tmb_cross_bx_algo == 1 and (n>2))
486  {
487  n=0;
488  for (unsigned int mbx = 0; mbx < match_trig_window_size; mbx++)
489  for (int i=0;i<2;i++)
490  {
491  if (allLCTs[bx][pref[mbx]][i].isValid())
492  {
493  n++;
494  if (n>2) allLCTs[bx][pref[mbx]][i].clear();
495  }
496  }
497 
498  n=0;
499  for (unsigned int mbx = 0; mbx < match_trig_window_size; mbx++)
500  for (int i=0;i<2;i++)
501  {
502  int cbx = bx + mbx - match_trig_window_size/2;
503  if (allLCTs[bx][mbx][i].isValid())
504  {
505  n++;
506  if (infoV > 0) LogDebug("CSCMotherboard")
507  << "LCT"<<i+1<<" "<<bx<<"/"<<cbx<<": "<<allLCTs[bx][mbx][i]<<std::cout;
508  }
509  }
510  if (infoV > 0 and n>0) LogDebug("CSCMotherboard")
511  <<"bx "<<bx<<" nnLCT:"<<n<<" "<<n<<std::endl;
512  } // x-bx sorting
513  }
514 
515  bool first = true;
516  unsigned int n=0;
517  for (auto p : readoutLCTs()) {
518  if (debug_rpc_matching_ and first){
519  std::cout << "========================================================================" << std::endl;
520  std::cout << "Counting the final LCTs" << std::endl;
521  std::cout << "========================================================================" << std::endl;
522  first = false;
523  std::cout << "tmb_cross_bx_algo: " << tmb_cross_bx_algo << std::endl;
524  }
525  n++;
527  std::cout << "LCT "<<n<<" " << p <<std::endl;
528  }
529 }
#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 50 of file CSCMotherboardME3141RPC.h.

References csc_g, and g.

Referenced by CSCTriggerPrimitivesBuilder::build().

50 { 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 51 of file CSCMotherboardME3141RPC.h.

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

Referenced by CSCTriggerPrimitivesBuilder::build().

51 { 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 1049 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().

1050 {
1051  std::vector<CSCCorrelatedLCTDigi> LCTs;
1052  LCTs.clear();
1053  for (unsigned int mbx = 0; mbx < match_trig_window_size; mbx++)
1054  for (int i=0;i<2;i++)
1055  if (allLCTs[bx][mbx][i].isValid())
1056  LCTs.push_back(allLCTs[bx][mbx][i]);
1057 
1058  // return sorted vector with 2 highest quality LCTs
1059  std::sort(LCTs.begin(), LCTs.end(), CSCMotherboard::sortByQuality);
1060  if (LCTs.size()> max_me3141_lcts) LCTs.erase(LCTs.begin()+max_me3141_lcts, LCTs.end());
1061  return LCTs;
1062 }
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 111 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 99 of file CSCMotherboardME3141RPC.h.

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

bool CSCMotherboardME3141RPC::buildLCTfromALCTandRPC_
private

Definition at line 146 of file CSCMotherboardME3141RPC.h.

Referenced by CSCMotherboardME3141RPC(), and run().

bool CSCMotherboardME3141RPC::buildLCTfromCLCTandRPC_
private

Definition at line 147 of file CSCMotherboardME3141RPC.h.

Referenced by CSCMotherboardME3141RPC(), and run().

bool CSCMotherboardME3141RPC::buildLCTfromLowQstubandRPC_
private

Definition at line 148 of file CSCMotherboardME3141RPC.h.

Referenced by CSCMotherboardME3141RPC(), and run().

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

Definition at line 112 of file CSCMotherboardME3141RPC.h.

Referenced by run().

const CSCGeometry* CSCMotherboardME3141RPC::csc_g
private

Definition at line 108 of file CSCMotherboardME3141RPC.h.

Referenced by setCSCGeometry().

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

Definition at line 159 of file CSCMotherboardME3141RPC.h.

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

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

Definition at line 155 of file CSCMotherboardME3141RPC.h.

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

bool CSCMotherboardME3141RPC::debug_luts_
private

Definition at line 131 of file CSCMotherboardME3141RPC.h.

Referenced by CSCMotherboardME3141RPC(), and run().

bool CSCMotherboardME3141RPC::debug_rpc_dphi
private

Definition at line 132 of file CSCMotherboardME3141RPC.h.

bool CSCMotherboardME3141RPC::debug_rpc_matching_
private

Definition at line 130 of file CSCMotherboardME3141RPC.h.

Referenced by CSCMotherboardME3141RPC(), and run().

bool CSCMotherboardME3141RPC::drop_used_clcts
private

Definition at line 119 of file CSCMotherboardME3141RPC.h.

Referenced by CSCMotherboardME3141RPC(), and run().

bool CSCMotherboardME3141RPC::dropLowQualityCLCTsNoRPCs_
private

Definition at line 144 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 101 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 102 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 104 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 103 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 106 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 105 of file CSCMotherboardME3141RPC.h.

Referenced by run().

bool CSCMotherboardME3141RPC::match_earliest_clct_me3141_only
private

Definition at line 117 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 124 of file CSCMotherboardME3141RPC.h.

Referenced by CSCMotherboardME3141RPC(), and sortLCTsByQuality().

int CSCMotherboardME3141RPC::maxDeltaBXRPC_
private

Definition at line 135 of file CSCMotherboardME3141RPC.h.

Referenced by CSCMotherboardME3141RPC(), and retrieveRPCDigis().

int CSCMotherboardME3141RPC::maxDeltaStripRPC_
private

Definition at line 136 of file CSCMotherboardME3141RPC.h.

Referenced by matchingRPCDigis(), and run().

int CSCMotherboardME3141RPC::maxDeltaStripRPCEven_
private

Definition at line 138 of file CSCMotherboardME3141RPC.h.

Referenced by CSCMotherboardME3141RPC(), and run().

int CSCMotherboardME3141RPC::maxDeltaStripRPCOdd_
private

Definition at line 137 of file CSCMotherboardME3141RPC.h.

Referenced by CSCMotherboardME3141RPC(), and run().

int CSCMotherboardME3141RPC::maxDeltaWg_
private

Definition at line 139 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 115 of file CSCMotherboardME3141RPC.h.

Referenced by CSCMotherboardME3141RPC(), and run().

bool CSCMotherboardME3141RPC::promoteALCTRPCpattern_
private

Definition at line 152 of file CSCMotherboardME3141RPC.h.

Referenced by constructLCTsRPC(), and CSCMotherboardME3141RPC().

bool CSCMotherboardME3141RPC::promoteALCTRPCquality_
private

Definition at line 151 of file CSCMotherboardME3141RPC.h.

Referenced by constructLCTsRPC(), and CSCMotherboardME3141RPC().

bool CSCMotherboardME3141RPC::promoteCLCTRPCquality_
private

Definition at line 150 of file CSCMotherboardME3141RPC.h.

Referenced by constructLCTsRPC(), and CSCMotherboardME3141RPC().

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

Definition at line 162 of file CSCMotherboardME3141RPC.h.

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

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

Definition at line 154 of file CSCMotherboardME3141RPC.h.

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

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

Definition at line 158 of file CSCMotherboardME3141RPC.h.

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

bool CSCMotherboardME3141RPC::runME3141ILT_
private

Definition at line 127 of file CSCMotherboardME3141RPC.h.

Referenced by CSCMotherboardME3141RPC(), and run().

unsigned int CSCMotherboardME3141RPC::tmb_cross_bx_algo
private

Definition at line 121 of file CSCMotherboardME3141RPC.h.

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

bool CSCMotherboardME3141RPC::useOldLCTDataFormat_
private

Definition at line 141 of file CSCMotherboardME3141RPC.h.

Referenced by correlateLCTsRPC(), and CSCMotherboardME3141RPC().