(file) Return to hms_track.f CVS log (file) (dir) Up to [HallC] / pol_hms_single

Diff for /pol_hms_single/hms_track.f between version 1.2 and 1.3

version 1.2, 2003/12/19 13:37:28 version 1.3, 2004/01/20 16:02:58
Line 75 
Line 75 
       CHARACTER filename*(*)       CHARACTER filename*(*)
       INTEGER   maxorder       INTEGER   maxorder
       LOGICAL   path       LOGICAL   path
       REAL      p0        REAL*8      p0
  
 * --  load the HMS forward (cosy) map * --  load the HMS forward (cosy) map
 * *
Line 106 
Line 106 
 *       l      : exponent of the actual path length *       l      : exponent of the actual path length
 *       d      : exponent of the delta *       d      : exponent of the delta
  
       REAL       fac,me        REAL*8       fac,me
       PARAMETER (fac = 0.9904599)        PARAMETER (fac = 0.9904599d00)
       PARAMETER (me  = 0.00051099906)        PARAMETER (me  = 0.00051099906d00)
  
       include 'trans_map.inc'       include 'trans_map.inc'
  
Line 126 
Line 126 
       ENDDO       ENDDO
  
       DO i=1,NLINES       DO i=1,NLINES
        c1(i) = 0.         c1(i) = 0.d00
        c2(i) = 0.         c2(i) = 0.d00
        c3(i) = 0.         c3(i) = 0.d00
        c4(i) = 0.         c4(i) = 0.d00
        c5(i) = 0.         c5(i) = 0.d00
        e1(i) = 0        e1(i) = 0
        e2(i) = 0        e2(i) = 0
        e3(i) = 0        e3(i) = 0
Line 152 
Line 152 
       DO WHILE (eof .GE. 0)       DO WHILE (eof .GE. 0)
  
         i = e1(num)+e2(num)+e3(num)+e4(num)+e5(num)+e6(num)         i = e1(num)+e2(num)+e3(num)+e4(num)+e5(num)+e6(num)
         IF ((i .LE. maxorder) .AND. ((c1(num) .NE. 0.0) .OR.          IF ((i .LE. maxorder) .AND. ((c1(num) .NE. 0.0d00) .OR.
      >       (c2(num) .NE. 0.0) .OR. (c3(num) .NE. 0.0) .OR.       >       (c2(num) .NE. 0.0) .OR. (c3(num) .NE. 0.0d00) .OR.
      >       (c4(num) .NE. 0.0) .OR. (c5(num) .NE. 0.0))) THEN       >       (c4(num) .NE. 0.0) .OR. (c5(num) .NE. 0.0d00))) THEN
           IF (i .GT. order)    order    = i           IF (i .GT. order)    order    = i
           IF (0 .EQ. first(m)) first(m) = num           IF (0 .EQ. first(m)) first(m) = num
           last(m) = num           last(m) = num
Line 178 
Line 178 
  
       SUBROUTINE hmsApplyCOSY (u,num)       SUBROUTINE hmsApplyCOSY (u,num)
       IMPLICIT NONE       IMPLICIT NONE
       REAL    u(6)        REAL*8    u(6)
       INTEGER num       INTEGER num
  
 * --  apply a COSY matrix on the COSY vector u * --  apply a COSY matrix on the COSY vector u
Line 196 
Line 196 
       include 'trans_map.inc'       include 'trans_map.inc'
  
       ! other variables       ! other variables
       REAL    a,uu1(0:10),uu2(0:10),uu3(0:10)        REAL*8    a,uu1(0:10),uu2(0:10),uu3(0:10)
       REAL      uu4(0:10),uu5(0:10),uu6(0:10)        REAL*8      uu4(0:10),uu5(0:10),uu6(0:10)
       INTEGER i       INTEGER i
  
       ! calculate the powers of the focal plane coordinates       ! calculate the powers of the focal plane coordinates
       uu1(0) = 1.        uu1(0) = 1.d00
       uu2(0) = 1.        uu2(0) = 1.d00
       uu3(0) = 1.        uu3(0) = 1.d00
       uu4(0) = 1.        uu4(0) = 1.d00
       uu5(0) = 1.        uu5(0) = 1.d00
       uu6(0) = 1.        uu6(0) = 1.d00
       uu1(1) = u(1)       uu1(1) = u(1)
       uu2(1) = u(2)       uu2(1) = u(2)
       uu3(1) = u(3)       uu3(1) = u(3)
Line 223 
Line 223 
       ENDDO       ENDDO
  
       DO i=1,5       DO i=1,5
         u(i) = 0.          u(i) = 0.d00
       ENDDO       ENDDO
  
       ! apply the cosy matrix       ! apply the cosy matrix
