You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 8 Next »

CAVEAT:  Basically, I'm just using these pages as a notepad.   The idea is to make the doxygen generated commets reflect the stuff here eventually

 Overiew

  This is just a list of the order & nesting the various functions are called in.

   AcdReconAlg::reconstruct( const Event::AcdDigiCol& digiCol )

     Is the main function.  It takes the collection of AcdDigis from the event as input. 

     This function:
        1) builds the set of AcdHits (AcdPha2MipTool::makeAcdHits() )
        2) calculates all the geometrical quantities for each track  ( AcdTrkIntersectTool::exitsLAT(), AcdPocaTool::tileDistances(),  AcdPocaTool::ribbonDistances() )
        3) latches best values for storage to Merit Tuple ( doca(), hitTileDist(), tileAcdDist(),  hitRibbonDist() ) 
        4) extrapolates track to the ACD ( extrapolateTrack() )
        5) puts output on the TDS

        AcdPha2MipTool::makeAcdHits(const Event::AcdDigiCol& digiCol, Event::AcdHitCol& hits, AcdRecon::AcdHitMap& hitMap )

            Converts all the digis to calibrated AcdHits. 

        AcdReconAlg::trackDistances(...)

            Does all the geometrical computations for each track.

            Those calculations are:

                1)  finding the point where the track exits the nominal ACD in both directions (AcdTrkIntersectTool::exitsLAT() )
                2)  find the docas to the various hit Acd tiles and ribbons ( AcdPocaTool::tileDistances(),  AcdPocaTool::ribbonDistances())

                        AcdPocaTool::tileDistances(...)

             This gets the various types of doca & active distance calculations for tiles

                     AcdRecon::pointPoca()                    -> doca to center of tile
                     AcdRecon::tilePlane()                     -> point that track crosses tile plane & 2D active distance
                       AcdRecon::tileEdgePoca() or              -> doca to closest edge (track inside tile)
                       AcdRecon::tileEdgeCornerPoca()        -> doca to closest edge or corner ( track outside tile )

                        AcdPocaTool::ribbonDistances(...)

               This get the various types of doca & active distance calculations for ribbons  

                     AcdRecon::ribbonPlane()                  -> point that track crosses ribbon plane
                     AcdRecon::ribbonPoca()                   -> doca to ray defined by ribbon

                  AcdReconAlg::doca(...)

                 Latches the best (smallest) values of doca to tile center for all tracks 

                  AcdReconAlg::hitTileDist(...)

                 Latches the best (largest) values of 2D active distance to tiles for all tracks

                  AcdReconAlg::tileActDist(...)

                 Latches the best (largest) values of "tileActiveDistance" (2D inside tile, 3D outside tile) for all tracks

                  AcdReconAlg::hitRibbonDist(...)

                 Latches the best (largest) value of 2D active distance to ribbons for all tracks  

                  AcdReconAlg::extrapolateTrack(...) 

                 Uses GEANT propagator to take track parameters out tointersection and POCAs.   Calls:

                    AcdTkrIntersecttTool:makeIntersections()  -> uses GEANT propagator to caluclate intersection w/ ACD elements
                    AcdRecon::projectErrorAtPoca()                -> propagates error matrix to POCA

 

                   AcdTkrIntersectTool::makeIntersections()

                    Uses GEANT propagator to caluclate intersection w/ ACD elements.   If the struck element has not been hit, does the POCA calculations

                        AcdRecon::ribbonPlane() and AcdRecon::ribbonPoca() or
                        AcdRecon::tilePlane() and AcdRecon::tileEdgePoca()

                        AcdRecon::projectToPlane() 

                    Gets the poca to the tile holes ( holePoca() ) 

                    Decides where closest gap is, then calls

                            gapPocaRibbon( )      -> if the track actually hits a ribbon that isn't in an overlap area, uses 3D poca to ribbon center
                            gapPocaTile( )          -> if the track hits a tile, uses -1 * 3D poca to tile edge
                            fallbackToNominal()  -> if the track doesn't hit any GEANT element,  uses 2D "active distance"  ( 5.  -  fabs(x-x0) ) to gap
 

                  AcdReconAlg:: calcCornerDoca(...)

                  Calculates the DOCA to the Rays defined by the side edges of the ACD.  Signed to reflect the directionality of the gaps.
  

