20 auto chamber = cscDigis->begin();
21 auto chend = cscDigis->end();
23 auto digi = (*chamber).second.first;
24 auto dend = (*chamber).second.second;
25 for( ; digi != dend; ++digi ) {
27 out.emplace_back((*chamber).first,*digi);
46 auto chamber = rpcDigis->begin();
47 auto chend = rpcDigis->end();
49 auto digi = (*chamber).second.first;
50 auto dend = (*chamber).second.second;
51 for( ; digi != dend; ++digi ) {
52 if ((*chamber).first.region() != 0) {
53 if ((*chamber).first.station() <= 2 && (*chamber).first.ring() == 3)
continue;
54 if ((*chamber).first.station() >= 3 && (*chamber).first.ring() == 1)
continue;
56 muon_primitives.emplace_back((*chamber).first,*digi);
66 std::copy(clus_muon_primitives.begin(), clus_muon_primitives.end(), std::back_inserter(out));
83 auto chamber = gemDigis->begin();
84 auto chend = gemDigis->end();
86 auto digi = (*chamber).second.first;
87 auto dend = (*chamber).second.second;
88 for( ; digi != dend; ++digi ) {
89 muon_primitives.emplace_back((*chamber).first,*digi);
98 cluster_gem(copad_muon_primitives, clus_muon_primitives);
101 std::copy(clus_muon_primitives.begin(), clus_muon_primitives.end(), std::back_inserter(out));
112 bool operator()(
const value_type&
x)
const {
123 bool operator()(
const value_type& lhs,
const value_type& rhs)
const {
125 std::make_pair(std::make_pair(lhs.rawId(), lhs.getRPCData().bx), lhs.getRPCData().strip) <
126 std::make_pair(std::make_pair(rhs.rawId(), rhs.getRPCData().bx), rhs.getRPCData().strip)
134 bool operator()(
const value_type& lhs,
const value_type& rhs)
const {
136 std::make_pair(std::make_pair(lhs.rawId(), lhs.getRPCData().bx), lhs.getRPCData().strip) ==
137 std::make_pair(std::make_pair(rhs.rawId(), rhs.getRPCData().bx), rhs.getRPCData().strip)
148 bool operator()(
const value_type& lhs,
const value_type& rhs)
const {
150 (lhs.rawId() == rhs.rawId()) &&
151 (lhs.getRPCData().bx == rhs.getRPCData().bx) &&
152 (lhs.getRPCData().strip_hi+1 == rhs.getRPCData().strip_low)
160 void operator()(value_type& lhs, value_type& rhs) {
161 lhs.accessRPCData().strip_hi += 1;
169 std::copy_if(muon_primitives.begin(), muon_primitives.end(), std::back_inserter(clus_muon_primitives), rpc_digi_select);
172 std::stable_sort(clus_muon_primitives.begin(), clus_muon_primitives.end(), rpc_digi_less);
175 clus_muon_primitives.erase(
176 std::unique(clus_muon_primitives.begin(), clus_muon_primitives.end(), rpc_digi_equal),
177 clus_muon_primitives.end()
181 clus_muon_primitives.erase(
182 adjacent_cluster(clus_muon_primitives.begin(), clus_muon_primitives.end(), rpc_digi_adjacent, rpc_digi_cluster),
183 clus_muon_primitives.end()
195 const unsigned int maxDeltaBX = 1;
196 const unsigned int maxDeltaPadGE11 = 2;
197 const unsigned int maxDeltaPadGE21 = 2;
199 std::map<int, TriggerPrimitiveCollection> in_pads_layer1, in_pads_layer2;
201 TriggerPrimitiveCollection::const_iterator tp_it = muon_primitives.begin();
202 TriggerPrimitiveCollection::const_iterator tp_end = muon_primitives.end();
204 for (; tp_it != tp_end; ++tp_it) {
210 assert(tp_detId.
layer() == 1 || tp_detId.
layer() == 2);
211 if (tp_detId.
layer() == 1) {
212 in_pads_layer1[tp_detId.
rawId()].push_back(muon_primitive);
214 in_pads_layer2[tp_detId.
rawId()].push_back(muon_primitive);
218 bool modified_copad_logic =
false;
219 if (modified_copad_logic) {
220 if (tp_detId.
layer() == 1) {
225 in_pads_layer2[co_detId.
rawId()].push_back(co_muon_primitive);
231 in_pads_layer1[co_detId.
rawId()].push_back(co_muon_primitive);
237 std::map<int, TriggerPrimitiveCollection>::iterator map_tp_it = in_pads_layer1.begin();
238 std::map<int, TriggerPrimitiveCollection>::iterator map_tp_end = in_pads_layer1.end();
240 for (; map_tp_it != map_tp_end; ++map_tp_it) {
241 const GEMDetId&
id = map_tp_it->first;
243 assert(
id.layer() == 1);
249 auto found = in_pads_layer2.find(co_id);
250 if (
found == in_pads_layer2.end())
continue;
254 for (TriggerPrimitiveCollection::const_iterator
p = pads.begin();
p != pads.end(); ++
p) {
255 for (TriggerPrimitiveCollection::const_iterator co_p = co_pads.begin(); co_p != co_pads.end(); ++co_p) {
256 unsigned int deltaPad =
std::abs(
p->getGEMData().pad - co_p->getGEMData().pad);
257 unsigned int deltaBX =
std::abs(
p->getGEMData().bx - co_p->getGEMData().bx);
260 if ((
id.
station() == 1 && deltaPad > maxDeltaPadGE11) || (
id.station() == 2 && deltaPad > maxDeltaPadGE21))
264 if (deltaBX > maxDeltaBX)
268 copad_muon_primitives.push_back(*
p);
278 bool operator()(
const value_type&
x)
const {
289 bool operator()(
const value_type& lhs,
const value_type& rhs)
const {
291 std::make_pair(std::make_pair(lhs.rawId(), lhs.getGEMData().bx), lhs.getGEMData().pad) <
292 std::make_pair(std::make_pair(rhs.rawId(), rhs.getGEMData().bx), rhs.getGEMData().pad)
300 bool operator()(
const value_type& lhs,
const value_type& rhs)
const {
302 std::make_pair(std::make_pair(lhs.rawId(), lhs.getGEMData().bx), lhs.getGEMData().pad) ==
303 std::make_pair(std::make_pair(rhs.rawId(), rhs.getGEMData().bx), rhs.getGEMData().pad)
314 bool operator()(
const value_type& lhs,
const value_type& rhs)
const {
316 (lhs.rawId() == rhs.rawId()) &&
317 (lhs.getGEMData().bx == rhs.getGEMData().bx) &&
318 (lhs.getGEMData().pad_hi+1 == rhs.getGEMData().pad_low)
326 void operator()(value_type& lhs, value_type& rhs) {
327 lhs.accessGEMData().pad_hi += 1;
335 std::copy_if(muon_primitives.begin(), muon_primitives.end(), std::back_inserter(clus_muon_primitives), gem_digi_select);
338 std::stable_sort(clus_muon_primitives.begin(), clus_muon_primitives.end(), gem_digi_less);
341 clus_muon_primitives.erase(
342 std::unique(clus_muon_primitives.begin(), clus_muon_primitives.end(), gem_digi_equal),
343 clus_muon_primitives.end()
347 clus_muon_primitives.erase(
348 adjacent_cluster(clus_muon_primitives.begin(), clus_muon_primitives.end(), gem_digi_adjacent, gem_digi_cluster),
349 clus_muon_primitives.end()
void cluster_rpc(const TriggerPrimitiveCollection &muon_primitives, TriggerPrimitiveCollection &clus_muon_primitives) const
const subsystem_type subsystem() const
const GEMData getGEMData() const
bool getByToken(EDGetToken token, Handle< PROD > &result) const
void extractPrimitives(T tag, const edm::Event &iEvent, const edm::EDGetToken &token, TriggerPrimitiveCollection &out) const
uint32_t rawId() const
get the raw id
Container::value_type value_type
def unique(seq, keepstr=True)
int layer() const
Layer id: each station have two layers of chambers: layer 1 is the inner chamber and layer 2 is the o...
Abs< T >::type abs(const T &t)
void make_copad_gem(const TriggerPrimitiveCollection &muon_primitives, TriggerPrimitiveCollection &copad_muon_primitives) const
L1TMuon::TriggerPrimitiveCollection TriggerPrimitiveCollection
void cluster_gem(const TriggerPrimitiveCollection &muon_primitives, TriggerPrimitiveCollection &clus_muon_primitives) const