File indexing completed on 2024-04-06 12:31:43
0001 #ifndef FrameChanger_H
0002 #define FrameChanger_H
0003
0004 #include "FWCore/Utilities/interface/Visibility.h"
0005 #include "DataFormats/GeometrySurface/interface/Plane.h"
0006 #include "DataFormats/GeometrySurface/interface/ReferenceCounted.h"
0007
0008 class dso_internal FrameChanger {
0009 public:
0010
0011
0012
0013 template <typename T>
0014 static Plane transformPlane(const Plane& plane, const GloballyPositioned<T>& frame) {
0015 typedef GloballyPositioned<T> Frame;
0016 typename Plane::RotationType rot = plane.rotation() * frame.rotation().transposed();
0017 typename Frame::LocalPoint lpos = frame.toLocal(plane.position());
0018 typename Plane::PositionType pos(lpos.basicVector());
0019 return Plane(pos, rot);
0020 }
0021
0022
0023
0024
0025 template <typename T, typename U>
0026 static GloballyPositioned<T> toFrame(const GloballyPositioned<T>& plane, const GloballyPositioned<U>& frame) {
0027 typedef GloballyPositioned<T> Plane;
0028 typedef GloballyPositioned<U> Frame;
0029
0030 typename Plane::RotationType rot = plane.rotation() * frame.rotation().transposed();
0031 typename Frame::LocalPoint lpos = frame.toLocal(plane.position());
0032 typename Plane::PositionType pos(lpos.basicVector());
0033 return Plane(pos, rot);
0034 }
0035 };
0036
0037 #endif