CMS 3D CMS Logo

RPDisplacementGenerator.cc
Go to the documentation of this file.
12 
13 #include <Math/RotationZYX.h>
14 #include <Math/Rotation3D.h>
15 
16 using namespace std;
17 using namespace edm;
18 
20  RPDetId _detId,
21  const edm::EventSetup &iSetup)
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 DDRotationMatrix &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 }
59 
62 
63  DDTranslation v(p.x(), p.y(), p.z());
64  v = rotation_ * v - shift_;
65 
66  return Local3DPoint(v.x(), v.y(), v.z());
67 }
68 
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 }
91 
92 uint32_t RPDisplacementGenerator::rawToDecId(uint32_t raw) {
93  return ((raw >> CTPPSDetId::startArmBit) & CTPPSDetId::maskArm) * 1000 +
95  ((raw >> CTPPSDetId::startRPBit) & CTPPSDetId::maskRP) * 10 +
97 }
#define LogDebug(id)
T getParameter(std::string const &) const
std::optional< T > tryToGet() const
Definition: EventSetup.h:94
float tof() const
deprecated name for timeOfFlight()
Definition: PSimHit.h:76
Geom::Theta< float > thetaAtEntry() const
fast and more accurate access to momentumAtEntry().theta()
Definition: PSimHit.h:61
ROOT::Math::Rotation3D DDRotationMatrix
A DDRotationMatrix is currently implemented with a ROOT Rotation3D.
T y() const
Definition: PV3DBase.h:60
RPDetId detId_
ID of the detector.
ROOT::Math::Rotation3D getRotationMatrix() const
static const uint32_t startRPBit
Definition: CTPPSDetId.h:47
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 const uint32_t maskStation
Definition: CTPPSDetId.h:46
static uint32_t rawToDecId(uint32_t raw)
static std::string const input
Definition: EdmProvDump.cc:48
ROOT::Math::DisplacementVector3D< ROOT::Math::Cartesian3D< double > > DDTranslation
Definition: DDTranslation.h:7
static const uint32_t maskRP
Definition: CTPPSDetId.h:47
Local3DPoint exitPoint() const
Exit point in the local Det frame.
Definition: PSimHit.h:46
ROOT::Math::DisplacementVector3D< ROOT::Math::Cartesian3D< double > > XYZVectorD
spatial vector with cartesian internal representation
Definition: Vector3D.h:8
static const uint32_t maskArm
Definition: CTPPSDetId.h:45
bool isOn_
set to false to bypass displacements
T z() const
Definition: PV3DBase.h:61
Geometrical description of a sensor.
Definition: DetGeomDesc.h:35
ROOT::Math::Rotation3D RotationMatrix
float pabs() const
fast and more accurate access to momentumAtEntry().mag()
Definition: PSimHit.h:67
uint32_t RPDetId
Definition: RPSimTypes.h:11
RotationMatrix rotation() const
geometry information
Definition: DetGeomDesc.h:64
const DetGeomDesc * sensor(unsigned int id) const
returns geometry of a detector performs necessary checks, returns NULL if fails
static const uint32_t startStationBit
Definition: CTPPSDetId.h:46
PSimHit displace(const PSimHit &)
returns displaced PSimHit
unsigned short processType() const
Definition: PSimHit.h:120
float energyLoss() const
The energy deposit in the PSimHit, in ???.
Definition: PSimHit.h:79
HLT enums.
int particleType() const
Definition: PSimHit.h:89
static const uint32_t startPlaneBit
Definition: TotemRPDetId.h:41
static const uint32_t startArmBit
Definition: CTPPSDetId.h:45
Event setup record containing the misaligned geometry information. It is used for alignment studies o...
T get() const
Definition: EventSetup.h:73
static const uint32_t maskPlane
Definition: TotemRPDetId.h:41
unsigned int trackId() const
Definition: PSimHit.h:106
Geom::Phi< float > phiAtEntry() const
fast and more accurate access to momentumAtEntry().phi()
Definition: PSimHit.h:64
DDTranslation shift_
displacement
T x() const
Definition: PV3DBase.h:59
RPDisplacementGenerator(const edm::ParameterSet &, RPDetId, const edm::EventSetup &)
Local3DPoint entryPoint() const
Entry point in the local Det frame.
Definition: PSimHit.h:43
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.
Local3DPoint displacePoint(const Local3DPoint &)
displaces a point
unsigned int detUnitId() const
Definition: PSimHit.h:97
Point3DBase< float, LocalTag > Local3DPoint
Definition: LocalPoint.h:9