Line 244 
Line 244 
  
       SUBROUTINE hmsForward (uT,zT,u,zz,lost)       SUBROUTINE hmsForward (uT,zT,u,zz,lost)
       IMPLICIT none       IMPLICIT none
       REAL     uT(6),zT,u(6),zz        REAL*8     uT(6),zT,u(6),zz
       LOGICAL  lost       LOGICAL  lost
  
 * --  make a single step transport calculation (without treating the acceptance) * --  make a single step transport calculation (without treating the acceptance)
Line 273 
Line 273 
       INTEGER i       INTEGER i
  
       lost = .FALSE.       lost = .FALSE.
       zz   = 26.44743        zz   = 26.44743d00
  
       ! copy the target coordinates to the u vector       ! copy the target coordinates to the u vector
       DO i=1,6       DO i=1,6
Line 294 
Line 294 
  
       LOGICAL FUNCTION hmsCheckDipole (u,zz,dz)       LOGICAL FUNCTION hmsCheckDipole (u,zz,dz)
       IMPLICIT NONE       IMPLICIT NONE
       REAL     u(6),zz,dz        REAL*8     u(6),zz,dz
  
 * --  check for the dipole aperture * --  check for the dipole aperture
 * *
Line 312 
Line 312 
  
       hmsCheckDipole = .TRUE.       hmsCheckDipole = .TRUE.
  
       IF (ABS(u(1)).GT.0.27940.OR.ABS(u(3)).GT.0.18415) THEN        IF (ABS(u(1)).GT.0.27940d00.OR.ABS(u(3)).GT.0.18415d00) THEN
         IF (ABS(u(1)).GT.0.34290.OR.ABS(u(3)).GT.0.20320) RETURN          IF (ABS(u(1)).GT.0.34290d00.OR.ABS(u(3)).GT.0.20320d00) RETURN
         IF (ABS(u(1)).GT.0.27940.AND.ABS(u(3)).GT.0.12065) THEN          IF (ABS(u(1)).GT.0.27940d00.AND.ABS(u(3)).GT.0.12065d00) THEN
           IF (((ABS(u(1))-0.27940)**2 +            IF (((ABS(u(1))-0.27940d00)**2 +
      >         (ABS(u(3))-0.12065)**2).GT.0.06350**2) RETURN       >         (ABS(u(3))-0.12065d00)**2).GT.(0.06350d00)**2) RETURN
         ENDIF         ENDIF
         IF (ABS(u(1)).GT.0.13970 .OR.          IF (ABS(u(1)).GT.0.13970d00 .OR.
      >     (ABS(u(1))-10.1852*ABS(u(3))).GT.2.069633) RETURN       >     (ABS(u(1))-10.1852d00*ABS(u(3))).GT.2.069633d00) RETURN
       ENDIF       ENDIF
  
       hmsCheckDipole = .FALSE.       hmsCheckDipole = .FALSE.
Line 331 
Line 331 
  
       LOGICAL FUNCTION hmsCheckQuad (u,zz,dz,r)       LOGICAL FUNCTION hmsCheckQuad (u,zz,dz,r)
       IMPLICIT NONE       IMPLICIT NONE
       REAL     u(6),zz,dz,r        REAL*8     u(6),zz,dz,r
  
 * --  check for the quadrupole aperture * --  check for the quadrupole aperture
 * *
Line 356 
Line 356 
  
       LOGICAL FUNCTION hmsDriftOcta (u,zz,dz,x,y,m,b)       LOGICAL FUNCTION hmsDriftOcta (u,zz,dz,x,y,m,b)
       IMPLICIT NONE       IMPLICIT NONE
       REAL     u(6),zz,dz,x,y,m,b        REAL*8     u(6),zz,dz,x,y,m,b
  
 * --  drift electron and check for the octagon * --  drift electron and check for the octagon
 * *
Line 384 
Line 384 
  
       LOGICAL FUNCTION hmsDriftTPlate (u,zz,dz,r,y)       LOGICAL FUNCTION hmsDriftTPlate (u,zz,dz,r,y)
       IMPLICIT NONE       IMPLICIT NONE
       REAL     u(6),zz,dz,r,y        REAL*8     u(6),zz,dz,r,y
  
 * --  drift electron and check for the dipole transition plate * --  drift electron and check for the dipole transition plate
 * *
Line 407 
Line 407 
  
       LOGICAL FUNCTION hmsDriftCirc (u,zz,dz,r)       LOGICAL FUNCTION hmsDriftCirc (u,zz,dz,r)
       IMPLICIT NONE       IMPLICIT NONE
       REAL     u(6),zz,dz,r        REAL*8     u(6),zz,dz,r
  
 * --  drift electron and check for circular aperture * --  drift electron and check for circular aperture
 * *
