Representations of ACD volumes
In GEANT and the XML description of the LAT all the ACD volumes are rectangular solids. They are defined by transformation to the volume frame (offset & rotation) and by the size of the volume, expressed in the local frame.
In the AcdRecon intersection functions we treat the tile volues as flat, thin squares, and the ribbons as narrow rays.
We do all the calculation of the "AcdRecon" representations from the GEANT representations in AcdGeometrySvc
Functions defined in IAcdGeometrySvc used by AcdTileDim, AcdRibbonDim and AcdReconAlg
const std::map<idents::AcdId, int>& getAcdIdVolCountCol() const
returns a map keyed by AcdId which gives the number of sub-volumes associated with a particular Acd detector element
bool fillTileData(const idents::AcdId& id, int iVol,
int& face,
std::vector<double>& dim,
HepPoint3D& center,
HepPoint3D* corner)
fills the data asssociated with a particular tile volume, returns true for success
inputs:
id -> The AcdId of the tile in question
iVol -> the index of the sub-volume in question. Usually 0, but 1 for short bits of bent tiles
outputs:
face -> the face of the detector the volume is on (0=top, 1= -X , 2= -Y, 3= +X, 4= +Y, 5= Bottom)
dim -> the size of the tile volume in X,Y,Z. Expressed in global frame orientation
center -> the location of the center of the tlie, expressed in global frame
corner -> the locations of the tile corners. Since the tiles are treated as perfectly thin, only 4 corners are given
bool fillTileTransform(const idents::AcdId& id, int iVol,
HepTransform3D& transform)
fills the transformation asssociated with a particular tile volume, returns true for success
inputs:
id -> The AcdId of the tile in question
iVol -> the index of the sub-volume in question. Usually 0, but 1 for short bits of bent tiles
outputs:
transform -> transformation that takes one to the tile frame from the global frame
bool fillTileSharedEdgeData(const idents::AcdId& id,
const std::vector<double>& dim1, const std::vector<double>& dim1,
int& sharedEdge1, int& sharedEdge2,
float& sharedWidth1, float& sharedWidth2)
fills the data about which (if any) edges of a tile are shared between sub-volumes, returns true for success
This is needed for handling the bent tiles on the top edges of the ACD
inputs:
id -> The AcdId of the tile in question
dim1 -> the dimensions of sub-volume 1
dim2 -> the dimensions of sub-volume 2
outputs:
sharedEdge1 -> index stating which edge of sub-volume 1 lies along the bend
sharedEdge2 -> index stating which edge of sub-volume 2 lies along the bend
sharedWidth1 -> the extra "width" of the main piece of the tile because of the extra piece
sharedWidth2 -> the extra "width" of the extra piece of the tile because of the main piece
bool fillScrewHoleData(const idents::AcdId& id, std::vector< HepPoint3D >& screwHoles)
fills the data about the position of the screw holes, returns true for success
inputs:
id -> The AcdId of the tile in question
outputs:
screwHoles -> the positions of the screw holes, given in the tile plane
bool fillRibbonRays(const idents::AcdId& id,
std::vector<Ray>& minusSideRays,
std::vector<Ray>& topRays,
std::vector<Ray>& plusSideRays, bool increasing = true)
fills the data about the rays that make up an Acd ribbon, returns true for success
inputs:
id -> The AcdId of the ribbon in question
outputs:
minusSideRays -> the rays definining the ribbon along either the -X or -Y side of the ACD
topRays -> the rays defining the ribbon along the top of the ACD
plusSideRays -> the rays definining the ribbon along either the +X or +Y side of the ACD
increasing -> flag to sort the rays in increasing or decreasing order
bool fillRibbonTransforms(const idents::AcdId& id,
HepTransform3D& minusSideTransform,
HepTransform3D& topTransform,
HepTransform3D& plusSideTransform)
fills the data about the transformation asssociated with a particular ribbon. returns true for success
This function only defines one transformation per side of the ACD, it uses the centermost volume
inputs:
id -> The AcdId of the ribbon in question
outputs:
minusSideTransform-> the transform to the frame of the ribobn along -X or -Y side of the ACD
topTransform > the transform to the frame of the ribbon along the top of the ACD
plusSideTransform > the transform to the frame of the ribbon along either the +X or +Y side of the ACD
StatusCode findCornerGaps()
const Ray getCornerGapRay(unsigned int i) const
Calculate and return the rays that run along the corners of the ACD (down the sides edges)