14 template <
class FilteredView>
16 return (Panel1->
phi() < Panel2->
phi());
19 template <
class FilteredView>
21 std::vector<GeometricDet const*>::iterator begin, std::vector<GeometricDet const*>::iterator
end) {
26 std::vector<const GeometricDet*> theCompsPosNeg;
28 double theRmin = (**begin).rho();
29 double theRmax = theRmin;
30 for (vector<const GeometricDet*>::const_iterator it = begin; it !=
end; it++) {
31 if ((**it).phi() >= 0)
32 theCompsPosNeg.emplace_back(*it);
33 theRmin =
std::min(theRmin, (**it).rho());
34 theRmax =
std::max(theRmax, (**it).rho());
36 for (vector<const GeometricDet*>::const_iterator it = begin; it !=
end; it++) {
38 theCompsPosNeg.emplace_back(*it);
44 double radius_split = 100.;
45 std::vector<const GeometricDet*> theCompsInnerOuter;
46 unsigned int num_inner = 0;
47 for (vector<const GeometricDet*>::const_iterator it = theCompsPosNeg.begin(); it != theCompsPosNeg.end(); it++) {
48 if ((**it).rho() <= radius_split) {
49 theCompsInnerOuter.emplace_back(*it);
54 for (vector<const GeometricDet*>::const_iterator it = theCompsPosNeg.begin(); it != theCompsPosNeg.end(); it++) {
55 if ((**it).rho() > radius_split)
56 theCompsInnerOuter.emplace_back(*it);
61 if (num_inner < theCompsInnerOuter.size()) {
62 std::rotate(theCompsInnerOuter.begin() + num_inner, theCompsInnerOuter.end() - 1, theCompsInnerOuter.end());
66 theCompsInnerOuter.begin(), theCompsInnerOuter.begin() + num_inner - 1, theCompsInnerOuter.begin() + num_inner);
71 "CmsTrackerPhase1DiskBuilder. num_inner == 0. The split of modules by radius is probably not doing what you "
72 "expect: inner-radius group is empty.");
74 if (num_inner == theCompsInnerOuter.size()) {
76 "CmsTrackerPhase1DiskBuilder. num_inner == theCompsInnerOuter.size(). The split of modules by radius is "
77 "probably not doing what you expect: outer-radius group is empty.");
80 std::copy(theCompsInnerOuter.begin(), theCompsInnerOuter.end(), begin);
83 template <
class FilteredView>
95 theCmsTrackerPanelBuilder.
build(fv, subdet,
s);
101 g->addComponent(subdet);
104 template <
class FilteredView>
110 PhiPosNegSplit_innerOuter(
comp.begin(),
comp.end());
114 <<
"ERROR - wrong SubDet to sort..... " << det->
components().front()->type();
120 uint32_t totalblade =
comp.size() / 2;
123 zminpanels.reserve(totalblade);
124 zmaxpanels.reserve(totalblade);
125 for (uint32_t
j = 0;
j < totalblade;
j++) {
127 zmaxpanels.emplace_back(det->
component(2 *
j));
128 zminpanels.emplace_back(det->
component(2 *
j + 1));
131 zmaxpanels.emplace_back(det->
component(2 *
j + 1));
132 zminpanels.emplace_back(det->
component(2 *
j));
134 edm::LogWarning(
"CmsTrackerPhase1DiskBuilder") <<
"WARNING - The Z of both panels are equal! ";
138 for (uint32_t
fn = 0;
fn < zminpanels.size();
fn++) {
139 uint32_t blade =
fn + 1;
141 uint32_t
temp = (blade << 2) | panel;
142 zminpanels[
fn]->setGeographicalID(
temp);
145 for (uint32_t bn = 0; bn < zmaxpanels.size(); bn++) {
146 uint32_t blade = bn + 1;
148 uint32_t
temp = (blade << 2) | panel;
149 zmaxpanels[bn]->setGeographicalID(
temp);