Line 434 
Line 434 
  
       LOGICAL FUNCTION hmsDriftRect (u,zz,dz,x0,x,y0,y)       LOGICAL FUNCTION hmsDriftRect (u,zz,dz,x0,x,y0,y)
       IMPLICIT NONE       IMPLICIT NONE
       REAL     u(6),zz,dz,x0,x,y0,y        REAL*8     u(6),zz,dz,x0,x,y0,y
  
 * --  drift electron and check for rectangular aperture * --  drift electron and check for rectangular aperture
 * *
Line 462 
Line 462 
  
       SUBROUTINE hmsAccept (uT,zT,u,zz,lost)       SUBROUTINE hmsAccept (uT,zT,u,zz,lost)
       IMPLICIT none       IMPLICIT none
       REAL     uT(6),zT,u(6),zz        REAL*8     uT(6),zT,u(6),zz
       LOGICAL  lost       LOGICAL  lost
  
 * --  make a transport calculation to find the acceptance * --  make a transport calculation to find the acceptance
Line 493 
Line 493 
       LOGICAL hmsDriftCirc       LOGICAL hmsDriftCirc
       LOGICAL hmsDriftRect       LOGICAL hmsDriftRect
  
       REAL    uS(6)        REAL*8    uS(6)
       INTEGER i       INTEGER i
  
       lost  = .TRUE.       lost  = .TRUE.
Line 507 
Line 507 
       ! ----------------------------------------------------------- sive slit       ! ----------------------------------------------------------- sive slit
       ! drift to sieve slit: z=1.27636m,       ! drift to sieve slit: z=1.27636m,
       !   octagon edge m=2.545977, b=0.13502640m       !   octagon edge m=2.545977, b=0.13502640m
       IF (hmsDriftOcta(u,zz,1.27636-zT,0.0900176,0.0353568,        IF (hmsDriftOcta(u,zz,1.27636d00,0.0900176d00,0.0353568d00,
      >                                 2.5459770,0.1350264)) RETURN       >                                 2.5459770d00,0.1350264d00)) RETURN
  
       ! drift to back of sieve slit: z=1.33986m, dz=0.0635m       ! drift to back of sieve slit: z=1.33986m, dz=0.0635m
       !   octagon edge m=2.546569, b=0.141655189 m       !   octagon edge m=2.546569, b=0.141655189 m
       IF (hmsDriftOcta(u,zz,0.0635,0.0944368,0.0370839,        IF (hmsDriftOcta(u,zz,0.0635d00,0.0944368d00,0.0370839d00,
      >                             2.546569,0.141655189)) RETURN       >                             2.546569d00,0.141655189d00)) RETURN
  
       ! ------------------------------------------------------------------ Q1       ! ------------------------------------------------------------------ Q1
       ! drift to mechanical entrance of Q1: z=1.4960m, dz=0.15614m       ! drift to mechanical entrance of Q1: z=1.4960m, dz=0.15614m
       IF (hmsDriftCirc(u,zz,0.15614,0.202575)) RETURN        IF (hmsDriftCirc(u,zz,0.15614d00,0.202575d00)) RETURN
  
       ! drift to Q1 entrance EFB: z=1.775805635m, dz=0.279805635m       ! drift to Q1 entrance EFB: z=1.775805635m, dz=0.279805635m
       u(1)=u(1)+u(2)*0.279805635        u(1)=u(1)+u(2)*0.279805635d00
       u(3)=u(3)+u(4)*0.279805635        u(3)=u(3)+u(4)*0.279805635d00
  
       ! and save values       ! and save values
       DO i=1,6       DO i=1,6
Line 530 
Line 530 
  
       ! transport through Q1 fringe fields:       ! transport through Q1 fringe fields:
       CALL hmsApplyCOSY (u,1)       CALL hmsApplyCOSY (u,1)
       IF (hmsCheckQuad(u,zz,0.279805635,0.202575)) RETURN        IF (hmsCheckQuad(u,zz,0.279805635d00,0.202575d00)) RETURN
  
       ! transport through Q1, 1/5 at a time:       ! transport through Q1, 1/5 at a time:
       DO i=1,4       DO i=1,4
         CALL hmsApplyCOSY (u,2)         CALL hmsApplyCOSY (u,2)
         IF (hmsCheckQuad(u,zz,1.87838873/5.,0.202575)) RETURN          IF (hmsCheckQuad(u,zz,1.87838873d00/5.d00,0.202575d00)) RETURN
       ENDDO       ENDDO
  
       ! restore values:       ! restore values:
