8 #include "boost/container/flat_set.hpp"
11 { 0,2.421},{ 1,2.415},{ 2,2.406},{ 3,2.397},{ 4,2.388},{ 5,2.379},{ 6,2.371},{ 7,2.362},
12 { 8,2.353},{ 9,2.345},{10,2.336},{11,2.328},{12,2.319},{13,2.311},{14,2.303},{15,2.295},
13 {16,2.287},{17,2.279},{18,2.271},{19,2.263},{20,2.255},{21,2.248},{22,2.240},{23,2.232},
14 {24,2.225},{25,2.217},{26,2.210},{27,2.203},{28,2.195},{29,2.188},{30,2.181},{31,2.174},
15 {32,2.169},{33,2.157},{34,2.151},{35,2.142},{36,2.134},{37,2.126},{38,2.118},{39,2.110},
16 {40,2.102},{41,2.094},{42,2.087},{43,2.079},{44,2.071},{45,2.064},{46,2.056},{47,2.049},
17 {48,2.041},{49,2.034},{50,2.027},{51,2.019},{52,2.012},{53,2.005},{54,1.998},{55,1.991},
18 {56,1.984},{57,1.977},{58,1.970},{59,1.964},{60,1.957},{61,1.950},{62,1.944},{63,1.937},
19 {64,1.932},{65,1.922},{66,1.917},{67,1.911},{68,1.905},{69,1.898},{70,1.892},{71,1.886},
20 {72,1.880},{73,1.874},{74,1.868},{75,1.861},{76,1.855},{77,1.850},{78,1.844},{79,1.838},
21 {80,1.832},{81,1.826},{82,1.820},{83,1.815},{84,1.809},{85,1.803},{86,1.798},{87,1.792},
22 {88,1.787},{89,1.781},{90,1.776},{91,1.770},{92,1.765},{93,1.759},{94,1.754},{95,1.749},
26 { 0,2.447},{ 1,2.441},{ 2,2.432},{ 3,2.423},{ 4,2.414},{ 5,2.405},{ 6,2.396},{ 7,2.388},
27 { 8,2.379},{ 9,2.371},{10,2.362},{11,2.354},{12,2.345},{13,2.337},{14,2.329},{15,2.321},
28 {16,2.313},{17,2.305},{18,2.297},{19,2.289},{20,2.281},{21,2.273},{22,2.266},{23,2.258},
29 {24,2.251},{25,2.243},{26,2.236},{27,2.228},{28,2.221},{29,2.214},{30,2.207},{31,2.200},
30 {32,2.195},{33,2.183},{34,2.176},{35,2.168},{36,2.160},{37,2.152},{38,2.144},{39,2.136},
31 {40,2.128},{41,2.120},{42,2.112},{43,2.104},{44,2.097},{45,2.089},{46,2.082},{47,2.074},
32 {48,2.067},{49,2.059},{50,2.052},{51,2.045},{52,2.038},{53,2.031},{54,2.023},{55,2.016},
33 {56,2.009},{57,2.003},{58,1.996},{59,1.989},{60,1.982},{61,1.975},{62,1.969},{63,1.962},
34 {64,1.957},{65,1.948},{66,1.943},{67,1.936},{68,1.930},{69,1.924},{70,1.917},{71,1.911},
35 {72,1.905},{73,1.899},{74,1.893},{75,1.887},{76,1.881},{77,1.875},{78,1.869},{79,1.863},
36 {80,1.857},{81,1.851},{82,1.845},{83,1.840},{84,1.834},{85,1.828},{86,1.823},{87,1.817},
37 {88,1.811},{89,1.806},{90,1.800},{91,1.795},{92,1.790},{93,1.784},{94,1.779},{95,1.774},
41 { 0,2.399},{ 1,2.394},{ 2,2.386},{ 3,2.378},{ 4,2.370},{ 5,2.362},{ 6,2.354},{ 7,2.346},
42 { 8,2.339},{ 9,2.331},{10,2.323},{11,2.316},{12,2.308},{13,2.301},{14,2.293},{15,2.286},
43 {16,2.279},{17,2.272},{18,2.264},{19,2.257},{20,2.250},{21,2.243},{22,2.236},{23,2.229},
44 {24,2.223},{25,2.216},{26,2.209},{27,2.202},{28,2.196},{29,2.189},{30,2.183},{31,2.176},
45 {32,2.172},{33,2.161},{34,2.157},{35,2.150},{36,2.144},{37,2.138},{38,2.132},{39,2.126},
46 {40,2.119},{41,2.113},{42,2.107},{43,2.101},{44,2.095},{45,2.089},{46,2.083},{47,2.078},
47 {48,2.072},{49,2.066},{50,2.060},{51,2.055},{52,2.049},{53,2.043},{54,2.038},{55,2.032},
48 {56,2.027},{57,2.021},{58,2.016},{59,2.010},{60,2.005},{61,1.999},{62,1.994},{63,1.989},
49 {64,1.985},{65,1.977},{66,1.973},{67,1.968},{68,1.963},{69,1.958},{70,1.953},{71,1.947},
50 {72,1.942},{73,1.937},{74,1.932},{75,1.928},{76,1.923},{77,1.918},{78,1.913},{79,1.908},
51 {80,1.903},{81,1.898},{82,1.894},{83,1.889},{84,1.884},{85,1.879},{86,1.875},{87,1.870},
52 {88,1.866},{89,1.861},{90,1.856},{91,1.852},{92,1.847},{93,1.843},{94,1.838},{95,1.834},
56 { 0,2.423},{ 1,2.418},{ 2,2.410},{ 3,2.402},{ 4,2.394},{ 5,2.386},{ 6,2.378},{ 7,2.370},
57 { 8,2.362},{ 9,2.355},{10,2.347},{11,2.339},{12,2.332},{13,2.324},{14,2.317},{15,2.310},
58 {16,2.302},{17,2.295},{18,2.288},{19,2.281},{20,2.274},{21,2.267},{22,2.260},{23,2.253},
59 {24,2.246},{25,2.239},{26,2.233},{27,2.226},{28,2.219},{29,2.213},{30,2.206},{31,2.199},
60 {32,2.195},{33,2.185},{34,2.180},{35,2.174},{36,2.168},{37,2.161},{38,2.155},{39,2.149},
61 {40,2.143},{41,2.137},{42,2.131},{43,2.125},{44,2.119},{45,2.113},{46,2.107},{47,2.101},
62 {48,2.095},{49,2.089},{50,2.084},{51,2.078},{52,2.072},{53,2.067},{54,2.061},{55,2.055},
63 {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 {64,2.008},{65,2.000},{66,1.996},{67,1.991},{68,1.986},{69,1.981},{70,1.976},{71,1.971},
65 {72,1.966},{73,1.961},{74,1.956},{75,1.951},{76,1.946},{77,1.941},{78,1.936},{79,1.931},
66 {80,1.926},{81,1.921},{82,1.917},{83,1.912},{84,1.907},{85,1.902},{86,1.898},{87,1.893},
67 {88,1.889},{89,1.884},{90,1.879},{91,1.875},{92,1.870},{93,1.866},{94,1.861},{95,1.857},
75 {3., 0.02203511, 0.00930056},
76 {5., 0.02203511, 0.00930056},
77 {7 , 0.0182579 , 0.00790009},
78 {10., 0.01066000, 0.00483286},
79 {15., 0.00722795, 0.00363230},
80 {20., 0.00562598, 0.00304878},
81 {30., 0.00416544, 0.00253782},
82 {40., 0.00342827, 0.00230833} };
85 {3., 0.02203511, 0.00930056},
86 {5., 0.02203511, 0.00930056},
87 {7 , 0.0182579 , 0.00790009},
88 {10., 0.01066000, 0.00483286},
89 {15., 0.00722795, 0.00363230},
90 {20., 0.00562598, 0.00304878},
91 {30., 0.00416544, 0.00253782},
92 {40., 0.00342827, 0.00230833} };
95 unsigned sector,
unsigned subsector,
104 <<
"+++ Upgrade CSCMotherboardME3141RPC constructed while isSLHC is not set! +++\n";
122 pref[
m-1] = pref[0] -
m/2;
123 pref[
m] = pref[0] +
m/2;
171 for (
int i=0;
i<2;
i++)
191 <<
"+++ run() called for non-existing ALCT/CLCT processor! +++ \n";
198 bool rpcGeometryAvailable(
false);
199 if (
rpc_g !=
nullptr) {
201 <<
"+++ run() called for RPC-CSC integrated trigger! +++ \n";
202 rpcGeometryAvailable =
true;
204 const bool hasCorrectRPCGeometry((not rpcGeometryAvailable)
or (rpcGeometryAvailable and not
hasRE31andRE41()));
209 const CSCDetId csc_id(cscChamber->id());
212 const CSCLayer* keyLayer(cscChamber->layer(3));
215 const bool isEven(csc_id.chamber()%2==0);
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);
227 if (hasCorrectRPCGeometry) {
229 <<
"+++ run() called for RPC-CSC integrated trigger without valid RPC geometry! +++ \n";
237 std::cout <<
"RPC det " <<rpc_id<<
" CSC det "<< csc_id << std::endl;
240 std::cout <<
"roll "<<
p.first <<
" min eta " << (
p.second).
first <<
" max eta " << (
p.second).second << std::endl;
246 const int numberOfWG(keyLayerGeometry->numberOfWireGroups());
247 for (
int i = 0;
i< numberOfWG; ++
i){
259 std::cout <<
"WG "<<
p.first <<
" RPC roll " <<
p.second <<
" "
266 auto randRoll(rpcChamber->roll(2));
268 auto nStrips(keyLayerGeometry->numberOfStrips());
269 for (
float i = 0;
i< nStrips;
i =
i+0.5){
270 const LocalPoint lpCSC(keyLayerGeometry->topology()->localPosition(
i));
274 const bool edge(HS < 5 or HS > 155);
275 const float strip(edge ? -99 : randRoll->strip(lpRPC));
280 std::cout <<
"detId " << csc_id << std::endl;
281 std::cout <<
"CSCHSToRPCStrip LUT in" << std::endl;
283 std::cout <<
"CSC HS "<<
p.first <<
" RPC Strip low " << (
p.second).
first <<
" RPC Strip high " << (
p.second).second << std::endl;
287 const int nRPCStrips(randRoll->nstrips());
288 for (
int i = 0;
i< nRPCStrips; ++
i){
289 const LocalPoint lpRPC(randRoll->centreOfStrip(
i));
292 const float strip(keyLayerGeometry->strip(lpCSC));
297 std::cout <<
"detId " << csc_id << std::endl;
298 std::cout <<
"RPCStripToCSCHs LUT" << std::endl;
300 std::cout <<
"RPC Strip "<<
p.first <<
" CSC HS: " <<
p.second << std::endl;
310 const bool hasRPCDigis(
rpcDigis_.size()!=0);
312 int used_clct_mask[20];
313 for (
int c=0;
c<20;++
c) used_clct_mask[
c]=0;
318 if (
alct->bestALCT[bx_alct].isValid())
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;
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;
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;
339 const bool lowQualityALCT(
alct->bestALCT[bx_alct].getQuality() == 0);
342 int nSuccesFulMatches = 0;
343 for (
int bx_clct = bx_clct_start; bx_clct <= bx_clct_stop; bx_clct++) {
346 if (
clct->bestCLCT[bx_clct].isValid()) {
352 const int quality(
clct->bestCLCT[bx_clct].getQuality());
354 const bool lowQuality(
quality<4
or lowQualityALCT);
357 int nFound(matchingDigis.size());
358 const bool clctInEdge(
clct->bestCLCT[bx_clct].getKeyStrip() < 5
or clct->bestCLCT[bx_clct].getKeyStrip() > 155);
373 int mbx = bx_clct-bx_clct_start;
375 clct->bestCLCT[bx_clct],
clct->secondCLCT[bx_clct],
376 allLCTs[bx_alct][mbx][0],
allLCTs[bx_alct][mbx][1], matchingDigis);
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;
385 clct->bestCLCT[bx_clct].print();
386 std::cout <<
"+++ Second CLCT Details: ";
387 clct->secondCLCT[bx_clct].print();
389 if (
allLCTs[bx_alct][mbx][0].isValid()) {
390 used_clct_mask[bx_clct] += 1;
396 int nSuccesFulRPCMatches = 0;
399 for (
int bx_rpc = bx_clct_start; bx_rpc <= bx_clct_stop; bx_rpc++) {
401 if (not hasRPCDigis)
continue;
406 if (digis.size()==0)
continue;
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;
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;
427 int nSuccesFulMatches = 0;
432 if (
clct->bestCLCT[bx_alct].isValid())
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;
439 const int quality(
clct->bestCLCT[bx_alct].getQuality());
445 int mbx =
std::abs(
clct->bestCLCT[bx_alct].getBX()-bx_alct);
454 clct->bestCLCT[bx_alct].print();
455 std::cout <<
"+++ Second CLCT Details: ";
456 clct->secondCLCT[bx_alct].print();
458 if (
allLCTs[bx_rpc][mbx][0].isValid()) {
459 used_clct_mask[bx_alct] += 1;
473 for (
int i=0;
i<2;
i++)
475 int cbx = bx + mbx - match_trig_window_size/2;
480 <<
"LCT"<<
i+1<<
" "<<bx<<
"/"<<cbx<<
": "<<
allLCTs[bx][mbx][
i]<<std::endl;
489 for (
int i=0;
i<2;
i++)
500 for (
int i=0;
i<2;
i++)
502 int cbx = bx + mbx - match_trig_window_size/2;
511 <<
"bx "<<bx<<
" nnLCT:"<<n<<
" "<<n<<std::endl;
519 std::cout <<
"========================================================================" << std::endl;
520 std::cout <<
"Counting the final LCTs" << std::endl;
521 std::cout <<
"========================================================================" << std::endl;
537 return aRE31 and aRE41;
543 std::map<int,std::pair<double,double> >
result;
546 if (chamber==
nullptr)
return result;
548 for(
int i = 1;
i<= chamber->nrolls(); ++
i){
549 auto roll(chamber->roll(
i));
550 if (roll==
nullptr)
continue;
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.);
556 const GlobalPoint gp_bottom(roll->toGlobal(lp_bottom));
568 const float minEta((
p.second).first);
569 const float maxEta((
p.second).second);
570 if (minEta <= eta and eta <= maxEta) {
582 for (
auto roll : chamber->rolls()) {
584 auto digis_in_det = rpcDigis->get(roll_id);
585 for (
auto digi = digis_in_det.first; digi != digis_in_det.second; ++digi) {
588 rpcDigis_[bx].push_back(std::make_pair(roll_id(), *digi));
597 std::cout <<
"------------------------------------------------------------------------" << std::endl;
599 for (
int bx = bx_start; bx <= bx_stop; bx++) {
600 std::vector<std::pair<unsigned int, const RPCDigi> > in_strips =
rpcDigis_[bx];
602 std::cout <<
"* RPC trigger digis: " << std::endl;
605 std::cout <<
"N(digis) BX " << bx <<
" : " << in_strips.size() << std::endl;
607 for (
auto digi : in_strips){
609 std::cout <<
"\tdetId " << digi.first <<
" " << roll_id <<
", digi = " << digi.second.strip() <<
", BX = " << digi.second.bx() + 6 << std::endl;
625 const bool debug(
false);
626 if (debug)
std::cout <<
"lowStrip " << lowStrip <<
" highStrip " << highStrip <<
" delta strip " <<
maxDeltaStripRPC_ <<std::endl;
628 auto strip((
p.second).strip());
629 if (debug)
std::cout <<
"strip " << strip << std::endl;
631 if (debug)
std::cout <<
"++Matches! " << std::endl;
646 std::vector<int> Rolls;
653 const bool debug(
false);
655 for (
auto alctRoll : Rolls)
657 if (debug)
std::cout <<
" roll " << alctRoll << std::endl;
660 if (debug)
std::cout <<
"Candidate ALCT: " << digiRoll << std::endl;
661 if (alctRoll != digiRoll)
continue;
662 if (debug)
std::cout <<
"++Matches! " << std::endl;
680 const bool debug(
false);
681 if (debug)
std::cout <<
"-----------------------------------------------------------------------"<<std::endl;
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;
688 if (
p.first !=
q.first)
continue;
690 if (debug)
std::cout <<
"++Matches! " << std::endl;
695 if (debug)
std::cout <<
"-----------------------------------------------------------------------"<<std::endl;
717 if (isDistrip) {quality = 4;}
726 if (sumQual < 1 || sumQual > 6) {
728 <<
"+++ findQuality: sumQual = " << sumQual <<
"+++ \n";
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;}
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;}
763 if (sumQual < 1 || sumQual > 6) {
765 <<
"+++ findQuality: Unexpected sumQual = " << sumQual <<
"+++\n";
774 quality = offset + sumQual;
792 if (hasRPC) n_rpc = 1;
797 if (!a4 && !c4) quality = 5;
798 else if ( a4 && !c4) quality = 6;
799 else if (!a4 && c4) quality = 7;
800 else if ( a4 && c4) {
809 else if (
pattern == 10) quality = 15;
812 <<
"+++ findQuality: Unexpected CLCT pattern id = "
830 bool cathodeBestValid = bestCLCT.
isValid();
831 bool cathodeSecondValid = secondCLCT.
isValid();
833 if (cathodeBestValid and !cathodeSecondValid) secondCLCT = bestCLCT;
834 if (!cathodeBestValid and cathodeSecondValid) bestCLCT = secondCLCT;
858 bool anodeBestValid = bestALCT.
isValid();
859 bool anodeSecondValid = secondALCT.
isValid();
861 if (anodeBestValid and !anodeSecondValid) secondALCT = bestALCT;
862 if (!anodeBestValid and anodeSecondValid) bestALCT = secondALCT;
885 bool anodeBestValid = bestALCT.
isValid();
886 bool anodeSecondValid = secondALCT.
isValid();
887 bool cathodeBestValid = bestCLCT.
isValid();
888 bool cathodeSecondValid = secondCLCT.
isValid();
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;
904 if (((secondALCT != bestALCT)
or (secondCLCT != bestCLCT)) and
952 return CSCCorrelatedLCTDigi(0, 1, quality, wg, clct.
getKeyStrip(),
pattern, clct.
getBend(), bx, 0, 0, 0,
theTrigChamber);
968 return CSCCorrelatedLCTDigi(0, 1, quality, wg, 0, pattern, 0, bx, 0, 0, 0,
theTrigChamber);
996 return CSCCorrelatedLCTDigi(0, 1, quality, wg, keyStrip, pattern, 0, bx, 0, 0, 0,
theTrigChamber);
1014 return CSCCorrelatedLCTDigi(0, 1, quality, wg, keyStrip, pattern, 0, bx, 0, 0, 0,
theTrigChamber);
1028 std::vector<CSCCorrelatedLCTDigi>
result;
1030 std::vector<CSCCorrelatedLCTDigi> tmpV;
1033 result.insert(result.end(), tmpV.begin(), tmpV.end());
1037 for (
int i=0;
i<2;
i++) {
1038 if (
allLCTs[bx][mbx][
i].isValid()) {
1039 result.push_back(
allLCTs[bx][mbx][
i]);
1051 std::vector<CSCCorrelatedLCTDigi> LCTs;
1054 for (
int i=0;
i<2;
i++)
1056 LCTs.push_back(
allLCTs[bx][mbx][
i]);
int getQuality() const
return quality of a pattern (number of layers hit!)
T getParameter(std::string const &) const
unsigned int max_me3141_lcts
static const double lut_wg_me41_eta_odd[96][2]
std::map< int, int > cscWgToRpcRoll_
CSCMotherboardME3141RPC(unsigned endcap, unsigned station, unsigned sector, unsigned subsector, unsigned chamber, const edm::ParameterSet &conf)
std::map< int, int > rpcStripToCscHs_
unsigned int clct_trig_enable
CSCChamber * chamber(unsigned endcap, unsigned station, unsigned sector, unsigned subsector, unsigned tcscid) const
Return the CSCChamber for a corresponding endcap/station/sector/subsector/trigger cscid...
std::vector< CSCCLCTDigi > clctV
bool buildLCTfromCLCTandRPC_
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::EventIDconst &, edm::Timestampconst & > We also list in braces which AR_WATCH_USING_METHOD_ is used for those or
int assignRPCRoll(double eta)
unsigned int match_trig_window_size
const unsigned theTrigChamber
bool isValid() const
check ALCT validity (1 - valid ALCT)
bool useOldLCTDataFormat_
std::vector< CSCCorrelatedLCTDigi > readoutLCTs()
std::vector< CSCCorrelatedLCTDigi > sortLCTsByQuality(int bx)
int getStripType() const
return striptype
int getBend() const
return bend
int maxDeltaStripRPCEven_
uint32_t rawId() const
get the raw id
U second(std::pair< T, U > const &p)
const RPCChamber * chamber(RPCDetId id) const
void printRPCTriggerDigis(int minBX, int maxBx)
const unsigned theStation
static CSCTriggerGeomManager * get()
std::map< int, std::pair< double, double > > createRPCRollLUT(RPCDetId id)
tuple quality
[pTError/pT]*max(1,normChi2) <= ptErrorCut
bool promoteALCTRPCpattern_
unsigned int tmb_cross_bx_algo
std::map< int, std::pair< int, int > > cscHsToRpcStrip_
const unsigned theSubsector
int getBX() const
return BX
static const double lut_wg_me41_eta_even[96][2]
unsigned int encodePattern(const int ptn, const int highPt)
bool promoteCLCTRPCquality_
static const double lut_pt_vs_dphi_rpccsc_me41[8][3]
Abs< T >::type abs(const T &t)
bool isValid() const
check CLCT validity (1 - valid CLCT)
unsigned int match_trig_enable
static const double lut_wg_me31_eta_odd[96][2]
static int triggerCscIdFromLabels(int station, int ring, int chamber)
static const double lut_pt_vs_dphi_rpccsc_me31[8][3]
int getBX() const
return BX - five low bits of BXN counter tagged by the ALCT
std::map< int, std::pair< double, double > > rpcRollToEtaLimits_
int getQuality() const
return quality of a pattern
CSCCorrelatedLCTDigi allLCTs[MAX_LCT_BINS][15][2]
int getAccelerator() const
bool buildLCTfromLowQstubandRPC_
static int triggerSectorFromLabels(int station, int ring, int chamber)
int getPattern() const
return pattern
const RPCGeometry * rpc_g
RPCDigisBX matchingRPCDigis(const CSCCLCTDigi &cLCT, const RPCDigisBX &digis=RPCDigisBX(), bool first=true)
unsigned int alct_trig_enable
bool buildLCTfromALCTandRPC_
std::vector< RPCDigiBX > RPCDigisBX
std::unique_ptr< CSCAnodeLCTProcessor > alct
void correlateLCTsRPC(CSCALCTDigi bestALCT, CSCALCTDigi secondALCT, CSCCLCTDigi bestCLCT, CSCCLCTDigi secondCLCT, CSCCorrelatedLCTDigi &lct1, CSCCorrelatedLCTDigi &lct2, const RPCDigisBX &digis=RPCDigisBX())
bool match_earliest_clct_me3141_only
std::unique_ptr< CSCCathodeLCTProcessor > clct
~CSCMotherboardME3141RPC()
std::vector< CSCALCTDigi > alctV
std::vector< CSCCorrelatedLCTDigi > getLCTs()
void run(const CSCWireDigiCollection *wiredc, const CSCComparatorDigiCollection *compdc, const RPCDigiCollection *rpcDigis)
bool dropLowQualityCLCTsNoRPCs_
void retrieveRPCDigis(const RPCDigiCollection *digis, unsigned id)
unsigned int findQualityRPC(const CSCALCTDigi &aLCT, const CSCCLCTDigi &cLCT, bool hasRPC)
int getKeyWG() const
return key wire group
CSCCorrelatedLCTDigi constructLCTsRPC(const CSCALCTDigi &alct, const CSCCLCTDigi &clct, const RPCDigisBX &digis=RPCDigisBX())
static bool sortByQuality(const CSCCorrelatedLCTDigi &, const CSCCorrelatedLCTDigi &)
bool promoteALCTRPCquality_
static const double lut_wg_me31_eta_even[96][2]