95 Views

Download Presentation
## Gamma-ray Large Area Space Telescope

- - - - - - - - - - - - - - - - - - - - - - - - - - - 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