CMS 3D CMS Logo

Phase2StripCPE.cc
Go to the documentation of this file.
4 
6  magfield_(magf),
7  geom_(geom),
8  tanLorentzAnglePerTesla_(conf.getParameter<double>("TanLorentzAnglePerTesla"))
9 {
10  use_LorentzAngle_DB_ = conf.getParameter<bool>("LorentzAngle_DB");
12  throw cms::Exception("Lorentz Angle from DB not implemented yet");
14  // old code: LorentzAngleMap_.getLorentzAngle(det->geographicalId().rawId());
15  }
16  fillParam();
17 }
18 
19 
21  const Phase2TrackerCluster1D & cluster,
22  const GeomDetUnit & detunit) const
23 {
24  auto const & p = m_Params[detunit.index()-m_off];
25  auto const & topo = *p.topology;
26  float ix = cluster.center() - 0.5f * p.coveredStrips;
27  float iy = float(cluster.column())+0.5f; // halfway the column
28 
29  LocalPoint lp( topo.localX(ix), topo.localY(iy), 0 ); // x, y, z
30 
31  return std::make_pair( lp, p.localErr );
32 }
33 
34 
36  const Phase2TrackerGeomDetUnit & det) const
37 {
38  LocalVector lbfield = (det.surface()).toLocal(magfield_.inTesla(det.surface().position()));
39 
40  float dir_x = -tanLorentzAnglePerTesla_ * lbfield.y();
41  float dir_y = tanLorentzAnglePerTesla_ * lbfield.x();
42  float dir_z = 1.f; // E field always in z direction
43 
44  return LocalVector(dir_x,dir_y,dir_z);
45 }
46 
47 
49 
50  // in phase 2 they are all pixel topologies...
51  auto const & dus = geom_.detUnits();
52  m_off = dus.size();
53  // skip Barrel and Foward pixels...
54  for(unsigned int i=3;i<7;++i) {
55  LogDebug("LookingForFirstPhase2OT") << " Subdetector " << i
56  << " GeomDetEnumerator " << GeomDetEnumerators::tkDetEnum[i]
57  << " offset " << geom_.offsetDU(GeomDetEnumerators::tkDetEnum[i]) << std::endl;
58  if(geom_.offsetDU(GeomDetEnumerators::tkDetEnum[i]) != dus.size()) {
60  }
61  }
62  LogDebug("LookingForFirstPhase2OT") << " Chosen offset: " << m_off;
63 
64  m_Params.resize(dus.size()-m_off);
65  // very very minimal, for sure it will need to expand...
66  for (auto i=m_off; i!=dus.size();++i) {
67  auto & p= m_Params[i-m_off];
68 
69  const Phase2TrackerGeomDetUnit & det = (const Phase2TrackerGeomDetUnit &)(*dus[i]);
70  assert(det.index()==int(i));
71  p.topology = &det.specificTopology();
72 
73  auto pitch_x = p.topology->pitch().first;
74  auto pitch_y = p.topology->pitch().second;
75 
76  // see https://github.com/cms-sw/cmssw/blob/CMSSW_8_1_X/RecoLocalTracker/SiStripRecHitConverter/src/StripCPE.cc
77  auto thickness = det.specificSurface().bounds().thickness();
78  auto drift = driftDirection(det) * thickness;
79  auto lvec = drift + LocalVector(0,0,-thickness);
80  p.coveredStrips = lvec.x() / pitch_x; // simplifies wrt Phase0 tracker because only rectangular modules
81 
82  constexpr float o12 = 1./12;
83  p.localErr = LocalError( o12*pitch_x*pitch_x, 0, o12*pitch_y*pitch_y); // e2_xx, e2_xy, e2_yy
84  }
85 }
#define LogDebug(id)
T getParameter(std::string const &) const
std::vector< Param > m_Params
Local3DVector LocalVector
Definition: LocalVector.h:12
float tanLorentzAnglePerTesla_
LocalVector drift(const StripGeomDetUnit *, const MagneticField &, const SiStripLorentzAngle &)
Definition: ShallowTools.cc:38
T y() const
Definition: PV3DBase.h:63
const Bounds & bounds() const
Definition: Surface.h:120
LocalVector toLocal(const reco::Track::Vector &v, const Surface &s)
const Plane & surface() const
The nominal surface of the GeomDet.
Definition: GeomDet.h:42
#define constexpr
LocalVector driftDirection(const Phase2TrackerGeomDetUnit &det) const
unsigned int column() const
unsigned int offsetDU(SubDetector sid) const
Phase2StripCPE(edm::ParameterSet &conf, const MagneticField &, const TrackerGeometry &)
double f[11][100]
int index() const
Definition: GeomDet.h:99
SubDetector tkDetEnum[8]
unsigned int m_off
virtual GlobalVector inTesla(const GlobalPoint &gp) const =0
Field value ad specified global point, in Tesla.
virtual float thickness() const =0
LocalValues localParameters(const Phase2TrackerCluster1D &cluster, const GeomDetUnit &det) const
virtual const PixelTopology & specificTopology() const
Returns a reference to the pixel proxy topology.
bool use_LorentzAngle_DB_
const TrackerGeometry & geom_
T x() const
Definition: PV3DBase.h:62
const PositionType & position() const
const MagneticField & magfield_
const DetUnitContainer & detUnits() const override
Returm a vector of all GeomDetUnit.
const Plane & specificSurface() const
Same as surface(), kept for backward compatibility.
Definition: GeomDet.h:45