Line 545 
Line 545 
  
       ! transport to Q1 exit EFB:       ! transport to Q1 exit EFB:
       CALL hmsApplyCOSY (u,3)       CALL hmsApplyCOSY (u,3)
       IF (hmsCheckQuad(u,zz,1.87838873/5.,0.202575)) RETURN        IF (hmsCheckQuad(u,zz,1.87838873d00/5.d00,0.202575d00)) RETURN
  
       ! drift to Q1 mechanical exit: z=3.9340m, dz=0.279805635m       ! drift to Q1 mechanical exit: z=3.9340m, dz=0.279805635m
       IF (hmsDriftCirc(u,zz,0.279805635,0.202575)) RETURN        IF (hmsDriftCirc(u,zz,0.279805635d00,0.202575d00)) RETURN
  
       ! ------------------------------------------------------------------ Q2       ! ------------------------------------------------------------------ Q2
       ! drift to mechanical entrance of Q2: z=4.5610m, dz=0.6270m       ! drift to mechanical entrance of Q2: z=4.5610m, dz=0.6270m
       IF (hmsDriftCirc(u,zz,0.6270,0.29840)) RETURN        IF (hmsDriftCirc(u,zz,0.6270d00,0.29840d00)) RETURN
  
       ! drift to Q2 entrance EFB: z=4.887021890m, dz=0.326021890m       ! drift to Q2 entrance EFB: z=4.887021890m, dz=0.326021890m
       u(1)=u(1)+u(2)*0.326021890        u(1)=u(1)+u(2)*0.326021890d00
       u(3)=u(3)+u(4)*0.326021890        u(3)=u(3)+u(4)*0.326021890d00
  
       ! and save values       ! and save values
       DO i=1,6       DO i=1,6
Line 565 
Line 565 
  
       ! transport through Q2 fringe fields:       ! transport through Q2 fringe fields:
       CALL hmsApplyCOSY (u,4)       CALL hmsApplyCOSY (u,4)
       IF (hmsCheckQuad(u,zz,0.326021890,0.29840)) RETURN        IF (hmsCheckQuad(u,zz,0.326021890d00,0.29840d00)) RETURN
  
       ! transport through Q2, 1/5 at a time:       ! transport through Q2, 1/5 at a time:
       DO i=1,4       DO i=1,4
         CALL hmsApplyCOSY (u,5)         CALL hmsApplyCOSY (u,5)
         IF (hmsCheckQuad(u,zz,2.15595622/5.,0.29840)) RETURN          IF (hmsCheckQuad(u,zz,2.15595622d00/5.d00,0.29840d00)) RETURN
       ENDDO       ENDDO
  
       ! restore values:       ! restore values:
Line 580 
Line 580 
  
       ! transport to Q2 exit EFB:       ! transport to Q2 exit EFB:
       CALL hmsApplyCOSY (u,6)       CALL hmsApplyCOSY (u,6)
       IF (hmsCheckQuad(u,zz,2.15595622/5.,0.29840)) RETURN        IF (hmsCheckQuad(u,zz,2.15595622d00/5.d00,0.29840d00)) RETURN
  
       ! drift to Q2 mechanical exit: z=7.3690m, dz=0.326021890m       ! drift to Q2 mechanical exit: z=7.3690m, dz=0.326021890m
       IF (hmsDriftCirc(u,zz,0.326021890,0.29840)) RETURN        IF (hmsDriftCirc(u,zz,0.326021890d00,0.29840d00)) RETURN
  
       ! ------------------------------------------------------------------ Q3       ! ------------------------------------------------------------------ Q3
       ! drift to mechanical entrance of Q3: z=7.6610m, dz=0.2920m       ! drift to mechanical entrance of Q3: z=7.6610m, dz=0.2920m
       IF (hmsDriftCirc(u,zz,0.2920,0.29840)) RETURN        IF (hmsDriftCirc(u,zz,0.2920d00,0.29840d00)) RETURN
  
       ! drift to Q3 entrance EFB: z=7.990200290m, dz=0.329200290m       ! drift to Q3 entrance EFB: z=7.990200290m, dz=0.329200290m
       u(1)=u(1)+u(2)*0.329200290        u(1)=u(1)+u(2)*0.329200290d00
       u(3)=u(3)+u(4)*0.329200290        u(3)=u(3)+u(4)*0.329200290d00
  
       ! save values       ! save values
       DO i=1,6       DO i=1,6
Line 600 
Line 600 
  
       ! transport through Q3 fringe fields:       ! transport through Q3 fringe fields:
       CALL hmsApplyCOSY (u,7)       CALL hmsApplyCOSY (u,7)
       IF (hmsCheckQuad(u,zz,0.329200290,0.29840)) RETURN        IF (hmsCheckQuad(u,zz,0.329200290d00,0.29840d00)) RETURN
  
       DO i=1,4       DO i=1,4
         CALL hmsApplyCOSY (u,8)         CALL hmsApplyCOSY (u,8)
         IF (hmsCheckQuad(u,zz,2.14959942/5.,0.29840)) RETURN          IF (hmsCheckQuad(u,zz,2.14959942d00/5.d00,0.29840d00)) RETURN
       ENDDO       ENDDO
  
       ! and restore values:       ! and restore values:
