*-- Author : I. O. Skillicorn SUBROUTINE FTLISA(IRN,IPN,IWC,IC,MAXC,NSS,IM,IDIAG) **: FTLISA 40000 SM. Initialise RR (else DDMIN*RR test might fail?). **: FTLISA 40000 SM. Add SEQ BOSMDL so farm change might work. **---------------------------------------------------------------------- **: FTLISA 30907 RP. Farm changes. **---------------------------------------------------------------------- C C PROCEDURE:- C 1 FORM CLUSTERS BASED ON WIRE HITS C 2 SELECT LARGEST CLUSTER . END IF TOO FEW HITS C OR ALL CLUSTERS HAVE BEEN EXAMINED. C 3 SEARCH FOR TRIPLES IN CLUSTER (UNUSED POINTS ONLY) C IF NO TRIPLES GOTO2 C 4 JOIN TRIPLES TO FORM LINE SEGMENTS C 5 SELECT LONGEST LINE SEGMENT C 6 EXTEND THIS LINE SEGMENT BY STRAIGHT LINE PROJECTION C IN DRIFT (AND R ) WITHIN CLUSTER. MARK USED POINTS. C 7 EXTEND FURTHER BY PROJECTION IN PHI INTO NEIGHBOURING C CLUSTERS . MARK USED POINTS . C 8 REEXAMINE LARGEST CLUSTER . IF INSUFFICIENT POINTS C ELIMINATE CLUSTER AND GOTO 2 . OTHERWISE GOTO 3. C C C AUTHOR: I.O.SKILLICORN *KEEP,FRDIMS. *KEEP,FH1WORK. * Planar geometry * * Radial geometry * * Radial data... * * Planar Data * * Pointers into DIGI bank for IOS labelled hits * * Track segment data * * Fit data * * *KEEP,FPTVTX. **the common/VERTEX/ becomes /VERTVV/ (in analogy to /VERTFF/) on the ** 17/6/91, since it is in conflict with the VERTEX module (g.bernardi) ** (note that all these common names should start by F in this deck...) *KEEP,FSGPAR. *KEEP,BCS. *KEEP,BOSMDL. C ------BOSMDL C ------ *KEND. * LOCAL ARRAYS * C MODS 13/5/91 FOLLOW TO SAVE SPACE VVVVVVVVVVVVVVVVVVVVVVVVV C ADD C CEND ADDITION ******************************************** C C NO DIAGNOSTIC HISTOGRAMS IDIAG=0 C * * > Chard * Hard-wired cuts if wanted, else take from COMMON/FSGPAR/ filled * by FPTINT from the FRCP bank. * C CUTS C MAXIMUM DISTANCE ( IN DRIFT) FOR DIGITISING C TO BE ASSOCIATED WITH TRIPLE(S) C IE ROAD WIDTH IS 2.*DMINX (CMS.) C SHOULD BE LESS THAN TWO-TRACK RESOLUTION 0.2 CMS C AND LESS THAN 4*STAGGER Chard DMINX=0.1 C Chard PROJ=0.0 C DMINX=DFCUT C MAXIMUM DISTANCE ( IN PHI ) FOR DIGITISING C TO BE ASSOCIATED WITH CLUSTER = PROJ*DMINX/R C C MINIMUM SIZE OF CLUSTER FOR STARTING TRIPLE FINDING Chard MINHTS=3 C C MINIMUM NUMBER OF POINTS/TRACK SEGMENT Chard MINPTS=4 C C MAX SIZE OF CLUSTER FOR ANALYSIS C C ABS((D1+D3)/2 -D2 ).LT.TSCUT FOR TRIPLE(OPEN FROM 0.08) Chard TSCUT=0.10 C IN JOINING TRIPLES ALL POINTS MUST LIE WITHIN +- TSCUT C OF FIRST AND LAST POINTS OF TRIPLES TO BE JOINED C C C MAX TRIPLE SLOPE- CORRESPONDS TO 0.25 GEV(OPEN FROM 0.25) Chard TSLPC=0.5 C SLOPE CUT FOR JOINING TRIPLES Chard SLCUT=0.15 C C MIN LENGTH OF SEGMENT BEFORE EXTENSION BY PROJECTION Chard LSCUT=3 C C CUT IN R FOR TRIPLE AND PROJECTION(OPEN FROM 20.) Chard RCUT=50. C C RCUT=RRCUT C DIAGNOSTIC HISTOGRAMS CALL STEXT(9000,4,' TRIPLE DISTANCE DEFINE -TSCUT ') CALL BHS(9000,0,50,-0.5,0.5 ) CALL STEXT(9001,4,' TRIPLE SLOPE -TSLPC ') CALL BHS(9001,0,50,-1.0,1.0 ) CALL STEXT(9002,4,' TRIPLE DISTANCE JOIN 1-TSCUT ') CALL BHS(9002,0,50,-0.5,0.5 ) CALL STEXT(9003,4,' TRIPLE DISTANCE JOIN 2-TSCUT ') CALL BHS(9003,0,50,-0.5,0.5 ) CALL STEXT(9004,4,' PROJECT- DMINX ') CALL BHS(9004,0,50,-0.51,0.49 ) CALL STEXT(9005,4,' PROJECT IN PHI - DMINX*PROJ ') CALL BHS(9005,0,50,-1.0,1.0 ) CALL STEXT(9006,4,' TRIPLE SLOPE CUT - SLCUT ') CALL BHS(9006,0,50,-0.5,0.5 ) CALL STEXT(9007,4,' PROJECT- DMINX DURING SELECTION ') CALL BHS(9007,0,50,0.00,1.00 ) CALL STEXT(9008,4,' PROJECT- DMINX FINAL ') CALL BHS(9008,0,50,0.00,0.20 ) CALL STEXT(9009,4,' RESIDUALS TO FINAL SEGMENT') CALL BHS(9009,0,50,-0.10,0.10 ) CALL STEXT(9010,4,' RESIDUALS TO FINAL SEGMENT') CALL BHS(9010,0,50, 0.0,0.20 ) CALL STEXT(9011,4,' RMS OF FIT ') CALL BHS(9011,0,50, 0.0,0.10 ) C C OPEN EXTRAPOLATION FOR CLEAN WEDGES C C C Chard NWIRES= 12 C C SEARCH FOR TRIPLES IN CLUSTER C WRITE(*,*)' LJ1 LP1',LJ1,LP1 C WRITE(*,*)' LJ2 LP2',LJ2,LP2 C WRITE(*,*)' LJ3 LP3',LJ3,LP3 C NOW HAVE POSSIBLE TRIPLE - LOOP OVER SIGNS C MAX TRIPLE SLOPE C MAX SLOPE OF TRIPLE C DDA= (D1+D3)*0.5-D2 C CALL HFILL(70004,DDAS,0.,1.) C POINTERS TO CLUSTER C WRITE(*,*)' TRI ',NTRI,II,JJ,KK C NUMBER POINTERS C DRIFT SIGN C Z OF CENTRE OF LAST TRIPLE C SLOPE OF TRIPLE C MEAN DRIFT C MEAN R C WRITE(*,*)' FTLISA NTRI ',NTRI * * * * * * C COMBINE TRIPLES TO FORM TRACK C CHECK FOR TWO POINTS IN COMMON WITH SAME DRIFT SIGNS C EXTEND TRIPLE BY ONE POINT C TWO POINTS AGREE,ADD FINAL POINT AFTER CHECKING C THAT ALL POINTS ARE WITHIN TOLERANCE OF LINE C CONNECTED TO FIRST AND LAST POINTS OF POTENTIAL C JOINED SEGMENTS C FIRST POINT FIRST TRIPLE C LAST POINT SECOND TRIPLE C POINTS C PLANES C DRIFT SIGNS C CHECK POINTS AGREE - FIRST TRIPLE C MEASURED C PREDICTED C WRITE(*,*)' T-J 1 ',N1,ABS(DP-D11),DMINX C CHECK POINTS AGREE - SECOND TRIPLE C WRITE(*,*)' T-J 2 ',N1,ABS(DP-D11),DMINX C WRITE(*,*)' ADD I,J ',I,J C PRINT1100, I,(LTRI(III, I),III=1,NL( I)) C PRINT1100, J,(LTRI(III, J),III=1,NL( J)) CDEB PRINT1100, I,(LTRI(III, I),III=1,NL( I)) C REPLACE Z,SLOPE,MEAN DRIFT C MARK J AS USED C ALLOW FOR ONE MISSING DIGITIZING, JOIN ACROSS GAP C CALL HFILL(70003,(SLTRI(I)-SLTRI(J)),0.,1.) C THEN C CHECK THAT ALL POINTS ARE WITHIN TOLERANCE OF LINE C CONNECTED TO FIRST AND LAST POINTS OF POTENTIAL C JOINED SEGMENTS C FIRST POINT FIRST TRIPLE C LAST POINT SECOND TRIPLE C POINTS C PLANES C DRIFT SIGNS C CHECK POINTS AGREE - FIRST TRIPLE C MEASURED C PREDICTED C WRITE(*,*)' T-J 1 ',N1,ABS(DP-D11),DMINX C CHECK POINTS AGREE - SECOND TRIPLE C WRITE(*,*)' T-J 2 ',N1,ABS(DP-D11),DMINX C JOIN C FLAG TRIPLE AS JOINED * * NOW HAVE JOINED TRIPLES - FIT * C WRITE(*,*)' NTRI TOT BEFORE DO 100 LOOP ',NTRI C PICK UP POINTS IN EXTENDED TRIPLE AND FIT STR LINE C WRITE(*,*)' FTLISA JOINED TRIPLES -NL ',KC,NL(KC) * * * C C C WRITE(*,*)' KCC ',KCC C WRITE(*,*)' KCC AT LIMIT - FTLISA ' C NOW LOOK FOR OTHER POINTS IN CLUSTER TO FILL C GAPS IN SEGMENT C IF POINT ON PLANE EXISTS IN TRIPLE GOTO60 C CHECK POINT IN R C PREDICT DRIFT AT THIS Z C IF(ABS(DDAS).GT.0.00001)CALL HFILL(70005,DDAS,0.,1.) C GOOD POINT C CLOSER TO LINE THAN PREVIOUS GOOD POINT - STORE C C C C WRITE(*,*)' I1,KCC,JPP,SDD ',I1,KCC,JPP,SDD(JPP,KCC) C PRINT 1003,KCC,NNPTS(KCC),CHI(KCC),(JDD(I2,KCC),I2=1,12) C PRINT 1103,KCC,NNPTS(KCC),CHI(KCC),(SDD(I2,KCC),I2=1,12) C WRITE(*,*)' AFTER DO 100 LOOP KCC',KCC C SELECT BEST LINE - LONGEST OR BEST CHI C WEIGHT=#POINTS C ONE OR MORE POINTS EXCESS - SELECT ON POINTS C SAME NUMBER POINTS - SELECT ON CHI C BAD CLUSTER - LT MINPTS POINTS C WRITE(*,*)' BAD CLUSTER LT MINPTS' C AT THIS POINT WE HAVE A GOOD SEGMENT C FILL OUTPUT BANK FOR FOUND SEGMENT C WRITE(*,*)' NTRAKS(IM) ',NT CDEB WRITE(*,*)' I,JP,IIG ',I,JP,IIG,SDD(I,IIG) C WRITE(*,*)' JPPMAX=0 OR JPPMIN=1000 ' C WRITE(*,*)' OUTPUT BANK BEFORE PROJECTION' C PRINT 1014,IM,NT,(IRPT(I1,NT,IM),I1=1,12) CDEB PRINT 1015,IM,NT,(SDRFT(I1,NT,IM),I1=1,12) C LOOK FOR CLUSTER ON NEARBY WIRES C CALCULATE PARAMETERS FOR PROJECTION IN PHI C UNLESS FULL LINE SEGMENT C C CHECK ADJACENT WIRE - LOWER NUMBER- SAVE IC C IF IC=1 EXAMINE 48 AS LOWER NUMBER C IF(IC.EQ.1)IC=49 C NOTE IABS BECAUSE THERE COULD BE USEFUL POINTS THAT DO NOT FORM TR C CHECK PHI CONTINUITY C PREDICT PHI CDEB WRITE(*,*)' LOW CLUSTER PHI ',PHIP,YN(1),YN(2) C DD2=ABS(YN(IS)-PHIP+PI2) C DD2=ABS(YN(IS)-PHIP-PI2) C DD=AMIN1(DD1,DD2,DD3) C CALL HFILL(70006,DDAS,0.,1.) C GOOD POINT - CONT. IN PHI CDEB WRITE(*,*)' OUTPUT BANK AFTER ADDING LOWER CLUSTER' CDEB PRINT 1004,NT,(IRPT(I1,NT,IM),I1=1,12) C1004 FORMAT(' IRPT ',I5,1X,12I3) CDEB PRINT 1005,NT,(SDRFT(I1,NT,IM),I1=1,12) C1005 FORMAT(' SDRFT',I5,1X,12F3.0) C RESET IC IN CASE CHANGED C CHECK ADJACENT WIRE - HIGHER NUMBER C IF IC=48 EXAMINE IC=1 AS HIGHER NUMBER C IF(IC.EQ.48)IC=0 C CHECK PHI CONTINUITY C PREDICT PHI CDEB WRITE(*,*)' HIGH CLUSTER PHI ',PHIP,YN(1),YN(2) C DD2=ABS(YN(IS)-PHIP+PI2) C DD2=ABS(YN(IS)-PHIP-PI2) C DD=AMIN1(DD1,DD2,DD3) C CALL HFILL(70006,DDAS,0.,1.) C GOOD POINT - CONT. IN PHI CDEB WRITE(*,*)' OUTPUT BANK AFTER ADDING HIGHER CLUSTER' CDEB PRINT 1004,NT,(IRPT(I1,NT,IM),I1=1,12) C1004 FORMAT(' IRPT ',I5,1X,12I3) CDEB PRINT 1005,NT,(SDRFT(I1,NT,IM),I1=1,12) C1005 FORMAT(' SDRFT',I5,1X,12F3.0) C RESET IC IN CASE CHANGED C WRITE(*,*)' NTIN,NTRAKS(IM) ',NTIN,NTRAKS(IM) C WRITE(*,*)' FTLISA OUT ',NTRAKS(IM) C PRINT 1014,IM,NT,(IRPT(I1,NT,IM),I1=1,12) C PRINT 1015,IM,NT,(SDRFT(I1,NT,IM),I1=1,12) C REEXAMINE CLUSTER C IF(IWC(IC).GT.0)THEN C WRITE(*,*)' GT 500 REEXAMINE CLUSTER IWC',IWC(IC),IC C DO 3000 I=1,10 C PRINT 4000,I,(IUSED(I,II),II=1,36) C 4000 FORMAT(' IUSED ',I5,3X,12I1,1X,12I1,1X,12I1) C 3000 CONTINUE C ENDIF C RESET DMINX C C CORRECT R FOR LORENTZ ANGLE FOR C FOUND TRACK SEGMENTS C PLANE # C POINT # C DRIFT SIGN 1 +FLOREN(RM(NP,IP),DRI(NP,IP),SGN) C C PRINT 1014,IM, I,(IRPT(I1, I,IM),I1=1,12) C PRINT 1015,IM, I,(SDRFT(I1, I,IM),I1=1,12) *