Geometrical Functions

 These functions are defined in AcdRecon/AcdReconFuncs.h and implemented in src/AcdReconFuncs.cxx 

 pointPoca(const Track& track, const Point& point, arcLength, doca, Point& poca)

Gets the point of closest approach between a track projection and a space point.

 Inputs:
    track  -> the track projectection data
    point -> the point in question

 Outputs:
    arcLength -> distance along the track where the poca occurs  =>  poca = track.m_point + arcLength * track.m_dir
    doca         -> distance of clostest approach  == | point - poca |
    poca         -> the point of closest approach

 

 crossesPlane(const Track& track, const Point& plane, int face, arcLength, localX,localY, Point& hitPoint)

Gets the point where a track projection crosses a plane.   This assumes that the plane is oriented along a cartiesen axis

Inputs:
    track  -> the track projectection data
    point  -> point at the center of the plane
    face   -> enum which defines the orientation/ side of the LAT the plane is on (top=0, -Y, -X, +Y, +X, bottom)

 Outputs:
    arcLength -> distance along the track where the plane is crossed occurs  =>  hitPoint = track.m_point + arcLength * track.m_dir
    localX       -> position of the crossing point relative to the plane center
    localY       
    hitPoint     -> the point where the track projection crosses the plane 

 

  tilePlane(const Track& track, const Tile& tile, arcLength, localX, localY,activeX, activeY, active2D, Point& hitPoint)

Gets the point where a track projection crosses a tile

Inputs:
    track  -> the track projectection data
    tile      -> the geomertical informatio about the tile

 Outputs:
    arcLength -> distance along the track where the plane is crossed occurs  =>  hitPoint = track.m_point + arcLength * track.m_dir
    localX       -> position of the crossing point relative to the plane center
    localY       
    activeX     -> position of the crossing point relative to the edge of the active area ( >0 is in active area)
    activeY        
    active2D  ->  the larger of activeX and activeY 
    hitPoint     -> the point where the track projection crosses the plane (+x , +y, -x, -y edges in local frame)

tileEdgePoca(const Track& track, const Tile& tile,arcLength, dist, Point& poca, Vector& vector, int& region)

Gets the point where a track projection (that goes inside a tile) comes closest one of the edges of the tile

Inputs:
    track  -> the track projectection data
    tile      -> the geomertical informatio about the tile

 Outputs:
    arcLength -> distance along the track where the plane is crossed occurs  =>  hitPoint = track.m_point + arcLength * track.m_dir
    dist     ->  the distance of closest approach between the track and the tile edge (in 3D)
    poca   -> the point of closest approach along the track to the tile edge
    vector  -> the vector from the poca to the closest point on the tile edge
    region  -> a code to show which edge of the tile was considered (+y,+x,-y,-x)

tileEdgeCornerPoca(const Track& track, const Tile& tile,arcLength, dist, Point& poca, Vector& vector, int& region)

Gets the point where a track projection (that goes outside a tile) comes closest one of the edges or corners of the tile

Inputs:
    track  -> the track projectection data
    tile      -> the geomertical informatio about the tile

 Outputs:
    arcLength -> distance along the track where the plane is crossed occurs  =>  hitPoint = track.m_point + arcLength * track.m_dir
    dist     ->  the distance of closest approach between the track and the tile edge (in 3D)
    poca   -> the point of closest approach along the track to the tile edge
    vector  -> the vector from the poca to the closest point on the tile edge
    region  -> a code to show which edge of the tile was considered (y,+x,+y,-x edges, ++, +, --, -+ corners)

 

ribbonPlane(const Track& track, const Ribbon& ribbon, arcLength, dist, Point& hitPoint)

Gets the point where a track projection crosses a plane.   This assumes that the plane is oriented along a cartiesen axis

Inputs:
    track  -> the track projectection data
    ribbon -> the geomertical informatio about the tile

 Outputs:
    arcLength -> distance along the track where the plane is crossed occurs  =>  hitPoint = track.m_point + arcLength * track.m_dir
    dist     -> the distance of closest approach between the track and the ribbon
    hitPoint     -> the point where the track projection crosses the plane 

 

ribbonPoca(const Track& track, const Ribbon& ribbon, arcLength, dist, Point& poca, Vector& vector, int& region)

Gets the point where a track projection crosses a plane.   This assumes that the plane is oriented along a cartiesen axis