Line 614 
Line 614 
  
       ! transport to Q3 exit EFB:       ! transport to Q3 exit EFB:
       CALL hmsApplyCOSY (u,9)       CALL hmsApplyCOSY (u,9)
       IF (hmsCheckQuad(u,zz,2.14959942/5.,0.29840)) RETURN        IF (hmsCheckQuad(u,zz,2.14959942d00/5.d00,0.29840d00)) RETURN
  
       ! drift to Q3 mechanical exit: z=10.4690m, dz=0.329200290m       ! drift to Q3 mechanical exit: z=10.4690m, dz=0.329200290m
       IF (hmsDriftCirc(u,zz,0.329200290,0.29840)) RETURN        IF (hmsDriftCirc(u,zz,0.329200290d00,0.29840d00)) RETURN
  
       ! -------------------------------------------------------------- Dipole       ! -------------------------------------------------------------- Dipole
       ! drift to transition plate: z=11.058002m, dz=0.589002m       ! drift to transition plate: z=11.058002m, dz=0.589002m
       IF (hmsDriftTPlate(u,zz,0.589002,0.30480,0.205232)) RETURN        IF (hmsDriftTPlate(u,zz,0.589002d00,0.30480d00,0.205232d00)) RETURN
  
       ! drift to opposite side of transition plate: z=11.092800m, dz=0.034798m       ! drift to opposite side of transition plate: z=11.092800m, dz=0.034798m
       IF (hmsDriftTPlate(u,zz,0.034798,0.30480,0.205232)) RETURN        IF (hmsDriftTPlate(u,zz,0.034798d00,0.30480d00,0.205232d00)) RETURN
       IF (hmsCheckDipole(u,zz,0.)) RETURN        IF (hmsCheckDipole(u,zz,0.d00)) RETURN
  
       ! drift to D magnetic entrance: z=11.55m, dz=0.4572m       ! drift to D magnetic entrance: z=11.55m, dz=0.4572m
       u(1)=u(1)+u(2)*0.4572        u(1)=u(1)+u(2)*0.4572d00
       u(3)=u(3)+u(4)*0.4572        u(3)=u(3)+u(4)*0.4572d00
       IF (hmsCheckDipole(u,zz,0.4572)) RETURN        IF (hmsCheckDipole(u,zz,0.4572d00)) RETURN
  
       ! save values:       ! save values:
       DO i=1,6       DO i=1,6
Line 639 
Line 639 
  
       ! transport through 1/5 D with rotated entrance face:       ! transport through 1/5 D with rotated entrance face:
       CALL hmsApplyCOSY (u,10)       CALL hmsApplyCOSY (u,10)
       IF (hmsCheckDipole(u,zz,5.26053145/5.)) RETURN        IF (hmsCheckDipole(u,zz,5.26053145d00/5.d00)) RETURN
  
       ! transport through 3/5 D with sector segments:       ! transport through 3/5 D with sector segments:
       DO i=1,3       DO i=1,3
         CALL hmsApplyCOSY (u,11)         CALL hmsApplyCOSY (u,11)
         IF (hmsCheckDipole(u,zz,5.26053145/5.)) RETURN          IF (hmsCheckDipole(u,zz,5.26053145d00/5.d00)) RETURN
       ENDDO       ENDDO
  
       ! restore values:       ! restore values:
