CMS 3D CMS Logo

List of all members | Private Member Functions | Static Private Member Functions
CmsTrackerPhase1DiskBuilder< FilteredView > Class Template Reference

#include <CmsTrackerPhase1DiskBuilder.h>

Inheritance diagram for CmsTrackerPhase1DiskBuilder< FilteredView >:
CmsTrackerLevelBuilder< FilteredView > CmsTrackerAbstractConstruction< FilteredView >

Private Member Functions

void buildComponent (FilteredView &, GeometricDet *, const std::string &) override
 
void PhiPosNegSplit_innerOuter (std::vector< GeometricDet const * >::iterator begin, std::vector< GeometricDet const * >::iterator end)
 
void sortNS (FilteredView &, GeometricDet *) override
 

Static Private Member Functions

static bool PhiSort (const GeometricDet *Panel1, const GeometricDet *Panel2)
 

Additional Inherited Members

- Public Member Functions inherited from CmsTrackerLevelBuilder< FilteredView >
void build (FilteredView &, GeometricDet *, const std::string &) override
 
 ~CmsTrackerLevelBuilder () override
 
- Public Member Functions inherited from CmsTrackerAbstractConstruction< FilteredView >
virtual ~CmsTrackerAbstractConstruction ()=default
 
- Protected Attributes inherited from CmsTrackerLevelBuilder< FilteredView >
CmsTrackerStringToEnum theCmsTrackerStringToEnum
 

Detailed Description

template<class FilteredView>
class CmsTrackerPhase1DiskBuilder< FilteredView >

Class which contructs PixelForward/Disk.

Definition at line 12 of file CmsTrackerPhase1DiskBuilder.h.

Member Function Documentation

◆ buildComponent()

template<class FilteredView >
void CmsTrackerPhase1DiskBuilder< FilteredView >::buildComponent ( FilteredView &  fv,
GeometricDet g,
const std::string &  s 
)
overrideprivatevirtual

Implements CmsTrackerLevelBuilder< FilteredView >.

Definition at line 68 of file CmsTrackerPhase1DiskBuilder.cc.

70  {
71  CmsTrackerPanelBuilder<FilteredView> theCmsTrackerPanelBuilder;
72  GeometricDet* subdet = new GeometricDet(&fv,
75 
79  theCmsTrackerPanelBuilder.build(fv, subdet, s);
80  break;
81  default:
82  edm::LogError("CmsTrackerPhase1DiskBuilder")
83  << " ERROR - I was expecting a Panel, I got a " << ExtractStringFromDDD<FilteredView>::getString(s, &fv);
84  }
85  g->addComponent(subdet);
86 }

References CmsTrackerLevelBuilder< FilteredView >::build(), g, ExtractStringFromDDD< FilteredView >::getString(), GeometricDet::panel, and alignCSCRings::s.

◆ PhiPosNegSplit_innerOuter()

template<class FilteredView >
void CmsTrackerPhase1DiskBuilder< FilteredView >::PhiPosNegSplit_innerOuter ( std::vector< GeometricDet const * >::iterator  begin,
std::vector< GeometricDet const * >::iterator  end 
)
private

Definition at line 20 of file CmsTrackerPhase1DiskBuilder.cc.

21  {
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  std::rotate(theCompsInnerOuter.begin() + num_inner, theCompsInnerOuter.end() - 1, theCompsInnerOuter.end());
63  theCompsInnerOuter.begin(), theCompsInnerOuter.begin() + num_inner - 1, theCompsInnerOuter.begin() + num_inner);
64  std::copy(theCompsInnerOuter.begin(), theCompsInnerOuter.end(), begin);
65 }

References begin, filterCSVwithJSON::copy, end, SiStripPI::max, min(), and svgfig::rotate().

◆ PhiSort()

template<class FilteredView >
bool CmsTrackerPhase1DiskBuilder< FilteredView >::PhiSort ( const GeometricDet Panel1,
const GeometricDet Panel2 
)
staticprivate

Definition at line 15 of file CmsTrackerPhase1DiskBuilder.cc.

15  {
16  return (Panel1->phi() < Panel2->phi());
17 }

References GeometricDet::phi().

◆ sortNS()

template<class FilteredView >
void CmsTrackerPhase1DiskBuilder< FilteredView >::sortNS ( FilteredView &  fv,
GeometricDet det 
)
overrideprivatevirtual

Reimplemented from CmsTrackerLevelBuilder< FilteredView >.

Definition at line 89 of file CmsTrackerPhase1DiskBuilder.cc.

