DR3 Active Geometry
This page is always
under construction
Questions ?
send me mail
Inga Karliner
University of Illinois at Urbana-Champaign
Active Geometry Access Update
April 27, 1999
The distance of a point to the wire was installed 3/10/99
double AEWireInfo::pointDistance(const HepPoint3D&)
Active Geometry access
to DR3 can be done via ADRSenseWireStore interface,
or directly using layer objects.
Following layer attributes can be read via ADRSenseWireStore (or directly
in layer):
- unsigned int numberOfWiresLyr(unsigned int layer)
- double radius(unsigned int layer)
- double phi0(unsigned int layer)
- double cellPhiWidth(unsigned int layer)
- double tanStereoAngle(unsigned int layer)
- double zMax(unsigned int layer)
- double zMin(unsigned int layer)
- DABoolean isAxial(unsigned int layer)
- DABoolean isStereo(unsigned int layer)
- DABoolean isStereoV(unsigned int layer)
- DABoolean isStereoU(unsigned int layer)
- double radiusAtz(DABoolean& success,
unsigned int layer, double z)
Where returned, DABoolean success should be checked before using the returned
object ( radiusAtz(), wireObjectClosest(())
Examples of usage of all ADRSenseWireStore access functions are in
/home/inga/cleo3/DRGeomProcessor/Class/DRGeomProcessor.cc
Email me
if you find bugs, or need other access functions
End of April 27 1999 Update
What does DR3 Active Geometry do ?
- DR3 Active Geometry ADRGeom accesses materials from passive DRGeom,
written by Mike Marsh, to place wire ends of sense wires in the materials:
- Wedding Cake East /West
- Conical Endplate East/West
To start with, ADRGeom places the ends of the wires on cylinders on the
endplates using geometry as described in Dan Peterson's
- /home/dpp/dr3/txt/dimensions_8_95.txt and dr3_hole_data.f
- detailed engineering drawings and tables therein
- To make layer and wire objects, we use
- ActiveElements/AEWireLayer
- ActiveElements/AEWireLayerCylindrical
- ActiveElements/AEWireInfo
(ActiveElements structure was designed by Chris Jones)
The ADRSenseWireProxy is called for the BaseGeometry and
AlignedGeometry streams (only the BaseGeometry in this version).
Active DR elements are attached to materials placed by passive
DR Geometry, be it BaseGeometry, or Aligned Geometry.
Where is the DR3 Active Geometry code ?
The code resides in cleo3 cvs repository and libraries,
in ActiveElements and ADRGeom. ADRGeom has a producer,
ADRGeomProducer.
How do I get at it ?
To run DR3 Active Geometry, you need
C3_CVSSRC/DRGeom, ActiveElements, ADRGeom
The /home/inga/DRGeomProcessor shows how to extract
ADRGeom from the Frame, and how to use Active DR3 access functions.
In the same directory, Test/testwires script creates the DR3 geometry
with DRGeom and ADRGeom producers and recovers Active DR3 quantities
with DRGeomProcessor.
Each of the following quantities has a DR3 Active access functions.
Most common access functions are listed here, and all of them shown in DRGeomProcessor:
- Global DR3 Quantities
- Number of Layers
- unsigned int numberOfLayers()
- Number of Axial Layers
- unsigned int numberOfAxialLayers()
- Number of Stereo Layers
- Number of U-Layers
- Number of V-Layers
- Number of Wires Total (9796)
- unsigned int numberOfWiresTotal()
- First/Last Axial Wire
- First/Last U-wire
- First/Last V-wire
- DR Layer# (Axial layer=1,16)
- DR Layer# (U-layer=1,16)
- DR Layer# (V-layer=1,15)
- CellID <------> Layer, (Wire in Layer)
- ADRSenseWireStore::LayerWire layerWire(CellID)
- unsigned int cellID(layer,wire)
Note: Layer = 1:47
Wire in Layer, or wire = 0, (NumberOfWires(lyr)-1),
- layer number (layer object)
- ADRSenseWireStore::layerNumber(AEWireLayerCylindrical&)
- layer number (space point)
- ADRSenseWireStore::layerNumber(Hep3DPoint&)
- wire object (layer#,wire#)
- const AEWireInfo&
wire(unsigned int layer,unsigned int iwireID)
- the closest wire object for 3D point within the layer
- const AEWireInfo& wireObjectClosest
( DABoolean& success, HepPoint3D& iPoint,
unsigned int layer)
- Layer quantities:
- Number of Wires
- unsigned int numberOfWires()
- phi0 of the First Wire at z=0
- double phi0()
- radius at z=0
- double radius()
- cell phi width = 2*pi/(Number of Wires)
- double phiCellWidth()
- DABoolean isAxial(), isStereo(), isStereoU(), isStereoV()
- tan(StereoAngle) = distance {(x,y)East - (x,y)West}/ (zW-zE)
- with sign of (phiE-phiW)
double tanStereoAngle()
- zMin, zMax (nominal)
- double zMin(), zMax()
- phi0 of the first wire at West/East Endplate
- radius at endplate
- (approximate) radius at z
- radiusAtz(z)
- radial distance to field layer (-)
- radialExtentMinus()
- radial distance to field layer (+)
- radialExtentPlus()
- the closest wire object for 3D point within the layer
- const AEWireInfo& wireObjectClosest
( DABoolean& success, HepPoint3D& iPoint)
- the closest wire number for 3D point within the layer
- unsigned int wireNumberClosest
( DABoolean& success, const HepPoint3D& iPoint)
- Wire quantities. :
Wire=iwire is accessed via its layer=itLayer,
const AEWireInfo& itwire=ilayer.wire(iwire)
or directly using CellID, where
unsigned int CellID=iADRSenseWireStore->cellID(itLayer,iwire)
const AEWireInfo& itwire= iADRSenseWireStore->wire(CellID)
- wire position, tangent vector (wire direction) at given z
- AEWireInfo::WireDirZ wDZ = itwire.zPoint(z);
- HepPoint3D wirepos = wDZ.first
- HepVector3D wiredir = wDZ.second
or
- HepPoint3D wirePoint(double z) const;
- HepVector3D wireTangent(double z) const;
- (x,y,z) of two end points
- const HepPoint3D& point1()
- const HepPoint3D& point2()
- double sagx(), sagy()
- distance of point to the wire
- double pointDistance(const HepPoint3D&)
Note: wire position y(z) has quadratic dependence on z, reflecting the wire sag.
- Ranges:
- CellID = 1:9796
- Layer = 1: 47
- WireInLayer= 0: (NWiresInLayer-1)
Comparison of ADRGeom with DR3 , things to do
The "truth" acc to Dan Peterson is Table 13 in the dimensions_8_95.txt
- Stereo angles:
- The list of Tan( stereo angles) in ADRGeom is in
/home/inga/cleo3/DRTest/Test/DrGeomProcessor.dump.
The values of tan(stereo) in this dump agree with Dan Peterson's
dimensions_8_95.txt, Table 13, within +/-.0002
( less than 1%), and typically agree within less than .0001 (0.5%).
To Do
Acc to this comparison, there is still some debugging to do.
The placement of wire in the material takes into account bushings,
pins, and wire diameters etc. Still, a comparison of the wire placement
in active geometry with this table shows small discrepancies.
- z:
- we differ by less than 0.010" in the axial layers and
- we differ by .035" to 0.040" in the stereo layers.
- phi:
- we test the hole placement in phi by checking (phiEast-phiWest)
against Dan's dCellDZ/[halfcell/m] ( note units).
We are within .0007-.0010 of Dan's numbers in the axial layers when
we use Dan's z-length (.1%), and within .25% for the stereo layers.
These differences need to be clarified, they may be due to misunderstanding
of some constants.
Corrected wire ends' positions from Dan Peterson's surveying files
need to be installed. This requires that the data are accessible from
a file that would reside in the DB. There are 20k sense wire ends, and
Dan tells us that there are 2 to 3 survey correction constants per wire end.
See
Full description of ADRGeom constants
Inga Karliner <karliner@uiuc.edu>
$Id: ActiveDRGeom.html,v 1.9 2000/02/14 21:50:32 inga Exp $