CMS 3D CMS Logo

List of all members | Public Types | Public Member Functions | Static Public Member Functions | Private Member Functions | Private Attributes
RPDisplacementGenerator Class Reference

This class introduces displacements of RP. It actually shifts and rotates PSimHit positions. It doesn't test whether the displaced hit is still on the detector's surface. This check takes place later in the process. It is done via edge effectivity. More...

#include <RPDisplacementGenerator.h>

Public Types

using RotationMatrix = ROOT::Math::Rotation3D
 
using Translation = ROOT::Math::DisplacementVector3D< ROOT::Math::Cartesian3D< double > >
 

Public Member Functions

PSimHit displace (const PSimHit &)
 returns displaced PSimHit More...
 
 RPDisplacementGenerator (const edm::ParameterSet &, RPDetId, const edm::EventSetup &)
 

Static Public Member Functions

static uint32_t rawToDecId (uint32_t raw)
 

Private Member Functions

Local3DPoint displacePoint (const Local3DPoint &)
 displaces a point More...
 

Private Attributes

RPDetId detId_
 ID of the detector. More...
 
bool isOn_
 set to false to bypass displacements More...
 
RotationMatrix rotation_
 
Translation shift_
 displacement More...
 

Detailed Description

This class introduces displacements of RP. It actually shifts and rotates PSimHit positions. It doesn't test whether the displaced hit is still on the detector's surface. This check takes place later in the process. It is done via edge effectivity.

PSimHit points are given in the "local Det frame" (PSimHit.h)

Definition at line 26 of file RPDisplacementGenerator.h.

Member Typedef Documentation

◆ RotationMatrix

using RPDisplacementGenerator::RotationMatrix = ROOT::Math::Rotation3D

Definition at line 28 of file RPDisplacementGenerator.h.

◆ Translation

using RPDisplacementGenerator::Translation = ROOT::Math::DisplacementVector3D<ROOT::Math::Cartesian3D<double> >

Definition at line 29 of file RPDisplacementGenerator.h.

Constructor & Destructor Documentation

◆ RPDisplacementGenerator()

RPDisplacementGenerator::RPDisplacementGenerator ( const edm::ParameterSet ps,
RPDetId  _detId,
const edm::EventSetup iSetup 
)

Definition at line 19 of file RPDisplacementGenerator.cc.

References detId_, g, relativeConstraints::geom, edm::EventSetup::get(), edm::ParameterSet::getParameter(), CTPPSRPAlignmentCorrectionData::getRotationMatrix(), CTPPSRPAlignmentCorrectionData::getTranslation(), isOn_, dqm-mbProfile::log, LogDebug, rawToDecId(), rotation_, shift_, and edm::EventSetup::tryToGet().

22  : detId_(_detId) {
23  isOn_ = ps.getParameter<bool>("RPDisplacementOn");
24 
25  // read the alignment correction
27  if (auto rec = iSetup.tryToGet<VeryForwardMisalignedGeometryRecord>()) {
28  iSetup.get<VeryForwardMisalignedGeometryRecord>().get(alignments);
29  }
30 
31  unsigned int decId = rawToDecId(detId_);
32 
33  math::XYZVectorD S_m;
34  RotationMatrix R_m;
35 
36  if (alignments.isValid()) {
37  const CTPPSRPAlignmentCorrectionData &ac = alignments->getFullSensorCorrection(decId);
38  S_m = ac.getTranslation();
39  R_m = ac.getRotationMatrix();
40  } else
41  isOn_ = false;
42 
43  // transform shift and rotation to the local coordinate frame
45  iSetup.get<VeryForwardRealGeometryRecord>().get(geom);
46  const DetGeomDesc *g = geom->sensor(detId_);
47  const RotationMatrix &R_l = g->rotation();
48  rotation_ = R_l.Inverse() * R_m.Inverse() * R_l;
49  shift_ = R_l.Inverse() * R_m.Inverse() * S_m;
50 
51  LogDebug("RPDisplacementGenerator").log([&](auto &log) {
52  log << " det id = " << decId << ", isOn = " << isOn_ << "\n";
53  if (isOn_) {
54  log << " shift = " << shift_ << "\n";
55  log << " rotation = " << rotation_ << "\n";
56  }
57  });
58 }
ROOT::Math::Rotation3D getRotationMatrix() const
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
std::optional< T > tryToGet() const
Definition: EventSetup.h:103
RPDetId detId_
ID of the detector.
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
Event setup record containing the real (actual) geometry information.
static uint32_t rawToDecId(uint32_t raw)
Translation shift_
displacement
ROOT::Math::DisplacementVector3D< ROOT::Math::Cartesian3D< double > > XYZVectorD
spatial vector with cartesian internal representation
Definition: Vector3D.h:8
bool isOn_
set to false to bypass displacements
T get() const
Definition: EventSetup.h:82
ROOT::Math::Rotation3D RotationMatrix
Event setup record containing the misaligned geometry information. It is used for alignment studies o...
Alignment correction for an element of the CT-PPS detector. Within the geometry description, every sensor (more generally every element) is given its translation and rotation. These two quantities shall be understood in local-to-global coordinate transform. That is, if r_l is a point in local coordinate system and x_g in global, then it holds.
#define LogDebug(id)