89  {
91 
92  switch (det->components().front()->type()) {
94  PhiPosNegSplit_innerOuter(comp.begin(), comp.end());
95  break;
96  default:
97  edm::LogError("CmsTrackerPhase1DiskBuilder")
98  << "ERROR - wrong SubDet to sort..... " << det->components().front()->type();
99  }
100 
101  GeometricDet::GeometricDetContainer zminpanels; // Here z refers abs(z);
102  GeometricDet::GeometricDetContainer zmaxpanels; // So, zmin panel is always closer to ip.
103 
104  uint32_t totalblade = comp.size() / 2;
105  // std::cout << "pixel_disk " << pixel_disk << endl;
106 
107  zminpanels.reserve(totalblade);
108  zmaxpanels.reserve(totalblade);
109  for (uint32_t j = 0; j < totalblade; j++) {
110  if (std::abs(comp[2 * j]->translation().z()) > std::abs(comp[2 * j + 1]->translation().z())) {
111  zmaxpanels.emplace_back(det->component(2 * j));
112  zminpanels.emplace_back(det->component(2 * j + 1));
113 
114  } else if (std::abs(comp[2 * j]->translation().z()) < std::abs(comp[2 * j + 1]->translation().z())) {
115  zmaxpanels.emplace_back(det->component(2 * j + 1));
116  zminpanels.emplace_back(det->component(2 * j));
117  } else {
118  edm::LogWarning("CmsTrackerPhase1DiskBuilder") << "WARNING - The Z of both panels are equal! ";
119  }
120  }
121 
122  for (uint32_t fn = 0; fn < zminpanels.size(); fn++) {
123  uint32_t blade = fn + 1;
124  uint32_t panel = 2; // though being zmin, it is actually the one facing away the ip
125  uint32_t temp = (blade << 2) | panel;
126  zminpanels[fn]->setGeographicalID(temp);
127  }
128 
129  for (uint32_t bn = 0; bn < zmaxpanels.size(); bn++) {
130  uint32_t blade = bn + 1;
131  uint32_t panel = 1; // though being zmax, it is the one facing the ip
132  uint32_t temp = (blade << 2) | panel;
133  zmaxpanels[bn]->setGeographicalID(temp);
134  }
135 
136  det->clearComponents();
137  det->addComponents(zminpanels);
138  det->addComponents(zmaxpanels);
139 }

References funct::abs(), GeometricDet::addComponents(), GeometricDet::clearComponents(), AlCaHLTBitMon_QueryRunRegistry::comp, GeometricDet::component(), GeometricDet::components(), personalPlayback::fn, dqmiolumiharvest::j, GeometricDet::panel, and groupFilesInBlocks::temp.

GeometricDet::phi
double phi() const
Definition: GeometricDet.h:121
ExtractStringFromDDD::getString
static std::string getString(const std::string &, FilteredView *)
CmsTrackerLevelBuilder
Definition: CmsTrackerLevelBuilder.h:31
filterCSVwithJSON.copy
copy
Definition: filterCSVwithJSON.py:36
min
T min(T a, T b)
Definition: MathUtil.h:58
GeometricDet::components
ConstGeometricDetContainer & components()
Definition: GeometricDet.h:139
groupFilesInBlocks.temp
list temp
Definition: groupFilesInBlocks.py:142
AlCaHLTBitMon_QueryRunRegistry.comp
comp
Definition: AlCaHLTBitMon_QueryRunRegistry.py:249
ExtractStringFromDDD
Definition: ExtractStringFromDDD.h:12
end
#define end
Definition: vmac.h:39
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
DDAxes::z
GeometricDet
Definition: GeometricDet.h:30
edm::LogWarning
Definition: MessageLogger.h:141
edm::LogError
Definition: MessageLogger.h:183
CmsTrackerLevelBuilder::build
void build(FilteredView &, GeometricDet *, const std::string &) override
Definition: CmsTrackerLevelBuilder.cc:141
SiStripPI::max
Definition: SiStripPayloadInspectorHelper.h:169
GeometricDet::addComponents
void addComponents(GeometricDetContainer const &cont)
Definition: GeometricDet.cc:200
CmsTrackerPhase1DiskBuilder::PhiPosNegSplit_innerOuter
void PhiPosNegSplit_innerOuter(std::vector< GeometricDet const * >::iterator begin, std::vector< GeometricDet const * >::iterator end)
Definition: CmsTrackerPhase1DiskBuilder.cc:20
GeometricDet::panel
Definition: GeometricDet.h:71
type
type
Definition: HCALResponse.h:21
GeometricDet::component
GeometricDet * component(size_t index)
Definition: GeometricDet.h:114
GeometricDet::ConstGeometricDetContainer
std::vector< GeometricDet const * > ConstGeometricDetContainer
Definition: GeometricDet.h:33
personalPlayback.fn
fn
Definition: personalPlayback.py:515
GeometricDet::GeometricDetContainer
std::vector< GeometricDet * > GeometricDetContainer
Definition: GeometricDet.h:34
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
begin
#define begin
Definition: vmac.h:32
GeometricDet::clearComponents
void clearComponents()
Definition: GeometricDet.h:104
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