C+ C NAME: C print_max_determine.f C PURPOSE: C print out the average value of the maximum extremma from the images C CATEGORY: C I/O C CALLING SEQUENCE: C print_max_determine(JJ,NSTAR,NOBS,XS1,YS1,CXS1M,CXSIT,XS1MCOP,YS1MCOP,XS1MCP,YS1MCP,ROTA) C C INPUTS: C JJ integer Stellar value number 1 for Polaris, 2 for ????, etc C NSTAR integer Total number of stars possible C NOBS integer Number of star images used C XS1 (NOBS) real Input X value C YS1 (NOBS) real Input Y value C CXS1M (NSTAR,NOBS) real observed distance from the pole to the center of the image in pixels C CXSIT (NSTAR,NOBS) real theoretical distance from the pole to the center of the image in pixels C XS1MCOP(NSTAR,NOBS) real X value from the old center of the image in pixels C YS1MCOP(NSTAR,NOBS) real Y value from the old center of the image in pixels C XS1MCP (NSTAR,NOBS) real X value from the new center of the image in pixels C YS1MCP (NSTAR,NOBS) real Y value from the new center of the image in pixels C ROTA (NSTAR,NOBS) real Rotation of the original image to the Polaris position C C OUTPUTS: C JJ integer Stellar value number 1 for Polaris, 2 for ????, etc C I integer image number C ACXS1T real Average theoretical distance to the image zenith in pixels C ACXS1M real Average observed distance to the image center in pixels C ACXTMM real Average difference between the theoretical and observes center in pixels C AXS1 real Average input X value C AYS1 real Average input Y value C AII real Number of values used in this average determination of the above C ROTAA1 real Rotation of the original image to the Polaris position C C FUNCTIONS/SUBROUTINES: C C MODIFICATION HISTORY: C September-2022, Bernard Jackson (UCSD) C- subroutine print_max_determine(JJ,NSTAR,NOBS,XS1,YS1,CXS1M,CXS1T,XS1MCOP,YS1MCOP,XS1MCP,YS1MCP,ROTA) real XS1 (NOBS), & YS1 (NOBS) real CXS1M (NSTAR,NOBS), & CXS1T (NSTAR,NOBS), & XS1MCOP (NSTAR,NOBS), & YS1MCOP (NSTAR,NOBS), & XS1MCP (NSTAR,NOBS), & YS1MCP (NSTAR,NOBS), & ROTA (NSTAR,NOBS) real ACYS1MS (40), & ACXS1TS (40), & AXS1S (40), & AYS1S (40), & ROTAA1S (40), & AIIS (40), & ACXYTMMS (40), & ACYS1MN (40), & ACXS1TN (40), & AXS1N (40), & AYS1N (40), & ROTAA1N (40), & AIIN (40), & ACXYTMMN (40), & ACYS1MW (40), & ACXS1TW (40), & AXS1W (40), & AYS1W (40), & ROTAA1W (40), & AIIW (40), & ACXYTMMW (40), & ACYS1ME (40), & ACXS1TE (40), & AXS1E (40), & AYS1E (40), & ROTAA1E (40), & AIIE (40), & ACXYTMME (40) integer IIS (40), & IIN (40), & IIW (40), & IIE (40) character cY*1, & cX*1, & cidentify*30 print*, ' ' print*, ' Into print_max_determine' print*, ' ' if(JJ.eq.1) cidentify = 'Polaris' if(JJ.eq.2) cidentify = 'Beta Andomeda' if(JJ.eq.3) cidentify = 'Delta Capricornus' if(JJ.eq.4) cidentify = 'Epsilon Andomeda' if(JJ.eq.5) cidentify = 'Gamma Draco' if(JJ.eq.6) cidentify = 'Saturn' print*, 'Max-Min values for ', cidentify J = JJ print*, ' ' print*, 'Times where x values are zero - North and South' AIINT = 0.0 ACXYTMMNT = 0.0 AIIST = 0.0 ACXYTMMST = 0.0 IX0 = 0 IS = 0 INN = 0 do I=1,NOBS if(XS1MCOP(J,I).ge.-50.0.and.XS1MCOP(J,I).le.50.0) then if(IX0.eq.0) then II = I AII = 1.0 cY ='N' if(YS1MCOP(J,I).lt.0.0) then YS1MCOPM = -YS1MCOP(J,I) cY ='S' end if ACYS1M = YS1MCOPM ACXSIT = CXS1T(J,II) ROTAA1 = ROTA(J,II) AXS1 = XS1(II) AYS1 = YS1(II) IX0 = II end if II = I AII = AII + 1.0 ACYS1M = ACYS1M + abs(YS1MCOP(J,I)) ACXS1T = ACXS1T + CXS1T(J,II) AXS1 = AXS1 + XS1(II) AYS1 = AYS1 + YS1(II) ROTAA = ROTA(J,II) if(cy.eq.'N'.and.ROTA(J,II).gt.0.0.and.ROTA(J,II).lt.90.0) ROTAA = ROTAA + 360.0 ROTAA1 = ROTAA1 + ROTAA end if if(XS1MCOP(J,I).le.-100.0.or.XS1MCOP(J,I).ge.100.0) then if(IX0.ne.0) then if(AII.ne.0.0) then ACYS1M = ACYS1M/AII ACXS1T = ACXS1T/AII ACXYTMM = ACXS1T-ACYS1M AXS1 = AXS1/AII AYS1 = AYS1/AII ROTAA1 = ROTAA1/AII if(cy.eq.'S') then ! All south values C if(cy.eq.'S'.and.I.gt.637) then ! All south values IS = IS + 1 ACYS1MS(IS) = ACYS1M ACXS1TS(IS) = ACXS1T AXS1S(IS) = AXS1 AYS1S(IS) = AYS1 ROTAA1S(IS) = ROTAA1 AIIS(IS) = AII ACXYTMMS(IS) = ACXYTMM IIS(IS) = I AIIST = AIIST + AII ACXYTMMST = ACXYTMMST + ACXYTMM*AII else ! All north values if(ROTA(J,INN).ne.0.0) then INN = INN + 1 ACYS1MN(INN) = ACYS1M ACXS1TN(INN) = ACXS1T AXS1N(INN) = AXS1 AYS1N(INN) = AYS1 ROTAA1N(INN) = ROTAA1 AIIN(INN) = AII ACXYTMMN(INN) = ACXYTMM IIN(INN) = I AIINT = AIINT + AII ACXYTMMNT = ACXYTMMNT + ACXYTMM*AII end if end if end if C print*,' ' C write(*,'(A,I2,I5,1X,3F9.3,F7.3)') 'J,I,AXS1,AYS1,ROTAA1,AII ',J,I,AXS1,AYS1,ROTAA1,AII C write(*,'(A,I2,I5,1X,3F9.3,A1,F8.3)') 'J,I,ACXS1T,ACYS1M,ACXYTMM ',J,I,ACXS1T,ACYS1M,ACXYTMM,cY,ROTAA1 IX0 = 0 end if end if end do print*,' ' print*,'Average south discrepancies' cy = 'S' do I=1,IS write(*,'(A,I2,I5,1X,3F9.3,F8.3)') 'J,I,AXS1,AYS1,ROTAA1,AII ',J,IIS(I),AXS1S(I),AYS1S(I),ROTAA1S(I),AIIS(I) write(*,'(A,I2,I5,1X,3F9.3,A1,F8.3)') 'J,I,ACXS1T,ACYS1M,ACXYTMM ', & J,IIS(I),ACXS1TS(I),ACYS1MS(I),ACXYTMMS(I),cY,ROTAA1S(I) print*,' ' end do print*,'Average north discrepancies' cy = 'N' do I=1,INN write(*,'(A,I2,I5,1X,3F9.3,F8.3)') 'J,I,AXS1,AYS1,ROTAA1,AII ',J,IIN(I),AXS1N(I),AYS1N(I),ROTAA1N(I),AIIN(I) write(*,'(A,I2,I5,1X,3F9.3,A1,F8.3)') 'J,I,ACXS1T,ACYS1M,ACXYTMM ', & J,IIN(I),ACXS1TN(I),ACYS1MN(I),ACXYTMMN(I),cY,ROTAA1N(I) print*,' ' end do write(*,'(A,F8.3,A,I3,A,F8.3,A,I3,A)') 'South total discrepancy =',ACXYTMMST/AIIST,' (',nint(AIIST), & '), North total discrepancy =',ACXYTMMNT/AIINT,' (',nint(AIINT),')' print*,' ' print*,' ' print*, 'Times where y values are zero - East and West' AIIET = 0.0 ACXYTMMET = 0.0 AIIWT = 0.0 ACXYTMMWT = 0.0 IY0 = 0 IW = 0 IE = 0 do I=1,NOBS if(YS1MCOP(J,I).ge.-50.0.and.YS1MCOP(J,I).le.50.0) then if(IY0.eq.0) then II = I AII = 1.0 cX ='W' if(XS1MCOP(J,I).lt.0.0) then XS1MCOPM = -XS1MCOP(J,I) cX ='E' end if ACXS1M = XS1MCOPM ACXSIT = CXS1T(J,II) ROTAA1 = ROTA(J,II) AXS1 = XS1(II) AYS1 = YS1(II) IY0 = II end if II = I AII = AII + 1.0 ACXS1M = ACXS1M + abs(XS1MCOP(J,I)) ACXS1T = ACXS1T + CXS1T(J,II) AXS1 = AXS1 + XS1(II) AYS1 = AYS1 + YS1(II) ROTAA = ROTA(J,II) ROTAA1 = ROTAA1 + ROTAA end if if(YS1MCOP(J,I).le.-100.0.or.YS1MCOP(J,I).ge.100.0) then if(IY0.ne.0) then if(AII.ne.0.0) then ACXS1M = ACXS1M/AII ACXS1T = ACXS1T/AII ACXYTMM = ACXS1T-ACYS1M AXS1 = AXS1/AII AYS1 = AYS1/AII ROTAA1 = ROTAA1/AII if(cX.eq.'W') then ! All west values C if(cX.eq.'W'.and.I.gt.506) then IW = IW + 1 ACYS1MW(IW) = ACYS1M ACXS1TW(IW) = ACXS1T AXS1W(IW) = AXS1 AYS1W(IW) = AYS1 ROTAA1W(IW) = ROTAA1 AIIW(IW) = AII ACXYTMMW(IW) = ACXYTMM IIW(IW) = I AIIWT = AIIWT + AII ACXYTMMWT = ACXYTMMWT + ACXYTMM*AII else ! All east values IE = IE + 1 ACYS1ME(IE) = ACYS1M ACXS1TE(IE) = ACXS1T AXS1E(IE) = AXS1 AYS1E(IE) = AYS1 ROTAA1E(IE) = ROTAA1 AIIW(IE) = AII ACXYTMME(IE) = ACXYTMM IIW(IE) = I AIIET = AIIET + AII ACXYTMMET = ACXYTMMET + ACXYTMM*AII end if end if C print*,' ' C write(*,'(A,I2,I5,1X,3F9.3,F7.3)') 'J,I,AXS1,AYS1,ROTAA1,AII ',J,I,AXS1,AYS1,ROTAA1,AII C write(*,'(A,I2,I5,1X,3F9.3,A1,F8.3)') 'J,I,ACXS1T,ACYS1M,ACXYTMM ',J,I,ACXS1T,ACYS1M,ACXYTMM,cX,ROTAA1 IY0 = 0 end if end if end do print*,' ' print*,'Average east discrepancies' cy = 'E' do I=1,IE write(*,'(A,I2,I5,1X,3F9.3,F8.3)') 'J,I,AXS1,AYS1,ROTAA1,AII ',J,IIE(I),AXS1E(I),AYS1E(I),ROTAA1E(I),AIIE(I) write(*,'(A,I2,I5,1X,3F9.3,A1,F8.3)') 'J,I,ACXS1T,ACYS1M,ACXYTMM ', & J,IIE(I),ACXS1TE(I),ACYS1ME(I),ACXYTMME(I),cY,ROTAA1E(I) print*,' ' end do print*,'Average west discrepancies' cy = 'W' do I=1,IW write(*,'(A,I2,I5,1X,3F9.3,F8.3)') 'J,I,AXS1,AYS1,ROTAA1,AII ',J,IIW(I),AXS1W(I),AYS1W(I),ROTAA1W(I),AIIW(I) write(*,'(A,I2,I5,1X,3F9.3,A1,F8.3)') 'J,I,ACXS1T,ACYS1M,ACXYTMM ', & J,IIW(I),ACXS1TW(I),ACYS1MW(I),ACXYTMMW(I),cY,ROTAA1W(I) print*,' ' end do write(*,'(A,F8.3,A,I3,A,F8.3,A,I3,A)') 'East total discrepancy =',ACXYTMMET/AIIET,' (',nint(AIIET), & '), West total discrepancy =',ACXYTMMWT/AIIWT,' (',nint(AIIWT),')' print*,' ' print*, ' Out of print_max_determine' return end