Module xtalk_mod

module xtalk_mod

        ! Uses
    use precision_mod
    use det_geom_mod
    use chambers_mod
    use filters_mod
    use tdc_mod
    use unp_mod
    use namelist_mod
    use hists_mod

        ! Variables
    logical, public, dimension (dc_mngw) :: DC_IsXtalk
    logical, public, dimension (pc_mngw) :: PC_IsXtalk
    integer (kind=i4), public, PARAMETER :: max_nAway = 79
    integer (kind=i4), public, PARAMETER :: nWidthBins = 7
    integer (kind=i4), private, PARAMETER, dimension (nWidthBins-1) :: WidthBins = (/ 70, 100, 200, 300, 500, 1000 /)
    integer (kind=i4), private, DIMENSION(MAX_PLANES_D,MAX_WIRES_D,max_nAway) :: DC_nAdjHits = 0
    integer (kind=i4), private, DIMENSION(MAX_PLANES_D,MAX_WIRES_D,max_nAway) :: DC_nXtalkHits = 0
    integer (kind=i4), private, DIMENSION(MAX_PLANES_D, nWidthBins) :: DC_nWideHits = 0
    integer (kind=i4), private, DIMENSION(MAX_PLANES_D, nWidthBins) :: DC_nCausedXtalk = 0
    integer (kind=i4), private, DIMENSION(MAX_PLANES_D,MAX_WIRES_D) :: DC_nAllHits = 0
    integer (kind=i4), private, DIMENSION(MAX_PLANES_D) :: DC_PlaneMultSum = 0
    integer (kind=i4), private, DIMENSION(MAX_PLANES_D) :: DC_EventSum = 0
    integer (kind=i4), private, DIMENSION(MAX_PLANES_D) :: DC_WireSingleHit = 0
    integer (kind=i4), private, DIMENSION(MAX_PLANES_D) :: DC_WireMultHit = 0
    integer (kind=i4), private, DIMENSION(MAX_PLANES_P,MAX_WIRES_P,max_nAway) :: PC_nAdjHits = 0
    integer (kind=i4), private, DIMENSION(MAX_PLANES_P,MAX_WIRES_P,max_nAway) :: PC_nXtalkHits = 0
    integer (kind=i4), private, DIMENSION(MAX_PLANES_P, nWidthBins) :: PC_nWideHits = 0
    integer (kind=i4), private, DIMENSION(MAX_PLANES_P, nWidthBins) :: PC_nCausedXtalk = 0
    integer (kind=i4), private, DIMENSION(MAX_PLANES_P,MAX_WIRES_P) :: PC_nAllHits = 0
    integer (kind=i4), private, DIMENSION(MAX_PLANES_P) :: PC_PlaneMultSum = 0
    integer (kind=i4), private, DIMENSION(MAX_PLANES_P) :: PC_EventSum = 0
    integer (kind=i4), private, DIMENSION(MAX_PLANES_P) :: PC_WireSingleHit = 0
    integer (kind=i4), private, DIMENSION(MAX_PLANES_P) :: PC_WireMultHit = 0

        ! Subroutines and functions
    public subroutine XtalkInit ()
    public subroutine XTalk ()
    private subroutine XTalk_Main (FirstPlane, LastPlane, Plane, Wire, nPhits, Whits, nWhits, tdc, WidthCut, WidthDiffCut, TDCuts, H, nAdjHits, nXtalkHits, nWideHits, nCausedXtalk, nAllHits, nAway, PlaneMultSum, EventSum, WireSingleHit, WireMultHit, IsXtalk)
    public subroutine XtalkPrint ()
    private subroutine XtalkFillHists ()
    private subroutine XtalkAfterFillHists ()
    private subroutine XtalkPCHists (FirstPlane, LastPlane, nPhits, Whits, tdc, H)
    private subroutine CrossTalkFillHists (FirstPlane, LastPlane, nPhits, Whits, tdc, H, WidthCut, TimeDiffCuts)

end module xtalk_mod
========================================================
version 2.1
 September 1999
--------------------------------------------------------
 Cross talk analysis
========================================================

Author: Maher Quraan, Art Olin, Marc Lalancette

Version: 2.2qod


Description of Variables

DC_IsXtalk