Line 654 
Line 654 
  
       ! transport through D (entrance to exit, fringe fields included):       ! transport through D (entrance to exit, fringe fields included):
       CALL hmsApplyCOSY (u,13)       CALL hmsApplyCOSY (u,13)
       IF (hmsCheckDipole(u,zz,5.26053145/5.)) RETURN        IF (hmsCheckDipole(u,zz,5.26053145d00/5.d00)) RETURN
  
       ! drift to transition plate: z=0.4572m, dz=0.4572m       ! drift to transition plate: z=0.4572m, dz=0.4572m
       IF (hmsDriftTPlate(u,zz,0.457200,0.34290,0.205232)) RETURN        IF (hmsDriftTPlate(u,zz,0.457200d00,0.34290d00,0.205232d00)) RETURN
       IF (hmsCheckDipole(u,zz,0.)) RETURN        IF (hmsCheckDipole(u,zz,0.d00)) RETURN
  
       ! drift to opposite side of transition plate: z=0.491998m,dz=0.034798m       ! drift to opposite side of transition plate: z=0.491998m,dz=0.034798m
       IF (hmsDriftTPlate(u,zz,0.034798,0.34290,0.205232)) RETURN        IF (hmsDriftTPlate(u,zz,0.034798d00,0.34290d00,0.205232d00)) RETURN
  
       ! drift to end of first piece of telescope: z=1.119378m, dz=0.62738m       ! drift to end of first piece of telescope: z=1.119378m, dz=0.62738m
       IF (hmsDriftCirc(u,zz,0.62738,0.338450)) RETURN        IF (hmsDriftCirc(u,zz,0.62738d00,0.338450d00)) RETURN
  
       ! drift to end of second piece of telescope: z=4.086098m, dz=2.96672m       ! drift to end of second piece of telescope: z=4.086098m, dz=2.96672m
       IF (hmsDriftCirc(u,zz,2.96672,0.384175)) RETURN        IF (hmsDriftCirc(u,zz,2.96672d00,0.384175d00)) RETURN
  
       ! drift to end of third piece of telescope: z=5.578398m, dz=1.4923m       ! drift to end of third piece of telescope: z=5.578398m, dz=1.4923m
       IF (hmsDriftCirc(u,zz,1.49230,0.460375)) RETURN        IF (hmsDriftCirc(u,zz,1.49230d00,0.460375d00)) RETURN
  
       ! ----------------------------------------------------------------- hut       ! ----------------------------------------------------------------- hut
       ! drift to focal plane.  This is the reference point for detector positions.       ! drift to focal plane.  This is the reference point for detector positions.
       u(1)=u(1)+u(2)*0.671602        u(1)=u(1)+u(2)*0.671602d00
       u(3)=u(3)+u(4)*0.671602        u(3)=u(3)+u(4)*0.671602d00
       zz = zz + 0.671602        zz = zz + 0.671602d00
       DO i=1,6       DO i=1,6
         uS(i)=u(i)         uS(i)=u(i)
       ENDDO       ENDDO
  
       ! drift to DC1 entrance: z=-0.51923-0.036=-0.55523m, dz=-0.55523m       ! drift to DC1 entrance: z=-0.51923-0.036=-0.55523m, dz=-0.55523m
       IF(hmsDriftRect(u,zz,-0.55523,-0.01670,0.565,-0.00343,0.26))RETURN        IF(hmsDriftRect(u,zz,-0.55523d00,-0.01670d00,0.565d00,-0.00343d00,0.26d00))RETURN
       ! drift to DC1 exit: z=-0.51923+0.054=-0.46523m, dz=0.090m       ! drift to DC1 exit: z=-0.51923+0.054=-0.46523m, dz=0.090m
       IF(hmsDriftRect(u,zz, 0.09000,-0.01670,0.565,-0.00343,0.26))RETURN        IF(hmsDriftRect(u,zz, 0.09000d00,-0.01670d00,0.565d00,-0.00343d00,0.26d00))RETURN
       ! drift to DC2 entrance: z=0.29299-0.036=0.25699m, dz=0.72222m       ! drift to DC2 entrance: z=0.29299-0.036=0.25699m, dz=0.72222m
       IF(hmsDriftRect(u,zz, 0.72222,-0.02758,0.565,-0.01653,0.26))RETURN        IF(hmsDriftRect(u,zz, 0.72222d00,-0.02758d00,0.565d00,-0.01653d00,0.26d00))RETURN
       ! drift to DC2 exit: z=0.29299+0.054=0.34699m, dz=0.090m       ! drift to DC2 exit: z=0.29299+0.054=0.34699m, dz=0.090m
       IF(hmsDriftRect(u,zz, 0.09000,-0.02758,0.565,-0.01653,0.26))RETURN        IF(hmsDriftRect(u,zz, 0.09000d00,-0.02758d00,0.565d00,-0.01653d00,0.26d00))RETURN
  
       ! drift to S1X: z=0.7783m, dz=0.43131m       ! drift to S1X: z=0.7783m, dz=0.43131m
       IF (hmsDriftRect(u,zz,0.43131,0.015,0.6025,0.000,0.3775)) RETURN        IF (hmsDriftRect(u,zz,0.43131d00,0.015d00,0.6025d00,0.000d00,0.3775d00)) RETURN
       ! drift to S1Y: z=0.9752m, dz=0.1969m       ! drift to S1Y: z=0.9752m, dz=0.1969m
       IF (hmsDriftRect(u,zz,0.19690,0.000,0.6025,0.001,0.3775)) RETURN        IF (hmsDriftRect(u,zz,0.19690d00,0.000d00,0.6025d00,0.001d00,0.3775d00)) RETURN
       ! skip CK - no survey information       ! skip CK - no survey information
       ! drift to S2X: z=2.9882m, dz=2.013m       ! drift to S2X: z=2.9882m, dz=2.013m
       IF (hmsDriftRect(u,zz,2.01300,0.004,0.6025,0.000,0.3775)) RETURN        IF (hmsDriftRect(u,zz,2.01300d00,0.004d00,0.6025d00,0.000d00,0.3775d00)) RETURN
       ! drift to S2Y: z=3.1851m, dz=0.1969m       ! drift to S2Y: z=3.1851m, dz=0.1969m
       IF (hmsDriftRect(u,zz,0.19690,0.000,0.6025,0.013,0.3775)) RETURN        IF (hmsDriftRect(u,zz,0.19690d00,0.000d00,0.6025d00,0.013d00,0.3775d00)) RETURN
  
       ! drift to CAL: z=3.3869m, dz=0.2018m       ! drift to CAL: z=3.3869m, dz=0.2018m
       IF (hmsDriftRect(u,zz,0.20180,-0.134,0.6000,0.000,0.3000)) RETURN        IF (hmsDriftRect(u,zz,0.20180d00,-0.134d00,0.6000d00,0.000d00,0.3000d00)) RETURN
  
       ! --------------------------------------------------------------- done       ! --------------------------------------------------------------- done
       lost = .FALSE.       lost = .FALSE.
