module FirstGuess_mod
! Uses
use Precision_mod
use physicalconstants_mod
use Namelist_mod
use Chambers_mod
use Det_Geom_mod
use Tdc_mod
use Unp_mod
use Unpmc_mod
use Track_mod
use Hists_mod
use Pattern_mod
use Matrix_mod
use timezero_mod
use Calibrations_mod, only: BField
! Types
public type coordP_type
public type fgcluster_type
! Variables
integer (kind=I4), private, PARAMETER :: MaxIterations = 50
integer (kind=I4), private, PARAMETER :: DefaultIter = 5
real (kind=R8), private, DIMENSION(10), PARAMETER :: CirSig2 = (/ 0.3903, 0.5932, 0.7471, 0.7711, 0.8559, 0.8257, 0.7149, 0.8087, 0.8726, 0.8363 /)
real (kind=R8), private, DIMENSION(10), PARAMETER :: HelSig2 = (/ 0.06132, 0.05595, 0.07961, 0.07362, 0.1702, 0.09672, 0.3732, 0.1479, 0.1176, 0.3917 /)
integer (kind=I4), public :: nCircle
integer (kind=I4), public :: nFGTrack
integer (kind=I4), public, DIMENSION(MaxWindows, 2) :: DenseStart
integer (kind=I4), private :: iStream
integer (kind=I4), private, DIMENSION(MaxWinTracks*MaxWindows) :: FirstDense
integer (kind=I4), private, DIMENSION(MaxWinTracks*MaxWindows) :: LastDense
integer (kind=I4), private, DIMENSION(MaxWinTracks*MaxWindows) :: FirstSparse
integer (kind=I4), private, DIMENSION(MaxWinTracks*MaxWindows) :: LastSparse
integer (kind=I4), private, DIMENSION(3*MaxIterations), TARGET :: iSum
real (kind=R8), private, DIMENSION(3*MaxIterations), TARGET :: Phi2Sum
real (kind=R8), private, DIMENSION(3*MaxIterations), TARGET :: zPhiSum
real (kind=R8), private, DIMENSION(3*MaxIterations), TARGET :: PhiSum
real (kind=R8), private, DIMENSION(3*MaxIterations), TARGET :: z2Sum
real (kind=R8), private, DIMENSION(3*MaxIterations), TARGET :: zSum
real (kind=R8), private, DIMENSION(3*MaxIterations), TARGET :: iRSum
real (kind=R8), private, DIMENSION(3*MaxIterations), TARGET :: Omega
real (kind=R8), private, DIMENSION(3*MaxIterations), TARGET :: PhiNot
real (kind=R8), private, DIMENSION(3*MaxIterations), TARGET :: ChiSq
real (kind=R8), private, DIMENSION(MaxWinTracks*MaxWindows) :: uSum
real (kind=R8), private, DIMENSION(MaxWinTracks*MaxWindows) :: vSum
real (kind=R8), private, DIMENSION(MaxWinTracks*MaxWindows) :: uvSum
real (kind=R8), private, DIMENSION(MaxWinTracks*MaxWindows) :: u2Sum
real (kind=R8), private, DIMENSION(MaxWinTracks*MaxWindows) :: v2Sum
real (kind=R8), private, DIMENSION(MaxWinTracks*MaxWindows) :: SqSum
real (kind=R8), private, DIMENSION(MaxWinTracks*MaxWindows) :: uSqSum
real (kind=R8), private, DIMENSION(MaxWinTracks*MaxWindows) :: vSqSum
real (kind=R8), private, DIMENSION(MaxWinTracks*MaxWindows) :: Sq2Sum
real (kind=R8), private, DIMENSION(MaxWinTracks*MaxWindows) :: InvSig2Sum
real (kind=R8), private, TARGET, dimension (MaxWinTracks*MaxWindows, 8) :: aPar
type (fgcluster_type), public, ALLOCATABLE, DIMENSION(:), TARGET :: FGCl
type (fgcluster_type), public, ALLOCATABLE, DIMENSION(:), TARGET :: BestCl
type (fgcluster_type), private, POINTER :: FGP
! Subroutines and functions
public function FirstGuessJim (jStream, iWindow) result (iStat)
private subroutine FillResidualPlots (iWindow, BestHelix, iFGTrack)
private subroutine NewTrack (FGVersion, iWindow, iFGTrack, BestHelix, BestChiSq)
private function FindCircle (iFGTrack, iWindow) result (iStat)
private subroutine MinMaxUV (Crd, Extrema)
private function InsertCluster (iFGTrack, Coord, iPair, PCorDC) result (iStat)
private function ResolveCircle (iFGTrack) result (iStat)
private function DenseOmegaPhiNot (iFGTrack, nIter) result (iStat)
private subroutine ClusterSizeOmegaPhiNot (iFGTrack, nIter)
private subroutine VaryPhi2 (nSets, iFGTrack, OmegaEst)
private subroutine VaryOmega (nSets, iFGTrack, OmegaEst, nIter)
private function CalcOmega (Estimator, iFGTrack) result (OmegaPred)
private function ClusterSizeMatchOmega (iFGTrack) result (Match)
private function SparseOmegaPhiNot (iFGTrack, nIter) result (iStat)
private function FindHelix (iFGTrack, nHelices, BestHelix, BestChiSq) result (iStat)
private subroutine FillHelixSums (iHelix, iCl, Phi, uz, vz, R)
private function ResolveHelix (iHelix) result (iStat)
private function CalcChiSq (iHelix) result (ChiSquare)
private function CalcIter (In1, In2, Radius)
private function Sig2MultScat (Initial, Current) result (Sig2MS)
private subroutine RemoveCluster (iFGTrack, jCl, iPair, Spacing)
private function CalcPhi (u, v, iFGTrack) result (Phi)
private subroutine CopyTrack (iProto, iCopy)
public subroutine ClearFGTracks (First)
private subroutine ClearSingleTrack (iFGTrack)
private subroutine ClearPhiSums (First, Last)
private function UniqueTrack (iFGTrack, i0)
private subroutine RecordFGResult (FGVersion, iWindow)
private subroutine FillFGResult (FGVersion, iFGTrack, iFGResult, iWindow, jStream)
public subroutine CalcAveClSize (iFGTrack, AveArea, AveSize)
private subroutine TrackRange (iFGTrack, iPlane, MinWire, MaxWire)
public function InsertFGResult (iFGResult, iHitWire, iWindow, iPlane, nFGHits) result (iStat)
private subroutine FillFGvsMCPlots (iFGTrack, BestHelix, FGFitStat)
end module FirstGuess_mod
==============================================================================
Author: Jim Musser
Last Modified: July 18, 2001
------------------------------------------------------------------------------
This version finds the circle parameters beginning at the target and
progressing through the dense stack. Winding frequency and PhiNot are found
beginning in the dense stack and progressing to the target.
------------------------------------------------------------------------------
FirstGuess error codes:
iStat value: Error:
1 iFGTrack > MaxTmpTracks in InsertCluster
2 iPair = PrevPair(iFGTrack) in InsertCluster
3 FGCl(iFGTrack) % nCl >= MaxPairs in
InsertCluster
4 Cluster does not fit circle in InsertCluster
5 Less than three clusters in ResolveCircle
6 ChiSquare unacceptably large in ResolveCircle
7 nRows in matrices A and B are unequal in
MatSolv (Matrix_mod)
8 Unique solution does not exist for matrix
equation in MatSolv (Matrix_mod)
9 0 row in matrix in Triangulate (Matrix_mod)
10 Failed to find pivot in Triangulate
(Matrix_mod)
11 Solution fails check in MatSolv (Matrix_mod)
12 ChiSquare unacceptably large in
ResolvePhiLambda
13 Cluster size inconsistent with tan(theta)
14 Too many pairs skipped by final fit
Helix parametrization:
u = a1*cos[a2*z + a3] + a4
v = a1*sin[a2*z + a3] + a5
where a1 means aPar(iFGTrack, 1), a2 is aPar(iFGTrack, 2), etc.
aPar(iFGTrack, 6) is t0
aPar(iFGTrack, 7) is the Circle Chi-Square
aPar(iFGTrack, 8) is the Omega/Phi Chi-Square
==============================================================================
public type coordP_type
type (coord_type), POINTER :: P
integer (kind=I4) :: iPair
character :: PCorDC
end type coordP_type
public type fgcluster_type
integer (kind=I4) :: nCl
real (kind=R8) :: CirChi
real (kind=R8) :: Chi
type (coordP_type), DIMENSION(2*(max_planes_d/2 + max_planes_p/2)) :: Crd
end type fgcluster_type
integer (kind=I4), private, PARAMETER :: MaxIterations = 50
integer (kind=I4), private, PARAMETER :: DefaultIter = 5
real (kind=R8), private, DIMENSION(10), PARAMETER :: CirSig2 = (/ 0.3903, 0.5932, 0.7471, 0.7711, 0.8559, 0.8257, 0.7149, 0.8087, 0.8726, 0.8363 /)
real (kind=R8), private, DIMENSION(10), PARAMETER :: HelSig2 = (/ 0.06132, 0.05595, 0.07961, 0.07362, 0.1702, 0.09672, 0.3732, 0.1479, 0.1176, 0.3917 /)
integer (kind=I4), public :: nCircle
integer (kind=I4), public :: nFGTrack
integer (kind=I4), public, DIMENSION(MaxWindows, 2) :: DenseStart
integer (kind=I4), private :: iStream
integer (kind=I4), private, DIMENSION(MaxWinTracks*MaxWindows) :: FirstDense
integer (kind=I4), private, DIMENSION(MaxWinTracks*MaxWindows) :: LastDense
integer (kind=I4), private, DIMENSION(MaxWinTracks*MaxWindows) :: FirstSparse
integer (kind=I4), private, DIMENSION(MaxWinTracks*MaxWindows) :: LastSparse
integer (kind=I4), private, DIMENSION(3*MaxIterations), TARGET :: iSum
real (kind=R8), private, DIMENSION(3*MaxIterations), TARGET :: Phi2Sum
real (kind=R8), private, DIMENSION(3*MaxIterations), TARGET :: zPhiSum
real (kind=R8), private, DIMENSION(3*MaxIterations), TARGET :: PhiSum
real (kind=R8), private, DIMENSION(3*MaxIterations), TARGET :: z2Sum
real (kind=R8), private, DIMENSION(3*MaxIterations), TARGET :: zSum
real (kind=R8), private, DIMENSION(3*MaxIterations), TARGET :: iRSum
real (kind=R8), private, DIMENSION(3*MaxIterations), TARGET :: Omega
real (kind=R8), private, DIMENSION(3*MaxIterations), TARGET :: PhiNot
real (kind=R8), private, DIMENSION(3*MaxIterations), TARGET :: ChiSq
real (kind=R8), private, DIMENSION(MaxWinTracks*MaxWindows) :: uSum
real (kind=R8), private, DIMENSION(MaxWinTracks*MaxWindows) :: vSum
real (kind=R8), private, DIMENSION(MaxWinTracks*MaxWindows) :: uvSum
real (kind=R8), private, DIMENSION(MaxWinTracks*MaxWindows) :: u2Sum
real (kind=R8), private, DIMENSION(MaxWinTracks*MaxWindows) :: v2Sum
real (kind=R8), private, DIMENSION(MaxWinTracks*MaxWindows) :: SqSum
real (kind=R8), private, DIMENSION(MaxWinTracks*MaxWindows) :: uSqSum
real (kind=R8), private, DIMENSION(MaxWinTracks*MaxWindows) :: vSqSum
real (kind=R8), private, DIMENSION(MaxWinTracks*MaxWindows) :: Sq2Sum
real (kind=R8), private, DIMENSION(MaxWinTracks*MaxWindows) :: InvSig2Sum
real (kind=R8), private, TARGET, dimension (MaxWinTracks*MaxWindows, 8) :: aPar
type (fgcluster_type), public, ALLOCATABLE, DIMENSION(:), TARGET :: FGCl
type (fgcluster_type), public, ALLOCATABLE, DIMENSION(:), TARGET :: BestCl
type (fgcluster_type), private, POINTER :: FGP
public function FirstGuessJim (jStream, iWindow) result (iStat)
integer (kind=I4), INTENT(in) :: jStream
integer (kind=I4), INTENT(in) :: iWindow
integer (kind=I4) :: iStat
! Calls: ClearSingleTrack, ClusterSizeOmegaPhiNot, HF1, NewTrack
end function FirstGuessJim
----------------------------------------------------------------------------
FirstGuessJim finds first guess tracks within a window and detector half
----------------------------------------------------------------------------
private subroutine FillResidualPlots (iWindow, BestHelix, iFGTrack)
integer (kind=I4), INTENT(in) :: iWindow
integer (kind=I4), INTENT(in) :: BestHelix
integer (kind=I4), INTENT(in) :: iFGTrack
! Calls: HF2
end subroutine FillResidualPlots
----------------------------------------------------------------------------
Date created: July 21, 2003
----------------------------------------------------------------------------
Author: Jim Musser
private subroutine NewTrack (FGVersion, iWindow, iFGTrack, BestHelix, BestChiSq)
character, INTENT(in) :: FGVersion
integer (kind=I4), INTENT(in) :: iWindow
integer (kind=I4), INTENT(in) :: iFGTrack
integer (kind=I4), INTENT(in) :: BestHelix
real (kind=R8), INTENT(in) :: BestChiSq
! Calls: FillResidualPlots, HF1, HF2, RecordFGResult
end subroutine NewTrack
private function FindCircle (iFGTrack, iWindow) result (iStat)
integer (kind=I4), INTENT(in) :: iFGTrack
integer (kind=I4), INTENT(in) :: iWindow
integer (kind=I4) :: iStat
! Calls: HF1, HF2, MinMaxUV
end function FindCircle
------------------------------------------------------------------------------
------------------------------------------------------------------------------
private subroutine MinMaxUV (Crd, Extrema)
type (coord_type), INTENT(inout) :: Crd
real (kind=R8), DIMENSION(4), INTENT(inout) :: Extrema
end subroutine MinMaxUV
------------------------------------------------------------------------------
------------------------------------------------------------------------------
private function InsertCluster (iFGTrack, Coord, iPair, PCorDC) result (iStat)
integer (kind=I4), INTENT(in) :: iFGTrack
type (coord_type), INTENT(in), TARGET :: Coord
integer (kind=I4), INTENT(in) :: iPair
character :: PCorDC
integer (kind=I4) :: iStat
end function InsertCluster
------------------------------------------------------------------------------
InsertCluster adds a cluster to a first guess track and adds to running sums
necessary for calculating track parameters.
------------------------------------------------------------------------------
private function ResolveCircle (iFGTrack) result (iStat)
integer (kind=I4), INTENT(in) :: iFGTrack
integer (kind=I4) :: iStat
end function ResolveCircle
------------------------------------------------------------------------------
ResolveCircle finds circle parameters based on Roman Tacik's algorithm. The
circle being the projection of the helix onto a uv plane. aPar(4) is the x
coordinate of the center of the circle. aPar(5) is the y coordinate of the
center of the circle. aPar(1) is the radius of the circle.
The equation of a circle is:
(u - uCent)**2 + (v - vCent)**2 = R**2
For FirstGuess it is parameterized as:
Sq + 2Au + 2Bv + C = 0
Where:
A = -uCent B = -vCent
C = A**2 + B**2 - R**2 Sq = (u**2 + v**2)
Then
X**2 = Sum{1/Sigma**2(Sq + 2Au + 2Bv + C)**2}
And A, B, and C are found by solving the following matrix equation.
/ 2u2Sum 2uvSum uSum \ / A \ / -uSqSum \.
| 2uvSum 2v2Sum vSum || B | = | -vSqSum |
\ 2uSum 2vSum InvSig2Sum / \ C / \ -SqSum /
(In the function this equation is written as Ax=B)
Where each __Sum includes the division by Sigma**2
Sig**2 = SigWire**2 + SigMultScat**2
SigWire = 0.4cm SigMultScat/pair = ?
------------------------------------------------------------------------------
private function DenseOmegaPhiNot (iFGTrack, nIter) result (iStat)
integer (kind=I4), INTENT(in) :: iFGTrack
integer (kind=I4), INTENT(out) :: nIter
integer (kind=I4) :: iStat
! Calls: ClearPhiSums
end function DenseOmegaPhiNot
private subroutine ClusterSizeOmegaPhiNot (iFGTrack, nIter)
integer (kind=I4), INTENT(in) :: iFGTrack
integer (kind=I4), INTENT(out) :: nIter
! Calls: ClearPhiSums, HF1, HF2, VaryOmega, VaryPhi2
end subroutine ClusterSizeOmegaPhiNot
----------------------------------------------------------------------------
Date created: June 27, 2003
----------------------------------------------------------------------------
Author: Jim Musser
private subroutine VaryPhi2 (nSets, iFGTrack, OmegaEst)
integer (kind=I4), INTENT(in) :: nSets
integer (kind=I4), INTENT(in) :: iFGTrack
real (kind=R8), INTENT(in) :: OmegaEst
end subroutine VaryPhi2
----------------------------------------------------------------------------
Date created: August 12, 2003
----------------------------------------------------------------------------
Author: Jim Musser
private subroutine VaryOmega (nSets, iFGTrack, OmegaEst, nIter)
integer (kind=I4), INTENT(in) :: nSets
integer (kind=I4), INTENT(in) :: iFGTrack
real (kind=R8), INTENT(in) :: OmegaEst
integer (kind=I4), INTENT(inout) :: nIter
end subroutine VaryOmega
----------------------------------------------------------------------------
Date created: August 12, 2003
----------------------------------------------------------------------------
Author: Jim Musser
private function CalcOmega (Estimator, iFGTrack) result (OmegaPred)
integer (kind=I4), INTENT(in) :: Estimator
integer (kind=I4), INTENT(in) :: iFGTrack
real (kind=R8) :: OmegaPred
! Calls: CalcAveClSize
end function CalcOmega
----------------------------------------------------------------------------
Date created: August 8, 2003
----------------------------------------------------------------------------
Author: Jim Musser
private function ClusterSizeMatchOmega (iFGTrack) result (Match)
integer (kind=I4), INTENT(in) :: iFGTrack
logical :: Match
end function ClusterSizeMatchOmega
----------------------------------------------------------------------------
ClusterSizeMatchOmega() tests to see if omega is consistent with the
average cluster size for the track.
Created: September 8, 2003
----------------------------------------------------------------------------
Author: Jim Musser
private function SparseOmegaPhiNot (iFGTrack, nIter) result (iStat)
integer (kind=I4), INTENT(in) :: iFGTrack
integer (kind=I4), INTENT(out) :: nIter
integer (kind=I4) :: iStat
! Calls: ClearPhiSums
end function SparseOmegaPhiNot
private function FindHelix (iFGTrack, nHelices, BestHelix, BestChiSq) result (iStat)
integer (kind=I4), INTENT(in) :: iFGTrack
integer (kind=I4), INTENT(in) :: nHelices
integer (kind=I4), INTENT(out) :: BestHelix
real (kind=R8), INTENT(out) :: BestChiSq
integer (kind=I4) :: iStat
! Calls: FillHelixSums
end function FindHelix
private subroutine FillHelixSums (iHelix, iCl, Phi, uz, vz, R)
integer (kind=I4), INTENT(in) :: iHelix
integer (kind=I4), INTENT(in) :: iCl
real (kind=R8), INTENT(in) :: Phi
real (kind=R8), INTENT(in) :: uz
real (kind=R8), INTENT(in) :: vz
real (kind=R8), INTENT(in) :: R
end subroutine FillHelixSums
private function ResolveHelix (iHelix) result (iStat)
integer (kind=I4), INTENT(in) :: iHelix
integer (kind=I4) :: iStat
end function ResolveHelix
------------------------------------------------------------------------------
ResolveHelix solves the matrix equation to determine Phi and Lambda.
Phi = Omega*z + PhiNot
With Omega = aPar(2) and PhiNot = aPar(3)
Where Phi is given by:
Phi = aTan2(v - aPar(5), u - aPar(4))
Then
X**2 = Sum{(Phi - aPar(2)*z - aPar(3))**2}
And aPar(2) and aPar(3) are found by solving the following matrix equation:
/ a2Sum zSum \/ aPar(2) \ _ / zPhiSum \
\ zSum iRSum /\ aPar(3) / - \ PhiSum /
Where each __Sum includes the division by Sigma**2
------------------------------------------------------------------------------
private function CalcChiSq (iHelix) result (ChiSquare)
integer (kind=I4), INTENT(in) :: iHelix
real (kind=R8) :: ChiSquare
end function CalcChiSq
----------------------------------------------------------------------------
Created: September 10, 2003
CalcChiSq calculates the Chi-Square for the (Omega, PhiNot) fit including
a correction for missed hits.
----------------------------------------------------------------------------
Author: Jim Musser
private function CalcIter (In1, In2, Radius)
integer (kind=I4), INTENT(in) :: In1
integer (kind=I4), INTENT(in) :: In2
real (kind=R8), INTENT(in) :: Radius
integer (kind=I4) :: CalcIter
end function CalcIter
private function Sig2MultScat (Initial, Current) result (Sig2MS)
integer (kind=I4), INTENT(in) :: Initial
integer (kind=I4), INTENT(in) :: Current
real (kind=R8) :: Sig2MS
end function Sig2MultScat
------------------------------------------------------------------------------
------------------------------------------------------------------------------
private subroutine RemoveCluster (iFGTrack, jCl, iPair, Spacing)
integer (kind=I4), INTENT(in) :: iFGTrack
integer (kind=I4), INTENT(in) :: jCl
integer (kind=I4), INTENT(in) :: iPair
real (kind=R8), INTENT(in) :: Spacing
! Calls: ClearSingleTrack
end subroutine RemoveCluster
------------------------------------------------------------------------------
------------------------------------------------------------------------------
private function CalcPhi (u, v, iFGTrack) result (Phi)
real (kind=R8), INTENT(in) :: u
real (kind=R8), INTENT(in) :: v
integer (kind=I4) :: iFGTrack
real (kind=R8) :: Phi
end function CalcPhi
------------------------------------------------------------------------------
Date rewritten: August 7, 2003
CalcPhi determines phi from (u, v) for a given track
------------------------------------------------------------------------------
Author: Jim Musser
private subroutine CopyTrack (iProto, iCopy)
integer (kind=I4), INTENT(in) :: iProto
integer (kind=I4), INTENT(in) :: iCopy
end subroutine CopyTrack
------------------------------------------------------------------------------
CopyTrack
------------------------------------------------------------------------------
public subroutine ClearFGTracks (First)
integer (kind=I4), INTENT(in) :: First
! Calls: ClearSingleTrack
end subroutine ClearFGTracks
------------------------------------------------------------------------------
------------------------------------------------------------------------------
private subroutine ClearSingleTrack (iFGTrack)
integer (kind=I4), INTENT(in) :: iFGTrack
end subroutine ClearSingleTrack
private subroutine ClearPhiSums (First, Last)
integer (kind=I4), INTENT(in) :: First
integer (kind=I4), INTENT(in) :: Last
end subroutine ClearPhiSums
private function UniqueTrack (iFGTrack, i0)
integer (kind=I4), INTENT(in) :: iFGTrack
integer (kind=I4), INTENT(in) :: i0
logical :: UniqueTrack
! Calls: CopyTrack
end function UniqueTrack
private subroutine RecordFGResult (FGVersion, iWindow)
character, INTENT(in) :: FGVersion
integer (kind=I4), INTENT(in) :: iWindow
! Calls: FillFGResult, HF1
end subroutine RecordFGResult
----------------------------------------------------------------------------
Date created: July 21, 2003
Subroutine calls FillFGResult after determining whether particle is to be
considered as having traversed half of the detector or all of the detector
----------------------------------------------------------------------------
Author: Jim Musser
private subroutine FillFGResult (FGVersion, iFGTrack, iFGResult, iWindow, jStream)
character, INTENT(in) :: FGVersion
integer (kind=I4), INTENT(in) :: iFGTrack
integer (kind=I4), INTENT(in) :: iFGResult
integer (kind=I4), INTENT(in) :: iWindow
integer (kind=I4), INTENT(in) :: jStream
! Calls: CalcAveClSize, HF1, HF2, TrackRange
end subroutine FillFGResult
public subroutine CalcAveClSize (iFGTrack, AveArea, AveSize)
integer (kind=I4), INTENT(in) :: iFGTrack
real (kind=R8), INTENT(out) :: AveArea
real (kind=R8), INTENT(out) :: AveSize
! Calls: HF1
end subroutine CalcAveClSize
----------------------------------------------------------------------------
CalcAveClSize calculates the average size of DC clusters assigned to a
particular track.
Created: June 17, 2003
----------------------------------------------------------------------------
Author: Jim Musser
private subroutine TrackRange (iFGTrack, iPlane, MinWire, MaxWire)
integer (kind=I4), INTENT(in) :: iFGTrack
integer (kind=I4), INTENT(in) :: iPlane
integer (kind=I4), INTENT(out) :: MinWire
integer (kind=I4), INTENT(out) :: MaxWire
end subroutine TrackRange
------------------------------------------------------------------------------
Revised TrackRange finds the range of wires that intersects the circular
projection of the track.
Revised March 27, 2003
public function InsertFGResult (iFGResult, iHitWire, iWindow, iPlane, nFGHits) result (iStat)
integer (kind=I4), INTENT(in) :: iFGResult
integer (kind=I4), INTENT(in) :: iHitWire
integer (kind=I4), INTENT(in) :: iWindow
integer (kind=I4), INTENT(in) :: iPlane
integer (kind=I4), INTENT(inout) :: nFGHits
integer (kind=I4) :: iStat
end function InsertFGResult
private subroutine FillFGvsMCPlots (iFGTrack, BestHelix, FGFitStat)
integer (kind=I4), INTENT(in) :: iFGTrack
integer (kind=I4), INTENT(in) :: BestHelix
integer (kind=I4), INTENT(in) :: FGFitStat
! Calls: HF1, HF2
end subroutine FillFGvsMCPlots
----------------------------------------------------------------------------
----------------------------------------------------------------------------
Author: Jim Musser