CMS 3D CMS Logo

L1TTwinMuxAlgorithm.cc
Go to the documentation of this file.
1 //-------------------------------------------------
2 //
3 // Class: L1TwinMuxAlgortithm
4 //
5 // L1TwinMuxAlgortithm
6 //
7 //
8 // Author :
9 // G. Flouris U Ioannina Feb. 2015
10 // modifications: G Karathanasis
11 //--------------------------------------------------
12 
13 #include <iostream>
14 #include <iomanip>
15 #include <iterator>
16 
29 
30 using namespace std;
31 
35  const L1TTwinMuxParams& tmParams,
36  const RPCGeometry& rpcGeometry) {
38  bool onlyRPC = tmParams.get_UseOnlyRPC();
39  bool onlyDT = tmParams.get_UseOnlyDT();
40  bool useLowQDT = tmParams.get_UseLowQDT();
41  bool correctBX = tmParams.get_CorrectDTBxwRPC();
42  bool verbose = tmParams.get_Verbose();
43 
45  AlignTrackSegments alignedDTs{*inphiDigis};
46  alignedDTs.run();
47  L1MuDTChambPhContainer const& phiDigis = alignedDTs.getDTContainer();
48  //if only DTs are required without bx correction
49  //return the aligned track segments
50  if (onlyDT && !correctBX && !useLowQDT) {
51  m_tm_phi_output = phiDigis;
52  return;
53  }
55  RPCHitCleaner rpcHitCl{*rpcDigis};
56  rpcHitCl.run();
57  RPCDigiCollection const& rpcDigisCleaned = rpcHitCl.getRPCCollection();
58 
60  RPCtoDTTranslator dt_from_rpc{rpcDigisCleaned};
61  dt_from_rpc.run(rpcGeometry);
62  L1MuDTChambPhContainer const& rpcPhiDigis =
63  dt_from_rpc.getDTContainer(); //Primitves used for RPC->DT (only station 1 and 2)
64  L1MuDTChambPhContainer const& rpcHitsPhiDigis =
65  dt_from_rpc.getDTRPCHitsContainer(); //Primitves used for bx correction
66 
68  DTLowQMatching dtlowq{&phiDigis, rpcHitsPhiDigis};
69  dtlowq.run(tmParams);
70 
71  if (onlyDT && !correctBX && useLowQDT) {
72  m_tm_phi_output = phiDigis;
73  if (verbose) {
74  IOPrinter ioPrinter;
75  cout << "======DT========" << endl;
76  ioPrinter.run(inphiDigis, m_tm_phi_output, rpcDigis, rpcGeometry);
77  cout << "======RPC========" << endl;
78  ioPrinter.run(&rpcHitsPhiDigis, m_tm_phi_output, &rpcDigisCleaned, rpcGeometry);
79  cout << "+++++++++++++++++++++++++++++++++++++++++++++++++" << endl;
80  }
81 
82  return;
83  }
84 
86  // DTRPCBxCorrection *rpc_dt_bx = new DTRPCBxCorrection(phiDigis,rpcHitsPhiDigis);
87  DTRPCBxCorrection rpc_dt_bx{phiDigis, rpcHitsPhiDigis};
88  rpc_dt_bx.run(tmParams);
89 
90  L1MuDTChambPhContainer const& phiDigiscp = rpc_dt_bx.getDTContainer();
91 
93  std::vector<L1MuDTChambPhDigi> l1ttma_out;
94 
95  int bx = 0, wheel = 0, sector = 0, station = 1;
96 
97  for (bx = -3; bx <= 3; bx++) {
98  for (wheel = -2; wheel <= 2; wheel++) {
99  for (sector = 0; sector < 12; sector++) {
100  for (station = 1; station <= 4; station++) {
101  L1MuDTChambPhDigi const* dtts1 = phiDigiscp.chPhiSegm1(wheel, station, sector, bx);
102  L1MuDTChambPhDigi const* dtts2 = phiDigiscp.chPhiSegm2(wheel, station, sector, bx);
103  L1MuDTChambPhDigi const* rpcts1 = rpcPhiDigis.chPhiSegm1(wheel, station, sector, bx);
104 
105  if (!onlyRPC) {
106  if (!dtts1 && !dtts2 && !rpcts1)
107  continue;
108  if (dtts1 && dtts1->code() != 7) {
109  l1ttma_out.push_back(*dtts1);
110  }
111  if (dtts2 && dtts2->code() != 7) {
112  l1ttma_out.push_back(*dtts2);
113  }
114  if (!onlyDT) {
115  if (!dtts1 && !dtts2 && rpcts1 && station <= 2) {
116  l1ttma_out.emplace_back(rpcts1->bxNum(),
117  rpcts1->whNum(),
118  rpcts1->scNum(),
119  rpcts1->stNum(),
120  rpcts1->phi(),
121  rpcts1->phiB(),
122  rpcts1->code(),
123  rpcts1->Ts2Tag(),
124  rpcts1->BxCnt(),
125  2);
126  }
127  }
128  }
129 
130  else if (onlyRPC) {
131  if (rpcts1 && station <= 2) {
132  l1ttma_out.emplace_back(rpcts1->bxNum(),
133  rpcts1->whNum(),
134  rpcts1->scNum(),
135  rpcts1->stNum(),
136  rpcts1->phi(),
137  rpcts1->phiB(),
138  rpcts1->code(),
139  rpcts1->Ts2Tag(),
140  rpcts1->BxCnt(),
141  2);
142  }
143  }
144  }
145  }
146  }
147  }
148 
149  m_tm_phi_output.setContainer(l1ttma_out);
150 
151  if (verbose) {
152  IOPrinter ioPrinter;
153  cout << "======DT========" << endl;
154  ioPrinter.run(inphiDigis, m_tm_phi_output, rpcDigis, rpcGeometry);
155  cout << "======RPC========" << endl;
156  ioPrinter.run(&rpcHitsPhiDigis, m_tm_phi_output, &rpcDigisCleaned, rpcGeometry);
157  cout << "+++++++++++++++++++++++++++++++++++++++++++++++++" << endl;
158  }
159 }
RPCtoDTTranslator.h
DTRPCBxCorrection.h
L1MuDTChambPhDigi::stNum
int stNum() const
Definition: L1MuDTChambPhDigi.cc:72
L1MuDTChambPhContainer::chPhiSegm1
L1MuDTChambPhDigi const * chPhiSegm1(int wheel, int stat, int sect, int bx) const
Definition: L1MuDTChambPhContainer.cc:67
relativeConstraints.station
station
Definition: relativeConstraints.py:67
RPCHitCleaner
Definition: RPCHitCleaner.h:17
gather_cfg.cout
cout
Definition: gather_cfg.py:144
L1MuDTChambPhDigi::whNum
int whNum() const
Definition: L1MuDTChambPhDigi.cc:70
l1GtPatternGenerator_cfi.bx
bx
Definition: l1GtPatternGenerator_cfi.py:18
IOPrinter::run
void run(edm::Handle< L1MuDTChambPhContainer >, const L1MuDTChambPhContainer &, edm::Handle< RPCDigiCollection >, const RPCGeometry &)
Definition: IOPrinter.cc:18
L1TTwinMuxParams::get_UseOnlyRPC
int get_UseOnlyRPC() const
Definition: L1TTwinMuxParams.h:60
RPCRoll.h
AlignTrackSegments
Definition: AlignTrackSegments.h:18
DTLowQMatching
Definition: DTLowQMatching.h:32
IOPrinter
Definition: IOPrinter.h:27
edm::Handle< L1MuDTChambPhContainer >
L1MuDTChambPhDigi::phiB
int phiB() const
Definition: L1MuDTChambPhDigi.cc:76
AlignTrackSegments.h
L1MuDTChambPhContainer
Definition: L1MuDTChambPhContainer.h:33
RPCEMapRcd.h
RPCHitCleaner.h
RPCDigiCollection
L1MuDTChambPhDigi::BxCnt
int BxCnt() const
Definition: L1MuDTChambPhDigi.cc:82
L1MuDTChambPhDigi::phi
int phi() const
Definition: L1MuDTChambPhDigi.cc:74
RPCtoDTTranslator
Definition: RPCtoDTTranslator.h:23
DTLowQMatching.h
verbose
static constexpr int verbose
Definition: HLTExoticaSubAnalysis.cc:25
DTRPCBxCorrection
Definition: DTRPCBxCorrection.h:24
L1MuDTChambPhDigi::bxNum
int bxNum() const
Definition: L1MuDTChambPhDigi.cc:68
L1TTwinMuxParams::get_CorrectDTBxwRPC
int get_CorrectDTBxwRPC() const
Definition: L1TTwinMuxParams.h:69
L1MuDTChambPhContainer::chPhiSegm2
L1MuDTChambPhDigi const * chPhiSegm2(int wheel, int stat, int sect, int bx) const
Definition: L1MuDTChambPhContainer.cc:78
makeMuonMisalignmentScenario.wheel
wheel
Definition: makeMuonMisalignmentScenario.py:319
L1TTwinMuxParams::get_UseLowQDT
int get_UseLowQDT() const
Definition: L1TTwinMuxParams.h:66
L1MuDTChambPhDigi::scNum
int scNum() const
Definition: L1MuDTChambPhDigi.cc:71
L1MuTMChambPhContainer.h
std
Definition: JetResolutionObject.h:76
L1TTwinMuxAlgorithm::run
void run(edm::Handle< L1MuDTChambPhContainer > phiDigis, edm::Handle< L1MuDTChambThContainer > thetaDigis, edm::Handle< RPCDigiCollection > rpcDigis, const L1TTwinMuxParams &, const RPCGeometry &)
Definition: L1TTwinMuxAlgorithm.cc:32
RPCGeometry
Definition: RPCGeometry.h:20
L1MuDTChambPhDigi::Ts2Tag
int Ts2Tag() const
Definition: L1MuDTChambPhDigi.cc:80
MuonGeometryRecord.h
IOPrinter.h
L1MuDTChambPhDigi::code
int code() const
Definition: L1MuDTChambPhDigi.cc:78
L1TTwinMuxParams::get_UseOnlyDT
int get_UseOnlyDT() const
Definition: L1TTwinMuxParams.h:63
RPCGeometry.h
L1TTwinMuxParams::get_Verbose
int get_Verbose() const
Definition: L1TTwinMuxParams.h:72
fakeTwinMuxParams_cff.useLowQDT
useLowQDT
Definition: fakeTwinMuxParams_cff.py:23
L1TTwinMuxAlgorithm.h
L1MuDTChambPhDigi
Definition: L1MuDTChambPhDigi.h:31
L1TTwinMuxParams
Definition: L1TTwinMuxParams.h:19