300 likes | 422 Views
Gamma-ray Large Area Space Telescope. Intra-Tower Tracker Alignment Michael Kuss INFN Pisa Instrument Analysis Workshop 4 SLAC 15 July 2005. the ideal tower. a horizontal shift. a vertical shift. a rotation. the real tower. Towers …. Class Residual.
E N D
Gamma-ray Large Area Space Telescope Intra-Tower Tracker Alignment Michael Kuss INFN Pisa Instrument Analysis Workshop 4 SLAC 15 July 2005
the ideal tower a horizontal shift a vertical shift a rotation the real tower Towers …
Class Residual Class Residual is used for alignment: Residual(const TString="MyRootFile.root", const TString="residual.root", const TString geo=""); ~Residual() { delete myEvent; delete myTracker; } void Go(int lastEntry=-1); // general for DrawXxx: residual is h_abs - h_abs_ext // *********** // draws the residual, top without fitting, bottom with gauss fit void DrawResidual(TString plane, TCut=""); // draws top the slope vs. residual, bottom the profile with pol1 fit void DrawResSlope(TString plane, TCut=""); // draws top the other coordinate vs. residual, bottom profile with pol1 fit void DrawResOrd(TString plane, TCut=""); // draws the slope profiles for all planes void DrawResSlopeAll(TCut="abs(h_abs_ext-h_abs)<1"); // draws the ordinate profiles for all planes void DrawResOrdAll(TCut="abs(h_abs_ext-h_abs)<1"); // attempt to do a "statistical" (not event be event) correction of rotZ of // planes. 2x3 histograms. Left uncorrected, right rotZ corrected. Top // ordinate vs. residual, middle profile of that, bottom residual. void DrawResOrdCorr(TString plane, TCut="");
What does it do? • aligns planes horizontally, along the measured coordinate • aligns planes vertically • does an estimate of the rotation around z • What does it not do? • doesn’t align planes horizontally, parallel to the strips • doesn’t determine rotations around x and y
General Procedure user> source cmt/setup.sh user> rh9_gcc32opt/runTreeMaker.exe digi.root recon.root ”” tree.root user> root root [0] .x compile.C root [1] Residual* r = new Residual(”tree.root”,”res.root”,”geo.txt”) … opens tree.root for reading, res.root for writing, and reads the geometry from geo.root. root [2] r->Go() ... reads events from the tree file. Fits a straight tracks, discarding the clusters of both planes of the tray to which the plane to be studied belongs. For each cluster(!), fills a small tree with • plane name • measured horizontal position of cluster (vertical to the strips) • measured vertical position of cluster (i.e., elevation of the plane) • extrapolated horizontal position of cluster vertical to the strips (track fit) • extrapolated horizontal position of cluster parallel to the strips (track fit in the other view) • inverse slope of track and saves the small tree in the residual file. root [3] r->Draw...() // e.g. r->DrawResSlopeAll() utilizes one of the Draw... methods. And saves a new geometry to disk.
horizontal displacement: 59m Residual r->DrawResidual(”X5”, ”abs(h_abs-h_abs_ext)<1”)
r->DrawResSlope(”Y9”, ”abs(h_abs-h_abs_ext)<1&&abs(invSlope)<1”) real position θ X4 X3 X2 X1 X0 horizontal displacement: 157m vertical displacement: 81m ideal position res = x + z · cot(θ) Residuals vs. slope (horizontal and vertical alignment) Aligns: • horizontal ( to strips) • vertical
Residuals vs. slope of track (all planes) r->DrawResSlopeAll()
horizontal displacement: 65m rotation around z: 0.54mrad X Y, ideal position Y, real position Residuals vs. position in other view r->DrawResOrd(”Y9”, ”abs(h_abs-h_abs_ext)<1”)
Residuals vs. position in other view (all planes) r->DrawResOrdCorr(”Y9”) r->DrawResOrdAll() res_x%y res_x-p0-y*p1%y
How To Align • Alignment is an iterative process. • Before RA v8r3p1: • run with 10k events till convergence • run with 20k events till convergence • run with 50k events till convergence • run with 100k events till convergence • initially, convergence was defined as maximum deviation of any parameter of two consecutive geometries to be less than 10μm (but not more than 5 iterations) • 1 iteration for 100k events takes about 1h CPU • Since RA v8r3p1: • run with 100k events till “real” convergence • “reaI” convergence is achieved if a geometry repeats (but not more than 50 iterations) • 1 iteration for 100k events takes about 6 min CPU • result is “perfect” geometry
Intra-Tower Alignment Blindness • Attention • Intra-tower alignment is blind versus: • translation • shearing • vertical scaling (horizontal is fixed by strip dimensions) • rotation • translation of the planes of one view vs. the other • rotation of the planes of one view vs. the other After every iteration, separately in each view, I “correct” for: • ∑posh = 0 (horizontal translation) • ∑posh2min. (shearing) • ∑(posv-posv,ref) = 0 (vertical translation) • ∑(posv-posv,ref)2 min. (vertical scaling) • ∑rotz = 0 (rotation around z)
The Future of LeaningTower • can only analyze single tower runs • introduces ambiguities for the resulting geometry • doesn’t iterate on rotations • people don’t like it anyway merge with AlignmentContainer
Intra-Tower Alignment Blindness (revisited) • Intra-tower alignment is blind versus: • translation • shearing • vertical scaling (horizontal is fixed by strip dimensions) • rotation • translation of the planes of one view vs. the other • rotation of the planes of one view vs. the other
Translation Intra-tower alignment: absolute position of a single tower is ambiguous Inter-tower alignment: tracks passing tower gaps fix the relative positions SOLVED
Rotation Intra-tower alignment: rotation of a single tower with respect to some coordinate system is ambiguous Inter-tower alignment: tracks passing tower gaps fix the rotation of one tower vs. the others SOLVED
Shearing • There is no way to correct for shearing from data! • Metrology measurements? • Average over all towers? • Do we care? 50μm vs 554mm for a perpendicular track = 0.1 mrad
Vertical Scaling • There is no way to correct the vertical scale from data! • Metrology measurements? • Average over all towers? • Do we care? 70μm vs 554mm for a 45° track = 0.1 mrad