Line 774 
Line 774 
       PARAMETER (NTERMS=1000)       PARAMETER (NTERMS=1000)
  
       INTEGER   e1(NTERMS),e2(NTERMS),e3(NTERMS),e4(NTERMS),num,order       INTEGER   e1(NTERMS),e2(NTERMS),e3(NTERMS),e4(NTERMS),num,order
       REAL      c1(NTERMS),c2(NTERMS),c3(NTERMS),c4(NTERMS)        REAL*8      c1(NTERMS),c2(NTERMS),c3(NTERMS),c4(NTERMS)
       COMMON    /hmsRecon/num,order,e1,e2,e3,e4,c1,c2,c3,c4       COMMON    /hmsRecon/num,order,e1,e2,e3,e4,c1,c2,c3,c4
  
       ! other variables       ! other variables
Line 800 
Line 800 
           READ (line,20,IOSTAT=eof)           READ (line,20,IOSTAT=eof)
      >      c2(num), c3(num), c4(num), c1(num),      >      c2(num), c3(num), c4(num), c1(num),
      >      e1(num), e2(num), e3(num), e4(num), e5      >      e1(num), e2(num), e3(num), e4(num), e5
           IF (((c1(num) .NE. 0.0) .OR. (c2(num) .NE. 0.0) .OR.            IF (((c1(num) .NE. 0.0d00) .OR. (c2(num) .NE. 0.0d00) .OR.
      >         (c3(num) .NE. 0.0) .OR. (c4(num) .NE. 0.0)) .AND.       >         (c3(num) .NE. 0.0d00) .OR. (c4(num) .NE. 0.0d00)) .AND.
      >        (e5 .EQ. 0) .AND. (eof .EQ. 0)) THEN      >        (e5 .EQ. 0) .AND. (eof .EQ. 0)) THEN
             i = e1(num) + e2(num) + e3(num) + e4(num)             i = e1(num) + e2(num) + e3(num) + e4(num)
             IF (i .GT. order) order = i             IF (i .GT. order) order = i
Line 824 
Line 824 
  
       IMPLICIT NONE       IMPLICIT NONE
  
       REAL uT(6), du(4)        REAL*8 uT(6), du(4)
  
 * --  calculates the focal plane correction for a given * --  calculates the focal plane correction for a given
 *     set of target coordinates *     set of target coordinates
Line 866 
Line 866 
       include 'trans_map.inc'       include 'trans_map.inc'
  
       ! other variables       ! other variables
       REAL    a,uu1(0:10),uu2(0:10),uu3(0:10),uu4(0:10),uu6(0:10)        REAL*8    a,uu1(0:10),uu2(0:10),uu3(0:10),uu4(0:10),uu6(0:10)
       INTEGER i       INTEGER i
  
       uu1(0) = 1.        uu1(0) = 1.d00
       uu2(0) = 1.        uu2(0) = 1.d00
       uu3(0) = 1.        uu3(0) = 1.d00
       uu4(0) = 1.        uu4(0) = 1.d00
       uu6(0) = 1.        uu6(0) = 1.d00
  
       ! drift backwards to z=0       ! drift backwards to z=0
       uu1(1)=uT(1)-uT(2)*uT(5)       uu1(1)=uT(1)-uT(2)*uT(5)
Line 886 
Line 886 
  
       ! calculate the powers of the COSY coordinates       ! calculate the powers of the COSY coordinates
       DO i=1,4       DO i=1,4
         du(i) = 0.          du(i) = 0.d00
       ENDDO       ENDDO
  
       DO i=2,order       DO i=2,order
Line 922 
Line 922 
  
       SUBROUTINE hmsReconInPlane (u,uT,ok)       SUBROUTINE hmsReconInPlane (u,uT,ok)
       IMPLICIT NONE       IMPLICIT NONE
       REAL     u(4),uT(6)        REAL*8     u(4),uT(6)
       LOGICAL  ok       LOGICAL  ok
  
 * --  performs the reconstruction of the target coordinates * --  performs the reconstruction of the target coordinates
