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
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 }
59 
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 }
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 }
VeryForwardRealGeometryRecord
Event setup record containing the real (actual) geometry information.
Definition: VeryForwardRealGeometryRecord.h:23
RPDisplacementGenerator::displacePoint
Local3DPoint displacePoint(const Local3DPoint &)
displaces a point
Definition: RPDisplacementGenerator.cc:60
input
static const std::string input
Definition: EdmProvDump.cc:48
MessageLogger.h
ESHandle.h
edm
HLT enums.
Definition: AlignableModifier.h:19
CTPPSRPAlignmentCorrectionData::getTranslation
math::XYZVectorD getTranslation() const
Definition: CTPPSRPAlignmentCorrectionData.h:145
findQualityFiles.v
v
Definition: findQualityFiles.py:179
CTPPSDetId::startArmBit
static const uint32_t startArmBit
Definition: CTPPSDetId.h:49
RPDisplacementGenerator::rawToDecId
static uint32_t rawToDecId(uint32_t raw)
Definition: RPDisplacementGenerator.cc:92
VeryForwardMisalignedGeometryRecord.h
RPDisplacementGenerator::RotationMatrix
ROOT::Math::Rotation3D RotationMatrix
Definition: RPDisplacementGenerator.h:28
RPDisplacementGenerator.h
TotemRPDetId::startPlaneBit
static const uint32_t startPlaneBit
Definition: TotemRPDetId.h:46
CTPPSGeometry.h
RPDisplacementGenerator::rotation_
RotationMatrix rotation_
Definition: RPDisplacementGenerator.h:44
edm::EventSetup::tryToGet
std::optional< T > tryToGet() const
Definition: EventSetup.h:108
PSimHit.h
edm::EventSetup::get
T get() const
Definition: EventSetup.h:87
CTPPSDetId::startStationBit
static const uint32_t startStationBit
Definition: CTPPSDetId.h:50
RPDisplacementGenerator::detId_
RPDetId detId_
ID of the detector.
Definition: RPDisplacementGenerator.h:40
edm::ESHandle
Definition: DTSurvey.h:22
relativeConstraints.geom
geom
Definition: relativeConstraints.py:72
Point3DBase< float, LocalTag >
RPDisplacementGenerator::isOn_
bool isOn_
set to false to bypass displacements
Definition: RPDisplacementGenerator.h:47
math::XYZVectorD
ROOT::Math::DisplacementVector3D< ROOT::Math::Cartesian3D< double > > XYZVectorD
spatial vector with cartesian internal representation
Definition: Vector3D.h:8
RPDisplacementGenerator::shift_
Translation shift_
displacement
Definition: RPDisplacementGenerator.h:43
LogDebug
#define LogDebug(id)
Definition: MessageLogger.h:233
edm::ParameterSet
Definition: ParameterSet.h:47
AlCaHLTBitMon_ParallelJobs.p
def p
Definition: AlCaHLTBitMon_ParallelJobs.py:153
DetGeomDesc
Definition: DetGeomDesc.h:50
edm::EventSetup
Definition: EventSetup.h:58
RPDisplacementGenerator::Translation
ROOT::Math::DisplacementVector3D< ROOT::Math::Cartesian3D< double > > Translation
Definition: RPDisplacementGenerator.h:29
get
#define get
CTPPSDetId::maskStation
static const uint32_t maskStation
Definition: CTPPSDetId.h:50
VeryForwardRealGeometryRecord.h
RPDetId
uint32_t RPDetId
Definition: RPSimTypes.h:11
VeryForwardMisalignedGeometryRecord
Event setup record containing the misaligned geometry information. It is used for alignment studies o...
Definition: VeryForwardMisalignedGeometryRecord.h:24
CTPPSDetId::startRPBit
static const uint32_t startRPBit
Definition: CTPPSDetId.h:51
std
Definition: JetResolutionObject.h:76
RPDisplacementGenerator::RPDisplacementGenerator
RPDisplacementGenerator(const edm::ParameterSet &, RPDetId, const edm::EventSetup &)
Definition: RPDisplacementGenerator.cc:19
RPDisplacementGenerator::displace
PSimHit displace(const PSimHit &)
returns displaced PSimHit
Definition: RPDisplacementGenerator.cc:69
TotemRPDetId.h
CTPPSRPAlignmentCorrectionData::getRotationMatrix
ROOT::Math::Rotation3D getRotationMatrix() const
Definition: CTPPSRPAlignmentCorrectionData.h:149
EventSetup.h
edm::ParameterSet::getParameter
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
dqm-mbProfile.log
log
Definition: dqm-mbProfile.py:17
CTPPSRPAlignmentCorrectionsData.h
CTPPSRPAlignmentCorrectionData
Alignment correction for an element of the CT-PPS detector. Within the geometry description,...
Definition: CTPPSRPAlignmentCorrectionData.h:58
ParameterSet.h
PSimHit
Definition: PSimHit.h:15
SiStripBadComponentsDQMServiceTemplate_cfg.ep
ep
Definition: SiStripBadComponentsDQMServiceTemplate_cfg.py:86
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
TotemRPDetId::maskPlane
static const uint32_t maskPlane
Definition: TotemRPDetId.h:46
Local3DPoint
Point3DBase< float, LocalTag > Local3DPoint
Definition: LocalPoint.h:9
CTPPSDetId::maskArm
static const uint32_t maskArm
Definition: CTPPSDetId.h:49
CTPPSDetId::maskRP
static const uint32_t maskRP
Definition: CTPPSDetId.h:51