DR3 Active Geometry

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 $