Inputs:
    track  -> the track projectection data
    ribbon -> the geomertical informatio about the tile

 Outputs:
    arcLength -> distance along the track where the plane is crossed occurs  =>  hitPoint = track.m_point + arcLength * track.m_dir
    dist     -> the distance of closest approach between the track and the ribbon
    poca   -> the point of closest approach along the track to the ribbon
    vector  -> the vector from the poca to the closest point on the ribbon
    region  -> a code to show which edge of the ribbon was considered (+,- in local coords)

 

Track Projection Functions

These functions are also defined int AcdRecon/AcdReconFuncs.h and implemented in src/AcdReconFuncs.cxx 

errorAtXPlane(delta, const TkrTrackParams& track, HepMatrix& covAtPlane)

  errorAtXPlane(delta, const TkrTrackParams& track, HepMatrix& covAtPlane) 
  errorAtXPlane(delta, const TkrTrackParams& track, HepMatrix& covAtPlane) 

Projects the covarience martix onto a plane  This assumes that the plane is oriented along a cartiesen axis

Inputs:
    delta  ->  normal distance from end of track to plane
    track ->  the track parameters (esp. the cov. martix)

Outputs:
    covAtPlane -> the covarience matrix projected to the plane, expressed in local coords (XX, XY   /   YX, YY)

 projectErrorAtPoca(const TrackData& track, const TkrTrackParams& trackParams, const Point& poca, const Vector& pocaVector, pocaError)

Projects the covarience martix along the vector between the POCA and the edge of the tile of ribbon

Inputs:
    track, trackParams ->  the track data & track parameters (esp. the cov. martix)
    poca -> the point of closest approach to the tile or ribbon edge
    pocaVector -> the vector from the POCA to the closest edge 

Outputs:
    pocaError -> the projection of the covareince matrix along the pocaVector

 Internal Data structures

These structures are defined in AcdRecon/AcdReconStruct.h 

They are only for passing around information with the AcdRecon code.   The structures that export code to the TDS and ROOT are defined in Event/Recon/AcdRecon 

 PocaData

   this stores eveything we might want to know about where a track goes relative to a tile or ribbon
 

    // stuff about the Tile or Ribbon 
    idents::AcdId m_id;            // The AcdId of the hit element

    // stuff about the DOCA to the center of the tile or ribbon
    double m_arcLengthCenter; // Length along the track to the POCA to the center of the tile
    double m_docaCenter;        // The distance of closest aproach to the center of the tile
    Point m_pocaCenter;           // The POCA to the center of the tile

    // stuff about the point the track projection crosses the tile or ribbon plane
    double m_arcLengthPlane;  // Length along the track to the plane of the detector
    double m_activeX;             // 2D active distance in local X and Y ( For the sides X is horizontal, Y is vertical (aka Z) )
    double m_activeY
    double m_active2D;           // The distance of closest aproach to the relevent edge in 2D
    Point m_inPlane;                // 3D point that track crosses detector plane
    double m_localX;               // The local coordinates.   For the sides X is horizontal, Y is vertical (aka Z)
    double m_localY;
    double m_localCovXX;        // The local covarience terms.  For the sides X is horizontal, Y is vertical (aka Z)
    double m_localCovXY;
    double m_localCovYY;
    double m_cosTheta;           // angle between track and plane normal
    double m_path;                 // pathlength of track in the active material

    // stuff about the POCA between the track projection and the closest edge or corner of the tile or ribbon
    double m_arcLength;         // Length along the track to the poca
    double m_active3D;          // The distance of closest aproach to the relevent edge in 3D
    double m_active3DErr;      // The error on distance of closest aproach to the relevent edge in 3D
    Point m_poca;                   // Point of closest approach
    Vector m_pocaVector;        // Vector from Track to POCA

    // stuff about where the POCA occurs relative to the tile or ribbon
    int m_region;                   // One of the enums in "??"

 

TrackData

    HepPoint3D   m_point;          // the start (or end) point of the track
    HepVector3D m_dir;            // the direction of the track
    double          m_energy;      // the energy of the track at the start point
    int                m_index;        // the index number of this track
    bool              m_upward;      // which side of track

 

 ExitData

    int    m_face;              // 0:top 1:-X 2:-Y 3:+X 4:+Y 5:bottom
    double m_arcLength;   // Length along the track to the m_x
    Point  m_x;                 // Intersection Point

  • No labels