Module helixfit_tref_mod 
module helixfit_tref_mod
        ! Uses
    use precision_mod
    use namelist_mod
    use physicalconstants_mod
    use helixfit_common_mod
    use helixfit_fitpar_mod
    use helixfit_hits_mod
    use helixfit_track_mod
        ! Variables
    logical, public, PARAMETER :: HelixFitTrefMedian = .true.
    logical, public, PARAMETER :: HelixFitTrefLsq = .false.
    logical, public, PARAMETER :: HelixFitTrefFilter = .false.
        ! Subroutines and functions
    public function getPCtime (iwindow, z, cost) result (time)
    public subroutine FitTref (hits, kinks, lastplane, fitparMC, fitpar, res)
    public function findtrefDCA (hits) result (tref)
    public function findtrefDCE (hits) result (tref)
    private subroutine fitTref_median (hits, fitparMC, fitpar, res)
    public subroutine fitTref_adjthit (hits, fitparMC, fitpar, res)
    private subroutine fitTref_lsq (hits, fitparMC, fitpar, res)
    private function fitTref_filter (hits, iresmap, fitpar, res) result (fittref)
    private function sqr (a) result (b)
end module helixfit_tref_mod
 Description of Variables 
HelixFitTrefMedian
logical, public, PARAMETER :: HelixFitTrefMedian = .true.
 fit tref using median method
HelixFitTrefLsq
logical, public, PARAMETER :: HelixFitTrefLsq = .false.
 fit tref using least-squares
HelixFitTrefFilter
logical, public, PARAMETER :: HelixFitTrefFilter = .false.
 fit tref using filter
 Description of Subroutines and Functions 
getPCtime
public function getPCtime (iwindow, z, cost) result (time)
    integer, intent(in) :: iwindow
    real (kind=r8), intent(in) :: z
    real (kind=r8), intent(in) :: cost
    real (kind=r8) :: time
            ! return value
end function getPCtime
FitTref
public subroutine FitTref (hits, kinks, lastplane, fitparMC, fitpar, res)
    type (hits_type), INTENT(in) :: hits
            
 Description: fit the track reference time
 hits data
    type (kinks_type), INTENT(in) :: kinks
             kink data
    integer, INTENT(in) :: lastplane
             last plane to use
    type (fitpar_type), INTENT(in) :: fitparMC
             "true" parameters
    type (fitpar_type), INTENT(inout) :: fitpar
             fit parameters
    type (residuals_type), INTENT(inout) :: res
             residuals
    ! Calls: fittref_adjthit, fittref_lsq, fittref_median
end subroutine FitTref
findtrefDCA
public function findtrefDCA (hits) result (tref)
    type (hits_type), INTENT(in) :: hits
            
 Arguments:
 hits array
    real (kind=R8) :: tref
            
 Description: make a first guess of tref: average DC time
 Returns: reference time, ns
end function findtrefDCA
findtrefDCE
public function findtrefDCE (hits) result (tref)
    type (hits_type), INTENT(in) :: hits
            
 Arguments:
 hits array
    real (kind=R8) :: tref
            
 Description: make a first guess of tref: earliest time
 Returns: reference time, ns
end function findtrefDCE
fitTref_median
private subroutine fitTref_median (hits, fitparMC, fitpar, res)
    type (hits_type), INTENT(in) :: hits
            
 Description: fit reference time, update fitpar and res%thit
 Arguments:
 hits
    type (fitpar_type), INTENT(in) :: fitparMC
             fit parameters
    type (fitpar_type), INTENT(inout) :: fitpar
             fit parameters
    type (residuals_type), INTENT(inout) :: res
             residuals
    ! Calls: makeTofCorrection, sortreal8
end subroutine fitTref_median
fitTref_adjthit
public subroutine fitTref_adjthit (hits, fitparMC, fitpar, res)
    type (hits_type), INTENT(in) :: hits
            
 Description: adjust tref to make all thits positive, update fitpar and res%thit
 Arguments:
 hits
    type (fitpar_type), INTENT(in) :: fitparMC
             fit parameters
    type (fitpar_type), INTENT(inout) :: fitpar
             fit parameters
    type (residuals_type), INTENT(inout) :: res
             residuals
end subroutine fitTref_adjthit
fitTref_lsq
private subroutine fitTref_lsq (hits, fitparMC, fitpar, res)
    type (hits_type), INTENT(in) :: hits
            
 Description: fit reference time, update fitpar and res%thit
 Arguments:
 hits
    type (fitpar_type), INTENT(in) :: fitparMC
             fit parameters
    type (fitpar_type), INTENT(inout) :: fitpar
             fit parameters
    type (residuals_type), INTENT(inout) :: res
             residuals
    ! Calls: hf1, makeTofCorrection
end subroutine fitTref_lsq
fitTref_filter
private function fitTref_filter (hits, iresmap, fitpar, res) result (fittref)
    type (hits_type), INTENT(in) :: hits
            
 Fit reference time using a Kalman filter
 hits
    integer, INTENT(in), dimension (:,:) :: iresmap
             residuals map
    type (fitpar_type), INTENT(in) :: fitpar
             fit parameters
    type (residuals_type), INTENT(in) :: res
             residuals
    real (kind=R8) :: fittref
             return value
    ! Calls: hf1, makeTofCorrection
end function fitTref_filter
sqr
private function sqr (a) result (b)
    real (kind=R8), INTENT(in) :: a
             Description: return square of a real(r8) number
    real (kind=R8) :: b
end function sqr