Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

 

  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)