20 #define SQR(x) ((x) * (x))
26 m_pinPositions(cfg.getParameter<std::
string>(
"pinPositions")),
27 m_rootFile(cfg.getParameter<std::
string>(
"rootFile")),
28 m_verbose(cfg.getParameter<bool>(
"verbose")),
29 m_errorX(cfg.getParameter<double>(
"errorX")),
30 m_errorY(cfg.getParameter<double>(
"errorY")),
31 m_errorZ(cfg.getParameter<double>(
"errorZ")),
32 m_missingErrorTranslation(cfg.getParameter<double>(
"missingErrorTranslation")),
33 m_missingErrorAngle(cfg.getParameter<double>(
"missingErrorAngle")),
34 m_stationErrorX(cfg.getParameter<double>(
"stationErrorX")),
35 m_stationErrorY(cfg.getParameter<double>(
"stationErrorY")),
36 m_stationErrorZ(cfg.getParameter<double>(
"stationErrorZ")),
37 m_stationErrorPhiX(cfg.getParameter<double>(
"stationErrorPhiX")),
38 m_stationErrorPhiY(cfg.getParameter<double>(
"stationErrorPhiY")),
39 m_stationErrorPhiZ(cfg.getParameter<double>(
"stationErrorPhiZ")) {}
51 double cosPhX, sinPhX, cosPhZ, sinPhZ;
56 LocalPoint P((LP1.x() - LP2.x()) / (2. * a), (LP1.y() - LP2.y()) / (2. * a), (LP1.z() - LP2.z()) / (2. * a));
57 LocalPoint Pp((LP1.x() + LP2.x()) / (2.), (LP1.y() + LP2.y()) / (2.), (LP1.z() + LP2.z()) / (2.));
63 cosPhZ =
P.y() / (T * cosPhX);
64 sinPhZ = -
P.x() / (T * cosPhZ);
66 PhX = atan2(sinPhX, cosPhX);
68 PhZ = atan2(sinPhZ, cosPhZ);
70 dx = Pp.x() - sinPhZ * sinPhX *
b;
71 dy = Pp.y() + cosPhZ * sinPhX *
b;
72 dz = Pp.z() - cosPhX *
b;
92 const double trials = 10000.;
94 for (
int i = 0;
i < trials;
i++) {
112 double dx,
dy,
dz, PhX, PhZ,
T;
113 orient(LC1, LC2, a, b, T, dx, dy, dz, PhX, PhZ);
118 phix_phix += PhX * PhX;
119 phiz_phiz += PhZ * PhZ;
133 edm::LogInfo(
"SurveyInputCSCfromPins") <<
"***************ENTERING INITIALIZATION******************"
139 Double_t x1, y1, z1, x2, y2, z2,
a,
b, tot = 0.0, maxErr = 0.0,
h, s1,
dx,
dy,
dz, PhX, PhZ,
T;
141 int ID1, ID2, ID3, ID4, ID5,
i = 1,
ii = 0;
144 TTree *
tree1 =
new TTree(
"tree1",
"alignment pins");
147 tree1->Branch(
"displacement_x_pin1_cm", &x1,
"x1/D");
148 tree1->Branch(
"displacement_y_pin1_cm", &y1,
"y1/D");
149 tree1->Branch(
"displacement_z_pin1_cm", &z1,
"z1/D");
150 tree1->Branch(
"displacement_x_pin2_cm", &x2,
"x2/D");
151 tree1->Branch(
"displacement_y_pin2_cm", &y2,
"y2/D");
152 tree1->Branch(
"displacement_z_pin2_cm", &z2,
"z2/D");
153 tree1->Branch(
"error_vector_length_cm", &
h,
"h/D");
154 tree1->Branch(
"stretch_diff_cm", &s1,
"s1/D");
155 tree1->Branch(
"stretch_factor", &T,
"T/D");
156 tree1->Branch(
"chamber_displacement_x_cm", &dx,
"dx/D");
157 tree1->Branch(
"chamber_displacement_y_cm", &dy,
"dy/D");
158 tree1->Branch(
"chamber_displacement_z_cm", &dz,
"dz/D");
159 tree1->Branch(
"chamber_rotation_x_rad", &PhX,
"PhX/D");
160 tree1->Branch(
"chamber_rotation_z_rad", &PhZ,
"PhZ/D");
170 const auto &theEndcaps = theAlignableMuon->
CSCEndcaps();
172 for (
const auto &aliiter : theEndcaps) {
177 bool missing1 =
false;
178 bool missing2 =
false;
180 in >> ID1 >> ID2 >> ID3 >> ID4 >> ID5 >> x1 >> y1 >> z1 >> x2 >> y2 >> z2 >> a >>
b;
182 if (fabs(x1 - 1000.) < 1e5 && fabs(y1 - 1000.) < 1e5 && fabs(z1 - 1000.) < 1e5) {
189 if (fabs(x2 - 1000.) < 1e5 && fabs(y2 - 1000.) < 1e5 && fabs(z2 - 1000.) < 1e5) {
203 CSCDetId layerID(ID1, ID2, ID3, ID4, 1);
213 orient(LC1, LC2, a, b, T, dx, dy, dz, PhX, PhZ);
220 chamberAli->
move(gvector);
225 double dx_dx, dy_dy, dz_dz, phix_phix, phiz_phiz, dy_phix;
226 errors(a, b, missing1, missing2, dx_dx, dy_dy, dz_dz, phix_phix, phiz_phiz, dy_phix);
231 error(3, 3) = phix_phix;
233 error(5, 5) = phiz_phiz;
234 error(1, 3) = dy_phix;
235 error(3, 1) = dy_phix;
240 edm::LogInfo(
"SurveyInputCSCfromPins") <<
" survey information = " << chamberAli->
survey() <<
" \n";
257 <<
"i " << i++ <<
" " << ID1 <<
" " << ID2 <<
" " << ID3 <<
" " << ID4 <<
" " << ID5 <<
" error " << h
259 <<
" x1 " << x1 <<
" y1 " << y1 <<
" z1 " << z1 <<
" x2 " << x2 <<
" y2 " << y2 <<
" z2 " << z2 <<
" \n"
260 <<
" error " << h <<
" S1 " << s1 <<
" \n"
261 <<
" dx " << dx <<
" dy " << dy <<
" dz " << dz <<
" PhX " << PhX <<
" PhZ " << PhZ <<
" \n";
274 <<
" Total error " << tot <<
" Max Error " << maxErr <<
" N " <<
ii <<
" \n";
279 for (
const auto &aliiter : theEndcaps) {
283 delete theAlignableMuon;
284 delete theAlignableNavigator;
286 edm::LogInfo(
"SurveyInputCSCfromPins") <<
"*************END INITIALIZATION***************"
294 if (ali->
survey() ==
nullptr) {
298 if (ali_AlignableCSCChamber !=
nullptr) {
300 if (
abs(detid.station()) == 1 && (detid.ring() == 1 || detid.ring() == 4)) {
313 if (
abs(detid.station()) == 1 && detid.ring() == 2)
315 else if (
abs(detid.station()) == 1 && detid.ring() == 3)
317 else if (
abs(detid.station()) == 2 && detid.ring() == 1)
319 else if (
abs(detid.station()) == 2 && detid.ring() == 2)
321 else if (
abs(detid.station()) == 3 && detid.ring() == 1)
323 else if (
abs(detid.station()) == 3 && detid.ring() == 2)
325 else if (
abs(detid.station()) == 4 && detid.ring() == 1)
328 double dx_dx, dy_dy, dz_dz, phix_phix, phiz_phiz, dy_phix;
329 errors(a, b,
true,
true, dx_dx, dy_dy, dz_dz, phix_phix, phiz_phiz, dy_phix);
334 error(3, 3) = phix_phix;
336 error(5, 5) = phiz_phiz;
337 error(1, 3) = dy_phix;
338 error(3, 1) = dy_phix;
344 else if (ali_AlignableCSCStation !=
nullptr) {
Local3DVector LocalVector
Point3DBase< Scalar, LocalTag > LocalPoint
virtual void rotateAroundLocalZ(Scalar radians)
Rotation around local z-axis.
m_verbose(ps.getUntrackedParameter< bool >("verbose"))
#define DEFINE_FWK_MODULE(type)
const SurveyDet * survey() const
Return survey info.
virtual void move(const GlobalVector &displacement)=0
Movement with respect to the global reference frame.
bool getData(T &iHolder) const
align::Alignables CSCEndcaps()
align::RotationType toLocal(const align::RotationType &) const
Return in local frame a rotation given in global frame.
Abs< T >::type abs(const T &t)
virtual const Alignables & components() const =0
Return vector of all direct components.
const AlignableSurface & surface() const
Return the Surface (global position and orientation) of the object.
Log< level::Info, false > LogInfo
void setSurvey(const SurveyDet *)
Set survey info.
std::pair< OmniClusterRef, TrackingParticleRef > P
virtual void rotateAroundLocalX(Scalar radians)
Rotation around local x-axis.
align::GlobalPoints toGlobal(const align::LocalPoints &) const
Return in global coord given a set of local points.
math::Error< 6 >::type ErrorMatrix
The Signals That Services Can Subscribe To This is based on ActivityRegistry h
Helper function to determine trigger accepts.
Constructor of the full muon geometry.
AlignableDetOrUnitPtr alignableFromDetId(const DetId &detid)
Returns AlignableDetOrUnitPtr corresponding to given DetId.
Alignable * mother() const
Return pointer to container alignable (if any)
const DetId & geomDetId() const
Global3DVector GlobalVector
A muon CSC Chamber( an AlignableDet )