diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 00000000..ef3d0197 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,5 @@ +cosy/cosy binary +cosy/JLAB.bin binary +cosy/COSY.bin binary +cosy/cosyman.pdf binary + diff --git a/cosy/.gitignore b/cosy/.gitignore new file mode 100644 index 00000000..c0aaceef --- /dev/null +++ b/cosy/.gitignore @@ -0,0 +1,5 @@ +foxyinp.dat +RKLOG.DAT +*.lis +*.dat +*.cod diff --git a/cosy/COSY.bin b/cosy/COSY.bin new file mode 100644 index 00000000..0d07ac61 Binary files /dev/null and b/cosy/COSY.bin differ diff --git a/cosy/JLAB.bin b/cosy/JLAB.bin new file mode 100644 index 00000000..7587b274 Binary files /dev/null and b/cosy/JLAB.bin differ diff --git a/cosy/cosy b/cosy/cosy new file mode 100755 index 00000000..9cf41da3 Binary files /dev/null and b/cosy/cosy differ diff --git a/cosy/cosyman.pdf b/cosy/cosyman.pdf new file mode 100644 index 00000000..ac7682c5 Binary files /dev/null and b/cosy/cosyman.pdf differ diff --git a/cosy/shms-2011-26cm-monte.fox b/cosy/shms-2011-26cm-monte.fox new file mode 100755 index 00000000..a12ff6ad --- /dev/null +++ b/cosy/shms-2011-26cm-monte.fox @@ -0,0 +1,335 @@ +{------------------------------------------------------------------------------ + Super-HMS spectrometer, with forward and reconstruction maps. + + VERSION for Monte Carlo maps + + Quads are (lengthened versions of) the HMS Q1 magnet. + Quad-Dipole is from the QD-separated model of 2005 + + A SPLITTER magnet (horiz bend) is inserted before Q1. + + Author: D. Potterveld, Argonne National Lab, June 2005 + MC version: DHP, Nov 2005 + +------------------------------------------------------------------------------ +} +INCLUDE 'JLAB' ; +PROCEDURE RUN ; + +{=========================== Variable Declarations ===========================} + + VARIABLE Z1C 1 ; VARIABLE L1 1 ; VARIABLE L1E 1 ; VARIABLE Q1MID 1 ; + VARIABLE Z2C 1 ; VARIABLE L2 1 ; VARIABLE L2E 1 ; VARIABLE Q2MID 1 ; + VARIABLE Z3C 1 ; VARIABLE L3 1 ; VARIABLE L3E 1 ; VARIABLE Q3MID 1; + VARIABLE ZDC 1 ; VARIABLE LD 1 ; VARIABLE LDE 1 ; + VARIABLE ZBC 1 ; VARIABLE LB 1; VARIABLE LBE 1; + VARIABLE DZD1 1 ; VARIABLE DZD2 1; + VARIABLE DZF1 1 ; VARIABLE DZF2 1; + VARIABLE XDIP 1; + VARIABLE DTILT 1; + VARIABLE FTILT1 1; VARIABLE FTILT2 1; + VARIABLE ZFM 1 ; + VARIABLE DR0 1; + VARIABLE DR1 1 ; + VARIABLE DR2 1 ; + VARIABLE DR3 1 ; + VARIABLE DR4 1 ; + VARIABLE DRF 1 ; + VARIABLE DRFOC 1; + VARIABLE DR0EN 1; VARIABLE DR0EX 1; + VARIABLE DR1EN 1; VARIABLE DR1EX 1; + VARIABLE DR2EN 1; VARIABLE DR2EX 1; + VARIABLE DR3EN 1; VARIABLE DR3EX 1; + VARIABLE DLEX 1; + VARIABLE Q1 1 ; { quadrupole strength } + VARIABLE Q2 1 ; { quadrupole strength } + VARIABLE Q3 1 ; { quadrupole strength } + VARIABLE Q3SCALE 1 ; { flag for scaling Q3 } + VARIABLE FILE 80 ; { filename} + VARIABLE QFILE 80 ; { filename} + VARIABLE TILT 1 ; { Focal plane tilt angle } + VARIABLE I 1 ; + VARIABLE TMP 1 ; + VARIABLE SNAME 4 ; {Spectrometer name} + VARIABLE FRMODE 1 ; {Fringe field mode } + VARIABLE MORDER 1 ; { Maximum order for transformations} + VARIABLE FORDER 1 ; {Order of forward maps } + VARIABLE RORDER 1 ; {Order of reconstruction map } + VARIABLE RES 1 4 ; {Resolution array } + + VARIABLE TMPSPOS 1000 ; { Saved value of SPOS } + VARIABLE GMAP 2000 8 ; { Global transfer map } + VARIABLE RMAP 2000 5 ; { Reconstruction map } + +{========================== Procedure declarations ===========================} + + { Output forward transformation data at an aperture and update internal maps } + + PROCEDURE APERTURE LABEL REGION ; + WRITE 20 '!NAME: '&LABEL ; + WRITE 20 '!REGION: '®ION ; + WRITE 20 '!OFFSET: '&SF(TMPSPOS,'(F25.16)')&' (in meters)' ; + WRITE 20 '!LENGTH: '&SF(SPOS,'(F25.16)')&' (canonical length in meters)' ; + PT 20 ; {Output data} + TMPSPOS := TMPSPOS + SPOS ; + ANM MAP GMAP GMAP ; UM ; {Update global map + reset} + WRITE 6 ' Aperture at S = '&S(TMPSPOS)&' '&LABEL ; + ENDPROCEDURE ; + + { Compute and output maps to inner aperture and exit of quad magnet. } + + PROCEDURE MAGQUAD NAME LEFF Q A FRAC ; + VARIABLE DRIFT 1 ; VARIABLE LMID 1 ; + +{ Compute the location of the inner aperture } + + LMID := (LEFF*FRAC) ; + + IF FRMODE#0 ; FR -1 ; MQ LEFF Q A ; ENDIF ; {Entrance fringe field} + FR 0 ; MQ LMID Q A ; {First part of quad} + APERTURE NAME&'_MID' 'FRONT' ; + + MQ LEFF-LMID Q A ; {Second part of quad} + IF FRMODE#0 ; FR -2 ; MQ LEFF Q A ; ENDIF ; {Exit fringe field} + + APERTURE NAME&'_MAGNETIC_EXIT' 'BACK' ; + + FR FRMODE ; ENDPROCEDURE ; {Restore fringe field mode} + +{ Q3 fieldmap } + + PROCEDURE QUAD ; + VARIABLE IS 1 ; + LOOP IS 1 4 ; FIELDMAP IS 'SHMS_Q3' ; ENDLOOP ; + ENDPROCEDURE ; + + +{Dipole fieldmap} + + PROCEDURE DIPOLE ; + VARIABLE IS 1 ; + LOOP IS 1 8 ; FIELDMAP IS 'SHMS_DIP' ; ENDLOOP ; + ENDPROCEDURE ; + +{================================= Main Code =================================} + +{ Beam specifications } + + MORDER := 6 ; {Max order for calculations} + OV morder 3 0 ; {Order Value <#par>} + + RPM 11000.0 5.4858E-4 -1 ; { } + + SB 0 .040 0 .050 .015 0 0 .15 0 0 0 ; +{ --> PX PA R12 PY PB R34 PT PD R56 PG PZ } + +{ Spectrometer name } + + SNAME := 'SHMS' ; + +{ Fringe-field specifications.} + + frmode := 3 ; + FR FRMODE ; + +{ Magnet geometry } + ZBC := 1.76 ; {Center of bender} + Z1C := 4.140 ; {Center of Q1} + Z2C := 6.80 ; {Center of Q2} + Z3C := 9.45 ; {Center of Q3} + + ZDC := 12.937; {Center of dipole - might not use for anything} + XDIP:= 0.26 ; {Dipole vertical offset} + DTILT:= 9.2*pi/180.0; {Dipole tilt} + + DZF1:= sqrt(4.933^2+(1.632-XDIP)^2); + FTILT1:= atan((1.632-XDIP)/4.933); + FTILT2:= FTILT1-DTILT ; + DZF2:= DZF1*cos(FTILT2); + + LB := 1.1522 ; + L1 := 2.44 ; {Physical length of Q1} + L2 := 2.369 ; {Physical length of Q2} + L3 := 2.369 ; {Physical length of Q3} + LD := 4.098 ; {Physical length of dipole} + + LBE := 0.751 ; {Effective length of bender} + L1E := 1.879 ; {Effective length of Q1} + L2E := 1.64 ; {Effective length of Q2} + L3E := 1.64 ; {Effective length of Q3} + LDE := 2.90 ; + + DRF:= (DZF2-LDE/2)/cos(DTILT); + +{ Compute some drift distances } + + DR0 := ZBC-(LB/2); {Drift from target to bender} + DR1 := (Z1C - ZBC) - ((LB + L1)/2) ; {Drift from Bender to Q1} + DR2 := (Z2C - Z1C) - ((L1 + L2)/2) ; {Drift from Q1 to Q2} + DR3 := (Z3C - Z2C) - ((L2 + L3)/2) ; {Drift from Q2 to Q3} +{ DR4 := (ZDC - Z3C) - ((L3 + LD)/2) ; {Drift from Q3 to dipole}} + DZD1:= XDIP/tan(DTILT); + DZD2:= (LDE/2-XDIP/sin(DTILT))/cos(DTILT); + DR4 := (ZDC-Z3C) - L3E/2 - DZD1 - DZD2 ; {Drift from Q3 to dipole} + + DR0EN := (LB-LBE)/2; {Drift from bender mech to mag ent} + DR0EX := (LB-LBE)/2; {Drift from bender mag to mech ex} + + DR1EN := (L1-L1E)/2; {Drift from Q1 mech to mag ent} + DR1EX := (L1-L1E)/2; {Drift from Q1 mag to mech ex} + + DR2EN := (L2-L2E)/2; {Drift from Q2 mech to mag ent} + DR2EX := (L2-L2E)/2; {Drift from Q2 mag to mech ex} + + DR3EN := (L3-L3E)/2; {Drift from Q3 mech to mag ent} + DR3EX := (L3-L3E)/2; {Drift from Q3 mag to mech ex} + + DLEX := 0.599/cos(DTILT) ; {Drift from dipole mag to mech exit} + DRFOC := DRF-DLEX ; + +{ QUAD STRENGTHS } + +{COSY solution} +{Let Q1/Q2/Q3 all vary: ME(5,2) = -1.2} + Q1 := -2.036634 ; + Q2 := 4.326750 ; + Q3 := -2.862092 ; + +{Let Q1/Q2/Q3 all vary: ME(5,2) = -0.8} +{ Q1 := -2.370969 ;} +{ Q2 := 4.330444 ;} +{ Q3 := -2.530578 ;} + +{ Computation order specifications } + + ASK forder 'Order for maps (1-'&SF(morder,'(i1)')&'): ' 1 morder ; + CO FORDER ; RORDER := FORDER ; + +{ Begin composing forward maps } + + qfile := SNAME&'_Q3S.dat' ; {Quad scaling symplectic map} + file := SNAME&'_fr'&sf(frmode,'(i1)')&'_for_maps.dat' ; + openf 20 file 'UNKNOWN' ; + + FR FRMODE ; + UM ; SM GMAP ; TMPSPOS := SPOS ; {Initialize global map} + +{ Insert splitter magnet } + + DL DR0 ; + APERTURE 'BENDER_MECHANICAL_ENTRANCE' 'FULL'; + DL DR0EN ; + APERTURE 'BENDER_MAGNETIC_ENTRANCE' 'FULL'; + + RA -90 ; DP 14.34959928 3.0 0.225 ; RA 90 ; {Bender} + APERTURE 'BENDER_MAGNETIC_EXIT' 'FULL' ; + + DL DR0EX ; + APERTURE 'BENDER_MECHANICAL_EXIT' 'FULL' ; + +{ QUAD 1 } + + DL DR1 ; {Drift TO Q1} + APERTURE 'Q1_MECHANICAL_ENTRANCE' 'FULL' ; + DL DR1EN ; + APERTURE 'Q1_MAGNETIC_ENTRANCE' 'FULL' ; + MAGQUAD 'Q1' L1E Q1 0.25 1/2 ; + DL DR1EX ; + APERTURE 'Q1_MECHANICAL_EXIT' 'FULL' ; + +{ QUAD 2 } + + DL DR2 ; {Drift TO Q2} + APERTURE 'Q2_MECHANICAL_ENTRANCE' 'FULL' ; + DL DR2EN ; + APERTURE 'Q2_MAGNETIC_ENTRANCE' 'FULL' ; + MAGQUAD 'Q2' L2E Q2 0.35 1/2 ; + DL DR2EX ; + APERTURE 'Q2_MECHANICAL_EXIT' 'FULL' ; +{ QUAD 3 } + + DL DR3 ; {Drift TO Q3} + APERTURE 'Q3_MECHANICAL_ENTRANCE' 'FULL' ; + DL DR3EN ; + APERTURE 'Q3_MAGNETIC_ENTRANCE' 'FULL' ; + MAGQUAD 'Q3' L3E Q3 0.35 1/2 ; + DL DR3EX ; + APERTURE 'Q3_MECHANICAL_EXIT' 'FULL' ; + + DL 0.18 ; {dipole mechanical entrance} + APERTURE 'DIPOLE_MECHANICAL_ENTRANCE' 'D-FRONT' ; + + DL 0.301 ; {dipole mechanical entrance} + APERTURE 'DIPOLE_FLARE' 'D-FRONT' ; + + DL 0.394715 ; {drift to magnetic entrance} + APERTURE 'DIPOLE_MAGNETIC_ENTRANCE' 'D-FRONT' ; + +{ Dipole } +{Break into 8 segments of 2.3 degrees = 18.4 deg total} + FR -1; DP 9.187419156 18.4 0.35 ; {calculate entrance fringe field} + FR 0 ; DP 9.187419156 2.3 0.35 ; {now use for first trans} + APERTURE 'DIPOLE_MID' 'dipole'; + FR 0; {turn all fringe fields off} + LOOP I 1 6; + DP 9.187419156 2.3 0.35 ; + APERTURE 'DIPOLE_MID' 'dipole' ; + ENDLOOP ; + FR -2; DP 9.187419156 18.4 0.35 ; {calculate exit fringe field} + FR 0; DP 9.187419156 2.3 0.35 ; + APERTURE 'DIPOLE_MAGNETIC_EXIT' 'dipole' ; + + FR FRMODE ; + + DL DLEX ; + APERTURE 'DIPOLE_MECHANICAL_EXIT' 'drift' ; {dipole mechanical exit} + +{ Focal Plane } + + DL DRFOC ; {Drift to detector focal plane} + APERTURE 'FOCAL_PLANE' 'drift' ; + closef 20 ; {Done outputting forward maps} + +{ Output global map in transport notation } + + file := SNAME&'_fr'&sf(frmode,'(i1)')&'_for_global.dat' ; + openf 20 file 'UNKNOWN' ; UM ; AM GMAP ; PT 20 ; closef 20 ; UM ; + +{ Some diagnostics } + + WRITE 6 ' Q1-3, D1-F, Z1-M, LENGTH = ' (Q1)&(Q2)&(Q3) ; + WRITE 6 DR1&DR2&DR3&DR4&DRF ; + WRITE 6 Z1C&Z2C&Z3C&ZFM&SPOS ; + +{ Convert GMAP from canonical to TRANSPORT form} + + CATR GMAP MAP TMPSPOS ; spos := tmpspos ; + + WRITE 6 ' Total length = '&S(CONS(SPOS))&' meters' ; + +{ Output diagnostic matrix elements } + + WRITE 6 ' ME(5,2) = '&S(ME(5,2)) ; + WRITE 6 ' ME(1,2) = '&S(ME(1,2)) ; + WRITE 6 ' ME(3,4) = '&S(ME(3,4)) ; + +{ Compute focal plane tilt angle } + + TILT := (180*atan(ME(1,1)*ME(1,26)/ME(1,6))/pi)+90 ; + write 6 ' Focal plane tilt ='&SF(tilt,'(f8.3)')&' degrees' ; + +{ Compute RECON map } + + RR1 MAP 0 0 .04 0 .04 .15 0 0 10000 RORDER RMAP RES ; + write 6 ' RECON resolutions = ' RES(1)&RES(2)&RES(3)&RES(4) ; + file := SNAME&'_fr'&sf(frmode,'(i1)')&'_rec.dat' ; + openf 20 file 'UNKNOWN' ; pmr rmap 20 ; closef 20 ; + + +ENDPROCEDURE ; +RUN ; +END ; + + + + diff --git a/cosy/shms-2011-26cm.fox b/cosy/shms-2011-26cm.fox new file mode 100755 index 00000000..7de98876 --- /dev/null +++ b/cosy/shms-2011-26cm.fox @@ -0,0 +1,326 @@ +{------------------------------------------------------------------------------ + Super-HMS spectrometer, with forward and reconstruction maps. + Adapted from D. Potterveld's 2005 SHMS work: D. Gaskell Sept. 2011 + Author: D. Potterveld, Argonne National Lab, June 2005 + ------------------------------------------------------------------------------ +} +INCLUDE 'JLAB' ; +PROCEDURE RUN ; + +{=========================== Variable Declarations ===========================} + + VARIABLE Z1C 1 ; VARIABLE L1 1 ; + VARIABLE Z2C 1 ; VARIABLE L2 1 ; + VARIABLE Z3C 1 ; VARIABLE L3 1 ; + VARIABLE ZDC 1 ; VARIABLE LD 1 ; + VARIABLE DZD1 1 ; VARIABLE DZD2 1; + VARIABLE DZF1 1 ; VARIABLE DZF2 1; + VARIABLE XDIP 1; + VARIABLE DTILT 1; + VARIABLE FTILT1 1; VARIABLE FTILT2 1; + VARIABLE ZDI 1 ; VARIABLE LDI 1 ; + VARIABLE ZFM 1 ; VARIABLE LFM 1 ; + VARIABLE ZBC 1 ; VARIABLE LB 1; + VARIABLE DR0 1; + VARIABLE DR1 1 ; + VARIABLE DR2 1 ; + VARIABLE DR3 1 ; + VARIABLE DR4 1 ; + VARIABLE DRD 1 ; + VARIABLE DRF 1 ; + VARIABLE Q1 1 ; { quadrupole strength } + VARIABLE Q2 1 ; { quadrupole strength } + VARIABLE Q3 1 ; { quadrupole strength } + VARIABLE DN1 1 ; { Dipole quadrupole index } + VARIABLE OBJ 1 ; { function used in evaluating first order focus} + VARIABLE NFIT 1 ; { max iterations in fit loop} + VARIABLE DOFIT 1 ; { flag for doing fit} + VARIABLE Q3SCALE 1 ; { flag for scaling Q3 } + VARIABLE FITTOL 1 ; { fit tolerance } + VARIABLE FILE 80 ; { filename} + VARIABLE QFILE 80 ; { filename} + VARIABLE LINE 80 ; + VARIABLE TUNITS 1 ; + VARIABLE NRAYA 1 ; VARIABLE NRAYB 1 ; + VARIABLE I 1 ; + VARIABLE TMP 1 ; + VARIABLE CRDEFL 1 ; + VARIABLE CRROT 1 ; + VARIABLE SNAME 4 ; {Spectrometer name} + VARIABLE FRMODE 1 ; {Fringe field mode } + VARIABLE MORDER 1 ; { Maximum order for transformations} + VARIABLE FORDER 1 ; {Order of forward maps } + VARIABLE RORDER 1 ; {Order of reconstruction map } + VARIABLE RES 1 4 ; {Resolution array } + + VARIABLE NX 1 ; VARIABLE NZ 1 ; VARIABLE DX 1 ; VARIABLE DZ 1 ; + VARIABLE BYM 1 90 700 ; + + VARIABLE TMPSPOS 1000 ; { Saved value of SPOS } + VARIABLE QSPOS 1000 ; { Saved value of SPOS for quad 3} + VARIABLE DSPOS 1000 ; { Saved value of SPOS for dipole } + VARIABLE FWDMAP 2000 8 ; { Saved transfer map } + VARIABLE QMAP 2000 8 ; { Saved transfer map for Q3 } + VARIABLE DMAP 2000 8 ; { Saved transfer map for dipole } + VARIABLE TRMAP 2000 8 ; { Forward map in TRANSPORT notation } + VARIABLE RMAP 2000 5 ; { Reconstruction map } + +{========================== Procedure declarations ===========================} + + PROCEDURE QUAD ; + VARIABLE IS 1 ; + LOOP IS 1 4 ; FIELDMAP IS 'SHMS_Q3' ; ENDLOOP ; + ENDPROCEDURE ; + + PROCEDURE DIPOLE ; + VARIABLE IS 1 ; + LOOP IS 1 8 ; FIELDMAP IS 'SHMS_DIP' ; ENDLOOP ; + ENDPROCEDURE ; + +{================================= Main Code =================================} + +{ Computation order specifications } + + MORDER := 6 ; {Max order for calculations} + ASK forder 'Please enter the order for maps: (1-'&SF(morder,'(i1)')&')' + 1 morder ; + + OV forder 3 0 ; {Order Value <#par>} + CO FORDER ; RORDER := FORDER ; + +{ Beam specifications } + + RPM 11000.0 5.4858E-4 -1 ; { } + + SB 0 .040 0 .050 .015 0 0 .15 0 0 0 ; +{ --> PX PA R12 PY PB R34 PT PD R56 PG PZ } + +{ Spectrometer name } + + SNAME := 'SHMS' ; + +{ Fringe-field specifications.} + + frmode := 3 ; + FR FRMODE ; + +{ Magnet geometry } + ZBC := 1.76 ; {Center of bender} + Z1C := 4.140 ; {Center of Q1} + Z2C := 6.80 ; {Center of Q2} + Z3C := 9.45 ; {Center of Q3} + + ZDC := 12.937; {Center of dipole - might not use for anything} + XDIP:= 0.26 ; {Dipole vertical offset} + DTILT:= 9.2*pi/180.0; {Dipole tilt} + + DZF1:= sqrt(4.933^2+(1.632-XDIP)^2); + FTILT1:= atan((1.632-XDIP)/4.933); + FTILT2:= FTILT1-DTILT ; + DZF2:= DZF1*cos(FTILT2); + + + LB := 0.751 ; {Effective length of bender} + L1 := 1.879 ; {Effective length of Q1} + L2 := 1.64 ; {Effective length of Q2} + L3 := 1.64 ; {Effective length of Q3} + LD := 2.90; + + {DRF := 3.65 ; {Drift from dipole exit to fp}} + DRF:= (DZF2-LD/2)/cos(DTILT); + +{ for LSA tune } + +{ Q1 := -1.756263 ; Q2 := 1.857066 ; Q3 := 0.8841793 ; DRF := DRF + 1 ; } +{ Q1 := -1.697080 ; Q2 := 2.195929 ; Q3 := 1.139401 ; DRF := DRF + 1 ; } +{ Q1 := -1.958055 ; Q2 := 2.15 ; Q3 := 0.9358300 ; DRF := 5.043861 ; } +{ Q1 := -2.3331 ; Q2 := 3.899 ; Q3 := -1.912845 ;} + Q1 := -2.044 ; Q2 := 4.3279 ; Q3 := -2.858 ; +{ Q1 := -2.3 ; Q2 := 4.330082 ; Q3 := -2.528626 ;} + +{ Fitting options } + + ASK dofit 'Fit QUAD STRENGTHS (0=no, 1=old-style, 2=new-style): ' 0 2 ; + NFIT := 0 ; IF DOFIT#0 ; NFIT := 400 ; ENDIF ; + IF DOFIT=1 ; FITTOL := 1E-10 ; ELSEIF 1=1 ; FITTOL := 1E-4 ; ENDIF ; + + +{ Begin composing forward maps } + +{ IF DOFIT#0 ; } {Compute and save dipole map if fitting} +{ UM ; DIPOLE ; SM DMAP ; DSPOS := SPOS ;} +{ ENDIF ;} + + FIT Q1 Q2 Q3 ; {Fitting loop} + + +{ Compute some drift distances } + + DR0 := ZBC-(LB/2); {Drift from target to bender} + DR1 := (Z1C - ZBC) - ((LB + L1)/2) ; {Drift from Bender to Q1} + DR2 := (Z2C - Z1C) - ((L1 + L2)/2) ; {Drift from Q1 to Q2} + DR3 := (Z3C - Z2C) - ((L2 + L3)/2) ; {Drift from Q2 to Q3} +{ DR4 := (ZDC - Z3C) - ((L3 + LD)/2) ; {Drift from Q3 to dipole}} + DZD1:= XDIP/tan(DTILT); + DZD2:= (LD/2-XDIP/sin(DTILT))/cos(DTILT); + DR4 := (ZDC-Z3C) - L3/2 - DZD1 - DZD2 ; {Drift from Q3 to dipole} + + UM ; TUNITS := 0 ; + + IF DOFIT=2 ; CR ; focalrays 7 7 0.0 0.0 ; BP ; + ELSEIF 1=1 ; CR ; ER 1 3 1 3 1 3 1 1 ; BP ; + ENDIF ; + +{ Insert splitter magnet } + + DL DR0 ; {Drift to Bender} + RA -90 ; DP 14.34959928 3.0 0.225 ; RA 90 ; {Bender} + DL DR1 ; {Drift TO Q1} + MQ L1 Q1 0.25 ; {Q1} +{ MQ L1 Q1 0.2 ; } {Q1} + + DL DR2 ; {Drift TO Q2} + MQ L2 Q2 0.35 ; {Q2} +{ MQ L2 Q2 0.3 ;} {Q2} {chen used 30} + + DL DR3 ; {Drift to Q3} + MQ L3 Q3 0.35 ; {Q3} +{ MQ L3 Q3 0.3 ;} {Q3} {chen used 30} + + + DL DR4 ; {Drift to dipole}{ Dipole } +{ DP 8.874618 18.4 0.35 ;} {Idealized dipole} + DP 9.187419156 18.4 0.35 ; {Idealized dipole} + +{ IF DOFIT#0 ;} +{ AM DMAP ; SPOS := SPOS + DSPOS ;} +{ ENDIF ; } + + DL DRF ; {Drift to detector focal plane} + + PS 0.3 ; {Mark reconstruction plane} + DL 4.0 ; {Extend rays for picture} + EP ; {End Picture} +{ PP -101 0 0 ; PP -102 0 90 ;} + DL -4.0 ; {Go back for optics calcs} + +{ Some diagnostics } + + WRITE 6 ' Q1-3, D1-F, Z1-M, LENGTH = ' (Q1)&(Q2)&(Q3) ; + WRITE 6 DR1&DR2&DR3&DR4&DRF ; + WRITE 6 Z1C&Z2C&Z3C&ZFM&SPOS ; + +{ Compute focal objective function } + + IF DOFIT=2 ; {New style} + FOCALOBJ OBJ 7 7 ; + ENDIF ; + IF DOFIT=1 ; {Old style} + + SM FWDMAP ; + tmpspos := spos ; tunits := 1 ; + CATR MAP TRMAP SPOS ; um ; spos := tmpspos ; am TRMAP ; + {OBJ := ME(1,2)*ME(1,2)+ME(3,4)*ME(3,4) ;} + OBJ := ABS(ME(1,2))+ABS(ME(3,4))+1.0*ABS(ME(5,2)+1.2) ; + {OBJ := ABS(ME(1,2))+ABS(ME(3,4)) ;} + + {Add in quadrature a term to bias towards large FP angles} + +{ tmp := (180*atan(ME(1,1)*ME(1,26)/ME(1,6))/pi)+90 ;} +{ obj := obj + ((90-tmp)/100)^2 ;} + + ENDIF ; + IF DOFIT#0; + WRITE 6 'OBJ = '&S(OBJ) ; + ENDIF ; + + ENDFIT FITTOL NFIT 1 OBJ ; + +{Convert map to transport form, if not done already} + + IF TUNITS#1 ; + SM FWDMAP ; TUNITS := 1 ; + tmpspos := spos ; CATR MAP TRMAP SPOS ; um ; spos := tmpspos ; am TRMAP ; + ENDIF ; + + WRITE 6 ' Q1-3, D1-F, Z1-M, LENGTH = ' (Q1)&(Q2)&(Q3) ; + WRITE 6 DR1&DR2&DR3&DR4&DRF ; + WRITE 6 Z1C&Z2C&Z3C&ZFM&SPOS ; +{ Output diagnostic matrix elements } + + WRITE 6 ' ME(5,2) = '&S(ME(5,2)) ; + WRITE 6 ' ME(1,2) = '&S(ME(1,2)) ; + WRITE 6 ' ME(3,4) = '&S(ME(3,4)) ; + IF FORDER>2 ; WRITE 6 ' ME(3,444) = '&S(ME(3,444)) ; ENDIF ; + IF FORDER>4 ; WRITE 6 ' ME(3,44444) = '&S(ME(3,44444)) ; ENDIF ; + WRITE 6 ' ME(3,46) = '&S(ME(3,46)) ; + + WRITE 6 ' ME(1,26) = '&S(ME(1,26)) ; + WRITE 6 ' Ratio (3,46)/(1,6) = '&S(ME(3,46)/ME(1,6)) ; + + WRITE 6 ' ME(1,1) = '&S(ME(1,1)) ; + WRITE 6 ' ME(1,2) = '&S(ME(1,2)) ; + WRITE 6 ' ME(1,6) = '&S(ME(1,6)) ; + + WRITE 6 ' ME(2,1) = '&S(ME(2,1)) ; + WRITE 6 ' ME(2,2) = '&S(ME(2,2)) ; + WRITE 6 ' ME(2,6) = '&S(ME(2,6)) ; + + WRITE 6 ' ME(3,3) = '&S(ME(3,3)) ; + WRITE 6 ' ME(3,4) = '&S(ME(3,4)) ; + WRITE 6 ' ME(3,6) = '&S(ME(3,6)) ; + + WRITE 6 ' ME(4,3) = '&S(ME(4,3)) ; + WRITE 6 ' ME(4,4) = '&S(ME(4,4)) ; + WRITE 6 ' ME(4,6) = '&S(ME(4,6)) ; + + WRITE 6 ' Total length = '&S(CONS(SPOS))&' meters' ; + +{ Compute focal plane tilt angle } + + tmp := (180*atan(ME(1,1)*ME(1,26)/ME(1,6))/pi)+90 ; + write 6 ' Focal plane tilt ='&SF(tmp,'(f8.3)')&' degrees' ; + +{ Output forward map } +{ This must be done by routine PT, starting with the map in COSY units. } + + um ; spos := tmpspos ; am FWDMAP ; + file := SNAME&'_fr'&sf(frmode,'(i1)')&'_for.dat' ; + openf 20 file 'UNKNOWN' ; pt 20 ; closef 20 ; + um ; spos := tmpspos ; am TRMAP ; + +{ Compute and output reconstruction map } + + RR1 MAP 0 0 .04 0 .04 .15 0 0 1000 RORDER RMAP RES ; + write 6 ' RECON resolutions = ' RES(1)&RES(2)&RES(3)&RES(4) ; + file := SNAME&'_fr'&sf(frmode,'(i1)')&'_rec.dat' ; + openf 20 file 'UNKNOWN' ; + pmr rmap 20 ; closef 20 ; + + +{ Output to postscript file } + + PG -10 -10 ; + +{ Output to UGS device } + +{ + PP -9 0 90 ; + write 6 ' Type to proceed: ' ; + read 5 LINE ; + PP -9 0 0 ; + write 6 ' Type to proceed: ' ; + read 5 LINE ; +} + +{ End of output block } + + + +ENDPROCEDURE ; +RUN ; +END ; + + + +