Line 947 
Line 947 
       PARAMETER (NTERMS=1000)       PARAMETER (NTERMS=1000)
  
       INTEGER   e1(NTERMS),e2(NTERMS),e3(NTERMS),e4(NTERMS),num,order       INTEGER   e1(NTERMS),e2(NTERMS),e3(NTERMS),e4(NTERMS),num,order
       REAL      c1(NTERMS),c2(NTERMS),c3(NTERMS),c4(NTERMS)        REAL*8      c1(NTERMS),c2(NTERMS),c3(NTERMS),c4(NTERMS)
       COMMON    /hmsRecon/num,order,e1,e2,e3,e4,c1,c2,c3,c4       COMMON    /hmsRecon/num,order,e1,e2,e3,e4,c1,c2,c3,c4
  
       ! other variables       ! other variables
       REAL    a,uu1(0:10),uu2(0:10),uu3(0:10),uu4(0:10)        REAL*8    a,uu1(0:10),uu2(0:10),uu3(0:10),uu4(0:10)
       INTEGER i       INTEGER i
  
  
       DO i=1,6       DO i=1,6
         uT(i)  = 0.          uT(i)  = 0.d00
       ENDDO       ENDDO
  
       ! calculate the powers of the focal plane coordinates       ! calculate the powers of the focal plane coordinates
  
       uu1(0) = 1.        uu1(0) = 1.d00
       uu2(0) = 1.        uu2(0) = 1.d00
       uu3(0) = 1.        uu3(0) = 1.d00
       uu4(0) = 1.        uu4(0) = 1.d00
  
       uu1(1) = u(1)       uu1(1) = u(1)
       uu2(1) = u(2)       uu2(1) = u(2)
       uu3(1) = u(3)       uu3(1) = u(3)
       uu4(1) = u(4)       uu4(1) = u(4)
   
       DO i=2,order       DO i=2,order
         uu1(i)=uu1(i-1)*uu1(1)         uu1(i)=uu1(i-1)*uu1(1)
         uu2(i)=uu2(i-1)*uu2(1)         uu2(i)=uu2(i-1)*uu2(1)
         uu3(i)=uu3(i-1)*uu3(1)         uu3(i)=uu3(i-1)*uu3(1)
         uu4(i)=uu4(i-1)*uu4(1)         uu4(i)=uu4(i-1)*uu4(1)
       ENDDO       ENDDO
   
       ! calculate the target coordinates       ! calculate the target coordinates
       DO i = 1, num       DO i = 1, num
         a = uu1(e1(i)) * uu2(e2(i)) * uu3(e3(i)) * uu4(e4(i))         a = uu1(e1(i)) * uu2(e2(i)) * uu3(e3(i)) * uu4(e4(i))
Line 998 
Line 996 
  
       SUBROUTINE hmsReconOutOfPlane (u,x,uT,ok)       SUBROUTINE hmsReconOutOfPlane (u,x,uT,ok)
       IMPLICIT NONE       IMPLICIT NONE
       REAL     u(4),x,uT(6)        REAL*8     u(4),x,uT(6)
       LOGICAL  ok       LOGICAL  ok
  
 * --  performs the reconstruction of the target coordinates * --  performs the reconstruction of the target coordinates
Line 1019 
Line 1017 
 *                   - set to false when no reconstruction is found *                   - set to false when no reconstruction is found
 *                                     momentum from p0) *                                     momentum from p0)
  
       REAL       eps        REAL*8       eps
       PARAMETER (eps = 0.0005) ! accuracy in delta        PARAMETER (eps = 0.0005d00) ! accuracy in delta
  
       REAL       dd,du(4),u0(4)        REAL*8       dd,du(4),u0(4)
       INTEGER    n       INTEGER    n
  
  
   
       CALL hmsReconInPlane (u,uT,ok)     ! first guess       CALL hmsReconInPlane (u,uT,ok)     ! first guess
       uT(1) = x       uT(1) = x
   c
   c
         du(1) = 0.d00
         du(2) = 0.d00
         du(3) = 0.d00
         du(4) = 0.d00
  
       du(1) = 0.        dd = 1.d00
       du(2) = 0.  
       du(3) = 0.  
       du(4) = 0.  
   
       dd = 1.  
       n  = 0       n  = 0
   
       DO WHILE ((ABS(dd) .GT. eps) .AND. (n .LT. 10) .AND. ok)       DO WHILE ((ABS(dd) .GT. eps) .AND. (n .LT. 10) .AND. ok)
  
         CALL  hmsReconOffset (uT,du)         CALL  hmsReconOffset (uT,du)
Line 1062 
Line 1059 
       RETURN       RETURN
       END       END
  
   


Legend:
Removed from v.1.2  
changed lines
  Added in v.1.3

Analyzer/Replay: Mark Jones, Documents: Stephen Wood
Powered by
ViewCVS 0.9.2-cvsgraph-1.4.0