CMS 3D CMS Logo

CmsTrackerPhase1DiskBuilder.cc
Go to the documentation of this file.
9 #include <vector>
10 #include <algorithm>
11 
12 using namespace std;
13 
14 template <class FilteredView>
16  return (Panel1->phi() < Panel2->phi());
17 }
18 
19 template <class FilteredView>
21  std::vector<GeometricDet const*>::iterator begin, std::vector<GeometricDet const*>::iterator end) {
22  // first sort in phi, lowest first (-pi to +pi)
23  std::sort(begin, end, PhiSort);
24 
25  // now put positive phi (in order) ahead of negative phi as in std geometry
26  std::vector<const GeometricDet*> theCompsPosNeg;
27  // also find the average radius (used to split inner and outer disk panels)
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());
35  }
36  for (vector<const GeometricDet*>::const_iterator it = begin; it != end; it++) {
37  if ((**it).phi() < 0)
38  theCompsPosNeg.emplace_back(*it);
39  }
40 
41  // now put inner disk panels first
42  // double radius_split = 0.5 * (theRmin + theRmax);
43  // force the split radius to be 100 mm to be able to deal with disks with only outer ring
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);
50  num_inner++;
51  }
52  }
53 
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);
57  }
58  // std::cout << "num of inner = " << num_inner << " with radius less than " << radius_split << std::endl;
59  // now shift outer by one
60 
61  if (num_inner < theCompsInnerOuter.size()) {
62  std::rotate(theCompsInnerOuter.begin() + num_inner, theCompsInnerOuter.end() - 1, theCompsInnerOuter.end());
63  }
64  if (num_inner > 0) {
66  theCompsInnerOuter.begin(), theCompsInnerOuter.begin() + num_inner - 1, theCompsInnerOuter.begin() + num_inner);
67  }
68 
69  if (num_inner == 0) {
71  "CmsTrackerPhase1DiskBuilder. num_inner == 0. The split of modules by radius is probably not doing what you "
72  "expect: inner-radius group is empty.");
73  }
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.");
78  }
79 
80  std::copy(theCompsInnerOuter.begin(), theCompsInnerOuter.end(), begin);
81 }
82 
83 template <class FilteredView>
85  GeometricDet* g,
86  const std::string& s) {
87  CmsTrackerPanelBuilder<FilteredView> theCmsTrackerPanelBuilder;
88  GeometricDet* subdet = new GeometricDet(&fv,
91 
95  theCmsTrackerPanelBuilder.build(fv, subdet, s);
96  break;
97  default:
98  edm::LogError("CmsTrackerPhase1DiskBuilder")
99  << " ERROR - I was expecting a Panel, I got a " << ExtractStringFromDDD<FilteredView>::getString(s, &fv);
100  }
101  g->addComponent(subdet);
102 }
103 
104 template <class FilteredView>
107 
108  switch (det->components().front()->type()) {
109  case GeometricDet::panel:
110  PhiPosNegSplit_innerOuter(comp.begin(), comp.end());
111  break;
112  default:
113  edm::LogError("CmsTrackerPhase1DiskBuilder")
114  << "ERROR - wrong SubDet to sort..... " << det->components().front()->type();
115  }
116 
117  GeometricDet::GeometricDetContainer zminpanels; // Here z refers abs(z);
118  GeometricDet::GeometricDetContainer zmaxpanels; // So, zmin panel is always closer to ip.
119 
120  uint32_t totalblade = comp.size() / 2;
121  // std::cout << "pixel_disk " << pixel_disk << endl;
122 
123  zminpanels.reserve(totalblade);
124  zmaxpanels.reserve(totalblade);
125  for (uint32_t j = 0; j < totalblade; j++) {
126  if (std::abs(comp[2 * j]->translation().z()) > std::abs(comp[2 * j + 1]->translation().z())) {
127  zmaxpanels.emplace_back(det->component(2 * j));
128  zminpanels.emplace_back(det->component(2 * j + 1));
129 
130  } else if (std::abs(comp[2 * j]->translation().z()) < std::abs(comp[2 * j + 1]->translation().z())) {
131  zmaxpanels.emplace_back(det->component(2 * j + 1));
132  zminpanels.emplace_back(det->component(2 * j));
133  } else {
134  edm::LogWarning("CmsTrackerPhase1DiskBuilder") << "WARNING - The Z of both panels are equal! ";
135  }
136  }
137 
138  for (uint32_t fn = 0; fn < zminpanels.size(); fn++) {
139  uint32_t blade = fn + 1;
140  uint32_t panel = 2; // though being zmin, it is actually the one facing away the ip
141  uint32_t temp = (blade << 2) | panel;
142  zminpanels[fn]->setGeographicalID(temp);
143  }
144 
145  for (uint32_t bn = 0; bn < zmaxpanels.size(); bn++) {
146  uint32_t blade = bn + 1;
147  uint32_t panel = 1; // though being zmax, it is the one facing the ip
148  uint32_t temp = (blade << 2) | panel;
149  zmaxpanels[bn]->setGeographicalID(temp);
150  }
151 
152  det->clearComponents();
153  det->addComponents(zminpanels);
154  det->addComponents(zmaxpanels);
155 }
156 
GeometricDet::phi
double phi() const
Definition: GeometricDet.h:102
ExtractStringFromDDD::getString
static std::string getString(const std::string &, FilteredView *)
CmsTrackerLevelBuilder
Definition: CmsTrackerLevelBuilder.h:31
MessageLogger.h
filterCSVwithJSON.copy
copy
Definition: filterCSVwithJSON.py:36
CmsTrackerPhase1DiskBuilder::sortNS
void sortNS(FilteredView &, GeometricDet *) override
Definition: CmsTrackerPhase1DiskBuilder.cc:105
min
T min(T a, T b)
Definition: MathUtil.h:58
GeometricDet::components
ConstGeometricDetContainer & components()
Definition: GeometricDet.h:149
groupFilesInBlocks.temp
list temp
Definition: groupFilesInBlocks.py:142
edm::LogWarning
Log< level::Warning, false > LogWarning
Definition: MessageLogger.h:122
AlCaHLTBitMon_QueryRunRegistry.comp
comp
Definition: AlCaHLTBitMon_QueryRunRegistry.py:249
ExtractStringFromDDD
Definition: ExtractStringFromDDD.h:12
svgfig.rotate
def rotate(angle, cx=0, cy=0)
Definition: svgfig.py:705
CmsTrackerPanelBuilder
Definition: CmsTrackerPanelBuilder.h:12
alignCSCRings.s
s
Definition: alignCSCRings.py:92
DDFilteredView.h
mps_fire.end
end
Definition: mps_fire.py:242
GeometricDet
Definition: GeometricDet.h:31
DDFilteredView.h
AlCaHLTBitMon_QueryRunRegistry.string
string
Definition: AlCaHLTBitMon_QueryRunRegistry.py:256
CmsTrackerPhase1DiskBuilder::buildComponent
void buildComponent(FilteredView &, GeometricDet *, const std::string &) override
Definition: CmsTrackerPhase1DiskBuilder.cc:84
CmsTrackerPhase1DiskBuilder.h
CmsTrackerPhase1DiskBuilder
Definition: CmsTrackerPhase1DiskBuilder.h:12
CmsTrackerLevelBuilder::build
void build(FilteredView &, GeometricDet *, const std::string &) override
SiStripPI::max
Definition: SiStripPayloadInspectorHelper.h:169
jetUpdater_cfi.sort
sort
Definition: jetUpdater_cfi.py:29
gainCalibHelper::gainCalibPI::type
type
Definition: SiPixelGainCalibHelper.h:40
GeometricDet::addComponents
void addComponents(GeometricDetContainer const &cont)
Definition: GeometricDet.cc:256
CmsTrackerPhase1DiskBuilder::PhiPosNegSplit_innerOuter
void PhiPosNegSplit_innerOuter(std::vector< GeometricDet const * >::iterator begin, std::vector< GeometricDet const * >::iterator end)
Definition: CmsTrackerPhase1DiskBuilder.cc:20
edm::LogError
Log< level::Error, false > LogError
Definition: MessageLogger.h:123
GeometricDet::panel
Definition: GeometricDet.h:67
GeometricDet.h
ExtractStringFromDDD.h
std
Definition: JetResolutionObject.h:76
GeometricDet::component
GeometricDet * component(size_t index)
Definition: GeometricDet.h:145
GeometricDet::ConstGeometricDetContainer
std::vector< GeometricDet const * > ConstGeometricDetContainer
Definition: GeometricDet.h:34
DetId.h
personalPlayback.fn
fn
Definition: personalPlayback.py:515
GeometricDet::GeometricDetContainer
std::vector< GeometricDet * > GeometricDetContainer
Definition: GeometricDet.h:35
CmsTrackerPanelBuilder.h
funct::abs
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
CmsTrackerPhase1DiskBuilder::PhiSort
static bool PhiSort(const GeometricDet *Panel1, const GeometricDet *Panel2)
Definition: CmsTrackerPhase1DiskBuilder.cc:15
dqmiolumiharvest.j
j
Definition: dqmiolumiharvest.py:66
GeometricDet::clearComponents
void clearComponents()
Definition: GeometricDet.h:160
g
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 g
Definition: Activities.doc:4