Member Function Documentation

◆ displace()

PSimHit RPDisplacementGenerator::displace ( const PSimHit input)

returns displaced PSimHit

Definition at line 69 of file RPDisplacementGenerator.cc.

References displacePoint(), SiStripBadComponentsDQMServiceTemplate_cfg::ep, input, isOn_, and LogDebug.

69  {
70  if (!isOn_)
71  return input;
72 
73  const Local3DPoint &ep = input.entryPoint(), &xp = input.exitPoint();
74  const Local3DPoint &dep = displacePoint(ep), &dxp = displacePoint(xp);
75 
76  LogDebug("RPDisplacementGenerator::displace\n") << " entry point: " << ep << " -> " << dep << "\n"
77  << " exit point : " << xp << " -> " << dxp << "\n";
78 
79  return PSimHit(dep,
80  dxp,
81  input.pabs(),
82  input.tof(),
83  input.energyLoss(),
84  input.particleType(),
85  input.detUnitId(),
86  input.trackId(),
87  input.thetaAtEntry(),
88  input.phiAtEntry(),
89  input.processType());
90 }
static std::string const input
Definition: EdmProvDump.cc:47
bool isOn_
set to false to bypass displacements
Local3DPoint displacePoint(const Local3DPoint &)
displaces a point
#define LogDebug(id)

◆ displacePoint()

Local3DPoint RPDisplacementGenerator::displacePoint ( const Local3DPoint p)
private

displaces a point

input is in mm, shifts are in mm too

Definition at line 60 of file RPDisplacementGenerator.cc.

References AlCaHLTBitMon_ParallelJobs::p, rotation_, shift_, and findQualityFiles::v.

Referenced by displace().

60  {
62 
63  Translation v(p.x(), p.y(), p.z());
64  v = rotation_ * v - shift_;
65 
66  return Local3DPoint(v.x(), v.y(), v.z());
67 }
ROOT::Math::DisplacementVector3D< ROOT::Math::Cartesian3D< double > > Translation
Translation shift_
displacement
Point3DBase< float, LocalTag > Local3DPoint
Definition: LocalPoint.h:9

◆ rawToDecId()

uint32_t RPDisplacementGenerator::rawToDecId ( uint32_t  raw)
static

Definition at line 92 of file RPDisplacementGenerator.cc.

References CTPPSDetId::maskArm, TotemRPDetId::maskPlane, CTPPSDetId::maskRP, CTPPSDetId::maskStation, CTPPSDetId::startArmBit, TotemRPDetId::startPlaneBit, CTPPSDetId::startRPBit, and CTPPSDetId::startStationBit.

Referenced by DeadChannelsManager::isChannelDead(), and RPDisplacementGenerator().

92  {
93  return ((raw >> CTPPSDetId::startArmBit) & CTPPSDetId::maskArm) * 1000 +
95  ((raw >> CTPPSDetId::startRPBit) & CTPPSDetId::maskRP) * 10 +
97 }
static const uint32_t startRPBit
Definition: CTPPSDetId.h:47
static const uint32_t maskStation
Definition: CTPPSDetId.h:46
static const uint32_t maskRP
Definition: CTPPSDetId.h:47
static const uint32_t maskArm
Definition: CTPPSDetId.h:45
static const uint32_t startStationBit
Definition: CTPPSDetId.h:46
static const uint32_t startPlaneBit
Definition: TotemRPDetId.h:41
static const uint32_t startArmBit
Definition: CTPPSDetId.h:45
static const uint32_t maskPlane
Definition: TotemRPDetId.h:41

Member Data Documentation

◆ detId_

RPDetId RPDisplacementGenerator::detId_
private

ID of the detector.

Definition at line 40 of file RPDisplacementGenerator.h.

Referenced by RPDisplacementGenerator().

◆ isOn_

bool RPDisplacementGenerator::isOn_
private

set to false to bypass displacements

Definition at line 47 of file RPDisplacementGenerator.h.

Referenced by displace(), and RPDisplacementGenerator().

◆ rotation_

RotationMatrix RPDisplacementGenerator::rotation_
private

Definition at line 44 of file RPDisplacementGenerator.h.

Referenced by displacePoint(), and RPDisplacementGenerator().

◆ shift_

Translation RPDisplacementGenerator::shift_
private

displacement

Definition at line 43 of file RPDisplacementGenerator.h.

Referenced by displacePoint(), and RPDisplacementGenerator().