11 hasGE21Geometry16Partitions_(
false),
12 lookupTableME11ILT_(nullptr),
13 lookupTableME21ILT_(nullptr) {
54 if (in_clusters ==
nullptr) {
55 edm::LogWarning(
"GEMClusterProcessor") <<
"Attempt to run without valid in_clusters pointer.";
70 std::vector<GEMInternalCluster>
output;
74 if (
cl.bx() ==
bx and
cl.isValid()) {
89 for (
auto det_range = in_clusters->begin(); det_range != in_clusters->end(); ++det_range) {
90 const GEMDetId&
id = (*det_range).first;
108 auto co_clusters_range = in_clusters->get(co_id);
111 if (co_clusters_range.first == co_clusters_range.second)
115 const auto& pads_range = (*det_range).second;
116 for (
auto p = pads_range.first;
p != pads_range.second; ++
p) {
127 for (
auto co_p = co_clusters_range.first; co_p != co_clusters_range.second; ++co_p) {
129 if (!co_p->isValid())
141 int cl2_min = co_p->pads().front();
142 int cl2_max = co_p->pads().back();
145 const bool condition1(cl1_min <= cl2_min and cl1_max >= cl2_min);
146 const bool condition2(cl1_min <= cl2_max and cl1_max >= cl2_max);
147 const bool match(condition1
or condition2);
163 const std::vector<GEMInternalCluster>& coincidences =
clusters_;
166 for (
auto det_range = in_clusters->begin(); det_range != in_clusters->end(); ++det_range) {
167 const GEMDetId&
id = (*det_range).first;
177 const auto& clusters_range = (*det_range).second;
178 for (
auto p = clusters_range.first;
p != clusters_range.second; ++
p) {
190 if (std::find_if(std::begin(coincidences), std::end(coincidences), [
p](
const GEMInternalCluster&
q) {
191 return q.has_cluster(*
p);
192 }) != std::end(coincidences))
196 if (
id.
layer() == 1) {
210 if (cluster.cl1().isValid()) {
212 const int layer1_first_pad = cluster.layer1_pad();
213 const int layer1_last_pad = layer1_first_pad + cluster.layer1_size() - 1;
216 int layer1_pad_to_first_es = -1;
217 int layer1_pad_to_last_es = -1;
219 int layer1_pad_to_first_es_me1a = -1;
220 int layer1_pad_to_last_es_me1a = -1;
251 int layer1_middle_es = (layer1_pad_to_first_es + layer1_pad_to_last_es) / 2.;
252 int layer1_middle_es_me1a = (layer1_pad_to_first_es_me1a + layer1_pad_to_last_es_me1a) / 2.;
254 cluster.set_layer1_first_es(layer1_pad_to_first_es);
255 cluster.set_layer1_last_es(layer1_pad_to_last_es);
256 cluster.set_layer1_middle_es(layer1_middle_es);
259 cluster.set_layer1_first_es_me1a(layer1_pad_to_first_es_me1a);
260 cluster.set_layer1_last_es_me1a(layer1_pad_to_last_es_me1a);
261 cluster.set_layer1_middle_es_me1a(layer1_middle_es_me1a);
266 const int roll = cluster.roll1() - 1;
268 int roll_l1_to_min_wg = -1;
269 int roll_l1_to_max_wg = -1;
294 cluster.set_layer1_min_wg(roll_l1_to_min_wg);
295 cluster.set_layer1_max_wg(roll_l1_to_max_wg);
298 if (cluster.cl2().isValid()) {
300 const int layer2_first_pad = cluster.layer2_pad();
301 const int layer2_last_pad = layer2_first_pad + cluster.layer2_size() - 1;
304 int layer2_pad_to_first_es = -1;
305 int layer2_pad_to_last_es = -1;
307 int layer2_pad_to_first_es_me1a = -1;
308 int layer2_pad_to_last_es_me1a = -1;
339 int layer2_middle_es =
int((layer2_pad_to_first_es + layer2_pad_to_last_es) / 2.0);
340 int layer2_middle_es_me1a =
int((layer2_pad_to_first_es_me1a + layer2_pad_to_last_es_me1a) / 2.0);
342 cluster.set_layer2_first_es(layer2_pad_to_first_es);
343 cluster.set_layer2_last_es(layer2_pad_to_last_es);
344 cluster.set_layer2_middle_es(layer2_middle_es);
347 cluster.set_layer2_first_es_me1a(layer2_pad_to_first_es_me1a);
348 cluster.set_layer2_last_es_me1a(layer2_pad_to_last_es_me1a);
349 cluster.set_layer2_middle_es_me1a(layer2_middle_es_me1a);
355 const int roll = cluster.roll2() - 1;
357 int roll_l2_to_min_wg = -1;
358 int roll_l2_to_max_wg = -1;
383 cluster.set_layer2_min_wg(roll_l2_to_min_wg);
384 cluster.set_layer2_max_wg(roll_l2_to_max_wg);
389 std::vector<GEMCoPadDigi>
output;
394 if (!cluster.isCoincidence())
398 output.emplace_back(cluster.roll2(), cluster.mid1(), cluster.mid2());
T getParameter(std::string const &) const
std::vector< GEMInternalCluster > clusters_
unsigned GEM_roll_L1_CSC_min_wg_ME21_even(unsigned roll) const
void run(const GEMPadDigiClusterCollection *)
bool isME0(GeomDetEnumerators::SubDetector m)
unsigned GEM_roll_CSC_min_wg_ME11_odd(unsigned roll) const
unsigned GEM_pad_CSC_es_ME11b_odd(unsigned pad) const
std::vector< GEMInternalCluster > getClusters(int bx, ClusterTypes option=AllClusters) const
void doCoordinateConversion()
unsigned GEM_pad_CSC_es_ME21_even(unsigned pad) const
unsigned GEM_pad_CSC_es_ME11a_even(unsigned pad) const
unsigned GEM_roll_L1_CSC_max_wg_ME21_odd(unsigned roll) const
constexpr std::array< uint8_t, layerIndexSize > layer
unsigned GEM_pad_CSC_es_ME11b_even(unsigned pad) const
unsigned int tmbL1aWindowSize_
unsigned GEM_pad_CSC_es_ME21_odd(unsigned pad) const
unsigned GEM_roll_CSC_min_wg_ME11_even(unsigned roll) const
unsigned GEM_roll_CSC_max_wg_ME11_even(unsigned roll) const
unsigned GEM_roll_L2_CSC_max_wg_ME21_odd(unsigned roll) const
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
Abs< T >::type abs(const T &t)
void addSingleClusters(const GEMPadDigiClusterCollection *)
std::vector< GEMCoPadDigi > readoutCoPads() const
unsigned GEM_roll_L1_CSC_max_wg_ME21_even(unsigned roll) const
bool hasGE21Geometry16Partitions_
unsigned GEM_roll_L2_CSC_max_wg_ME21_even(unsigned roll) const
unsigned GEM_roll_L2_CSC_min_wg_ME21_even(unsigned roll) const
unsigned GEM_pad_CSC_es_ME11a_odd(unsigned pad) const
unsigned int maxDeltaRoll_
const CSCL1TPLookupTableME21ILT * lookupTableME21ILT_
void setESLookupTables(const CSCL1TPLookupTableME11ILT *conf)
unsigned GEM_roll_CSC_max_wg_ME11_odd(unsigned roll) const
void addCoincidenceClusters(const GEMPadDigiClusterCollection *)
unsigned GEM_roll_L1_CSC_min_wg_ME21_odd(unsigned roll) const
std::pair< typename Association::data_type::first_type, double > match(Reference key, Association association, bool bestMatchByMaxValue)
Generic matching function.
unsigned GEM_roll_L2_CSC_min_wg_ME21_odd(unsigned roll) const
GEMClusterProcessor(int region, unsigned station, unsigned chamber, const edm::ParameterSet &conf)
Log< level::Warning, false > LogWarning
unsigned int delayGEMinOTMB_
const CSCL1TPLookupTableME11ILT * lookupTableME11ILT_
unsigned int maxDeltaPad_