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 edm::EventSetup& c) {
37  const L1TTwinMuxParamsRcd& tmParamsRcd = c.get<L1TTwinMuxParamsRcd>();
38  tmParamsRcd.get(tmParamsHandle);
39  const L1TTwinMuxParams& tmParams = *tmParamsHandle.product();
40  bool onlyRPC = tmParams.get_UseOnlyRPC();
41  bool onlyDT = tmParams.get_UseOnlyDT();
42  bool useLowQDT = tmParams.get_UseLowQDT();
43  bool correctBX = tmParams.get_CorrectDTBxwRPC();
44  bool verbose = tmParams.get_Verbose();
45 
47  AlignTrackSegments alignedDTs{*inphiDigis};
48  alignedDTs.run(c);
49  L1MuDTChambPhContainer const& phiDigis = alignedDTs.getDTContainer();
50  //if only DTs are required without bx correction
51  //return the aligned track segments
52  if (onlyDT && !correctBX && !useLowQDT) {
53  m_tm_phi_output = phiDigis;
54  return;
55  }
57  RPCHitCleaner rpcHitCl{*rpcDigis};
58  rpcHitCl.run(c);
59  RPCDigiCollection const& rpcDigisCleaned = rpcHitCl.getRPCCollection();
60 
62  RPCtoDTTranslator dt_from_rpc{rpcDigisCleaned};
63  dt_from_rpc.run(c);
64  L1MuDTChambPhContainer const& rpcPhiDigis =
65  dt_from_rpc.getDTContainer(); //Primitves used for RPC->DT (only station 1 and 2)
66  L1MuDTChambPhContainer const& rpcHitsPhiDigis =
67  dt_from_rpc.getDTRPCHitsContainer(); //Primitves used for bx correction
68 
70  DTLowQMatching dtlowq{&phiDigis, rpcHitsPhiDigis};
71  dtlowq.run(c);
72 
73  if (onlyDT && !correctBX && useLowQDT) {
74  m_tm_phi_output = phiDigis;
75  if (verbose) {
76  IOPrinter ioPrinter;
77  cout << "======DT========" << endl;
78  ioPrinter.run(inphiDigis, m_tm_phi_output, rpcDigis, c);
79  cout << "======RPC========" << endl;
80  ioPrinter.run(&rpcHitsPhiDigis, m_tm_phi_output, &rpcDigisCleaned, c);
81  cout << "+++++++++++++++++++++++++++++++++++++++++++++++++" << endl;
82  }
83 
84  return;
85  }
86 
88  // DTRPCBxCorrection *rpc_dt_bx = new DTRPCBxCorrection(phiDigis,rpcHitsPhiDigis);
89  DTRPCBxCorrection rpc_dt_bx{phiDigis, rpcHitsPhiDigis};
90  rpc_dt_bx.run(c);
91 
92  L1MuDTChambPhContainer const& phiDigiscp = rpc_dt_bx.getDTContainer();
93 
95  std::vector<L1MuDTChambPhDigi> l1ttma_out;
96 
97  int bx = 0, wheel = 0, sector = 0, station = 1;
98 
99  for (bx = -3; bx <= 3; bx++) {
100  for (wheel = -2; wheel <= 2; wheel++) {
101  for (sector = 0; sector < 12; sector++) {
102  for (station = 1; station <= 4; station++) {
103  L1MuDTChambPhDigi const* dtts1 = phiDigiscp.chPhiSegm1(wheel, station, sector, bx);
104  L1MuDTChambPhDigi const* dtts2 = phiDigiscp.chPhiSegm2(wheel, station, sector, bx);
105  L1MuDTChambPhDigi const* rpcts1 = rpcPhiDigis.chPhiSegm1(wheel, station, sector, bx);
106 
107  if (!onlyRPC) {
108  if (!dtts1 && !dtts2 && !rpcts1)
109  continue;
110  if (dtts1 && dtts1->code() != 7) {
111  l1ttma_out.push_back(*dtts1);
112  }
113  if (dtts2 && dtts2->code() != 7) {
114  l1ttma_out.push_back(*dtts2);
115  }
116  if (!onlyDT) {
117  if (!dtts1 && !dtts2 && rpcts1 && station <= 2) {
118  l1ttma_out.emplace_back(rpcts1->bxNum(),
119  rpcts1->whNum(),
120  rpcts1->scNum(),
121  rpcts1->stNum(),
122  rpcts1->phi(),
123  rpcts1->phiB(),
124  rpcts1->code(),
125  rpcts1->Ts2Tag(),
126  rpcts1->BxCnt(),
127  2);
128  }
129  }
130  }
131 
132  else if (onlyRPC) {
133  if (rpcts1 && station <= 2) {
134  l1ttma_out.emplace_back(rpcts1->bxNum(),
135  rpcts1->whNum(),
136  rpcts1->scNum(),
137  rpcts1->stNum(),
138  rpcts1->phi(),
139  rpcts1->phiB(),
140  rpcts1->code(),
141  rpcts1->Ts2Tag(),
142  rpcts1->BxCnt(),
143  2);
144  }
145  }
146  }
147  }
148  }
149  }
150 
151  m_tm_phi_output.setContainer(l1ttma_out);
152 
153  if (verbose) {
154  IOPrinter ioPrinter;
155  cout << "======DT========" << endl;
156  ioPrinter.run(inphiDigis, m_tm_phi_output, rpcDigis, c);
157  cout << "======RPC========" << endl;
158  ioPrinter.run(&rpcHitsPhiDigis, m_tm_phi_output, &rpcDigisCleaned, c);
159  cout << "+++++++++++++++++++++++++++++++++++++++++++++++++" << endl;
160  }
161 }
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:29
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
L1TTwinMuxParams::get_UseOnlyRPC
int get_UseOnlyRPC() const
Definition: L1TTwinMuxParams.h:60
RPCRoll.h
AlignTrackSegments
Definition: AlignTrackSegments.h:31
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:31
L1TTwinMuxAlgorithm::run
void run(edm::Handle< L1MuDTChambPhContainer > phiDigis, edm::Handle< L1MuDTChambThContainer > thetaDigis, edm::Handle< RPCDigiCollection > rpcDigis, const edm::EventSetup &c)
Definition: L1TTwinMuxAlgorithm.cc:32
DTLowQMatching.h
verbose
static constexpr int verbose
Definition: HLTExoticaSubAnalysis.cc:25
DTRPCBxCorrection
Definition: DTRPCBxCorrection.h:32
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
edm::EventSetup
Definition: EventSetup.h:58
L1TTwinMuxParamsRcd
Definition: L1TTwinMuxParamsRcd.h:14
L1MuDTChambPhDigi::scNum
int scNum() const
Definition: L1MuDTChambPhDigi.cc:71
L1MuTMChambPhContainer.h
std
Definition: JetResolutionObject.h:76
edm::eventsetup::EventSetupRecordImplementation::get
PRODUCT const & get(ESGetToken< PRODUCT, T > const &iToken) const
Definition: EventSetupRecordImplementation.h:74
L1MuDTChambPhDigi::Ts2Tag
int Ts2Tag() const
Definition: L1MuDTChambPhDigi.cc:80
IOPrinter::run
void run(edm::Handle< L1MuDTChambPhContainer >, const L1MuDTChambPhContainer &, edm::Handle< RPCDigiCollection >, const edm::EventSetup &)
Definition: IOPrinter.cc:17
MuonGeometryRecord.h
c
auto & c
Definition: CAHitNtupletGeneratorKernelsImpl.h:46
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