logical, public, dimension (dc_mngw) :: DC_IsXtalk

PC_IsXtalk

logical, public, dimension (pc_mngw) :: PC_IsXtalk

max_nAway

integer (kind=i4), public, PARAMETER :: max_nAway = 79

nWidthBins

integer (kind=i4), public, PARAMETER :: nWidthBins = 7

WidthBins

integer (kind=i4), private, PARAMETER, dimension (nWidthBins-1) :: WidthBins = (/ 70, 100, 200, 300, 500, 1000 /)

DC_nAdjHits

integer (kind=i4), private, DIMENSION(MAX_PLANES_D,MAX_WIRES_D,max_nAway) :: DC_nAdjHits = 0

DC_nXtalkHits

integer (kind=i4), private, DIMENSION(MAX_PLANES_D,MAX_WIRES_D,max_nAway) :: DC_nXtalkHits = 0

DC_nWideHits

integer (kind=i4), private, DIMENSION(MAX_PLANES_D, nWidthBins) :: DC_nWideHits = 0

DC_nCausedXtalk

integer (kind=i4), private, DIMENSION(MAX_PLANES_D, nWidthBins) :: DC_nCausedXtalk = 0

DC_nAllHits

integer (kind=i4), private, DIMENSION(MAX_PLANES_D,MAX_WIRES_D) :: DC_nAllHits = 0

DC_PlaneMultSum

integer (kind=i4), private, DIMENSION(MAX_PLANES_D) :: DC_PlaneMultSum = 0

DC_EventSum

integer (kind=i4), private, DIMENSION(MAX_PLANES_D) :: DC_EventSum = 0

DC_WireSingleHit

integer (kind=i4), private, DIMENSION(MAX_PLANES_D) :: DC_WireSingleHit = 0

DC_WireMultHit

integer (kind=i4), private, DIMENSION(MAX_PLANES_D) :: DC_WireMultHit = 0

PC_nAdjHits

integer (kind=i4), private, DIMENSION(MAX_PLANES_P,MAX_WIRES_P,max_nAway) :: PC_nAdjHits = 0

PC_nXtalkHits

integer (kind=i4), private, DIMENSION(MAX_PLANES_P,MAX_WIRES_P,max_nAway) :: PC_nXtalkHits = 0

PC_nWideHits

integer (kind=i4), private, DIMENSION(MAX_PLANES_P, nWidthBins) :: PC_nWideHits = 0

PC_nCausedXtalk

integer (kind=i4), private, DIMENSION(MAX_PLANES_P, nWidthBins) :: PC_nCausedXtalk = 0

PC_nAllHits

integer (kind=i4), private, DIMENSION(MAX_PLANES_P,MAX_WIRES_P) :: PC_nAllHits = 0

PC_PlaneMultSum

integer (kind=i4), private, DIMENSION(MAX_PLANES_P) :: PC_PlaneMultSum = 0

PC_EventSum

integer (kind=i4), private, DIMENSION(MAX_PLANES_P) :: PC_EventSum = 0

PC_WireSingleHit

integer (kind=i4), private, DIMENSION(MAX_PLANES_P) :: PC_WireSingleHit = 0

PC_WireMultHit

integer (kind=i4), private, DIMENSION(MAX_PLANES_P) :: PC_WireMultHit = 0

Description of Subroutines and Functions

XtalkInit

public subroutine XtalkInit ()
end subroutine XtalkInit

XTalk

public subroutine XTalk ()
    ! Calls: XTalkFillHists, XTalk_Main, XtalkAfterFillHists
end subroutine XTalk
 ========================================================
  September 1999
 --------------------------------------------------------
  Crosstalk counters
 Art Olin added call to remove xtalk hits from the whits structures.
 Marc Lalancette June 2002, added layer to call generic subroutine 
    for PCs and DCs and fixed errors in the algorithm.
    (introduced new ones and fixed those too :)
 Marc Lalancette August 2002, trimmed down, fast version of xtalk.
 ========================================================

Author: Maher Quraan

Version: 2.1

XTalk_Main

