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 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 }
VeryForwardRealGeometryRecord
Event setup record containing the real (actual) geometry information.
Definition: VeryForwardRealGeometryRecord.h:22
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
AlCaHLTBitMon_ParallelJobs.p
p
Definition: AlCaHLTBitMon_ParallelJobs.py:153
RPDisplacementGenerator::rotation_
DDRotationMatrix rotation_
Definition: RPDisplacementGenerator.h:45
CTPPSRPAlignmentCorrectionData::getTranslation
math::XYZVectorD getTranslation() const
Definition: CTPPSRPAlignmentCorrectionData.h:136
findQualityFiles.v
v
Definition: findQualityFiles.py:179
CTPPSDetId::startArmBit
static const uint32_t startArmBit
Definition: CTPPSDetId.h:49
DDRotationMatrix
ROOT::Math::Rotation3D DDRotationMatrix
A DDRotationMatrix is currently implemented with a ROOT Rotation3D.
Definition: DDRotationMatrix.h:8
RPDisplacementGenerator::rawToDecId
static uint32_t rawToDecId(uint32_t raw)
Definition: RPDisplacementGenerator.cc:92
VeryForwardMisalignedGeometryRecord.h
RPDisplacementGenerator.h
TotemRPDetId::startPlaneBit
static const uint32_t startPlaneBit
Definition: TotemRPDetId.h:46
CTPPSGeometry.h
edm::EventSetup::tryToGet
std::optional< T > tryToGet() const
Definition: EventSetup.h:94
PSimHit.h
edm::EventSetup::get
T get() const
Definition: EventSetup.h:73
CTPPSDetId::startStationBit
static const uint32_t startStationBit
Definition: CTPPSDetId.h:50
RPDisplacementGenerator::detId_
RPDetId detId_
ID of the detector.
Definition: RPDisplacementGenerator.h:41
DDTranslation
ROOT::Math::DisplacementVector3D< ROOT::Math::Cartesian3D< double > > DDTranslation
Definition: DDTranslation.h:7
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:48
math::XYZVectorD
ROOT::Math::DisplacementVector3D< ROOT::Math::Cartesian3D< double > > XYZVectorD
spatial vector with cartesian internal representation
Definition: Vector3D.h:8
LogDebug
#define LogDebug(id)
Definition: MessageLogger.h:670
edm::ParameterSet
Definition: ParameterSet.h:36
DetGeomDesc
Geometrical description of a sensor.
Definition: DetGeomDesc.h:34
edm::EventSetup
Definition: EventSetup.h:57
get
#define get
CTPPSDetId::maskStation
static const uint32_t maskStation
Definition: CTPPSDetId.h:50
VeryForwardRealGeometryRecord.h
RPDisplacementGenerator::RotationMatrix
ROOT::Math::Rotation3D RotationMatrix
Definition: RPDisplacementGenerator.h:30
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:23
edm::ParameterSet::getParameter
T getParameter(std::string const &) const
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:140
EventSetup.h
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
RPDisplacementGenerator::shift_
DDTranslation shift_
displacement
Definition: RPDisplacementGenerator.h:44
CTPPSDetId::maskRP
static const uint32_t maskRP
Definition: CTPPSDetId.h:51