From b1051e263c96a9ec246730d09328914a7bdbdd8a Mon Sep 17 00:00:00 2001 From: paraiso Date: Tue, 21 Feb 2006 15:04:11 +0000 Subject: [PATCH] Added to SVN Repository --- geant4/LEMuSR/MEYER/M10.eps | 734 ++++ geant4/LEMuSR/MEYER/M10.keV | 167 + geant4/LEMuSR/MEYER/M10.pdf | Bin 0 -> 8540 bytes geant4/LEMuSR/MEYER/M10sin.eps | 805 ++++ geant4/LEMuSR/MEYER/M10sin.pdf | Bin 0 -> 9389 bytes geant4/LEMuSR/MEYER/M20.keV | 167 + geant4/LEMuSR/MEYER/M20sin.eps | 805 ++++ geant4/LEMuSR/MEYER/M30.keV | 111 + geant4/LEMuSR/MEYER/M5.keV | 203 ++ geant4/LEMuSR/MEYER/M50.keV | 134 + geant4/LEMuSR/MEYER/Mall.eps | 1129 ++++++ geant4/LEMuSR/MEYER/Mall.pdf | Bin 0 -> 19140 bytes geant4/LEMuSR/MEYER/Mall2.eps | 977 +++++ geant4/LEMuSR/MEYER/Mall2.pdf | Bin 0 -> 15881 bytes geant4/LEMuSR/MEYER/Mallsin.eps | 978 +++++ geant4/LEMuSR/MEYER/Mallsin.pdf | Bin 0 -> 15322 bytes geant4/LEMuSR/MEYER/a.out | Bin 0 -> 30825 bytes geant4/LEMuSR/MEYER/g | 2 + geant4/LEMuSR/MEYER/meyer.cc | 888 +++++ geant4/LEMuSR/MEYER/meyer.for | 364 ++ geant4/LEMuSR/MEYER/meyer.h | 27 + geant4/LEMuSR/MEYER/mk.sh | 1 + geant4/LEMuSR/MEYER/mtest.for | 698 ++++ geant4/LEMuSR/MEYER/mutrack.for | 5466 ++++++++++++++++++++++++++++ geant4/LEMuSR/MEYER/testmeyer.cc | 195 + geant4/LEMuSR/MEYER/testmeyer.eps | 730 ++++ geant4/LEMuSR/MEYER/testmeyer.out | 168 + geant4/LEMuSR/MEYER/testmeyer.pdf | Bin 0 -> 6921 bytes geant4/LEMuSR/MEYER/testmeyer2.eps | 703 ++++ geant4/LEMuSR/MEYER/testmeyer2.pdf | Bin 0 -> 7728 bytes geant4/LEMuSR/MEYER/tkm.out | 168 + geant4/LEMuSR/MEYER/txt.for | 1156 ++++++ 32 files changed, 16776 insertions(+) create mode 100644 geant4/LEMuSR/MEYER/M10.eps create mode 100644 geant4/LEMuSR/MEYER/M10.keV create mode 100644 geant4/LEMuSR/MEYER/M10.pdf create mode 100644 geant4/LEMuSR/MEYER/M10sin.eps create mode 100644 geant4/LEMuSR/MEYER/M10sin.pdf create mode 100644 geant4/LEMuSR/MEYER/M20.keV create mode 100644 geant4/LEMuSR/MEYER/M20sin.eps create mode 100644 geant4/LEMuSR/MEYER/M30.keV create mode 100644 geant4/LEMuSR/MEYER/M5.keV create mode 100644 geant4/LEMuSR/MEYER/M50.keV create mode 100644 geant4/LEMuSR/MEYER/Mall.eps create mode 100644 geant4/LEMuSR/MEYER/Mall.pdf create mode 100644 geant4/LEMuSR/MEYER/Mall2.eps create mode 100644 geant4/LEMuSR/MEYER/Mall2.pdf create mode 100644 geant4/LEMuSR/MEYER/Mallsin.eps create mode 100644 geant4/LEMuSR/MEYER/Mallsin.pdf create mode 100755 geant4/LEMuSR/MEYER/a.out create mode 100644 geant4/LEMuSR/MEYER/g create mode 100644 geant4/LEMuSR/MEYER/meyer.cc create mode 100644 geant4/LEMuSR/MEYER/meyer.for create mode 100644 geant4/LEMuSR/MEYER/meyer.h create mode 100644 geant4/LEMuSR/MEYER/mk.sh create mode 100644 geant4/LEMuSR/MEYER/mtest.for create mode 100644 geant4/LEMuSR/MEYER/mutrack.for create mode 100644 geant4/LEMuSR/MEYER/testmeyer.cc create mode 100644 geant4/LEMuSR/MEYER/testmeyer.eps create mode 100644 geant4/LEMuSR/MEYER/testmeyer.out create mode 100644 geant4/LEMuSR/MEYER/testmeyer.pdf create mode 100644 geant4/LEMuSR/MEYER/testmeyer2.eps create mode 100644 geant4/LEMuSR/MEYER/testmeyer2.pdf create mode 100644 geant4/LEMuSR/MEYER/tkm.out create mode 100644 geant4/LEMuSR/MEYER/txt.for diff --git a/geant4/LEMuSR/MEYER/M10.eps b/geant4/LEMuSR/MEYER/M10.eps new file mode 100644 index 0000000..dc500bb --- /dev/null +++ b/geant4/LEMuSR/MEYER/M10.eps @@ -0,0 +1,734 @@ +%!PS-Adobe-2.0 +%%Title: M10.eps +%%Creator: gnuplot 3.7 patchlevel 3 +%%CreationDate: Mon Apr 11 19:41:32 2005 +%%DocumentFonts: (atend) +%%BoundingBox: 50 50 554 770 +%%Orientation: Landscape +%%Pages: (atend) +%%EndComments +/gnudict 256 dict def +gnudict begin +/Color true def +/Solid false def +/gnulinewidth 5.000 def +/userlinewidth gnulinewidth def +/vshift -46 def +/dl {10 mul} def +/hpt_ 31.5 def +/vpt_ 31.5 def +/hpt hpt_ def +/vpt vpt_ def +/M {moveto} bind def +/L {lineto} bind def +/R {rmoveto} bind def +/V {rlineto} bind def +/vpt2 vpt 2 mul def +/hpt2 hpt 2 mul def +/Lshow { currentpoint stroke M + 0 vshift R show } def +/Rshow { currentpoint stroke M + dup stringwidth pop neg vshift R show } def +/Cshow { currentpoint stroke M + dup stringwidth pop -2 div vshift R show } def +/UP { dup vpt_ mul /vpt exch def hpt_ mul /hpt exch def + /hpt2 hpt 2 mul def /vpt2 vpt 2 mul def } def +/DL { Color {setrgbcolor Solid {pop []} if 0 setdash } + {pop pop pop Solid {pop []} if 0 setdash} ifelse } def +/BL { stroke userlinewidth 2 mul setlinewidth } def +/AL { stroke userlinewidth 2 div setlinewidth } def +/UL { dup gnulinewidth mul /userlinewidth exch def + dup 1 lt {pop 1} if 10 mul /udl exch def } def +/PL { stroke userlinewidth setlinewidth } def +/LTb { BL [] 0 0 0 DL } def +/LTa { AL [1 udl mul 2 udl mul] 0 setdash 0 0 0 setrgbcolor } def +/LT0 { PL [] 1 0 0 DL } def +/LT1 { PL [4 dl 2 dl] 0 1 0 DL } def +/LT2 { PL [2 dl 3 dl] 0 0 1 DL } def +/LT3 { PL [1 dl 1.5 dl] 1 0 1 DL } def +/LT4 { PL [5 dl 2 dl 1 dl 2 dl] 0 1 1 DL } def +/LT5 { PL [4 dl 3 dl 1 dl 3 dl] 1 1 0 DL } def +/LT6 { PL [2 dl 2 dl 2 dl 4 dl] 0 0 0 DL } def +/LT7 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 1 0.3 0 DL } def +/LT8 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 0.5 0.5 0.5 DL } def +/Pnt { stroke [] 0 setdash + gsave 1 setlinecap M 0 0 V stroke grestore } def +/Dia { stroke [] 0 setdash 2 copy vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V closepath stroke + Pnt } def +/Pls { stroke [] 0 setdash vpt sub M 0 vpt2 V + currentpoint stroke M + hpt neg vpt neg R hpt2 0 V stroke + } def +/Box { stroke [] 0 setdash 2 copy exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V closepath stroke + Pnt } def +/Crs { stroke [] 0 setdash exch hpt sub exch vpt add M + hpt2 vpt2 neg V currentpoint stroke M + hpt2 neg 0 R hpt2 vpt2 V stroke } def +/TriU { stroke [] 0 setdash 2 copy vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V closepath stroke + Pnt } def +/Star { 2 copy Pls Crs } def +/BoxF { stroke [] 0 setdash exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V closepath fill } def +/TriUF { stroke [] 0 setdash vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V closepath fill } def +/TriD { stroke [] 0 setdash 2 copy vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V closepath stroke + Pnt } def +/TriDF { stroke [] 0 setdash vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V closepath fill} def +/DiaF { stroke [] 0 setdash vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V closepath fill } def +/Pent { stroke [] 0 setdash 2 copy gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + closepath stroke grestore Pnt } def +/PentF { stroke [] 0 setdash gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + closepath fill grestore } def +/Circle { stroke [] 0 setdash 2 copy + hpt 0 360 arc stroke Pnt } def +/CircleF { stroke [] 0 setdash hpt 0 360 arc fill } def +/C0 { BL [] 0 setdash 2 copy moveto vpt 90 450 arc } bind def +/C1 { BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 90 arc closepath fill + vpt 0 360 arc closepath } bind def +/C2 { BL [] 0 setdash 2 copy moveto + 2 copy vpt 90 180 arc closepath fill + vpt 0 360 arc closepath } bind def +/C3 { BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 180 arc closepath fill + vpt 0 360 arc closepath } bind def +/C4 { BL [] 0 setdash 2 copy moveto + 2 copy vpt 180 270 arc closepath fill + vpt 0 360 arc closepath } bind def +/C5 { BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 90 arc + 2 copy moveto + 2 copy vpt 180 270 arc closepath fill + vpt 0 360 arc } bind def +/C6 { BL [] 0 setdash 2 copy moveto + 2 copy vpt 90 270 arc closepath fill + vpt 0 360 arc closepath } bind def +/C7 { BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 270 arc closepath fill + vpt 0 360 arc closepath } bind def +/C8 { BL [] 0 setdash 2 copy moveto + 2 copy vpt 270 360 arc closepath fill + vpt 0 360 arc closepath } bind def +/C9 { BL [] 0 setdash 2 copy moveto + 2 copy vpt 270 450 arc closepath fill + vpt 0 360 arc closepath } bind def +/C10 { BL [] 0 setdash 2 copy 2 copy moveto vpt 270 360 arc closepath fill + 2 copy moveto + 2 copy vpt 90 180 arc closepath fill + vpt 0 360 arc closepath } bind def +/C11 { BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 180 arc closepath fill + 2 copy moveto + 2 copy vpt 270 360 arc closepath fill + vpt 0 360 arc closepath } bind def +/C12 { BL [] 0 setdash 2 copy moveto + 2 copy vpt 180 360 arc closepath fill + vpt 0 360 arc closepath } bind def +/C13 { BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 90 arc closepath fill + 2 copy moveto + 2 copy vpt 180 360 arc closepath fill + vpt 0 360 arc closepath } bind def +/C14 { BL [] 0 setdash 2 copy moveto + 2 copy vpt 90 360 arc closepath fill + vpt 0 360 arc } bind def +/C15 { BL [] 0 setdash 2 copy vpt 0 360 arc closepath fill + vpt 0 360 arc closepath } bind def +/Rec { newpath 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto + neg 0 rlineto closepath } bind def +/Square { dup Rec } bind def +/Bsquare { vpt sub exch vpt sub exch vpt2 Square } bind def +/S0 { BL [] 0 setdash 2 copy moveto 0 vpt rlineto BL Bsquare } bind def +/S1 { BL [] 0 setdash 2 copy vpt Square fill Bsquare } bind def +/S2 { BL [] 0 setdash 2 copy exch vpt sub exch vpt Square fill Bsquare } bind def +/S3 { BL [] 0 setdash 2 copy exch vpt sub exch vpt2 vpt Rec fill Bsquare } bind def +/S4 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt Square fill Bsquare } bind def +/S5 { BL [] 0 setdash 2 copy 2 copy vpt Square fill + exch vpt sub exch vpt sub vpt Square fill Bsquare } bind def +/S6 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill Bsquare } bind def +/S7 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill + 2 copy vpt Square fill + Bsquare } bind def +/S8 { BL [] 0 setdash 2 copy vpt sub vpt Square fill Bsquare } bind def +/S9 { BL [] 0 setdash 2 copy vpt sub vpt vpt2 Rec fill Bsquare } bind def +/S10 { BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt Square fill + Bsquare } bind def +/S11 { BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt2 vpt Rec fill + Bsquare } bind def +/S12 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill Bsquare } bind def +/S13 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill + 2 copy vpt Square fill Bsquare } bind def +/S14 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill + 2 copy exch vpt sub exch vpt Square fill Bsquare } bind def +/S15 { BL [] 0 setdash 2 copy Bsquare fill Bsquare } bind def +/D0 { gsave translate 45 rotate 0 0 S0 stroke grestore } bind def +/D1 { gsave translate 45 rotate 0 0 S1 stroke grestore } bind def +/D2 { gsave translate 45 rotate 0 0 S2 stroke grestore } bind def +/D3 { gsave translate 45 rotate 0 0 S3 stroke grestore } bind def +/D4 { gsave translate 45 rotate 0 0 S4 stroke grestore } bind def +/D5 { gsave translate 45 rotate 0 0 S5 stroke grestore } bind def +/D6 { gsave translate 45 rotate 0 0 S6 stroke grestore } bind def +/D7 { gsave translate 45 rotate 0 0 S7 stroke grestore } bind def +/D8 { gsave translate 45 rotate 0 0 S8 stroke grestore } bind def +/D9 { gsave translate 45 rotate 0 0 S9 stroke grestore } bind def +/D10 { gsave translate 45 rotate 0 0 S10 stroke grestore } bind def +/D11 { gsave translate 45 rotate 0 0 S11 stroke grestore } bind def +/D12 { gsave translate 45 rotate 0 0 S12 stroke grestore } bind def +/D13 { gsave translate 45 rotate 0 0 S13 stroke grestore } bind def +/D14 { gsave translate 45 rotate 0 0 S14 stroke grestore } bind def +/D15 { gsave translate 45 rotate 0 0 S15 stroke grestore } bind def +/DiaE { stroke [] 0 setdash vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V closepath stroke } def +/BoxE { stroke [] 0 setdash exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V closepath stroke } def +/TriUE { stroke [] 0 setdash vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V closepath stroke } def +/TriDE { stroke [] 0 setdash vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V closepath stroke } def +/PentE { stroke [] 0 setdash gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + closepath stroke grestore } def +/CircE { stroke [] 0 setdash + hpt 0 360 arc stroke } def +/Opaque { gsave closepath 1 setgray fill grestore 0 setgray closepath } def +/DiaW { stroke [] 0 setdash vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V Opaque stroke } def +/BoxW { stroke [] 0 setdash exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V Opaque stroke } def +/TriUW { stroke [] 0 setdash vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V Opaque stroke } def +/TriDW { stroke [] 0 setdash vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V Opaque stroke } def +/PentW { stroke [] 0 setdash gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + Opaque stroke grestore } def +/CircW { stroke [] 0 setdash + hpt 0 360 arc Opaque stroke } def +/BoxFill { gsave Rec 1 setgray fill grestore } def +/Symbol-Oblique /Symbol findfont [1 0 .167 1 0 0] makefont +dup length dict begin {1 index /FID eq {pop pop} {def} ifelse} forall +currentdict end definefont pop +end +%%EndProlog +%%Page: 1 1 +gnudict begin +gsave +50 50 translate +0.100 0.100 scale +90 rotate +0 -5040 translate +0 setgray +newpath +(Helvetica) findfont 140 scalefont setfont +1.000 UL +LTb +1.000 UL +LTa +714 420 M +6248 0 V +1.000 UL +LTb +714 420 M +63 0 V +6185 0 R +-63 0 V +630 420 M +( 0) Rshow +1.000 UL +LTa +714 865 M +6248 0 V +1.000 UL +LTb +714 865 M +63 0 V +6185 0 R +-63 0 V +630 865 M +( 0.1) Rshow +1.000 UL +LTa +714 1310 M +6248 0 V +1.000 UL +LTb +714 1310 M +63 0 V +6185 0 R +-63 0 V +-6269 0 R +( 0.2) Rshow +1.000 UL +LTa +714 1756 M +6248 0 V +1.000 UL +LTb +714 1756 M +63 0 V +6185 0 R +-63 0 V +-6269 0 R +( 0.3) Rshow +1.000 UL +LTa +714 2201 M +6248 0 V +1.000 UL +LTb +714 2201 M +63 0 V +6185 0 R +-63 0 V +-6269 0 R +( 0.4) Rshow +1.000 UL +LTa +714 2646 M +6248 0 V +1.000 UL +LTb +714 2646 M +63 0 V +6185 0 R +-63 0 V +-6269 0 R +( 0.5) Rshow +1.000 UL +LTa +714 3091 M +6248 0 V +1.000 UL +LTb +714 3091 M +63 0 V +6185 0 R +-63 0 V +-6269 0 R +( 0.6) Rshow +1.000 UL +LTa +714 3536 M +6248 0 V +1.000 UL +LTb +714 3536 M +63 0 V +6185 0 R +-63 0 V +-6269 0 R +( 0.7) Rshow +1.000 UL +LTa +714 3982 M +6248 0 V +1.000 UL +LTb +714 3982 M +63 0 V +6185 0 R +-63 0 V +-6269 0 R +( 0.8) Rshow +1.000 UL +LTa +714 4427 M +6248 0 V +1.000 UL +LTb +714 4427 M +63 0 V +6185 0 R +-63 0 V +-6269 0 R +( 0.9) Rshow +1.000 UL +LTa +714 4872 M +6248 0 V +1.000 UL +LTb +714 4872 M +63 0 V +6185 0 R +-63 0 V +-6269 0 R +( 1) Rshow +1.000 UL +LTa +714 420 M +0 4452 V +1.000 UL +LTb +714 420 M +0 63 V +0 4389 R +0 -63 V +714 280 M +( 0) Cshow +1.000 UL +LTa +1408 420 M +0 4452 V +1.000 UL +LTb +1408 420 M +0 63 V +0 4389 R +0 -63 V +0 -4529 R +( 5) Cshow +1.000 UL +LTa +2102 420 M +0 4452 V +1.000 UL +LTb +2102 420 M +0 63 V +0 4389 R +0 -63 V +0 -4529 R +( 10) Cshow +1.000 UL +LTa +2797 420 M +0 4452 V +1.000 UL +LTb +2797 420 M +0 63 V +0 4389 R +0 -63 V +0 -4529 R +( 15) Cshow +1.000 UL +LTa +3491 420 M +0 4452 V +1.000 UL +LTb +3491 420 M +0 63 V +0 4389 R +0 -63 V +0 -4529 R +( 20) Cshow +1.000 UL +LTa +4185 420 M +0 4452 V +1.000 UL +LTb +4185 420 M +0 63 V +0 4389 R +0 -63 V +0 -4529 R +( 25) Cshow +1.000 UL +LTa +4879 420 M +0 4452 V +1.000 UL +LTb +4879 420 M +0 63 V +0 4389 R +0 -63 V +0 -4529 R +( 30) Cshow +1.000 UL +LTa +5574 420 M +0 4109 V +0 280 R +0 63 V +1.000 UL +LTb +5574 420 M +0 63 V +0 4389 R +0 -63 V +0 -4529 R +( 35) Cshow +1.000 UL +LTa +6268 420 M +0 4109 V +0 280 R +0 63 V +1.000 UL +LTb +6268 420 M +0 63 V +0 4389 R +0 -63 V +0 -4529 R +( 40) Cshow +1.000 UL +LTa +6962 420 M +0 4452 V +1.000 UL +LTb +6962 420 M +0 63 V +0 4389 R +0 -63 V +0 -4529 R +( 45) Cshow +1.000 UL +LTb +714 420 M +6248 0 V +0 4452 V +-6248 0 V +714 420 L +140 2646 M +currentpoint gsave translate 90 rotate 0 0 M +(Meyer's distribution) Cshow +grestore +3838 70 M +(scatt. angle [deg]) Cshow +1.000 UP +1.000 UL +LT0 +6311 4739 M +('M10.keV' us 1:2) Rshow +783 4872 Pls +853 4843 Pls +922 4814 Pls +992 4785 Pls +1061 4756 Pls +1131 4712 Pls +1200 4619 Pls +1269 4527 Pls +1339 4434 Pls +1408 4342 Pls +1478 4238 Pls +1547 4121 Pls +1616 4003 Pls +1686 3869 Pls +1755 3734 Pls +1825 3601 Pls +1894 3467 Pls +1964 3334 Pls +2033 3201 Pls +2102 3067 Pls +2172 2939 Pls +2241 2811 Pls +2311 2682 Pls +2380 2554 Pls +2450 2430 Pls +2519 2323 Pls +2588 2215 Pls +2658 2108 Pls +2727 2001 Pls +2797 1903 Pls +2866 1818 Pls +2936 1733 Pls +3005 1648 Pls +3074 1563 Pls +3144 1489 Pls +3213 1420 Pls +3283 1354 Pls +3352 1297 Pls +3421 1239 Pls +3491 1193 Pls +3560 1147 Pls +3630 1101 Pls +3699 1055 Pls +3769 1011 Pls +3838 978 Pls +3907 945 Pls +3977 912 Pls +4046 879 Pls +4116 850 Pls +4185 826 Pls +4255 802 Pls +4324 778 Pls +4393 755 Pls +4463 735 Pls +4532 717 Pls +4602 700 Pls +4671 682 Pls +4740 665 Pls +4810 652 Pls +4879 640 Pls +4949 629 Pls +5018 617 Pls +5088 605 Pls +5157 596 Pls +5226 587 Pls +5296 578 Pls +5365 569 Pls +5435 560 Pls +5504 554 Pls +5574 547 Pls +5643 540 Pls +5712 534 Pls +5782 529 Pls +5851 524 Pls +5921 520 Pls +5990 516 Pls +6060 512 Pls +6129 508 Pls +6198 504 Pls +6268 500 Pls +6337 496 Pls +6407 492 Pls +6476 488 Pls +6545 483 Pls +6615 481 Pls +6684 479 Pls +6754 477 Pls +6823 474 Pls +6893 472 Pls +6962 470 Pls +6594 4739 Pls +1.000 UL +LT1 +6311 4599 M +(exp\(-x*x/200.\)) Rshow +6395 4599 M +399 0 V +714 4872 M +63 -5 V +63 -13 V +63 -23 V +63 -32 V +64 -41 V +63 -49 V +63 -57 V +63 -65 V +63 -72 V +63 -80 V +63 -86 V +63 -92 V +63 -98 V +64 -103 V +63 -107 V +63 -112 V +63 -114 V +63 -117 V +63 -120 V +63 -121 V +63 -122 V +63 -123 V +64 -122 V +63 -123 V +63 -121 V +63 -120 V +63 -118 V +63 -115 V +63 -114 V +63 -110 V +63 -107 V +64 -104 V +63 -101 V +63 -96 V +63 -93 V +63 -89 V +63 -85 V +63 -80 V +63 -77 V +63 -72 V +64 -69 V +63 -64 V +63 -61 V +63 -56 V +63 -53 V +63 -50 V +63 -46 V +63 -42 V +63 -39 V +64 -37 V +63 -33 V +63 -30 V +63 -28 V +63 -26 V +63 -23 V +63 -22 V +63 -19 V +63 -17 V +64 -16 V +63 -14 V +63 -13 V +63 -11 V +63 -10 V +63 -9 V +63 -8 V +63 -8 V +63 -6 V +64 -6 V +63 -4 V +63 -5 V +63 -4 V +63 -3 V +63 -3 V +63 -2 V +63 -3 V +63 -2 V +64 -1 V +63 -2 V +63 -1 V +63 -1 V +63 -1 V +63 -1 V +63 0 V +63 -1 V +63 0 V +64 -1 V +63 0 V +63 -1 V +63 0 V +63 0 V +63 0 V +63 0 V +63 0 V +63 -1 V +64 0 V +63 0 V +63 0 V +63 0 V +63 0 V +stroke +grestore +end +showpage +%%Trailer +%%DocumentFonts: Helvetica +%%Pages: 1 diff --git a/geant4/LEMuSR/MEYER/M10.keV b/geant4/LEMuSR/MEYER/M10.keV new file mode 100644 index 0000000..a5743d4 --- /dev/null +++ b/geant4/LEMuSR/MEYER/M10.keV @@ -0,0 +1,167 @@ +0.5 1 0 +1 0.99351 0.0357481 +1.5 0.98702 0.0710264 +2 0.98053 0.105832 +2.5 0.974041 0.140163 +3 0.964167 0.173408 +3.5 0.943389 0.203577 +4 0.922611 0.232237 +4.5 0.901832 0.259387 +5 0.881054 0.285026 +5.5 0.857766 0.30825 +6 0.83169 0.328679 +6.5 0.805237 0.347053 +7 0.775073 0.361776 +7.5 0.744909 0.374314 +8 0.714917 0.384761 +8.5 0.684995 0.39308 +9 0.655074 0.399237 +9.5 0.625152 0.403233 +10 0.595231 0.405073 +10.5 0.566391 0.405532 +11 0.537611 0.403961 +11.5 0.508832 0.400324 +12 0.480052 0.394622 +12.5 0.452135 0.387601 +13 0.428038 0.381995 +13.5 0.403941 0.374666 +14 0.379845 0.36562 +14.5 0.355748 0.354859 +15 0.333765 0.344571 +15.5 0.314688 0.335826 +16 0.295611 0.32573 +16.5 0.276534 0.314285 +17 0.257457 0.301498 +17.5 0.240716 0.290187 +18 0.225189 0.279208 +18.5 0.21038 0.268056 +19 0.19745 0.258329 +19.5 0.18452 0.247699 +20 0.173957 0.239428 +20.5 0.163673 0.230816 +21 0.153388 0.22149 +21.5 0.143103 0.211455 +22 0.133193 0.201278 +22.5 0.125753 0.194237 +23 0.118313 0.186686 +23.5 0.110873 0.178626 +24 0.103433 0.170059 +24.5 0.0967697 0.16229 +25 0.0914364 0.156345 +25.5 0.086103 0.150039 +26 0.0807697 0.143374 +26.5 0.0754364 0.136352 +27 0.0709517 0.130535 +27.5 0.0670204 0.125456 +28 0.063089 0.120115 +28.5 0.0591577 0.114514 +29 0.0552264 0.108655 +29.5 0.0523566 0.10466 +30 0.0496858 0.100881 +30.5 0.0470149 0.0969269 +31 0.0443441 0.0927989 +31.5 0.041722 0.0886018 +32 0.0396678 0.0854598 +32.5 0.0376137 0.0821853 +33 0.0355596 0.0787792 +33.5 0.0335055 0.0752425 +34 0.0316272 0.0719762 +34.5 0.0301299 0.0694702 +35 0.0286327 0.0668695 +35.5 0.0271354 0.064175 +36 0.0256381 0.0613873 +36.5 0.0244597 0.0592799 +37 0.0235393 0.0577323 +37.5 0.0226189 0.0561271 +38 0.0216985 0.0544646 +38.5 0.0207781 0.0527455 +39 0.0198577 0.0509702 +39.5 0.0189373 0.0491392 +40 0.0180169 0.0472529 +40.5 0.0170965 0.045312 +41 0.0161761 0.0433168 +41.5 0.0152557 0.041268 +42 0.0143353 0.0391661 +42.5 0.013698 0.0377927 +43 0.0132167 0.0368168 +43.5 0.0127354 0.0358126 +44 0.0122542 0.0347803 +44.5 0.0117729 0.0337203 +45 0.0112916 0.0326328 +45.5 0.0108103 0.0315181 +46 0.010329 0.0303765 +46.5 0.00984769 0.0292083 +47 0.00936639 0.0280139 +47.5 0.0088851 0.0267934 +48 0.00840381 0.0255473 +48.5 0.00807864 0.0247543 +49 0.00780923 0.0241159 +49.5 0.00753982 0.0234628 +50 0.00727041 0.0227952 +50.5 0.007001 0.0221132 +51 0.00673158 0.0214171 +51.5 0.00646217 0.0207071 +52 0.00619276 0.0199833 +52.5 0.00592335 0.0192459 +53 0.00565394 0.0184951 +53.5 0.00538453 0.0177311 +54 0.00511512 0.016954 +54.5 0.00493893 0.0164751 +55 0.00478199 0.0160521 +55.5 0.00462504 0.0156214 +56 0.0044681 0.0151829 +56.5 0.00431115 0.0147369 +57 0.00415421 0.0142835 +57.5 0.00399726 0.0138227 +58 0.00384032 0.0133547 +58.5 0.00368337 0.0128797 +59 0.00352643 0.0123976 +59.5 0.00336948 0.0119088 +60 0.00321254 0.0114132 +60.5 0.00307638 0.0109852 +61 0.00294201 0.0105579 +61.5 0.00280764 0.0101251 +62 0.00267327 0.00968679 +62.5 0.0025389 0.00924312 +63 0.00240453 0.00879422 +63.5 0.00227016 0.00834018 +64 0.00213579 0.00788111 +64.5 0.00200142 0.00741713 +65 0.00186704 0.00694834 +65.5 0.00173267 0.00647487 +66 0.0015983 0.00599681 +66.5 0.00146393 0.00551429 +67 0.00132956 0.00502741 +67.5 0.00119519 0.0045363 +68 0.00106082 0.00404106 +68.5 0.000926448 0.00354181 +69 0.000792077 0.00303867 +69.5 0.000657706 0.00253176 +70 0.000523335 0.00202119 +70.5 0.000388965 0.00150707 +71 0.000254594 0.000989538 +71.5 0.000120223 0.0004687 +72 0 0 +72.5 0 0 +73 0 0 +73.5 0 0 +74 0 0 +74.5 0 0 +75 0 0 +75.5 0 0 +76 0 0 +76.5 0 0 +77 0 0 +77.5 0 0 +78 0 0 +78.5 0 0 +79 0 0 +79.5 0 0 +80 0 0 +80.5 0 0 +81 0 0 +81.5 0 0 +82 0 0 +82.5 0 0 +83 0 0 +83.5 0 0 diff --git a/geant4/LEMuSR/MEYER/M10.pdf b/geant4/LEMuSR/MEYER/M10.pdf new file mode 100644 index 0000000000000000000000000000000000000000..c9e1d4bda4c46983b6cf2727fc0e2d88c84522c3 GIT binary patch literal 8540 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 HOF;e?GUBTR literal 0 HcmV?d00001 diff --git a/geant4/LEMuSR/MEYER/M10sin.eps b/geant4/LEMuSR/MEYER/M10sin.eps new file mode 100644 index 0000000..859b971 --- /dev/null +++ b/geant4/LEMuSR/MEYER/M10sin.eps @@ -0,0 +1,805 @@ +%!PS-Adobe-2.0 +%%Title: Ma10sin.eps +%%Creator: gnuplot 3.7 patchlevel 3 +%%CreationDate: Mon Apr 11 19:49:42 2005 +%%DocumentFonts: (atend) +%%BoundingBox: 50 50 554 770 +%%Orientation: Landscape +%%Pages: (atend) +%%EndComments +/gnudict 256 dict def +gnudict begin +/Color true def +/Solid false def +/gnulinewidth 5.000 def +/userlinewidth gnulinewidth def +/vshift -46 def +/dl {10 mul} def +/hpt_ 31.5 def +/vpt_ 31.5 def +/hpt hpt_ def +/vpt vpt_ def +/M {moveto} bind def +/L {lineto} bind def +/R {rmoveto} bind def +/V {rlineto} bind def +/vpt2 vpt 2 mul def +/hpt2 hpt 2 mul def +/Lshow { currentpoint stroke M + 0 vshift R show } def +/Rshow { currentpoint stroke M + dup stringwidth pop neg vshift R show } def +/Cshow { currentpoint stroke M + dup stringwidth pop -2 div vshift R show } def +/UP { dup vpt_ mul /vpt exch def hpt_ mul /hpt exch def + /hpt2 hpt 2 mul def /vpt2 vpt 2 mul def } def +/DL { Color {setrgbcolor Solid {pop []} if 0 setdash } + {pop pop pop Solid {pop []} if 0 setdash} ifelse } def +/BL { stroke userlinewidth 2 mul setlinewidth } def +/AL { stroke userlinewidth 2 div setlinewidth } def +/UL { dup gnulinewidth mul /userlinewidth exch def + dup 1 lt {pop 1} if 10 mul /udl exch def } def +/PL { stroke userlinewidth setlinewidth } def +/LTb { BL [] 0 0 0 DL } def +/LTa { AL [1 udl mul 2 udl mul] 0 setdash 0 0 0 setrgbcolor } def +/LT0 { PL [] 1 0 0 DL } def +/LT1 { PL [4 dl 2 dl] 0 1 0 DL } def +/LT2 { PL [2 dl 3 dl] 0 0 1 DL } def +/LT3 { PL [1 dl 1.5 dl] 1 0 1 DL } def +/LT4 { PL [5 dl 2 dl 1 dl 2 dl] 0 1 1 DL } def +/LT5 { PL [4 dl 3 dl 1 dl 3 dl] 1 1 0 DL } def +/LT6 { PL [2 dl 2 dl 2 dl 4 dl] 0 0 0 DL } def +/LT7 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 1 0.3 0 DL } def +/LT8 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 0.5 0.5 0.5 DL } def +/Pnt { stroke [] 0 setdash + gsave 1 setlinecap M 0 0 V stroke grestore } def +/Dia { stroke [] 0 setdash 2 copy vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V closepath stroke + Pnt } def +/Pls { stroke [] 0 setdash vpt sub M 0 vpt2 V + currentpoint stroke M + hpt neg vpt neg R hpt2 0 V stroke + } def +/Box { stroke [] 0 setdash 2 copy exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V closepath stroke + Pnt } def +/Crs { stroke [] 0 setdash exch hpt sub exch vpt add M + hpt2 vpt2 neg V currentpoint stroke M + hpt2 neg 0 R hpt2 vpt2 V stroke } def +/TriU { stroke [] 0 setdash 2 copy vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V closepath stroke + Pnt } def +/Star { 2 copy Pls Crs } def +/BoxF { stroke [] 0 setdash exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V closepath fill } def +/TriUF { stroke [] 0 setdash vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V closepath fill } def +/TriD { stroke [] 0 setdash 2 copy vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V closepath stroke + Pnt } def +/TriDF { stroke [] 0 setdash vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V closepath fill} def +/DiaF { stroke [] 0 setdash vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V closepath fill } def +/Pent { stroke [] 0 setdash 2 copy gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + closepath stroke grestore Pnt } def +/PentF { stroke [] 0 setdash gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + closepath fill grestore } def +/Circle { stroke [] 0 setdash 2 copy + hpt 0 360 arc stroke Pnt } def +/CircleF { stroke [] 0 setdash hpt 0 360 arc fill } def +/C0 { BL [] 0 setdash 2 copy moveto vpt 90 450 arc } bind def +/C1 { BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 90 arc closepath fill + vpt 0 360 arc closepath } bind def +/C2 { BL [] 0 setdash 2 copy moveto + 2 copy vpt 90 180 arc closepath fill + vpt 0 360 arc closepath } bind def +/C3 { BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 180 arc closepath fill + vpt 0 360 arc closepath } bind def +/C4 { BL [] 0 setdash 2 copy moveto + 2 copy vpt 180 270 arc closepath fill + vpt 0 360 arc closepath } bind def +/C5 { BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 90 arc + 2 copy moveto + 2 copy vpt 180 270 arc closepath fill + vpt 0 360 arc } bind def +/C6 { BL [] 0 setdash 2 copy moveto + 2 copy vpt 90 270 arc closepath fill + vpt 0 360 arc closepath } bind def +/C7 { BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 270 arc closepath fill + vpt 0 360 arc closepath } bind def +/C8 { BL [] 0 setdash 2 copy moveto + 2 copy vpt 270 360 arc closepath fill + vpt 0 360 arc closepath } bind def +/C9 { BL [] 0 setdash 2 copy moveto + 2 copy vpt 270 450 arc closepath fill + vpt 0 360 arc closepath } bind def +/C10 { BL [] 0 setdash 2 copy 2 copy moveto vpt 270 360 arc closepath fill + 2 copy moveto + 2 copy vpt 90 180 arc closepath fill + vpt 0 360 arc closepath } bind def +/C11 { BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 180 arc closepath fill + 2 copy moveto + 2 copy vpt 270 360 arc closepath fill + vpt 0 360 arc closepath } bind def +/C12 { BL [] 0 setdash 2 copy moveto + 2 copy vpt 180 360 arc closepath fill + vpt 0 360 arc closepath } bind def +/C13 { BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 90 arc closepath fill + 2 copy moveto + 2 copy vpt 180 360 arc closepath fill + vpt 0 360 arc closepath } bind def +/C14 { BL [] 0 setdash 2 copy moveto + 2 copy vpt 90 360 arc closepath fill + vpt 0 360 arc } bind def +/C15 { BL [] 0 setdash 2 copy vpt 0 360 arc closepath fill + vpt 0 360 arc closepath } bind def +/Rec { newpath 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto + neg 0 rlineto closepath } bind def +/Square { dup Rec } bind def +/Bsquare { vpt sub exch vpt sub exch vpt2 Square } bind def +/S0 { BL [] 0 setdash 2 copy moveto 0 vpt rlineto BL Bsquare } bind def +/S1 { BL [] 0 setdash 2 copy vpt Square fill Bsquare } bind def +/S2 { BL [] 0 setdash 2 copy exch vpt sub exch vpt Square fill Bsquare } bind def +/S3 { BL [] 0 setdash 2 copy exch vpt sub exch vpt2 vpt Rec fill Bsquare } bind def +/S4 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt Square fill Bsquare } bind def +/S5 { BL [] 0 setdash 2 copy 2 copy vpt Square fill + exch vpt sub exch vpt sub vpt Square fill Bsquare } bind def +/S6 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill Bsquare } bind def +/S7 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill + 2 copy vpt Square fill + Bsquare } bind def +/S8 { BL [] 0 setdash 2 copy vpt sub vpt Square fill Bsquare } bind def +/S9 { BL [] 0 setdash 2 copy vpt sub vpt vpt2 Rec fill Bsquare } bind def +/S10 { BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt Square fill + Bsquare } bind def +/S11 { BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt2 vpt Rec fill + Bsquare } bind def +/S12 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill Bsquare } bind def +/S13 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill + 2 copy vpt Square fill Bsquare } bind def +/S14 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill + 2 copy exch vpt sub exch vpt Square fill Bsquare } bind def +/S15 { BL [] 0 setdash 2 copy Bsquare fill Bsquare } bind def +/D0 { gsave translate 45 rotate 0 0 S0 stroke grestore } bind def +/D1 { gsave translate 45 rotate 0 0 S1 stroke grestore } bind def +/D2 { gsave translate 45 rotate 0 0 S2 stroke grestore } bind def +/D3 { gsave translate 45 rotate 0 0 S3 stroke grestore } bind def +/D4 { gsave translate 45 rotate 0 0 S4 stroke grestore } bind def +/D5 { gsave translate 45 rotate 0 0 S5 stroke grestore } bind def +/D6 { gsave translate 45 rotate 0 0 S6 stroke grestore } bind def +/D7 { gsave translate 45 rotate 0 0 S7 stroke grestore } bind def +/D8 { gsave translate 45 rotate 0 0 S8 stroke grestore } bind def +/D9 { gsave translate 45 rotate 0 0 S9 stroke grestore } bind def +/D10 { gsave translate 45 rotate 0 0 S10 stroke grestore } bind def +/D11 { gsave translate 45 rotate 0 0 S11 stroke grestore } bind def +/D12 { gsave translate 45 rotate 0 0 S12 stroke grestore } bind def +/D13 { gsave translate 45 rotate 0 0 S13 stroke grestore } bind def +/D14 { gsave translate 45 rotate 0 0 S14 stroke grestore } bind def +/D15 { gsave translate 45 rotate 0 0 S15 stroke grestore } bind def +/DiaE { stroke [] 0 setdash vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V closepath stroke } def +/BoxE { stroke [] 0 setdash exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V closepath stroke } def +/TriUE { stroke [] 0 setdash vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V closepath stroke } def +/TriDE { stroke [] 0 setdash vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V closepath stroke } def +/PentE { stroke [] 0 setdash gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + closepath stroke grestore } def +/CircE { stroke [] 0 setdash + hpt 0 360 arc stroke } def +/Opaque { gsave closepath 1 setgray fill grestore 0 setgray closepath } def +/DiaW { stroke [] 0 setdash vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V Opaque stroke } def +/BoxW { stroke [] 0 setdash exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V Opaque stroke } def +/TriUW { stroke [] 0 setdash vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V Opaque stroke } def +/TriDW { stroke [] 0 setdash vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V Opaque stroke } def +/PentW { stroke [] 0 setdash gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + Opaque stroke grestore } def +/CircW { stroke [] 0 setdash + hpt 0 360 arc Opaque stroke } def +/BoxFill { gsave Rec 1 setgray fill grestore } def +/Symbol-Oblique /Symbol findfont [1 0 .167 1 0 0] makefont +dup length dict begin {1 index /FID eq {pop pop} {def} ifelse} forall +currentdict end definefont pop +end +%%EndProlog +%%Page: 1 1 +gnudict begin +gsave +50 50 translate +0.100 0.100 scale +90 rotate +0 -5040 translate +0 setgray +newpath +(Helvetica) findfont 140 scalefont setfont +1.000 UL +LTb +1.000 UL +LTa +714 420 M +6248 0 V +1.000 UL +LTb +714 420 M +63 0 V +6185 0 R +-63 0 V +630 420 M +( 0) Rshow +1.000 UL +LTa +714 915 M +6248 0 V +1.000 UL +LTb +714 915 M +63 0 V +6185 0 R +-63 0 V +630 915 M +( 0.1) Rshow +1.000 UL +LTa +714 1409 M +6248 0 V +1.000 UL +LTb +714 1409 M +63 0 V +6185 0 R +-63 0 V +-6269 0 R +( 0.2) Rshow +1.000 UL +LTa +714 1904 M +6248 0 V +1.000 UL +LTb +714 1904 M +63 0 V +6185 0 R +-63 0 V +-6269 0 R +( 0.3) Rshow +1.000 UL +LTa +714 2399 M +6248 0 V +1.000 UL +LTb +714 2399 M +63 0 V +6185 0 R +-63 0 V +-6269 0 R +( 0.4) Rshow +1.000 UL +LTa +714 2893 M +6248 0 V +1.000 UL +LTb +714 2893 M +63 0 V +6185 0 R +-63 0 V +-6269 0 R +( 0.5) Rshow +1.000 UL +LTa +714 3388 M +6248 0 V +1.000 UL +LTb +714 3388 M +63 0 V +6185 0 R +-63 0 V +-6269 0 R +( 0.6) Rshow +1.000 UL +LTa +714 3883 M +6248 0 V +1.000 UL +LTb +714 3883 M +63 0 V +6185 0 R +-63 0 V +-6269 0 R +( 0.7) Rshow +1.000 UL +LTa +714 4377 M +6248 0 V +1.000 UL +LTb +714 4377 M +63 0 V +6185 0 R +-63 0 V +-6269 0 R +( 0.8) Rshow +1.000 UL +LTa +714 4872 M +6248 0 V +1.000 UL +LTb +714 4872 M +63 0 V +6185 0 R +-63 0 V +-6269 0 R +( 0.9) Rshow +1.000 UL +LTa +714 420 M +0 4452 V +1.000 UL +LTb +714 420 M +0 63 V +0 4389 R +0 -63 V +714 280 M +( 0) Cshow +1.000 UL +LTa +1408 420 M +0 4452 V +1.000 UL +LTb +1408 420 M +0 63 V +0 4389 R +0 -63 V +0 -4529 R +( 5) Cshow +1.000 UL +LTa +2102 420 M +0 4452 V +1.000 UL +LTb +2102 420 M +0 63 V +0 4389 R +0 -63 V +0 -4529 R +( 10) Cshow +1.000 UL +LTa +2797 420 M +0 4452 V +1.000 UL +LTb +2797 420 M +0 63 V +0 4389 R +0 -63 V +0 -4529 R +( 15) Cshow +1.000 UL +LTa +3491 420 M +0 4109 V +0 280 R +0 63 V +1.000 UL +LTb +3491 420 M +0 63 V +0 4389 R +0 -63 V +0 -4529 R +( 20) Cshow +1.000 UL +LTa +4185 420 M +0 4109 V +0 280 R +0 63 V +1.000 UL +LTb +4185 420 M +0 63 V +0 4389 R +0 -63 V +0 -4529 R +( 25) Cshow +1.000 UL +LTa +4879 420 M +0 4109 V +0 280 R +0 63 V +1.000 UL +LTb +4879 420 M +0 63 V +0 4389 R +0 -63 V +0 -4529 R +( 30) Cshow +1.000 UL +LTa +5574 420 M +0 4109 V +0 280 R +0 63 V +1.000 UL +LTb +5574 420 M +0 63 V +0 4389 R +0 -63 V +0 -4529 R +( 35) Cshow +1.000 UL +LTa +6268 420 M +0 4109 V +0 280 R +0 63 V +1.000 UL +LTb +6268 420 M +0 63 V +0 4389 R +0 -63 V +0 -4529 R +( 40) Cshow +1.000 UL +LTa +6962 420 M +0 4452 V +1.000 UL +LTb +6962 420 M +0 63 V +0 4389 R +0 -63 V +0 -4529 R +( 45) Cshow +1.000 UL +LTb +714 420 M +6248 0 V +0 4452 V +-6248 0 V +714 420 L +140 2646 M +currentpoint gsave translate 90 rotate 0 0 M +(distribution) Cshow +grestore +3838 70 M +([deg]) Cshow +1.000 UP +1.000 UL +LT0 +6311 4739 M +('M20.keV' us 1:3) Rshow +749 420 Pls +783 773 Pls +818 1122 Pls +853 1466 Pls +888 1806 Pls +922 2135 Pls +957 2433 Pls +992 2717 Pls +1026 2986 Pls +1061 3240 Pls +1096 3470 Pls +1131 3673 Pls +1165 3856 Pls +1200 4003 Pls +1235 4128 Pls +1269 4232 Pls +1304 4316 Pls +1339 4379 Pls +1374 4420 Pls +1408 4439 Pls +1443 4446 Pls +1478 4432 Pls +1512 4398 Pls +1547 4343 Pls +1582 4275 Pls +1616 4221 Pls +1651 4150 Pls +1686 4062 Pls +1721 3957 Pls +1755 3856 Pls +1790 3771 Pls +1825 3672 Pls +1859 3560 Pls +1894 3435 Pls +1929 3323 Pls +1964 3215 Pls +1998 3105 Pls +2033 3010 Pls +2068 2905 Pls +2102 2824 Pls +2137 2739 Pls +2172 2648 Pls +2207 2549 Pls +2241 2447 Pls +2276 2378 Pls +2311 2304 Pls +2345 2224 Pls +2380 2140 Pls +2415 2062 Pls +2450 2003 Pls +2484 1941 Pls +2519 1875 Pls +2554 1805 Pls +2588 1747 Pls +2623 1697 Pls +2658 1644 Pls +2693 1589 Pls +2727 1530 Pls +2762 1490 Pls +2797 1453 Pls +2831 1413 Pls +2866 1372 Pls +2901 1330 Pls +2936 1299 Pls +2970 1266 Pls +3005 1232 Pls +3040 1197 Pls +3074 1164 Pls +3109 1139 Pls +3144 1113 Pls +3178 1086 Pls +3213 1058 Pls +3248 1037 Pls +3283 1022 Pls +3317 1006 Pls +3352 989 Pls +3387 972 Pls +3421 955 Pls +3456 936 Pls +3491 917 Pls +3526 898 Pls +3560 877 Pls +3595 856 Pls +3630 835 Pls +3664 821 Pls +3699 811 Pls +3734 801 Pls +3769 791 Pls +3803 780 Pls +3838 769 Pls +3873 758 Pls +3907 746 Pls +3942 734 Pls +3977 722 Pls +4012 709 Pls +4046 697 Pls +4081 688 Pls +4116 682 Pls +4150 675 Pls +4185 669 Pls +4220 662 Pls +4255 654 Pls +4289 647 Pls +4324 640 Pls +4359 632 Pls +4393 624 Pls +4428 616 Pls +4463 608 Pls +4498 603 Pls +4532 599 Pls +4567 594 Pls +4602 590 Pls +4636 585 Pls +4671 581 Pls +4706 576 Pls +4740 571 Pls +4775 566 Pls +4810 561 Pls +4845 556 Pls +4879 550 Pls +4914 546 Pls +4949 541 Pls +4983 536 Pls +5018 532 Pls +5053 527 Pls +5088 522 Pls +5122 517 Pls +5157 512 Pls +5192 507 Pls +5226 502 Pls +5261 496 Pls +5296 491 Pls +5331 485 Pls +5365 480 Pls +5400 474 Pls +5435 468 Pls +5469 463 Pls +5504 457 Pls +5539 451 Pls +5574 445 Pls +5608 439 Pls +5643 432 Pls +5678 426 Pls +5712 420 Pls +5747 420 Pls +5782 420 Pls +5817 420 Pls +5851 420 Pls +5886 420 Pls +5921 420 Pls +5955 420 Pls +5990 420 Pls +6025 420 Pls +6060 420 Pls +6094 420 Pls +6129 420 Pls +6164 420 Pls +6198 420 Pls +6233 420 Pls +6268 420 Pls +6302 420 Pls +6337 420 Pls +6372 420 Pls +6407 420 Pls +6441 420 Pls +6476 420 Pls +6511 420 Pls +6594 4739 Pls +1.000 UL +LT1 +6311 4599 M +(exp\(-x*x/55.\)*sin\(x/180*3.14\)*14.7) Rshow +6395 4599 M +399 0 V +749 737 M +58 525 V +58 509 V +58 484 V +59 449 V +58 408 V +58 359 V +58 306 V +58 250 V +59 192 V +58 133 V +58 76 V +58 21 V +58 -30 V +59 -77 V +58 -118 V +58 -153 V +58 -181 V +58 -205 V +59 -220 V +58 -232 V +58 -236 V +58 -237 V +58 -232 V +59 -225 V +58 -215 V +58 -202 V +58 -187 V +58 -172 V +59 -156 V +58 -140 V +58 -125 V +58 -110 V +58 -96 V +59 -83 V +58 -70 V +58 -61 V +58 -50 V +58 -42 V +59 -35 V +58 -29 V +58 -23 V +58 -19 V +58 -15 V +59 -12 V +58 -10 V +58 -7 V +58 -6 V +58 -5 V +59 -3 V +58 -3 V +58 -2 V +58 -1 V +58 -1 V +59 -1 V +58 -1 V +58 0 V +58 0 V +58 0 V +59 -1 V +58 0 V +58 0 V +58 0 V +58 0 V +59 0 V +58 0 V +58 0 V +58 0 V +58 0 V +59 0 V +58 0 V +58 0 V +58 0 V +58 0 V +59 0 V +58 0 V +58 0 V +58 0 V +59 0 V +58 0 V +58 0 V +58 0 V +58 0 V +59 0 V +58 0 V +58 0 V +58 0 V +58 0 V +59 0 V +58 0 V +58 0 V +58 0 V +58 0 V +59 0 V +58 0 V +58 0 V +58 0 V +58 0 V +59 0 V +58 0 V +stroke +grestore +end +showpage +%%Trailer +%%DocumentFonts: Helvetica +%%Pages: 1 diff --git a/geant4/LEMuSR/MEYER/M10sin.pdf b/geant4/LEMuSR/MEYER/M10sin.pdf new file mode 100644 index 0000000000000000000000000000000000000000..3d27250293de361541592fe022609c78391265fa GIT binary patch literal 9389 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 literal 0 HcmV?d00001 diff --git a/geant4/LEMuSR/MEYER/Mallsin.eps b/geant4/LEMuSR/MEYER/Mallsin.eps new file mode 100644 index 0000000..db30591 --- /dev/null +++ b/geant4/LEMuSR/MEYER/Mallsin.eps @@ -0,0 +1,978 @@ +%!PS-Adobe-2.0 +%%Title: Mallsin.eps +%%Creator: gnuplot 3.7 patchlevel 3 +%%CreationDate: Tue Apr 12 08:59:12 2005 +%%DocumentFonts: (atend) +%%BoundingBox: 50 50 554 770 +%%Orientation: Landscape +%%Pages: (atend) +%%EndComments +/gnudict 256 dict def +gnudict begin +/Color true def +/Solid false def +/gnulinewidth 5.000 def +/userlinewidth gnulinewidth def +/vshift -46 def +/dl {10 mul} def +/hpt_ 31.5 def +/vpt_ 31.5 def +/hpt hpt_ def +/vpt vpt_ def +/M {moveto} bind def +/L {lineto} bind def +/R {rmoveto} bind def +/V {rlineto} bind def +/vpt2 vpt 2 mul def +/hpt2 hpt 2 mul def +/Lshow { currentpoint stroke M + 0 vshift R show } def +/Rshow { currentpoint stroke M + dup stringwidth pop neg vshift R show } def +/Cshow { currentpoint stroke M + dup stringwidth pop -2 div vshift R show } def +/UP { dup vpt_ mul /vpt exch def hpt_ mul /hpt exch def + /hpt2 hpt 2 mul def /vpt2 vpt 2 mul def } def +/DL { Color {setrgbcolor Solid {pop []} if 0 setdash } + {pop pop pop Solid {pop []} if 0 setdash} ifelse } def +/BL { stroke userlinewidth 2 mul setlinewidth } def +/AL { stroke userlinewidth 2 div setlinewidth } def +/UL { dup gnulinewidth mul /userlinewidth exch def + dup 1 lt {pop 1} if 10 mul /udl exch def } def +/PL { stroke userlinewidth setlinewidth } def +/LTb { BL [] 0 0 0 DL } def +/LTa { AL [1 udl mul 2 udl mul] 0 setdash 0 0 0 setrgbcolor } def +/LT0 { PL [] 1 0 0 DL } def +/LT1 { PL [4 dl 2 dl] 0 1 0 DL } def +/LT2 { PL [2 dl 3 dl] 0 0 1 DL } def +/LT3 { PL [1 dl 1.5 dl] 1 0 1 DL } def +/LT4 { PL [5 dl 2 dl 1 dl 2 dl] 0 1 1 DL } def +/LT5 { PL [4 dl 3 dl 1 dl 3 dl] 1 1 0 DL } def +/LT6 { PL [2 dl 2 dl 2 dl 4 dl] 0 0 0 DL } def +/LT7 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 1 0.3 0 DL } def +/LT8 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 0.5 0.5 0.5 DL } def +/Pnt { stroke [] 0 setdash + gsave 1 setlinecap M 0 0 V stroke grestore } def +/Dia { stroke [] 0 setdash 2 copy vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V closepath stroke + Pnt } def +/Pls { stroke [] 0 setdash vpt sub M 0 vpt2 V + currentpoint stroke M + hpt neg vpt neg R hpt2 0 V stroke + } def +/Box { stroke [] 0 setdash 2 copy exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V closepath stroke + Pnt } def +/Crs { stroke [] 0 setdash exch hpt sub exch vpt add M + hpt2 vpt2 neg V currentpoint stroke M + hpt2 neg 0 R hpt2 vpt2 V stroke } def +/TriU { stroke [] 0 setdash 2 copy vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V closepath stroke + Pnt } def +/Star { 2 copy Pls Crs } def +/BoxF { stroke [] 0 setdash exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V closepath fill } def +/TriUF { stroke [] 0 setdash vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V closepath fill } def +/TriD { stroke [] 0 setdash 2 copy vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V closepath stroke + Pnt } def +/TriDF { stroke [] 0 setdash vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V closepath fill} def +/DiaF { stroke [] 0 setdash vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V closepath fill } def +/Pent { stroke [] 0 setdash 2 copy gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + closepath stroke grestore Pnt } def +/PentF { stroke [] 0 setdash gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + closepath fill grestore } def +/Circle { stroke [] 0 setdash 2 copy + hpt 0 360 arc stroke Pnt } def +/CircleF { stroke [] 0 setdash hpt 0 360 arc fill } def +/C0 { BL [] 0 setdash 2 copy moveto vpt 90 450 arc } bind def +/C1 { BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 90 arc closepath fill + vpt 0 360 arc closepath } bind def +/C2 { BL [] 0 setdash 2 copy moveto + 2 copy vpt 90 180 arc closepath fill + vpt 0 360 arc closepath } bind def +/C3 { BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 180 arc closepath fill + vpt 0 360 arc closepath } bind def +/C4 { BL [] 0 setdash 2 copy moveto + 2 copy vpt 180 270 arc closepath fill + vpt 0 360 arc closepath } bind def +/C5 { BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 90 arc + 2 copy moveto + 2 copy vpt 180 270 arc closepath fill + vpt 0 360 arc } bind def +/C6 { BL [] 0 setdash 2 copy moveto + 2 copy vpt 90 270 arc closepath fill + vpt 0 360 arc closepath } bind def +/C7 { BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 270 arc closepath fill + vpt 0 360 arc closepath } bind def +/C8 { BL [] 0 setdash 2 copy moveto + 2 copy vpt 270 360 arc closepath fill + vpt 0 360 arc closepath } bind def +/C9 { BL [] 0 setdash 2 copy moveto + 2 copy vpt 270 450 arc closepath fill + vpt 0 360 arc closepath } bind def +/C10 { BL [] 0 setdash 2 copy 2 copy moveto vpt 270 360 arc closepath fill + 2 copy moveto + 2 copy vpt 90 180 arc closepath fill + vpt 0 360 arc closepath } bind def +/C11 { BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 180 arc closepath fill + 2 copy moveto + 2 copy vpt 270 360 arc closepath fill + vpt 0 360 arc closepath } bind def +/C12 { BL [] 0 setdash 2 copy moveto + 2 copy vpt 180 360 arc closepath fill + vpt 0 360 arc closepath } bind def +/C13 { BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 90 arc closepath fill + 2 copy moveto + 2 copy vpt 180 360 arc closepath fill + vpt 0 360 arc closepath } bind def +/C14 { BL [] 0 setdash 2 copy moveto + 2 copy vpt 90 360 arc closepath fill + vpt 0 360 arc } bind def +/C15 { BL [] 0 setdash 2 copy vpt 0 360 arc closepath fill + vpt 0 360 arc closepath } bind def +/Rec { newpath 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto + neg 0 rlineto closepath } bind def +/Square { dup Rec } bind def +/Bsquare { vpt sub exch vpt sub exch vpt2 Square } bind def +/S0 { BL [] 0 setdash 2 copy moveto 0 vpt rlineto BL Bsquare } bind def +/S1 { BL [] 0 setdash 2 copy vpt Square fill Bsquare } bind def +/S2 { BL [] 0 setdash 2 copy exch vpt sub exch vpt Square fill Bsquare } bind def +/S3 { BL [] 0 setdash 2 copy exch vpt sub exch vpt2 vpt Rec fill Bsquare } bind def +/S4 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt Square fill Bsquare } bind def +/S5 { BL [] 0 setdash 2 copy 2 copy vpt Square fill + exch vpt sub exch vpt sub vpt Square fill Bsquare } bind def +/S6 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill Bsquare } bind def +/S7 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill + 2 copy vpt Square fill + Bsquare } bind def +/S8 { BL [] 0 setdash 2 copy vpt sub vpt Square fill Bsquare } bind def +/S9 { BL [] 0 setdash 2 copy vpt sub vpt vpt2 Rec fill Bsquare } bind def +/S10 { BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt Square fill + Bsquare } bind def +/S11 { BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt2 vpt Rec fill + Bsquare } bind def +/S12 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill Bsquare } bind def +/S13 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill + 2 copy vpt Square fill Bsquare } bind def +/S14 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill + 2 copy exch vpt sub exch vpt Square fill Bsquare } bind def +/S15 { BL [] 0 setdash 2 copy Bsquare fill Bsquare } bind def +/D0 { gsave translate 45 rotate 0 0 S0 stroke grestore } bind def +/D1 { gsave translate 45 rotate 0 0 S1 stroke grestore } bind def +/D2 { gsave translate 45 rotate 0 0 S2 stroke grestore } bind def +/D3 { gsave translate 45 rotate 0 0 S3 stroke grestore } bind def +/D4 { gsave translate 45 rotate 0 0 S4 stroke grestore } bind def +/D5 { gsave translate 45 rotate 0 0 S5 stroke grestore } bind def +/D6 { gsave translate 45 rotate 0 0 S6 stroke grestore } bind def +/D7 { gsave translate 45 rotate 0 0 S7 stroke grestore } bind def +/D8 { gsave translate 45 rotate 0 0 S8 stroke grestore } bind def +/D9 { gsave translate 45 rotate 0 0 S9 stroke grestore } bind def +/D10 { gsave translate 45 rotate 0 0 S10 stroke grestore } bind def +/D11 { gsave translate 45 rotate 0 0 S11 stroke grestore } bind def +/D12 { gsave translate 45 rotate 0 0 S12 stroke grestore } bind def +/D13 { gsave translate 45 rotate 0 0 S13 stroke grestore } bind def +/D14 { gsave translate 45 rotate 0 0 S14 stroke grestore } bind def +/D15 { gsave translate 45 rotate 0 0 S15 stroke grestore } bind def +/DiaE { stroke [] 0 setdash vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V closepath stroke } def +/BoxE { stroke [] 0 setdash exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V closepath stroke } def +/TriUE { stroke [] 0 setdash vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V closepath stroke } def +/TriDE { stroke [] 0 setdash vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V closepath stroke } def +/PentE { stroke [] 0 setdash gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + closepath stroke grestore } def +/CircE { stroke [] 0 setdash + hpt 0 360 arc stroke } def +/Opaque { gsave closepath 1 setgray fill grestore 0 setgray closepath } def +/DiaW { stroke [] 0 setdash vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V Opaque stroke } def +/BoxW { stroke [] 0 setdash exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V Opaque stroke } def +/TriUW { stroke [] 0 setdash vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V Opaque stroke } def +/TriDW { stroke [] 0 setdash vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V Opaque stroke } def +/PentW { stroke [] 0 setdash gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + Opaque stroke grestore } def +/CircW { stroke [] 0 setdash + hpt 0 360 arc Opaque stroke } def +/BoxFill { gsave Rec 1 setgray fill grestore } def +/Symbol-Oblique /Symbol findfont [1 0 .167 1 0 0] makefont +dup length dict begin {1 index /FID eq {pop pop} {def} ifelse} forall +currentdict end definefont pop +end +%%EndProlog +%%Page: 1 1 +gnudict begin +gsave +50 50 translate +0.100 0.100 scale +90 rotate +0 -5040 translate +0 setgray +newpath +(Helvetica) findfont 140 scalefont setfont +1.000 UL +LTb +1.000 UL +LTa +714 420 M +6248 0 V +1.000 UL +LTb +714 420 M +63 0 V +6185 0 R +-63 0 V +630 420 M +( 0) Rshow +1.000 UL +LTa +714 1056 M +6248 0 V +1.000 UL +LTb +714 1056 M +63 0 V +6185 0 R +-63 0 V +-6269 0 R +( 0.2) Rshow +1.000 UL +LTa +714 1692 M +6248 0 V +1.000 UL +LTb +714 1692 M +63 0 V +6185 0 R +-63 0 V +-6269 0 R +( 0.4) Rshow +1.000 UL +LTa +714 2328 M +6248 0 V +1.000 UL +LTb +714 2328 M +63 0 V +6185 0 R +-63 0 V +-6269 0 R +( 0.6) Rshow +1.000 UL +LTa +714 2964 M +6248 0 V +1.000 UL +LTb +714 2964 M +63 0 V +6185 0 R +-63 0 V +-6269 0 R +( 0.8) Rshow +1.000 UL +LTa +714 3600 M +6248 0 V +1.000 UL +LTb +714 3600 M +63 0 V +6185 0 R +-63 0 V +-6269 0 R +( 1) Rshow +1.000 UL +LTa +714 4236 M +6248 0 V +1.000 UL +LTb +714 4236 M +63 0 V +6185 0 R +-63 0 V +-6269 0 R +( 1.2) Rshow +1.000 UL +LTa +714 4872 M +6248 0 V +1.000 UL +LTb +714 4872 M +63 0 V +6185 0 R +-63 0 V +-6269 0 R +( 1.4) Rshow +1.000 UL +LTa +714 420 M +0 4452 V +1.000 UL +LTb +714 420 M +0 63 V +0 4389 R +0 -63 V +714 280 M +( 0) Cshow +1.000 UL +LTa +1408 420 M +0 4452 V +1.000 UL +LTb +1408 420 M +0 63 V +0 4389 R +0 -63 V +0 -4529 R +( 5) Cshow +1.000 UL +LTa +2102 420 M +0 4452 V +1.000 UL +LTb +2102 420 M +0 63 V +0 4389 R +0 -63 V +0 -4529 R +( 10) Cshow +1.000 UL +LTa +2797 420 M +0 4452 V +1.000 UL +LTb +2797 420 M +0 63 V +0 4389 R +0 -63 V +0 -4529 R +( 15) Cshow +1.000 UL +LTa +3491 420 M +0 4452 V +1.000 UL +LTb +3491 420 M +0 63 V +0 4389 R +0 -63 V +0 -4529 R +( 20) Cshow +1.000 UL +LTa +4185 420 M +0 4452 V +1.000 UL +LTb +4185 420 M +0 63 V +0 4389 R +0 -63 V +0 -4529 R +( 25) Cshow +1.000 UL +LTa +4879 420 M +0 4452 V +1.000 UL +LTb +4879 420 M +0 63 V +0 4389 R +0 -63 V +0 -4529 R +( 30) Cshow +1.000 UL +LTa +5574 420 M +0 3829 V +0 560 R +0 63 V +1.000 UL +LTb +5574 420 M +0 63 V +0 4389 R +0 -63 V +0 -4529 R +( 35) Cshow +1.000 UL +LTa +6268 420 M +0 3829 V +0 560 R +0 63 V +1.000 UL +LTb +6268 420 M +0 63 V +0 4389 R +0 -63 V +0 -4529 R +( 40) Cshow +1.000 UL +LTa +6962 420 M +0 4452 V +1.000 UL +LTb +6962 420 M +0 63 V +0 4389 R +0 -63 V +0 -4529 R +( 45) Cshow +1.000 UL +LTb +714 420 M +6248 0 V +0 4452 V +-6248 0 V +714 420 L +140 2646 M +currentpoint gsave translate 90 rotate 0 0 M +(distribution) Cshow +grestore +3838 70 M +([deg]) Cshow +1.000 UP +1.000 UL +LT0 +6311 4739 M +('M5.keV' us 1:3) Rshow +783 420 Pls +853 449 Pls +922 477 Pls +992 505 Pls +1061 533 Pls +1131 561 Pls +1200 588 Pls +1269 616 Pls +1339 643 Pls +1408 670 Pls +1478 696 Pls +1547 720 Pls +1616 744 Pls +1686 767 Pls +1755 789 Pls +1825 811 Pls +1894 832 Pls +1964 853 Pls +2033 872 Pls +2102 892 Pls +2172 909 Pls +2241 925 Pls +2311 941 Pls +2380 956 Pls +2450 969 Pls +2519 981 Pls +2588 992 Pls +2658 1002 Pls +2727 1011 Pls +2797 1020 Pls +2866 1027 Pls +2936 1034 Pls +3005 1040 Pls +3074 1044 Pls +3144 1048 Pls +3213 1052 Pls +3283 1054 Pls +3352 1055 Pls +3421 1056 Pls +3491 1056 Pls +3560 1056 Pls +3630 1054 Pls +3699 1052 Pls +3769 1049 Pls +3838 1045 Pls +3907 1041 Pls +3977 1035 Pls +4046 1029 Pls +4116 1023 Pls +4185 1019 Pls +4255 1013 Pls +4324 1007 Pls +4393 1001 Pls +4463 993 Pls +4532 985 Pls +4602 977 Pls +4671 968 Pls +4740 958 Pls +4810 951 Pls +4879 943 Pls +4949 936 Pls +5018 928 Pls +5088 919 Pls +5157 910 Pls +5226 900 Pls +5296 890 Pls +5365 879 Pls +5435 870 Pls +5504 861 Pls +5574 852 Pls +5643 843 Pls +5712 834 Pls +5782 825 Pls +5851 817 Pls +5921 809 Pls +5990 801 Pls +6060 792 Pls +6129 785 Pls +6198 779 Pls +6268 772 Pls +6337 765 Pls +6407 757 Pls +6476 750 Pls +6545 742 Pls +6615 734 Pls +6684 725 Pls +6754 718 Pls +6823 712 Pls +6893 706 Pls +6962 700 Pls +6594 4739 Pls +1.000 UP +1.000 UL +LT1 +6311 4599 M +('M10.keV' us 1:3) Rshow +783 420 Crs +853 534 Crs +922 646 Crs +992 757 Crs +1061 866 Crs +1131 971 Crs +1200 1067 Crs +1269 1159 Crs +1339 1245 Crs +1408 1326 Crs +1478 1400 Crs +1547 1465 Crs +1616 1524 Crs +1686 1570 Crs +1755 1610 Crs +1825 1644 Crs +1894 1670 Crs +1964 1690 Crs +2033 1702 Crs +2102 1708 Crs +2172 1710 Crs +2241 1705 Crs +2311 1693 Crs +2380 1675 Crs +2450 1653 Crs +2519 1635 Crs +2588 1611 Crs +2658 1583 Crs +2727 1548 Crs +2797 1516 Crs +2866 1488 Crs +2936 1456 Crs +3005 1419 Crs +3074 1379 Crs +3144 1343 Crs +3213 1308 Crs +3283 1272 Crs +3352 1241 Crs +3421 1208 Crs +3491 1181 Crs +3560 1154 Crs +3630 1124 Crs +3699 1092 Crs +3769 1060 Crs +3838 1038 Crs +3907 1014 Crs +3977 988 Crs +4046 961 Crs +4116 936 Crs +4185 917 Crs +4255 897 Crs +4324 876 Crs +4393 854 Crs +4463 835 Crs +4532 819 Crs +4602 802 Crs +4671 784 Crs +4740 766 Crs +4810 753 Crs +4879 741 Crs +4949 728 Crs +5018 715 Crs +5088 702 Crs +5157 692 Crs +5226 681 Crs +5296 671 Crs +5365 659 Crs +5435 649 Crs +5504 641 Crs +5574 633 Crs +5643 624 Crs +5712 615 Crs +5782 609 Crs +5851 604 Crs +5921 598 Crs +5990 593 Crs +6060 588 Crs +6129 582 Crs +6198 576 Crs +6268 570 Crs +6337 564 Crs +6407 558 Crs +6476 551 Crs +6545 545 Crs +6615 540 Crs +6684 537 Crs +6754 534 Crs +6823 531 Crs +6893 527 Crs +6962 524 Crs +6594 4599 Crs +1.000 UP +1.000 UL +LT2 +6311 4459 M +('M20.keV'us 1:3) Rshow +749 420 Star +783 647 Star +818 871 Star +853 1093 Star +888 1311 Star +922 1522 Star +957 1714 Star +992 1897 Star +1026 2069 Star +1061 2233 Star +1096 2381 Star +1131 2511 Star +1165 2629 Star +1200 2723 Star +1235 2804 Star +1269 2871 Star +1304 2925 Star +1339 2965 Star +1374 2991 Star +1408 3004 Star +1443 3008 Star +1478 2999 Star +1512 2977 Star +1547 2942 Star +1582 2898 Star +1616 2863 Star +1651 2818 Star +1686 2761 Star +1721 2694 Star +1755 2629 Star +1790 2574 Star +1825 2511 Star +1859 2439 Star +1894 2358 Star +1929 2286 Star +1964 2217 Star +1998 2146 Star +2033 2085 Star +2068 2018 Star +2102 1965 Star +2137 1911 Star +2172 1852 Star +2207 1788 Star +2241 1723 Star +2276 1679 Star +2311 1631 Star +2345 1580 Star +2380 1525 Star +2415 1476 Star +2450 1438 Star +2484 1398 Star +2519 1355 Star +2554 1311 Star +2588 1273 Star +2623 1241 Star +2658 1207 Star +2693 1171 Star +2727 1134 Star +2762 1108 Star +2797 1084 Star +2831 1059 Star +2866 1032 Star +2901 1005 Star +2936 985 Star +2970 964 Star +3005 942 Star +3040 920 Star +3074 898 Star +3109 882 Star +3144 866 Star +3178 848 Star +3213 830 Star +3248 817 Star +3283 807 Star +3317 797 Star +3352 786 Star +3387 775 Star +3421 764 Star +3456 752 Star +3491 740 Star +3526 727 Star +3560 714 Star +3595 701 Star +3630 687 Star +3664 678 Star +3699 671 Star +3734 665 Star +3769 658 Star +3803 651 Star +3838 644 Star +3873 637 Star +3907 630 Star +3942 622 Star +3977 614 Star +4012 606 Star +4046 598 Star +4081 592 Star +4116 588 Star +4150 584 Star +4185 580 Star +4220 575 Star +4255 571 Star +4289 566 Star +4324 561 Star +4359 556 Star +4393 551 Star +4428 546 Star +4463 541 Star +4498 538 Star +4532 535 Star +4567 532 Star +4602 529 Star +4636 526 Star +4671 523 Star +4706 520 Star +4740 517 Star +4775 514 Star +4810 511 Star +4845 507 Star +4879 504 Star +4914 501 Star +4949 498 Star +4983 495 Star +5018 492 Star +5053 489 Star +5088 486 Star +5122 482 Star +5157 479 Star +5192 476 Star +5226 472 Star +5261 469 Star +5296 466 Star +5331 462 Star +5365 458 Star +5400 455 Star +5435 451 Star +5469 447 Star +5504 444 Star +5539 440 Star +5574 436 Star +5608 432 Star +5643 428 Star +5678 424 Star +5712 420 Star +5747 420 Star +5782 420 Star +5817 420 Star +5851 420 Star +5886 420 Star +5921 420 Star +5955 420 Star +5990 420 Star +6025 420 Star +6060 420 Star +6094 420 Star +6129 420 Star +6164 420 Star +6198 420 Star +6233 420 Star +6268 420 Star +6302 420 Star +6337 420 Star +6372 420 Star +6407 420 Star +6441 420 Star +6476 420 Star +6511 420 Star +6594 4459 Star +1.000 UP +1.000 UL +LT3 +6311 4319 M +('M30.keV' us 1:3) Rshow +749 420 Box +783 931 Box +818 1433 Box +853 1924 Box +888 2368 Box +922 2775 Box +957 3149 Box +992 3472 Box +1026 3744 Box +1061 3948 Box +1096 4107 Box +1131 4221 Box +1165 4287 Box +1200 4311 Box +1235 4298 Box +1269 4240 Box +1304 4146 Box +1339 4061 Box +1374 3938 Box +1408 3779 Box +1443 3657 Box +1478 3508 Box +1512 3330 Box +1547 3173 Box +1582 3014 Box +1616 2872 Box +1651 2743 Box +1686 2617 Box +1721 2475 Box +1755 2347 Box +1790 2240 Box +1825 2122 Box +1859 2008 Box +1894 1921 Box +1929 1826 Box +1964 1727 Box +1998 1655 Box +2033 1577 Box +2068 1492 Box +2102 1438 Box +2137 1381 Box +2172 1321 Box +2207 1271 Box +2241 1223 Box +2276 1172 Box +2311 1130 Box +2345 1092 Box +2380 1052 Box +2415 1019 Box +2450 997 Box +2484 973 Box +2519 948 Box +2554 921 Box +2588 893 Box +2623 864 Box +2658 833 Box +2693 811 Box +2727 796 Box +2762 781 Box +2797 766 Box +2831 749 Box +2866 732 Box +2901 714 Box +2936 696 Box +2970 682 Box +3005 673 Box +3040 663 Box +3074 653 Box +3109 642 Box +3144 631 Box +3178 620 Box +3213 608 Box +3248 600 Box +3283 593 Box +3317 587 Box +3352 580 Box +3387 573 Box +3421 566 Box +3456 558 Box +3491 551 Box +3526 544 Box +3560 537 Box +3595 530 Box +3630 523 Box +3664 515 Box +3699 508 Box +3734 500 Box +3769 492 Box +3803 484 Box +3838 475 Box +3873 467 Box +3907 458 Box +3942 449 Box +3977 440 Box +4012 431 Box +4046 421 Box +4081 420 Box +4116 420 Box +4150 420 Box +4185 420 Box +4220 420 Box +4255 420 Box +4289 420 Box +4324 420 Box +4359 420 Box +4393 420 Box +4428 420 Box +4463 420 Box +4498 420 Box +4532 420 Box +4567 420 Box +6594 4319 Box +stroke +grestore +end +showpage +%%Trailer +%%DocumentFonts: Helvetica +%%Pages: 1 diff --git a/geant4/LEMuSR/MEYER/Mallsin.pdf b/geant4/LEMuSR/MEYER/Mallsin.pdf new file mode 100644 index 0000000000000000000000000000000000000000..48097cefe884665be3e7409ef832f98a5a6a589a GIT binary patch literal 15322 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 O4&bM})S|Lt*#8IqDjr|} literal 0 HcmV?d00001 diff --git a/geant4/LEMuSR/MEYER/a.out b/geant4/LEMuSR/MEYER/a.out new file mode 100755 index 0000000000000000000000000000000000000000..743679b568d8f99405024caad1c797a80e660cae GIT binary patch literal 30825 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 bWwNq}HHE0U0;?M +#include +#include +#include +#include +using namespace std; + + +meyer::meyer() +{;} + +meyer::~meyer() +{;} + + +void meyer::GFunctions(double* g1,double* g2, double tau) + +{ + + //Diese Routine gibt in Abhaengigkeit von der reduzierten Dicke 'tau' + //Funktionswerte fuer g1 und g2 zurueck. g1 und g2 sind dabei die von + //Meyer angegebenen tabellierten Funktionen fuer die Berechnung von Halbwerts- + //breiten von Streuwinkelverteilungen. (L.Meyer, phys.stat.sol. (b) 44, 253 + //(1971)) + + + double help; + + int i; + + + double tau_[] = {0.2, 0.4, 0.6, 0.8, 1.0, 1.2, 1.4, 1.6, 1.8, 2.0, + 2.5, 3.0, 3.5, 4.0, 4.5, 5.0, 6.0, 7.0, 8.0, 9.0, + 10.0, 12.0, 14.0, 16.0, 18.0, 20.0 }; + + double g1_[] = {0.050,0.115,0.183,0.245,0.305,0.363,0.419,0.473,0.525,0.575, + 0.689,0.799,0.905,1.010,1.100,1.190,1.370,1.540,1.700,1.850, + 1.990,2.270,2.540,2.800,3.050,3.290 }; + + double g2_[] = {0.00,1.25,0.91,0.79,0.73,0.69,0.65,0.63,0.61,0.59, + 0.56,0.53,0.50,0.47,0.45,0.43,0.40,0.37,0.34,0.32, + 0.30,0.26,0.22,0.18,0.15,0.13 }; + + + if (tau kann ich nicht ... => STOP"< Tabelle A + thetaSchlangeMax = 4.0; + } + else if (tau<=8.) + { + //! => Tabelle B + thetaSchlangeMax = 7.0; + } + else if (tau<=20.) + { + //! => Tabelle C + thetaSchlangeMax = 20.0; + } + else + { + std::cout<< "Subroutine ''Get_F_Function_Meyer'':"< kann ich nicht ... => STOP"<50.) + { + thetaStep = .5; + } + + else if (thetaMax>25) + { + thetaStep = .25; + } + else if (thetaMax>12.5) + { + thetaStep = .125; + } + else + { + thetaStep = .0625; + } + + + //Tabelle der F-Werte erstellen: + + nBin = 0; + std::cout<<"thetamax = "<nBinMax) + { + std::cout<< "nBin > nBinMax => EXIT"; + break; + } + + value[nBin] = sin(theta)*F; + + fValues[nBin+1] = F; // ! fuer Testzwecke + fValuesFolded[nBin+1] = sin(theta/180*M_PI)*F;// ! fuer Testzwecke + + + }// end of do loop + + + //Berechnen der Flaecheninhalte der einzelnen Kanaele sowie der Integrale: + + bigtheta:for( i = 1;i<= nBin; i++) + { + area[i] = (value[i]+value[i-1])/2.* thetaStep; + integ[i] = integ[i-1] + area[i]; + } + + + //Normiere totale Flaeche auf 1: + + rHelp = integ[nBin]; + for( i = 1; i<=nBin; i++) + { + value[i] = value[i] / rHelp; + area[i] = area[i] / rHelp; + integ[i] = integ[i] / rHelp; + } + + + //vorerst noch: gib Tabelle in Datei und Histogrammfile aus: + + //! Berechne die Werte fuer theta=0: + + F_Functions_Meyer(tau,0.,&f1,&f2); + F = Meyer_faktor4*Meyer_faktor4 * Ekin*Ekin /2 /M_PI * (f1 - Meyer_faktor3*f2);// TAO, Anselm was: Meyer_faktor5 * Ekin*Ekin * (f1 - Meyer_faktor3*f2); + fValues[1] = F; + fValuesFolded[1] = 0.; + + //! Gib die Werte in das Tabellenfile aus: + + ofstream Mprint("tkm.out"); + theta = thetaStep; + if (!Mprint.is_open()) exit(8); + for( i = 1; i<=nBin+1;i++) + { + Mprint << theta<< " "<< fValues[i]/fValues[1]<<" " << fValuesFolded[i]< Reihe mit hoeherem Index + //iColumn = 2 => Reihe mit kleinerem Index + + + iColumn = 1; + + // 5 continue; + do{ + + if (column_<=8) + { + //! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + //! Werte aus 1. Tabelle: 0.2 <= tau <= 1.8 + + column = column_; + // std::cout<<"thetaSchlange = "<> 20*(a/r0)^(4/3) sein muss. Fuer Protonen auf +c Graphit ist laut Referenz a/r0 gleich 0.26 (mit Dichte von 3.5 g/ccm habe +c ich einen Wert von 0.29 abgeschaetzt). Fuer Myonen hat man den selben +c Wert zu nehmen. Damit ergibt sich die Forderung, dass n >> 3.5 sein muss. +c +c (2) unabhaengig von (1) n >> 5 sein muss, was (1) also mit einschliesst. +c +c Mit n = Pi*r0*r0*Teilchen/Flaeche ergibt sich fuer eine Foliendicke von +c 3 ug/cm^2 als Abschaetzung fuer n ein Wert von 37. (r0 ueber r0 = 0.5 N^(1/3) +c und 3.5 g/ccm zu 8.9e-9 cm abgeschaetzt). D.h., dass die Bedingungen in +c unserem Fall gut erfuellt sind. +c In dem Paper wird eine Formel fuer Halbwertsbreiten angegeben. Ich habe nicht +c kontrolliert, in wie weit die Form der Verteilung tatsaechlich einer Gauss- +c verteilung entspricht. Zumindest im Bereich der Vorwaertsstreuung sollte +c die in diesem Programm verwendete Gaussverteilung aber eine sehr gute +c Naeherung abgeben. Abweichungen bei groesseren Winkeln koennten jedoch u. U. +c die absolute Streuintensitaet in Vorwaertsrichtung verfaelschen. + +czzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz +c HIER GEHT DER PROGRAMMTEXT RICHTIG LOS +czzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz + + + + + +c=============================================================================== + + options /extend_source + + subroutine Get_F_Function_Meyer(tau,Ekin) +c ========================================= + + implicit none + + real tau + real Ekin + + real thetaSchlange,thetaSchlangeMax + real theta,thetaMax,thetaStep + real f1,f2,F + + +c------------------------------------ +c - Parameter: + + real Z1, Z2 ! die atomaren Nummern von Projektil und Target +c real a0 ! Bohrscher Radius in cm + real screeningPar ! Screeningparameter 'a' in cm fuer Teilchen der + ! Kernladungszahl Z1=1 in Kohlenstoff (Z2 = 6) + ! bei Streichung von Z1 (vgl. Referenz, S. 268) + + real r0Meyer ! r0(C) berechnet aus dem screeningParameter 'a' + ! und dem ebenfalls bei Meyer angegebenem + ! Verhaeltnis a/r0=0.26 (vgl. Referenz, S. 263 oben) + real eSquare ! elektrische Ladung zum Quadrat in keV*cm + + real Pi ! die Kreiszahl + +c parameter (a0 = 5.29E-9) + parameter (Z1 = 1, Z2 = 6, ScreeningPar = 2.5764E-9) + parameter (r0Meyer = 9.909E-9, eSquare = 1.44E-10) + parameter (Pi = 3.141592654) + + real Meyer_Faktor3 + real Meyer_Faktor4 + real zzz ! 'Hilfsparameter' + real Meyer_Faktor5 + + parameter (Meyer_faktor3 = (screeningPar/r0Meyer) * (screeningPar/r0Meyer)) + parameter (Meyer_faktor4 = screeningPar / (2.*Z1*Z2*eSquare) * Pi/180.) + parameter (zzz = screeningPar / (2.*Z1*Z2*eSquare)) + parameter (Meyer_faktor5 = zzz*zzz / (8*Pi*Pi)) + +c------------------------------------ + + integer nBin,nBinMax + parameter (nBinMax=201) + real value(0:nBinMax) /0.,nBinMax*0./ + real area(nBinMax) / nBinMax*0./ + real integ(0:nBinMax) /0.,nBinMax*0./ + common /MeyerTable/ value,area,integ,thetaStep,nBin + + integer i + real rhelp + + integer HB_memsize + parameter(HB_memsize=500000) + real memory(HB_memsize) + COMMON /PAWC/ memory + + +c nur noch fuer Testzwecke: + + real fValues(203) + real fValuesFolded(203) + + integer idh + parameter (idh = 50) + + INCLUDE 'mutrack$sourcedirectory:COM_DIRS.INC' + character filename*20 ! Name der Ausgabe-Dateien + COMMON /filename/ filename + +c------------------------------------------------------------------------------- + +c Festlegen des maximalen Theta-Wertes sowie der Schrittweite: + + if (tau.LT.0.2) then + write(*,*) 'Subroutine ''Get_F_Function_Meyer'':' + write(*,*) 'Effektive Dicke ist kleiner als 0.2 => kann ich nicht ... => STOP' + call exit + elseif (tau.LE.2.) then + ! => Tabelle A + thetaSchlangeMax = 4.0 + elseif (tau.LE.8.) then + ! => Tabelle B + thetaSchlangeMax = 7.0 + elseif (tau.LE.20.) then + ! => Tabelle C + thetaSchlangeMax = 20.0 + else + write(*,*) 'Subroutine ''Get_F_Function_Meyer'':' + write(*,*) 'Effektive Dicke ist groesser als 20 => kann ich nicht ... => STOP' + call exit + endif + + thetaMax = thetaSchlangeMax / Meyer_Faktor4 / Ekin + if (thetaMax.GT.50) then + thetaStep = .5 + elseif (thetaMax.GT.25) then + thetaStep = .25 + elseif (thetaMax.GT.12.5) then + thetaStep = .125 + else + thetaStep = .0625 + endif + + +c Tabelle der F-Werte erstellen: + + nBin = 0 + do theta = thetaStep, thetaMax, thetaStep + + ! Berechne aus theta das 'reduzierte' thetaSchlange (dabei gleich + ! noch von degree bei theta in Radiant bei thetaSchlange umrechnen): + + thetaSchlange = Meyer_faktor4 * Ekin * theta + + ! Auslesen der Tabellenwerte fuer die f-Funktionen: + + call F_Functions_Meyer(tau,thetaSchlange,f1,f2) + if (thetaSchlange.EQ.-1) then + ! wir sind jenseits von thetaSchlangeMax + goto 10 + endif + + ! Berechnen der Streuintensitaet: + F = Meyer_faktor5 * Ekin*Ekin * (f1 - Meyer_faktor3*f2) + + nBin = nBin + 1 + if (nBin.GT.nBinMax) then + write(*,*) 'nBin > nBinMax => EXIT' + call exit + endif + value(nBin) = sind(theta)*F + + fValues(nBin+1) = F ! fuer Testzwecke + fValuesFolded(nBin+1) = sind(theta)*F ! fuer Testzwecke + + enddo + + +c Berechnen der Flaecheninhalte der einzelnen Kanaele sowie der Integrale: + +10 do i = 1, nBin + area(i) = (value(i)+value(i-1))/2. * thetaStep + integ(i) = integ(i-1) + area(i) + enddo + + +c Normiere totale Flaeche auf 1: + + rHelp = integ(nBin) + do i = 1, nBin + value(i) = value(i) / rHelp + area(i) = area(i) / rHelp + integ(i) = integ(i) / rHelp + enddo + + +c vorerst noch: gib Tabelle in Datei und Histogrammfile aus: + + ! Berechne die Werte fuer theta=0: + + call F_Functions_Meyer(tau,0.,f1,f2) + F = Meyer_faktor5 * Ekin*Ekin * (f1 - Meyer_faktor3*f2) + fValues(1) = F + fValuesFolded(1) = 0. + + ! Gib die Werte in das Tabellenfile aus: + +c theta = 0. +c open (10,file=outDir//':'//filename//'.TAB',status='NEW') +c do i = 1, nBin+1 +c write(10,*) theta, fValues(i), fValuesFolded(i) +c theta = theta + thetaStep +c enddo +c close (10) + + + ! Buchen und Fuellen der Histogramme: + + call HBOOK1(idh,'F',nBin+1,-0.5*thetaStep,(real(nBin)+0.5)*thetaStep,0.) + call HPAK(idh,fValues) + call HRPUT(idh,outDir//':'//filename//'.RZ','N') + call HDELET(idh) + + call HBOOK1(idh+1,'F*sin([q])',nBin+1,-0.5*thetaStep,(real(nBin)+0.5)*thetaStep,0.) + call HPAK(idh+1,fValuesFolded) + call HRPUT(idh+1,outDir//':'//filename//'.RZ','U') + call HDELET(idh+1) + + + END + + +c=============================================================================== + + options /extend_source + + subroutine throwMeyerAngle (theta) +c ================================== + + implicit none + + real lowerbound,y1,y2,f,root,radiant,fraction + integer bin,nBin + integer nBinMax + parameter (nBinMax=201) + + real theta,thetaStep + real value(0:nBinMax) /0.,nBinMax*0./ + real area(nBinMax) / nBinMax*0./ + real integ(0:nBinMax) /0.,nBinMax*0./ + common /MeyerTable/ value,area,integ,thetaStep,nBin + + real rhelp + + real random + integer seed + common /seed/ seed + + +c bin: Nummer des Bins, innerhalb dessen das Integral den Wert von +c random erreicht oder ueberschreitet: + + random = ran(seed) + + bin = 1 + do while (random.GT.integ(bin)) + bin = bin + 1 + if (bin.GT.nBin) then + write(*,*) 'error 1' + call exit + endif + enddo + + fraction = (random-integ(bin-1)) / (integ(bin)-integ(bin-1)) + y1 = value(bin-1) + y2 = value(bin) + f = thetaStep / (y2-y1) + rHelp = y1*f + + radiant = rHelp*rHelp + fraction*thetaStep*(y1+y2)*f + root = SQRT(radiant) + lowerBound = real(bin-1)*thetaStep + if (f.GT.0) then + theta = lowerBound - rHelp + root + else + theta = lowerBound - rHelp - root + endif + + + END + + +c=============================================================================== + + options /extend_source + + subroutine F_Functions_Meyer(tau,thetaSchlange,f1,f2) +c ===================================================== + + implicit none + +c Diese Routine gibt in Abhaengigkeit von 'thetaSchlange' und 'tau' +c Funktionswerte fuer f1 und f2 zurueck. f1 und f2 entsprechen dabei den +c bei Meyer angegebenen Funktion gleichen Namens. Die in dieser Routine +c verwendeten Tabellen sind eben dieser Referenz entnommen: +c L.Meyer, phys.stat.sol. (b) 44, 253 (1971) + + real tau,thetaSchlange + real f1, f2, f1_(2), f2_(2) + + integer column_,column,row + + integer iColumn + real weightCol, weightRow + +c------------------------------------------------------------------------------- diff --git a/geant4/LEMuSR/MEYER/meyer.h b/geant4/LEMuSR/MEYER/meyer.h new file mode 100644 index 0000000..351da12 --- /dev/null +++ b/geant4/LEMuSR/MEYER/meyer.h @@ -0,0 +1,27 @@ +#ifndef meyer_h +#define meyer_h 1 + +#include +#include +#include +#include +#include +#include +#include + + +class meyer +{ + public: + meyer(); + ~meyer(); + + + void GFunctions(double*, double*, double); + void Get_F_Function_Meyer(double tau, double Ekin, double Z1, double Z2, double m1, double m2); + void F_Functions_Meyer( double tau,double thetaSchlange,double *f1,double *f2); + + +}; + +#endif diff --git a/geant4/LEMuSR/MEYER/mk.sh b/geant4/LEMuSR/MEYER/mk.sh new file mode 100644 index 0000000..064470f --- /dev/null +++ b/geant4/LEMuSR/MEYER/mk.sh @@ -0,0 +1 @@ +g++ testmeyer.cc meyer.cc diff --git a/geant4/LEMuSR/MEYER/mtest.for b/geant4/LEMuSR/MEYER/mtest.for new file mode 100644 index 0000000..494d82a --- /dev/null +++ b/geant4/LEMuSR/MEYER/mtest.for @@ -0,0 +1,698 @@ + PROGRAM mtest + IMPLICIT NONE + + + write(*,*)'SUBROUTINE G_Functions:' + + + SUBROUTINE G_Functions(G1,G2,tau) +c ================================= + +c Diese Routine gibt in Abhaengigkeit von der reduzierten Dicke 'tau' +c Funktionswerte fuer g1 und g2 zurueck. g1 und g2 sind dabei die von +c Meyer angegebenen tabellierten Funktionen fuer die Berechnung von Halbwerts- +c breiten von Streuwinkelverteilungen. (L.Meyer, phys.stat.sol. (b) 44, 253 +c (1971)) + + IMPLICIT NONE + + real tau,g1,g2 + real tau_(26),g1_(26),g2_(26) + real help + + integer i + + DATA tau_ /0.2, 0.4, 0.6, 0.8, 1.0, 1.2, 1.4, 1.6, 1.8, 2.0, + + 2.5, 3.0, 3.5, 4.0, 4.5, 5.0, 6.0, 7.0, 8.0, 9.0, + + 10.0, 12.0, 14.0, 16.0, 18.0, 20.0 / + + DATA g1_ /0.050,0.115,0.183,0.245,0.305,0.363,0.419,0.473,0.525,0.575, + + 0.689,0.799,0.905,1.010,1.100,1.190,1.370,1.540,1.700,1.850, + + 1.990,2.270,2.540,2.800,3.050,3.290 / + DATA g2_ / 0.00,1.25,0.91,0.79,0.73,0.69,0.65,0.63,0.61,0.59, + + 0.56,0.53,0.50,0.47,0.45,0.43,0.40,0.37,0.34,0.32, + + 0.30,0.26,0.22,0.18,0.15,0.13 / + + if (tau.LT.tau_(1)) then + write(*,*) + write(*,*)'SUBROUTINE G_Functions:' + write(*,*)' Fehler bei Berechnung der g-Funktionen fuer Winkelaufstreuung:' + write(*,*)' aktuelles tau ist kleiner als kleinster Tabellenwert:' + write(*,*)' tau = ',tau + write(*,*)' tau_(1) = ',tau_(1) + write(*,*) + STOP + endif + + i = 1 + + 10 i = i + 1 + if (i.EQ.27) then + write(*,*) + write(*,*)'SUBROUTINE G_Functions:' + write(*,*)' Fehler bei Berechnung der g-Funktionen fuer Winkelaufstreuung:' + write(*,*)' aktuelles tau ist groesser als groesster Tabellenwert:' + write(*,*)' tau = ',tau + write(*,*)' tau_(26) = ',tau_(26) + write(*,*) + STOP + elseif (tau.gt.tau_(i)) then + goto 10 + endif + + +c lineare Interpolation zwischen Tabellenwerten: + + help = (tau-tau_(i-1))/(tau_(i)-tau_(i-1)) + + g1 = g1_(i-1) + help*(g1_(i)-g1_(i-1)) + g2 = g2_(i-1) + help*(g2_(i)-g2_(i-1)) + + + END + + +c=============================================================================== + + options /extend_source + + subroutine Get_F_Function_Meyer(tau,Ekin) +c ========================================= + + implicit none + + real tau + real Ekin + + real thetaSchlange,thetaSchlangeMax + real theta,thetaMax,thetaStep + real f1,f2,F + + +c------------------------------------ +c - Parameter: + + real Z1, Z2 ! die atomaren Nummern von Projektil und Target +c real a0 ! Bohrscher Radius in cm + real screeningPar ! Screeningparameter 'a' in cm fuer Teilchen der + ! Kernladungszahl Z1=1 in Kohlenstoff (Z2 = 6) + ! bei Streichung von Z1 (vgl. Referenz, S. 268) + + real r0Meyer ! r0(C) berechnet aus dem screeningParameter 'a' + ! und dem ebenfalls bei Meyer angegebenem + ! Verhaeltnis a/r0=0.26 (vgl. Referenz, S. 263 oben) + real eSquare ! elektrische Ladung zum Quadrat in keV*cm + + real Pi ! die Kreiszahl + +c parameter (a0 = 5.29E-9) + parameter (Z1 = 1, Z2 = 6, ScreeningPar = 2.5764E-9) + parameter (r0Meyer = 9.909E-9, eSquare = 1.44E-10) + parameter (Pi = 3.141592654) + + real Meyer_Faktor3 + real Meyer_Faktor4 + real zzz ! 'Hilfsparameter' + real Meyer_Faktor5 + + parameter (Meyer_faktor3 = (screeningPar/r0Meyer) * (screeningPar/r0Meyer)) + parameter (Meyer_faktor4 = screeningPar / (2.*Z1*Z2*eSquare) * Pi/180.) + parameter (zzz = screeningPar / (2.*Z1*Z2*eSquare)) + parameter (Meyer_faktor5 = zzz*zzz / (8*Pi*Pi)) + +c------------------------------------ + + integer nBin,nBinMax + parameter (nBinMax=201) + real value(0:nBinMax) /0.,nBinMax*0./ + real area(nBinMax) / nBinMax*0./ + real integ(0:nBinMax) /0.,nBinMax*0./ + common /MeyerTable/ value,area,integ,thetaStep,nBin + + integer i + real rhelp + + integer HB_memsize + parameter(HB_memsize=500000) + real memory(HB_memsize) + COMMON /PAWC/ memory + + +c nur noch fuer Testzwecke: + + real fValues(203) + real fValuesFolded(203) + + integer idh + parameter (idh = 50) + + INCLUDE 'mutrack$sourcedirectory:COM_DIRS.INC' + character filename*20 ! Name der Ausgabe-Dateien + COMMON /filename/ filename + +c------------------------------------------------------------------------------- + +c Festlegen des maximalen Theta-Wertes sowie der Schrittweite: + + if (tau.LT.0.2) then + write(*,*) 'Subroutine ''Get_F_Function_Meyer'':' + write(*,*) 'Effektive Dicke ist kleiner als 0.2 => kann ich nicht ... => STOP' + call exit + elseif (tau.LE.2.) then + ! => Tabelle A + thetaSchlangeMax = 4.0 + elseif (tau.LE.8.) then + ! => Tabelle B + thetaSchlangeMax = 7.0 + elseif (tau.LE.20.) then + ! => Tabelle C + thetaSchlangeMax = 20.0 + else + write(*,*) 'Subroutine ''Get_F_Function_Meyer'':' + write(*,*) 'Effektive Dicke ist groesser als 20 => kann ich nicht ... => STOP' + call exit + endif + + thetaMax = thetaSchlangeMax / Meyer_Faktor4 / Ekin + if (thetaMax.GT.50) then + thetaStep = .5 + elseif (thetaMax.GT.25) then + thetaStep = .25 + elseif (thetaMax.GT.12.5) then + thetaStep = .125 + else + thetaStep = .0625 + endif + + +c Tabelle der F-Werte erstellen: + + nBin = 0 + do theta = thetaStep, thetaMax, thetaStep + + ! Berechne aus theta das 'reduzierte' thetaSchlange (dabei gleich + ! noch von degree bei theta in Radiant bei thetaSchlange umrechnen): + + thetaSchlange = Meyer_faktor4 * Ekin * theta + + ! Auslesen der Tabellenwerte fuer die f-Funktionen: + + call F_Functions_Meyer(tau,thetaSchlange,f1,f2) + if (thetaSchlange.EQ.-1) then + ! wir sind jenseits von thetaSchlangeMax + goto 10 + endif + + ! Berechnen der Streuintensitaet: + F = Meyer_faktor5 * Ekin*Ekin * (f1 - Meyer_faktor3*f2) + + nBin = nBin + 1 + if (nBin.GT.nBinMax) then + write(*,*) 'nBin > nBinMax => EXIT' + call exit + endif + value(nBin) = sind(theta)*F + + fValues(nBin+1) = F ! fuer Testzwecke + fValuesFolded(nBin+1) = sind(theta)*F ! fuer Testzwecke + + enddo + + +c Berechnen der Flaecheninhalte der einzelnen Kanaele sowie der Integrale: + + 10 do i = 1, nBin + area(i) = (value(i)+value(i-1))/2. * thetaStep + integ(i) = integ(i-1) + area(i) + enddo + + +c Normiere totale Flaeche auf 1: + + rHelp = integ(nBin) + do i = 1, nBin + value(i) = value(i) / rHelp + area(i) = area(i) / rHelp + integ(i) = integ(i) / rHelp + enddo + + +c vorerst noch: gib Tabelle in Datei und Histogrammfile aus: + + ! Berechne die Werte fuer theta=0: + + call F_Functions_Meyer(tau,0.,f1,f2) + F = Meyer_faktor5 * Ekin*Ekin * (f1 - Meyer_faktor3*f2) + fValues(1) = F + fValuesFolded(1) = 0. + + ! Gib die Werte in das Tabellenfile aus: + +c theta = 0. +c open (10,file=outDir//':'//filename//'.TAB',status='NEW') +c do i = 1, nBin+1 +c write(10,*) theta, fValues(i), fValuesFolded(i) +c theta = theta + thetaStep +c enddo +c close (10) + + + ! Buchen und Fuellen der Histogramme: + + call HBOOK1(idh,'F',nBin+1,-0.5*thetaStep,(real(nBin)+0.5)*thetaStep,0.) + call HPAK(idh,fValues) + call HRPUT(idh,outDir//':'//filename//'.RZ','N') + call HDELET(idh) + + call HBOOK1(idh+1,'F*sin([q])',nBin+1,-0.5*thetaStep,(real(nBin)+0.5)*thetaStep,0.) + call HPAK(idh+1,fValuesFolded) + call HRPUT(idh+1,outDir//':'//filename//'.RZ','U') + call HDELET(idh+1) + + + END + + +c=============================================================================== + + options /extend_source + + subroutine throwMeyerAngle (theta) +c ================================== + + implicit none + + real lowerbound,y1,y2,f,root,radiant,fraction + integer bin,nBin + integer nBinMax + parameter (nBinMax=201) + + real theta,thetaStep + real value(0:nBinMax) /0.,nBinMax*0./ + real area(nBinMax) / nBinMax*0./ + real integ(0:nBinMax) /0.,nBinMax*0./ + common /MeyerTable/ value,area,integ,thetaStep,nBin + + real rhelp + + real random + integer seed + common /seed/ seed + + +c bin: Nummer des Bins, innerhalb dessen das Integral den Wert von +c random erreicht oder ueberschreitet: + + random = ran(seed) + + bin = 1 + do while (random.GT.integ(bin)) + bin = bin + 1 + if (bin.GT.nBin) then + write(*,*) 'error 1' + call exit + endif + enddo + + fraction = (random-integ(bin-1)) / (integ(bin)-integ(bin-1)) + y1 = value(bin-1) + y2 = value(bin) + f = thetaStep / (y2-y1) + rHelp = y1*f + + radiant = rHelp*rHelp + fraction*thetaStep*(y1+y2)*f + root = SQRT(radiant) + lowerBound = real(bin-1)*thetaStep + if (f.GT.0) then + theta = lowerBound - rHelp + root + else + theta = lowerBound - rHelp - root + endif + + + END + + +c=============================================================================== + + options /extend_source + + subroutine F_Functions_Meyer(tau,thetaSchlange,f1,f2) +c ===================================================== + + implicit none + +c Diese Routine gibt in Abhaengigkeit von 'thetaSchlange' und 'tau' +c Funktionswerte fuer f1 und f2 zurueck. f1 und f2 entsprechen dabei den +c bei Meyer angegebenen Funktion gleichen Namens. Die in dieser Routine +c verwendeten Tabellen sind eben dieser Referenz entnommen: +c L.Meyer, phys.stat.sol. (b) 44, 253 (1971) + + real tau,thetaSchlange + real f1, f2, f1_(2), f2_(2) + + integer column_,column,row + + integer iColumn + real weightCol, weightRow + +c------------------------------------------------------------------------------- + +c die Tabellendaten der Referenz (Tabellen 2 und 3): + + integer nColumn + parameter (nColumn = 25) + real tau_(nColumn) / + + 0.2, 0.4, 0.6, 0.8, 1.0, 1.2, 1.4, 1.6, 1.8, 2.0, 2.5, 3.0, + + 3.5, 4.0, 4.5, 5.0, 6.0, 7.0, 8.0, 10., 12., 14., 16., 18., 20. / + + integer nRowA + parameter (nRowA = 25) + real thetaSchlangeA(nRowA) / + + .00, .05, .10, .15, .20, .25, .30, .35, .40, .45, .50, .60, + + .70, .80, .90, 1.0, 1.2, 1.4, 1.6, 1.8, 2.0, 2.5, 3.0, 3.5, 4.0 / + + integer nRowB + parameter (nRowB = 24) + real thetaSchlangeB(nRowB) / + + 0.0, 0.2, 0.4, 0.5, 0.6, 0.8, 1.0, 1.2, 1.4, 1.5, 1.6, 1.8, + + 2.0, 2.2, 2.4, 2.6, 2.8, 3.0, 3.5, 4.0, 4.5, 5.0, 6.0, 7.0 / + + integer nRowC + parameter (nRowC = 24) + real thetaSchlangeC(nRowC) / + + 0.0, 0.5, 1.0, 1.5, 2.0, 2.5, 3.0, 3.5, 4.0, 4.5, 5.0, 6.0, + + 7.0, 8.0, 9.0, 10., 11., 12., 13., 14., 15., 16., 18., 20. / + + + real f1_A(9,nRowA) + + /1.69E+2,4.55E+1,2.11E+1,1.25E+1,8.48E+0,6.21E+0,4.80E+0,3.86E+0,3.20E+0, + + 9.82E+1,3.72E+1,1.97E+1,1.20E+1,8.27E+0,6.11E+0,4.74E+0,3.83E+0,3.17E+0, + + 3.96E+1,2.58E+1,1.65E+1,1.09E+1,7.73E+0,5.82E+0,4.58E+0,3.72E+0,3.10E+0, + + 1.76E+1,1.58E+1,1.27E+1,9.26E+0,6.93E+0,5.38E+0,4.31E+0,3.55E+0,2.99E+0, + + 8.62E+0,1.01E+1,9.45E+0,7.58E+0,6.02E+0,4.85E+0,3.98E+0,3.33E+0,2.84E+0, + + 4.65E+0,6.55E+0,6.91E+0,6.06E+0,5.11E+0,4.28E+0,3.62E+0,3.08E+0,2.66E+0, + + 2.74E+0,4.45E+0,5.03E+0,4.78E+0,4.27E+0,3.72E+0,3.23E+0,2.82E+0,2.47E+0, + + 1.77E+0,3.02E+0,3.71E+0,3.76E+0,3.53E+0,3.20E+0,2.86E+0,2.55E+0,2.27E+0, + + 1.22E+0,2.19E+0,2.78E+0,2.96E+0,2.91E+0,2.73E+0,2.51E+0,2.28E+0,2.07E+0, + + 8.82E-1,1.59E+0,2.12E+0,2.35E+0,2.39E+0,2.32E+0,2.19E+0,2.03E+0,1.87E+0, + + 6.55E-1,1.20E+0,1.64E+0,1.88E+0,1.97E+0,1.96E+0,1.90E+0,1.79E+0,1.68E+0, + + 3.80E-1,7.15E-1,1.01E+0,1.22E+0,1.35E+0,1.40E+0,1.41E+0,1.39E+0,1.34E+0, + + 2.26E-1,4.45E-1,6.44E-1,8.08E-1,9.28E-1,1.01E+0,1.05E+0,1.06E+0,1.05E+0, + + 1.39E-1,2.80E-1,4.21E-1,5.45E-1,6.46E-1,7.22E-1,7.75E-1,8.07E-1,8.21E-1, + + 8.22E-2,1.76E-1,2.78E-1,3.71E-1,4.53E-1,5.21E-1,5.74E-1,6.12E-1,6.37E-1, + + 5.04E-2,1.11E-1,1.86E-1,2.57E-1,3.22E-1,3.79E-1,4.27E-1,4.65E-1,4.94E-1, + + 2.51E-2,5.60E-2,9.24E-2,1.31E-1,1.69E-1,2.02E-1,2.40E-1,2.71E-1,2.97E-1, + + 1.52E-2,3.20E-2,5.08E-2,7.23E-2,9.51E-2,1.18E-1,1.41E-1,1.63E-1,1.83E-1, + + 1.03E-2,2.05E-2,3.22E-2,4.55E-2,6.01E-2,7.53E-2,9.02E-2,1.05E-1,1.19E-1, + + 8.80E-3,1.48E-2,2.25E-2,3.13E-2,4.01E-2,5.03E-2,6.01E-2,7.01E-2,8.01E-2, + + 6.10E-3,1.15E-2,1.71E-2,2.28E-2,2.89E-2,3.52E-2,4.18E-2,4.86E-2,5.55E-2, + + 0.00 ,0.00 ,0.00 ,0.00 ,0.00 ,1.71E-2,1.98E-2,2.28E-2,2.58E-2, + + 0.00 ,0.00 ,0.00 ,0.00 ,0.00 ,8.90E-3,1.02E-2,1.16E-2,1.31E-2, + + 0.00 ,0.00 ,0.00 ,0.00 ,0.00 ,4.90E-3,5.70E-3,6.40E-3,7.20E-3, + + 0.00 ,0.00 ,0.00 ,0.00 ,0.00 ,2.90E-3,3.40E-3,3.90E-3,4.30E-3/ + + real f1_B(9,nRowB) + + /2.71E+0,1.92E+0,1.46E+0,1.16E+0,9.52E-1,8.03E-1,6.90E-1,5.32E-1,4.28E-1, + + 2.45E+0,1.79E+0,1.39E+0,1.12E+0,9.23E-1,7.82E-1,6.75E-1,5.23E-1,4.23E-1, + + 1.87E+0,1.48E+0,1.20E+0,9.96E-1,8.42E-1,7.24E-1,6.32E-1,4.98E-1,4.07E-1, + + 1.56E+0,1.30E+0,1.09E+0,9.19E-1,7.89E-1,6.86E-1,6.03E-1,4.80E-1,3.95E-1, + + 1.28E+0,1.11E+0,9.62E-1,8.33E-1,7.27E-1,6.40E-1,5.69E-1,4.59E-1,3.81E-1, + + 8.23E-1,7.90E-1,7.29E-1,6.64E-1,6.01E-1,5.44E-1,4.94E-1,4.12E-1,3.49E-1, + + 5.14E-1,5.36E-1,5.29E-1,5.07E-1,4.78E-1,4.47E-1,4.16E-1,3.60E-1,3.13E-1, + + 3.19E-1,3.58E-1,3.76E-1,3.78E-1,3.70E-1,3.57E-1,3.45E-1,3.08E-1,2.76E-1, + + 2.02E-1,2.40E-1,2.64E-1,2.77E-1,2.82E-1,2.80E-1,2.65E-1,2.59E-1,2.39E-1, + + 1.67E-1,1.96E-1,2.20E-1,2.36E-1,2.44E-1,2.47E-1,2.45E-1,2.35E-1,2.21E-1, + + 1.33E-1,1.61E-1,1.85E-1,2.02E-1,2.12E-1,2.18E-1,2.18E-1,2.14E-1,2.03E-1, + + 8.99E-2,1.12E-1,1.32E-1,1.48E-1,1.59E-1,1.67E-1,1.68E-1,1.75E-1,1.72E-1, + + 6.24E-2,7.94E-2,9.50E-2,1.09E-1,1.20E-1,1.29E-1,1.35E-1,1.42E-1,1.43E-1, + + 4.55E-2,5.74E-2,6.98E-2,8.11E-2,9.09E-2,9.92E-2,1.06E-1,1.15E-1,1.19E-1, + + 3.35E-2,4.22E-2,5.19E-2,6.11E-2,6.95E-2,7.69E-2,8.33E-2,9.28E-2,9.85E-2, + + 2.50E-2,3.16E-2,3.92E-2,4.66E-2,5.35E-2,6.00E-2,6.57E-2,7.49E-2,8.13E-2, + + 1.90E-2,2.40E-2,2.99E-2,3.58E-2,4.16E-2,4.70E-2,5.20E-2,6.05E-2,6.70E-2, + + 1.47E-2,1.86E-2,2.32E-2,2.79E-2,3.25E-2,3.70E-2,4.12E-2,4.89E-2,5.51E-2, + + 8.10E-3,1.04E-2,1.30E-2,1.57E-2,1.84E-2,2.12E-2,2.40E-2,2.93E-2,3.42E-2, + + 4.80E-3,6.20E-3,7.70E-3,9.30E-3,1.09E-2,1.26E-2,1.44E-2,1.79E-2,2.14E-2, + + 2.80E-3,3.80E-3,4.70E-3,5.70E-3,6.70E-3,7.50E-3,8.90E-3,1.13E-2,1.36E-2, + + 1.70E-3,2.30E-3,2.90E-3,3.60E-3,4.20E-3,4.90E-3,5.60E-3,7.20E-3,8.80E-3, + + 0.00 ,0.00 ,0.00 ,0.00 ,0.00 ,0.00 ,2.00E-3,2.80E-3,3.50E-3, + + 0.00 ,0.00 ,0.00 ,0.00 ,0.00 ,0.00 ,8.80E-4,1.20E-3,1.60E-3/ + + real f1_C(7,nRowC) + + /3.65E-1,2.62E-1,2.05E-1,1.67E-1,1.41E-1,1.21E-1,1.05E-1, + + 3.33E-1,2.50E-1,1.95E-1,1.61E-1,1.36E-1,1.18E-1,1.03E-1, + + 2.75E-1,2.18E-1,1.76E-1,1.48E-1,1.27E-1,1.11E-1,9.80E-2, + + 2.04E-1,1.75E-1,1.50E-1,1.29E-1,1.13E-1,1.01E-1,9.00E-2, + + 1.41E-1,1.31E-1,1.19E-1,1.08E-1,9.71E-2,8.88E-2,8.01E-2, + + 9.32E-2,9.42E-2,9.10E-2,8.75E-2,8.00E-2,7.44E-2,6.91E-2, + + 5.98E-2,6.52E-2,6.72E-2,6.62E-2,6.40E-2,6.12E-2,5.82E-2, + + 3.83E-2,4.45E-2,4.80E-2,4.96E-2,4.98E-2,4.90E-2,4.77E-2, + + 2.46E-2,3.01E-2,3.40E-2,3.65E-2,3.79E-2,3.84E-2,3.83E-2, + + 1.59E-2,2.03E-2,2.39E-2,2.66E-2,2.85E-2,2.97E-2,3.04E-2, + + 1.04E-2,1.37E-2,1.66E-2,1.92E-2,2.12E-2,2.27E-2,2.37E-2, + + 4.39E-3,6.26E-3,8.26E-3,9.96E-3,1.15E-2,1.29E-2,1.41E-2, + + 2.06E-3,3.02E-3,4.24E-3,5.28E-3,6.32E-3,7.32E-3,8.26E-3, + + 1.21E-3,1.69E-3,2.24E-3,2.85E-3,3.50E-3,4.16E-3,4.82E-3, + + 8.50E-4,1.10E-3,1.38E-3,1.65E-3,2.03E-3,2.45E-3,2.88E-3, + + 5.90E-4,7.40E-4,8.50E-4,9.90E-4,1.23E-3,1.49E-3,1.71E-3, + + 3.90E-4,4.60E-4,5.20E-4,6.30E-4,7.65E-4,9.65E-4,1.12E-3, + + 2.40E-4,2.70E-4,3.10E-4,3.98E-4,4.97E-4,6.03E-4,7.18E-4, + + 1.50E-4,1.70E-4,2.15E-4,2.70E-4,3.35E-4,4.35E-4,5.00E-4, + + 1.00E-4,1.20E-4,1.46E-4,1.90E-4,2.40E-4,2.88E-4,3.43E-4, + + 0.00 ,0.00 ,1.04E-4,1.41E-4,1.80E-4,2.10E-4,2.50E-4, + + 0.00 ,0.00 ,8.20E-5,1.06E-4,1.38E-4,1.58E-4,1.85E-4, + + 0.00 ,0.00 ,5.40E-5,7.00E-5,8.60E-5,1.03E-4,1.20E-4, + + 0.00 ,0.00 ,4.20E-5,5.40E-5,6.50E-5,7.70E-5,8.80E-5/ + + real f2_A(9,nRowA) + + / 3.52E+3, 3.27E+2, 9.08E+1, 3.85E+1, 2.00E+1, 1.18E+1, 7.55E+0, 5.16E+0, 3.71E+0, + + 2.58E+2, 1.63E+2, 7.30E+1, 3.42E+1, 1.85E+1, 1.11E+1, 7.18E+0, 4.96E+0, 3.59E+0, + + -1.12E+2, 4.84E+0, 3.56E+1, 2.34E+1, 1.45E+1, 9.33E+0, 6.37E+0, 4.51E+0, 3.32E+0, + + -5.60E+1,-1.12E+1, 9.87E+0, 1.24E+1, 9.59E+0, 7.01E+0, 5.16E+0, 3.83E+0, 2.91E+0, + + -2.13E+1,-1.22E+1,-2.23E+0, 3.88E+0, 5.15E+0, 4.65E+0, 3.87E+0, 3.12E+0, 2.45E+0, + + -8.25E+0,-9.58E+0,-5.59E+0,-1.40E+0, 1.76E+0, 2.71E+0, 2.71E+0, 2.35E+0, 1.95E+0, + + -3.22E+0,-6.12E+0,-5.28E+0,-2.87E+0,-1.92E-1, 1.32E+0, 1.69E+0, 1.74E+0, 1.48E+0, + + -1.11E+0,-3.40E+0,-4.12E+0,-3.08E+0,-6.30E-1, 3.60E-1, 9.20E-1, 1.03E+0, 1.04E+0, + + -2.27E-1,-2.00E+0,-2.93E+0,-2.69E+0,-1.48E+0,-3.14E-1, 2.69E-1, 5.28E-1, 6.09E-1, + + 1.54E-1,-1.09E+0,-2.10E+0,-2.15E+0,-1.47E+0,-6.77E-1,-1.80E-1, 1.08E-1, 2.70E-1, + + 3.28E-1,-6.30E-1,-1.50E+0,-1.68E+0,-1.34E+0,-8.43E-1,-4.60E-1,-1.85E-1,-4.67E-3, + + 3.32E-1,-2.06E-1,-7.32E-1,-9.90E-1,-9.42E-1,-8.20E-1,-6.06E-1,-4.51E-1,-3.01E-1, + + 2.72E-1,-3.34E-2,-3.49E-1,-5.65E-1,-6.03E-1,-5.79E-1,-5.05E-1,-4.31E-1,-3.45E-1, + + 2.02E-1, 2.80E-2,-1.54E-1,-3.00E-1,-3.59E-1,-3.76E-1,-4.60E-1,-3.40E-1,-3.08E-1, + + 1.38E-1, 4.84E-2,-5.56E-2,-1.44E-1,-2.04E-1,-2.39E-1,-2.54E-1,-2.49E-1,-2.48E-1, + + 9.47E-2, 4.86E-2,-1.08E-2,-6.44E-2,-1.02E-1,-1.34E-1,-1.62E-1,-1.79E-1,-1.87E-1, + + 5.33E-2, 3.71E-2, 1.85E-2, 1.63E-3,-1.69E-2,-3.69E-2,-5.66E-2,-7.78E-2,-9.33E-2, + + 3.38E-2, 2.40E-2, 1.62E-2, 9.90E-3, 3.76E-3,-4.93E-3,-1.66E-2,-3.05E-2,-4.22E-2, + + 2.12E-2, 1.56E-2, 1.05E-2, 7.80E-3, 7.92E-3, 6.30E-3, 3.20E-4,-8.50E-3,-1.66E-2, + + 1.40E-2, 9.20E-3, 5.30E-3, 4.70E-3, 6.31E-3, 8.40E-3, 5.30E-3, 8.80E-4,-3.30E-3, + + 9.20E-3, 4.70E-3, 1.70E-3, 2.60E-3, 4.49E-3, 6.60E-3, 6.00E-3, 4.70E-3, 2.80E-3, + + 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , + + 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , + + 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , + + 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00 / + + real f2_B(9,nRowB) + + / 2.75E+0, 1.94E+0, 9.13E-1, 6.06E-1, 4.26E-1, 3.14E-1, 2.40E-1, 1.51E-1, 1.03E-1, + + 1.94E+0, 1.16E+0, 7.56E-1, 5.26E-1, 3.81E-1, 2.87E-1, 2.23E-1, 1.43E-1, 9.78E-2, + + 5.85E-1, 5.04E-1, 4.10E-1, 3.30E-1, 2.69E-1, 2.17E-1, 1.78E-1, 1.22E-1, 8.71E-2, + + 7.83E-2, 2.00E-1, 2.35E-1, 2.19E-1, 1.97E-1, 1.73E-1, 1.48E-1, 1.08E-1, 7.93E-2, + + -1.82E-1, 1.56E-2, 1.04E-1, 1.36E-1, 1.38E-1, 1.31E-1, 1.19E-1, 9.46E-2, 7.19E-2, + + -2.71E-1,-1.66E-1,-7.29E-2,-4.74E-3, 3.60E-2, 5.50E-2, 6.28E-2, 5.98E-2, 5.09E-2, + + -1.87E-1,-1.58E-1,-1.09E-1,-5.80E-2,-2.03E-2, 2.48E-3, 1.99E-2, 3.36E-2, 3.27E-2, + + -1.01E-1,-1.05E-1,-8.95E-2,-6.63E-2,-3.93E-2,-2.38E-2,-9.22E-3, 8.47E-3, 1.52E-2, + + -5.19E-2,-6.47E-2,-6.51E-2,-5.62E-2,-4.51E-2,-3.49E-2,-2.45E-2,-8.19E-3, 2.05E-3, + + -3.68E-2,-4.89E-2,-5.36E-2,-5.06E-2,-4.27E-2,-3.65E-2,-2.80E-2,-1.33E-2,-3.47E-3, + + -2.33E-2,-3.69E-2,-4.41E-2,-4.38E-2,-3.97E-2,-3.50E-2,-2.88E-2,-1.60E-2,-6.68E-3, + + -8.76E-3,-2.07E-2,-2.90E-2,-3.17E-2,-3.09E-2,-2.92E-2,-2.63E-2,-1.79E-2,-1.03E-2, + + -1.20E-3,-1.11E-2,-1.90E-2,-2.20E-2,-2.32E-2,-2.24E-2,-2.10E-2,-1.66E-2,-1.11E-2, + + 1.72E-3,-4.82E-3,-1.02E-2,-1.42E-2,-1.65E-2,-1.66E-2,-1.60E-2,-1.39E-2,-1.09E-2, + + 2.68E-3,-1.18E-3,-5.19E-3,-8.30E-5,-1.01E-2,-1.14E-2,-1.16E-2,-1.16E-2,-9.99E-3, + + 2.81E-3, 8.21E-4,-1.96E-3,-3.99E-3,-5.89E-3,-7.13E-3,-8.15E-3,-9.05E-3,-8.60E-3, + + 2.61E-3, 1.35E-3,-2.99E-4,-1.79E-3,-3.12E-3,-4.44E-3,-5.61E-3,-7.01E-3,-7.27E-3, + + 2.06E-3, 1.45E-3, 4.64E-4,-5.97E-4,-1.71E-3,-2.79E-3,-3.84E-3,-5.29E-3,-5.90E-3, + + 1.07E-3, 9.39E-4, 8.22E-4, 3.58E-4,-1.15E-4,-6.60E-4,-1.18E-3,-2.15E-3,-2.88E-3, + + 4.97E-4, 5.46E-4, 6.15E-4, 5.56E-4, 3.14E-4, 9.80E-5,-1.30E-4,-5.98E-4,-1.07E-4, + + 1.85E-4, 3.11E-4, 4.25E-4, 4.08E-4, 3.63E-4, 3.04E-4, 2.24E-4, 2.80E-5,-2.10E-4, + + 4.80E-5, 1.48E-4, 2.44E-4, 2.80E-4, 3.01E-4, 3.11E-4, 3.13E-4, 2.40E-4, 1.10E-4, + + 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , 1.39E-4, 1.80E-4, 1.80E-4, + + 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , 4.38E-5, 7.30E-5, 8.40E-5/ + + real f2_C(7,nRowC) + + / 7.36E-2, 4.21E-2, 2.69E-2, 1.83E-2, 1.34E-2, 1.01E-2, 7.88E-3, + + 5.79E-2, 3.61E-2, 2.34E-2, 1.64E-2, 1.21E-2, 9.26E-3, 7.28E-3, + + 2.94E-2, 2.17E-2, 1.60E-2, 1.23E-2, 9.49E-3, 7.45E-3, 5.95E-3, + + 2.30E-3, 7.07E-3, 7.76E-3, 7.02E-3, 6.13E-3, 5.17E-3, 4.34E-3, + + -7.50E-3,-2.00E-3, 9.93E-4, 2.36E-3, 2.82E-3, 2.86E-3, 2.72E-3, + + -8.27E-3,-5.37E-3,-2.58E-3,-7.96E-4, 3.75E-4, 9.71E-4, 1.28E-3, + + -5.79E-3,-5.12E-3,-3.86E-3,-2.46E-3,-1.20E-3,-3.74E-4, 1.74E-4, + + -3.26E-3,-3.43E-3,-3.26E-3,-2.68E-3,-1.84E-3,-1.12E-3,-4.54E-4, + + -1.46E-3,-1.49E-3,-2.20E-3,-2.18E-3,-1.85E-3,-1.40E-3,-8.15E-4, + + -4.29E-4,-9.44E-4,-1.29E-3,-1.50E-3,-1.51E-3,-1.36E-3,-9.57E-4, + + -3.30E-5,-3.66E-4,-6.78E-4,-9.38E-4,-1.09E-3,-1.09E-3,-9.56E-4, + + 1.50E-4, 3.10E-5,-1.38E-4,-3.06E-4,-4.67E-4,-5.48E-4,-6.08E-4, + + 1.00E-4, 8.50E-5, 2.30E-5,-6.60E-5,-1.58E-4,-2.40E-4,-3.05E-4, + + 5.40E-5, 6.50E-5, 4.90E-5, 1.20E-5,-3.60E-5,-8.90E-5,-1.31E-4, + + 2.90E-5, 4.30E-5, 4.40E-5, 2.90E-5, 5.10E-6,-2.20E-5,-4.80E-5, + + 1.40E-5, 2.40E-5, 2.80E-5, 2.60E-5, 1.90E-5, 7.50E-6,-1.10E-5, + + 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , + + 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , + + 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , + + 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , + + 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , + + 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , + + 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , + + 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00 / + + +c=============================================================================== + +c Bestimme, welche Reihen der Tabellen fuer Interpolation benoetigt werden: + + if (tau.LT.tau_(1)) then + write(*,*) 'tau is less than the lowest tabulated value:' + write(*,*) 'tau = ',tau + write(*,*) 'minimum = ',tau_(1) + call exit + elseif (tau.GT.tau_(nColumn)) then + write(*,*) 'tau is greater than the highest tabulated value:' + write(*,*) 'tau = ',tau + write(*,*) 'maximum = ',tau_(nColumn) + call exit + endif + + column_ = 2 + do while (tau.GT.tau_(column_)) + column_ = column_ + 1 + enddo + ! Das Gewicht der Reihe zu groesserem Tau: + weightCol = (tau-tau_(column_-1)) / (tau_(column_)-tau_(column_-1)) + + +c Besorge fuer gegebenes 'thetaSchlange' die interpolierten f1- und f2 -Werte +c der beiden relevanten Reihen: +c iColumn = 1 => Reihe mit hoeherem Index +c iColumn = 2 => Reihe mit kleinerem Index + + + iColumn = 1 + + + 5 continue + + if (column_.LE.9) then ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ! Werte aus 1. Tabelle: 0.2 <= tau <= 1.8 + + column = column_ + + if (thetaSchlange.LT.thetaSchlangeA(1)) then + write(*,*) 'thetaSchlange is less than the lowest tabulated value in table 1:' + write(*,*) 'thetaSchlange = ',thetaSchlange + write(*,*) 'minimum = ',thetaSchlangeA(1) + call exit + elseif (thetaSchlange.GT.thetaSchlangeA(nRowA)) then +c write(*,*) 'thetaSchlange is greater than the highest tabulated value in table 1:' +c write(*,*) 'thetaSchlange = ',thetaSchlange +c write(*,*) 'maximum = ',thetaSchlangeA(nRowA) +c call exit + thetaSchlange = -1. + RETURN + endif + + row = 2 + do while (thetaSchlange.GT.thetaSchlangeA(row)) + row = row + 1 + enddo + ! Gewicht des Tabellenwertes zu groesseren ThetaSchlange: + weightRow = (thetaSchlange-thetaSchlangeA(row-1)) / + + (thetaSchlangeA(row)-thetaSchlangeA(row-1)) + + f1_(iColumn) = (1.-weightRow) * f1_A(column,row-1) + + + weightRow * f1_A(column,row) + f2_(iColumn) = (1.-weightRow) * f2_A(column,row-1) + + + weightRow * f2_A(column,row) + + + elseif (column_.LE.18) then ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ! Werte aus 2. Tabelle: 2.0 <= tau <= 7.0 + + column = column_ - 9 + + if (thetaSchlange.LT.thetaSchlangeB(1)) then + write(*,*) 'thetaSchlange is less than the lowest tabulated value in table 1:' + write(*,*) 'thetaSchlange = ',thetaSchlange + write(*,*) 'minimum = ',thetaSchlangeB(1) + call exit + elseif (thetaSchlange.GT.thetaSchlangeB(nRowB)) then +c write(*,*) 'thetaSchlange is greater than the highest tabulated value in table 1:' +c write(*,*) 'thetaSchlange = ',thetaSchlange +c write(*,*) 'maximum = ',thetaSchlangeB(nRowB) +c call exit + thetaSchlange = -1. + RETURN + endif + + row = 2 + do while (thetaSchlange.GT.thetaSchlangeB(row)) + row = row + 1 + enddo + ! Gewicht des Tabellenwertes zu groesseren ThetaSchlange: + weightRow = (thetaSchlange-thetaSchlangeB(row-1)) / + + (thetaSchlangeB(row)-thetaSchlangeB(row-1)) + + f1_(iColumn) = (1.-weightRow) * f1_B(column,row-1) + + + weightRow * f1_B(column,row) + f2_(iColumn) = (1.-weightRow) * f2_B(column,row-1) + + + weightRow * f2_B(column,row) + + + else ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ! Werte aus 3. Tabelle: 8.0 <= tau <= 20. + + column = column_ - 18 + + if (thetaSchlange.LT.thetaSchlangeC(1)) then + write(*,*) 'thetaSchlange is less than the lowest tabulated value in table 1:' + write(*,*) 'thetaSchlange = ',thetaSchlange + write(*,*) 'minimum = ',thetaSchlangeC(1) + call exit + elseif (thetaSchlange.GT.thetaSchlangeC(nRowC)) then +c write(*,*) 'thetaSchlange is greater than the highest tabulated value in table 1:' +c write(*,*) 'thetaSchlange = ',thetaSchlange +c write(*,*) 'maximum = ',thetaSchlangeC(nRowC) +c call exit + thetaSchlange = -1. + RETURN + endif + + row = 2 + do while (thetaSchlange.GT.thetaSchlangeC(row)) + row = row + 1 + enddo + ! Gewicht des Tabellenwertes zu groesseren ThetaSchlange: + weightRow = (thetaSchlange-thetaSchlangeC(row-1)) / + + (thetaSchlangeC(row)-thetaSchlangeC(row-1)) + + f1_(iColumn) = (1.-weightRow) * f1_C(column,row-1) + + + weightRow * f1_C(column,row) + f2_(iColumn) = (1.-weightRow) * f2_C(column,row-1) + + + weightRow * f2_C(column,row) + + + endif ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + + if (iColumn.EQ.1) then + column_ = column_ - 1 + iColumn = 2 + goto 5 + endif + + f1 = weightCol*f1_(1) + (1.-weightCol)*f1_(2) + f2 = weightCol*f2_(1) + (1.-weightCol)*f2_(2) + + + END + + +c=============================================================================== + END PROGRAM mtest diff --git a/geant4/LEMuSR/MEYER/mutrack.for b/geant4/LEMuSR/MEYER/mutrack.for new file mode 100644 index 0000000..8de2f9a --- /dev/null +++ b/geant4/LEMuSR/MEYER/mutrack.for @@ -0,0 +1,5466 @@ +c +c------------------------------------------------------------------------------ +c +c Changes starting on 17-Oct-2000, TP, PSI +c +c - add position of muons at TD foil and position of +c foil electrons when hitting MCP3 to NTuple +c - start changes for migration to NT and Unix; avoid using +c logicals or environment variables; cancel OPTIONS/EXTEND_SOURCE; +c use lower case filenames always +c +c****************************************************************************** +c* ... MUTRACK.FOR (Stand: Februar '96) * +c* * +c* Dieses Programm integriert Teilchenbahnen in der UHV-Kammer der NEMU- * +c* Apparatur. Startpunkte koennen zwischen der Moderatorfolie und dem MCP2 * +c* frei gewaehlt werden, Endpunkt der Berechnungen ist (sofern die Teilchen * +c* nicht vorher schon ausscheiden) die Ebene des MCP2. Bis jetzt koennen * +c* also nur Bewegungen in Strahlrichtung, nicht entgegen derselben berechnet * +c* werden. * +c* Das Programm selbst rechnet den zweistufigen Beschleuniger als ideal, * +c* bietet aber die Moeglichkeit Simulationen von TP oder AH (Programm 'Accel')* +c* mit realem Beschleuniger einzulesen. Die Integration der Teilchenbahnen * +c* erstreckt sich bei diesen Simulationen bis etwa zum He-Schild, MUTRACK * +c* rechnet dann von dort aus weiter. * +c* Verschiedene Einstellungen koennen in ineinandergreifenden Schleifen in * +c* aequidistanten Schritten variiert werden (z.B. Spannungen des Transport- * +c* Systems, Startgroessen der Teilchen, Masse und Ladung ...). Ein Teil dieser* +c* Groessen kann aber auch alternativ nach verschiedenen frei waehlbaren * +c* Zufallsverteilungen gewurfelt werden. * +c* Die Integrationsergebnisse koennen in der Form von NTupeln abgespeichert * +c* werden, was sie der Darstellung und Auswertung mit dem CERN-Programm PAW * +c* zugaenglich macht. * +c* Neben der reinen Integrationsarbeit fuehrt Mutrack Statistiken ueber * +c* verschiedene Groessen (z.Z. verschiedene Flugzeiten und Ortsverteilungen) * +c* die Mittelwerte und Standandartabweichungen sowie Minimal- und Maximalwerte* +c* umfassen. * +c* Diese Groessen koennen einfach ausgegeben oder in einem Tabellenfile abge- * +c* speichert werden, welches von PHYSICA mittels der Fortran-Routine * +c* 'READ_DATA' eingelesen werden kann. Verschiedene PHYSICA-Makros * +c* (.PCM-files) ermoeglichen dann die Darstellung dieser statistischen * +c* Groessen in Form von 2D- und 3D-Graphiken. (z.B. Abhaengigkeit der Trans- * +c* mission von HV-Settings des Transportsystems). * +c* Die momentan vorhandenen Routinen heissen * +c* * +c* MUINIT.PCM * +c* HELP.PCM * +c* MUPLOT_1DIM.PCM * +c* MUPLOT_2DIM.PCM * +c* TYPE_LOGHEADER.PCM * +c* TYPE_PARAMS_GRAPHIC.PCM * +c* TYPE_PARAMS_TEXT.PCM * +c* * +c* Nach dem Start (von dem Directory aus, in dem obige Routinen abgelegt sind)* +c* muss PHYSICA mit dem Befehl '@MUINIT' initialisiert werden. Danach koennen * +c* obige Routinen ueber Aliasse angesprochen werden. Weitere Informationen * +c* hierzu erhaelt man, indem man in PHYSICA nach der Initialisierung 'MUHELP' * +c* eingibt. * +c* Der Sourcecode fuer Mutrack ist ueber verschiedene .FOR-Dateien verteilt, * +c* die jeweils zu einem Problembereich gehoerige Subroutinen enthalten. Die * +c* zur Zeit vorhandenen Files und die darin enthaltenen Routinen sind: +c* +c* MUTRACK.FOR +c* SUB_ARTLIST.FOR +c* SUB_OUTPUT.FOR +c* SUB_INPUT.FOR +c* SUB_INTEGR_FO.FOR +c* SUB_INTEGR_L1.FOR +c* SUB_INTEGR_L3.FOR +c* SUB_INTEGR_M2.FOR +c* SUB_PICTURE.FOR +c* SUB_TRIGGER.FOR +c* +c* +c* Includefiles mit COMMON-Blöcken: +c* +c* COM_DIRS.INC +c* COM_KAMMER.INC +c* COM_LUNS.INC +c* COM_MUTRACK.INC +c* COM_OUTPUT.INC +c* COM_TD_EXT.INC +c* COM_TD_INT.INC +c* COM_WINKEL.INC +c* GEO_KAMMER.INPUT +c* GEO_TRIGGER.INC +c* +c* +c* Icludefile mit Defaultwerten fuer eine Reihe benutzerdefinierbarer und Programm- +c* interner Groessen: +c* +c* INITIALIZE.INC +c* +c* +c* Includefiles fuer die Potentialmappen: +c* +c* MAP_DEF_FO.INC +c* MAP_DEF_L1.INC +c* MAP_DEF_L3.INC +c* MAP_DEF_M2.INC +c* +c* READ_MAP.INC +c* +c* +c* Benoetigte Eingabfiles: +c* +c* MUTRACK.INPUT (fuer die Integrationen zu verwendende Einstellungen) +c* kammer_geo.INPUT (Spezifizierung der Kammergeometrie) +c* mappenName.INFO (Dateien mit Angaben ueber zugehoerige Potentialmappen) +c* mappenName.MAPPE (die Potentialmappen) +c* MUTRACK_NR.DAT (zuletzt vergebene Nummern der Ausgabedateien, wird +c* von Mutrack verwaltet). +c* +c* +c* Fuer die Erstellung der Potentialmappen mit dem Triumf-Programm stehen folgende +c* Hilfsmittel zur Verfuegung: +c* +c* BESCHL-INIT.FOR +c* LENSE-INIT.FOR +c* +c* Diese Boundary-Routinen stellen folgende Moeglichkeiten zur Verfuegung: +c* +c* Initialisierung von Scratch, von 2D und von 3D-Mappen. Kontrollmoeglichkeiten +c* ueber die Ausgabe der Potentialbereiche. +c* +c* Die Mappen koennen von PHYSICA aus mittels der FORTRAN-Routine ' ' +c* und den .PCM-Makros ' ' ... angeschaut und ausgegeben werden. +c* +c* +c* +c* Liste der moeglichen Ausgabefiles: +c* +c* MU_nnnn.LOG +c* MU_nnnn.GEO +c* MU_nnnn.PHYSICA +c* MU_nnnn.NTP +c* MU_nnnn._tab +c* +c* Diese Version von MUTRACK enthaelt nur noch rudimentaere Anteile des ursprueng- +c* lichen Programmes von Thomas Wutzke. Hauptunterschiede und Erweiterungen sind: +c* +c* # Ersetzen der Euler-Integration durch ein schrittweitenkontrolliertes +c* Runge-Kutta Verfahren. Der dieser Implementation zugrundeliegende Algo- +c* rythmus entstammt dabei dem Buch 'NUMERICAL RECIPES, The Art of Scientific +c* Computing' (Fortran Version) von Press, Flannery, Teukolsky und Vetterling, +c* Cambridge University Press (1989). +c* +c* # Verbesserter Algorythmus zur Berechnung der Feldstaerken aus den Potential- +c* Mappen. +c* +c* # Implementierung des gesamten Statistikaparates. (Zuvor waren PAW-Ntupel die +c* einzige Ausgabeform abgesehen von den Debuginformationen). +c* +c* # Uebersichtlichere Gestalltung der Ein- und Ausgabe, sowie der Debug-Infos. +c* +c* # Implementierung der Moeglichkeit, verschiedenen Parameter in Schleifen zu +c* durchlaufen. +c* +c* # Implementierung der fuer die graphische Darstellung mit PHYSICA notwendigen +c* Routinen. +c* +c* # Implementierung des Triggerdetektors. +c* +c* # Implementierung der Graphikausgabe der Teilchenbahnen (diese Routinen wurden +c* in ihrer ersten Fassung von Michael Birke geschrieben). +c* +c* # Umstellen der Potentialmappen auf 'unformattiert' und Einschraenken der +c* Mappen auf den wirklich benoetigten Bereich (d.h. z.B. Ausnutzen der +c* Symmetrie der Linsen, wodurch die Mappengroesse bei den Linsen mehr als +c* halbiert werden konnte. +c* +c* # Implementierung der Moeglichkeit, die Kammergeometrie (d.h. die Positionen +c* der verwendeten Elemente) sowie die Potentialmappen (z.B. fuer unter- +c* schiedliche Linsenkonfigurationen) ueber ein .INPUT-Eingabefile ohne +c* Umschreiben des Sourcecodes aendern zu koennen. +c* +c* Das Programm verwendet fuer Graphikdarstellung und NTupel-Erzeugung Routinen der +c* zum PAW-Komplex gehoerenden CERN-Bibliotheken 'HPLOT' und 'HBOOK'. +c* +c* Am Anfang der Deatei 'COM_MUTRACK.INC' findet sich eine Liste der wichtigsten +c* Aenderungen ueber die verschiedenen Versionen ab 1.4.1. +c* +c* Gruss, Anselm Hofer +c****************************************************************************** +c + +C =============== + program MUTRACK +C =============== + +c Deklarationen: + + Implicit None + + INCLUDE 'com_mutrack.inc' + INCLUDE 'com_dirs.inc' + INCLUDE 'com_td_ext.inc' + INCLUDE 'com_winkel.inc' + INCLUDE 'com_kammer.inc' + INCLUDE 'geo_trigger.inc' + + +c die SCHLEIFENVARIABLEN fuer die 'do 200 ...'-Schleifenund und damit +c zusammenhaengendes (Common-Bloecke werden fuer die NTupel-Ausgabe benoetigt): + +c - 'virtuelle' Flugstreckenverlaengerungen: + + real delta_L1,delta_L2 + +c - Energieverlust in der Triggerfolie und Dicke derselben: + + real E_loss + +c - Drehwinkel: +c (alfaTgt, alfaSp, alfaTD und ihre Winkelfunktionen werden in 'COM_WINKEL.INC' +c erledigt: COMMON /ANGELS/) + + real y_intersectSP ! Benoetigt fuer Schnittpkt. der Trajektorie + real yUppLeft, yLowLeft ! mit forderer Spiegelebene + + real x_intersectTD ! Benoetigt fuer Schnittpkt. der Trajektorie + ! mit TD-Folie + real x_intersectTDMap ! ... mit TD-Mappe + common /x_intersectTD/ x_intersectTD,x_intersectTDMap + +c - Masse und Ladung: + + real m, m_ ! Masse, Laufvariable fuer Massen-Schleife + real q, q_ ! Ladung, Laufvariable fuer Ladungs-Schleife + integer qInt + COMMON /charge/ qInt ! fuer 'NTP_charge' + + integer nNeutral,nCharged ! fuer Ausgabe des gewuerfelten neutralen anteils + COMMON /nNeutral/ nNeutral,nCharged + +c - MCP2: + + real U_MCP2 ! Spannung am MCP2 + + +c - Triggerdetektor: U_F, U_V, U_H und U_MCP3 werden in 'COM_TD_EXT.INC' +c erledigt. (COMMON /TRIGGERSETTINGS/) + +c - Transportsystem: + + real U_Tgt ! Target-Spannung + real U_Gua ! Spannung am Guardring + real U_G1 ! Spannung am ersten Gitter + real U_L1 ! Spannung an Linse 1 + real U_Sp ! Spiegelspannung + real U_L2 ! Spannung an Linse 2 + real U_L3 ! Spannung an Linse 3 + + COMMON /U_L2/ U_L2 ! fuer die Addition der 'L2andFo'-Mappe + + real last_U_L2 / -1.E10 / ! fuer die Addition der 'L2andFo'-Mappe + real last_U_F / -1.E10 / + +c - Magnetfeldstaerken: + + real B_Helm ! Magnetfeld der Helmholtzspulen + real B_TD ! Magnetfeld der Kompensationsspule am TD + +c - Startparameter: + + integer randomloop_ ! Laufvariable fuer zufallsverteilte Starts + real E0_ ! Laufvariable fuer Startenergie_Schleife + real theta0_ ! Laufvarialbe fuer Startwinkel-Schleife + real Sin_theta0, Cos_theta0 ! Startwinkel gegen x-Achse + real phi0_ ! Laufvariable fuer Startwinkel-Schleife + real Sin_phi0, Cos_phi0 ! azimuthaler Startwinkel (phi0=0: y-Achse) + real y0_ ! Laufvariable fuer Startpositions_Schleife + real z0_ ! Laufvariable fuer Startpositions_Schleife + real r0 ! Radius beim Wuerfeln der Startposition + real phi_r0 ! Winkel beim Wuerfeln der Startposition + + ! x0(3),v0(3),E0,theta0,phi0 werden in 'COM_MUTRACK.INC' declariert + + +c allgemeine Trajektoriengroessen + + real dt ! zeitl. Aenderung + real v_xy ! Geschwindigkeit in x/y-Ebene + real v_square, v0_Betrag, v_Betrag + real Ekin ! kinetische Energie + real a1,a2 ! Beschleunigung in 1. bzw. 2. Beschl.Stufe + real aFoil ! Beschleunigung zwischen Massegitter und Folie + real radiusQuad ! RadiusQuadrat + real radiusQuad_ ! RadiusQuadrat + real radius + + real S1xM2 ! Zeit vom Start bis zur MCP2-Ebene + real S1M2 ! Zeit vom Start bis zum MCP2 (Treffer voarausgesetzt) + real S1Fo ! Zeit vom Start bis zur Folie + real S1FoOnly ! Zeit vom Start bis zur Folie + real FoM2 ! Zeit zwischen Folie und MCP2 + real FoM2Only ! wie FoM2, falls keine anderen TOFs verlangt + real S1M3 ! Zeit vom Start bis Eintreffen der FE auf MCP3 + real M3M2 ! Zeit vom Eintreffen der FE auf MCP3 bis MCP2 + + real alfa ! Bahnwinkel gegen die Triggerfolienebene + real E_Verlust /0./ ! Energieverlust in der Folie + real delta_E_Verlust ! Streuung des Energieverlustes in der Folie + real thetaAufstreu ! Ablenkung aus vorheriger Richtung in der Folie + real phiAufstreu ! azimuthaler Winkel der Ablenkung gegenueber Horiz. + COMMON /FOLIE/ E_Verlust,thetaAufstreu,phiAufstreu + + real Beschl_Faktor ! Faktor bei Berechn. der Beschleunigung im EFeld + COMMON /BESCHL_FAKTOR/ Beschl_Faktor + + real length1 ! = d_Folie_Achse + MappenLaenge_FO + real length2 ! = xTD - d_Folie_Achse - MappenLaenge_FO ! = xTD-length1 + + +c Groessen der Folienelektronen ('FE'): + + integer nFE ! jeweilige Anzahl an FE (2 <= nFE <= 5) + real E0FE ! Startenergie der Folienelektronen + real ct0,st0,cf0,sf0 ! die Winkelfunktionen der Startwinkel der FE + real f0 ! 'phi0' fuer die FE + real x0FE(3) ! Startort der Folienelektronen auf der TD-Folie + real xFE(3),vFE(3) ! Ort und Geschw. der FE + real tFE ! Zeit + real tFE_min ! kuerzeste gueltige FE-Flugzeit je Projektil + integer tFE_(5) /-1,-1,-1,-1,-1/ ! Flugzeit jedes FE in ps (fuer NTP) +c +c---------------- +c +c-TP-10/2000 add variables to have position information of muons at +c TD and FE at MCP3 in NTuple; up to 5 electrons possible +c + real xFE_MCP(5), yFE_MCP(5), zFE_MCP(5) + common /TrigDet/ x0FE, xFE_MCP, yFE_MCP, zFE_MCP +c +c---------------- +c + COMMON /S1xM2/ S1xM2 ! fuer NTupel + COMMON /TIMES/ S1M2,S1Fo,FoM2,S1M3,M3M2,tFE_ ! fuer NTupel + common /FoM2Only/ FoM2Only + COMMON /S1FoOnly/ S1FoOnly + +c Variablen fuer den allgemeinen Programmablauf: + + integer qIndxMu + common /qIndxMu/ qIndxMu + + integer ntpid(1) ! fuer das Einlesen des NTupels von ACCEL oder von + integer ntpnr ! FoilFile + + integer firstEventNr + external firstEventNr + + logical NTPalreadyWritten + + real Spiegel_Faktor ! Faktor bei Berechn. der Reflektionszeit im Spiegel + + integer bis_Spiegel ! verschiedene Label + integer bis_L3_Mappe, bis_MCP2_Mappe, MCP2_Mappe + + character uhrzeit*8 + + integer percent_done + logical fill_NTP + + real radiusQuad_HeShield + real radiusQuad_LNShield + real radiusQuad_L1 + real radiusQuad_L2 + real radiusQuad_L3 + real radiusQuad_Blende + real radiusQuad_Rohr + real radiusQuad_MCP2 ! Radiusquadrat des MCP2 + real radiusQuad_MCP2active ! Radiusquadrat der aktiven Flaeche des MCP2 + real radiusQuad_Sp ! Radiusquadrat der Spiegeldraehte + real rWires_Sp ! Radius der Spiegeldraehte + + logical check_Blende /.false./ + + real xChangeKoord ! legt den Ort nach dem Spiegel fest, bei + parameter (xChangeKoord = 75.) ! dem das Koordinatensystem gewechselt wird + + integer n_return ! die Returnvariable fuer Aufruf von 'TD_CALC' + integer zaehler ! Zaehler fuer Monitoring der Trajektorie in den + ! Gebieten, in denen stepwise integriert werden + ! muss + logical flag, flag_ok + integer okStepsCounter + + integer i, k ! integer-Hilfsvariablen + real help1, help2 ! real-Hilfsvariablen + real help3, help4 ! real-Hilfsvariablen + + real YieldPlus,YieldNeutral ! Ladungsanteile nach TD-Foliendurchgang + + integer startLabel ! das Einsprunglabel beim Teilchenstart + + character helpChar*7, ant*1 + character HistogramTitle*32 /'Schnitt bei x = (i. Teil)'/ + +d real dtmin_L1, dtmin_Sp, dtmin_L2andFo, dtmin_FO, dtmin_L3, dtmin_M2 +d real dtmax_L1, dtmax_Sp, dtmax_L2andFo, dtmax_FO, dtmax_L3, dtmax_M2 +d real x_dtmin_L1(3), x_dtmax_L1(3), x_dtmin_FO(3), x_dtmax_FO(3) +d real x_dtmin_L2andFo(3), x_dtmax_L2andFo(3) +d real x_dtmin_L3(3), x_dtmax_L3(3), x_dtmin_M2(3), x_dtmax_M2(3) +d real x_dtmin_Sp(3), x_dtmax_Sp(3) +d +d ! /ntp_steps/ enthaelt auch 'steps' (ueber COM-MUTRACK.INC) +d COMMON /ntp_steps/ dtmin_L1, x_dtmin_L1, dtmax_L1, x_dtmax_L1, +d + dtmin_Sp, x_dtmin_Sp, dtmax_Sp, x_dtmax_Sp, +d + dtmin_L2andFo, x_dtmin_L2andFo, dtmax_L2andFo, x_dtmax_L2andFo, +d + dtmin_FO, x_dtmin_FO, dtmax_FO, x_dtmax_FO, +d + dtmin_L3, x_dtmin_L3, dtmax_L3, x_dtmax_L3, +d + dtmin_M2, x_dtmin_M2, dtmax_M2, x_dtmax_M2 + + real x40(2:3),v40(3),t40,E40 ! Speicher fuer Trajektoriengroessen bei x=40mm + COMMON /NTP_40mm/ x40,v40,t40,E40 + +cMBc logical writeTraj2File +cMBc common /writeTraj2File/ writeTraj2File + + +c Variablen fuer Test ob Draht getroffen wurde: + + real distToWire(2) + integer DrahtNr + logical WireHit + + real WireRadiusQuad_G1,WireRadiusQuad_G2 + real WireRadiusQuad_Sp + + +c Variablen fuer die Graphikausgabe: + + real xKoord(1000),xKoord_(1000) ! Koordinatenfelder fuer die + real yKoord(1000),yKoord_(1000) ! Graphikausgabe + real zKoord(1000),zKoord_(1000) ! +cMBc real tKoord(1000),tKoord_(1000) ! + integer nKoord,nKoordSave ! Anzahl der Koordinaten + +cMBc COMMON /GRAPHIX/ xKoord,yKoord,zKoord,nKoord,tKoord + COMMON /GRAPHIX/ xKoord,yKoord,zKoord,nKoord + + +c Variablen fuer HBOOK und PAW: + + integer istat ! fuer HBOOK-Fehlermeldungen + + integer HB_memsize + parameter(HB_memsize=1000000) + real memory(HB_memsize) + + common /pawc/ memory ! Der Arbeitsbereich fuer HBOOK + + +c Konstanten: + + real c ! Lichtgeschwindigkeit in mm/ns + real meanLifeTime ! mittlere Myon-Lebensdauer in ns + + parameter (c = 299.7925, meanLifeTime = 2197) + +c------------------------------------------------------------------------------- +c Konstanten und Variable fuer Berechnung der Winkelaufstreuung in Triggerfolie +c mittels Meyer-Formel (L.Meyer, phys.stat.sol. (b) 44, 253 (1971)): + + real g1, g2 ! Tabellierte Funktionen der Referenz + real effRedThick ! effektive reduzierte Dicke ('tau' der Referenz) + + +c - Parameter: + + real Z1, Z2 ! die atomaren Nummern von Projektil und Target + real a0 ! Bohrscher Radius in cm + real screeningPar ! Screeningparameter 'a' in cm fuer Teilchen der + ! Kernladungszahl Z1=1 in Kohlenstoff (Z2 = 6) + ! bei Streichung von Z1 (vgl. Referenz, S. 268) + + real r0Meyer ! r0(C) berechnet aus dem screeningParameter 'a' + ! und dem ebenfalls bei Meyer angegebenem + ! Verhaeltnis a/r0=0.26 (vgl. Referenz, S. 263 oben) + real eSquare ! elektrische Ladung zum Quadrat in keV*cm + real HWHM2sigma ! Umrechnungsfaktor von (halber!) Halbwertsbreite + ! nach Sigma der Gaussfunktion + + real Na ! die Avogadrokonstante + real mMolC ! molare Masse von C in ug + real Pi ! die Kreiszahl + + parameter (Z1 = 1, Z2 = 6, a0 = 5.29E-9, ScreeningPar = 2.5764E-9) + parameter (r0Meyer = 9.909E-9, eSquare = 1.44E-10, HWHM2sigma = 1./1.17741) + parameter (Na = 6.022e23, mMolC = 12.011e6, Pi = 3.141592654) + + +c - Bei der Berechnung von Sigma auftretende Vorfaktoren. +c (Meyer_faktor 1 wird benoetigt fuer Berechnung der reduzierten Dicke aus der +c 'ug/cm2'-Angabe der Foliendicke. Meyer_faktor2 und Meyer_faktor3 werden +c direkt fuer die Berechnung von sigma aus den beiden tabellierten Funktionen +c g1 und g2 verwendet): + + real Meyer_Faktor1, Meyer_Faktor2, Meyer_Faktor3 + + parameter (Meyer_faktor1 = Pi*screeningPar*screeningPar * Na/mMolC) + ! Na/mMolC = 1/m(C-Atom) + parameter (Meyer_faktor2 = (2*Z1*Z2 * eSquare)/ScreeningPar * 180./Pi + + * HWHM2sigma) + parameter (Meyer_faktor3 = (screeningPar/r0Meyer) * (screeningPar/r0Meyer)) + + +c------------------------------------------------------------------------------- +c Kommentar zur Berechnung der Winkelaufstreuung nach Meyer: +c +c Als Bedingung fuer die Gueltigkeit der Rechnung wird verlangt, dass +c +c (1) die Anzahl n der Stoesse >> 20*(a/r0)^(4/3) sein muss. Fuer Protonen auf +c Graphit ist laut Referenz a/r0 gleich 0.26 (mit Dichte von 3.5 g/ccm habe +c ich einen Wert von 0.29 abgeschaetzt). Fuer Myonen hat man den selben +c Wert zu nehmen. Damit ergibt sich die Forderung, dass n >> 3.5 sein muss. +c +c (2) unabhaengig von (1) n >> 5 sein muss, was (1) also mit einschliesst. +c +c Mit n = Pi*r0*r0*Teilchen/Flaeche ergibt sich fuer eine Foliendicke von +c 3 ug/cm^2 als Abschaetzung fuer n ein Wert von 37. (r0 ueber r0 = 0.5 N^(1/3) +c und 3.5 g/ccm zu 8.9e-9 cm abgeschaetzt). D.h., dass die Bedingungen in +c unserem Fall gut erfuellt sind. +c In dem Paper wird eine Formel fuer Halbwertsbreiten angegeben. Ich habe nicht +c kontrolliert, in wie weit die Form der Verteilung tatsaechlich einer Gauss- +c verteilung entspricht. Zumindest im Bereich der Vorwaertsstreuung sollte +c die in diesem Programm verwendete Gaussverteilung aber eine sehr gute +c Naeherung abgeben. Abweichungen bei groesseren Winkeln koennten jedoch u. U. +c die absolute Streuintensitaet in Vorwaertsrichtung verfaelschen. + +czzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz +c HIER GEHT DER PROGRAMMTEXT RICHTIG LOS +czzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz + +c Initialisierungen: + + INCLUDE 'initialize.inc' + + +c Einlesen der Parameter aus 'MUTRACK.INPUT' und Setzen der entsprechenden +c Voreinstellungen. Einlesen der Kammergeometrie sowie der INFO-files der +c Feldmappen: + + call read_inputFile + + +c Berechnen der RadiusQuadrate: + + radiusQuad_HeShield = rHeShield*rHeShield + radiusQuad_LNShield = rLNShield*rLNShield + radiusQuad_Rohr = radius_Rohr*radius_Rohr + radiusQuad_L1 = iRadiusCyl_L1*iRadiusCyl_L1 + radiusQuad_L2 = iRadiusCyl_L2*iRadiusCyl_L2 + radiusQuad_L3 = iRadiusCyl_L3*iRadiusCyl_L3 + radiusQuad_Blende = radius_Blende*radius_Blende + radiusQuad_MCP2 = radius_MCP2*radius_MCP2 + radiusQuad_MCP2active = radius_MCP2active*radius_MCP2active + WireRadiusQuad_G1 = dWires_G1/2. * dWires_G1/2. + WireRadiusQuad_G2 = dWires_G2/2. * dWires_G2/2. + WireRadiusQuad_Sp = dWires_Sp/2. * dWires_Sp/2. + rWires_Sp = dWires_Sp/2. + radiusQuad_Sp = rWires_Sp * rWires_Sp + + +c Einlesen der Feldmappen: + + write(*,*)'----------------------------------------'// + + '----------------------------------------' + if (.NOT.(par(1,UL1).EQ.0. .AND. n_par(UL1).LE.1)) call READ_MAP_L1 + + if (.NOT.(idealMirror .OR. (par(1,USp).EQ.0. .AND. n_par(USp).LE.1))) then + call read_Map_SP_1 + call read_Map_SP_2 + call read_Map_SP_3 + endif + + if (TriggerInBeam .AND. .NOT.lense2 .AND. + ! 'lense2' muss noch in sub_input richtig gesetzt werden! (-> foilfile) + + .NOT.(par(1,UFolie).EQ.0. .AND. n_par(UFolie).LE.1) ) then + call READ_MAP_FO + endif + + if (.NOT.(par(1,UL3).EQ.0. .AND. n_par(UL3).LE.1)) then + if (.NOT.(par(1,UMCP2).EQ.0. .AND. n_par(UMCP2).LE.1)) then + if (xLeaveMap_L3.GT.xEnterMap_M2) then + write(*,*) + write(*,*)' Potentialmappen von Linse 3 und MCP2 ueberlappen!' + write(*,*)' Dies ist in der aktuellen Implementierung des Programmes' + write(*,*)' nicht vorgesehen!' + write(*,*) + write(*,*)' -> STOP' + write(*,*) + STOP + endif + endif + call READ_MAP_L3 + endif + + if (.NOT.(par(1,UMCP2).EQ.0. .AND. n_par(UMCP2).LE.1)) call READ_MAP_M2 + + +c Eingelesene Simulationsparameter auf Schirm geben und bestaetigen lassen. +c Die Ausgabefiles initialisieren: + + call initialize_output + + +c falls ein 'FoilFile' erstellt werden soll, schreibe das .INFO-files: + + if (createFoilFile) call make_INFOFile + if (Use_MUTRACK) Use_ACCEL = .false. + + +c Defaultwert fuer 'fill_NTP' setzen (wird weiter unten ueberschrieben, falls +c fuer das Fuellen des NTupels spezielle Triggerbedingung verlangt ist): + + if (createNTP) then + fill_NTP = .true. + else + fill_NTP = .false. + endif + + +c CERN-Pakete initialisieren (Groesse des COMMONblocks PAWC uebermitteln): + + if (.NOT.fromScratch.OR.Graphics.OR.createNTP.OR.createFoilFile) call HLIMIT(HB_memsize) + + +c Graphikausgabe initialisieren: + + if (GRAPHICS) then + call masstab_setzen + CALL HPLSET ('VSIZ',.6) ! AXIS VALUES SIZE + write(HistogramTitle(17:22),'(F6.1)') schnitt_x + write(HistogramTitle(25:25),'(I1)') schnitt_p + CALL HPLSET ('TSIZ',.7) ! HISTOGRAM TITLE SIZE + CALL HBOOK2 (50,HistogramTitle,100,-30.,30.,100,-30.,30.,20.) + endif + + +c falls fruehere Simulation fortgefuehrt werden soll, oeffne entsprechende Datei: + + if (.NOT.fromScratch) then + if (use_ACCEL) then + call HROPEN(lunREAD,'ACCEL',ACCEL_Dir//':'//fileName_ACCEL//'.NTP', + + ' ',1024,istat) + else + call HROPEN(lunREAD,'MUread',outDir//':'//fileName_MUTRACK//'.NTP', + + ' ',1024,istat) + endif + + call HRIN(0,99999,0) + call HIDALL(ntpid,ntpNr) + call HDELET(ntpid(1)) + i = NTP_read - ntpid(1) + call HRIN(NTP_read-i,9999,i) ! NTP_read = NTP_write+1 + call HBNAME(NTP_read,' ',0,'$CLEAR') ! alles resetten + + ! fuer die benoetigten Bloecke des CWN die entsprechenden Speicher- + ! lokalisationen uebermitteln: + + if (random_E0) call HBNAME(NTP_read,'E0',E0,'$SET') + if (random_pos) call HBNAME(NTP_read,'x0',x0,'$SET') + if (random_angle) call HBNAME(NTP_read,'angle0',theta0,'$SET') ! theta0,phi0 + if (UseDecay_prevSim) call HBNAME(NTP_read,'lifetime',lifetime,'$SET') + + if (smearS1Fo .AND. use_MUTRACK) then + call HBNAME(NTP_read,'S1FoS',S1FoOnly,'$SET') + endif + + call HBNAME(NTP_read,'dest',gebiet,'$SET') ! gebiet,destiny + call HBNAME(NTP_read,'Traj',t,'$SET') ! t,x,v + + endif + + +c NTP-relevante Befehle: + +c BAD LUCK!!! Das Packen der Real-Variablen im folgenden hat KEINERLEI VER- +c KLEINERUNG DER FILEGROESSE bewirkt!!!! (fuer die Integers habe ich noch +c keinen Test gemacht). -> wohl besser wieder herausnehmen. Ich verliere +c u.U. nur Genauigkeit und habe nur einen eingeschraenkten Wertebereich zur +c Verfuegung! + + if (createNtp.OR.createFoilFile) then + + !c Datei fuer NTupelausgabe oeffnen: + call HROPEN(lunNTP,'MUwrite',outDir//':'//filename//'.NTP', + + 'N',1024,istat) + if (istat.NE.0) then + write(*,*) + write(*,*)'error ',istat,' opening HBOOK-file' + write(*,*) + STOP + endif + + call HBNT(NTP_write,filename,'D') ! D: Disk resident CWN buchen + + !c die Bloecke des CWN definieren: + + if (.NOT.OneLoop) call HBNAME(NTP_write,'LOOP',schleifenNr,'loop[1,1000]:u') + if (M2_triggered .OR. Fo_triggered.AND.upToTDFoilOnly) then + ! -> Gebiet und Destiny stehen hier sowieso fest, nimm + ! diese Groessen daher erst gar nicht mehr in das NTupel auf! + else + call HBNAME(NTP_write,'DEST',gebiet,'Gebiet[0,20]:u,dest[-10,10]:i') + endif + if (NTP_Start .OR. createFoilFile.AND.random_pos) then + call HBNAME(NTP_write,'X0',x0,'x0,y0,z0') + endif + if (NTP_Start) call HBNAME(NTP_write,'V0',v0,'vx0,vy0,vz0') + if (NTP_Start .OR. createFoilFile.AND.random_E0) then + call HBNAME(NTP_write,'E0',E0,'E0') + endif + if (NTP_Start .OR. createFoilFile.AND.random_angle) then + call HBNAME(NTP_write,'ANGLE0',theta0,'theta0,phi0') + endif + if (NTP_lifetime .OR. createFoilFile.AND.UseDecay) then + call HBNAME(NTP_write,'LIFETIME',lifetime,'lifetime:r') + endif + if (NTP_40mm) call HBNAME(NTP_write,'X=40MM',x40, + + 'y40,z40,vx40,vy40,vz40,t40,E40') + if (NTP_S1xM2) call HBNAME(NTP_write,'S1xM2',S1xM2,'S1xM2') + if (NTP_Times) then + if (TriggerInBeam) then + if (generate_FE) then + call HBNAME(NTP_write,'TIMES',S1M2, + + 'S1M2,S1Fo,FoM2,S1M3,M3M2:r,TFE(5):i') + else + call HBNAME(NTP_write,'TIMES',S1M2, + + 'S1M2,S1Fo,FoM2') + endif + else + call HBNAME(NTP_write,'TIMES',S1M2, + + 'S1M2') + endif + endif + if (NTP_FoM2Only) then + call HBNAME(NTP_write,'FoM2',FoM2Only,'FoM2') + endif + if (NTP_Folie) then + call HBNAME(NTP_write,'FOLIE',E_Verlust, + + 'ELoss,thetStreu,phiStreu') +c +c-------------------------- +c +c-TP-10/2000 add position at foil and MCP3 (FE) +c + call HBNAME(NTP_write, 'TrigDet', x0FE, + + 'x0FE,y0FE,z0FE,xFE(5),yFE(5),zFE(5)') +c +c-------------------------- +c + endif + if (NTP_charge) call HBNAME(NTP_write,'CHARGE',qInt,'q[-5,5]:i') + if (NTP_stop.OR.createFoilFile) then + call HBNAME(NTP_write,'TRAJ',t,'t,x,y,z,vx,vy,vz') + endif +c if (createFoilFile .AND. smearS1Fo .AND. .NOT.NTP_times) then + if (smearS1Fo) then + call HBNAME(NTP_write,'S1FoS',S1FoOnly,'S1FoS') + endif + if (NTP_stop) then + call HBNAME(NTP_write,'EKIN',Ekin,'Ekin') + endif +d if (NTP_steps) then +d call HBNAME(NTP_write,'STEP',steps,'steps[1,100000]:u,'// +d + 'dtminL1, xdtminL1, ydtminL1, zdtminL1,'// +d + 'dtmaxL1, xdtmaxL1, ydtmaxL1, zdtmaxL1,'// +d + 'dtminL2, xdtminL2, ydtminL2, zdtminL2,'// +d + 'dtmaxL2, xdtmaxL2, ydtmaxL2, zdtmaxL2,'// +d + 'dtminFO, xdtminFO, ydtminFO, zdtminFO,'// +d + 'dtmaxFO, xdtmaxFO, ydtmaxFO, zdtmaxFO,'// +d + 'dtminL3, xdtminL3, ydtminL3, zdtminL3,'// +d + 'dtmaxL3, xdtmaxL3, ydtmaxL3, zdtmaxL3,'// +d + 'dtminM2, xdtminM2, ydtminM2, zdtminM2,'// +d + 'dtmaxM2, xdtmaxM2, ydtmaxM2, zdtmaxM2') +d endif + endif + + +c die Label definieren: + + assign 7 to bis_Spiegel + assign 14 to bis_L3_Mappe + assign 16 to bis_MCP2_Mappe + assign 17 to MCP2_Mappe + + +c die Einsprungposition fuer den Beginn der Trajektorienberechnungen setzen: + + if (Use_MUTRACK) then + assign 113 to startLabel + elseif (Use_ACCEL) then + assign 3 to startLabel + elseif (Gebiet0.EQ.target .OR. Gebiet0.EQ.upToGrid1) then + assign 1 to startLabel + elseif (Gebiet0.EQ.upToGrid2) then + assign 2 to startLabel + elseif (Gebiet0.EQ.upToHeShield) then + assign 3 to startLabel + elseif (Gebiet0.EQ.upToLNShield) then + assign 4 to startLabel + elseif (Gebiet0.EQ.upToL1Map) then + assign 5 to startLabel + elseif (Gebiet0.EQ.upToExL1) then + assign 6 to startLabel + elseif (Gebiet0.EQ.upToEnSp) then + assign 7 to startLabel + elseif (Gebiet0.EQ.upToExSp) then + assign 8 to startLabel + elseif (Gebiet0.EQ.upToChKoord) then + assign 9 to startLabel + elseif (Gebiet0.EQ.upToEnTD) then + assign 10 to startLabel + elseif (Gebiet0.EQ.upToExTD) then + if (log_alpha0_KS) then + assign 111 to startLabel + else + assign 112 to startLabel + endif + elseif (Gebiet0.EQ.upToL2andFoMap) then +c assign 12 to startLabel + elseif (Gebiet0.EQ.upToExL2) then +c assign 13 to startLabel + elseif (Gebiet0.EQ.upToL3Map) then + assign 12 to startLabel + elseif (Gebiet0.EQ.upToExL3) then + assign 13 to startLabel + elseif (Gebiet0.EQ.upToM2Map) then + assign 14 to startLabel + elseif (Gebiet0.EQ.upToMCP2) then + assign 15 to startLabel + endif + + +c Abkuerzungen 'Length1' und 'length2' setzen: + + length1 = d_Folie_Achse + MappenLaenge_FO + length2 = xTD - d_Folie_Achse - MappenLaenge_FO + + +c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +c ab hier beginnen die Schleifen: +c (Bemerkung: eine Laufvariable darf kein Feldelement sein!) +c +c Besonderheit der Massen- und der Ladungsschleife: +c Wurde im INPUT-File in der Variablen 'artList' eine Teilchenart spezifi- +c ziert (-> 'artList_defined'), so werden die Parameter Masse und Ladung nicht +c entsprechend den Inhalten von par(n,mass) bzw. par(n,charge) eingestellt, +c sondern entsprechend den zu den Teilchenarten gehoerenden Werten fuer diese +c Groessen. In diesem Fall besteht die Massenschleife aus genau einem (Leer-) +c Durchlauf, waehrend die Ladungsschleife fuer jede Teilchenart einen Durchlauf +c macht, in welcher dann die Einstellung von Ladung UND Masse stattfindet. +c +c Bei Aenderungen in der Abfolge der Schleifen muss die Anweisungszeile +c 'DATA reihenfolge /.../' in 'INITIALIZE.INC' entsprechend editiert werden! +c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +c zusaetliche Flugstrecken vor TD und MCP2 (gehen NUR in t, NICHT in x ein!!): +c ---------------------------------------------------------------------------- + + do 200 Delta_L1 = par(1,DeltaL1),par(2,DeltaL1),par(3,DeltaL1) + parWert(DeltaL1) = Delta_L1 + do 200 Delta_L2 = par(1,DeltaL2),par(2,DeltaL2),par(3,DeltaL2) + parWert(DeltaL2) = Delta_L2 + +c Foliendicke und Energieverlust: +c ------------------------------- + + do 200 E_loss = par(1,Eloss),par(2,Eloss),par(3,Eloss) ! Eloss + parWert(Eloss) = E_loss + mean_E_Verlust = E_loss + + do 200 Thickness = par(1,Thickn),par(2,Thickn),par(3,Thickn)! Thickness + parWert(Thickn) = Thickness + +c MCP2: +c ----- + + do 200 U_MCP2 = par(1,UMCP2),par(2,UMCP2),par(3,UMCP2) ! U(MCP2) + parWert(UMCP2) = U_MCP2 + +c Winkel: +c ------- + + do 200 alfaTgt = par(1,alfTgt),par(2,alfTgt),par(3,alfTgt) ! ALPHA(TARGET) + parWert(alfTgt) = alfaTgt + Sin_alfaTgt= sind(alfaTgt) + Cos_alfaTgt= cosd(alfaTgt) + + do 200 alfaSp = par(1,alfSp),par(2,alfSp),par(3,alfSp) ! ALPHA(SPIEGEL) + parWert(alfSp) = alfaSp + Sin_alfaSp = sind(alfaSp) + Cos_alfaSp = cosd(alfaSp) + Tan_alfaSp = tand(alfaSp) + help1 = dSpiegel/2.+DreharmLaenge + ! Berechne die y-Werte der 'oberen linken' (yUppLeft) und der + ! 'unteren linken' (yLowLeft) Spiegelecke: + if (idealMirror) then + yUppLeft = + bSpiegel/2. * Sin_alfaSp + + + help1 * Cos_alfaSp + yLowLeft = - bSpiegel/2. * Sin_alfaSp + + + help1 * Cos_alfaSp + endif + ! Berechne Schnittpunkt y_intersectSp der vorderen Spiegelebene bzw. + ! der vorderen Mappenkante mit der Geraden x = xSpiegel: + if (.NOT.idealMirror) help1 = help1 + xSpGrid1 + y_intersectSp = help1/Cos_alfaSp + + do 200 alfaTD = par(1,alfTD),par(2,alfTD),par(3,alfTD) ! ALPHA(TRIGGERDETEKTOR) + parWert(alfTD) = alfaTD + Sin_alfaTD = sind(alfaTD) + Cos_alfaTD = cosd(alfaTD) + Tan_alfaTD = tand(alfaTD) + ! Berechne Schnittpunkt 'x_intersectTD' der x-Achse mit der Folien- + ! ebene bzw im Fall von 'GridInFrontOfFoil' mit dem Gitter vor der + ! Triggerfolie: + help1 = d_Folie_Achse + if (gridInFrontOfFoil) help1 = help1 + d_Grid_Folie + x_intersectTD = xTD - help1/Cos_alfaTD + help1 = d_Folie_Achse + mappenLaenge_Fo + x_intersectTDMap = xTD - help1/Cos_alfaTD + +c TriggerDetektor: +c ---------------- + + do 200 U_V = par(1,UVorne),par(2,UVorne),par(3,UVorne) ! U(VORNE) + parWert(UVorne) = U_V + do 200 U_H = par(1,UHinten),par(2,UHinten),par(3,UHinten) ! U(HINTEN) + parWert(UHinten) = U_H + do 200 U_MCP3 = par(1,UMCP3),par(2,UMCP3),par(3,UMCP3) ! U(MCP3) + parWert(UMCP3) = U_MCP3 + do 200 U_F = par(1,UFolie),par(2,UFolie),par(3,UFolie) ! U(FOLIE) + parWert(UFolie) = U_F + +c Transportsystem: +c ---------------- + + do 200 U_L2 = par(1,UL2),par(2,UL2),par(3,UL2) ! U(Linse 2) + parWert(UL2) = U_L2 + +c gegebenenfalls die Mappe 'L2andFo' zusammenbauen: + if (lense2) then + if ( .NOT.(par(1,UL2).EQ.0. .AND. n_par(UL2).LE.1) .OR. + + .NOT.(par(1,UFolie).EQ.0. .AND. n_par(UFolie).LE.1) ) then + ! Addiere die Mappen nur erneut, falls die jetztige Konfiguration + ! nicht mit der letzten uebereinstimmt: + if (U_L2.NE.last_U_L2 .OR. U_F.NE.last_U_F) then + call ADD_MAP_L2andFo + last_U_L2 = U_L2 + last_U_F = U_F + endif + endif + endif + + do 200 U_Sp = par(1,USp),par(2,USp),par(3,USp) ! U(SPIEGEL) + parWert(USp) = U_Sp + + do 200 U_L1 = par(1,UL1),par(2,UL1),par(3,UL1) ! U(Linse 1) + parWert(UL1) = U_L1 + + do 200 U_L3 = par(1,UL3),par(2,UL3),par(3,UL3) ! U(Linse 3) + parWert(UL3) = U_L3 + +c die Magnetfelder: +c ----------------- + + do 200 B_Helm = par(1,BHelm),par(2,BHelm),par(3,BHelm) ! Helmholtzsp. + parWert(BHelm) = B_Helm + + do 200 B_TD = par(1,BTD),par(2,BTD),par(3,BTD) ! TD-Spule + parWert(BTD) = B_TD + +c Masse und Ladung: +c ----------------- + + do 200 m_ = par(1,mass),par(2,mass),par(3,mass) ! MASSE + if (.NOT.artList_defined) then + m = m_ + parWert(mass) = m + endif + + do 200 q_ = par(1,charge),par(2,charge),par(3,charge) ! LADUNG + if (.NOT.artList_defined) then + q = q_ + parWert(charge) = q + else + qIndxMu = q_ ! fuer Verwendung in function firstEventNr! + ArtNr = Art_Nr(q_) + m = Art_Masse(ArtNr) + q = Art_Ladung(ArtNr) + parWert(mass) = m + parWert(charge) = q + endif + ! gegebenenfalls ein Flag fuer die Beruecksichtigung des Myonen- + ! zerfalles setzen: + if (useDecay) then ! 'useDecay' setzt 'artList_defined' voraus + if (ArtNr.LE.4) then! es ist ein Myon involviert + useDecay_ = .true. + else ! kein Myon involviert + useDecay_ = .false. + endif + endif + + +c Beschleuniger: +c -------------- + + do 200 U_Tgt = par(1,UTgt),par(2,UTgt),par(3,UTgt) ! U(TARGET) + parWert(UTgt) = U_Tgt + do 200 U_Gua = par(1,UGua),par(2,UGua),par(3,UGua) ! U(GUARD) + parWert(UGua) = U_Gua + do 200 U_G1 = par(1,UG1),par(2,UG1),par(3,UG1) ! U(GITTER) + parWert(UG1) = U_G1 + parIndx(5) = parIndx(5) + 1 + + +c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +c haeufig benoetigte Faktoren, die von der aktuellen Masse, Ladung und Hoch- +c spannungen abhaengen: +c (bei Linse 2 wird die Spannung direkt auf die Potentialmappe aufmultipliziert. +c Daher wird dort 'Beschl_Faktor' verwendet und kein 'Beschl_Faktor_L2' benoetigt) + + Energie_Faktor = m / (2.*c*c) + Beschl_Faktor = q / m * c*c + Beschl_Faktor_L1 = Beschl_Faktor * U_L1 + Beschl_Faktor_Sp = Beschl_Faktor * U_Sp + Beschl_Faktor_FO = Beschl_Faktor * U_F + Beschl_Faktor_L3 = Beschl_Faktor * U_L3 + Beschl_Faktor_M2 = Beschl_Faktor * U_MCP2 + + aFoil = - Beschl_Faktor * U_F / d_Grid_Folie + if (U_Sp.EQ.0. .OR. q.EQ.0.) then + Spiegel_Faktor = 0 + else + Spiegel_Faktor = 2.*dspiegel / (Beschl_Faktor * U_Sp) !<-- pruefen! + endif + + ! Die Beschleunigungen in den beiden (idealen) Beschleunigerstufen: + a1 = Beschl_Faktor * (U_Tgt - U_G1) / (XGrid1 - XTarget) + a2 = Beschl_Faktor * U_G1 / (XGrid2 - xGrid1) + +c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +c Falls 'fromScratch': +c Die in den ab hier beginnenden Startparameter-Schleifen gesetzten Werte +c werden gegebenenfalls weiter unten durch zufallsverteilte Offsets modi- +c fiziert. (-> 'Zufallschleife': 'do 100 randomloop_ = 1, n_par(0)) +c Andernfalls: +c Wurden waehrend ACCEL oder 'foilfile' fuer die Startparameter Zufalls- +c verteilungen verwendet, so werden die entsprechenden Groessen aus dem +c betreffenden NTupel eingelesen. +c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +c Startparameter: +c --------------- + + do 200 E0_ = par(1,ener),par(2,ener),par(3,ener) ! E0 + if (.NOT.random_E0) then + E0 = E0_ + v0_Betrag = sqrt(E0/Energie_Faktor) + endif + + if (E0InterFromFile) then + lowerE0 = E0Low(nInt(E0_)) + upperE0 = E0Low(nint(E0_+1)) + endif + + +c falls Energieverlustberechnung aus ICRU-Tabelle verlangt ist und mittlerer +c Energieverlust nicht fuer jedes Teilchen extra berechnet werden soll (sinnvoll +c wenn alle Teilchen gleiche Startenergie haben oder Streuung der Startenergien +c klein ist, so dass die Streuung des mittleren Energieverlustes vernachlaessigt +c werden kann): + + if (log_E_Verlust_ICRU .AND. .NOT.calculate_each) then + if (random_E0_equal) then + Ekin = E0_ + (upperE0+lowerE0)/2. + else + Ekin = E0_ + endif + if (Gebiet0.EQ.target .OR. Gebiet0.EQ.upToGrid1) then + Ekin = Ekin + q*(U_Tgt - U_F) + elseif (Gebiet0.EQ.upToGrid2) then + Ekin = Ekin + q*(U_G1 - U_F) + endif + call CALC_ELOSS_ICRU(Ekin,q,m,Thickness,mean_E_Verlust) + endif + + if (log_Meyer_F_Function) then + if (random_E0_equal) then + Ekin = E0_ + (upperE0+lowerE0)/2. + else + Ekin = E0_ + endif + if (Gebiet0.EQ.target .OR. Gebiet0.EQ.upToGrid1) then + Ekin = Ekin + q*(U_Tgt - U_F) + elseif (Gebiet0.EQ.upToGrid2) then + Ekin = Ekin + q*(U_G1 - U_F) + endif + effRedThick = Meyer_Faktor1 * Thickness + call Get_F_Function_Meyer(effRedThick,Ekin) + endif + + do 200 theta0_ = par(1,thetAng),par(2,thetAng),par(3,thetAng) ! theta0 + if (.NOT.random_angle) then + theta0 = theta0_ + Cos_theta0 = cosd(theta0) + Sin_theta0 = sind(theta0) + endif + do 200 phi0_ = par(1,phiAng),par(2,phiAng),par(3,phiAng) ! phi0 + if (.NOT.random_angle) then + phi0 = phi0_ + Cos_phi0 = cosd(phi0) + Sin_phi0 = sind(phi0) + endif + + do 200 y0_ = par(1,yPos),par(2,yPos),par(3,yPos) ! y0 + if (.NOT.random_pos) then + x0(2) = y0_ + endif + + do 200 z0_ = par(1,zPos),par(2,zPos),par(3,zPos) ! z0 + if (.NOT.random_pos) then + x0(3) = z0_ + endif + +c die folgenden parWert(n) werden u.U. in der 'Zufallsschleife' weiter unten +c abgeaendert. Hier werden sie in jedem Fall fuer Tabellenausgaben, Debug- +c angelegenheiten u.s.w. erst einmal mit den aktuellen Werten der +c entsprechenden Schleifen gefuellt: + + parWert(ener) = E0_ + parWert(thetAng) = theta0_ + parWert(phiAng) = phi0_ + parWert(yPos) = y0_ + parWert(zPos) = z0_ + + +c falls fruehere Simulation fortgefuehrt wird: +c Berechne diejenige Eventnummer in NTP_read, ab welcher die relevanten +c Simulationsparameter von ACCEL bzw. des 'FoilFiles' mit den gegenwaertigen +c MUTRACK-(Schleifen)-Parametern uebereinstimmen: + + if (.NOT.fromScratch) eventNr = firstEventNr() + + +c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +c Hier folgen die Befehle, die zu Beginn jeder neuen Schleife faellig sind: +c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + SchleifenNr = SchleifenNr + 1 ! Schleifen zaehlen + okStepsCounter = 0 ! 'okStepsCounter' dient der Bestimmung + ! der mittleren Anzahl von Integrations- + ! schritten bis zum Ziel + nNeutral = 0 ! noch wurden keine Teilchen in der TD-Folie + nCharged = 0 ! neutralisiert + +c Die Statistikspeicher resetten: +c Falls nur ein Teilchenstart pro Schleife erfolgt, nimm die Statistik ueber +c alle Schleifen. (Dann erfolgt der Reset nur bei der ersten Schleife): + + flag_ok = (.NOT.(OneStartPerLoop .AND. SchleifenNr.GT.1)) + + if (flag_ok) call reset_statistics + + +c Die Kammer zeichnen: +c Wird pro Schleife nur ein Teilchen gestartet ('OneStartPerLoop'; d.h. kein +c oder genau ein 'Zufallsstart'), so trage alle Trajektorien in die gleiche +c Graphik ein. Zeichne die Kammer dann also nur bei der ersten Schleife. + + if (GRAPHICS .AND. flag_ok) then + CALL IZPICT ('CHAM_1','M') ! ERZEUGEN VON BILDERN IM PAWC-COMM-BLOCK + CALL IZPICT ('CHAM_2','M') + CALL IZPICT ('HISTO','M') + CALL IZPICT ('TEXT','M') + call plot_chamber(schnitt_p) + call Graphics_Text ! Text fuer Textwindow erstellen + call text_plot ! Ausgabe des Textes + endif + + +c Ausgabe der aktuellen Settings: +c Auch dies im Falle von 'OneStartPerLoop' nur bei der ersten Schleife: + + if ((n_outWhere.NE.0 .OR. smallLogFile) .AND. flag_ok) then + call output_new_loop(q_) ! (q_) wegen der neutral fractions + endif + + +c Ausgabe der Prozentzahl schon gerechneten Trajektorien vorbereiten: + + if (log_percent) then + call time(uhrzeit) + percent_done = 0 + write(*,1001)Uhrzeit,' %: 0' + endif +1001 format ($,6x,A,A) + + +c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +c bei 'fromScratch': +c Hier wird gegebenenfalls bei Zufallsverteilung von Startparametern ein ent- +c sprechend gewuerfelter Offset auf den aktuellen Wert aufgeschlagen. +c Ansonsten: +c Lies bei Zufallsverteilungen die entsprechenden Startwerte aus dem NTupel +c ein. +c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + do 100 randomloop_ = 1, n_par(0) + + if (.NOT.fromScratch) then + + eventNr = eventNr + 1 ! Eventnummer im NTP + + if (smearS1Fo.AND.use_MUTRACK) call HGNTB(NTP_read,'S1FoS',eventNr,istat) + if (istat.NE.0) then + write(*,*) + write(*,*)' error executing ''call HGNTB(',NTP_read,',''S1FoS'',eventNr,istat)''' + write(*,*)' eventNr = ',eventNr + write(*,*)' -> STOP' + write(*,*) + call exit + endif + + ! Einlesen von 'Gebiet' und 'destiny': + call HGNTB(NTP_read,'dest',eventNr,istat) + ! gegebenenfallsvon freuher verwendete Gebietskodierung + ! (ohne Linse2) aktualisieren + if (gebiet.GE.10 .AND. MutrackVersionIndx.LE.1) gebiet = gebiet+2 + +c if (istat.NE.0) then +c write(*,*) +c write(*,*)' error executing ''call HGNTB(',NTP_read,',''dest'',eventNr,istat)''' +c write(*,*)' eventNr = ',eventNr +c write(*,*)' -> STOP' +c write(*,*) +c call exit +c endif + ! Einlesen der Trajektoriendaten 't,x(3),v(3)': + call HGNTB(NTP_read,'Traj',eventNr,istat) +c if (istat.NE.0) then +c write(*,*) +c write(*,*)' error executing ''call HGNTB(',NTP_read,',''Traj'',eventNr,istat)''' +c write(*,*)' eventNr = ',eventNr +c write(*,*)' -> STOP' +c write(*,*) +c call exit +c endif + + if (Use_Accel) then + ! Uebersetzen der von ACCEL verwendeten code_Nummern fuer die + ! moeglichen Teilchenschicksale in von MUTRACK verwendete + ! code_Nummern: + if (destiny.EQ.-5) then + destiny = code_frontOfMapAc + elseif (destiny.EQ.-4) then + destiny = code_leftMapAc + elseif (destiny.EQ.-3) then + gebiet = upToGrid2 + destiny = code_grid + elseif (destiny.EQ.-2) then + gebiet = upToGrid1 + destiny = code_grid + elseif (destiny.EQ.-1) then + destiny = code_hit_TgtHolder + elseif (destiny.EQ.code_ok) then + Gebiet = upToHeShield + elseif (destiny.EQ.+1) then + destiny = code_decay + elseif (destiny.EQ.+2) then + destiny = code_reflektiert + elseif (destiny.EQ.+3) then + destiny = code_wand + elseif (destiny.EQ.+4) then + destiny = code_lost + elseif (destiny.EQ.+5) then + destiny = code_dtsmall + else + write(*,*)'UNKNOWN ACCEL-CODE-NR: destiny = ',destiny + call exit + endif + + ! Auf xGrid2 zurueckrechnen, damit unabhaengiger Test auf + ! Treffer des He-Fensters gemacht werden kann (nur, falls + ! Teilchen nicht schon anderweitig gestorben ist). Auch + ! notwendig fuer Graphikausgabe. + + if (destiny.EQ.0) then + dt = (xGrid2-x(1))/v(1) ! < 0. + t = t + dt + x(1) = xGrid2 + x(2) = x(2)+v(2)*dt + x(3) = x(3)+v(3)*dt + endif + + ! falls Kryo verdreht ist, rechne in Kammerkoordinaten um: + + if (alfaTgt.NE.0.) then + if (alfaTgtVertically) then + help1 = x(1) + x(1) = help1 * Cos_alfaTgt - x(3) * Sin_alfaTgt + x(3) = help1 * Sin_alfaTgt + x(3) * Cos_alfaTgt + help1 = v(1) + v(1) = help1 * Cos_alfaTgt - v(3) * Sin_alfaTgt + v(3) = help1 * Sin_alfaTgt + v(3) * Cos_alfaTgt + else + help1 = x(1) + x(1) = help1 * Cos_alfaTgt - x(2) * Sin_alfaTgt + x(2) = help1 * Sin_alfaTgt + x(2) * Cos_alfaTgt + help1 = v(1) + v(1) = help1 * Cos_alfaTgt - v(2) * Sin_alfaTgt + v(2) = help1 * Sin_alfaTgt + v(2) * Cos_alfaTgt + endif + endif + + endif + + endif + + if (random_E0) then ! random_ENERGIE + if (fromScratch) then + if (random_E0_equal) then ! -> gleichverteilt +300 E0 = E0_ + lowerE0 + (upperE0 - lowerE0)*ran(seed) + if (E0.LT.0) goto 300 + elseif (random_E0_gauss) then ! -> gaussverteilt +310 call Gauss_Verteilung(sigmaE0,help1) + E0 = E0_ + help1 + if (E0.LT.0) goto 310 + endif + else + ! Einlesen von 'E0' aus NTP: + call HGNTB(NTP_read,'E0',eventNr,istat) +c if (istat.NE.0) then +c write(*,*) +c write(*,*)' error executing ''call HGNTB(NTP_read,''E0'',eventNr,istat)''' +c write(*,*)' eventNr = ',eventNr +c write(*,*)' -> STOP' +c write(*,*) +c call exit +c endif + endif + parWert(ener) = E0 + v0_Betrag = sqrt(E0/Energie_Faktor) + endif + + if (random_pos) then ! random_POSITION + if (fromScratch) then + if (random_y0z0_equal) then ! -> rechteckig, gleichverteilt + x0(2) = StartBreite * (ran(seed)-.5) + x0(3) = StartHoehe * (ran(seed)-.5) + elseif (random_y0z0_Gauss) then ! -> rechteckig, Gaussverteilt +320 r0 = abs(sigmaPosition*sqrt(-2.*log(1.-ran(seed)))) + phi_r0= 360.*ran(seed) + x0(2) = r0 * cosd(phi_r0) + if (abs(x0(2)).GT.StartBreite/2.) goto 320 + x0(3) = r0 * sind(phi_r0) + if (abs(x0(3)).GT.StartHoehe/2.) goto 320 + elseif (random_r0_equal) then ! -> rund, gleichverteilt + r0 = StartRadius * sqrt(ran(seed)) + phi_r0= 360. * ran(seed) + x0(2) = r0 * cosd(phi_r0) + x0(3) = r0 * sind(phi_r0) + elseif (random_r0_Gauss) then ! -> rund, Gaussverteilt +330 r0 = abs(sigmaPosition*sqrt(-2.*log(1.-ran(seed)))) + if (r0.GT.StartRadius) goto 330 + phi_r0= 360.*ran(seed) + x0(2) = r0 * cosd(phi_r0) + x0(3) = r0 * sind(phi_r0) + endif + x0(2) = y0_ + x0(2) + x0(3) = z0_ + x0(3) + else + ! Einlesen von 'x0(3)' aus NTP: + call HGNTB(NTP_read,'x0',eventNr,istat) +c if (istat.NE.0) then +c write(*,*) +c write(*,*)' error executing ''call HGNTB(',NTP_read,',''x0'',eventNr,istat)''' +c write(*,*)' eventNr = ',eventNr +c write(*,*)' -> STOP' +c write(*,*) +c call exit +c endif + endif + parWert(yPos) = x0(2) + parWert(zPos) = x0(3) + endif + + if (random_angle) then ! random_WINKEL + if (fromScratch) then +340 if (random_lambert) then ! -> Lambert-verteilt + call lambert_verteilung(StartLambertOrd, + + Cos_theta0,Sin_theta0) + theta0 = acosd(Cos_theta0) + elseif (random_gauss) then + call Gauss_Verteilung_theta(sigmaWinkel,theta0) + Cos_theta0 = cosd(theta0) + Sin_theta0 = sind(theta0) + endif + + phi0 = 360.*ran(seed) + Cos_phi0 = cosd(phi0) + Sin_phi0 = sind(phi0) + + if (angle_offset) then + +c -> Es soll aus gewuerfelter Startrichtung (theta0,phi0) und durch die Winkel- +c schleifen vorgegebenen Startrichtung (theta0_,phi0_) die tatsaechliche +c Startrichtung berechnet werden. Dafuer werden die gewuerfelten Winkel als +c 'Streuwinkel' betrachtet. +c Vorgehensweise: +c Es werden die Komponenten eines Geschwindigkeitsvektors mit Betrag=1 und durch +c theta0_,phi0_ bestimmter Richtung berechnet. Danach werden die Komponenten des +c mit theta0,phi0 gestreuten Geschwindigkeitsvektors und die zugehoerigen Winkel +c gewonnen, die dann als neuetheta0,phi0 als die tatsaechlichen Startwinkel +c verwendet werden. Das alles geschieht vollkommen analog zur Winkelaufstreuung +c in der Triggerfolie. +c v wird als Hilfsvariable missbraucht. + + ! Berechnung der 'Geschwindigkeitskomponenten': + v(1) = cosd(theta0_) + help1 = sind(theta0_) + v(2) = help1 * cosd(phi0_) + v(3) = help1 * sind(phi0_) + ! v_xy ist stets groesser 0 ausser wenn die Zentralrichtung + ! senkrecht nach oben oder unten gerichtet ist. Diese Wahl ist + ! aber sowieso wenig sinnvoll: + v_xy = SQRT(v(1)*v(1) + v(2)*v(2)) + if (v_xy.EQ.0.) then + write(*,*) + write(*,*)' Bei Zufallsverteilung fuer Startwinkel darf die durch die Winkelschleifen' + write(*,*)' vorgegebene Zentralrichtung nicht senkrecht nach oben oder nach unten weisen!' + write(*,*)' -> STOP' + STOP + endif + ! berechne neue 'Geschwindigkeitskomponenten': + help1 = v(1) + help2 = v(2) + help3 = Sin_theta0*Cos_phi0/v_xy + help4 = Sin_theta0*Sin_phi0 + v(1) = Cos_theta0*help1 - help3*help2 - help4*help1*v(3)/v_xy + if (v(1).LT.0.) goto 340 + v(2) = Cos_theta0*help2 + help3*help1 - help4*help2*v(3)/v_xy + v(3) = Cos_theta0*v(3) + help4*v_xy + ! Berechne tatsaechlichen Startwinkel: + if (v(2).EQ.0. .AND. v(3).EQ.0.) then + if (v(1).GE.0) then + theta0 = 0. + else + theta0 = 180. + endif + phi0 = 0. + else + theta0 = acosd(v(1)) + phi0 = atan2d(v(3),v(2)) + if (phi0.LT.0) phi0 = phi0+360. + endif + Cos_theta0 = cosd(theta0) + Sin_theta0 = sind(theta0) + Cos_phi0 = cosd(phi0) + Sin_phi0 = sind(phi0) + endif + + if (theta0.GT.90.) goto 340 + + else + + ! Einlesen von 'theta0' und 'phi0' aus NTP: + call HGNTB(NTP_read,'angle0',eventNr,istat) +c if (istat.NE.0) then +c write(*,*) +c write(*,*)' error executing ''call HGNTB(',NTP_read,',''angle0'',eventNr,istat)''' +c write(*,*)' eventNr = ',eventNr +c write(*,*)' -> STOP' +c write(*,*) +c call exit +c endif + + endif + + parWert(thetAng) = theta0 + parWert(phiAng) = phi0 + + endif + + ! Berechnung der Start-Geschwindigkeitskomponenten: + v0(1) = v0_Betrag * Cos_theta0 + v0(2) = v0_Betrag * Sin_theta0 * Cos_phi0 + v0(3) = v0_Betrag * Sin_theta0 * Sin_phi0 + + if (fromScratch) then + ! den Zeit-Speicher resetten: + t = 0. + ! Startparameter in Koordinatenspeicher uebergeben: + do i = 1, 3 + x(i) = x0(i) + v(i) = v0(i) + enddo + endif + + +c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +c Hier folgen die restl. Vorbereitungen zum Start des individuellen Projektils: +c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +c n_dtsmall resetten: + + n_dtsmall = 0 + + +c Aufstreuwinkel resetten: + + thetaAufstreu = 0. + phiAufstreu = 0. + + +c x-Komponente der Startgeschwindigkeit ueberpruefen: + + if (v0(1).LT.0) then + write(*,*) + write(*,*) ' >>>> v(x) beim Start negativ!' + write(*,*) + call exit + endif + + +c die Lebensdauer wuerfeln: +c (wird eine fruehere Simulation fortgefuehrt und wurde dort bereits der Myonen- +c zerfall beruecksichtigt, so verwende die dort gewuerfelten Lebenszeiten) + + if (UseDecay_) then + if (.NOT.UseDecay_prevSim) then +350 lifeTime = -meanlifeTime * Log(Ran(seed) + 1.0E-37) + if (lifeTime.LE.0.) goto 350 + elseif (.NOT.fromScratch) then + call HGNTB(NTP_read,'lifetime',eventNr,istat) +c if (istat.NE.0) then +c write(*,*) +c write(*,*)' error executing ''call HGNTB(',NTP_read,',''lifetime'',eventNr,istat)''' +c write(*,*)' eventNr = ', eventNr +c write(*,*)' -> STOP' +c write(*,*) +c call exit +c endif + endif + endif + + +c die Ladung resetten (falls in der Folie Neutralisierung stattgefunden hat): +c ('qInt' wird fuer 'NTP_charge' benoetigt) + + q = parWert(charge) + qInt = int(q) + + +c Ausgabe der Prozentzahl schon gerechneter Trajektorien: + + if (log_percent) then + if (100.*real(start_nr(1))/real(n_par(0)) + + .GE.percent_done+5) then + percent_done = percent_done + 5 + write(*,1002) percent_done + endif + endif +1002 format ($,'+',I3) + + +c andere Variablen auf den richtigen Stand bringen: + + if (fromScratch) then + destiny = code_ok ! bis jetzt ist dem Teilchen noch nichts zugestossen + Gebiet = Gebiet0 + endif + + start_nr(1) = start_nr(1) + 1 ! Projektil-Startnummer erhoehen + steps = 0 ! es wurden noch keine Integrationsschritte durchgefuehrt + NTPalreadyWritten = .false. ! fuer 'createFoilFile' + + +c die DEBUG-Daten ausgeben: + + if (Debug .AND. start_Nr(1).LE.DEBUG_Anzahl) then + Debug_ = .true. + call output_new_particle + call Output_Debug + else + Debug_ = .false. + endif + + +c StartKoordinaten fuer Graphikausgabe sichern: + + if (graphics .AND. (start_Nr(1).LE.graphics_Anzahl .OR. OneStartPerLoop)) then + graphics_ = .true. + if (Use_ACCEL) then + nKoord = 1 + xKoord(1) = x0(1) + yKoord(1) = x0(2) + zKoord(1) = x0(3) + else + nKoord = 0 + endif + if (.NOT.(Use_MUTRACK.OR.Gebiet0.EQ.upToExTD)) call Save_Graphics_Koord + else + graphics_ = .false. + endif + + +c gegebenenfalls 'fill_NTP' resetten: + + if (Fo_triggered.OR.M2_triggered.OR.xM2_triggered) fill_NTP = .false. + + +c Falls Schrittweiteninformationen im NTupel verlangt sind: Speicher resetten +c und Startkoordinaten sichern: + +d if (NTP_steps) then +d dtmin_L1 = +1.e10 +d x_dtmin_L1(1) = 0 +d x_dtmin_L1(2) = 0 +d x_dtmin_L1(3) = 0 +d dtmax_L1 = -1.e10 +d x_dtmax_L1(1) = 0 +d x_dtmax_L1(2) = 0 +d x_dtmax_L1(3) = 0 +d +d dtmin_L2andFo = +1.e10 +d x_dtmin_L2andFo(1) = 0 +d x_dtmin_L2andFo(2) = 0 +d x_dtmin_L2andFo(3) = 0 +d dtmax_L2andFo = -1.e10 +d x_dtmax_L2andFo(1) = 0 +d x_dtmax_L2andFo(2) = 0 +d x_dtmax_L2andFo(3) = 0 +d +d dtmin_FO = +1.e10 +d x_dtmin_FO(1) = 0 +d x_dtmin_FO(2) = 0 +d x_dtmin_FO(3) = 0 +d dtmax_FO = -1.e10 +d x_dtmax_FO(1) = 0 +d x_dtmax_FO(2) = 0 +d x_dtmax_FO(3) = 0 +d +d dtmin_L3 = +1.e10 +d x_dtmin_L3(1) = 0 +d x_dtmin_L3(2) = 0 +d x_dtmin_L3(3) = 0 +d dtmax_L3 = -1.e10 +d x_dtmax_L3(1) = 0 +d x_dtmax_L3(2) = 0 +d x_dtmax_L3(3) = 0 +d +d dtmin_M2 = +1.e10 +d x_dtmin_M2(1) = 0 +d x_dtmin_M2(2) = 0 +d x_dtmin_M2(3) = 0 +d dtmax_M2 = -1.e10 +d x_dtmax_M2(1) = 0 +d x_dtmax_M2(2) = 0 +d x_dtmax_M2(3) = 0 +d endif + + if (NTP_40mm) then + x40(2) = 0. + x40(3) = 0. + v40(1) = 0. + v40(2) = 0. + v40(3) = 0. + t40 = 0. + E40 = 0. + endif + + +c Die Flugzeiten resetten: + + S1xM2 = 0. + S1M2 = 0. + S1Fo = 0. + FoM2 = 0. + S1M3 = 0. + M3M2 = 0. + + +c Falls das Teilchen schon nicht mehr existiert, gehe gleich zur Ausgabe: + + if (destiny.NE.code_ok) goto 555 ! (nur bei '.NOT.fromScratch' moeglich) + + +czzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz +c hier starten die Projektile: +czzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz + + goto startLabel ! StartLabel = Gebiet0 als label + +c::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +c erste Beschleunigerstufe: (homogenes Feld) + +1 Gebiet = upToGrid1 + steps = Steps + 1 + + if (a1.NE.0.) then + help1 = v(1)*v(1) + 2.*a1*(xGrid1-x(1)) + if (help1.LT.0) then ! Reflektion noch vor 1. Gitter + dt = -2*v(1)/a1 + t = t + dt + !x(1) bleibt unveraendert + x(2) = x(2) + v(2)*dt + x(3) = x(3) + v(3)*dt + v(1) = -v(1) + !v(2) bleibt unveraendert + !v(3) bleibt unveraendert + destiny = code_reflektiert + goto 555 + endif + dt = (sqrt(help1) - v(1))/a1 + ! (ergibt sich aus x=v*t+1/2*a*t**2 mit richtiger V.Z.-Wahl ('+')) + v(1) = v(1) + a1*dt + else + if (v(1).EQ.0) then + write(*,*) + write(*,*)'ERROR: v(x) beim Start = 0. und '// + + 'Beschleunigung = 0' + write(*,*) + STOP + endif + dt = (xGrid1-xTarget) / v(1) + endif + + t = t + dt + !v(2) bleibt unveraendert + !v(3) bleibt unveraendert + x(1) = xGrid1 + x(2) = x(2) + v(2)*dt + x(3) = x(3) + v(3)*dt + +c - Aufgeschlagen? + + if (Abs(x(2)).gt.dygrid1/2. .OR. + + Abs(x(3)).gt.dzgrid1/2.) then + flag = .true. + destiny = code_wand + else + flag = .false. + endif + +c - Gitterstab getroffen? + + if (testOnWireHit) then + DrahtNr = nInt(x(2)/dist_Wires_G1) + distToWire(1) = 0. + distToWire(2) = x(2) - DrahtNr * dist_Wires_G1 + call Test_WireHit(distToWire,WireRadiusQuad_G1,v(1),v(2),WireHit) + if (WireHit) then + flag = .true. + destiny = code_grid + endif + endif + +c - Koordinatentransformation in Kammersystem: + + if (alfaTgt.NE.0.) then + if (alfaTgtVertically) then + help1 = x(3) + help2 = v(1) + help3 = v(3) + x(1) = xgrid1 * Cos_alfaTgt - help1 * Sin_alfaTgt + x(3) = xgrid1 * Sin_alfaTgt + help1 * Cos_alfaTgt + v(1) = help2 * Cos_alfaTgt - help3 * Sin_alfaTgt + v(3) = help2 * Sin_alfaTgt + help3 * Cos_alfaTgt + else + help1 = x(2) + help2 = v(1) + help3 = v(2) + x(1) = xgrid1 * Cos_alfaTgt - help1 * Sin_alfaTgt + x(2) = xgrid1 * Sin_alfaTgt + help1 * Cos_alfaTgt + v(1) = help2 * Cos_alfaTgt - help3 * Sin_alfaTgt + v(2) = help2 * Sin_alfaTgt + help3 * Cos_alfaTgt + endif + endif + +c - zerfallen? + + if (useDecay_) call Decay_Test(*555) + +c - falls aufgeschlagen: + + if (flag) goto 555 + +c - Koordinatentransformation zurueck in Beschleunigersystem: + + if (alfaTgt.NE.0.) then + if (alfaTgtVertically) then + x(1) = xGrid1 + x(3) = help1 + v(1) = help2 + v(3) = help3 + else + x(1) = xGrid1 + x(2) = help1 + v(1) = help2 + v(2) = help3 + endif + endif + +c - Datenausgabe: + + if (Graphics_) call Save_Graphics_Koord + if (Debug_) call Output_Debug + +c::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +c zweite Beschleunigerstufe: (homogenes Feld) + +2 Gebiet = upToGrid2 + steps = Steps + 1 + + if (a2.NE.0.) then + help1 = v(1)*v(1) + 2.*a2*(XGrid2-XGrid1) + if (help1.LT.0) then ! Reflektion noch vor 2. Gitter + dt = -2*v(1)/a2 + t = t + dt + !x(1) bleibt unveraendert + x(2) = x(2) + v(2)*dt + x(3) = x(3) + v(3)*dt + v(1) = -v(1) + !v(2) bleibt unveraendert + !v(3) bleibt unveraendert + destiny = code_reflektiert + goto 555 + endif + dt = (sqrt(help1) - v(1))/a2 + v(1) = v(1) + a2*dt + else + if (v(1).EQ.0) then ! (kann nur bei Start in 2. Stufe passieren) + write(*,*) + write(*,*)'ERROR: v(x) beim Start = 0. und '// + + 'Beschleunigung = 0' + write(*,*) + STOP + endif + dt = (XGrid2-XGrid1) / v(1) + endif + + t = t + dt + x(2) = x(2) + v(2)*dt + x(3) = x(3) + v(3)*dt + +c - Aufgeschlagen? + + if (Abs(x(2)).gt.dygrid2/2. .OR. + + Abs(x(3)).gt.dzgrid2/2.) then + flag = .true. + destiny = code_wand + else + flag = .false. ! <- noetig, falls Start auf 1. Gitter + endif + +c - Gitterstab getroffen? + + if (testOnWireHit) then + DrahtNr = nInt(x(2)/dist_Wires_G2) + distToWire(1) = 0 + distToWire(2) = x(2) - DrahtNr * dist_Wires_G2 + call Test_WireHit(distToWire,WireRadiusQuad_G2,v(1),v(2),WireHit) + if (WireHit) then + flag = .true. + destiny = code_grid + endif + endif + +c - Koordinatentransformation in Kammersystem: + + if (alfaTgt.NE.0.) then + if (alfaTgtVertically) then + x(1) = xgrid2 * Cos_alfaTgt - x(3) * Sin_alfaTgt + x(3) = xgrid2 * Sin_alfaTgt + x(3) * Cos_alfaTgt + help1 = v(1) + v(1) = help1 * Cos_alfaTgt - v(3) * Sin_alfaTgt + v(3) = help1 * Sin_alfaTgt + v(3) * Cos_alfaTgt + else + x(1) = xgrid2 * Cos_alfaTgt - x(2) * Sin_alfaTgt + x(2) = xgrid2 * Sin_alfaTgt + x(2) * Cos_alfaTgt + help1 = v(1) + v(1) = help1 * Cos_alfaTgt - v(2) * Sin_alfaTgt + v(2) = help1 * Sin_alfaTgt + v(2) * Cos_alfaTgt + endif + else + x(1) = xgrid2 + endif + +c - zerfallen? + + if (useDecay_) call Decay_Test(*555) + +c - falls aufgeschlagen: + + if (flag) goto 555 + +c - Datenausgabe: + + if (Graphics_) call Save_Graphics_Koord + if (Debug_) call Output_Debug + +c::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +c zwischen zweitem Gitter und He-Shield: (feldfrei) + +3 Gebiet = upToHeShield + Steps = Steps + 1 + + radiusQuad = x(1)*x(1) + x(2)*x(2) + help1 = v(1)*v(1)+v(2)*v(2) + help2 = x(1)*v(1)+x(2)*v(2) + dt = (SQRT(help2*help2-help1*(radiusQuad-radiusQuad_HeShield))-help2) + + /help1 + t = t + dt + x(1) = x(1) + dt*v(1) ! den Ort berechnen, an dem + x(2) = x(2) + dt*v(2) ! das Teilchen das Schild + x(3) = x(3) + dt*v(3) ! durchquert + + if (useDecay_) call Decay_Test(*555) + if (Abs(x(2)).gt.DYHESHIELD/2. .OR. + + Abs(x(3)).gt.DZHESHIELD/2.) then + destiny = code_wand + goto 555 + endif + if (Debug_) call Output_Debug + +c::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +c Groessen bei x=40 mm berechnen: + + if (NTP_40mm) then + dt = (40-x(1))/v(1) + x40(2) = x(2)+v(2)*dt + x40(3) = x(3)+v(3)*dt + v40(1) = v(1) + v40(2) = v(2) + v40(3) = v(3) + t40 = t + dt + ! help1 = v(1)*v(1)+v(2)*v(2) noch bekannt von 'upToHeShield' + v_square = help1 + v(3)*v(3) + E40 = v_square * Energie_Faktor + endif + +c::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +c zwischen He-Shield und LN-Shield: (feldfrei) + +4 Gebiet = upToLNShield + Steps = Steps + 1 + + radiusQuad = x(1)*x(1) + x(2)*x(2) + ! help1 = v(1)*v(1)+v(2)*v(2) ! noch bekannt von 'upToHeShield' + help2 = x(1)*v(1)+x(2)*v(2) + dt = (SQRT(help2*help2-help1*(radiusQuad-radiusQuad_LNShield))-help2) + + /help1 + t = t + dt + x(1) = x(1) + dt*v(1) ! den Ort berechnen, an dem + x(2) = x(2) + dt*v(2) ! das Teilchen das Schild + x(3) = x(3) + dt*v(3) ! durchquert + + if (useDecay_) call Decay_Test(*555) + if (abs(x(2)).gt.dyLNShield/2. .OR. + + Abs(x(3)).gt.dzLNShield/2.) then + destiny = code_wand + goto 555 + endif + if (Debug_) call Output_Debug + +c::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +c zwischen LN-Shield und Beginn der L1-Mappe: (feldfrei) + +5 Gebiet = upToL1Map + Steps = Steps + 1 + + dt = (xEnterMap_L1 - x(1)) / v(1) + + t = t + dt + x(1) = xEnterMap_L1 + x(2) = x(2) + v(2)*dt + x(3) = x(3) + v(3)*dt + + radiusQuad = x(2)*x(2) + x(3)*x(3) + if (radiusQuad.GT.radiusQuad_Rohr) then + help1 = v(2)*v(2)+v(3)*v(3) + help2 = x(2)*v(2)+x(3)*v(3) + dt = (SQRT(help2*help2-help1*(radiusQuad-radiusQuad_Rohr))-help2) + + /help1 + t = t + dt + x(1) = x(1) + dt*v(1) ! den Ort berechnen, an dem + x(2) = x(2) + dt*v(2) ! das Teilchen auf das Rohr + x(3) = x(3) + dt*v(3) ! aufschlaegt + if (useDecay_) call Decay_Test(*555) ! vor Aufschlag zerfallen? + destiny = code_wand + goto 555 + endif + if (useDecay_) call Decay_Test(*555) + if (Graphics_) call Save_Graphics_Koord + if (Debug_) call Output_Debug + if (radiusQuad.GT.radiusQuad_L1) then ! Teilchen fliegt an L1 vorbei + destiny = code_vorbei + goto 555 + endif + +c::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +c innerhalb L1: (inhom. Felder -> Integrationen) + +6 Gebiet = upToExL1 ! GebietsNummer fuer L1 setzen + +c Teste, ob das Teilchen ueberhaupt eine Beschleunigung erfaehrt (Spannung=0?, +c Ladung=0?). Falls nicht, steppe gleich bis zum Mappenende: + + if (Beschl_Faktor_L1.EQ.0) then +d dtmax_L1 = 0. +d dtmin_L1 = 0. + dt = (xLeaveMap_L1 - x(1)) / v(1) ! Zeit bis zum Mappenende + x(1) = xLeaveMap_L1 + x(2) = x(2) + v(2)*dt + x(3) = x(3) + v(3)*dt + t = t + dt + goto 5106 + endif + +c............................................................................... +c Das Teilchen spuert eine Beschleunigung, es muss also integriert werden. +c Gehe als ersten Versuch 0.5 mm in das Gebiet hinein: + + dt = .5/v(1) + zaehler = 0 + +c............................................................................... +c hierher wird zurueckgesprungen, solange die Integration in der L1 bleibt + +5006 call INTEGRATIONSSTEP_RUNGE_KUTTA_L1(dt) +d if (NTP_steps) then +d if (dt.LT.dtmin_L1) then +d dtmin_L1 = dt +d x_dtmin_L1(1) = x(1) +d x_dtmin_L1(2) = x(2) +d x_dtmin_L1(3) = x(3) +d endif +d if (dt.GT.dtmax_L1) then +d dtmax_L1 = dt +d x_dtmax_L1(1) = x(1) +d x_dtmax_L1(2) = x(2) +d x_dtmax_L1(3) = x(3) +d endif +d endif + +c............................................................................... +5106 Steps = Steps + 1 ! neuer Ort, Zeit und Geschwindigkeit sind festgelegt + +c do some tests: + + if (destiny.EQ.code_dtSmall) then ! n_dtsmall>maxBelowDtSmall + goto 555 + elseif (destiny.EQ.code_wand) then ! aufgeschlagen + radiusQuad = x(2)*x(2) + x(3)*x(3) ! -> den Ort berechnen, an + help1 = v(2)*v(2)+v(3)*v(3) ! dem das Teilchen auf- + help2 = x(2)*v(2)+x(3)*v(3) + dt = (SQRT(help2*help2-help1*(radiusQuad-radiusQuad_L1))-help2) + + /help1 + t = t + dt + x(1) = x(1) + dt*v(1) + x(2) = x(2) + dt*v(2) + x(3) = x(3) + dt*v(3) + if (useDecay_) call Decay_Test(*555) ! vor Aufschlag zerfallen? + goto 555 +c elseif (destiny.NE.code_ok) then ! voruebergehend fuer Testzwecke +c write(*,*) +c write(*,*)'L1-1: ''destiny.NE.code_ok'' where it should -> STOP' +c write(*,*)' destiny = ',destiny,': ',code_text(destiny) +c write(*,*) +c STOP + elseif (useDecay_) then ! zerfallen? + call Decay_Test(*555) + endif + + if (x(1).LT.xEnterMap_L1) then + if (v(1).LT.0) then ! reflektiert? + destiny = code_reflektiert + goto 555 + else ! darf nicht sein! + write(*,*) + write(*,*)' L1: x(1).LT.xEnterMap .AND. v(1).GE.0. -> STOP' + write(*,*) + STOP + endif + elseif (Steps.GE.MaxStep) then ! Teilchen verloren + destiny = code_lost + goto 555 + elseif (x(1).GE.xLeaveMap_L1) then ! Verlasse L1 + dt = (xLeaveMap_L1 - x(1))/v(1) ! rechne zurueck auf exaktes + t = t + dt ! Mappenende + x(1) = xLeaveMap_L1 + x(2) = x(2) + dt*v(2) + x(3) = x(3) + dt*v(3) + if (Graphics_) call Save_Graphics_Koord + if (Debug_) call Output_Debug + goto bis_Spiegel ! -> Mache bei upToEnSp weiter +c elseif (destiny.NE.code_ok) then ! voruebergehend fuer Testzwecke +c write(*,*) +c write(*,*)'L1-2: ''destiny.NE.code_ok'' where it should -> STOP' +c write(*,*)' destiny = ',destiny,': ',code_text(destiny) +c write(*,*) +c STOP + endif + + +c verarbeite alle 'imonitor' Schritte die Koordinaten fuer GRAPHICS und DEBUG: + + if (GRAPHICS_.or.Debug_) then + zaehler = zaehler + 1 + if (zaehler.EQ.iMonitor) then + if (Graphics_) call Save_Graphics_Koord + if (Debug_) call Output_Debug + zaehler = 0 + endif + endif + + goto 5006 ! naechster Integrationsschritt in L1-Mappe + +c::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +c zwischen Linse 1 und Spiegel: (feldfrei) + +7 Gebiet = upToEnSp + Steps = Steps + 1 + +c - berechne Schnittpunkt mit forderer Spiegelebene: + + help2 = v(2)/v(1) ! Steigung der Bahn in der x-y-Ebene + + if (help2.GE.Tan_alfaSp) then + ! Teilchen fliegt am Spiegel vorbei + dt = (600-x(1))/v(1) + t = t + dt + x(1) = x(1) + v(1)*dt + x(2) = x(2) + v(2)*dt + x(3) = x(3) + v(3)*dt + if (useDecay_) call Decay_Test(*555) + destiny = code_vorbei + goto 555 + else + ! help1 == neues x(1) + help1 = (x(2) - y_intersectSP + xSpiegel*Tan_alfaSp + + - xLeaveMap_L1*help2) / (Tan_alfaSp - help2) + + dt = (help1-x(1)) / v(1) + t = t + dt + x(1) = help1 + x(2) = x(2) + v(2)*dt + x(3) = x(3) + v(3)*dt + endif + + if (useDecay_) call Decay_Test(*555) + if (Debug_) call Output_Debug + + +c Berechnung der Trajektorie bei idealem Spiegel: + + if (idealMirror) then ! ~~~ 40: if ~~~~~~~~~~~ + +c - pruefe, ob das Teilchen die ForderSEITE des Spiegels trifft: + + if ( x(2).GT.yUppLeft .OR. x(2).LT.yLowLeft .OR. + + abs(x(3)).GT.HSpiegel/2.) then + ! -> Teilchen fliegt am Spiegel vorbei + dt = (600-x(1))/v(1) + t = t + dt + x(1) = x(1) + v(1)*dt + x(2) = x(2) + v(2)*dt + x(3) = x(3) + v(3)*dt + destiny = code_vorbei + goto 555 + endif + + +c - pruefe, ob das Teilchen einen Gitterstab des Spiegels trifft: + + if (testOnWireHit) then + help1 = x(2)-yLowLeft ! Abstand zum Bezugspunkt + DrahtNr = nInt(help1/(Sin_alfaSp*dist_Wires_Sp)) + distToWire(2) = help1 - DrahtNr * Sin_alfaSp*dist_Wires_Sp + distToWire(1) = distToWire(2)/Tan_alfaSp + call Test_WireHit(distToWire,WireRadiusQuad_Sp,v(1),v(2),WireHit) + if (WireHit) then + destiny = code_grid + goto 555 + endif + endif + + +c::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +c im Spiegel: (homogenes Feld) + +8 Gebiet = upToExSp + Steps = Steps + 1 + +c - pruefe, ob Teilchen nicht zuviel Energie senkrecht zum Spiegel hat: + + if (Spiegel_Faktor.EQ.0.) then ! Spannung=0. oder q=0 + dt = (600-x(1))/v(1) + t = t + dt + x(1) = x(1) + v(1)*dt + x(2) = x(2) + v(2)*dt + x(3) = x(3) + v(3)*dt + destiny = code_durchSpiegel + goto 555 + endif + + ! help1 == Winkel in xy-Ebene zwischen Bewegungsrichtung und Spiegelfront + + help1 = alfaSp - atand(v(2)/v(1)) + + ! help2 = Geschw.Komponente senkrecht auf den Spiegel gerichtet + ! help3 = Geschw.Komponente parallel zum Spiegel, zu positiven y hin + + v_xy = sqrt( v(1)*v(1) + v(2)*v(2) ) + help2 = sind(help1) * v_xy + help3 = cosd(help1) * v_xy + + if (help2*help2*Energie_Faktor.GE.q*U_Sp) then + ! Teilchen tritt durch Spiegel durch + dt = (600-x(1))/v(1) + t = t + dt + x(1) = x(1) + v(1)*dt + x(2) = x(2) + v(2)*dt + x(3) = x(3) + v(3)*dt + destiny = code_durchSpiegel + goto 555 + endif + + if (Graphics_) call Save_Graphics_Koord + + +c - berechne Zeit, bis Teilchen wieder auf Spiegelforderseite ist: + + dt = help2 * Spiegel_Faktor ! Spiegel_Faktor == 2 / a + t = t + dt + +c - berechne Versetzung in xy-Ebene, parallel zur Spiegelebene, +c in 'positiver y-Richtung' (speichere in 'help1'): + + help1 = help3*dt + +c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . +c falls Graphikausgabe verlangt ist: +c Um die Teilchenbahn im Innern des Spiegels anzudeuten, berechne die Orte bei +c t+dt/4, t+td/2 und t+3dt/4. Bestimme dafuer erst die jeweilige Versetzung +c senkrecht zur Spiegelebene aus dx = vx * t + 1/2 * a * t**2. +c (speichere in help4): + + if (Graphics_) then + + help4 = help2*dt*.25 - (dt*dt*.0625)/Spiegel_faktor + nKoord = nKoord + 1 + xKoord(nKoord) = x(1)+help4*Sin_alfaSp+help1*.25*Cos_alfaSp + yKoord(nKoord) = x(2)-help4*Cos_alfaSp+help1*.25*Sin_alfaSp + zKoord(nKoord) = x(3) + v(3)*dt*.25 + + help4 = help2*dt*.50 - (dt*dt*.2500)/Spiegel_faktor + nKoord = nKoord + 1 + xKoord(nKoord) = x(1)+help4*Sin_alfaSp+help1*.50*Cos_alfaSp + yKoord(nKoord) = x(2)-help4*Cos_alfaSp+help1*.50*Sin_alfaSp + zKoord(nKoord) = x(3)+v(3)*dt*.50 + + help4 = help2*dt*.75 - (dt*dt*.5625)/Spiegel_faktor + nKoord = nKoord + 1 + xKoord(nKoord) = x(1)+help4*Sin_alfaSp+help1*.75*Cos_alfaSp + yKoord(nKoord) = x(2)-help4*Cos_alfaSp+help1*.75*Sin_alfaSp + zKoord(nKoord) = x(3)+v(3)*dt*.75 + + endif +c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + +c - berechne Austrittsort: + + x(1) = x(1) + help1 * Cos_alfaSp + x(2) = x(2) + help1 * Sin_alfaSp + x(3) = x(3) + v(3)*dt + + +c - berechne Austrittsgeschwindigkeit (help2 geht bei Spiegelung in -help2 ueber): + + v(1) = help3 * Cos_alfaSp - help2 * Sin_alfaSp + v(2) = help2 * Cos_alfaSp + help3 * Sin_alfaSp + + if (v(2).LE.0) then + write(*,*) + write(*,*)'ERROR: nach Spiegel ist v(y) <= 0.' + write(*,*) + STOP + endif + + if (useDecay_) call Decay_Test(*555) + + +c - pruefe, ob Austrittspunkt auf forderer Spiegelflaeche liegt: + + if (x(2).GT.yUppLeft .OR. x(2).LT.yLowLeft .OR. + + abs(x(3)).GT.hSpiegel/2.) then + ! Teilchen trifft auf Spiegelwand + destiny = code_wand + goto 555 + endif + + +c - pruefe, ob das Teilchen einen Gitterstab des Spiegels trifft: + + if (testOnWireHit) then + help1 = x(2)-yLowLeft ! Abstand zum Bezugspunkt + DrahtNr = nInt(help1/(Sin_alfaSp*dist_Wires_Sp)) + distToWire(2) = help1 - DrahtNr * Sin_alfaSp*dist_Wires_Sp + distToWire(1) = distToWire(2)/Tan_alfaSp + call Test_WireHit(distToWire,WireRadiusQuad_Sp,v(1),v(2),WireHit) + if (WireHit) then + destiny = code_grid + goto 555 + endif + endif + + if (Graphics_) call Save_Graphics_Koord + if (Debug_) call Output_Debug + + goto 9 + + endif ! ~~~ 40: endif ~~~~ + + +c::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +c innerhalb der Spiegelmappe (dx = 0.050 mm, dy = 0.050 mm) + + Gebiet = upToExSp + nKoordSave = nKoord + +c Die Anweisungen dieses Abschnitts verlaufen analog zu denen +c von Linse 1. -> Fuer Kommentare siehe dort! + + if (Beschl_Faktor_Sp.EQ.0. .OR. q.EQ.0) then +d dtmax_Sp = 0. +d dtmin_Sp = 0. + dt = (600-x(1))/v(1) + t = t + dt + x(1) = x(1) + v(1)*dt + x(2) = x(2) + v(2)*dt + x(3) = x(3) + v(3)*dt + destiny = code_durchSpiegel + goto 555 + endif + + dt = 0.5/v(1) + + reachedEndOfMap = .false. + zaehler = 0 + + +c Rechne in Spiegelmappen-Koordinaten um: +c Im Spiegelmappensystem: x-Achse verlaueft entlang der forderen Mappenkante, +c y-Achse aus dem Spiegel heraus. (entgegen der Richtung zunehmender Mappen- +c j-indizierung!) + + +5008 help1= x(1) - xSpiegel + x(1) = - x(2)*Cos_alfaSp + help1*Sin_alfaSp + + + (dSpiegel/2.+DreharmLaenge+xSpGrid1) + x(2) = x(2)*Sin_alfaSP + help1*Cos_alfaSP + help1= v(1) + v(1) = - v(2)*Cos_alfaSp + help1*Sin_alfaSp + v(2) = v(2)*Sin_alfaSP + help1*Cos_alfaSP + + +c mache Integrationsschritt: + + call INTEGRATIONSSTEP_RUNGE_KUTTA_Sp(dt) ! setzt u.U. auch 'destiny' + + Steps = Steps + 1 + + +c do some tests: + + if (Steps.GE.MaxStep) destiny = code_lost ! Teilchen verloren + + +c - Potentialmappe nach Reflektion wieder verlasssen? + + if (x(1).LT.0) then + reachedEndOfMap = .true. + +c - Spiegelrahmen getroffen? + + elseif (x(1).GE.xSpGrid1 .AND. + + (abs(x(2)).GT.bSpiegel/2. .OR. abs(x(3)).GT.hSpiegel/2.)) then + destiny = code_wand + +c - Gitterstab getroffen? + + else + help1 = min(abs(x(1)-xSpGrid1),abs(x(1)-xSpGrid1)) + if (help1.LE.rWires_Sp) then + DrahtNr = nInt(x(2)/dist_Wires_Sp) + distToWire(2) = x(2) - DrahtNr * dist_Wires_Sp + if ( (help1*help1 + distToWire(2)*distToWire(2)).LE. + + radiusQuad_Sp) destiny = code_grid + endif + + endif + +c if (destiny.NE.code_ok) then +c if (x(1).LT.xSpGrid1) then +c if (v(1).GT.0) then +c gebiet = UpToGrid +c else +c gebiet = upToExMap +c endif +c else +c gebiet = RetToGrid +c endif +c endif + + +c Rechne in Kammerkoordinaten zurueck: + + help1= x(1)-(dSpiegel/2.+DreharmLaenge+xSpGrid1) + x(1) = help1*Sin_alfaSP + x(2)*Cos_alfaSP + xSpiegel + x(2) = - help1*Cos_alfaSP + x(2)*Sin_alfaSP + help1= v(1) + v(1) = help1*Sin_alfaSP + v(2)*Cos_alfaSP + v(2) = - help1*Cos_alfaSP + v(2)*Sin_alfaSP + +d if (NTP_steps) then +d if (dt.LT.dtmin_Sp) then +d dtmin_Sp = dt +d x_dtmin_Sp(1) = x(1) +d x_dtmin_Sp(2) = x(2) +d x_dtmin_Sp(3) = x(3) +d endif +d if (dt.GT.dtmax_Sp) then +d dtmax_Sp = dt +d x_dtmax_Sp(1) = x(1) +d x_dtmax_Sp(2) = x(2) +d x_dtmax_Sp(3) = x(3) +d endif +d endif + + +c zerfallen? + + if (useDecay_) call Decay_Test(*555) + + +c Bahnberechnung abgebrochen? + + if (destiny.NE.code_ok) goto 555 + + +c verarbeite alle 'imonitor' Schritte die Koordinaten fuer GRAPHICS und DEBUG: + + if (GRAPHICS_.or.Debug_) then + zaehler = zaehler + 1 + if (zaehler.EQ.iMonitor) then + if (GRAPHICS_) call Save_Graphics_Koord + if (Debug_) call Output_Debug + zaehler = 0 + endif + endif + + if (.NOT.reachedEndOfMap) goto 5008 ! naechster Integrationsschritt + +c::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +c zwischen Spiegel und Koordinatenwechsel-Ebene y=xChangeKoord: (feldfrei) + +9 Gebiet = upToChKoord + Steps = Steps + 1 + + if (x(2).LT.xChangeKoord) then + ! gegebenenfalls flag fuer Graphikausgabe des Punktes setzen + flag = .true. + else + flag = .false. + endif + + dt = (xChangeKoord - x(2)) / v(2) + t = t + dt + x(1) = x(1) + v(1)*dt + x(2) = xChangeKoord + x(3) = x(3) + v(3)*dt + + help4 = x(1)-xSpiegel + radiusQuad = help4*help4 + x(3)*x(3) + if (radiusQuad.GT.radiusQuad_Rohr) then + help1 = v(1)*v(1)+v(3)*v(3) + help2 = help4*v(1)+x(3)*v(3) + dt = (SQRT(help2*help2-help1*(radiusQuad-radiusQuad_Rohr))-help2) + + /help1 + t = t + dt + x(1) = x(1) + dt*v(1) ! den Ort berechnen, an dem + x(2) = x(2) + dt*v(2) ! das Teilchen auf das Rohr + x(3) = x(3) + dt*v(3) ! aufschlaegt + if (useDecay_) call Decay_Test(*555) ! vor Aufschlag zerfallen? + destiny = code_wand + goto 555 + endif + if (useDecay_) call Decay_Test(*555) + if (Graphics_.AND.flag) call Save_Graphics_Koord + if (Debug_) call Output_Debug + + +c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . +c falls Graphikausgabe verlangt ist: Gib jetzt die Trajektorie im 'horizontalen' +c Teil der Kammer aus und resette nKoord: + + if (Graphics_) then + + call plot_horizontal + if (schnitt_p.eq.1) call schnitt ! Schnittebene + + ! die letzten Koordinaten fuer Plot der Trajektorie im 2. Kammerteil + ! uebernehmen (in neues KoordinatenSystem transformiert): + + k = nKoord + + if (idealMirror) then + nKoord = 7 + else + if (nKoord.LT.nKoordSave) then + ! => ein 'turn over' fand statt waehrend das Teilchen in der + ! Spiegelmappe war => x(999) -> x(1), x(1000) -> x(2) + nKoord = nKoord + (999-nKoordSave) + else + nKoord = nKoord - nKoordSave + 1 + endif + nKoord = nKoord-2 + endif + + do i = nKoord, 1, -1 + xKoord_(i) = yKoord(k) + yKoord_(i) = xSpiegel - xKoord(k) + zKoord_(i) = zKoord(k) + k = k - 1 + if (k.EQ.0) then + k = 998 + endif + enddo + do i = 1, nKoord + xKoord(i) = xKoord_(i) + yKoord(i) = yKoord_(i) + zKoord(i) = zKoord_(i) + enddo + endif + + +c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . +c - Vollziehe Koordinatenwechsel: neuer Ursprung in der Spiegelaufhaengung, +c x-Richtung in bisherige y-Richtung (also wiederum entlang Strahlachse), +c y-Richtung in bisheriger negativer x-Richtung. z-Richtung bleibt gleich. + + help1 = x(2) + x(2) = xSpiegel - x(1) + x(1) = help1 + help1 = v(1) + v(1) = v(2) + v(2) = - help1 + + if (Debug_) then + write (lun(1),*) 'KOORDINATENWECHSEL:' + call Output_Debug + endif + + +c Beruecksichtige gegebenenfalls die Flugzeit in 'delta_L1', welches 'vor dem +c Triggerdetektor' eingeschoben werden kann: + + dt = Delta_L1 / v(1) + x(1) = x(1)+v(1)*dt + x(2) = x(2)+v(2)*dt + x(3) = x(3)+v(3)*dt + t = t + dt + + +c::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: + + if (lense2) then ! ~~~~~~~~~~~~~~ ******* ~~~~~~~~~~~~~~~ + +c Bei 'lense2' wird fuer das Feld der Linse 2 und das Feld der TD-Folie eine +c gemeinsame Mappe verwendet. Hierbei ist allerdings der Triggerwinkel auf 0 +c Grad festgelegt. Da es in Zukunft in der Praxis wohl kaum noch vorkommen wird, +c dass der Triggerdetektor verdreht wird, sollte diese Einschraenkung jedoch +c keine grossen Auswirkungen haben. +c Ist der Triggerdetektor nicht im Strahl, so wird der Anteil der Triggerfolie +c gleich Null gesetzt. + +c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +c zwischen KOORDINATENWECHSEL und Beginn der L2andFo-Mappe: (feldfrei) + +10 Gebiet = upToL2andFoMap + Steps = Steps + 1 + + dt = (xEnterMap_L2andFo - x(1)) / v(1) + t = t + dt + x(1) = xEnterMap_L2andFo + x(2) = x(2) + v(2)*dt + x(3) = x(3) + v(3)*dt + + radiusQuad = x(2)*x(2) + x(3)*x(3) + if (radiusQuad.GT.radiusQuad_Rohr) then + help1 = v(2)*v(2)+v(3)*v(3) + help2 = x(2)*v(2)+x(3)*v(3) + dt = (SQRT(help2*help2-help1*(radiusQuad-radiusQuad_Rohr))-help2) + + /help1 + t = t + dt + x(1) = x(1) + dt*v(1) ! den Ort berechnen, an dem + x(2) = x(2) + dt*v(2) ! das Teilchen auf das Rohr + x(3) = x(3) + dt*v(3) ! aufschlaegt + if (useDecay_) call Decay_Test(*555) ! vor Aufschlag zerfallen? + destiny = code_wand + goto 555 + endif + + if (useDecay_) call Decay_Test(*555) + if (Graphics_) call Save_Graphics_Koord + if (Debug_) call Output_Debug + + if (radiusQuad.GT.radiusQuad_L2) then ! Teilchen fliegt an L2 vorbei + destiny = code_vorbei + goto 555 + endif + +c::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +c innerhalb der gemeinsamen Mappe von Linse 2 und dem Feld vor der Trigger- +c Detektor-Folie: + +11 Gebiet = upToExL2 ! Gebietsnummer fuer L2 setzen + +c Die Anweisungen dieses Abschnitts verlaufen analog zu denen +c von Linse 1. -> Fuer Kommentare siehe dort! + + if (Beschl_Faktor.EQ.0. .OR. (U_L2.EQ.0. AND. U_F.EQ.0.)) then +c WRITE(*,*) 'HALLOHALLO!' +d dtmax_L2andFo = 0. +d dtmin_L2andFo = 0. + dt = (xEndLense_L2 - x(1)) / v(1) ! Zeit bis zum Linsenende + x(1) = xEndLense_L2 + x(2) = x(2) + v(2)*dt + x(3) = x(3) + v(3)*dt + t = t + dt + radiusQuad = x(2)*x(2) + x(3)*x(3) + if (radiusQuad.GT.radiusQuad_L2) then + destiny = code_wand + radiusQuad_ = radiusQuad_L2 + goto 5111 + endif + if (TriggerInBeam) then + Gebiet = upToEnTD ! Gebietsnummer fuer upToTD setzen + ! Zeit bis zum Mappenende (falls TD im Strahl: bis Triggerfolie) + dt = (xLeaveMap_L2andFo - xEndLense_L2) / v(1) + x(1) = xLeaveMap_L2andFo + x(2) = x(2) + v(2)*dt + x(3) = x(3) + v(3)*dt + t = t + dt + radiusQuad = x(2)*x(2) + x(3)*x(3) + if (radiusQuad.GT.radiusQuad_Rohr) then + destiny = code_wand + radiusQuad_ = radiusQuad_Rohr + endif + endif + goto 5111 + endif + + dt = .5/v(1) + zaehler = 0 + reachedEndOfMap = .false. + + +c die Integrationsroutine will x bereits relativ zum Mappenanfang geliefert +c bekommen: + +5011 x(1) = x(1) - xEnterMap_L2andFo + call INTEGRATIONSSTEP_RUNGE_KUTTA_L2(dt) + x(1) = x(1) + xEnterMap_L2andFo + +d if (NTP_steps) then +d if (dt.LT.dtmin_L2andFo) then +d dtmin_L2andFo = dt +d x_dtmin_L2andFo(1) = x(1) +d x_dtmin_L2andFo(2) = x(2) +d x_dtmin_L2andFo(3) = x(3) +d endif +d if (dt.GT.dtmax_L2andFo) then +d dtmax_L2andFo = dt +d x_dtmax_L2andFo(1) = x(1) +d x_dtmax_L2andFo(2) = x(2) +d x_dtmax_L2andFo(3) = x(3) +d endif +d endif + +5111 Steps = Steps + 1 + + if (destiny.EQ.code_dtSmall) then ! n_dtsmall>maxBelowDtSmall + goto 555 + elseif (destiny.EQ.code_wand) then ! aufgeschlagen + radiusQuad = x(2)*x(2) + x(3)*x(3) ! -> den Ort berechnen, an + help1 = v(2)*v(2)+v(3)*v(3) ! dem das Teilchen auf- + help2 = x(2)*v(2)+x(3)*v(3) ! schlaegt + dt = (SQRT(help2*help2-help1*(radiusQuad-radiusQuad_))-help2)/help1 + t = t + dt + x(1) = x(1) + dt*v(1) + x(2) = x(2) + dt*v(2) + x(3) = x(3) + dt*v(3) + if (useDecay_) call Decay_Test(*555) ! vor Aufschlag zerfallen? + goto 555 + elseif (useDecay_) then ! zerfallen? + call Decay_Test(*555) + endif + + if (Gebiet.EQ.upToExL2) then ! ----> noch innerhalb von Linse 2 + + radiusQuad = x(2)*x(2) + x(3)*x(3) + if (radiusQuad.GT.radiusQuad_L2) then + destiny = code_wand + radiusQuad_ = radiusQuad_L2 + goto 5111 + endif + + if (x(1).LT.xEnterMap_L2andFo) then + if (v(1).LT.0) then ! reflektiert + destiny = code_reflektiert + goto 555 + else ! darf nicht sein! + write(*,*) + write(*,*)' L2: x(1).LT.xEnterMap .AND. v(1).GE.0. -> STOP' + write(*,*) + call exit + endif + elseif (x(1).GT.xEndLense_L2) then ! Verlasse L2 + Gebiet = upToEnTD + endif + + else ! ----> zw. Linse 2 und TD-Folie: + +c if (x(1).EQ.xLeaveMap_L2andFo) then ! Verlasse Mappe + if (reachedEndOfMap) then ! Verlasse Mappe + +c WRITE(*,*) 'HALLO: x(1).EQ.xLeaveMap_L2andFo !!' + ! ==================================================== + ! muss in Integrationsroutine richtig abgestimmt sein! + ! ==================================================== + + if (Graphics_) call Save_Graphics_Koord + if (Debug_) call Output_Debug + if (TriggerInBeam) then + ! rechne in Triggerkoordinaten um (Folie == x=0) + x(1) = 0 + goto 112 + else + goto bis_L3_Mappe + endif + endif + + if (radiusQuad.GT.radiusQuad_Rohr) then + destiny = code_wand + radiusQuad_ = radiusQuad_Rohr + goto 5111 + endif + + endif + + if (Steps.GE.MaxStep) then ! Teilchen verloren + destiny = code_lost + goto 555 + endif + + if (GRAPHICS_.or.Debug_) then + zaehler = zaehler + 1 + if (zaehler.EQ.iMonitor) then + if (Graphics_) call Save_Graphics_Koord + if (Debug_) call Output_Debug + zaehler = 0 + endif + endif + + goto 5011 ! naechster Integrationsschritt in gleicher Feldmappe + + endif ! if (lense2) then.... ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +c::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: + + if (.NOT.TriggerInBeam) goto bis_L3_Mappe + + +c zwischen Koordinatenwechselebene und Triggerfolie: (feldfrei) +12 Gebiet = upToEnTD + +c Die Anweisungen dieses Abschnitts verlaufen in weiten Teilen parallel zu denen +c von Linse 1. -> Fuer Kommentare zu diesen Bereichen siehe dort! + + if (Beschl_Faktor_FO.EQ.0. .OR. gridInFrontOfFoil) then + ! => keine Integration in der Folienmappe + Steps = Steps + 1 + help1 = v(2)/v(1) ! Steigung der Bahn in der x-y-Ebene +d dtmin_FO = 0. +d dtmax_FO = 0. + +c - berechne Schnittpunkt der Trajektorie mit Ebene der Triggerfolie bzw. bei +c 'GridInFrontOfFoil' mit Ebene des Gitters vor der Triggerfolie: +c Folienebene : y'= (x_intersectTD - x') / Tan_alfaTD +c Trajektorie : y'= y + v(2)/v(1)*(x'-x) = y + help1*(x'-x) +c => Schnittpunkt: x'= (x_intersectTD/Tan_alfaTD - y + help1*x)/(help1 + 1/Tan_alfaTD) +c = (x_intersectTD + Tan_alfaTD*(help1*x-y))/(1+help1*Tan_alfaTD) +c (erste Gleichung hat Probleme bei Tan_alfaTD = 0!) + + if (atand(help1).EQ.alfaTD-90) then ! ueberpruefen<<<<<<<<<<<<<<<<<< + ! Teilchen fliegt parallel zur Folie => fliegt an TD vorbei + destiny = code_vorbei + goto 555 + else ! help2 == neues x(1) + if (Tan_alfaTD.EQ.0) then + dt = (x_intersectTD-x(1)) / v(1) + x(1) = x_intersectTD + else + help2 = (x_intersectTD+Tan_alfaTD* + + (help1*xChangeKoord-x(2)))/(1+help1*Tan_alfaTD) + if (help2.LT.xChangeKoord) then + ! Teilchen fliegt 'steiler' als Folienebene + ! -> kein Schnittpunkt mit dt.gt.0 => fliegt an TD vorbei + destiny = code_vorbei + goto 555 + else ! Bahntangente kreuzt Folienebene + dt = (help2-x(1)) / v(1) + x(1) = help2 + endif + endif + endif + +c -> Teilchenort in Folienebene bzw. bei 'GridInFrontOfFoil' in Ebene des +c geerdeten Gitters vor der Triggerfolie: + + x(2) = x(2) + v(2)*dt + x(3) = x(3) + v(3)*dt + t = t + dt + + radiusQuad = x(2)*x(2) + x(3)*x(3) + if (radiusQuad.GT.radiusQuad_Rohr) then + help1 = v(2)*v(2)+v(3)*v(3) + help2 = x(2)*v(2)+x(3)*v(3) + dt = (SQRT(help2*help2-help1*(radiusQuad-radiusQuad_Rohr))-help2) + + /help1 + t = t + dt + x(1) = x(1) + dt*v(1) ! den Ort berechnen, an dem + x(2) = x(2) + dt*v(2) ! das Teilchen auf das Rohr + x(3) = x(3) + dt*v(3) ! aufschlaegt + if (useDecay_) call Decay_Test(*555) ! vor Aufschlag zerfallen? + destiny = code_wand + goto 555 + endif + + if (useDecay_) call Decay_Test(*555) + if (Graphics_) call Save_Graphics_Koord + if (Debug_) call Output_Debug + + +c Koordinatentransformation vom Kammersystem in das System des Triggerdetektors: +c (Ursprung in Folienmitte, x-Achse senkrecht zur Folie, y-Achse parallel zur +c Folie. Wenn der TD nicht verdreht ist, verlaufen die Achsen parallel zu +c denen des Kammersystems): + + if (alfaTD.NE.0) then + x(2) = (xTD-x(1))*Sin_alfaTD + x(2)*Cos_alfaTD + help1= v(1) ! zur Zwischenspeicherung + v(1) = help1*Cos_alfaTD + v(2)*Sin_alfaTD + v(2) = -help1*Sin_alfaTD + v(2)*Cos_alfaTD + endif + + if (.NOT.GridInFrontOfFoil) then + x(1) = 0 + else + ! -> berechne Schnittpunkt der Trajektorie mit Folienebene unter + ! der Annahme einer idealen Potentialrampe: + + if (aFoil.NE.0.) then + help1 = v(1)*v(1) + 2.*aFoil*(d_Grid_Folie) + if (help1.LT.0) then ! Reflektion noch vor Folie + dt = -2*v(1)/aFoil + t = t + dt + x(1) = - d_Grid_Folie + x(2) = x(2) + v(2)*dt + x(3) = x(3) + v(3)*dt + v(1) = -v(1) + destiny = code_reflektiert + goto 555 + endif + dt = (sqrt(help1) - v(1))/aFoil + ! (ergibt sich aus x=v*t+1/2*a*t**2 mit richtiger V.Z.-Wahl ('+')) + v(1) = v(1) + aFoil*dt + else + dt = d_Grid_Folie / v(1) + endif + + t = t + dt + x(1) = 0 ! im Triggersystem + x(2) = x(2) + v(2)*dt + x(3) = x(3) + v(3)*dt + + endif ! if (GridInFrontOfFoil) ... + + goto 112 + +c............................................................................... + else ! (if Beschl_Faktor_FO.EQ.0 .OR. GridInFrontOfFoil) then ... + + ! => Integration in der Folienmappe: + ! alte Version: ab xChangeKoord wurde integriert, wobei das EFeld im + ! Bereich vor der Mappe als 0 zurueckgegeben wurde. + ! Ab Version 1.2.9: Bis Schnittpunkt der Trajektorie mit Beginn der + ! Potentialmappe wird extrapoliert, dann erst integriert: + + +c Einschub ab Version 1.2.9: *************************************************** + + Steps = Steps + 1 + help1 = v(2)/v(1) ! Steigung der Bahn in der x-y-Ebene + +c - berechne Schnittpunkt der Trajektorie mit Beginn der Potentialmappe: +c Mappenebene : y'= (x_intersectTDMap - x') / Tan_alfaTD +c Trajektorie : y'= y + v(2)/v(1)*(x'-x) = y + help1*(x'-x) +c => Schnittpunkt: x'= (x_intersectTDMap/Tan_alfaTD - y + help1*x)/(help1 + 1/Tan_alfaTD) +c = (x_intersectTDMap + Tan_alfaTD*(help1*x-y))/(1+help1*Tan_alfaTD) +c (erste Gleichung hat Probleme bei Tan_alfaTD = 0!) + + if (atand(help1).EQ.alfaTD-90) then ! ueberpruefen<<<<<<<<<<<<<<<<<< + ! Teilchen fliegt parallel zur Mappe => fliegt an TD vorbei + destiny = code_vorbei + goto 555 + + ! stimmt so u.U. noch nicht ganz. Kommt aber eigentlich eh nie vor! + ! (stimmt bis jetzt wohl nur fuer positive alpha(TD) + + else + if (Tan_alfaTD.EQ.0) then + dt = (x_intersectTDMap-x(1)) / v(1) + x(1) = x_intersectTDMap + else + ! help2 == neues x(1): + help2 = (x_intersectTDMap+Tan_alfaTD* + + (help1*xChangeKoord-x(2)))/(1+help1*Tan_alfaTD) + ! folgendes herauskommentiert, da es teilweise passierte, dass + ! der Mappenanfang ueber xChangekoord hinausreichte und die + ! Trajektorien dann faelschlicherweise abgebrochen worden sind. + +c if (help2.LT.xChangeKoord) then +c ! Teilchen fliegt 'steiler' als Mappenebene +c ! -> kein Schnittpunkt mit dt.gt.0 => fliegt an TD vorbei +c destiny = code_vorbei +c goto 555 +c else ! Bahntangente kreuzt Mappenebene + dt = (help2-x(1)) / v(1) + x(1) = help2 +c endif + endif + endif + +c -> Teilchenort in Mappenebene: + + x(2) = x(2) + v(2)*dt + x(3) = x(3) + v(3)*dt + t = t + dt + + radiusQuad = x(2)*x(2) + x(3)*x(3) + if (radiusQuad.GT.radiusQuad_Rohr) then + help1 = v(2)*v(2)+v(3)*v(3) + help2 = x(2)*v(2)+x(3)*v(3) + dt = (SQRT(help2*help2-help1*(radiusQuad-radiusQuad_Rohr))-help2) + + /help1 + t = t + dt + x(1) = x(1) + dt*v(1) ! den Ort berechnen, an dem + x(2) = x(2) + dt*v(2) ! das Teilchen auf das Rohr + x(3) = x(3) + dt*v(3) ! aufschlaegt + if (useDecay_) call Decay_Test(*555) ! vor Aufschlag zerfallen? + destiny = code_wand + goto 555 + endif + + if (useDecay_) call Decay_Test(*555) + if (Graphics_) call Save_Graphics_Koord + if (Debug_) call Output_Debug + +c Ende des Einschubes ab Version 1.2.9: **************************************** +c => Jetzt erfolgt Start in die Folienmappe: + + reachedEndOfMap = .false. ! Folienebene wurde noch nicht erreicht + dt = .5/v(1) ! 1. Testschritt 0.5 mm in x-Richtung + zaehler = 0 + + +c Rechne in Folienmappen-Koordinaten um: + +5012 if (alfaTD.NE.0) then + help1= x(1)-xTD + x(1) = help1*Cos_alfaTD + x(2)*Sin_alfaTD + length1 + x(2) = -help1*Sin_alfaTD + x(2)*Cos_alfaTD + help1= v(1) + v(1) = help1*Cos_alfaTD + v(2)*Sin_alfaTd + v(2) = -help1*Sin_alfaTD + v(2)*Cos_alfaTd + else + x(1) = x(1) - length2 + endif + + +c mache Integrationssschritt: + + call INTEGRATIONSSTEP_RUNGE_KUTTA_FO(dt) + +d if (NTP_steps) then +d if (dt.LT.dtmin_FO) then +d dtmin_FO = dt +d x_dtmin_FO(1) = x(1) +d x_dtmin_FO(2) = x(2) +d x_dtmin_FO(3) = x(3) +d endif +d if (dt.GT.dtmax_FO) then +d dtmax_FO = dt +d x_dtmax_FO(1) = x(1) +d x_dtmax_FO(2) = x(2) +d x_dtmax_FO(3) = x(3) +d endif +d endif + + +c Rechne in Kammerkoordinaten zurueck: + + if (alfaTD.NE.0) then + help1= x(1)-length1 + x(1) = help1*Cos_alfaTD - x(2)*Sin_alfaTD + xTD + x(2) = help1*Sin_alfaTD + x(2)*Cos_alfaTD + help1= v(1) + v(1) = help1*Cos_alfaTD - v(2)*Sin_alfaTD + v(2) = help1*Sin_alfaTD + v(2)*Cos_alfaTD + else + x(1) = x(1) + length2 + endif + + Steps = Steps + 1 ! neuer Ort, Zeit und Geschwindigkeit sind festgelegt + +c do some tests: + + if (destiny.EQ.code_dtSmall) then ! n_dtSmall>maxBelowDtSmall + goto 555 + endif + radiusQuad = x(2)*x(2) + x(3)*x(3) + if (radiusQuad.GT.radiusQuad_Rohr) then ! aufgeschlagen + help1 = v(2)*v(2)+v(3)*v(3) ! -> den Ort berechnen, an + help2 = x(2)*v(2)+x(3)*v(3) + dt = (SQRT(help2*help2-help1*(radiusQuad-radiusQuad_Rohr))-help2) + + /help1 + t = t + dt + x(1) = x(1) + dt*v(1) + x(2) = x(2) + dt*v(2) + x(3) = x(3) + dt*v(3) + if (useDecay_) call Decay_Test(*555) ! vor Aufschlag zerfallen? + destiny = code_wand + goto 555 + elseif (useDecay_) then ! zerfallen? + call Decay_Test(*555) + endif + + if (destiny.EQ.code_reflektiert) then ! reflektiert + goto 555 +c elseif (destiny.NE.code_ok) then ! voruebergehend fuer Testzwecke +c write(*,*) +c write(*,*)'FO-1: ''destiny.NE.code_ok'' where it should -> STOP' +c write(*,*)' destiny = ',destiny,': ',code_text(destiny) +c write(*,*) +c STOP + elseif (Steps.GE.MaxStep) then ! Teilchen verloren + destiny = code_lost + goto 555 + endif + if (reachedEndOfMap) then ! Folienebene erreicht + ! rechne in Triggerkoordinaten um (Folie == x=0) + if (alfaTD.NE.0) then + x(2) = (xTD-x(1))*Sin_alfaTD + x(2)*Cos_alfaTD + help1= v(1) ! zur Zwischenspeicherung + v(1) = help1*Cos_alfaTD + v(2)*Sin_alfaTD + v(2) = -help1*Sin_alfaTD + v(2)*Cos_alfaTD + endif + x(1) = 0 + goto 112 + endif + +c verarbeite alle 'imonitor' Schritte die Koordinaten fuer GRAPHICS und DEBUG: + + if (GRAPHICS_.or.Debug_) then + zaehler = zaehler + 1 + if (zaehler.EQ.iMonitor) then + if (Graphics_) call Save_Graphics_Koord + if (Debug_) call Output_Debug + zaehler = 0 + endif + endif + + goto 5012 ! naechster Integrationsschritt in FELD VOR FOLIE + +c............................................................................... + endif ! (if Beschl_Faktor_FO.EQ.0) then ... + +c Einsprunglabel fuer Starts auf der Triggerfolie mit Startwinkelangaben +c im Kammersystem => transformiere Geschwindigkeitsvektor in das Triggersystem: + +111 if (alfaTD.NE.0) then + help1= v(1) ! zur Zwischenspeicherung + v(1) = help1*Cos_alfaTD + v(2)*Sin_alfaTD + v(2) = -help1*Sin_alfaTD + v(2)*Cos_alfaTD + endif + + +c - pruefe, ob das Projektil die Folie trifft: + +112 radiusQuad = x(2)*x(2) + x(3)*x(3) + If (radiusQuad.GT.radiusQuad_Folie) then + ! zurueckrechnen in das Kammersystem: + if (alfaTD.NE.0) then + help1= x(1) + x(1) = (help1-d_Folie_Achse)*Cos_alfaTD - + + x(2)*Sin_alfaTD + xTD + x(2) = (help1-d_Folie_Achse)*Sin_alfaTD + + + x(2)*Cos_alfaTD + help1= v(1) + v(1) = help1*Cos_alfaTD - v(2)*Sin_alfaTD + v(2) = help1*Sin_alfaTD + v(2)*Cos_alfaTD + else + x(1) = x(1) + xTD - d_Folie_Achse + endif + + destiny = code_vorbei + goto 555 + endif + + +c So verlangt, schreibe die aktuellen Trajektoriengroessen in das 'FoilFile': +c (hier ist sichergestellt, dass die Folie getroffen worden ist, Wechsel- +c wirkungen mit der Folie wurden aber noch nicht beruecksichtigt). +c HIER WERDEN 'X' UND 'V' IM TRIGGERSYSTEM ABGESPEICHERT! + + if (createFoilFile) then + ! falls die Flugzeit bis zur Triggerfolie verschmiert in das + ! NTupel aufgenommen werden soll: + if (smearS1Fo) then + call Gauss_Verteilung(sigmaS1Fo,help4) + S1FoOnly = t + help4 + endif + if (NTP_stop) then + Ekin=(v(1)*v(1)+v(2)*v(2)+v(3)*v(3))*Energie_Faktor + endif + call HFNT(NTP_write) + NTPalreadyWritten = .true. + endif + + +c - Zeitpunkt bei Erreichen der Folie sichern: + +113 S1Fo = t + if (createNTP.AND.Fo_triggered) fill_NTP = .true. + if (statNeeded(Nr_S1Fo)) call fill_statMem(S1Fo,Nr_S1Fo) + + + +c - Speichern der Koordinaten fuer die Statistiken: + + if (statNeeded(Nr_y_Fo)) then + call fill_statMem( x(2),Nr_y_Fo) + endif + if (statNeeded(Nr_z_Fo)) then + call fill_statMem( x(3),Nr_z_Fo) + endif + if (statNeeded(Nr_r_Fo)) then + radius = SQRT(x(2)*x(2) + x(3)*x(3)) + call fill_statMem(radius,Nr_r_Fo) + endif + + +c - speichere Auftreffort des Projektils fuer die Berechnung der Folienelektronen: + + if (generate_FE) then + x0FE(1) = x(1) + x0FE(2) = x(2) + x0FE(3) = x(3) + endif + + +c - falls nur bis zur Folie gerechnet werden soll, beende hier die Integration: + + if (upToTDFoilOnly) then + ! zurueckrechnen in das Kammersystem: + if (alfaTD.NE.0) then + help1= x(1) + x(1) = (help1-d_Folie_Achse)*Cos_alfaTD - + + x(2)*Sin_alfaTD + xTD + x(2) = (help1-d_Folie_Achse)*Sin_alfaTD + + + x(2)*Cos_alfaTD + help1= v(1) + v(1) = help1*Cos_alfaTD - v(2)*Sin_alfaTD + v(2) = help1*Sin_alfaTD + v(2)*Cos_alfaTD + else + x(1) = x(1) + xTD - d_Folie_Achse + endif + if (generate_FE) Gebiet = UpToExTD + goto 555 + endif + + +c - pruefe, ob das Projektil auf das Stuetzgitter aufschlaegt: + + if (testOnWireHit .AND. ran(seed).GT.TransTDFoil) then + destiny = code_Stuetzgitter + ! zurueckrechnen in das Kammersystem: + if (alfaTD.NE.0) then + help1= x(1) + x(1) = (help1-d_Folie_Achse)*Cos_alfaTD - + + x(2)*Sin_alfaTD + xTD + x(2) = (help1-d_Folie_Achse)*Sin_alfaTD + + + x(2)*Cos_alfaTD + help1= v(1) + v(1) = help1*Cos_alfaTD - v(2)*Sin_alfaTD + v(2) = help1*Sin_alfaTD + v(2)*Cos_alfaTD + else + x(1) = x(1) + xTD - d_Folie_Achse + endif + goto 555 + endif + + +c - Energieverlust und Winkelaufstreuung: + + if (log_E_Verlust .OR. log_Aufstreu) then + if (Debug_) then + Steps = Steps + 1 + call Output_Debug + endif + v_square = v(1)*v(1) + v(2)*v(2) + v(3)*v(3) + v_Betrag = SQRT(v_square) + Ekin = v_square * Energie_Faktor + endif + +c -- Energieverlust (vorerst nur Gaussverteilt): + + if (log_E_Verlust_defined.OR.log_Meyer_Gauss) then + ! Berechne Bahnwinkel relativ zur Folienebene fuer effektive Folien- + ! dicke: + alfa = atand(SQRT(v(2)*v(2)+v(3)*v(3))/v(1)) + endif + + if (log_E_Verlust) then + if (calculate_each) then + call CALC_ELOSS_ICRU(Ekin,q,m,Thickness,E_Verlust) + else + E_Verlust = mean_E_Verlust + endif + if (log_E_Verlust_defined) E_Verlust = E_Verlust / cosd(alfa) + if (debug_) write (lunLOG,*) ' mittlerer Energieverlust: ',E_Verlust + + ! Now we have the mean energy loss. We still have to modify it + ! according to the distribution of energy losses, i.e. + ! E_Verlust -> E_Verlust + delta_E_Verlust: + + delta_E_Verlust = 0. + if (log_E_Straggling_sigma) then +400 call Gauss_Verteilung(sigmaE,delta_E_Verlust) + if (debug_) write (lunLOG,*) ' sigmaE,delta_E_Verlust: ',sigmaE,delta_E_Verlust + if (E_Verlust+delta_E_Verlust.LT.0.) goto 400 + elseif (log_E_Straggling_equal) then +410 delta_E_Verlust = lowerE + (upperE - lowerE)*ran(seed) + if (E_Verlust+delta_E_Verlust.LT.0) goto 410 + elseif (log_E_Straggling_Lindhard) then + ! Streuung in Abhaengigkeit von mittlerer Energie in Folie: + call E_Straggling_Lindhard(Ekin-0.5*E_Verlust,m,sigmaE) +420 call Gauss_Verteilung(sigmaE,delta_E_Verlust) + if (debug_) write (lunLOG,*) ' sigmaE,delta_E_Verlust: ',sigmaE,delta_E_Verlust + if (E_Verlust+delta_E_Verlust.LT.0.) goto 420 + elseif (log_E_Straggling_Yang) then + ! Streuung in Abhaengigkeit von mittlerer Energie in Folie! + call E_Straggling_Yang(Ekin-0.5*E_Verlust,m,sigmaE) +430 call Gauss_Verteilung(sigmaE,delta_E_Verlust) + if (debug_) write (lunLOG,*) ' sigmaE,delta_E_Verlust: ',sigmaE,delta_E_Verlust + if (E_Verlust+delta_E_Verlust.LT.0.) goto 430 + endif + + if (E_Verlust+delta_E_Verlust.GE.Ekin) then + destiny = code_stopped_in_foil + goto 555 + endif + E_Verlust = E_Verlust + delta_E_Verlust + + ! help1 == Reduzierungsfaktor fuer Geschw.Betrag + help1 = sqrt( (Ekin - E_Verlust)/Ekin ) + v(1) = help1 * v(1) + v(2) = help1 * v(2) + v(3) = help1 * v(3) + v_Betrag = help1 * v_Betrag + if (debug_) write (lunLOG,*) ' Energieverlust: ',E_Verlust + endif + +c -- Winkelaufstreuung (vorerst nur Gaussverteilt): + + if (log_aufstreu) then + if (log_Meyer_F_Function) then + call throwMeyerAngle(thetaAufstreu) + else + if (log_Meyer_Gauss) then + if (log_E_Verlust) Ekin = Ekin - .5 * E_Verlust ! mittlere Energie + effRedThick = Meyer_Faktor1 * Thickness / cosd(alfa) + call g_Functions(g1,g2,effRedThick) + sigmaAufstreu = Meyer_Faktor2 / Ekin * (g1 + Meyer_Faktor3*g2) + if (debug_) then + write (lunLOG,*) ' effekt. red. Dicke: ',effRedThick + write (lunLOG,*) ' Sigma(Streuwinkel): ',sigmaAufstreu + endif + endif + + call Gauss_Verteilung_theta(sigmaAufstreu,thetaAufstreu) + endif + + st0 = sind(thetaAufstreu) + ct0 = cosd(thetaAufstreu) + phiAufstreu = 360.*ran(seed) + + v_xy = SQRT(v(1)*v(1) + v(2)*v(2)) ! v_xy stets groesser 0 + ! wegen v(1)>0 + + help1 = v(1) + help2 = v(2) + help3 = v_Betrag*st0*cosd(phiAufstreu)/v_xy + help4 = st0*sind(phiAufstreu) + + v(1) = ct0*help1 - help3*help2 - help4*help1*v(3)/v_xy + v(2) = ct0*help2 + help3*help1 - help4*help2*v(3)/v_xy + v(3) = ct0*v(3) + help4*v_xy + if (debug_) write (lunLOG,*) ' Aufstreuung: theta, phi =', + + thetaAufstreu,phiAufstreu + endif + + if (Debug_ .AND. (log_E_Verlust .OR. log_Aufstreu)) then + call Output_Debug + endif + + +c - Neutralisierung in der Folie? + + if (log_neutralize) then + if (neutral_fract(q_).EQ.-1.0) then + v_square = v(1)*v(1) + v(2)*v(2) + v(3)*v(3) + Ekin = v_square * Energie_Faktor + call chargeStateYields(Ekin,m,YieldPlus,YieldNeutral) + YieldNeutral = 100. * YieldNeutral + else + YieldNeutral = neutral_fract(q_) + endif + if (100.*ran(seed).LE.YieldNeutral) then + q = 0. + qInt = 0 + if (debug_) then + write (lunLOG,*) ' Teilchen wurde neutralisiert' + endif + nNeutral = nNeutral + 1 + else + nCharged = nCharged + 1 + endif + endif + +c::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +c im TriggerDetektor: (homogene Felder) + + +13 Gebiet = upToExTD + Steps = Steps + 1 + +c der Weg des Projektils innerhalb der Triggerkammer: + + call TRIGGER(m,q,t,x,v,Debug_,graphics_,n_return) + + +c Koordinatentransformation vom System des Triggerdetektors in das Kammersystem: +c ('d_Achse_Ground' == Abstand zwischen TD-Achse und 'Ground'-Gitter) + + if (alfaTD.NE.0) then + help1= x(1) + x(1) = (help1-d_Folie_Achse)*Cos_alfaTD - + + x(2)*Sin_alfaTD + xTD + x(2) = (help1-d_Folie_Achse)*Sin_alfaTD + + + x(2)*Cos_alfaTD + help1= v(1) + v(1) = help1*Cos_alfaTD - v(2)*Sin_alfaTD + v(2) = help1*Sin_alfaTD + v(2)*Cos_alfaTD + else + x(1) = x(1) + xTD - d_Folie_Achse + endif + + +c Was ist im TD mit dem Teilchen passiert? + + if (n_return.NE.0) then ! -->> das Projektil kam nicht bei GROUND an + if (n_return.GT.100 .AND. n_return.LE.120) then ! -> abgebrochen + statTD(1,n_return-100) = statTD(1,n_return-100)+1 ! Grund notieren + destiny = code_lostInTD ! im TD verloren + elseif (n_return.GT.0..AND.n_return.LE.75) then ! -> pfosten getroffen! + pfostenHit(n_return,1) = pfostenHit(n_return,1)+1 + destiny = code_wand + elseif (n_return.EQ.-5) then ! -> im TD auf Gitterstab + statTD(1,17) = statTD(1,17)+1 ! + destiny = code_grid + elseif (n_return.EQ.-9) then ! -> NICHT im MCP3 registriert + statTD(1,18) = statTD(1,18)+1 ! + destiny = code_notRegInM3 + elseif (n_return.EQ.-10) then ! -> im MCP3 registriert + statTD(1,16) = statTD(1,16)+1 ! '16' zaehlt MCP3-Treffer + destiny = code_wand + endif + goto 555 ! naechstes Projektil + else ! -->> das Projektil kam bei GROUND an + statTD(1,15) = statTD(1,15)+1 ! '15' zaehlt GROUND-Treffer + endif + + if (useDecay_) call Decay_Test(*555) + +c::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +c zwischen KOORDINATENWECHSEL BZW. GROUND-GITTER und Beginn der L3-Mappe: +c (feldfrei) + +14 Gebiet = upToL3Map + Steps = Steps + 1 + + dt = (xEnterMap_L3 - x(1)) / V(1) + t = t + dt + x(1) = xEnterMap_L3 + x(2) = x(2) + v(2)*dt + x(3) = x(3) + v(3)*dt + + radiusQuad = x(2)*x(2) + x(3)*x(3) + if (radiusQuad.GT.radiusQuad_Rohr) then + help1 = v(2)*v(2)+v(3)*v(3) + help2 = x(2)*v(2)+x(3)*v(3) + dt = (SQRT(help2*help2-help1*(radiusQuad-radiusQuad_Rohr))-help2) + + /help1 + t = t + dt + x(1) = x(1) + dt*v(1) ! den Ort berechnen, an dem + x(2) = x(2) + dt*v(2) ! das Teilchen auf das Rohr + x(3) = x(3) + dt*v(3) ! aufschlaegt + if (useDecay_) call Decay_Test(*555) ! vor Aufschlag zerfallen? + destiny = code_wand + goto 555 + endif + + if (useDecay_) call Decay_Test(*555) + if (Graphics_) call Save_Graphics_Koord + if (Debug_) call Output_Debug + + if (radiusQuad.GT.radiusQuad_L3) then ! Teilchen fliegt an L3 vorbei + destiny = code_vorbei + goto 555 + endif + +c::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +c innerhalb L3: (inhom. Felder -> Integrationen) + + +15 Gebiet = upToExL3 ! Gebietsnummer fuer L3 setzen + +c Die Anweisungen dieses Abschnitts verlaufen analog zu denen +c von Linse 1. -> Fuer Kommentare siehe dort! + + if (Beschl_Faktor_L3.EQ.0. .OR. q.EQ.0) then ! q=0 -> in Folie neutralisiert +d dtmax_L3 = 0. +d dtmin_L3 = 0. + dt = (xLeaveMap_L3 - x(1)) / v(1) ! Zeit bis zum Mappenende + x(1) = xLeaveMap_L3 + x(2) = x(2) + v(2)*dt + x(3) = x(3) + v(3)*dt + t = t + dt + radiusQuad = x(2)*x(2) + x(3)*x(3) + if (radiusQuad.GT.radiusQuad_L3) destiny = code_wand + goto 5115 + endif + + dt = .5/v(1) + zaehler = 0 + +5015 call INTEGRATIONSSTEP_RUNGE_KUTTA_L3(dt) +d if (NTP_steps) then +d if (dt.LT.dtmin_L3) then +d dtmin_L3 = dt +d x_dtmin_L3(1) = x(1) +d x_dtmin_L3(2) = x(2) +d x_dtmin_L3(3) = x(3) +d endif +d if (dt.GT.dtmax_L3) then +d dtmax_L3 = dt +d x_dtmax_L3(1) = x(1) +d x_dtmax_L3(2) = x(2) +d x_dtmax_L3(3) = x(3) +d endif +d endif + +5115 Steps = Steps + 1 + + if (destiny.EQ.code_dtSmall) then ! n_dtsmall>maxBelowDtSmall + goto 555 + elseif (destiny.EQ.code_wand) then ! aufgeschlagen + radiusQuad = x(2)*x(2) + x(3)*x(3) ! -> den Ort berechnen, an + help1 = v(2)*v(2)+v(3)*v(3) ! dem das Teilchen auf- + help2 = x(2)*v(2)+x(3)*v(3) ! schlaegt + dt = (SQRT(help2*help2-help1*(radiusQuad-radiusQuad_L3))-help2) + + /help1 + t = t + dt + x(1) = x(1) + dt*v(1) + x(2) = x(2) + dt*v(2) + x(3) = x(3) + dt*v(3) + if (useDecay_) call Decay_Test(*555) ! vor Aufschlag zerfallen? + goto 555 +c elseif (destiny.NE.code_ok) then ! voruebergehend fuer Testzwecke +c write(*,*) +c write(*,*)'L3-1: ''destiny.NE.code_ok'' where it should -> STOP' +c write(*,*)' destiny = ',destiny,': ',code_text(destiny) +c write(*,*) +c STOP + elseif (useDecay_) then ! zerfallen? + call Decay_Test(*555) + endif + + if (x(1).LT.xEnterMap_L3) then + if (v(1).LT.0) then ! reflektiert? + destiny = code_reflektiert + goto 555 + else ! darf nicht sein! + write(*,*) + write(*,*)' L3: x(1).LT.xEnterMap .AND. v(1).GE.0. -> STOP' + write(*,*) + STOP + endif + elseif (Steps.GE.MaxStep) then ! Teilchen verloren + destiny = code_lost + goto 555 + elseif (x(1).GE.xLeaveMap_L3) then ! Verlasse L3 + dt = (xLeaveMap_L3 - x(1))/v(1) ! rechne zurueck auf exaktes + t = t + dt ! Mappenende + x(1) = xLeaveMap_L3 + x(2) = x(2) + dt*v(2) + x(3) = x(3) + dt*v(3) + if (Graphics_) call Save_Graphics_Koord + if (Debug_) call Output_Debug + goto bis_MCP2_Mappe +c elseif (destiny.NE.code_ok) then ! voruebergehend fuer Testzwecke +c write(*,*) +c write(*,*)'L3-2: ''destiny.NE.code_ok'' where it should -> STOP' +c write(*,*)' destiny = ',destiny,': ',code_text(destiny) +c write(*,*) +c STOP + endif + + if (GRAPHICS_.or.Debug_) then + zaehler = zaehler + 1 + if (zaehler.EQ.iMonitor) then + if (Graphics_) call Save_Graphics_Koord + if (Debug_) call Output_Debug + zaehler = 0 + endif + endif + + goto 5015 ! naechster Integrationsschritt in gleicher Feldmappe + + +c::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +c zwischen L3-Mappe und MCP2-Mappe (feldfrei) + + +16 Gebiet = upToM2Map + + if (x(1).EQ.xEnterMap_M2) goto MCP2_Mappe + Steps = Steps + 1 + + dt = (xEnterMap_M2 - x(1)) / v(1) + + t = t + dt + x(1) = xEnterMap_M2 + x(2) = x(2) + v(2)*dt + x(3) = x(3) + v(3)*dt + + radiusQuad = x(2)*x(2) + x(3)*x(3) + if (radiusQuad.GT.radiusQuad_Rohr) then + help1 = v(2)*v(2)+v(3)*v(3) + help2 = x(2)*v(2)+x(3)*v(3) + dt = (SQRT(help2*help2-help1*(radiusQuad-radiusQuad_Rohr))-help2) + + /help1 + t = t + dt + x(1) = x(1) + dt*v(1) ! den Ort berechnen, an dem + x(2) = x(2) + dt*v(2) ! das Teilchen auf das Rohr + x(3) = x(3) + dt*v(3) ! aufschlaegt + if (useDecay_) call Decay_Test(*555) ! vor Aufschlag zerfallen? + destiny = code_wand + goto 555 + endif + if (useDecay_) call Decay_Test(*555) + if (Graphics_) call Save_Graphics_Koord + if (Debug_) call Output_Debug + +c::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +c vor MCP2: (inhom. Felder -> Integrationen) + +17 Gebiet = upToMCP2 + +c Beruecksichtige gegebenenfalls die Flugzeit in 'delta_L2', welches 'vor dem +c MCP2' eingeschoben werden kann. Addiert wird vorerst nur die Flugzeit in +c dieser zusaetzlichen Flugstrecke. Korrekterweise muessten alle nachfolgenden +c Positionen um 'delta_L2' verschoben werden. Dies zu implementieren ist +c allerdings momentan aus Zeitgruenden nicht moeglich. + + dt = Delta_L2 / v(1) + t = t + dt + + +c Die Anweisungen dieses Abschnitts verlaufen analog zu denen +c von Linse 1. -> Fuer Kommentare siehe dort! + + if (Beschl_Faktor_M2.EQ.0. .OR. q.EQ.0) then ! q=0 -> in Folie neutralisiert +d dtmax_M2 = 0. +d dtmin_M2 = 0. + if (xBlende.GT.x(1)) then + dt = (xBlende - x(1)) / v(1) ! Zeit bis zur Blende + x(1) = xBlende + x(2) = x(2) + v(2)*dt + x(3) = x(3) + v(3)*dt + t = t + dt + radiusQuad = x(2)*x(2) + x(3)*x(3) + if (radiusQuad.GT.radiusQuad_Rohr) then + destiny = code_wand + elseif (radiusQuad.GE.radiusQuad_Blende) then + if (useDecay_) call Decay_Test(*555) ! vor Aufschlag zerfallen? + destiny = code_hitBlende + goto 555 + endif + endif + dt = (xMCP2 - x(1)) / v(1) ! Zeit bis MCP2 + x(1) = xMCP2 + x(2) = x(2) + v(2)*dt + x(3) = x(3) + v(3)*dt + t = t + dt + radiusQuad = x(2)*x(2) + x(3)*x(3) + if (radiusQuad.GT.radiusQuad_Rohr) destiny = code_wand + reachedEndOfMap = .true. + goto 5117 + endif + + dt = .5/v(1) + + reachedEndOfMap = .false. + zaehler = 0 + if (xBlende.GT.0) check_Blende = .true. + +5017 call INTEGRATIONSSTEP_RUNGE_KUTTA_M2(dt) +d if (NTP_steps) then +d if (dt.LT.dtmin_M2) then +d dtmin_M2 = dt +d x_dtmin_M2(1) = x(1) +d x_dtmin_M2(2) = x(2) +d x_dtmin_M2(3) = x(3) +d endif +d if (dt.GT.dtmax_M2) then +d dtmax_M2 = dt +d x_dtmax_M2(1) = x(1) +d x_dtmax_M2(2) = x(2) +d x_dtmax_M2(3) = x(3) +d endif +d endif + +5117 Steps = Steps + 1 + + if (destiny.EQ.code_dtSmall) then ! n_dtsmall>maxBelowDtSmall + goto 555 + elseif (check_Blende.AND.x(1).GE.xBlende) then + dt = (xBlende - x(1)) / v(1) ! zurueck zur Blende ... + x(1) = xBlende + x(2) = x(2) + v(2)*dt + x(3) = x(3) + v(3)*dt + t = t + dt + radiusQuad = x(2)*x(2) + x(3)*x(3) + if (radiusQuad.GE.radiusQuad_Blende) then + destiny = code_hitBlende + goto 555 + endif + dt = -dt ! ... wieder zum aktuellen Ort + x(1) = xBlende + v(1)*dt + x(2) = x(2) + v(2)*dt + x(3) = x(3) + v(3)*dt + t = t + dt + check_Blende = .false. + elseif (destiny.EQ.code_wand) then + radiusQuad = x(2)*x(2) + x(3)*x(3) ! -> den Ort berechnen, an + help1 = v(2)*v(2)+v(3)*v(3) ! dem das Teilchen auf- + help2 = x(2)*v(2)+x(3)*v(3) ! schlaegt + dt = (SQRT(help2*help2-help1*(radiusQuad-radiusQuad_Rohr))-help2) + + /help1 + t = t + dt + x(1) = x(1) + dt*v(1) + x(2) = x(2) + dt*v(2) + x(3) = x(3) + dt*v(3) + if (useDecay_) call Decay_Test(*555) ! vor Aufschlag zerfallen? + goto 555 + elseif (useDecay_) then ! zerfallen? + call Decay_Test(*555) + endif + + if (destiny.EQ.code_reflektiert) then ! reflektiert + goto 555 + elseif (reachedEndOfMap) then ! MCP2-Ebene erreicht +c if (destiny.NE.code_ok) then ! voruebergehend fuer Testzwecke +c write(*,*) +c write(*,*)'M2 ''destiny.NE.code_ok'' where it should -> STOP' +c write(*,*)' destiny = ',destiny,': ',code_text(destiny) +c write(*,*) +c STOP +c endif + if (createNTP.AND.xM2_triggered) fill_NTP = .true. + S1xM2 = t + if (statNeeded(Nr_S1xM2))call fill_statMem(S1xM2,Nr_S1xM2) + radiusQuad = x(2)*x(2) + x(3)*x(3) + radius = SQRT(radiusQuad) + if (statNeeded(Nr_y_xM2)) call fill_statMem( x(2),Nr_y_xM2) + if (statNeeded(Nr_z_xM2)) call fill_statMem( x(3),Nr_z_xM2) + if (statNeeded(Nr_r_xM2)) call fill_statMem(radius,Nr_r_xM2) + if (radiusQuad.LE.radiusQuad_MCP2active) then + S1M2 = t ! Zeiten werden sowohl fuer Statistiken + FoM2 = t - S1Fo ! als auch fuer NTupel benoetigt + if (statNeeded(Nr_S1M2)) call fill_statMem(S1M2,Nr_S1M2) + if (statNeeded(Nr_FoM2)) call fill_statMem(FoM2,Nr_FoM2) + if (createNTP.AND.M2_triggered) fill_NTP = .true. + if (statNeeded(Nr_y_M2)) call fill_statMem( x(2),Nr_y_M2) + if (statNeeded(Nr_z_M2)) call fill_statMem( x(3),Nr_z_M2) + if (statNeeded(Nr_r_M2)) call fill_statMem(radius,Nr_r_M2) + else ! am MCP2 vorbei + if (radiusQuad.LE.radiusQuad_MCP2) then + destiny = code_hitMCP2inactive + else + destiny = code_vorbei + if (Graphics_) then ! Damit diese Trajektorie 40mm ueber die + nKoord = nKoord + 1 ! MCP2-Ebene hinausgezeichnet wird + dt = 40./v(1) + t = t + dt + xKoord(nKoord) = x(1)+40. + yKoord(nKoord) = x(2)+v(2)*dt + zKoord(nKoord) = x(3)+v(3)*dt + goto 556 + endif + endif + endif + + goto 555 + elseif (Steps.GE.MaxStep) then ! Teilchen verloren + destiny = code_lost + goto 555 + endif + + if (GRAPHICS_.or.Debug_) then + zaehler = zaehler + 1 + if (zaehler.EQ.iMonitor) then + if (Graphics_) call Save_Graphics_Koord + if (Debug_) call Output_Debug + zaehler = 0 + endif + endif + + goto 5017 ! naechster Integrationsschritt im Feld vor MCP2 + + +czzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz +c HIER IST DER PROGRAMMKODE FUER DIE TRAJEKTORIENBERECHNUNG +c DER PROJEKTILE BEENDET! +czzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz + +555 if (Graphics_) call Save_Graphics_Koord +556 if (Debug_) call Output_Debug + + +c Gib Trajektorie in Graphikfenster aus: + + if (Graphics_) then + if (Gebiet.LE.upToChKoord) then ! Bahnberechnung wurde vor + call plot_horizontal ! Koordinatenwechsel abgebrochen + if (schnitt_p.eq.1) call schnitt + else + call plot_vertikal + if (schnitt_p.eq.2) call schnitt + endif + nKoord = 0 + endif + + +c Pruefe, ob Teilchen reflektiert wurde: + + if ((Gebiet.EQ.upToExL1 .OR. Gebiet.EQ.upToEnTD .OR. + + Gebiet.EQ.upToExL3 .OR. Gebiet.EQ.upToMCP2) .AND. + + v(1).LE.0.) then + destiny = code_reflektiert + endif + + +c Zaehle mit, bei wie vielen Teilchen trotz dtMaxStep abgebrochen werden: + + if (destiny.EQ.code_lostInTD) then + lostInTD_counter = lostInTD_counter + 1 + elseif (destiny.EQ.code_lost) then + lost_counter = lost_counter + 1 + endif + + +c bei DEBUG: Ausgabe des Teilchenschicksals und des aktuellen Gebiets: + + if (debug_) then + indx = index(code_text(destiny),':') + if (indx.EQ.0) then + write(lun(1),*) 'destiny : ',code_text(destiny) + else + write(lun(1),*) 'destiny : ',code_text(destiny)(1:indx-1) + endif + indx = index(Gebiet_text(Gebiet),':') + if (indx.EQ.0) then + write(lun(1),*) 'Gebiet : ',Gebiet_text(Gebiet) + else + write(lun(1),*) 'Gebiet : ',Gebiet_text(Gebiet)(1:indx-1) + endif + endif + + +czzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz +c HIER STARTEN DIE FOLIENELEKTRONEN +czzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz + + if (generate_FE) then ! ~~~ 1: if ~~~~~~~~~~~~ + if (Gebiet.GE.UpToExTD) then ! ~~~ 2: if ~~~~~~~~~~~~ + +c sekundaerelektronen + nFE = int(4.*ran(seed))+2 ! Anzahl wuerfeln: [2,5] + tFE_min = 0. ! tFE_min: kuerzeste FE-Flugzeit: + ! bekam noch keinen Wert zugewiesen + +c - die Laufzeiten der Folienelektronen: +c +c---------------------------------------- +c +c-TP-10/2000 reset of end positions of electrons +c + do k = 1, 3 + xFE_MCP(k) = 0. + yFE_MCP(k) = 0. + zFE_MCP(k) = 0. + enddo +c +c---------------------------------------- +c + + do 450, k = 1, nFE + + xFE(1) = x0FE(1) + xFE(2) = x0FE(2) + xFE(3) = x0FE(3) + + E0FE = 0.003*ran(seed) ! Start-Energie wuerfeln: [0,3) eV + v_Betrag = sqrt(2.*E0FE/511.015)*c ! Startgeschwindigkeit + call Lambert_Verteilung(1.,ct0,st0) ! Startwinkel wuerfeln + f0 = 360.*ran(seed) + cf0 = cosd(f0) + sf0 = sind(f0) + vFE(1) = v_Betrag * ct0 ! Geschwindigkeitskomponenten + vFE(2) = v_Betrag * st0*cf0 + vFE(3) = v_Betrag * st0*sf0 + + tFE = 0. + + nKoord = 0 + start_nr(2) = start_nr(2) + 1 ! (2): FE + call TRIGGER(511.015,-1.,tFE,xFE,vFE,DEBUG_FE.AND.Debug_, + + plot_FE,n_return) + if (plot_FE) call plot_vertikal + + if (n_return.NE.-10) then +C - das FE kam nicht am MCP3 an -> + if (n_return.GT.100 .AND. n_return.LE.120) then ! -> abgebrochen + statTD(2,n_return-100) = statTD(2,n_return-100)+1 ! Grund notieren + elseif (n_return.GT.0 .AND. n_return.LE.75) then ! -> pfosten getroffen! + pfostenHit(n_return,2) = pfostenHit(n_return,2)+1 + elseif (n_return.EQ.0) then ! -> GROUND getroffen + statTD(2,15) = statTD(2,15)+1 ! '15' zaehlt GROUND-Treffer + elseif (n_return.EQ.-5) then ! -> im TD auf Gitterstab + statTD(2,17) = statTD(2,17)+1 + elseif (n_return.EQ.-9) then ! -> NICHT im MCP3 registriert + statTD(2,18) = statTD(2,18)+1 + endif + tFE_(k) = -1 ! -1: FE kam nicht bei MCP3 an +c +c--------------------------------------- +c +c-TP-10/2000 +c + xFE_MCP(k) = -100. + yFE_MCP(k) = -100. + zFE_MCP(k) = -100. +c +c--------------------------------------- +c + goto 450 ! naechstes FE + + endif + +c - das FE kam beim MCP3 an -> + + statTD(2,16) = statTD(2,16)+1 ! '16' zaehlt MCP3-Treffer + tFE_(k)=int(1000.*tFE) ! tFE in ps. (braucht als Integer + ! weniger Speicherplatz) +c +c--------------------------------------- +c +c-TP-10/2000 +c + xFE_MCP(k) = xFE(1) + yFE_MCP(k) = xFE(2) + zFE_MCP(k) = xFE(3) +c +c--------------------------------------- +c + + + +c fuer die Statistik: die Flugzeiten saemtlicher das MCP3 erreichender FE abspeichern: + + if (statNeeded(Nr_t_FE)) call fill_statMem(tFE,Nr_t_FE) + + +c kuerzeste Elektronenflugzeit fuer das aktuelle Projektilteilchen notieren: + + if (tFE_min.EQ.0. .OR. tFE.LT.tFE_min) tFE_min = tFE + + +450 continue ! -> naechstes Folienelektron + + +c die Flugzeiten der nicht gestartenen Folienelektronen (nFE+1 bis 5) auf 0. setzen: + + do while (nFE.LT.5) + nFE = nFE + 1 + tFE_(nFE) = 0. + enddo + + +c Jetzt sind die Folienelektronen durchgelaufen. + +c Fuelle Statistiken fuer die 'gemessenen' Teilchenflugzeiten (mit Beruecksichti- +c gung der Flugzeiten der Folienelektronen). M3M2 aber nur, wenn MCP2 auch +c getroffen wurde: + + if (tFE_min.NE.0.) then + S1M3 = S1Fo + tFE_min ! +, da Stop verzoegert + if (statNeeded(Nr_S1M3)) then + call fill_statMem(S1M3,Nr_S1M3) + endif + if (destiny.EQ.code_ok) then + M3M2 = FoM2 - tFE_min ! -, da Start verzoegert + if (statNeeded(Nr_M3M2)) call fill_statMem(M3M2,Nr_M3M2) + endif + endif + + else ! ~~~ 2: else ~~~~~~~~~~ + + do k= 1, 5 + tFE_(k) = 0. ! nicht gestartet + enddo + + endif ! ~~~ 2: endif ~~~~~~~~~ + endif ! ~~~ 1: endif~~~~~~~~~~ + +czzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz +c ES FOLGEN DATENAUSGABE, SPRUNG IN NEUE SCHLEIFE UND PROGRAMMENDE +czzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz + +c trage das NTupel ein: + +c So verlangt, schreibe die aktuellen Trajektoriengroessen in das NTupel: +c (falls bei 'createFoilFile' 'NTPalreadyWritten' nicht gesetzt ist schied +c dieses Teilchen schon vor der Triggerfolie aus. Ist es dagegen gesetzt wurden +c die Trajektoriendaten mit dem Erreichen der Triggerfolie abgespeichert um sie +c in den im Triggersystem gueltigen Werten zu haben): + + if (fill_NTP .OR. createFoilFile) then + if (NTPalreadyWritten) then + NTPalreadyWritten = .false. + else + if (NTP_stop) then + Ekin=(v(1)*v(1)+v(2)*v(2)+v(3)*v(3))*Energie_Faktor + endif + if (smearS1Fo .AND. .NOT.use_MUTRACK) then + if (s1fo.NE.0) then + call Gauss_Verteilung(sigmaS1Fo,help4) + S1FoOnly = S1Fo + help4 + else + S1FoOnly = 0. + endif + endif + FoM2Only = FoM2 + call HFNT(NTP_write) + endif + endif + + +c Nimm das Schicksal des Teilchens in den zugehoerigen Statistikspeicher auf: + + if (destiny.GT.0) destiny = destiny + (Gebiet-1)*highest_code_Nr + statDestiny(destiny) = statDestiny(destiny) + 1 + + if (destiny.EQ.code_ok) okStepsCounter = okStepsCounter + steps + + +c -> das naechste Projektil kann kommen +100 continue + + +c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +c Jetzt sind alle Projektile dieser Schleife abgearbeitet! + +c Mittlere Anzahl an Integrationsschritten fuer Trajektorien mit destiny = +c 'code_ok' ausgeben: + + if (statDestiny(code_ok).NE.0) then + write(*,'(6x,A,F7.2)')'Mittlere Anzahl an Integrationsschritten bis zum Ziel: ', + + real(okStepsCounter)/real(statDestiny(code_ok)) + endif + +c das Summary ausgeben und die Werte in die Tabellen schreiben: +c Falls nur ein Teilchenstart pro Schleife erfolgt, werte die Statistiken +c erst nach der letzten Schleife aus: + + NotLastLoop = .NOT.(SchleifenNr.EQ.SchleifenZahl) + flag_ok = .NOT.(OneStartPerLoop.AND.NotLastLoop) + + if (flag_ok) then + call eval_statistics + if (n_outWhere.GT.0 .OR. smallLogFile) call Summary + if (createTabellen .or. createPhysTab) call output_tabellen + endif + + +c das PostScript-file erstellen: + +c Wird pro Schleife nur ein Teilchen gestartet ('OneStartPerLoop'; d.h. kein +c oder genau ein 'Zufallsstart'), so trage alle Trajektorien in die gleiche +c Graphik ein. Das Postskript braucht dann also erst bei der letzten Schleife +c erstellt zu werden: + + if (GRAPHICS .AND. flag_ok) then + call schnitt_plot ! Ausgabe der Graphik der Schnittebene + + if (n_postSkript.LE.0) then + goto 620 + elseif (n_postSkript.EQ.1) then + if (n_outWhere.LT.2) then + write(*,*)'.....................................'// + + '.........................................' + write(*,'(2X,A18,I3,A,I3)')'Schleife ', + + SchleifenNr,' von ',SchleifenZahl + endif + write(*,1003)'(P) Ps-file erstellen', + + '(R) Restliche ps-files erstellen' + write(*,1003)'(N) ps-file Nicht erstellen', + + '(K) Keine ps-files mehr erstellen' + write(*,1003)'(G) Graphikausgabe beenden', + + '(A) programm Abbrechen' +1003 format(T6,A,T40,A) + + helpChar = 'n' +600 write(*,1004)' [RETURN] = (N) -> ' +1004 format($,x,A) + read(*,'(A)') helpChar + + do i = 1,7 ! bis zu sechs blanks werden akzeptiert + ant = helpChar(i:i) + if (ant.NE.' ') goto 610 + enddo + ant = 'N' + +610 write(*,*)'==========================='// + + '=====================================================' + + call str$upcase(ant,ant) + if (ant.EQ.'N') then + goto 620 + elseif (ant.EQ.'R') then + n_postSkript = 2 + elseif (ant.EQ.'K') then + n_postSkript = 0 + goto 620 + elseif (ant.EQ.'G') then + call HPLEND + GRAPHICS = .false. + goto 200 + elseif (ant.EQ.'A') then + call HPLEND + call TERMINATE_OUTPUT + STOP + elseif (ant.NE.'P') then + goto 600 + endif + endif + + write (helpChar(1:7),'(''_'',I6)') SchleifenNr + if (filename.NE.' ') then + call MAKE_PS(filename//helpChar) + else + call MAKE_PS('MUTRACK'//helpChar) + endif + + +620 continue + + CALL IZPICT ('CHAM_1','S') ! LOESCHEN DER BILDER IM PAWC-COMMON-BLOCK + CALL IZPICT ('CHAM_2','S') + CALL IZPICT ('HISTO','S') + CALL IZPICT ('TEXT','S') + + call iclrwk (1,flag_ok) ! CLEAREN DER WORKSTATIONS + call iclrwk (3,flag_ok) + call iclrwk (4,flag_ok) + call iclrwk (5,flag_ok) + + CALL HRESET (50,' ') ! RESETTEN DES HISTOGRAMMS + + endif + +c -> das gleiche von vorne mit neuen Settings (d.h. neue Schleife) + +200 continue +c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + +c Jetzt sind alle Schleifen abgearbeitet -> fertigmachen zum Programmende: + +c - HIGZ-Graphikbibliothek schliessen: + + if (Graphics) call HPLEND + +c - HBOOK-Datei schliessen: + + if (.NOT.fromScratch) then + if (use_ACCEL) then + call HREND('ACCEL') + elseif (Use_MUTRACK) then + call HREND('MUread') + endif + close (lunRead) + endif + + call TERMINATE_OUTPUT + + + END + + +C=============================================================================== + + + OPTIONS /EXTEND_SOURCE + + SUBROUTINE Lambert_Verteilung(n_Lambert,cos_theta,sin_theta) +c ============================================================ + + IMPLICIT NONE + + real cos_theta,sin_theta + + real n_Lambert ! Ordnung der Lambert-Verteilung + real randomVar + integer seed + common /seed/ seed + + randomVar = ran(seed) + + if (n_Lambert.EQ.0.) then + cos_theta = (1.-randomVar) + sin_theta = sqrt(1.-cos_theta*cos_theta) + elseif (n_Lambert.EQ.1.) then + cos_theta = sqrt(1.-randomVar) + sin_theta = sqrt(randomVar) + else + cos_theta = (1.-randomVar)**(1./(n_Lambert + 1)) + sin_theta = sqrt(1.-cos_theta*cos_theta) + endif + + + END + + +c=============================================================================== + + + OPTIONS /EXTEND_SOURCE + + SUBROUTINE Gauss_Verteilung(sigma,wert) +c ======================================= + + IMPLICIT NONE + + real sigma ! Breite der Gaussverteilung + real wert ! gewuerfelte Returnvariable + real radius,phi + + integer seed + common /seed/ seed + + real zwoPi + parameter (zwoPi = 2.*3.1415927) + +c Da die eindimensionale Gaussfunktion nicht integrierbar ist, wird erst +c ein Punkt in der Ebene mit der entsprechenden zweidimensionalen Gaussfunktion +c gewuerfelt. Von diesem Punkt wird dann die x-Komponente zurueckgegeben, die +c eindimensional Gaussverteilt ist: + + radius = sigma*Sqrt(-2.*log(1.-ran(seed))) + phi = zwoPi * ran(seed) + wert = radius * cos(phi) + + + END + + +c=============================================================================== + + + OPTIONS /EXTEND_SOURCE + + SUBROUTINE Gauss_Verteilung_theta(sigma,theta) +c ============================================== + + IMPLICIT NONE + + real sigma,theta + real radius,phi,ratio + + integer i, seed + common /seed/ seed + +c Man beachte, dass hier Winkel gewuerfelt werden! D.h., dass die Variable +c 'radius' einen Radius in einer 2dimensionalen 'Winkel'-Ebene darstellt. +c Es wird angenommen, dass sigma in degree angegeben wird (daher die sind()- +c Funktion in der Zuweisung fuer 'ratio' anstelle der sin()-Fkt.). + + i = 1 + +1 radius = sigma*Sqrt(-2.*log(1.-ran(seed))) + phi = 360.*ran(seed) + theta = abs(radius * cosd(phi)) + ! nur theta zwischen 0 und 90 deg sollen eine Chance haben: + if (theta.GT.90) then + i = i + 1 + if (i.LE.10000) then + goto 1 + else + write(*,*) + write(*,*) 'SUBROUTINE Gauss_Verteilung_theta:' + write(*,*) ' Nach 10000 Versuchen noch keinen Winkel < 90 degree gewuerfelt.' + write(*,*) ' Vorgegebenes Sigma der Winkelverteilung: ',sigma + write(*,*) + STOP + endif + endif + +c Zitat aus TP's 'TESTSEED.FOR', aus welchem diese Routine abgeschrieben +c ist: +c +c Now we habe a GAUSSIAN, but we need for multiple scattering +c GAUSSIAN*SIN(x) =: g(x). This is not integrateable analytically, but +c we can choose the VON NEUMANN REJECTION to get what we want. +c As auxiliary function we choose the GAUSSIAN =: f(x), because it +c satisfies g(x) <= f(x) for all x. +c We must build the ratio g(x)/f(x) = sin(x) and compare it to +c another random number: + + ratio = sind(theta) + if (ran(seed).GT.ratio) goto 1 ! Verteilung zurechtbiegen + + + END + + +c=============================================================================== + + + OPTIONS /EXTEND_SOURCE + + SUBROUTINE G_Functions(G1,G2,tau) +c ================================= + +c Diese Routine gibt in Abhaengigkeit von der reduzierten Dicke 'tau' +c Funktionswerte fuer g1 und g2 zurueck. g1 und g2 sind dabei die von +c Meyer angegebenen tabellierten Funktionen fuer die Berechnung von Halbwerts- +c breiten von Streuwinkelverteilungen. (L.Meyer, phys.stat.sol. (b) 44, 253 +c (1971)) + + IMPLICIT NONE + + real tau,g1,g2 + real tau_(26),g1_(26),g2_(26) + real help + + integer i + + DATA tau_ /0.2, 0.4, 0.6, 0.8, 1.0, 1.2, 1.4, 1.6, 1.8, 2.0, + + 2.5, 3.0, 3.5, 4.0, 4.5, 5.0, 6.0, 7.0, 8.0, 9.0, + + 10.0, 12.0, 14.0, 16.0, 18.0, 20.0 / + + DATA g1_ /0.050,0.115,0.183,0.245,0.305,0.363,0.419,0.473,0.525,0.575, + + 0.689,0.799,0.905,1.010,1.100,1.190,1.370,1.540,1.700,1.850, + + 1.990,2.270,2.540,2.800,3.050,3.290 / + DATA g2_ / 0.00,1.25,0.91,0.79,0.73,0.69,0.65,0.63,0.61,0.59, + + 0.56,0.53,0.50,0.47,0.45,0.43,0.40,0.37,0.34,0.32, + + 0.30,0.26,0.22,0.18,0.15,0.13 / + + if (tau.LT.tau_(1)) then + write(*,*) + write(*,*)'SUBROUTINE G_Functions:' + write(*,*)' Fehler bei Berechnung der g-Funktionen fuer Winkelaufstreuung:' + write(*,*)' aktuelles tau ist kleiner als kleinster Tabellenwert:' + write(*,*)' tau = ',tau + write(*,*)' tau_(1) = ',tau_(1) + write(*,*) + STOP + endif + + i = 1 + +10 i = i + 1 + if (i.EQ.27) then + write(*,*) + write(*,*)'SUBROUTINE G_Functions:' + write(*,*)' Fehler bei Berechnung der g-Funktionen fuer Winkelaufstreuung:' + write(*,*)' aktuelles tau ist groesser als groesster Tabellenwert:' + write(*,*)' tau = ',tau + write(*,*)' tau_(26) = ',tau_(26) + write(*,*) + STOP + elseif (tau.gt.tau_(i)) then + goto 10 + endif + + +c lineare Interpolation zwischen Tabellenwerten: + + help = (tau-tau_(i-1))/(tau_(i)-tau_(i-1)) + + g1 = g1_(i-1) + help*(g1_(i)-g1_(i-1)) + g2 = g2_(i-1) + help*(g2_(i)-g2_(i-1)) + + + END + + +c=============================================================================== + + options /extend_source + + subroutine Get_F_Function_Meyer(tau,Ekin) +c ========================================= + + implicit none + + real tau + real Ekin + + real thetaSchlange,thetaSchlangeMax + real theta,thetaMax,thetaStep + real f1,f2,F + + +c------------------------------------ +c - Parameter: + + real Z1, Z2 ! die atomaren Nummern von Projektil und Target +c real a0 ! Bohrscher Radius in cm + real screeningPar ! Screeningparameter 'a' in cm fuer Teilchen der + ! Kernladungszahl Z1=1 in Kohlenstoff (Z2 = 6) + ! bei Streichung von Z1 (vgl. Referenz, S. 268) + + real r0Meyer ! r0(C) berechnet aus dem screeningParameter 'a' + ! und dem ebenfalls bei Meyer angegebenem + ! Verhaeltnis a/r0=0.26 (vgl. Referenz, S. 263 oben) + real eSquare ! elektrische Ladung zum Quadrat in keV*cm + + real Pi ! die Kreiszahl + +c parameter (a0 = 5.29E-9) + parameter (Z1 = 1, Z2 = 6, ScreeningPar = 2.5764E-9) + parameter (r0Meyer = 9.909E-9, eSquare = 1.44E-10) + parameter (Pi = 3.141592654) + + real Meyer_Faktor3 + real Meyer_Faktor4 + real zzz ! 'Hilfsparameter' + real Meyer_Faktor5 + + parameter (Meyer_faktor3 = (screeningPar/r0Meyer) * (screeningPar/r0Meyer)) + parameter (Meyer_faktor4 = screeningPar / (2.*Z1*Z2*eSquare) * Pi/180.) + parameter (zzz = screeningPar / (2.*Z1*Z2*eSquare)) + parameter (Meyer_faktor5 = zzz*zzz / (8*Pi*Pi)) + +c------------------------------------ + + integer nBin,nBinMax + parameter (nBinMax=201) + real value(0:nBinMax) /0.,nBinMax*0./ + real area(nBinMax) / nBinMax*0./ + real integ(0:nBinMax) /0.,nBinMax*0./ + common /MeyerTable/ value,area,integ,thetaStep,nBin + + integer i + real rhelp + + integer HB_memsize + parameter(HB_memsize=500000) + real memory(HB_memsize) + COMMON /PAWC/ memory + + +c nur noch fuer Testzwecke: + + real fValues(203) + real fValuesFolded(203) + + integer idh + parameter (idh = 50) + + INCLUDE 'mutrack$sourcedirectory:COM_DIRS.INC' + character filename*20 ! Name der Ausgabe-Dateien + COMMON /filename/ filename + +c------------------------------------------------------------------------------- + +c Festlegen des maximalen Theta-Wertes sowie der Schrittweite: + + if (tau.LT.0.2) then + write(*,*) 'Subroutine ''Get_F_Function_Meyer'':' + write(*,*) 'Effektive Dicke ist kleiner als 0.2 => kann ich nicht ... => STOP' + call exit + elseif (tau.LE.2.) then + ! => Tabelle A + thetaSchlangeMax = 4.0 + elseif (tau.LE.8.) then + ! => Tabelle B + thetaSchlangeMax = 7.0 + elseif (tau.LE.20.) then + ! => Tabelle C + thetaSchlangeMax = 20.0 + else + write(*,*) 'Subroutine ''Get_F_Function_Meyer'':' + write(*,*) 'Effektive Dicke ist groesser als 20 => kann ich nicht ... => STOP' + call exit + endif + + thetaMax = thetaSchlangeMax / Meyer_Faktor4 / Ekin + if (thetaMax.GT.50) then + thetaStep = .5 + elseif (thetaMax.GT.25) then + thetaStep = .25 + elseif (thetaMax.GT.12.5) then + thetaStep = .125 + else + thetaStep = .0625 + endif + + +c Tabelle der F-Werte erstellen: + + nBin = 0 + do theta = thetaStep, thetaMax, thetaStep + + ! Berechne aus theta das 'reduzierte' thetaSchlange (dabei gleich + ! noch von degree bei theta in Radiant bei thetaSchlange umrechnen): + + thetaSchlange = Meyer_faktor4 * Ekin * theta + + ! Auslesen der Tabellenwerte fuer die f-Funktionen: + + call F_Functions_Meyer(tau,thetaSchlange,f1,f2) + if (thetaSchlange.EQ.-1) then + ! wir sind jenseits von thetaSchlangeMax + goto 10 + endif + + ! Berechnen der Streuintensitaet: + F = Meyer_faktor5 * Ekin*Ekin * (f1 - Meyer_faktor3*f2) + + nBin = nBin + 1 + if (nBin.GT.nBinMax) then + write(*,*) 'nBin > nBinMax => EXIT' + call exit + endif + value(nBin) = sind(theta)*F + + fValues(nBin+1) = F ! fuer Testzwecke + fValuesFolded(nBin+1) = sind(theta)*F ! fuer Testzwecke + + enddo + + +c Berechnen der Flaecheninhalte der einzelnen Kanaele sowie der Integrale: + +10 do i = 1, nBin + area(i) = (value(i)+value(i-1))/2. * thetaStep + integ(i) = integ(i-1) + area(i) + enddo + + +c Normiere totale Flaeche auf 1: + + rHelp = integ(nBin) + do i = 1, nBin + value(i) = value(i) / rHelp + area(i) = area(i) / rHelp + integ(i) = integ(i) / rHelp + enddo + + +c vorerst noch: gib Tabelle in Datei und Histogrammfile aus: + + ! Berechne die Werte fuer theta=0: + + call F_Functions_Meyer(tau,0.,f1,f2) + F = Meyer_faktor5 * Ekin*Ekin * (f1 - Meyer_faktor3*f2) + fValues(1) = F + fValuesFolded(1) = 0. + + ! Gib die Werte in das Tabellenfile aus: + +c theta = 0. +c open (10,file=outDir//':'//filename//'.TAB',status='NEW') +c do i = 1, nBin+1 +c write(10,*) theta, fValues(i), fValuesFolded(i) +c theta = theta + thetaStep +c enddo +c close (10) + + + ! Buchen und Fuellen der Histogramme: + + call HBOOK1(idh,'F',nBin+1,-0.5*thetaStep,(real(nBin)+0.5)*thetaStep,0.) + call HPAK(idh,fValues) + call HRPUT(idh,outDir//':'//filename//'.RZ','N') + call HDELET(idh) + + call HBOOK1(idh+1,'F*sin([q])',nBin+1,-0.5*thetaStep,(real(nBin)+0.5)*thetaStep,0.) + call HPAK(idh+1,fValuesFolded) + call HRPUT(idh+1,outDir//':'//filename//'.RZ','U') + call HDELET(idh+1) + + + END + + +c=============================================================================== + + options /extend_source + + subroutine throwMeyerAngle (theta) +c ================================== + + implicit none + + real lowerbound,y1,y2,f,root,radiant,fraction + integer bin,nBin + integer nBinMax + parameter (nBinMax=201) + + real theta,thetaStep + real value(0:nBinMax) /0.,nBinMax*0./ + real area(nBinMax) / nBinMax*0./ + real integ(0:nBinMax) /0.,nBinMax*0./ + common /MeyerTable/ value,area,integ,thetaStep,nBin + + real rhelp + + real random + integer seed + common /seed/ seed + + +c bin: Nummer des Bins, innerhalb dessen das Integral den Wert von +c random erreicht oder ueberschreitet: + + random = ran(seed) + + bin = 1 + do while (random.GT.integ(bin)) + bin = bin + 1 + if (bin.GT.nBin) then + write(*,*) 'error 1' + call exit + endif + enddo + + fraction = (random-integ(bin-1)) / (integ(bin)-integ(bin-1)) + y1 = value(bin-1) + y2 = value(bin) + f = thetaStep / (y2-y1) + rHelp = y1*f + + radiant = rHelp*rHelp + fraction*thetaStep*(y1+y2)*f + root = SQRT(radiant) + lowerBound = real(bin-1)*thetaStep + if (f.GT.0) then + theta = lowerBound - rHelp + root + else + theta = lowerBound - rHelp - root + endif + + + END + + +c=============================================================================== + + options /extend_source + + subroutine F_Functions_Meyer(tau,thetaSchlange,f1,f2) +c ===================================================== + + implicit none + +c Diese Routine gibt in Abhaengigkeit von 'thetaSchlange' und 'tau' +c Funktionswerte fuer f1 und f2 zurueck. f1 und f2 entsprechen dabei den +c bei Meyer angegebenen Funktion gleichen Namens. Die in dieser Routine +c verwendeten Tabellen sind eben dieser Referenz entnommen: +c L.Meyer, phys.stat.sol. (b) 44, 253 (1971) + + real tau,thetaSchlange + real f1, f2, f1_(2), f2_(2) + + integer column_,column,row + + integer iColumn + real weightCol, weightRow + +c------------------------------------------------------------------------------- + +c die Tabellendaten der Referenz (Tabellen 2 und 3): + + integer nColumn + parameter (nColumn = 25) + real tau_(nColumn) / + + 0.2, 0.4, 0.6, 0.8, 1.0, 1.2, 1.4, 1.6, 1.8, 2.0, 2.5, 3.0, + + 3.5, 4.0, 4.5, 5.0, 6.0, 7.0, 8.0, 10., 12., 14., 16., 18., 20. / + + integer nRowA + parameter (nRowA = 25) + real thetaSchlangeA(nRowA) / + + .00, .05, .10, .15, .20, .25, .30, .35, .40, .45, .50, .60, + + .70, .80, .90, 1.0, 1.2, 1.4, 1.6, 1.8, 2.0, 2.5, 3.0, 3.5, 4.0 / + + integer nRowB + parameter (nRowB = 24) + real thetaSchlangeB(nRowB) / + + 0.0, 0.2, 0.4, 0.5, 0.6, 0.8, 1.0, 1.2, 1.4, 1.5, 1.6, 1.8, + + 2.0, 2.2, 2.4, 2.6, 2.8, 3.0, 3.5, 4.0, 4.5, 5.0, 6.0, 7.0 / + + integer nRowC + parameter (nRowC = 24) + real thetaSchlangeC(nRowC) / + + 0.0, 0.5, 1.0, 1.5, 2.0, 2.5, 3.0, 3.5, 4.0, 4.5, 5.0, 6.0, + + 7.0, 8.0, 9.0, 10., 11., 12., 13., 14., 15., 16., 18., 20. / + + + real f1_A(9,nRowA) + + /1.69E+2,4.55E+1,2.11E+1,1.25E+1,8.48E+0,6.21E+0,4.80E+0,3.86E+0,3.20E+0, + + 9.82E+1,3.72E+1,1.97E+1,1.20E+1,8.27E+0,6.11E+0,4.74E+0,3.83E+0,3.17E+0, + + 3.96E+1,2.58E+1,1.65E+1,1.09E+1,7.73E+0,5.82E+0,4.58E+0,3.72E+0,3.10E+0, + + 1.76E+1,1.58E+1,1.27E+1,9.26E+0,6.93E+0,5.38E+0,4.31E+0,3.55E+0,2.99E+0, + + 8.62E+0,1.01E+1,9.45E+0,7.58E+0,6.02E+0,4.85E+0,3.98E+0,3.33E+0,2.84E+0, + + 4.65E+0,6.55E+0,6.91E+0,6.06E+0,5.11E+0,4.28E+0,3.62E+0,3.08E+0,2.66E+0, + + 2.74E+0,4.45E+0,5.03E+0,4.78E+0,4.27E+0,3.72E+0,3.23E+0,2.82E+0,2.47E+0, + + 1.77E+0,3.02E+0,3.71E+0,3.76E+0,3.53E+0,3.20E+0,2.86E+0,2.55E+0,2.27E+0, + + 1.22E+0,2.19E+0,2.78E+0,2.96E+0,2.91E+0,2.73E+0,2.51E+0,2.28E+0,2.07E+0, + + 8.82E-1,1.59E+0,2.12E+0,2.35E+0,2.39E+0,2.32E+0,2.19E+0,2.03E+0,1.87E+0, + + 6.55E-1,1.20E+0,1.64E+0,1.88E+0,1.97E+0,1.96E+0,1.90E+0,1.79E+0,1.68E+0, + + 3.80E-1,7.15E-1,1.01E+0,1.22E+0,1.35E+0,1.40E+0,1.41E+0,1.39E+0,1.34E+0, + + 2.26E-1,4.45E-1,6.44E-1,8.08E-1,9.28E-1,1.01E+0,1.05E+0,1.06E+0,1.05E+0, + + 1.39E-1,2.80E-1,4.21E-1,5.45E-1,6.46E-1,7.22E-1,7.75E-1,8.07E-1,8.21E-1, + + 8.22E-2,1.76E-1,2.78E-1,3.71E-1,4.53E-1,5.21E-1,5.74E-1,6.12E-1,6.37E-1, + + 5.04E-2,1.11E-1,1.86E-1,2.57E-1,3.22E-1,3.79E-1,4.27E-1,4.65E-1,4.94E-1, + + 2.51E-2,5.60E-2,9.24E-2,1.31E-1,1.69E-1,2.02E-1,2.40E-1,2.71E-1,2.97E-1, + + 1.52E-2,3.20E-2,5.08E-2,7.23E-2,9.51E-2,1.18E-1,1.41E-1,1.63E-1,1.83E-1, + + 1.03E-2,2.05E-2,3.22E-2,4.55E-2,6.01E-2,7.53E-2,9.02E-2,1.05E-1,1.19E-1, + + 8.80E-3,1.48E-2,2.25E-2,3.13E-2,4.01E-2,5.03E-2,6.01E-2,7.01E-2,8.01E-2, + + 6.10E-3,1.15E-2,1.71E-2,2.28E-2,2.89E-2,3.52E-2,4.18E-2,4.86E-2,5.55E-2, + + 0.00 ,0.00 ,0.00 ,0.00 ,0.00 ,1.71E-2,1.98E-2,2.28E-2,2.58E-2, + + 0.00 ,0.00 ,0.00 ,0.00 ,0.00 ,8.90E-3,1.02E-2,1.16E-2,1.31E-2, + + 0.00 ,0.00 ,0.00 ,0.00 ,0.00 ,4.90E-3,5.70E-3,6.40E-3,7.20E-3, + + 0.00 ,0.00 ,0.00 ,0.00 ,0.00 ,2.90E-3,3.40E-3,3.90E-3,4.30E-3/ + + real f1_B(9,nRowB) + + /2.71E+0,1.92E+0,1.46E+0,1.16E+0,9.52E-1,8.03E-1,6.90E-1,5.32E-1,4.28E-1, + + 2.45E+0,1.79E+0,1.39E+0,1.12E+0,9.23E-1,7.82E-1,6.75E-1,5.23E-1,4.23E-1, + + 1.87E+0,1.48E+0,1.20E+0,9.96E-1,8.42E-1,7.24E-1,6.32E-1,4.98E-1,4.07E-1, + + 1.56E+0,1.30E+0,1.09E+0,9.19E-1,7.89E-1,6.86E-1,6.03E-1,4.80E-1,3.95E-1, + + 1.28E+0,1.11E+0,9.62E-1,8.33E-1,7.27E-1,6.40E-1,5.69E-1,4.59E-1,3.81E-1, + + 8.23E-1,7.90E-1,7.29E-1,6.64E-1,6.01E-1,5.44E-1,4.94E-1,4.12E-1,3.49E-1, + + 5.14E-1,5.36E-1,5.29E-1,5.07E-1,4.78E-1,4.47E-1,4.16E-1,3.60E-1,3.13E-1, + + 3.19E-1,3.58E-1,3.76E-1,3.78E-1,3.70E-1,3.57E-1,3.45E-1,3.08E-1,2.76E-1, + + 2.02E-1,2.40E-1,2.64E-1,2.77E-1,2.82E-1,2.80E-1,2.65E-1,2.59E-1,2.39E-1, + + 1.67E-1,1.96E-1,2.20E-1,2.36E-1,2.44E-1,2.47E-1,2.45E-1,2.35E-1,2.21E-1, + + 1.33E-1,1.61E-1,1.85E-1,2.02E-1,2.12E-1,2.18E-1,2.18E-1,2.14E-1,2.03E-1, + + 8.99E-2,1.12E-1,1.32E-1,1.48E-1,1.59E-1,1.67E-1,1.68E-1,1.75E-1,1.72E-1, + + 6.24E-2,7.94E-2,9.50E-2,1.09E-1,1.20E-1,1.29E-1,1.35E-1,1.42E-1,1.43E-1, + + 4.55E-2,5.74E-2,6.98E-2,8.11E-2,9.09E-2,9.92E-2,1.06E-1,1.15E-1,1.19E-1, + + 3.35E-2,4.22E-2,5.19E-2,6.11E-2,6.95E-2,7.69E-2,8.33E-2,9.28E-2,9.85E-2, + + 2.50E-2,3.16E-2,3.92E-2,4.66E-2,5.35E-2,6.00E-2,6.57E-2,7.49E-2,8.13E-2, + + 1.90E-2,2.40E-2,2.99E-2,3.58E-2,4.16E-2,4.70E-2,5.20E-2,6.05E-2,6.70E-2, + + 1.47E-2,1.86E-2,2.32E-2,2.79E-2,3.25E-2,3.70E-2,4.12E-2,4.89E-2,5.51E-2, + + 8.10E-3,1.04E-2,1.30E-2,1.57E-2,1.84E-2,2.12E-2,2.40E-2,2.93E-2,3.42E-2, + + 4.80E-3,6.20E-3,7.70E-3,9.30E-3,1.09E-2,1.26E-2,1.44E-2,1.79E-2,2.14E-2, + + 2.80E-3,3.80E-3,4.70E-3,5.70E-3,6.70E-3,7.50E-3,8.90E-3,1.13E-2,1.36E-2, + + 1.70E-3,2.30E-3,2.90E-3,3.60E-3,4.20E-3,4.90E-3,5.60E-3,7.20E-3,8.80E-3, + + 0.00 ,0.00 ,0.00 ,0.00 ,0.00 ,0.00 ,2.00E-3,2.80E-3,3.50E-3, + + 0.00 ,0.00 ,0.00 ,0.00 ,0.00 ,0.00 ,8.80E-4,1.20E-3,1.60E-3/ + + real f1_C(7,nRowC) + + /3.65E-1,2.62E-1,2.05E-1,1.67E-1,1.41E-1,1.21E-1,1.05E-1, + + 3.33E-1,2.50E-1,1.95E-1,1.61E-1,1.36E-1,1.18E-1,1.03E-1, + + 2.75E-1,2.18E-1,1.76E-1,1.48E-1,1.27E-1,1.11E-1,9.80E-2, + + 2.04E-1,1.75E-1,1.50E-1,1.29E-1,1.13E-1,1.01E-1,9.00E-2, + + 1.41E-1,1.31E-1,1.19E-1,1.08E-1,9.71E-2,8.88E-2,8.01E-2, + + 9.32E-2,9.42E-2,9.10E-2,8.75E-2,8.00E-2,7.44E-2,6.91E-2, + + 5.98E-2,6.52E-2,6.72E-2,6.62E-2,6.40E-2,6.12E-2,5.82E-2, + + 3.83E-2,4.45E-2,4.80E-2,4.96E-2,4.98E-2,4.90E-2,4.77E-2, + + 2.46E-2,3.01E-2,3.40E-2,3.65E-2,3.79E-2,3.84E-2,3.83E-2, + + 1.59E-2,2.03E-2,2.39E-2,2.66E-2,2.85E-2,2.97E-2,3.04E-2, + + 1.04E-2,1.37E-2,1.66E-2,1.92E-2,2.12E-2,2.27E-2,2.37E-2, + + 4.39E-3,6.26E-3,8.26E-3,9.96E-3,1.15E-2,1.29E-2,1.41E-2, + + 2.06E-3,3.02E-3,4.24E-3,5.28E-3,6.32E-3,7.32E-3,8.26E-3, + + 1.21E-3,1.69E-3,2.24E-3,2.85E-3,3.50E-3,4.16E-3,4.82E-3, + + 8.50E-4,1.10E-3,1.38E-3,1.65E-3,2.03E-3,2.45E-3,2.88E-3, + + 5.90E-4,7.40E-4,8.50E-4,9.90E-4,1.23E-3,1.49E-3,1.71E-3, + + 3.90E-4,4.60E-4,5.20E-4,6.30E-4,7.65E-4,9.65E-4,1.12E-3, + + 2.40E-4,2.70E-4,3.10E-4,3.98E-4,4.97E-4,6.03E-4,7.18E-4, + + 1.50E-4,1.70E-4,2.15E-4,2.70E-4,3.35E-4,4.35E-4,5.00E-4, + + 1.00E-4,1.20E-4,1.46E-4,1.90E-4,2.40E-4,2.88E-4,3.43E-4, + + 0.00 ,0.00 ,1.04E-4,1.41E-4,1.80E-4,2.10E-4,2.50E-4, + + 0.00 ,0.00 ,8.20E-5,1.06E-4,1.38E-4,1.58E-4,1.85E-4, + + 0.00 ,0.00 ,5.40E-5,7.00E-5,8.60E-5,1.03E-4,1.20E-4, + + 0.00 ,0.00 ,4.20E-5,5.40E-5,6.50E-5,7.70E-5,8.80E-5/ + + real f2_A(9,nRowA) + + / 3.52E+3, 3.27E+2, 9.08E+1, 3.85E+1, 2.00E+1, 1.18E+1, 7.55E+0, 5.16E+0, 3.71E+0, + + 2.58E+2, 1.63E+2, 7.30E+1, 3.42E+1, 1.85E+1, 1.11E+1, 7.18E+0, 4.96E+0, 3.59E+0, + + -1.12E+2, 4.84E+0, 3.56E+1, 2.34E+1, 1.45E+1, 9.33E+0, 6.37E+0, 4.51E+0, 3.32E+0, + + -5.60E+1,-1.12E+1, 9.87E+0, 1.24E+1, 9.59E+0, 7.01E+0, 5.16E+0, 3.83E+0, 2.91E+0, + + -2.13E+1,-1.22E+1,-2.23E+0, 3.88E+0, 5.15E+0, 4.65E+0, 3.87E+0, 3.12E+0, 2.45E+0, + + -8.25E+0,-9.58E+0,-5.59E+0,-1.40E+0, 1.76E+0, 2.71E+0, 2.71E+0, 2.35E+0, 1.95E+0, + + -3.22E+0,-6.12E+0,-5.28E+0,-2.87E+0,-1.92E-1, 1.32E+0, 1.69E+0, 1.74E+0, 1.48E+0, + + -1.11E+0,-3.40E+0,-4.12E+0,-3.08E+0,-6.30E-1, 3.60E-1, 9.20E-1, 1.03E+0, 1.04E+0, + + -2.27E-1,-2.00E+0,-2.93E+0,-2.69E+0,-1.48E+0,-3.14E-1, 2.69E-1, 5.28E-1, 6.09E-1, + + 1.54E-1,-1.09E+0,-2.10E+0,-2.15E+0,-1.47E+0,-6.77E-1,-1.80E-1, 1.08E-1, 2.70E-1, + + 3.28E-1,-6.30E-1,-1.50E+0,-1.68E+0,-1.34E+0,-8.43E-1,-4.60E-1,-1.85E-1,-4.67E-3, + + 3.32E-1,-2.06E-1,-7.32E-1,-9.90E-1,-9.42E-1,-8.20E-1,-6.06E-1,-4.51E-1,-3.01E-1, + + 2.72E-1,-3.34E-2,-3.49E-1,-5.65E-1,-6.03E-1,-5.79E-1,-5.05E-1,-4.31E-1,-3.45E-1, + + 2.02E-1, 2.80E-2,-1.54E-1,-3.00E-1,-3.59E-1,-3.76E-1,-4.60E-1,-3.40E-1,-3.08E-1, + + 1.38E-1, 4.84E-2,-5.56E-2,-1.44E-1,-2.04E-1,-2.39E-1,-2.54E-1,-2.49E-1,-2.48E-1, + + 9.47E-2, 4.86E-2,-1.08E-2,-6.44E-2,-1.02E-1,-1.34E-1,-1.62E-1,-1.79E-1,-1.87E-1, + + 5.33E-2, 3.71E-2, 1.85E-2, 1.63E-3,-1.69E-2,-3.69E-2,-5.66E-2,-7.78E-2,-9.33E-2, + + 3.38E-2, 2.40E-2, 1.62E-2, 9.90E-3, 3.76E-3,-4.93E-3,-1.66E-2,-3.05E-2,-4.22E-2, + + 2.12E-2, 1.56E-2, 1.05E-2, 7.80E-3, 7.92E-3, 6.30E-3, 3.20E-4,-8.50E-3,-1.66E-2, + + 1.40E-2, 9.20E-3, 5.30E-3, 4.70E-3, 6.31E-3, 8.40E-3, 5.30E-3, 8.80E-4,-3.30E-3, + + 9.20E-3, 4.70E-3, 1.70E-3, 2.60E-3, 4.49E-3, 6.60E-3, 6.00E-3, 4.70E-3, 2.80E-3, + + 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , + + 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , + + 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , + + 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00 / + + real f2_B(9,nRowB) + + / 2.75E+0, 1.94E+0, 9.13E-1, 6.06E-1, 4.26E-1, 3.14E-1, 2.40E-1, 1.51E-1, 1.03E-1, + + 1.94E+0, 1.16E+0, 7.56E-1, 5.26E-1, 3.81E-1, 2.87E-1, 2.23E-1, 1.43E-1, 9.78E-2, + + 5.85E-1, 5.04E-1, 4.10E-1, 3.30E-1, 2.69E-1, 2.17E-1, 1.78E-1, 1.22E-1, 8.71E-2, + + 7.83E-2, 2.00E-1, 2.35E-1, 2.19E-1, 1.97E-1, 1.73E-1, 1.48E-1, 1.08E-1, 7.93E-2, + + -1.82E-1, 1.56E-2, 1.04E-1, 1.36E-1, 1.38E-1, 1.31E-1, 1.19E-1, 9.46E-2, 7.19E-2, + + -2.71E-1,-1.66E-1,-7.29E-2,-4.74E-3, 3.60E-2, 5.50E-2, 6.28E-2, 5.98E-2, 5.09E-2, + + -1.87E-1,-1.58E-1,-1.09E-1,-5.80E-2,-2.03E-2, 2.48E-3, 1.99E-2, 3.36E-2, 3.27E-2, + + -1.01E-1,-1.05E-1,-8.95E-2,-6.63E-2,-3.93E-2,-2.38E-2,-9.22E-3, 8.47E-3, 1.52E-2, + + -5.19E-2,-6.47E-2,-6.51E-2,-5.62E-2,-4.51E-2,-3.49E-2,-2.45E-2,-8.19E-3, 2.05E-3, + + -3.68E-2,-4.89E-2,-5.36E-2,-5.06E-2,-4.27E-2,-3.65E-2,-2.80E-2,-1.33E-2,-3.47E-3, + + -2.33E-2,-3.69E-2,-4.41E-2,-4.38E-2,-3.97E-2,-3.50E-2,-2.88E-2,-1.60E-2,-6.68E-3, + + -8.76E-3,-2.07E-2,-2.90E-2,-3.17E-2,-3.09E-2,-2.92E-2,-2.63E-2,-1.79E-2,-1.03E-2, + + -1.20E-3,-1.11E-2,-1.90E-2,-2.20E-2,-2.32E-2,-2.24E-2,-2.10E-2,-1.66E-2,-1.11E-2, + + 1.72E-3,-4.82E-3,-1.02E-2,-1.42E-2,-1.65E-2,-1.66E-2,-1.60E-2,-1.39E-2,-1.09E-2, + + 2.68E-3,-1.18E-3,-5.19E-3,-8.30E-5,-1.01E-2,-1.14E-2,-1.16E-2,-1.16E-2,-9.99E-3, + + 2.81E-3, 8.21E-4,-1.96E-3,-3.99E-3,-5.89E-3,-7.13E-3,-8.15E-3,-9.05E-3,-8.60E-3, + + 2.61E-3, 1.35E-3,-2.99E-4,-1.79E-3,-3.12E-3,-4.44E-3,-5.61E-3,-7.01E-3,-7.27E-3, + + 2.06E-3, 1.45E-3, 4.64E-4,-5.97E-4,-1.71E-3,-2.79E-3,-3.84E-3,-5.29E-3,-5.90E-3, + + 1.07E-3, 9.39E-4, 8.22E-4, 3.58E-4,-1.15E-4,-6.60E-4,-1.18E-3,-2.15E-3,-2.88E-3, + + 4.97E-4, 5.46E-4, 6.15E-4, 5.56E-4, 3.14E-4, 9.80E-5,-1.30E-4,-5.98E-4,-1.07E-4, + + 1.85E-4, 3.11E-4, 4.25E-4, 4.08E-4, 3.63E-4, 3.04E-4, 2.24E-4, 2.80E-5,-2.10E-4, + + 4.80E-5, 1.48E-4, 2.44E-4, 2.80E-4, 3.01E-4, 3.11E-4, 3.13E-4, 2.40E-4, 1.10E-4, + + 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , 1.39E-4, 1.80E-4, 1.80E-4, + + 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , 4.38E-5, 7.30E-5, 8.40E-5/ + + real f2_C(7,nRowC) + + / 7.36E-2, 4.21E-2, 2.69E-2, 1.83E-2, 1.34E-2, 1.01E-2, 7.88E-3, + + 5.79E-2, 3.61E-2, 2.34E-2, 1.64E-2, 1.21E-2, 9.26E-3, 7.28E-3, + + 2.94E-2, 2.17E-2, 1.60E-2, 1.23E-2, 9.49E-3, 7.45E-3, 5.95E-3, + + 2.30E-3, 7.07E-3, 7.76E-3, 7.02E-3, 6.13E-3, 5.17E-3, 4.34E-3, + + -7.50E-3,-2.00E-3, 9.93E-4, 2.36E-3, 2.82E-3, 2.86E-3, 2.72E-3, + + -8.27E-3,-5.37E-3,-2.58E-3,-7.96E-4, 3.75E-4, 9.71E-4, 1.28E-3, + + -5.79E-3,-5.12E-3,-3.86E-3,-2.46E-3,-1.20E-3,-3.74E-4, 1.74E-4, + + -3.26E-3,-3.43E-3,-3.26E-3,-2.68E-3,-1.84E-3,-1.12E-3,-4.54E-4, + + -1.46E-3,-1.49E-3,-2.20E-3,-2.18E-3,-1.85E-3,-1.40E-3,-8.15E-4, + + -4.29E-4,-9.44E-4,-1.29E-3,-1.50E-3,-1.51E-3,-1.36E-3,-9.57E-4, + + -3.30E-5,-3.66E-4,-6.78E-4,-9.38E-4,-1.09E-3,-1.09E-3,-9.56E-4, + + 1.50E-4, 3.10E-5,-1.38E-4,-3.06E-4,-4.67E-4,-5.48E-4,-6.08E-4, + + 1.00E-4, 8.50E-5, 2.30E-5,-6.60E-5,-1.58E-4,-2.40E-4,-3.05E-4, + + 5.40E-5, 6.50E-5, 4.90E-5, 1.20E-5,-3.60E-5,-8.90E-5,-1.31E-4, + + 2.90E-5, 4.30E-5, 4.40E-5, 2.90E-5, 5.10E-6,-2.20E-5,-4.80E-5, + + 1.40E-5, 2.40E-5, 2.80E-5, 2.60E-5, 1.90E-5, 7.50E-6,-1.10E-5, + + 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , + + 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , + + 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , + + 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , + + 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , + + 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , + + 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , + + 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00 / + + +c=============================================================================== + +c Bestimme, welche Reihen der Tabellen fuer Interpolation benoetigt werden: + + if (tau.LT.tau_(1)) then + write(*,*) 'tau is less than the lowest tabulated value:' + write(*,*) 'tau = ',tau + write(*,*) 'minimum = ',tau_(1) + call exit + elseif (tau.GT.tau_(nColumn)) then + write(*,*) 'tau is greater than the highest tabulated value:' + write(*,*) 'tau = ',tau + write(*,*) 'maximum = ',tau_(nColumn) + call exit + endif + + column_ = 2 + do while (tau.GT.tau_(column_)) + column_ = column_ + 1 + enddo + ! Das Gewicht der Reihe zu groesserem Tau: + weightCol = (tau-tau_(column_-1)) / (tau_(column_)-tau_(column_-1)) + + +c Besorge fuer gegebenes 'thetaSchlange' die interpolierten f1- und f2 -Werte +c der beiden relevanten Reihen: +c iColumn = 1 => Reihe mit hoeherem Index +c iColumn = 2 => Reihe mit kleinerem Index + + + iColumn = 1 + + +5 continue + + if (column_.LE.9) then ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ! Werte aus 1. Tabelle: 0.2 <= tau <= 1.8 + + column = column_ + + if (thetaSchlange.LT.thetaSchlangeA(1)) then + write(*,*) 'thetaSchlange is less than the lowest tabulated value in table 1:' + write(*,*) 'thetaSchlange = ',thetaSchlange + write(*,*) 'minimum = ',thetaSchlangeA(1) + call exit + elseif (thetaSchlange.GT.thetaSchlangeA(nRowA)) then +c write(*,*) 'thetaSchlange is greater than the highest tabulated value in table 1:' +c write(*,*) 'thetaSchlange = ',thetaSchlange +c write(*,*) 'maximum = ',thetaSchlangeA(nRowA) +c call exit + thetaSchlange = -1. + RETURN + endif + + row = 2 + do while (thetaSchlange.GT.thetaSchlangeA(row)) + row = row + 1 + enddo + ! Gewicht des Tabellenwertes zu groesseren ThetaSchlange: + weightRow = (thetaSchlange-thetaSchlangeA(row-1)) / + + (thetaSchlangeA(row)-thetaSchlangeA(row-1)) + + f1_(iColumn) = (1.-weightRow) * f1_A(column,row-1) + + + weightRow * f1_A(column,row) + f2_(iColumn) = (1.-weightRow) * f2_A(column,row-1) + + + weightRow * f2_A(column,row) + + + elseif (column_.LE.18) then ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ! Werte aus 2. Tabelle: 2.0 <= tau <= 7.0 + + column = column_ - 9 + + if (thetaSchlange.LT.thetaSchlangeB(1)) then + write(*,*) 'thetaSchlange is less than the lowest tabulated value in table 1:' + write(*,*) 'thetaSchlange = ',thetaSchlange + write(*,*) 'minimum = ',thetaSchlangeB(1) + call exit + elseif (thetaSchlange.GT.thetaSchlangeB(nRowB)) then +c write(*,*) 'thetaSchlange is greater than the highest tabulated value in table 1:' +c write(*,*) 'thetaSchlange = ',thetaSchlange +c write(*,*) 'maximum = ',thetaSchlangeB(nRowB) +c call exit + thetaSchlange = -1. + RETURN + endif + + row = 2 + do while (thetaSchlange.GT.thetaSchlangeB(row)) + row = row + 1 + enddo + ! Gewicht des Tabellenwertes zu groesseren ThetaSchlange: + weightRow = (thetaSchlange-thetaSchlangeB(row-1)) / + + (thetaSchlangeB(row)-thetaSchlangeB(row-1)) + + f1_(iColumn) = (1.-weightRow) * f1_B(column,row-1) + + + weightRow * f1_B(column,row) + f2_(iColumn) = (1.-weightRow) * f2_B(column,row-1) + + + weightRow * f2_B(column,row) + + + else ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ! Werte aus 3. Tabelle: 8.0 <= tau <= 20. + + column = column_ - 18 + + if (thetaSchlange.LT.thetaSchlangeC(1)) then + write(*,*) 'thetaSchlange is less than the lowest tabulated value in table 1:' + write(*,*) 'thetaSchlange = ',thetaSchlange + write(*,*) 'minimum = ',thetaSchlangeC(1) + call exit + elseif (thetaSchlange.GT.thetaSchlangeC(nRowC)) then +c write(*,*) 'thetaSchlange is greater than the highest tabulated value in table 1:' +c write(*,*) 'thetaSchlange = ',thetaSchlange +c write(*,*) 'maximum = ',thetaSchlangeC(nRowC) +c call exit + thetaSchlange = -1. + RETURN + endif + + row = 2 + do while (thetaSchlange.GT.thetaSchlangeC(row)) + row = row + 1 + enddo + ! Gewicht des Tabellenwertes zu groesseren ThetaSchlange: + weightRow = (thetaSchlange-thetaSchlangeC(row-1)) / + + (thetaSchlangeC(row)-thetaSchlangeC(row-1)) + + f1_(iColumn) = (1.-weightRow) * f1_C(column,row-1) + + + weightRow * f1_C(column,row) + f2_(iColumn) = (1.-weightRow) * f2_C(column,row-1) + + + weightRow * f2_C(column,row) + + + endif ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + + if (iColumn.EQ.1) then + column_ = column_ - 1 + iColumn = 2 + goto 5 + endif + + f1 = weightCol*f1_(1) + (1.-weightCol)*f1_(2) + f2 = weightCol*f2_(1) + (1.-weightCol)*f2_(2) + + + END + + +c=============================================================================== + + OPTIONS /EXTEND_SOURCE + + SUBROUTINE reset_statistics +c =========================== + + IMPLICIT NONE + + integer Nr,n,k + + INCLUDE 'mutrack$sourcedirectory:COM_MUTRACK.INC' + +c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +c der allgemeine Statistikspeicher: (*) : braucht nicht resettet zu werden +c --------------------------------- +c +c statMem(1,Nr): 1. Wert: x(1) (*) +c statMem(2,Nr): Summe_ueber_i( x(i)-x(1) ) +c statMem(3,Nr): Summe_ueber_i( (x(i)-x(1))**2. ) +c statMem(4,Nr): kleinster Wert +c statMem(5,Nr): groesster Wert +c statMem(6,Nr): Mittelwert (*) +c statMem(7,Nr): Varianz (*) +c statMem(8,Nr): Anzahl der Werte +c statMem(9,Nr): Anzahl der Werte in Prozent von 'StartsProSchleife' (*) +c ('StartsProSchleife' == n_par(0)) +c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +c Ergebnis-Statistik-Speicher resetten: + + do Nr = 1, stat_Anzahl + statMem(2,Nr) = 0. ! Summe der Werte + statMem(3,Nr) = 0. ! Summe der Quadrate + statMem(4,Nr) = 1.e10 ! Minimalwert + statMem(5,Nr) = -1.e10 ! Maximalwert + statMem(8,Nr) = 0. ! Anzahl + enddo + +c die Scaler fuer den Returncode des TDs und die Pfostenhits sowie die +c StartZaehler resetten: + + do n = 1, 2 ! (1: Projektile, 2: FolienElektronen) + start_nr(n) = 0 + do k = 1, 18 + statTD(n,k) = 0. + enddo + do k = 1, 75 + pfostenHit(k,n) = 0. + enddo + enddo + + +c der Statistikspeicher fuer das Teilchen-Schicksal: + + do k = smallest_code_Nr, Gebiete_Anzahl*highest_code_Nr + statDestiny(k) = 0 + enddo + + + END + + +c=============================================================================== + + + OPTIONS /EXTEND_SOURCE + + SUBROUTINE fill_statMem(wert,Nr) +c ================================ + + IMPLICIT NONE + + INCLUDE 'mutrack$sourcedirectory:COM_MUTRACK.INC' + + real wert + integer Nr + +c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +c Wird die Varianz der Verteilung einer Groesse x gemaess der Formel +c +c Var(x) = SQRT( - **2 ) , < > -> Erwartungswert +c +c mit +c = 1/n * Summe_ueber_i( x(i) ) +c = 1/n * Summe_ueber_i( x(i)**2 ) +c +c berechnet, so tritt manchmal aufgrund der beschraenkten Genauigkeit der +c numerischen Speicher das Problem auf, dass bei grossen Werten x(i) und +c kleiner Streuung der Ausdruck unter der Wurzel negativ wird, was erstens +c unphysikalisch ist und zweitens zum Programmabbruch fuehrt. +c +c Dieses Problem liesse sich vermeiden, wenn man die Groessen x(i) relativ +c zu ihrem Erwartungswert angeben wuerde, der aber erst im nachhinein bekannt +c ist. +c +c Als Naeherungsloesung verwende ich daher fuer die Berechnung der Varianz die +c x(i) relativ zu x(1), also zum ersten Wert gemessen, der gerade bei kleiner +c Streuung, bei der das numerische Problem auftritt, nahe am Erwartungswert +c liegen sollte. +c +c statMem(1,Nr): 1. Wert: x(1) +c statMem(2,Nr): Summe_ueber_i( x(i)-x(1) ) +c statMem(3,Nr): Summe_ueber_i( (x(i)-x(1))**2. ) +c statMem(4,Nr): kleinster Wert +c statMem(5,Nr): groesster Wert +c statMem(6,Nr): Mittelwert (*) +c statMem(7,Nr): Varianz (*) +c statMem(8,Nr): Anzahl der Werte +c statMem(9,Nr): Anzahl der Werte in Prozent von 'StartsProSchleife' (*) +c ('StartsProSchleife' == n_par(0)) +c +c (*): wird im SUB 'eval_statistics' berechnet. +c +c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + +c Zaehle mit: + + statMem(8,Nr) = statMem(8,Nr) + 1. + + +c Speichere den ersten Wert: + + if (statMem(8,Nr).EQ.1) statMem(1,Nr) = wert + + +c Summiere die Abweichungen vom ersten Wert: + + statMem(2,Nr) = statMem(2,Nr) + (wert-statMem(1,Nr)) + + +c Summiere die Quadratischen Abweichungen vom ersten Wert: + + statMem(3,Nr) = statMem(3,Nr) + (wert-statMem(1,Nr))**2. + + +c Speichere den kleinsten Wert (wurde noch kein Wert aufgenommen, so ist +c statMem(4,Nr) = 1.e10): + + if (statMem(4,Nr).GT.wert) statMem(4,Nr) = wert + + +c Speichere den groessten Wert (wurde noch kein Wert aufgenommen, so ist +c statMem(5,Nr) = -1.e10): + + if (statMem(5,Nr).LT.wert) statMem(5,Nr) = wert + + + END + + +c=============================================================================== + + + OPTIONS /EXTEND_SOURCE + + SUBROUTINE eval_statistics +c ========================== + + IMPLICIT NONE + +c statMem(1,Nr): 1. Wert: x(1) +c statMem(2,Nr): Summe_ueber_i( x(i)-x(1) ) +c statMem(3,Nr): Summe_ueber_i( (x(i)-x(1))**2. ) +c statMem(4,Nr): kleinster Wert +c statMem(5,Nr): groesster Wert +c statMem(6,Nr): Mittelwert +c statMem(7,Nr): Varianz +c statMem(8,Nr): Anzahl der Werte +c statMem(9,Nr): Anzahl der Werte in Prozent von 'StartsProSchleife' +c ('StartsProSchleife' == n_par(0)) + + + INCLUDE 'mutrack$sourcedirectory:COM_MUTRACK.INC' + + real n ! Anzahl der Werte, == statMem(8,Nr) + real radiant + + integer Nr,l + + + do Nr = 1, Stat_Anzahl + if (statNeeded(Nr)) then + n = statMem(8,Nr) + if (n.ne.0.) then + + !c Berechne Mittelwert: + statMem(6,Nr) = statMem(2,Nr)/n + statMem(1,Nr) + + !c Berechne Varianz: + radiant = ( statMem(3,Nr) - (statMem(2,Nr)**2. )/n)/n + statMem(7,Nr) = sqrt(radiant) + + !c Berechne Anteil an allen gestarteten in Prozent + statMem(9,Nr) = 100.*n/real(n_par(0)) + + else + + do l = 1, 9 + statMem(l,Nr) = 0. + enddo + + endif + endif + enddo + + + END + + +c=============================================================================== + + + OPTIONS /EXTEND_SOURCE + + SUBROUTINE SAVE_GRAPHICS_KOORD +c ============================== + + IMPLICIT NONE + + INCLUDE 'mutrack$sourcedirectory:COM_MUTRACK.INC' + INCLUDE 'mutrack$sourcedirectory:COM_WINKEL.INC' + INCLUDE 'mutrack$sourcedirectory:COM_KAMMER.INC' + +c Variablen fuer die Graphikausgabe: + + real xKoord(1000) ! Koordinatenfelder fuer die + real yKoord(1000) ! Graphikausgabe + real zKoord(1000) ! +cMBc real tKoord(1000) ! + integer nKoord ! Anzahl der Koordinaten + +cMBc COMMON /GRAPHIX/ xKoord,yKoord,zKoord,nKoord,tKoord ! fuer Graphikaufruf + COMMON /GRAPHIX/ xKoord,yKoord,zKoord,nKoord ! fuer Graphikaufruf + +c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + nKoord = nKoord + 1 + + xKoord(nKoord) = x(1) + yKoord(nKoord) = x(2) + zKoord(nKoord) = x(3) +cMBc tKoord(nKoord) = t + + if (nKoord.EQ.1000) then + if (Gebiet.LE.upToChKoord) then ! Bahnberechnung wurde vor + call plot_horizontal ! Koordinatenwechsel abgebrochen + else + call plot_vertikal + endif + xKoord(1) = xKoord( 999) ! die letzten beiden uebernehmen, + yKoord(1) = yKoord( 999) ! damit gegebenenfalls der Richtungs- + zKoord(1) = zKoord( 999) ! pfeil gezeichnet werden kann. +cMBc tKoord(1) = tKoord( 999) + xKoord(2) = xKoord(1000) + yKoord(2) = yKoord(1000) + zKoord(2) = zKoord(1000) +cMBc tKoord(2) = tKoord(1000) + nKoord = 2 + endif + + + END + + +c=============================================================================== + + + OPTIONS /EXTEND_SOURCE + + SUBROUTINE Output_Debug +c ======================= + + IMPLICIT NONE + + INCLUDE 'mutrack$sourcedirectory:COM_MUTRACK.INC' + INCLUDE 'mutrack$sourcedirectory:COM_WINKEL.INC' + INCLUDE 'mutrack$sourcedirectory:COM_KAMMER.INC' + + real Ekin, temp1, temp2 + + Ekin = (v(1)*v(1) + v(2)*v(2) + v(3)*v(3)) * Energie_Faktor + + if (Gebiet.EQ.1 .AND. alfaTgt.NE.0) then + if (alfaTgtVertically) then + temp1 = xGrid1*Cos_alfaTgt - x(3)*Sin_alfaTgt + temp2 = xGrid1*Sin_alfaTgt + x(3)*Cos_alfaTgt + write(lun(1),1) steps,Gebiet,t,temp1,x(2),temp2,v,Ekin + else + temp1 = xGrid1*Cos_alfaTgt - x(2)*Sin_alfaTgt + temp2 = xGrid1*Sin_alfaTgt + x(2)*Cos_alfaTgt + write(lun(1),1) steps,Gebiet,t,temp1,temp2,x(3),v,Ekin + endif + else + write(lun(1),1) steps,Gebiet,t,x,v,Ekin + endif + +1 format(X,I4,X,I2,4X,F6.1,2X,F7.2,X,F6.2,X,F6.2,2X,F6.2,X, + + F6.2,X,F6.2,2X,G13.6) + + END + + +c=============================================================================== + + + OPTIONS /EXTEND_SOURCE + + SUBROUTINE Decay_Test(*) +c ======================== + + IMPLICIT NONE + + INCLUDE 'mutrack$sourcedirectory:COM_MUTRACK.INC' + + real dt + + if (t.GT.lifeTime) then ! Teilchen zerfallen + dt = t - lifeTime + t = lifeTime + x(1) = x(1) - dt*v(1) + x(2) = x(2) - dt*v(2) + x(3) = x(3) - dt*v(3) + destiny = code_decay + RETURN 1 + endif + + + END + + +c=============================================================================== + + + OPTIONS /EXTEND_SOURCE + + SUBROUTINE chargeStateYields(E,masse,Yield_plus,Yield_zero) +c =========================================================== + +c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +c Die Funktion sowie die Parameter sind uebernommen aus: +c +c M.Gonin, R.Kallenbach, P.Bochsler: 'Charge exchange of hydrogen atoms +c in carbon foils at 0.4 - 120 keV', Rev.Sci.Instrum. 65 (3), March 1994 +c +c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + IMPLICIT NONE + + real E ! kinetische Energie in keV + real masse ! in keV / c**2 + + real a_zero,a_minus + real k_Fermi,k_zero,k_minus + real zwo_k_Fermi + real k_Fermi_Quad,k_zero_Quad,k_minus_Quad + real vc_minus,vc_plus,v_Bohr,v_rel + + parameter ( a_zero = 0.953, a_minus = 0.029 ) + parameter ( k_Fermi = 1.178 ) ! [v_Bohr] + parameter ( k_Fermi_Quad = k_Fermi * k_Fermi ) + parameter ( zwo_k_fermi = 2. * k_Fermi ) + parameter ( k_zero = 0.991*k_Fermi ) ! [v_Bohr] + parameter ( k_zero_Quad = k_zero * k_zero ) + parameter ( k_minus = 0.989*k_Fermi ) ! [v_Bohr] + parameter ( k_minus_Quad = k_minus * k_minus ) + parameter ( vc_minus = 0.284, vc_plus = 0.193 ) ! [v_Bohr] + parameter ( v_Bohr = 7.2974E-3 ) ! [c] + + real Q_zero,Q_minus,D + real Yield_minus,Yield_zero,Yield_plus + + real help1,help2,help3 + + +c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + if (E.LT.0) then + write(*,*) + write(*,*) 'error in subroutine ''chargeStateYields'':' + write(*,*) 'E = ',E,' < 0!' + write(*,*) '-> STOP' + write(*,*) + STOP + endif + + +c Energie in Geschwindigkeit umrechnen (in Einheiten von v_Bohr): + +c - klassisch: + + v_rel = SQRT(2.*E/masse) / v_Bohr + +c - relativistisch: + +c help1 = 1. + E/masse +c v_rel = SQRT(1. - 1./(help1*help1)) / v_Bohr + + +c Die geladenen Anteile berechnen (vgl. obige Referenz): + + help1 = v_rel*v_rel + help2 = zwo_k_Fermi*v_rel + Q_zero = 1. + (k_zero_Quad - k_Fermi_Quad - help1) / help2 + Q_minus = 1. + (k_minus_Quad - k_Fermi_Quad - help1) / help2 + + + help1 = a_zero * Q_zero + help2 = a_minus * Q_minus + help3 = (1.-Q_zero)*(1.-Q_minus) + D = help1*(help2 + (1.-Q_minus)) + help3 + + Yield_minus = help1*help2 / D + Yield_plus = help3 / D + + Yield_minus = Yield_minus * exp(-vc_minus/v_rel) + Yield_plus = Yield_plus * exp(-vc_plus /v_rel) + + Yield_zero = 1. - (Yield_minus + Yield_plus) + +c write(6,*) 'E vrel Neutral Plus Minus' +c write(6,*) E, v_rel, yield_zero, yield_plus, yield_minus + + END + + +c=============================================================================== + + + OPTIONS /EXTEND_SOURCE + + SUBROUTINE test_wireHit(distToWire,WireRadiusQuad,v_x,v_y,WireHit) +c ================================================================== + +c Diese Routine ueberprueft, ob bei gegebenem Abstandsvektor 'distToWire' +c zwischen Teilchen und Draht und gegebener Geschwindigkeit v eines Teilchens +c bei geradliniger Bewegung und Drahtradius 'WireRadius' ein Schnittpunkt +c von Teilchenbahn und Drahtumfang existiert, ob also der Draht getroffen wird. +c Dafuer genuegt es zu pruefen, ob der Radiant der 'Mitternachtsformel' fuer die +c entsprechende quadratische Gleichung groesser oder gleich Null ist: + + IMPLICIT NONE + + real DistToWire(2),WireRadiusQuad,v_x,v_y + logical WireHit + + real steigung, help, radiant + +c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + if (abs(v_x).GT.abs(v_y)) then + steigung = v_y/v_x + help = distToWire(2) - distToWire(1) * steigung + radiant = (1+steigung*steigung)*WireRadiusQuad - help*help + else + steigung = v_x/v_y + help = distToWire(1) - distToWire(2) * steigung + radiant = (1+steigung*steigung)*WireRadiusQuad - help*help + endif + + if (radiant.ge.0) then + wireHit = .true. + else + wireHit = .false. + endif + + + END + + +c=============================================================================== diff --git a/geant4/LEMuSR/MEYER/testmeyer.cc b/geant4/LEMuSR/MEYER/testmeyer.cc new file mode 100644 index 0000000..822201d --- /dev/null +++ b/geant4/LEMuSR/MEYER/testmeyer.cc @@ -0,0 +1,195 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include"meyer.h" + +void GFunctions(double*,double*, const double tau); + + + + meyer GET; + +int main() +{ + + + // DECLARATION OF MEYER's PARAMETERS + + /* Meyer's p255: "We consider a beam of initially parallel particles + with mass m1 and atomic number Z1 which penetrates a material + layer of thickness t with N atoms per unit volume of mass m2 and + atomic number Z2. We assume that each scattering centre will be + effective according to the scattering cross section + dsigma/dÅ‹=¶a²f(Å‹)/ŋ² within a spherical volume of radius r0 + */ + + + double a, a0, N; // screnqing parameter a + double Z1, Z2, D; // charges numbers Z + double epsilon, b; // reduced energy epsilon + double mass1, mass2; // masses of incident & target particles + double v; // velocity of incident particle + double eta, theta; // eta = epsilon*sin(theta/2), (theta, scatt. angle) + // cross section variable by Lindhard, Nielsen and Scharff + double eSquare = 1.44E-10; // squared electric charge of electron in keV*cm + + double tau,thetaSchlange, thick; + double Energy; + + std::cout<< "thickness? in µm/cm²" << std::endl; + std::cin>>thick; + thick=thick*1.0e-6/2;// density= 2g/cm³, + // we want the conversion of thick in centimeter! + + std::cout<<"Enter energy in keV: "; + std::cin>>Energy; + + + + // meyer's functions + double g1,g2; + double f1,f2; + + + + // EXPRESSION OF MEYER's PARAMETERS + + // The screening parameter + // (Z1 = 1, Z2 = 6, ScreeningPar = 2.5764E-9) + Z1 = 1; Z2 = 6; + a0=0.529e-8;//unit centimeter + D= exp(2/3*log(Z1))+exp(2/3*log(Z2)); + a=0.885*a0/sqrt(D);//the screening parameter + + // The reduced energy + mass1=1/9; + mass2=12; + // b= 2*Z1*Z2*eSquare*(mass1+mass2)/(mass1*mass2*v*v); + //b= Z1*Z2 * e²[keV*cm] * (m1+m2)/m2 * 1/Energy[keV] + b= Z1*Z2*eSquare*(mass1+mass2)/(mass2*Energy); + epsilon = a/b; + std::cout<<"\n€: "<>thetaSchlange; + + + GET.GFunctions(&g1,&g2,tau); + + std::cout<< "g1("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 Jd`eRV_Fq+tZNUHl literal 0 HcmV?d00001 diff --git a/geant4/LEMuSR/MEYER/testmeyer2.eps b/geant4/LEMuSR/MEYER/testmeyer2.eps new file mode 100644 index 0000000..f0b9510 --- /dev/null +++ b/geant4/LEMuSR/MEYER/testmeyer2.eps @@ -0,0 +1,703 @@ +%!PS-Adobe-2.0 +%%Title: testmeyer2.eps +%%Creator: gnuplot 3.7 patchlevel 3 +%%CreationDate: Mon Apr 11 15:40:40 2005 +%%DocumentFonts: (atend) +%%BoundingBox: 50 50 554 770 +%%Orientation: Landscape +%%Pages: (atend) +%%EndComments +/gnudict 256 dict def +gnudict begin +/Color true def +/Solid false def +/gnulinewidth 5.000 def +/userlinewidth gnulinewidth def +/vshift -46 def +/dl {10 mul} def +/hpt_ 31.5 def +/vpt_ 31.5 def +/hpt hpt_ def +/vpt vpt_ def +/M {moveto} bind def +/L {lineto} bind def +/R {rmoveto} bind def +/V {rlineto} bind def +/vpt2 vpt 2 mul def +/hpt2 hpt 2 mul def +/Lshow { currentpoint stroke M + 0 vshift R show } def +/Rshow { currentpoint stroke M + dup stringwidth pop neg vshift R show } def +/Cshow { currentpoint stroke M + dup stringwidth pop -2 div vshift R show } def +/UP { dup vpt_ mul /vpt exch def hpt_ mul /hpt exch def + /hpt2 hpt 2 mul def /vpt2 vpt 2 mul def } def +/DL { Color {setrgbcolor Solid {pop []} if 0 setdash } + {pop pop pop Solid {pop []} if 0 setdash} ifelse } def +/BL { stroke userlinewidth 2 mul setlinewidth } def +/AL { stroke userlinewidth 2 div setlinewidth } def +/UL { dup gnulinewidth mul /userlinewidth exch def + dup 1 lt {pop 1} if 10 mul /udl exch def } def +/PL { stroke userlinewidth setlinewidth } def +/LTb { BL [] 0 0 0 DL } def +/LTa { AL [1 udl mul 2 udl mul] 0 setdash 0 0 0 setrgbcolor } def +/LT0 { PL [] 1 0 0 DL } def +/LT1 { PL [4 dl 2 dl] 0 1 0 DL } def +/LT2 { PL [2 dl 3 dl] 0 0 1 DL } def +/LT3 { PL [1 dl 1.5 dl] 1 0 1 DL } def +/LT4 { PL [5 dl 2 dl 1 dl 2 dl] 0 1 1 DL } def +/LT5 { PL [4 dl 3 dl 1 dl 3 dl] 1 1 0 DL } def +/LT6 { PL [2 dl 2 dl 2 dl 4 dl] 0 0 0 DL } def +/LT7 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 1 0.3 0 DL } def +/LT8 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 0.5 0.5 0.5 DL } def +/Pnt { stroke [] 0 setdash + gsave 1 setlinecap M 0 0 V stroke grestore } def +/Dia { stroke [] 0 setdash 2 copy vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V closepath stroke + Pnt } def +/Pls { stroke [] 0 setdash vpt sub M 0 vpt2 V + currentpoint stroke M + hpt neg vpt neg R hpt2 0 V stroke + } def +/Box { stroke [] 0 setdash 2 copy exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V closepath stroke + Pnt } def +/Crs { stroke [] 0 setdash exch hpt sub exch vpt add M + hpt2 vpt2 neg V currentpoint stroke M + hpt2 neg 0 R hpt2 vpt2 V stroke } def +/TriU { stroke [] 0 setdash 2 copy vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V closepath stroke + Pnt } def +/Star { 2 copy Pls Crs } def +/BoxF { stroke [] 0 setdash exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V closepath fill } def +/TriUF { stroke [] 0 setdash vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V closepath fill } def +/TriD { stroke [] 0 setdash 2 copy vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V closepath stroke + Pnt } def +/TriDF { stroke [] 0 setdash vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V closepath fill} def +/DiaF { stroke [] 0 setdash vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V closepath fill } def +/Pent { stroke [] 0 setdash 2 copy gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + closepath stroke grestore Pnt } def +/PentF { stroke [] 0 setdash gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + closepath fill grestore } def +/Circle { stroke [] 0 setdash 2 copy + hpt 0 360 arc stroke Pnt } def +/CircleF { stroke [] 0 setdash hpt 0 360 arc fill } def +/C0 { BL [] 0 setdash 2 copy moveto vpt 90 450 arc } bind def +/C1 { BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 90 arc closepath fill + vpt 0 360 arc closepath } bind def +/C2 { BL [] 0 setdash 2 copy moveto + 2 copy vpt 90 180 arc closepath fill + vpt 0 360 arc closepath } bind def +/C3 { BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 180 arc closepath fill + vpt 0 360 arc closepath } bind def +/C4 { BL [] 0 setdash 2 copy moveto + 2 copy vpt 180 270 arc closepath fill + vpt 0 360 arc closepath } bind def +/C5 { BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 90 arc + 2 copy moveto + 2 copy vpt 180 270 arc closepath fill + vpt 0 360 arc } bind def +/C6 { BL [] 0 setdash 2 copy moveto + 2 copy vpt 90 270 arc closepath fill + vpt 0 360 arc closepath } bind def +/C7 { BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 270 arc closepath fill + vpt 0 360 arc closepath } bind def +/C8 { BL [] 0 setdash 2 copy moveto + 2 copy vpt 270 360 arc closepath fill + vpt 0 360 arc closepath } bind def +/C9 { BL [] 0 setdash 2 copy moveto + 2 copy vpt 270 450 arc closepath fill + vpt 0 360 arc closepath } bind def +/C10 { BL [] 0 setdash 2 copy 2 copy moveto vpt 270 360 arc closepath fill + 2 copy moveto + 2 copy vpt 90 180 arc closepath fill + vpt 0 360 arc closepath } bind def +/C11 { BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 180 arc closepath fill + 2 copy moveto + 2 copy vpt 270 360 arc closepath fill + vpt 0 360 arc closepath } bind def +/C12 { BL [] 0 setdash 2 copy moveto + 2 copy vpt 180 360 arc closepath fill + vpt 0 360 arc closepath } bind def +/C13 { BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 90 arc closepath fill + 2 copy moveto + 2 copy vpt 180 360 arc closepath fill + vpt 0 360 arc closepath } bind def +/C14 { BL [] 0 setdash 2 copy moveto + 2 copy vpt 90 360 arc closepath fill + vpt 0 360 arc } bind def +/C15 { BL [] 0 setdash 2 copy vpt 0 360 arc closepath fill + vpt 0 360 arc closepath } bind def +/Rec { newpath 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto + neg 0 rlineto closepath } bind def +/Square { dup Rec } bind def +/Bsquare { vpt sub exch vpt sub exch vpt2 Square } bind def +/S0 { BL [] 0 setdash 2 copy moveto 0 vpt rlineto BL Bsquare } bind def +/S1 { BL [] 0 setdash 2 copy vpt Square fill Bsquare } bind def +/S2 { BL [] 0 setdash 2 copy exch vpt sub exch vpt Square fill Bsquare } bind def +/S3 { BL [] 0 setdash 2 copy exch vpt sub exch vpt2 vpt Rec fill Bsquare } bind def +/S4 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt Square fill Bsquare } bind def +/S5 { BL [] 0 setdash 2 copy 2 copy vpt Square fill + exch vpt sub exch vpt sub vpt Square fill Bsquare } bind def +/S6 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill Bsquare } bind def +/S7 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill + 2 copy vpt Square fill + Bsquare } bind def +/S8 { BL [] 0 setdash 2 copy vpt sub vpt Square fill Bsquare } bind def +/S9 { BL [] 0 setdash 2 copy vpt sub vpt vpt2 Rec fill Bsquare } bind def +/S10 { BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt Square fill + Bsquare } bind def +/S11 { BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt2 vpt Rec fill + Bsquare } bind def +/S12 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill Bsquare } bind def +/S13 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill + 2 copy vpt Square fill Bsquare } bind def +/S14 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill + 2 copy exch vpt sub exch vpt Square fill Bsquare } bind def +/S15 { BL [] 0 setdash 2 copy Bsquare fill Bsquare } bind def +/D0 { gsave translate 45 rotate 0 0 S0 stroke grestore } bind def +/D1 { gsave translate 45 rotate 0 0 S1 stroke grestore } bind def +/D2 { gsave translate 45 rotate 0 0 S2 stroke grestore } bind def +/D3 { gsave translate 45 rotate 0 0 S3 stroke grestore } bind def +/D4 { gsave translate 45 rotate 0 0 S4 stroke grestore } bind def +/D5 { gsave translate 45 rotate 0 0 S5 stroke grestore } bind def +/D6 { gsave translate 45 rotate 0 0 S6 stroke grestore } bind def +/D7 { gsave translate 45 rotate 0 0 S7 stroke grestore } bind def +/D8 { gsave translate 45 rotate 0 0 S8 stroke grestore } bind def +/D9 { gsave translate 45 rotate 0 0 S9 stroke grestore } bind def +/D10 { gsave translate 45 rotate 0 0 S10 stroke grestore } bind def +/D11 { gsave translate 45 rotate 0 0 S11 stroke grestore } bind def +/D12 { gsave translate 45 rotate 0 0 S12 stroke grestore } bind def +/D13 { gsave translate 45 rotate 0 0 S13 stroke grestore } bind def +/D14 { gsave translate 45 rotate 0 0 S14 stroke grestore } bind def +/D15 { gsave translate 45 rotate 0 0 S15 stroke grestore } bind def +/DiaE { stroke [] 0 setdash vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V closepath stroke } def +/BoxE { stroke [] 0 setdash exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V closepath stroke } def +/TriUE { stroke [] 0 setdash vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V closepath stroke } def +/TriDE { stroke [] 0 setdash vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V closepath stroke } def +/PentE { stroke [] 0 setdash gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + closepath stroke grestore } def +/CircE { stroke [] 0 setdash + hpt 0 360 arc stroke } def +/Opaque { gsave closepath 1 setgray fill grestore 0 setgray closepath } def +/DiaW { stroke [] 0 setdash vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V Opaque stroke } def +/BoxW { stroke [] 0 setdash exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V Opaque stroke } def +/TriUW { stroke [] 0 setdash vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V Opaque stroke } def +/TriDW { stroke [] 0 setdash vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V Opaque stroke } def +/PentW { stroke [] 0 setdash gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + Opaque stroke grestore } def +/CircW { stroke [] 0 setdash + hpt 0 360 arc Opaque stroke } def +/BoxFill { gsave Rec 1 setgray fill grestore } def +/Symbol-Oblique /Symbol findfont [1 0 .167 1 0 0] makefont +dup length dict begin {1 index /FID eq {pop pop} {def} ifelse} forall +currentdict end definefont pop +end +%%EndProlog +%%Page: 1 1 +gnudict begin +gsave +50 50 translate +0.100 0.100 scale +90 rotate +0 -5040 translate +0 setgray +newpath +(Helvetica) findfont 140 scalefont setfont +1.000 UL +LTb +1.000 UL +LTa +490 280 M +6472 0 V +1.000 UL +LTb +490 280 M +63 0 V +6409 0 R +-63 0 V +406 280 M +(-5) Rshow +1.000 UL +LTa +490 1045 M +6472 0 V +1.000 UL +LTb +490 1045 M +63 0 V +6409 0 R +-63 0 V +-6493 0 R +( 0) Rshow +1.000 UL +LTa +490 1811 M +6472 0 V +1.000 UL +LTb +490 1811 M +63 0 V +6409 0 R +-63 0 V +-6493 0 R +( 5) Rshow +1.000 UL +LTa +490 2576 M +6472 0 V +1.000 UL +LTb +490 2576 M +63 0 V +6409 0 R +-63 0 V +-6493 0 R +( 10) Rshow +1.000 UL +LTa +490 3341 M +6472 0 V +1.000 UL +LTb +490 3341 M +63 0 V +6409 0 R +-63 0 V +-6493 0 R +( 15) Rshow +1.000 UL +LTa +490 4107 M +6472 0 V +1.000 UL +LTb +490 4107 M +63 0 V +6409 0 R +-63 0 V +-6493 0 R +( 20) Rshow +1.000 UL +LTa +490 4872 M +6472 0 V +1.000 UL +LTb +490 4872 M +63 0 V +6409 0 R +-63 0 V +-6493 0 R +( 25) Rshow +1.000 UL +LTa +490 280 M +0 4592 V +1.000 UL +LTb +490 280 M +0 63 V +0 4529 R +0 -63 V +490 140 M +( 0) Cshow +1.000 UL +LTa +1299 280 M +0 4592 V +1.000 UL +LTb +1299 280 M +0 63 V +0 4529 R +0 -63 V +0 -4669 R +( 1) Cshow +1.000 UL +LTa +2108 280 M +0 4592 V +1.000 UL +LTb +2108 280 M +0 63 V +0 4529 R +0 -63 V +0 -4669 R +( 2) Cshow +1.000 UL +LTa +2917 280 M +0 4592 V +1.000 UL +LTb +2917 280 M +0 63 V +0 4529 R +0 -63 V +0 -4669 R +( 3) Cshow +1.000 UL +LTa +3726 280 M +0 4592 V +1.000 UL +LTb +3726 280 M +0 63 V +0 4529 R +0 -63 V +0 -4669 R +( 4) Cshow +1.000 UL +LTa +4535 280 M +0 4249 V +0 280 R +0 63 V +1.000 UL +LTb +4535 280 M +0 63 V +0 4529 R +0 -63 V +0 -4669 R +( 5) Cshow +1.000 UL +LTa +5344 280 M +0 4249 V +0 280 R +0 63 V +1.000 UL +LTb +5344 280 M +0 63 V +0 4529 R +0 -63 V +0 -4669 R +( 6) Cshow +1.000 UL +LTa +6153 280 M +0 4249 V +0 280 R +0 63 V +1.000 UL +LTb +6153 280 M +0 63 V +0 4529 R +0 -63 V +0 -4669 R +( 7) Cshow +1.000 UL +LTa +6962 280 M +0 4592 V +1.000 UL +LTb +6962 280 M +0 63 V +0 4529 R +0 -63 V +0 -4669 R +( 8) Cshow +1.000 UL +LTb +490 280 M +6472 0 V +0 4592 V +-6472 0 V +490 280 L +1.000 UP +1.000 UL +LT0 +6311 4739 M +('testmeyer.out' us 1:3) Rshow +541 1045 Pls +591 1624 Pls +642 2186 Pls +692 2715 Pls +743 3186 Pls +793 3596 Pls +844 3932 Pls +895 4180 Pls +945 4352 Pls +996 4445 Pls +1046 4475 Pls +1097 4447 Pls +1147 4374 Pls +1198 4268 Pls +1248 4126 Pls +1299 3965 Pls +1350 3804 Pls +1400 3635 Pls +1451 3436 Pls +1501 3255 Pls +1552 3090 Pls +1602 2908 Pls +1653 2740 Pls +1704 2590 Pls +1754 2431 Pls +1805 2286 Pls +1855 2166 Pls +1906 2043 Pls +1956 1929 Pls +2007 1836 Pls +2057 1743 Pls +2108 1657 Pls +2159 1595 Pls +2209 1533 Pls +2260 1472 Pls +2310 1412 Pls +2361 1355 Pls +2411 1303 Pls +2462 1271 Pls +2513 1241 Pls +2563 1211 Pls +2614 1184 Pls +2664 1158 Pls +2715 1135 Pls +2765 1119 Pls +2816 1104 Pls +2866 1090 Pls +2917 1077 Pls +2968 1066 Pls +3018 1056 Pls +3069 1047 Pls +3119 1040 Pls +3170 1034 Pls +3220 1028 Pls +3271 1023 Pls +3322 1020 Pls +3372 1016 Pls +3423 1013 Pls +3473 1011 Pls +3524 1009 Pls +3574 1008 Pls +3625 1007 Pls +3675 1006 Pls +3726 1005 Pls +3777 1004 Pls +3827 1003 Pls +3878 1003 Pls +3928 1003 Pls +3979 1003 Pls +4029 1004 Pls +4080 1005 Pls +4131 1006 Pls +4181 1007 Pls +4232 1009 Pls +4282 1010 Pls +4333 1012 Pls +4383 1014 Pls +4434 1016 Pls +4484 1017 Pls +4535 1019 Pls +4586 1020 Pls +4636 1021 Pls +4687 1023 Pls +4737 1024 Pls +4788 1026 Pls +4838 1027 Pls +4889 1029 Pls +4940 1030 Pls +4990 1032 Pls +5041 1033 Pls +5091 1035 Pls +5142 1036 Pls +5192 1037 Pls +5243 1039 Pls +5293 1040 Pls +5344 1041 Pls +5395 1042 Pls +5445 1042 Pls +5496 1043 Pls +5546 1044 Pls +5597 1045 Pls +5647 1046 Pls +5698 1046 Pls +5749 1047 Pls +5799 1047 Pls +5850 1048 Pls +5900 1048 Pls +5951 1049 Pls +6001 1049 Pls +6052 1049 Pls +6102 1050 Pls +6153 1050 Pls +6204 1050 Pls +6254 1050 Pls +6305 1051 Pls +6355 1051 Pls +6406 1051 Pls +6456 1051 Pls +6507 1051 Pls +6558 1051 Pls +6608 1051 Pls +6659 1051 Pls +6709 1050 Pls +6594 4739 Pls +1.000 UL +LT1 +6311 4599 M +(sin\(x\)*exp\(-x*x/1.\)*56) Rshow +6395 4599 M +399 0 V +490 1045 M +65 688 V +66 656 V +65 597 V +65 512 V +66 410 V +65 295 V +66 179 V +65 63 V +65 -42 V +66 -132 V +65 -206 V +65 -259 V +66 -294 V +65 -310 V +66 -310 V +65 -298 V +65 -275 V +66 -247 V +65 -216 V +65 -182 V +66 -151 V +65 -122 V +66 -96 V +65 -74 V +65 -55 V +66 -41 V +65 -30 V +65 -20 V +66 -14 V +65 -10 V +66 -6 V +65 -4 V +65 -2 V +66 -2 V +65 -1 V +65 0 V +66 0 V +65 -1 V +66 0 V +65 0 V +65 0 V +66 0 V +65 0 V +65 0 V +66 0 V +65 0 V +66 0 V +65 0 V +65 0 V +66 0 V +65 0 V +65 0 V +66 0 V +65 0 V +66 0 V +65 0 V +65 0 V +66 0 V +65 0 V +65 0 V +66 0 V +65 0 V +66 0 V +65 0 V +65 0 V +66 0 V +65 0 V +65 0 V +66 0 V +65 0 V +66 0 V +65 0 V +65 0 V +66 0 V +65 0 V +65 0 V +66 0 V +65 0 V +66 0 V +65 0 V +65 0 V +66 0 V +65 0 V +65 0 V +66 0 V +65 0 V +66 0 V +65 0 V +65 0 V +66 0 V +65 0 V +65 0 V +66 0 V +65 0 V +66 0 V +65 0 V +65 0 V +66 0 V +65 0 V +stroke +grestore +end +showpage +%%Trailer +%%DocumentFonts: Helvetica +%%Pages: 1 diff --git a/geant4/LEMuSR/MEYER/testmeyer2.pdf b/geant4/LEMuSR/MEYER/testmeyer2.pdf new file mode 100644 index 0000000000000000000000000000000000000000..1646760b5931ede62101c55d047a8126252cab88 GIT binary patch literal 7728 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 LH@CdH0_48{X=WZf literal 0 HcmV?d00001 diff --git a/geant4/LEMuSR/MEYER/tkm.out b/geant4/LEMuSR/MEYER/tkm.out new file mode 100644 index 0000000..4165daf --- /dev/null +++ b/geant4/LEMuSR/MEYER/tkm.out @@ -0,0 +1,168 @@ +0.125 1 0 +0.25 0.99446 0.11462 +0.375 0.98892 0.227963 +0.5 0.98338 0.340027 +0.625 0.97784 0.450813 +0.75 0.97009 0.559046 +0.875 0.954263 0.659905 +1 0.938436 0.757112 +1.125 0.922609 0.850668 +1.25 0.906782 0.940572 +1.375 0.888828 1.02437 +1.5 0.86805 1.10045 +1.625 0.847094 1.17149 +1.75 0.821486 1.23072 +1.875 0.795879 1.28405 +2 0.769708 1.3305 +2.125 0.743225 1.37033 +2.25 0.716743 1.40406 +2.375 0.690261 1.43169 +2.5 0.663779 1.4532 +2.625 0.636879 1.46765 +2.75 0.609912 1.47574 +2.875 0.582944 1.4776 +3 0.555976 1.47325 +3.125 0.529194 1.46319 +3.25 0.50473 1.45364 +3.375 0.480266 1.43846 +3.5 0.455803 1.41763 +3.625 0.431339 1.39117 +3.75 0.408111 1.3632 +3.875 0.387928 1.34041 +4 0.367745 1.31296 +4.125 0.347561 1.28086 +4.25 0.327378 1.24412 +4.375 0.308453 1.20766 +4.5 0.29077 1.17184 +4.625 0.27339 1.13321 +4.75 0.258448 1.10097 +4.875 0.243505 1.06529 +5 0.230337 1.03414 +5.125 0.217864 1.00316 +5.25 0.205391 0.969306 +5.375 0.192919 0.932588 +5.5 0.180446 0.893002 +5.625 0.171018 0.865965 +5.75 0.161808 0.837893 +5.875 0.152598 0.807704 +6 0.143389 0.7754 +6.125 0.134521 0.742867 +6.25 0.127624 0.71941 +6.375 0.120728 0.694369 +6.5 0.113832 0.667745 +6.625 0.106935 0.639537 +6.75 0.100686 0.613696 +6.875 0.0955769 0.593493 +7 0.0904673 0.572119 +7.125 0.0853578 0.549572 +7.25 0.0802482 0.525853 +7.375 0.0758915 0.505983 +7.5 0.0720861 0.488852 +7.625 0.0682807 0.47085 +7.75 0.0644753 0.451975 +7.875 0.0606698 0.432229 +8 0.0576442 0.417255 +8.125 0.0548232 0.403094 +8.25 0.0520023 0.388287 +8.375 0.0491813 0.372835 +8.5 0.046365 0.356773 +8.625 0.0442261 0.345356 +8.75 0.0420871 0.33345 +8.875 0.0399482 0.321055 +9 0.0378092 0.308171 +9.125 0.0358519 0.2963 +9.25 0.0345323 0.289324 +9.375 0.0332127 0.282047 +9.5 0.0318931 0.274469 +9.625 0.0305735 0.266588 +9.75 0.0292539 0.258407 +9.875 0.0279343 0.249925 +10 0.0266147 0.241141 +10.125 0.0252951 0.232057 +10.25 0.0239756 0.222672 +10.375 0.022656 0.212986 +10.5 0.0213364 0.203 +10.625 0.0201776 0.194263 +10.75 0.01948 0.189754 +10.875 0.0187824 0.185086 +11 0.0180849 0.180259 +11.125 0.0173873 0.175274 +11.25 0.0166897 0.17013 +11.375 0.0159921 0.164827 +11.5 0.0152945 0.159366 +11.625 0.0145969 0.153746 +11.75 0.0138993 0.147968 +11.875 0.0132018 0.142032 +12 0.0125042 0.135938 +12.125 0.0118979 0.130688 +12.25 0.0115092 0.127716 +12.375 0.0111205 0.124656 +12.5 0.0107319 0.121507 +12.625 0.0103432 0.118271 +12.75 0.00995451 0.114946 +12.875 0.00956583 0.111534 +13 0.00917716 0.108034 +13.125 0.00878848 0.104445 +13.25 0.00839981 0.100769 +13.375 0.00801114 0.0970055 +13.5 0.00762246 0.093154 +13.625 0.0072864 0.0898638 +13.75 0.00705598 0.0878127 +13.875 0.00682557 0.0857095 +14 0.00659516 0.0835544 +14.125 0.00636474 0.0813473 +14.25 0.00613433 0.0790882 +14.375 0.00590392 0.0767773 +14.5 0.0056735 0.0744145 +14.625 0.00544309 0.0719999 +14.75 0.00521268 0.0695336 +14.875 0.00498226 0.0670155 +15 0.00475185 0.0644458 +15.125 0.00453543 0.0620157 +15.25 0.0043429 0.0598664 +15.375 0.00415037 0.0576741 +15.5 0.00395783 0.0554386 +15.625 0.0037653 0.0531601 +15.75 0.00357277 0.0508385 +15.875 0.00338024 0.048474 +16 0.00318771 0.0460665 +16.125 0.00299517 0.0436161 +16.25 0.00280264 0.0411229 +16.375 0.00261011 0.0385868 +16.5 0.00241758 0.0360079 +16.625 0.00222505 0.0333863 +16.75 0.00203251 0.0307219 +16.875 0.00183998 0.0280149 +17 0.00164745 0.0252652 +17.125 0.00145492 0.022473 +17.25 0.00126239 0.0196382 +17.375 0.00106985 0.0167609 +17.5 0.000877323 0.0138411 +17.625 0.000684791 0.0108789 +17.75 0.000492259 0.00787437 +17.875 0.000299727 0.00482747 +18 0.000107195 0.00173827 +18.125 0 0 +18.25 0 0 +18.375 0 0 +18.5 0 0 +18.625 0 0 +18.75 0 0 +18.875 0 0 +19 0 0 +19.125 0 0 +19.25 0 0 +19.375 0 0 +19.5 0 0 +19.625 0 0 +19.75 0 0 +19.875 0 0 +20 0 0 +20.125 0 0 +20.25 0 0 +20.375 0 0 +20.5 0 0 +20.625 0 0 +20.75 0 0 +20.875 0 0 +21 0 0 diff --git a/geant4/LEMuSR/MEYER/txt.for b/geant4/LEMuSR/MEYER/txt.for new file mode 100644 index 0000000..2f741fe --- /dev/null +++ b/geant4/LEMuSR/MEYER/txt.for @@ -0,0 +1,1156 @@ +c 462 ------------------------------------------------------------------------------- +c Konstanten und Variable fuer Berechnung der Winkelaufstreuung in Triggerfolie +c mittels Meyer-Formel (L.Meyer, phys.stat.sol. (b) 44, 253 (1971)): + + real g1, g2 ! Tabellierte Funktionen der Referenz + real effRedThick ! effektive reduzierte Dicke ('tau' der Referenz) + + +c - Parameter: + + real Z1, Z2 ! die atomaren Nummern von Projektil und Target + real a0 ! Bohrscher Radius in cm + real screeningPar ! Screeningparameter 'a' in cm fuer Teilchen der + ! Kernladungszahl Z1=1 in Kohlenstoff (Z2 = 6) + ! bei Streichung von Z1 (vgl. Referenz, S. 268) + + real r0Meyer ! r0(C) berechnet aus dem screeningParameter 'a' + ! und dem ebenfalls bei Meyer angegebenem + ! Verhaeltnis a/r0=0.26 (vgl. Referenz, S. 263 oben) + real eSquare ! elektrische Ladung zum Quadrat in keV*cm + real HWHM2sigma ! Umrechnungsfaktor von (halber!) Halbwertsbreite + ! nach Sigma der Gaussfunktion + + real Na ! die Avogadrokonstante + real mMolC ! molare Masse von C in ug + real Pi ! die Kreiszahl + + parameter (Z1 = 1, Z2 = 6, a0 = 5.29E-9, ScreeningPar = 2.5764E-9) + parameter (r0Meyer = 9.909E-9, eSquare = 1.44E-10, HWHM2sigma = 1./1.17741) + parameter (Na = 6.022e23, mMolC = 12.011e6, Pi = 3.141592654) + + +c - Bei der Berechnung von Sigma auftretende Vorfaktoren. +c (Meyer_faktor 1 wird benoetigt fuer Berechnung der reduzierten Dicke aus der +c 'ug/cm2'-Angabe der Foliendicke. Meyer_faktor2 und Meyer_faktor3 werden +c direkt fuer die Berechnung von sigma aus den beiden tabellierten Funktionen +c g1 und g2 verwendet): + + real Meyer_Faktor1, Meyer_Faktor2, Meyer_Faktor3 + + parameter (Meyer_faktor1 = Pi*screeningPar*screeningPar * Na/mMolC) + ! Na/mMolC = 1/m(C-Atom) + parameter (Meyer_faktor2 = (2*Z1*Z2 * eSquare)/ScreeningPar * 180./Pi + + * HWHM2sigma) + parameter (Meyer_faktor3 = (screeningPar/r0Meyer) * (screeningPar/r0Meyer)) + + +c------------------------------------------------------------------------------- +c Kommentar zur Berechnung der Winkelaufstreuung nach Meyer: +c +c Als Bedingung fuer die Gueltigkeit der Rechnung wird verlangt, dass +c +c (1) die Anzahl n der Stoesse >> 20*(a/r0)^(4/3) sein muss. Fuer Protonen auf +c Graphit ist laut Referenz a/r0 gleich 0.26 (mit Dichte von 3.5 g/ccm habe +c ich einen Wert von 0.29 abgeschaetzt). Fuer Myonen hat man den selben +c Wert zu nehmen. Damit ergibt sich die Forderung, dass n >> 3.5 sein muss. +c +c (2) unabhaengig von (1) n >> 5 sein muss, was (1) also mit einschliesst. +c +c Mit n = Pi*r0*r0*Teilchen/Flaeche ergibt sich fuer eine Foliendicke von +c 3 ug/cm^2 als Abschaetzung fuer n ein Wert von 37. (r0 ueber r0 = 0.5 N^(1/3) +c und 3.5 g/ccm zu 8.9e-9 cm abgeschaetzt). D.h., dass die Bedingungen in +c unserem Fall gut erfuellt sind. +c In dem Paper wird eine Formel fuer Halbwertsbreiten angegeben. Ich habe nicht +c kontrolliert, in wie weit die Form der Verteilung tatsaechlich einer Gauss- +c verteilung entspricht. Zumindest im Bereich der Vorwaertsstreuung sollte +c die in diesem Programm verwendete Gaussverteilung aber eine sehr gute +c Naeherung abgeben. Abweichungen bei groesseren Winkeln koennten jedoch u. U. +c die absolute Streuintensitaet in Vorwaertsrichtung verfaelschen. + + + + + +c (...) + + +c 1071 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +c Falls 'fromScratch': +c Die in den ab hier beginnenden Startparameter-Schleifen gesetzten Werte +c werden gegebenenfalls weiter unten durch zufallsverteilte Offsets modi- +c fiziert. (-> 'Zufallschleife': 'do 100 randomloop_ = 1, n_par(0)) +c Andernfalls: +c Wurden waehrend ACCEL oder 'foilfile' fuer die Startparameter Zufalls- +c verteilungen verwendet, so werden die entsprechenden Groessen aus dem +c betreffenden NTupel eingelesen. +c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +c Startparameter: +c --------------- + + do 200 E0_ = par(1,ener),par(2,ener),par(3,ener) ! E0 + if (.NOT.random_E0) then + E0 = E0_ + v0_Betrag = sqrt(E0/Energie_Faktor) + endif + + if (E0InterFromFile) then + lowerE0 = E0Low(nInt(E0_)) + upperE0 = E0Low(nint(E0_+1)) + endif + + +c falls Energieverlustberechnung aus ICRU-Tabelle verlangt ist und mittlerer +c Energieverlust nicht fuer jedes Teilchen extra berechnet werden soll (sinnvoll +c wenn alle Teilchen gleiche Startenergie haben oder Streuung der Startenergien +c klein ist, so dass die Streuung des mittleren Energieverlustes vernachlaessigt +c werden kann): + + if (log_E_Verlust_ICRU .AND. .NOT.calculate_each) then + if (random_E0_equal) then + Ekin = E0_ + (upperE0+lowerE0)/2. + else + Ekin = E0_ + endif + if (Gebiet0.EQ.target .OR. Gebiet0.EQ.upToGrid1) then + Ekin = Ekin + q*(U_Tgt - U_F) + elseif (Gebiet0.EQ.upToGrid2) then + Ekin = Ekin + q*(U_G1 - U_F) + endif + call CALC_ELOSS_ICRU(Ekin,q,m,Thickness,mean_E_Verlust) + endif + + if (log_Meyer_F_Function) then + if (random_E0_equal) then + Ekin = E0_ + (upperE0+lowerE0)/2. + else + Ekin = E0_ + endif + if (Gebiet0.EQ.target .OR. Gebiet0.EQ.upToGrid1) then + Ekin = Ekin + q*(U_Tgt - U_F) + elseif (Gebiet0.EQ.upToGrid2) then + Ekin = Ekin + q*(U_G1 - U_F) + endif + effRedThick = Meyer_Faktor1 * Thickness + call Get_F_Function_Meyer(effRedThick,Ekin) + endif + + do 200 theta0_ = par(1,thetAng),par(2,thetAng),par(3,thetAng) ! theta0 + if (.NOT.random_angle) then + theta0 = theta0_ + Cos_theta0 = cosd(theta0) + Sin_theta0 = sind(theta0) + endif + do 200 phi0_ = par(1,phiAng),par(2,phiAng),par(3,phiAng) ! phi0 + if (.NOT.random_angle) then + phi0 = phi0_ + Cos_phi0 = cosd(phi0) + Sin_phi0 = sind(phi0) + endif + + do 200 y0_ = par(1,yPos),par(2,yPos),par(3,yPos) ! y0 + if (.NOT.random_pos) then + x0(2) = y0_ + endif + + do 200 z0_ = par(1,zPos),par(2,zPos),par(3,zPos) ! z0 + if (.NOT.random_pos) then + x0(3) = z0_ + endif + +c die folgenden parWert(n) werden u.U. in der 'Zufallsschleife' weiter unten +c abgeaendert. Hier werden sie in jedem Fall fuer Tabellenausgaben, Debug- +c angelegenheiten u.s.w. erst einmal mit den aktuellen Werten der +c entsprechenden Schleifen gefuellt: + + parWert(ener) = E0_ + parWert(thetAng) = theta0_ + parWert(phiAng) = phi0_ + parWert(yPos) = y0_ + parWert(zPos) = z0_ + + +c falls fruehere Simulation fortgefuehrt wird: +c Berechne diejenige Eventnummer in NTP_read, ab welcher die relevanten +c Simulationsparameter von ACCEL bzw. des 'FoilFiles' mit den gegenwaertigen +c MUTRACK-(Schleifen)-Parametern uebereinstimmen: + + if (.NOT.fromScratch) eventNr = firstEventNr() + + + + + + +c (...) + + + + + +c 3106 +c Einsprunglabel fuer Starts auf der Triggerfolie mit Startwinkelangaben +c im Kammersystem => transformiere Geschwindigkeitsvektor in das Triggersystem: + +111 if (alfaTD.NE.0) then + help1= v(1) ! zur Zwischenspeicherung + v(1) = help1*Cos_alfaTD + v(2)*Sin_alfaTD + v(2) = -help1*Sin_alfaTD + v(2)*Cos_alfaTD + endif + + +c - pruefe, ob das Projektil die Folie trifft: + +112 radiusQuad = x(2)*x(2) + x(3)*x(3) + If (radiusQuad.GT.radiusQuad_Folie) then + ! zurueckrechnen in das Kammersystem: + if (alfaTD.NE.0) then + help1= x(1) + x(1) = (help1-d_Folie_Achse)*Cos_alfaTD - + + x(2)*Sin_alfaTD + xTD + x(2) = (help1-d_Folie_Achse)*Sin_alfaTD + + + x(2)*Cos_alfaTD + help1= v(1) + v(1) = help1*Cos_alfaTD - v(2)*Sin_alfaTD + v(2) = help1*Sin_alfaTD + v(2)*Cos_alfaTD + else + x(1) = x(1) + xTD - d_Folie_Achse + endif + + destiny = code_vorbei + goto 555 + endif + + +c So verlangt, schreibe die aktuellen Trajektoriengroessen in das 'FoilFile': +c (hier ist sichergestellt, dass die Folie getroffen worden ist, Wechsel- +c wirkungen mit der Folie wurden aber noch nicht beruecksichtigt). +c HIER WERDEN 'X' UND 'V' IM TRIGGERSYSTEM ABGESPEICHERT! + + if (createFoilFile) then + ! falls die Flugzeit bis zur Triggerfolie verschmiert in das + ! NTupel aufgenommen werden soll: + if (smearS1Fo) then + call Gauss_Verteilung(sigmaS1Fo,help4) + S1FoOnly = t + help4 + endif + if (NTP_stop) then + Ekin=(v(1)*v(1)+v(2)*v(2)+v(3)*v(3))*Energie_Faktor + endif + call HFNT(NTP_write) + NTPalreadyWritten = .true. + endif + + +c - Zeitpunkt bei Erreichen der Folie sichern: + +113 S1Fo = t + if (createNTP.AND.Fo_triggered) fill_NTP = .true. + if (statNeeded(Nr_S1Fo)) call fill_statMem(S1Fo,Nr_S1Fo) + + + +c - Speichern der Koordinaten fuer die Statistiken: + + if (statNeeded(Nr_y_Fo)) then + call fill_statMem( x(2),Nr_y_Fo) + endif + if (statNeeded(Nr_z_Fo)) then + call fill_statMem( x(3),Nr_z_Fo) + endif + if (statNeeded(Nr_r_Fo)) then + radius = SQRT(x(2)*x(2) + x(3)*x(3)) + call fill_statMem(radius,Nr_r_Fo) + endif + + +c - speichere Auftreffort des Projektils fuer die Berechnung der Folienelektronen: + + if (generate_FE) then + x0FE(1) = x(1) + x0FE(2) = x(2) + x0FE(3) = x(3) + endif + + +c - falls nur bis zur Folie gerechnet werden soll, beende hier die Integration: + + if (upToTDFoilOnly) then + ! zurueckrechnen in das Kammersystem: + if (alfaTD.NE.0) then + help1= x(1) + x(1) = (help1-d_Folie_Achse)*Cos_alfaTD - + + x(2)*Sin_alfaTD + xTD + x(2) = (help1-d_Folie_Achse)*Sin_alfaTD + + + x(2)*Cos_alfaTD + help1= v(1) + v(1) = help1*Cos_alfaTD - v(2)*Sin_alfaTD + v(2) = help1*Sin_alfaTD + v(2)*Cos_alfaTD + else + x(1) = x(1) + xTD - d_Folie_Achse + endif + if (generate_FE) Gebiet = UpToExTD + goto 555 + endif + + +c - pruefe, ob das Projektil auf das Stuetzgitter aufschlaegt: + + if (testOnWireHit .AND. ran(seed).GT.TransTDFoil) then + destiny = code_Stuetzgitter + ! zurueckrechnen in das Kammersystem: + if (alfaTD.NE.0) then + help1= x(1) + x(1) = (help1-d_Folie_Achse)*Cos_alfaTD - + + x(2)*Sin_alfaTD + xTD + x(2) = (help1-d_Folie_Achse)*Sin_alfaTD + + + x(2)*Cos_alfaTD + help1= v(1) + v(1) = help1*Cos_alfaTD - v(2)*Sin_alfaTD + v(2) = help1*Sin_alfaTD + v(2)*Cos_alfaTD + else + x(1) = x(1) + xTD - d_Folie_Achse + endif + goto 555 + endif + + +c - Energieverlust und Winkelaufstreuung: + + if (log_E_Verlust .OR. log_Aufstreu) then + if (Debug_) then + Steps = Steps + 1 + call Output_Debug + endif + v_square = v(1)*v(1) + v(2)*v(2) + v(3)*v(3) + v_Betrag = SQRT(v_square) + Ekin = v_square * Energie_Faktor + endif + +c -- Energieverlust (vorerst nur Gaussverteilt): + + if (log_E_Verlust_defined.OR.log_Meyer_Gauss) then + ! Berechne Bahnwinkel relativ zur Folienebene fuer effektive Folien- + ! dicke: + alfa = atand(SQRT(v(2)*v(2)+v(3)*v(3))/v(1)) + endif + + if (log_E_Verlust) then + if (calculate_each) then + call CALC_ELOSS_ICRU(Ekin,q,m,Thickness,E_Verlust) + else + E_Verlust = mean_E_Verlust + endif + if (log_E_Verlust_defined) E_Verlust = E_Verlust / cosd(alfa) + if (debug_) write (lunLOG,*) ' mittlerer Energieverlust: ',E_Verlust + + ! Now we have the mean energy loss. We still have to modify it + ! according to the distribution of energy losses, i.e. + ! E_Verlust -> E_Verlust + delta_E_Verlust: + + delta_E_Verlust = 0. + if (log_E_Straggling_sigma) then +400 call Gauss_Verteilung(sigmaE,delta_E_Verlust) + if (debug_) write (lunLOG,*) ' sigmaE,delta_E_Verlust: ',sigmaE,delta_E_Verlust + if (E_Verlust+delta_E_Verlust.LT.0.) goto 400 + elseif (log_E_Straggling_equal) then +410 delta_E_Verlust = lowerE + (upperE - lowerE)*ran(seed) + if (E_Verlust+delta_E_Verlust.LT.0) goto 410 + elseif (log_E_Straggling_Lindhard) then + ! Streuung in Abhaengigkeit von mittlerer Energie in Folie: + call E_Straggling_Lindhard(Ekin-0.5*E_Verlust,m,sigmaE) +420 call Gauss_Verteilung(sigmaE,delta_E_Verlust) + if (debug_) write (lunLOG,*) ' sigmaE,delta_E_Verlust: ',sigmaE,delta_E_Verlust + if (E_Verlust+delta_E_Verlust.LT.0.) goto 420 + elseif (log_E_Straggling_Yang) then + ! Streuung in Abhaengigkeit von mittlerer Energie in Folie! + call E_Straggling_Yang(Ekin-0.5*E_Verlust,m,sigmaE) +430 call Gauss_Verteilung(sigmaE,delta_E_Verlust) + if (debug_) write (lunLOG,*) ' sigmaE,delta_E_Verlust: ',sigmaE,delta_E_Verlust + if (E_Verlust+delta_E_Verlust.LT.0.) goto 430 + endif + + if (E_Verlust+delta_E_Verlust.GE.Ekin) then + destiny = code_stopped_in_foil + goto 555 + endif + E_Verlust = E_Verlust + delta_E_Verlust + + ! help1 == Reduzierungsfaktor fuer Geschw.Betrag + help1 = sqrt( (Ekin - E_Verlust)/Ekin ) + v(1) = help1 * v(1) + v(2) = help1 * v(2) + v(3) = help1 * v(3) + v_Betrag = help1 * v_Betrag + if (debug_) write (lunLOG,*) ' Energieverlust: ',E_Verlust + endif + +c -- Winkelaufstreuung (vorerst nur Gaussverteilt): + + if (log_aufstreu) then + if (log_Meyer_F_Function) then + call throwMeyerAngle(thetaAufstreu) + else + if (log_Meyer_Gauss) then + if (log_E_Verlust) Ekin = Ekin - .5 * E_Verlust ! mittlere Energie + effRedThick = Meyer_Faktor1 * Thickness / cosd(alfa) + call g_Functions(g1,g2,effRedThick) + sigmaAufstreu = Meyer_Faktor2 / Ekin * (g1 + Meyer_Faktor3*g2) + if (debug_) then + write (lunLOG,*) ' effekt. red. Dicke: ',effRedThick + write (lunLOG,*) ' Sigma(Streuwinkel): ',sigmaAufstreu + endif + endif + + call Gauss_Verteilung_theta(sigmaAufstreu,thetaAufstreu) + endif + + st0 = sind(thetaAufstreu) + ct0 = cosd(thetaAufstreu) + phiAufstreu = 360.*ran(seed) + + v_xy = SQRT(v(1)*v(1) + v(2)*v(2)) ! v_xy stets groesser 0 + ! wegen v(1)>0 + + help1 = v(1) + help2 = v(2) + help3 = v_Betrag*st0*cosd(phiAufstreu)/v_xy + help4 = st0*sind(phiAufstreu) + + v(1) = ct0*help1 - help3*help2 - help4*help1*v(3)/v_xy + v(2) = ct0*help2 + help3*help1 - help4*help2*v(3)/v_xy + v(3) = ct0*v(3) + help4*v_xy + if (debug_) write (lunLOG,*) ' Aufstreuung: theta, phi =', + + thetaAufstreu,phiAufstreu + endif + + if (Debug_ .AND. (log_E_Verlust .OR. log_Aufstreu)) then + call Output_Debug + endif + + +c - Neutralisierung in der Folie? + + if (log_neutralize) then + if (neutral_fract(q_).EQ.-1.0) then + v_square = v(1)*v(1) + v(2)*v(2) + v(3)*v(3) + Ekin = v_square * Energie_Faktor + call chargeStateYields(Ekin,m,YieldPlus,YieldNeutral) + YieldNeutral = 100. * YieldNeutral + else + YieldNeutral = neutral_fract(q_) + endif + if (100.*ran(seed).LE.YieldNeutral) then + q = 0. + qInt = 0 + if (debug_) then + write (lunLOG,*) ' Teilchen wurde neutralisiert' + endif + nNeutral = nNeutral + 1 + else + nCharged = nCharged + 1 + endif + endif + +c::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: + + +c (...) +c4300 +c=============================================================================== + + + OPTIONS /EXTEND_SOURCE + + SUBROUTINE G_Functions(G1,G2,tau) +c ================================= + +c Diese Routine gibt in Abhaengigkeit von der reduzierten Dicke 'tau' +c Funktionswerte fuer g1 und g2 zurueck. g1 und g2 sind dabei die von +c Meyer angegebenen tabellierten Funktionen fuer die Berechnung von Halbwerts- +c breiten von Streuwinkelverteilungen. (L.Meyer, phys.stat.sol. (b) 44, 253 +c (1971)) + + IMPLICIT NONE + + real tau,g1,g2 + real tau_(26),g1_(26),g2_(26) + real help + + integer i + + DATA tau_ /0.2, 0.4, 0.6, 0.8, 1.0, 1.2, 1.4, 1.6, 1.8, 2.0, + + 2.5, 3.0, 3.5, 4.0, 4.5, 5.0, 6.0, 7.0, 8.0, 9.0, + + 10.0, 12.0, 14.0, 16.0, 18.0, 20.0 / + + DATA g1_ /0.050,0.115,0.183,0.245,0.305,0.363,0.419,0.473,0.525,0.575, + + 0.689,0.799,0.905,1.010,1.100,1.190,1.370,1.540,1.700,1.850, + + 1.990,2.270,2.540,2.800,3.050,3.290 / + DATA g2_ / 0.00,1.25,0.91,0.79,0.73,0.69,0.65,0.63,0.61,0.59, + + 0.56,0.53,0.50,0.47,0.45,0.43,0.40,0.37,0.34,0.32, + + 0.30,0.26,0.22,0.18,0.15,0.13 / + + if (tau.LT.tau_(1)) then + write(*,*) + write(*,*)'SUBROUTINE G_Functions:' + write(*,*)' Fehler bei Berechnung der g-Funktionen fuer Winkelaufstreuung:' + write(*,*)' aktuelles tau ist kleiner als kleinster Tabellenwert:' + write(*,*)' tau = ',tau + write(*,*)' tau_(1) = ',tau_(1) + write(*,*) + STOP + endif + + i = 1 + +10 i = i + 1 + if (i.EQ.27) then + write(*,*) + write(*,*)'SUBROUTINE G_Functions:' + write(*,*)' Fehler bei Berechnung der g-Funktionen fuer Winkelaufstreuung:' + write(*,*)' aktuelles tau ist groesser als groesster Tabellenwert:' + write(*,*)' tau = ',tau + write(*,*)' tau_(26) = ',tau_(26) + write(*,*) + STOP + elseif (tau.gt.tau_(i)) then + goto 10 + endif + + +c lineare Interpolation zwischen Tabellenwerten: + + help = (tau-tau_(i-1))/(tau_(i)-tau_(i-1)) + + g1 = g1_(i-1) + help*(g1_(i)-g1_(i-1)) + g2 = g2_(i-1) + help*(g2_(i)-g2_(i-1)) + + + END + + +c=============================================================================== + + options /extend_source + + subroutine Get_F_Function_Meyer(tau,Ekin) +c ========================================= + + implicit none + + real tau + real Ekin + + real thetaSchlange,thetaSchlangeMax + real theta,thetaMax,thetaStep + real f1,f2,F + + +c------------------------------------ +c - Parameter: + + real Z1, Z2 ! die atomaren Nummern von Projektil und Target +c real a0 ! Bohrscher Radius in cm + real screeningPar ! Screeningparameter 'a' in cm fuer Teilchen der + ! Kernladungszahl Z1=1 in Kohlenstoff (Z2 = 6) + ! bei Streichung von Z1 (vgl. Referenz, S. 268) + + real r0Meyer ! r0(C) berechnet aus dem screeningParameter 'a' + ! und dem ebenfalls bei Meyer angegebenem + ! Verhaeltnis a/r0=0.26 (vgl. Referenz, S. 263 oben) + real eSquare ! elektrische Ladung zum Quadrat in keV*cm + + real Pi ! die Kreiszahl + +c parameter (a0 = 5.29E-9) + parameter (Z1 = 1, Z2 = 6, ScreeningPar = 2.5764E-9) + parameter (r0Meyer = 9.909E-9, eSquare = 1.44E-10) + parameter (Pi = 3.141592654) + + real Meyer_Faktor3 + real Meyer_Faktor4 + real zzz ! 'Hilfsparameter' + real Meyer_Faktor5 + + parameter (Meyer_faktor3 = (screeningPar/r0Meyer) * (screeningPar/r0Meyer)) + parameter (Meyer_faktor4 = screeningPar / (2.*Z1*Z2*eSquare) * Pi/180.) + parameter (zzz = screeningPar / (2.*Z1*Z2*eSquare)) + parameter (Meyer_faktor5 = zzz*zzz / (8*Pi*Pi)) + +c------------------------------------ + + integer nBin,nBinMax + parameter (nBinMax=201) + real value(0:nBinMax) /0.,nBinMax*0./ + real area(nBinMax) / nBinMax*0./ + real integ(0:nBinMax) /0.,nBinMax*0./ + common /MeyerTable/ value,area,integ,thetaStep,nBin + + integer i + real rhelp + + integer HB_memsize + parameter(HB_memsize=500000) + real memory(HB_memsize) + COMMON /PAWC/ memory + + +c nur noch fuer Testzwecke: + + real fValues(203) + real fValuesFolded(203) + + integer idh + parameter (idh = 50) + + INCLUDE 'mutrack$sourcedirectory:COM_DIRS.INC' + character filename*20 ! Name der Ausgabe-Dateien + COMMON /filename/ filename + +c------------------------------------------------------------------------------- + +c Festlegen des maximalen Theta-Wertes sowie der Schrittweite: + + if (tau.LT.0.2) then + write(*,*) 'Subroutine ''Get_F_Function_Meyer'':' + write(*,*) 'Effektive Dicke ist kleiner als 0.2 => kann ich nicht ... => STOP' + call exit + elseif (tau.LE.2.) then + ! => Tabelle A + thetaSchlangeMax = 4.0 + elseif (tau.LE.8.) then + ! => Tabelle B + thetaSchlangeMax = 7.0 + elseif (tau.LE.20.) then + ! => Tabelle C + thetaSchlangeMax = 20.0 + else + write(*,*) 'Subroutine ''Get_F_Function_Meyer'':' + write(*,*) 'Effektive Dicke ist groesser als 20 => kann ich nicht ... => STOP' + call exit + endif + + thetaMax = thetaSchlangeMax / Meyer_Faktor4 / Ekin + if (thetaMax.GT.50) then + thetaStep = .5 + elseif (thetaMax.GT.25) then + thetaStep = .25 + elseif (thetaMax.GT.12.5) then + thetaStep = .125 + else + thetaStep = .0625 + endif + + +c Tabelle der F-Werte erstellen: + + nBin = 0 + do theta = thetaStep, thetaMax, thetaStep + + ! Berechne aus theta das 'reduzierte' thetaSchlange (dabei gleich + ! noch von degree bei theta in Radiant bei thetaSchlange umrechnen): + + thetaSchlange = Meyer_faktor4 * Ekin * theta + + ! Auslesen der Tabellenwerte fuer die f-Funktionen: + + call F_Functions_Meyer(tau,thetaSchlange,f1,f2) + if (thetaSchlange.EQ.-1) then + ! wir sind jenseits von thetaSchlangeMax + goto 10 + endif + + ! Berechnen der Streuintensitaet: + F = Meyer_faktor5 * Ekin*Ekin * (f1 - Meyer_faktor3*f2) + + nBin = nBin + 1 + if (nBin.GT.nBinMax) then + write(*,*) 'nBin > nBinMax => EXIT' + call exit + endif + value(nBin) = sind(theta)*F + + fValues(nBin+1) = F ! fuer Testzwecke + fValuesFolded(nBin+1) = sind(theta)*F ! fuer Testzwecke + + enddo + + +c Berechnen der Flaecheninhalte der einzelnen Kanaele sowie der Integrale: + +10 do i = 1, nBin + area(i) = (value(i)+value(i-1))/2. * thetaStep + integ(i) = integ(i-1) + area(i) + enddo + + +c Normiere totale Flaeche auf 1: + + rHelp = integ(nBin) + do i = 1, nBin + value(i) = value(i) / rHelp + area(i) = area(i) / rHelp + integ(i) = integ(i) / rHelp + enddo + + +c vorerst noch: gib Tabelle in Datei und Histogrammfile aus: + + ! Berechne die Werte fuer theta=0: + + call F_Functions_Meyer(tau,0.,f1,f2) + F = Meyer_faktor5 * Ekin*Ekin * (f1 - Meyer_faktor3*f2) + fValues(1) = F + fValuesFolded(1) = 0. + + ! Gib die Werte in das Tabellenfile aus: + +c theta = 0. +c open (10,file=outDir//':'//filename//'.TAB',status='NEW') +c do i = 1, nBin+1 +c write(10,*) theta, fValues(i), fValuesFolded(i) +c theta = theta + thetaStep +c enddo +c close (10) + + + ! Buchen und Fuellen der Histogramme: + + call HBOOK1(idh,'F',nBin+1,-0.5*thetaStep,(real(nBin)+0.5)*thetaStep,0.) + call HPAK(idh,fValues) + call HRPUT(idh,outDir//':'//filename//'.RZ','N') + call HDELET(idh) + + call HBOOK1(idh+1,'F*sin([q])',nBin+1,-0.5*thetaStep,(real(nBin)+0.5)*thetaStep,0.) + call HPAK(idh+1,fValuesFolded) + call HRPUT(idh+1,outDir//':'//filename//'.RZ','U') + call HDELET(idh+1) + + + END + + +c=============================================================================== + + options /extend_source + + subroutine throwMeyerAngle (theta) +c ================================== + + implicit none + + real lowerbound,y1,y2,f,root,radiant,fraction + integer bin,nBin + integer nBinMax + parameter (nBinMax=201) + + real theta,thetaStep + real value(0:nBinMax) /0.,nBinMax*0./ + real area(nBinMax) / nBinMax*0./ + real integ(0:nBinMax) /0.,nBinMax*0./ + common /MeyerTable/ value,area,integ,thetaStep,nBin + + real rhelp + + real random + integer seed + common /seed/ seed + + +c bin: Nummer des Bins, innerhalb dessen das Integral den Wert von +c random erreicht oder ueberschreitet: + + random = ran(seed) + + bin = 1 + do while (random.GT.integ(bin)) + bin = bin + 1 + if (bin.GT.nBin) then + write(*,*) 'error 1' + call exit + endif + enddo + + fraction = (random-integ(bin-1)) / (integ(bin)-integ(bin-1)) + y1 = value(bin-1) + y2 = value(bin) + f = thetaStep / (y2-y1) + rHelp = y1*f + + radiant = rHelp*rHelp + fraction*thetaStep*(y1+y2)*f + root = SQRT(radiant) + lowerBound = real(bin-1)*thetaStep + if (f.GT.0) then + theta = lowerBound - rHelp + root + else + theta = lowerBound - rHelp - root + endif + + + END + + +c=============================================================================== + + options /extend_source + + subroutine F_Functions_Meyer(tau,thetaSchlange,f1,f2) +c ===================================================== + + implicit none + +c Diese Routine gibt in Abhaengigkeit von 'thetaSchlange' und 'tau' +c Funktionswerte fuer f1 und f2 zurueck. f1 und f2 entsprechen dabei den +c bei Meyer angegebenen Funktion gleichen Namens. Die in dieser Routine +c verwendeten Tabellen sind eben dieser Referenz entnommen: +c L.Meyer, phys.stat.sol. (b) 44, 253 (1971) + + real tau,thetaSchlange + real f1, f2, f1_(2), f2_(2) + + integer column_,column,row + + integer iColumn + real weightCol, weightRow + +c------------------------------------------------------------------------------- + +c die Tabellendaten der Referenz (Tabellen 2 und 3): + + integer nColumn + parameter (nColumn = 25) + real tau_(nColumn) / + + 0.2, 0.4, 0.6, 0.8, 1.0, 1.2, 1.4, 1.6, 1.8, 2.0, 2.5, 3.0, + + 3.5, 4.0, 4.5, 5.0, 6.0, 7.0, 8.0, 10., 12., 14., 16., 18., 20. / + + integer nRowA + parameter (nRowA = 25) + real thetaSchlangeA(nRowA) / + + .00, .05, .10, .15, .20, .25, .30, .35, .40, .45, .50, .60, + + .70, .80, .90, 1.0, 1.2, 1.4, 1.6, 1.8, 2.0, 2.5, 3.0, 3.5, 4.0 / + + integer nRowB + parameter (nRowB = 24) + real thetaSchlangeB(nRowB) / + + 0.0, 0.2, 0.4, 0.5, 0.6, 0.8, 1.0, 1.2, 1.4, 1.5, 1.6, 1.8, + + 2.0, 2.2, 2.4, 2.6, 2.8, 3.0, 3.5, 4.0, 4.5, 5.0, 6.0, 7.0 / + + integer nRowC + parameter (nRowC = 24) + real thetaSchlangeC(nRowC) / + + 0.0, 0.5, 1.0, 1.5, 2.0, 2.5, 3.0, 3.5, 4.0, 4.5, 5.0, 6.0, + + 7.0, 8.0, 9.0, 10., 11., 12., 13., 14., 15., 16., 18., 20. / + + + real f1_A(9,nRowA) + + /1.69E+2,4.55E+1,2.11E+1,1.25E+1,8.48E+0,6.21E+0,4.80E+0,3.86E+0,3.20E+0, + + 9.82E+1,3.72E+1,1.97E+1,1.20E+1,8.27E+0,6.11E+0,4.74E+0,3.83E+0,3.17E+0, + + 3.96E+1,2.58E+1,1.65E+1,1.09E+1,7.73E+0,5.82E+0,4.58E+0,3.72E+0,3.10E+0, + + 1.76E+1,1.58E+1,1.27E+1,9.26E+0,6.93E+0,5.38E+0,4.31E+0,3.55E+0,2.99E+0, + + 8.62E+0,1.01E+1,9.45E+0,7.58E+0,6.02E+0,4.85E+0,3.98E+0,3.33E+0,2.84E+0, + + 4.65E+0,6.55E+0,6.91E+0,6.06E+0,5.11E+0,4.28E+0,3.62E+0,3.08E+0,2.66E+0, + + 2.74E+0,4.45E+0,5.03E+0,4.78E+0,4.27E+0,3.72E+0,3.23E+0,2.82E+0,2.47E+0, + + 1.77E+0,3.02E+0,3.71E+0,3.76E+0,3.53E+0,3.20E+0,2.86E+0,2.55E+0,2.27E+0, + + 1.22E+0,2.19E+0,2.78E+0,2.96E+0,2.91E+0,2.73E+0,2.51E+0,2.28E+0,2.07E+0, + + 8.82E-1,1.59E+0,2.12E+0,2.35E+0,2.39E+0,2.32E+0,2.19E+0,2.03E+0,1.87E+0, + + 6.55E-1,1.20E+0,1.64E+0,1.88E+0,1.97E+0,1.96E+0,1.90E+0,1.79E+0,1.68E+0, + + 3.80E-1,7.15E-1,1.01E+0,1.22E+0,1.35E+0,1.40E+0,1.41E+0,1.39E+0,1.34E+0, + + 2.26E-1,4.45E-1,6.44E-1,8.08E-1,9.28E-1,1.01E+0,1.05E+0,1.06E+0,1.05E+0, + + 1.39E-1,2.80E-1,4.21E-1,5.45E-1,6.46E-1,7.22E-1,7.75E-1,8.07E-1,8.21E-1, + + 8.22E-2,1.76E-1,2.78E-1,3.71E-1,4.53E-1,5.21E-1,5.74E-1,6.12E-1,6.37E-1, + + 5.04E-2,1.11E-1,1.86E-1,2.57E-1,3.22E-1,3.79E-1,4.27E-1,4.65E-1,4.94E-1, + + 2.51E-2,5.60E-2,9.24E-2,1.31E-1,1.69E-1,2.02E-1,2.40E-1,2.71E-1,2.97E-1, + + 1.52E-2,3.20E-2,5.08E-2,7.23E-2,9.51E-2,1.18E-1,1.41E-1,1.63E-1,1.83E-1, + + 1.03E-2,2.05E-2,3.22E-2,4.55E-2,6.01E-2,7.53E-2,9.02E-2,1.05E-1,1.19E-1, + + 8.80E-3,1.48E-2,2.25E-2,3.13E-2,4.01E-2,5.03E-2,6.01E-2,7.01E-2,8.01E-2, + + 6.10E-3,1.15E-2,1.71E-2,2.28E-2,2.89E-2,3.52E-2,4.18E-2,4.86E-2,5.55E-2, + + 0.00 ,0.00 ,0.00 ,0.00 ,0.00 ,1.71E-2,1.98E-2,2.28E-2,2.58E-2, + + 0.00 ,0.00 ,0.00 ,0.00 ,0.00 ,8.90E-3,1.02E-2,1.16E-2,1.31E-2, + + 0.00 ,0.00 ,0.00 ,0.00 ,0.00 ,4.90E-3,5.70E-3,6.40E-3,7.20E-3, + + 0.00 ,0.00 ,0.00 ,0.00 ,0.00 ,2.90E-3,3.40E-3,3.90E-3,4.30E-3/ + + real f1_B(9,nRowB) + + /2.71E+0,1.92E+0,1.46E+0,1.16E+0,9.52E-1,8.03E-1,6.90E-1,5.32E-1,4.28E-1, + + 2.45E+0,1.79E+0,1.39E+0,1.12E+0,9.23E-1,7.82E-1,6.75E-1,5.23E-1,4.23E-1, + + 1.87E+0,1.48E+0,1.20E+0,9.96E-1,8.42E-1,7.24E-1,6.32E-1,4.98E-1,4.07E-1, + + 1.56E+0,1.30E+0,1.09E+0,9.19E-1,7.89E-1,6.86E-1,6.03E-1,4.80E-1,3.95E-1, + + 1.28E+0,1.11E+0,9.62E-1,8.33E-1,7.27E-1,6.40E-1,5.69E-1,4.59E-1,3.81E-1, + + 8.23E-1,7.90E-1,7.29E-1,6.64E-1,6.01E-1,5.44E-1,4.94E-1,4.12E-1,3.49E-1, + + 5.14E-1,5.36E-1,5.29E-1,5.07E-1,4.78E-1,4.47E-1,4.16E-1,3.60E-1,3.13E-1, + + 3.19E-1,3.58E-1,3.76E-1,3.78E-1,3.70E-1,3.57E-1,3.45E-1,3.08E-1,2.76E-1, + + 2.02E-1,2.40E-1,2.64E-1,2.77E-1,2.82E-1,2.80E-1,2.65E-1,2.59E-1,2.39E-1, + + 1.67E-1,1.96E-1,2.20E-1,2.36E-1,2.44E-1,2.47E-1,2.45E-1,2.35E-1,2.21E-1, + + 1.33E-1,1.61E-1,1.85E-1,2.02E-1,2.12E-1,2.18E-1,2.18E-1,2.14E-1,2.03E-1, + + 8.99E-2,1.12E-1,1.32E-1,1.48E-1,1.59E-1,1.67E-1,1.68E-1,1.75E-1,1.72E-1, + + 6.24E-2,7.94E-2,9.50E-2,1.09E-1,1.20E-1,1.29E-1,1.35E-1,1.42E-1,1.43E-1, + + 4.55E-2,5.74E-2,6.98E-2,8.11E-2,9.09E-2,9.92E-2,1.06E-1,1.15E-1,1.19E-1, + + 3.35E-2,4.22E-2,5.19E-2,6.11E-2,6.95E-2,7.69E-2,8.33E-2,9.28E-2,9.85E-2, + + 2.50E-2,3.16E-2,3.92E-2,4.66E-2,5.35E-2,6.00E-2,6.57E-2,7.49E-2,8.13E-2, + + 1.90E-2,2.40E-2,2.99E-2,3.58E-2,4.16E-2,4.70E-2,5.20E-2,6.05E-2,6.70E-2, + + 1.47E-2,1.86E-2,2.32E-2,2.79E-2,3.25E-2,3.70E-2,4.12E-2,4.89E-2,5.51E-2, + + 8.10E-3,1.04E-2,1.30E-2,1.57E-2,1.84E-2,2.12E-2,2.40E-2,2.93E-2,3.42E-2, + + 4.80E-3,6.20E-3,7.70E-3,9.30E-3,1.09E-2,1.26E-2,1.44E-2,1.79E-2,2.14E-2, + + 2.80E-3,3.80E-3,4.70E-3,5.70E-3,6.70E-3,7.50E-3,8.90E-3,1.13E-2,1.36E-2, + + 1.70E-3,2.30E-3,2.90E-3,3.60E-3,4.20E-3,4.90E-3,5.60E-3,7.20E-3,8.80E-3, + + 0.00 ,0.00 ,0.00 ,0.00 ,0.00 ,0.00 ,2.00E-3,2.80E-3,3.50E-3, + + 0.00 ,0.00 ,0.00 ,0.00 ,0.00 ,0.00 ,8.80E-4,1.20E-3,1.60E-3/ + + real f1_C(7,nRowC) + + /3.65E-1,2.62E-1,2.05E-1,1.67E-1,1.41E-1,1.21E-1,1.05E-1, + + 3.33E-1,2.50E-1,1.95E-1,1.61E-1,1.36E-1,1.18E-1,1.03E-1, + + 2.75E-1,2.18E-1,1.76E-1,1.48E-1,1.27E-1,1.11E-1,9.80E-2, + + 2.04E-1,1.75E-1,1.50E-1,1.29E-1,1.13E-1,1.01E-1,9.00E-2, + + 1.41E-1,1.31E-1,1.19E-1,1.08E-1,9.71E-2,8.88E-2,8.01E-2, + + 9.32E-2,9.42E-2,9.10E-2,8.75E-2,8.00E-2,7.44E-2,6.91E-2, + + 5.98E-2,6.52E-2,6.72E-2,6.62E-2,6.40E-2,6.12E-2,5.82E-2, + + 3.83E-2,4.45E-2,4.80E-2,4.96E-2,4.98E-2,4.90E-2,4.77E-2, + + 2.46E-2,3.01E-2,3.40E-2,3.65E-2,3.79E-2,3.84E-2,3.83E-2, + + 1.59E-2,2.03E-2,2.39E-2,2.66E-2,2.85E-2,2.97E-2,3.04E-2, + + 1.04E-2,1.37E-2,1.66E-2,1.92E-2,2.12E-2,2.27E-2,2.37E-2, + + 4.39E-3,6.26E-3,8.26E-3,9.96E-3,1.15E-2,1.29E-2,1.41E-2, + + 2.06E-3,3.02E-3,4.24E-3,5.28E-3,6.32E-3,7.32E-3,8.26E-3, + + 1.21E-3,1.69E-3,2.24E-3,2.85E-3,3.50E-3,4.16E-3,4.82E-3, + + 8.50E-4,1.10E-3,1.38E-3,1.65E-3,2.03E-3,2.45E-3,2.88E-3, + + 5.90E-4,7.40E-4,8.50E-4,9.90E-4,1.23E-3,1.49E-3,1.71E-3, + + 3.90E-4,4.60E-4,5.20E-4,6.30E-4,7.65E-4,9.65E-4,1.12E-3, + + 2.40E-4,2.70E-4,3.10E-4,3.98E-4,4.97E-4,6.03E-4,7.18E-4, + + 1.50E-4,1.70E-4,2.15E-4,2.70E-4,3.35E-4,4.35E-4,5.00E-4, + + 1.00E-4,1.20E-4,1.46E-4,1.90E-4,2.40E-4,2.88E-4,3.43E-4, + + 0.00 ,0.00 ,1.04E-4,1.41E-4,1.80E-4,2.10E-4,2.50E-4, + + 0.00 ,0.00 ,8.20E-5,1.06E-4,1.38E-4,1.58E-4,1.85E-4, + + 0.00 ,0.00 ,5.40E-5,7.00E-5,8.60E-5,1.03E-4,1.20E-4, + + 0.00 ,0.00 ,4.20E-5,5.40E-5,6.50E-5,7.70E-5,8.80E-5/ + + real f2_A(9,nRowA) + + / 3.52E+3, 3.27E+2, 9.08E+1, 3.85E+1, 2.00E+1, 1.18E+1, 7.55E+0, 5.16E+0, 3.71E+0, + + 2.58E+2, 1.63E+2, 7.30E+1, 3.42E+1, 1.85E+1, 1.11E+1, 7.18E+0, 4.96E+0, 3.59E+0, + + -1.12E+2, 4.84E+0, 3.56E+1, 2.34E+1, 1.45E+1, 9.33E+0, 6.37E+0, 4.51E+0, 3.32E+0, + + -5.60E+1,-1.12E+1, 9.87E+0, 1.24E+1, 9.59E+0, 7.01E+0, 5.16E+0, 3.83E+0, 2.91E+0, + + -2.13E+1,-1.22E+1,-2.23E+0, 3.88E+0, 5.15E+0, 4.65E+0, 3.87E+0, 3.12E+0, 2.45E+0, + + -8.25E+0,-9.58E+0,-5.59E+0,-1.40E+0, 1.76E+0, 2.71E+0, 2.71E+0, 2.35E+0, 1.95E+0, + + -3.22E+0,-6.12E+0,-5.28E+0,-2.87E+0,-1.92E-1, 1.32E+0, 1.69E+0, 1.74E+0, 1.48E+0, + + -1.11E+0,-3.40E+0,-4.12E+0,-3.08E+0,-6.30E-1, 3.60E-1, 9.20E-1, 1.03E+0, 1.04E+0, + + -2.27E-1,-2.00E+0,-2.93E+0,-2.69E+0,-1.48E+0,-3.14E-1, 2.69E-1, 5.28E-1, 6.09E-1, + + 1.54E-1,-1.09E+0,-2.10E+0,-2.15E+0,-1.47E+0,-6.77E-1,-1.80E-1, 1.08E-1, 2.70E-1, + + 3.28E-1,-6.30E-1,-1.50E+0,-1.68E+0,-1.34E+0,-8.43E-1,-4.60E-1,-1.85E-1,-4.67E-3, + + 3.32E-1,-2.06E-1,-7.32E-1,-9.90E-1,-9.42E-1,-8.20E-1,-6.06E-1,-4.51E-1,-3.01E-1, + + 2.72E-1,-3.34E-2,-3.49E-1,-5.65E-1,-6.03E-1,-5.79E-1,-5.05E-1,-4.31E-1,-3.45E-1, + + 2.02E-1, 2.80E-2,-1.54E-1,-3.00E-1,-3.59E-1,-3.76E-1,-4.60E-1,-3.40E-1,-3.08E-1, + + 1.38E-1, 4.84E-2,-5.56E-2,-1.44E-1,-2.04E-1,-2.39E-1,-2.54E-1,-2.49E-1,-2.48E-1, + + 9.47E-2, 4.86E-2,-1.08E-2,-6.44E-2,-1.02E-1,-1.34E-1,-1.62E-1,-1.79E-1,-1.87E-1, + + 5.33E-2, 3.71E-2, 1.85E-2, 1.63E-3,-1.69E-2,-3.69E-2,-5.66E-2,-7.78E-2,-9.33E-2, + + 3.38E-2, 2.40E-2, 1.62E-2, 9.90E-3, 3.76E-3,-4.93E-3,-1.66E-2,-3.05E-2,-4.22E-2, + + 2.12E-2, 1.56E-2, 1.05E-2, 7.80E-3, 7.92E-3, 6.30E-3, 3.20E-4,-8.50E-3,-1.66E-2, + + 1.40E-2, 9.20E-3, 5.30E-3, 4.70E-3, 6.31E-3, 8.40E-3, 5.30E-3, 8.80E-4,-3.30E-3, + + 9.20E-3, 4.70E-3, 1.70E-3, 2.60E-3, 4.49E-3, 6.60E-3, 6.00E-3, 4.70E-3, 2.80E-3, + + 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , + + 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , + + 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , + + 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00 / + + real f2_B(9,nRowB) + + / 2.75E+0, 1.94E+0, 9.13E-1, 6.06E-1, 4.26E-1, 3.14E-1, 2.40E-1, 1.51E-1, 1.03E-1, + + 1.94E+0, 1.16E+0, 7.56E-1, 5.26E-1, 3.81E-1, 2.87E-1, 2.23E-1, 1.43E-1, 9.78E-2, + + 5.85E-1, 5.04E-1, 4.10E-1, 3.30E-1, 2.69E-1, 2.17E-1, 1.78E-1, 1.22E-1, 8.71E-2, + + 7.83E-2, 2.00E-1, 2.35E-1, 2.19E-1, 1.97E-1, 1.73E-1, 1.48E-1, 1.08E-1, 7.93E-2, + + -1.82E-1, 1.56E-2, 1.04E-1, 1.36E-1, 1.38E-1, 1.31E-1, 1.19E-1, 9.46E-2, 7.19E-2, + + -2.71E-1,-1.66E-1,-7.29E-2,-4.74E-3, 3.60E-2, 5.50E-2, 6.28E-2, 5.98E-2, 5.09E-2, + + -1.87E-1,-1.58E-1,-1.09E-1,-5.80E-2,-2.03E-2, 2.48E-3, 1.99E-2, 3.36E-2, 3.27E-2, + + -1.01E-1,-1.05E-1,-8.95E-2,-6.63E-2,-3.93E-2,-2.38E-2,-9.22E-3, 8.47E-3, 1.52E-2, + + -5.19E-2,-6.47E-2,-6.51E-2,-5.62E-2,-4.51E-2,-3.49E-2,-2.45E-2,-8.19E-3, 2.05E-3, + + -3.68E-2,-4.89E-2,-5.36E-2,-5.06E-2,-4.27E-2,-3.65E-2,-2.80E-2,-1.33E-2,-3.47E-3, + + -2.33E-2,-3.69E-2,-4.41E-2,-4.38E-2,-3.97E-2,-3.50E-2,-2.88E-2,-1.60E-2,-6.68E-3, + + -8.76E-3,-2.07E-2,-2.90E-2,-3.17E-2,-3.09E-2,-2.92E-2,-2.63E-2,-1.79E-2,-1.03E-2, + + -1.20E-3,-1.11E-2,-1.90E-2,-2.20E-2,-2.32E-2,-2.24E-2,-2.10E-2,-1.66E-2,-1.11E-2, + + 1.72E-3,-4.82E-3,-1.02E-2,-1.42E-2,-1.65E-2,-1.66E-2,-1.60E-2,-1.39E-2,-1.09E-2, + + 2.68E-3,-1.18E-3,-5.19E-3,-8.30E-5,-1.01E-2,-1.14E-2,-1.16E-2,-1.16E-2,-9.99E-3, + + 2.81E-3, 8.21E-4,-1.96E-3,-3.99E-3,-5.89E-3,-7.13E-3,-8.15E-3,-9.05E-3,-8.60E-3, + + 2.61E-3, 1.35E-3,-2.99E-4,-1.79E-3,-3.12E-3,-4.44E-3,-5.61E-3,-7.01E-3,-7.27E-3, + + 2.06E-3, 1.45E-3, 4.64E-4,-5.97E-4,-1.71E-3,-2.79E-3,-3.84E-3,-5.29E-3,-5.90E-3, + + 1.07E-3, 9.39E-4, 8.22E-4, 3.58E-4,-1.15E-4,-6.60E-4,-1.18E-3,-2.15E-3,-2.88E-3, + + 4.97E-4, 5.46E-4, 6.15E-4, 5.56E-4, 3.14E-4, 9.80E-5,-1.30E-4,-5.98E-4,-1.07E-4, + + 1.85E-4, 3.11E-4, 4.25E-4, 4.08E-4, 3.63E-4, 3.04E-4, 2.24E-4, 2.80E-5,-2.10E-4, + + 4.80E-5, 1.48E-4, 2.44E-4, 2.80E-4, 3.01E-4, 3.11E-4, 3.13E-4, 2.40E-4, 1.10E-4, + + 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , 1.39E-4, 1.80E-4, 1.80E-4, + + 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , 4.38E-5, 7.30E-5, 8.40E-5/ + + real f2_C(7,nRowC) + + / 7.36E-2, 4.21E-2, 2.69E-2, 1.83E-2, 1.34E-2, 1.01E-2, 7.88E-3, + + 5.79E-2, 3.61E-2, 2.34E-2, 1.64E-2, 1.21E-2, 9.26E-3, 7.28E-3, + + 2.94E-2, 2.17E-2, 1.60E-2, 1.23E-2, 9.49E-3, 7.45E-3, 5.95E-3, + + 2.30E-3, 7.07E-3, 7.76E-3, 7.02E-3, 6.13E-3, 5.17E-3, 4.34E-3, + + -7.50E-3,-2.00E-3, 9.93E-4, 2.36E-3, 2.82E-3, 2.86E-3, 2.72E-3, + + -8.27E-3,-5.37E-3,-2.58E-3,-7.96E-4, 3.75E-4, 9.71E-4, 1.28E-3, + + -5.79E-3,-5.12E-3,-3.86E-3,-2.46E-3,-1.20E-3,-3.74E-4, 1.74E-4, + + -3.26E-3,-3.43E-3,-3.26E-3,-2.68E-3,-1.84E-3,-1.12E-3,-4.54E-4, + + -1.46E-3,-1.49E-3,-2.20E-3,-2.18E-3,-1.85E-3,-1.40E-3,-8.15E-4, + + -4.29E-4,-9.44E-4,-1.29E-3,-1.50E-3,-1.51E-3,-1.36E-3,-9.57E-4, + + -3.30E-5,-3.66E-4,-6.78E-4,-9.38E-4,-1.09E-3,-1.09E-3,-9.56E-4, + + 1.50E-4, 3.10E-5,-1.38E-4,-3.06E-4,-4.67E-4,-5.48E-4,-6.08E-4, + + 1.00E-4, 8.50E-5, 2.30E-5,-6.60E-5,-1.58E-4,-2.40E-4,-3.05E-4, + + 5.40E-5, 6.50E-5, 4.90E-5, 1.20E-5,-3.60E-5,-8.90E-5,-1.31E-4, + + 2.90E-5, 4.30E-5, 4.40E-5, 2.90E-5, 5.10E-6,-2.20E-5,-4.80E-5, + + 1.40E-5, 2.40E-5, 2.80E-5, 2.60E-5, 1.90E-5, 7.50E-6,-1.10E-5, + + 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , + + 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , + + 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , + + 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , + + 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , + + 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , + + 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , + + 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00 / + + +c=============================================================================== + +c Bestimme, welche Reihen der Tabellen fuer Interpolation benoetigt werden: + + if (tau.LT.tau_(1)) then + write(*,*) 'tau is less than the lowest tabulated value:' + write(*,*) 'tau = ',tau + write(*,*) 'minimum = ',tau_(1) + call exit + elseif (tau.GT.tau_(nColumn)) then + write(*,*) 'tau is greater than the highest tabulated value:' + write(*,*) 'tau = ',tau + write(*,*) 'maximum = ',tau_(nColumn) + call exit + endif + + column_ = 2 + do while (tau.GT.tau_(column_)) + column_ = column_ + 1 + enddo + ! Das Gewicht der Reihe zu groesserem Tau: + weightCol = (tau-tau_(column_-1)) / (tau_(column_)-tau_(column_-1)) + + +c Besorge fuer gegebenes 'thetaSchlange' die interpolierten f1- und f2 -Werte +c der beiden relevanten Reihen: +c iColumn = 1 => Reihe mit hoeherem Index +c iColumn = 2 => Reihe mit kleinerem Index + + + iColumn = 1 + + +5 continue + + if (column_.LE.9) then ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ! Werte aus 1. Tabelle: 0.2 <= tau <= 1.8 + + column = column_ + + if (thetaSchlange.LT.thetaSchlangeA(1)) then + write(*,*) 'thetaSchlange is less than the lowest tabulated value in table 1:' + write(*,*) 'thetaSchlange = ',thetaSchlange + write(*,*) 'minimum = ',thetaSchlangeA(1) + call exit + elseif (thetaSchlange.GT.thetaSchlangeA(nRowA)) then +c write(*,*) 'thetaSchlange is greater than the highest tabulated value in table 1:' +c write(*,*) 'thetaSchlange = ',thetaSchlange +c write(*,*) 'maximum = ',thetaSchlangeA(nRowA) +c call exit + thetaSchlange = -1. + RETURN + endif + + row = 2 + do while (thetaSchlange.GT.thetaSchlangeA(row)) + row = row + 1 + enddo + ! Gewicht des Tabellenwertes zu groesseren ThetaSchlange: + weightRow = (thetaSchlange-thetaSchlangeA(row-1)) / + + (thetaSchlangeA(row)-thetaSchlangeA(row-1)) + + f1_(iColumn) = (1.-weightRow) * f1_A(column,row-1) + + + weightRow * f1_A(column,row) + f2_(iColumn) = (1.-weightRow) * f2_A(column,row-1) + + + weightRow * f2_A(column,row) + + + elseif (column_.LE.18) then ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ! Werte aus 2. Tabelle: 2.0 <= tau <= 7.0 + + column = column_ - 9 + + if (thetaSchlange.LT.thetaSchlangeB(1)) then + write(*,*) 'thetaSchlange is less than the lowest tabulated value in table 1:' + write(*,*) 'thetaSchlange = ',thetaSchlange + write(*,*) 'minimum = ',thetaSchlangeB(1) + call exit + elseif (thetaSchlange.GT.thetaSchlangeB(nRowB)) then +c write(*,*) 'thetaSchlange is greater than the highest tabulated value in table 1:' +c write(*,*) 'thetaSchlange = ',thetaSchlange +c write(*,*) 'maximum = ',thetaSchlangeB(nRowB) +c call exit + thetaSchlange = -1. + RETURN + endif + + row = 2 + do while (thetaSchlange.GT.thetaSchlangeB(row)) + row = row + 1 + enddo + ! Gewicht des Tabellenwertes zu groesseren ThetaSchlange: + weightRow = (thetaSchlange-thetaSchlangeB(row-1)) / + + (thetaSchlangeB(row)-thetaSchlangeB(row-1)) + + f1_(iColumn) = (1.-weightRow) * f1_B(column,row-1) + + + weightRow * f1_B(column,row) + f2_(iColumn) = (1.-weightRow) * f2_B(column,row-1) + + + weightRow * f2_B(column,row) + + + else ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ! Werte aus 3. Tabelle: 8.0 <= tau <= 20. + + column = column_ - 18 + + if (thetaSchlange.LT.thetaSchlangeC(1)) then + write(*,*) 'thetaSchlange is less than the lowest tabulated value in table 1:' + write(*,*) 'thetaSchlange = ',thetaSchlange + write(*,*) 'minimum = ',thetaSchlangeC(1) + call exit + elseif (thetaSchlange.GT.thetaSchlangeC(nRowC)) then +c write(*,*) 'thetaSchlange is greater than the highest tabulated value in table 1:' +c write(*,*) 'thetaSchlange = ',thetaSchlange +c write(*,*) 'maximum = ',thetaSchlangeC(nRowC) +c call exit + thetaSchlange = -1. + RETURN + endif + + row = 2 + do while (thetaSchlange.GT.thetaSchlangeC(row)) + row = row + 1 + enddo + ! Gewicht des Tabellenwertes zu groesseren ThetaSchlange: + weightRow = (thetaSchlange-thetaSchlangeC(row-1)) / + + (thetaSchlangeC(row)-thetaSchlangeC(row-1)) + + f1_(iColumn) = (1.-weightRow) * f1_C(column,row-1) + + + weightRow * f1_C(column,row) + f2_(iColumn) = (1.-weightRow) * f2_C(column,row-1) + + + weightRow * f2_C(column,row) + + + endif ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + + if (iColumn.EQ.1) then + column_ = column_ - 1 + iColumn = 2 + goto 5 + endif + + f1 = weightCol*f1_(1) + (1.-weightCol)*f1_(2) + f2 = weightCol*f2_(1) + (1.-weightCol)*f2_(2) + + + END + + +c=============================================================================== +