private subroutine XTalk_Main (FirstPlane, LastPlane, Plane, Wire, nPhits, Whits, nWhits, tdc, WidthCut, WidthDiffCut, TDCuts, H, nAdjHits, nXtalkHits, nWideHits, nCausedXtalk, nAllHits, nAway, PlaneMultSum, EventSum, WireSingleHit, WireMultHit, IsXtalk)
    integer (kind=i4), INTENT(IN) :: FirstPlane
    integer (kind=i4), INTENT(IN) :: LastPlane
    type (plane_type), INTENT(IN), dimension (:) :: Plane
    type (wire_type), INTENT(IN), dimension (:,:) :: Wire
    integer (kind=i4), INTENT(INOUT), dimension (:) :: nPhits
    type (whits_type), INTENT(INOUT), TARGET, dimension (:,:) :: Whits
    integer (kind=i4), INTENT(INOUT) :: nWhits
    type (tdc_type), INTENT(INOUT), TARGET, dimension (:) :: tdc
    real (kind=r4), INTENT(IN) :: WidthCut
    real (kind=r4), INTENT(IN) :: WidthDiffCut
    real (kind=r4), INTENT(IN), dimension (:) :: TDCuts
    integer (kind=i4), INTENT(IN), dimension (2) :: H
    integer (kind=i4), INTENT(INOUT), dimension (:,:,:) :: nAdjHits
    integer (kind=i4), INTENT(INOUT), dimension (:,:,:) :: nXtalkHits
    integer (kind=i4), INTENT(INOUT), dimension (:,:) :: nWideHits
    integer (kind=i4), INTENT(INOUT), dimension (:,:) :: nCausedXtalk
    integer (kind=i4), INTENT(INOUT), dimension (:,:) :: nAllHits
    integer (kind=i4), INTENT(IN) :: nAway
    integer (kind=i4), INTENT(INOUT), dimension (:) :: PlaneMultSum
    integer (kind=i4), INTENT(INOUT), dimension (:) :: EventSum
    integer (kind=i4), INTENT(INOUT), dimension (:) :: WireSingleHit
    integer (kind=i4), INTENT(INOUT), dimension (:) :: WireMultHit
    logical, INTENT(INOUT), dimension (:) :: IsXtalk
    ! Calls: Xtalk_FindMisses, Xtalk_IsDouble, hf2, kerror
end subroutine XTalk_Main

XtalkPrint

public subroutine XtalkPrint ()
    ! Calls: CrossTalkPrint, kerror
end subroutine XtalkPrint

XtalkFillHists

private subroutine XtalkFillHists ()
    ! Calls: CrossTalkFillHists, XtalkPCHists
end subroutine XtalkFillHists

XtalkAfterFillHists

private subroutine XtalkAfterFillHists ()
    ! Calls: CrossTalkFillHists, XtalkPCHists
end subroutine XtalkAfterFillHists

XtalkPCHists

private subroutine XtalkPCHists (FirstPlane, LastPlane, nPhits, Whits, tdc, H)
    integer (kind=i4), INTENT(IN) :: FirstPlane
    integer (kind=i4), INTENT(IN) :: LastPlane
    integer (kind=i4), INTENT(IN), dimension (:) :: nPhits
    type (whits_type), INTENT(IN), TARGET, dimension (:,:) :: Whits
    type (tdc_type), INTENT(IN), TARGET, dimension (:) :: tdc
    integer (kind=i4), INTENT(IN), dimension (:) :: H
    ! Calls: hf2
end subroutine XtalkPCHists

CrossTalkFillHists

private subroutine CrossTalkFillHists (FirstPlane, LastPlane, nPhits, Whits, tdc, H, WidthCut, TimeDiffCuts)
    integer (kind=i4), INTENT(IN) :: FirstPlane
    integer (kind=i4), INTENT(IN) :: LastPlane
    integer (kind=i4), INTENT(IN), dimension (:) :: nPhits
    type (whits_type), INTENT(IN), TARGET, dimension (:,:) :: Whits
    type (tdc_type), INTENT(IN), TARGET, dimension (:) :: tdc
    integer (kind=i4), INTENT(IN), dimension (2) :: H
    real (kind=r4), INTENT(IN) :: WidthCut
    real (kind=r4), INTENT(IN), dimension (:) :: TimeDiffCuts
    ! Calls: hf1, hf2
end subroutine CrossTalkFillHists