*-- Author : I. O. Skillicorn 16/11/92 SUBROUTINE FPPJ23 c fpphit called **: FPPJ23 40000 IS. New linking code. **---------------------------------------------------------------------- **: FPPJ23 30907 RP. Farm changes. **---------------------------------------------------------------------- C JOIN 2 PLANAR MODULES - 2+3 COMMON/FGMIOS/ * PLANAR GEOMETRY + ZPP(140),C(140),S(140),ITYPE(140),WZERO(140),WSPACE, * * RADIAL GEOMETRY + ZP(36),PHW(36),WS(36) *KEEP,FPJPAR. COMMON/FPJPAR/ + RRCUT1, RRCUT2, RRCUT3, + PLCC3, PLCC12, PLCC23, PLCC13 *KEND. COMMON/FTPS3/NS(3),SPAR(4,50,3),IPT(12,50,3),IPLA(12,50,3), 1 SGN(12,50,3),YYS(12,50,3),YYF(12,50,3) COMMON/FTPLNK/LINK,CHIL(100),LNK(3,100),IUS(100,3) COMMON/FTPPBK/NPP,IPP(36,100),CHPP(100),LP(3,100) COMMON/FPPFIT/PSSS(100),PISS(100),RSSS(100),RISS(100) COMMON/FKLOC/KLOC(100) COMMON/FEVSAT/IEVSAT COMMON/fsegtp/iseg(100,3) DIMENSION PSS(100),PIS(100),RSS(100),RIS(100) DIMENSION PPP(50) ,TH(50),XX(50),YY(50),ZZ(50),WP(50),WPP(50) DIMENSION CH(100) PI2=6.283185307 * RRCUT=10.0 LINK=0 LINKO=LINK DO 200 J=1,NS(2) IF(IUS(J,2).NE.0)GOTO200 Z2=ZPP(18) * X2=SPAR(3,J,2)*Z2+SPAR(4,J,2) * Y2=SPAR(1,J,2)*Z2+SPAR(2,J,2) DO 300 K=1,NS(3) IF(IUS(K,3).NE.0)GOTO300 Z3=ZPP(30) * X3=SPAR(3,K,3)*Z3+SPAR(4,K,3) * Y3=SPAR(1,K,3)*Z3+SPAR(2,K,3) ZM=0.5*(Z2+Z3) X2M=SPAR(3,J,2)*ZM+SPAR(4,J,2) Y2M=SPAR(1,J,2)*ZM+SPAR(2,J,2) X3M=SPAR(3,K,3)*ZM+SPAR(4,K,3) Y3M=SPAR(1,K,3)*ZM+SPAR(2,K,3) RR= ((X2M-X3M)**2+(Y2M-Y3M)**2) CALL SHS(902,0,RR) RRCUT=RRCUT1 If( iseg(j,2).gt.1 + .or. iseg(k,3).gt.1 )RRCUT=RRCUT2 If( iseg(j,2).gt.2 + .or. iseg(k,3).gt.2 )RRCUT=RRCUT3 IF(RR.GT.RRCUT)GOTO300 call fpphit(2,3,j,k,iflag) if(iflag.eq.1)goto300 IC=0 DO 400 L=2,3 CSB IF(L.EQ.1)II=I IF(L.EQ.2)II=J IF(L.EQ.3)II=K DO 410 LL=1,12 IP=(L-1)*12+LL ZA=ZPP(IP) XF=SPAR(3,II,L)*ZA+SPAR(4,II,L) YF=SPAR(1,II,L)*ZA+SPAR(2,II,L) IC=IC+1 XX(IC)=ZA YY(IC)=ATAN2(YF,XF) ZZ(IC)=SQRT(XF**2+YF**2) IF(YY(IC).LT.0.0)YY(IC)=YY(IC)+PI2 WP(IC)=1./(0.10/ZZ(IC)) WPP(IC)=1.0 410 CONTINUE 400 CONTINUE IF(IC .GT. 1)THEN DO600 JJ=2,IC DP = YY(JJ)-YY(JJ-1) IF(DP.GT.0.) THEN IF(ABS(DP).GT.ABS(DP-PI2))YY(JJ)=YY(JJ)-PI2 ELSE IF(ABS(DP).GT.ABS(DP+PI2))YY(JJ)=YY(JJ)+PI2 ENDIF 600 CONTINUE ENDIF C FIT PHI-Z CALL FTLFTW(XX,YY,WP,IC,0,2,PS,PI,D1,D2,D3,D4) C FIT R-Z CALL FTLFTW(XX,ZZ,WPP,IC,0,2,RS,RI,D1,D2,D3,D4) CHIP=0. DO 700 JJ=1,IC CHIP=CHIP+(YY(JJ)-PS*XX(JJ)-PI)**2*WP(JJ)**2 * DIFF=YY(JJ)-PS*XX(JJ)-PI * PRINT1002,JJ,(YY(JJ)-PS*XX(JJ)-PI)**2*WP(JJ)**2,YY(JJ),DIFF 1002 FORMAT(' ',I3,F10.2,2F10.4) 700 CONTINUE CHIP=CHIP/24. CALL FPCHI(2,3,J,K,CHID) CALL SHS(520,0,CHIP) CALL SHS(573,0,CHID) * Remove Links with poor Chisq... 18/11/93 IF(CHID.GT.PLCC23)GOTO300 * LINK=LINK+1 IF(LINK.GT.100)LINK=100 CHIL(LINK)=CHIP CH(LINK)=CHID LNK(1,LINK)=0 LNK(2,LINK)=J LNK(3,LINK)=K PSS(LINK)=PS PIS(LINK)=PI RSS(LINK)=RS RIS(LINK)=RI C MOMENTUM FROM ANGLE CHANGE * T1=ATAN2(SPAR(1,J,2),SPAR(3,J,2)) * IF(T1.LT.0.)T1=T1+PI2 * T2=ATAN2(SPAR(1,K,3),SPAR(3,K,3)) * IF(T2.LT.0.)T2=T2+PI2 * TANT=(SQRT(X3**2+Y3**2)-SQRT(X2**2+Y2**2))/(Z3-Z2) * SL=SQRT((X2-X3)**2+(Y2-Y3)**2) * THET=ATAN(TANT) * DIFF=T2-T1 * IF(DIFF.LT.-3.14)DIFF=DIFF+PI2 * IF(DIFF.GT.3.14)DIFF=DIFF-PI2 * PP=1000. * IF(DIFF.NE.0.0)PP=-0.0002998*12.*SL/(DIFF*SIN(THET)) * PPP(LINK)=PP C CALL SHS(580,0,1./PP) C CALL SHS(581,0,1./PP) C CALL SHS(582,0,PP) * II=LINK * PRINT 1001,II,LNK(1,II),LNK(2,II),LNK(3,II),CHIL(II) 1001 FORMAT(' PJ12I',I3,2X,3I3,F10.2) 300 CONTINUE 200 CONTINUE 100 CONTINUE C NEW COMPARE SECTION LLL=LINK DO 500 LOOP=1,LLL CHB=100000. KB=0 C SELECT BEST DO 510 K=1,LLL IF(CH(K).LT.0.0)GOTO 510 * IF(LNK(1,K).EQ.0)GOTO 510 IF(LNK(2,K).EQ.0)GOTO 510 IF(LNK(3,K).EQ.0)GOTO 510 * WRITE(*,*)' K ,CHI ',K,CH(K),LNK(1,K),LNK(2,K),LNK(3,K) IF(CH(K).LT.CHB)THEN CHB=CH(K) KB=K ENDIF 510 CONTINUE * WRITE(*,*)' KB,CHIB ',KB,CHB IF(KB.EQ.0)GOTO 545 C COMPARE BEST WITH REMAINDER DO 520 K=1,LLL IF(K.EQ.KB)GOTO520 * IF(LNK(1,K).EQ.0)GOTO520 IF(LNK(2,K).EQ.0)GOTO520 IF(LNK(3,K).EQ.0)GOTO520 * IF(LNK(1,K).EQ.LNK(1,KB))GOTO530 IF(LNK(2,K).EQ.LNK(2,KB))GOTO530 IF(LNK(3,K).EQ.LNK(3,KB))GOTO530 GOTO 520 C REMOVE LINK 530 LNK(1,K)=0 LNK(2,K)=0 LNK(3,K)=0 * WRITE(*,*)' REMOVE ',K 520 CONTINUE C COMPARE FINISHED , MARK BEST SEGMENT USED CH(KB)=-CH(KB) 500 CONTINUE C RESET CHI WHEN COMPARE FINISHED 545 DO 540 LOOP=1,LLL IF(CH(LOOP).LT.0.0)CH(LOOP)=-CH(LOOP) 540 CONTINUE C C C DO 550 I=LINKO+1,LINK IF(LNK(2,I).EQ.0)GOTO550 C SET USED FLAG C IUS(LNK(1,I),1)=1 IUS(LNK(2,I),2)=1 IUS(LNK(3,I),3)=1 1000 FORMAT(' PJN23',I3,1X,2(1X,12I2),F6.2,F7.2) C L1=LNK(1,I) L2=LNK(2,I) L3=LNK(3,I) C PRINT 1000,I,(IPT(III,L2,2),III=1,12) C 1,(IPT(III,L3,3),III=1,12) C 1,CHIL(I),PPP(I) NPP=NPP+1 IF(NPP.GT.100) THEN NPP = 100 IEVSAT = 1 ENDIF KLOC(NPP)=3 LP(1,NPP)=00 LP(2,NPP)=L2 LP(3,NPP)=L3 PSSS(NPP)=PSS(I) PISS(NPP)=PIS(I) RSSS(NPP)=RSS(I) RISS(NPP)=RIS(I) DO 551 KK=1,12 C IPP(KK,NPP)=IPT(KK,L1,1) IPP(KK+12,NPP)=IPT(KK,L2,2) IPP(KK+24,NPP)=IPT(KK,L3,3) 551 CONTINUE CHPP(NPP)=CH(I) PROD=PROB(CH(I)*24.,24) CALL SHS(577,0,PROD ) CALL SHS(550,0,6.001) CALL SHS(550,0,10.001) 550 CONTINUE RETURN END *