*-- Author : R. Henderson 24/10/94
SUBROUTINE FPSSGF(LSECSG)
C---------------------------------------------------------------
C
C Routine checks the connectivity of the found
C
C SECONDARY and TERTIARY segments
C
C and returns an optimized non-connected solution in MASKSG
C 0 = accept segment , -1 = reject segment
C
C the difference between this routine and FPSGRF is that it
C cannot assume that clusters are disconnected a priori
C
C---------------------------------------------------------------
C---
*KEEP,FPPRAM.
C
C--- MAXSEG is maximum number of segments per supermodule
C--- MAXCON is maximum number of amibiguous segments associatable with
C--- one segment
C--- LIMSTO is maximum number of 2 cluster planes intersections to be
C--- stored per supermodule
C--- MSEGLM is maximum number of clusters that can be found before
C--- connectivity considered
C--- MAXCLU is maximum number of clusters that can be found after
C--- forming non-connected set MUST BE 50 IF RUN WITH OLD RCW
C--- (cluster = 3/4 digits found in a straight line in one
C--- 4-wire orientation)
C
C---
*KEND.
C---
*KEEP,FPLSEG.
C---
C---
*KEND.
C---
*KEEP,FPCLUS.
C---
*KEEP,FPH1WRK.
C-- *KEEP,FPCSEG.
C---
C---
C-- *KEEP,FPDIGI.
C---
C-- *KEEP,FPDGI.
C---
C-- *KEEP,FPSTID.
C---
C-- *interface to real data
C---.
*KEND.
C---
*KEEP,FPSTSG.
C---
*KEND.
C
C---
C---
C---
C--- Local variables
C---
C--- ISGTAB (I,J) = segment number of Jth node connected to Ith node
C--- KSGTAB (I) = number of segments connected to Ith node
C--- MXLIS = list of nodes with maximum connectivity
C--- CHLIS = weight asscociated with each node listed in MXLIS
C
C
C--- input
C
C ASEGIN(SEG,SUPERMODULE) = chisquare of segment
C
C ISEGIN(1,SEG,SUPERMODULE) = 1st cluster-plane for segment
C ISEGIN(2,SEG,SUPERMODULE) = 2nd cluster-plane for segment
C ISEGIN(3,SEG,SUPERMODULE) = 3rd cluster-plane for segment
C ISEGIN(4,SEG,SUPERMODULE) = number of degree of freedom for segmen
C
C NFSEG(SUPERMODULE) = number of found segments per supermodu
C
C--- output
C
C MASKSG(SEG,SUPERMODULE) = 0 if allowed
C = -1 if lost
C
CALL FPPBIN
C
C--- loop over supermodules
C
C
C--- define where secondary segments start depending on whether
C--- called from Secondary or tertiary segment finder.
C
C
C--- zero ksgtab
C
C
C--- construct connectivity table
C
C
C--- 1st loop over segments
C
C
C--- remove if segs the same
C
C
C--- search to see if any cluster planes in common
C
C
C--- decode cluster planes
C
* IP1 = MOD(ICP1,10)
C---
C
C--- decode cluster planes
C
* IP2 = MOD(ICP2,10)
C
C--- if planes the same loop over wires to see if same digits used
C
C
C--- if digits are the same (and not 0) then build connection
C
* IF(ICL1 .EQ. 0 .OR. ICL2 .EQ. 0)GO TO 33
C
C
C
C--- found one in common , increment counter , store connection
C
C
C--- trap out of bounds. has been known to happen in MC!
C
C
C--- connection found skip furthur search of KSEG segment
C
C
C
C
C
C
C--- Start to remove connectivity
C
C
C--- Find the highest multiplicity
C
CALL VFLOAT(KSGTAB,FSGTAB,NFSEG(ISM))
C
C--- Loop over all segments and find those with same multiplicity
C
C IF(KSGTAB(ISEG) .LT. (IVMXSG-2)
C
C--- Find which segment contributes most to chisquare
C
C
C--- Find probablility of link segments
C
C
C--- Store probability of links less own prob
C
* Fix for v.small chisq...
PROB1 = FPPROB(CHISUM,NDFSUM)
C PROB1 = PROB(CHISUM,NDFSUM)
PROB2 = FPPROB(ASEGIN(MXSEG,ISM),ISEGIN(4,MXSEG,ISM))
C PROB2 = PROB(ASEGIN(MXSEG,ISM),ISEGIN(4,MXSEG,ISM))
* CHLIS(IMX) = PROB(CHISUM,NDFSUM) -
* 1 PROB(ASEGIN(MXSEG,ISM),ISEGIN(4,MXSEG,ISM))
C
C
C--- Find the segment with largest positive contribution
C
C
C--- Remove all reference to this segment from connectivity table
C
* KSGTAB(IWSEG) = -1
* DO 530 IS = NSTSSG, NFSEG(ISM)
* IF( KSGTAB(IS) .LT. 1)GO TO 530
* DO 531 ILS = 1, KSGTAB(IS)
* IF(ISGTAB(IS,ILS) .NE. IWSEG) GO TO 531
* ISGTAB(IS,ILS) = ISGTAB(IS,KSGTAB(IS))
* KSGTAB(IS) = KSGTAB(IS) - 1
* 531 CONTINUE
* 530 CONTINUE
C
C
C--- Repeat proceedure on remaining nodes
C
C
C
C
C--- No connectivity remaining
C
C---
C
C--- Write output bank
C
C
C--- Something horrible has happened - kill event!
C
CALL ERRLOG(217,'W:FPSSGF: Too much confusion! Planar data off')
*