From 277293fc404080757fca55fc91f38ac97aefcce6 Mon Sep 17 00:00:00 2001 From: paraiso Date: Fri, 11 Nov 2005 12:35:21 +0000 Subject: [PATCH] Added to repository --- geant4/LEMuSR/GNUmakefile | 71 + geant4/LEMuSR/LEMuSR.cc | 179 + 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/gplmac | 6 + geant4/LEMuSR/MEYER/gplmac~ | 6 + geant4/LEMuSR/MEYER/meyer.cc | 888 +++ geant4/LEMuSR/MEYER/meyer.cc~ | 888 +++ geant4/LEMuSR/MEYER/meyer.for | 364 ++ geant4/LEMuSR/MEYER/meyer.for~ | 367 ++ geant4/LEMuSR/MEYER/meyer.h | 27 + geant4/LEMuSR/MEYER/meyer.h~ | 27 + geant4/LEMuSR/MEYER/mk.sh | 1 + geant4/LEMuSR/MEYER/mtest.for | 698 +++ geant4/LEMuSR/MEYER/mtest.for~ | 691 +++ geant4/LEMuSR/MEYER/mutrack.for | 5466 +++++++++++++++++ geant4/LEMuSR/MEYER/testmeyer.cc | 195 + geant4/LEMuSR/MEYER/testmeyer.cc~ | 194 + 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 ++++ geant4/LEMuSR/MEYER/txt.for~ | 1156 ++++ geant4/LEMuSR/YIELDS/GNUmakefile | 67 + geant4/LEMuSR/YIELDS/a.out | Bin 0 -> 12872 bytes geant4/LEMuSR/YIELDS/fig.eps | 768 +++ geant4/LEMuSR/YIELDS/fig.gif | 768 +++ geant4/LEMuSR/YIELDS/fig.pdf | Bin 0 -> 9499 bytes geant4/LEMuSR/YIELDS/gonin | Bin 0 -> 12155 bytes geant4/LEMuSR/YIELDS/gonin$ | Bin 0 -> 11813 bytes geant4/LEMuSR/YIELDS/gonin.cc | 91 + geant4/LEMuSR/YIELDS/gonin.cc~ | 91 + geant4/LEMuSR/YIELDS/macro.c | 11 + geant4/LEMuSR/YIELDS/macro.c~ | 9 + geant4/LEMuSR/YIELDS/run | 3 + geant4/LEMuSR/YIELDS/script.c | 42 + geant4/LEMuSR/YIELDS/test.txt | 99 + geant4/LEMuSR/YIELDS/test2.txt | 99 + geant4/LEMuSR/YIELDS/test4.txt | 99 + geant4/LEMuSR/YIELDS/test5.txt | 399 ++ geant4/LEMuSR/YIELDS/test6.txt | 399 ++ geant4/LEMuSR/YIELDS/ycorr.eps | 658 ++ geant4/LEMuSR/YIELDS/ycorr.pdf | Bin 0 -> 10843 bytes geant4/LEMuSR/YIELDS/ycorrected.eps | 1723 ++++++ geant4/LEMuSR/YIELDS/ycorrected.pdf | Bin 0 -> 17711 bytes geant4/LEMuSR/YIELDS/yields.cc | 102 + geant4/LEMuSR/YIELDS/yields.cc~ | 103 + geant4/LEMuSR/YIELDS/yields.eps | 274 + geant4/LEMuSR/YIELDS/yields.for | 95 + geant4/LEMuSR/YIELDS/yields.h | 26 + geant4/LEMuSR/YIELDS/yields.h~ | 27 + geant4/LEMuSR/YIELDS/yields.jpg | Bin 0 -> 101561 bytes geant4/LEMuSR/YIELDS/yields1.bmp | Bin 0 -> 3736374 bytes geant4/LEMuSR/YIELDS/yields2.eps | 768 +++ geant4/LEMuSR/YIELDS/yields3.eps | 976 +++ geant4/LEMuSR/YIELDS/yieldst.eps | 770 +++ geant4/LEMuSR/YIELDS/ytest.eps | 733 +++ geant4/LEMuSR/YIELDS/ytest.pdf | Bin 0 -> 6198 bytes geant4/LEMuSR/YIELDS/ytestlog.eps | 724 +++ geant4/LEMuSR/YIELDS/ytestlog.pdf | Bin 0 -> 5959 bytes geant4/LEMuSR/allmk.sh | 18 + geant4/LEMuSR/asym.sh | 13 + geant4/LEMuSR/dawn.sh | 4 + geant4/LEMuSR/field.sh | 10 + geant4/LEMuSR/focal.sh | 11 + geant4/LEMuSR/include/AsymCheck.hh | 139 + geant4/LEMuSR/include/FieldCheck.hh | 138 + geant4/LEMuSR/include/FocalLengthTest.hh | 132 + .../LEMuSR/include/G4AtRestSpinPrecession.hh | 57 + geant4/LEMuSR/include/G4DecayWithSpin.hh | 69 + .../include/G4ParticleChangeForAtRestSP.hh | 45 + .../include/LEMuSRAtRestSpinRotation.hh | 55 + geant4/LEMuSR/include/LEMuSRCryoField.hh | 32 + geant4/LEMuSR/include/LEMuSRCryoHit.hh | 86 + geant4/LEMuSR/include/LEMuSRCryoSD.hh | 88 + geant4/LEMuSR/include/LEMuSRCylVector.hh | 20 + geant4/LEMuSR/include/LEMuSRDecay.hh | 34 + geant4/LEMuSR/include/LEMuSRDepolarize.hh | 88 + .../include/LEMuSRDetectorConstruction.hh | 518 ++ .../LEMuSR/include/LEMuSRDetectorMessenger.hh | 85 + geant4/LEMuSR/include/LEMuSREMPhysics.hh | 61 + geant4/LEMuSR/include/LEMuSRElFieldMix.hh | 70 + geant4/LEMuSR/include/LEMuSRElMagField.hh | 43 + .../LEMuSR/include/LEMuSRElMag_SpinEqRhs.hh | 41 + geant4/LEMuSR/include/LEMuSRElectricField.hh | 81 + geant4/LEMuSR/include/LEMuSRElectricField.hh~ | 81 + .../include/LEMuSREqMagElectricField.hh | 82 + geant4/LEMuSR/include/LEMuSREventAction.hh | 97 + geant4/LEMuSR/include/LEMuSRGeneralPhysics.hh | 46 + geant4/LEMuSR/include/LEMuSRHadronPhysics.hh | 322 + geant4/LEMuSR/include/LEMuSRIonPhysics.hh | 80 + geant4/LEMuSR/include/LEMuSRMSC.hh | 227 + geant4/LEMuSR/include/LEMuSRMSC.icc | 97 + geant4/LEMuSR/include/LEMuSRMUONIUM.hh | 81 + geant4/LEMuSR/include/LEMuSRMUONIUMScatt.hh | 80 + geant4/LEMuSR/include/LEMuSRMag_SpinEqRhs.hh | 77 + geant4/LEMuSR/include/LEMuSRMagneticField.hh | 28 + geant4/LEMuSR/include/LEMuSRMcpHit.hh | 86 + geant4/LEMuSR/include/LEMuSRMcpSD.hh | 90 + .../LEMuSR/include/LEMuSRMuonDecayChannel.hh | 82 + geant4/LEMuSR/include/LEMuSRMuonPhysics.hh | 96 + geant4/LEMuSR/include/LEMuSROScintHit.hh | 85 + geant4/LEMuSR/include/LEMuSROScintSD.hh | 86 + .../include/LEMuSRParticleChangeForSR.hh | 25 + geant4/LEMuSR/include/LEMuSRParticleGun.hh | 34 + .../include/LEMuSRParticleGunMessenger.hh | 59 + geant4/LEMuSR/include/LEMuSRPgaMessenger.hh | 67 + geant4/LEMuSR/include/LEMuSRPhysicsList.hh | 25 + .../include/LEMuSRPrimaryGeneratorAction.hh | 99 + geant4/LEMuSR/include/LEMuSRRNDMAGField.hh | 30 + geant4/LEMuSR/include/LEMuSRRunAction.hh | 61 + geant4/LEMuSR/include/LEMuSRScintHit.hh | 85 + geant4/LEMuSR/include/LEMuSRScintSD.hh | 89 + geant4/LEMuSR/include/LEMuSRStackingAction.hh | 75 + .../include/LEMuSRStackingActionMessenger.hh | 35 + geant4/LEMuSR/include/LEMuSRSteppingAction.hh | 59 + geant4/LEMuSR/include/LEMuSRTrack.hh | 11 + geant4/LEMuSR/include/LEMuSRTrackingAction.hh | 48 + geant4/LEMuSR/include/LEMuSRVisManager.hh | 27 + geant4/LEMuSR/include/PhysicsList.hh | 49 + geant4/LEMuSR/include/TDCheck.hh | 128 + geant4/LEMuSR/include/meyer.h | 27 + geant4/LEMuSR/include/yields.h | 28 + geant4/LEMuSR/make.sh | 10 + geant4/LEMuSR/mk.sh | 10 + geant4/LEMuSR/mkclean.sh | 14 + geant4/LEMuSR/src/AsymCheck.cc | 277 + geant4/LEMuSR/src/FieldCheck.cc | 376 ++ geant4/LEMuSR/src/FocalLengthTest.cc | 264 + geant4/LEMuSR/src/LEMuSRAtRestSpinRotation.cc | 229 + geant4/LEMuSR/src/LEMuSRCryoField.cc | 64 + geant4/LEMuSR/src/LEMuSRCryoHit.cc | 75 + geant4/LEMuSR/src/LEMuSRCryoSD.cc | 205 + geant4/LEMuSR/src/LEMuSRDecay.cc | 196 + geant4/LEMuSR/src/LEMuSRDepolarize.cc | 175 + .../LEMuSR/src/LEMuSRDetectorConstruction.cc | 1383 +++++ geant4/LEMuSR/src/LEMuSRDetectorMessenger.cc | 448 ++ geant4/LEMuSR/src/LEMuSREMPhysics.cc | 75 + geant4/LEMuSR/src/LEMuSRElFieldMix.cc | 95 + geant4/LEMuSR/src/LEMuSRElMagField.cc | 81 + geant4/LEMuSR/src/LEMuSRElMag_SpinEqRhs.cc | 89 + geant4/LEMuSR/src/LEMuSRElectricField.cc | 370 ++ geant4/LEMuSR/src/LEMuSREqMagElectricField.cc | 91 + geant4/LEMuSR/src/LEMuSREventAction.cc | 234 + geant4/LEMuSR/src/LEMuSRGeneralPhysics.cc | 105 + geant4/LEMuSR/src/LEMuSRHadronPhysics.cc | 415 ++ geant4/LEMuSR/src/LEMuSRIonPhysics.cc | 103 + geant4/LEMuSR/src/LEMuSRMSC.cc | 1116 ++++ geant4/LEMuSR/src/LEMuSRMUONIUM.cc | 140 + geant4/LEMuSR/src/LEMuSRMUONIUMScatt.cc | 125 + geant4/LEMuSR/src/LEMuSRMag_SpinEqRhs.cc | 121 + geant4/LEMuSR/src/LEMuSRMagneticField.cc | 44 + geant4/LEMuSR/src/LEMuSRMaterials.cc | 451 ++ geant4/LEMuSR/src/LEMuSRMcpHit.cc | 75 + geant4/LEMuSR/src/LEMuSRMcpSD.cc | 226 + geant4/LEMuSR/src/LEMuSRMuonDecayChannel.cc | 285 + geant4/LEMuSR/src/LEMuSRMuonPhysics.cc | 154 + geant4/LEMuSR/src/LEMuSROScintHit.cc | 75 + geant4/LEMuSR/src/LEMuSROScintSD.cc | 216 + .../LEMuSR/src/LEMuSRParticleChangeForSR.cc | 64 + geant4/LEMuSR/src/LEMuSRParticleGun.cc | 95 + .../LEMuSR/src/LEMuSRParticleGunMessenger.cc | 231 + geant4/LEMuSR/src/LEMuSRPgaMessenger.cc | 239 + geant4/LEMuSR/src/LEMuSRPhysicsList.cc | 93 + .../src/LEMuSRPrimaryGeneratorAction.cc | 354 ++ geant4/LEMuSR/src/LEMuSRRNDMAGField.cc | 68 + geant4/LEMuSR/src/LEMuSRRunAction.cc | 81 + geant4/LEMuSR/src/LEMuSRScintHit.cc | 75 + geant4/LEMuSR/src/LEMuSRScintSD.cc | 238 + geant4/LEMuSR/src/LEMuSRStackingAction.cc | 94 + .../src/LEMuSRStackingActionMessenger.cc | 27 + geant4/LEMuSR/src/LEMuSRSteppingAction.cc | 268 + geant4/LEMuSR/src/LEMuSRTrack.cc | 9 + geant4/LEMuSR/src/LEMuSRTrackingAction.cc | 42 + geant4/LEMuSR/src/LEMuSRVisManager.cc | 113 + geant4/LEMuSR/src/LEMuSRdummydets.cc | 225 + geant4/LEMuSR/src/PhysicsList.cc | 103 + geant4/LEMuSR/src/TDCheck.cc | 256 + geant4/LEMuSR/src/meyer.cc | 1013 +++ geant4/LEMuSR/src/yields.cc | 105 + geant4/LEMuSR/stepping.sh | 11 + geant4/LEMuSR/td.sh | 11 + 201 files changed, 47334 insertions(+) create mode 100644 geant4/LEMuSR/GNUmakefile create mode 100644 geant4/LEMuSR/LEMuSR.cc 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/gplmac create mode 100644 geant4/LEMuSR/MEYER/gplmac~ create mode 100644 geant4/LEMuSR/MEYER/meyer.cc create mode 100644 geant4/LEMuSR/MEYER/meyer.cc~ create mode 100644 geant4/LEMuSR/MEYER/meyer.for create mode 100644 geant4/LEMuSR/MEYER/meyer.for~ create mode 100644 geant4/LEMuSR/MEYER/meyer.h 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/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.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 create mode 100644 geant4/LEMuSR/MEYER/txt.for~ create mode 100644 geant4/LEMuSR/YIELDS/GNUmakefile create mode 100755 geant4/LEMuSR/YIELDS/a.out create mode 100644 geant4/LEMuSR/YIELDS/fig.eps create mode 100644 geant4/LEMuSR/YIELDS/fig.gif create mode 100644 geant4/LEMuSR/YIELDS/fig.pdf create mode 100755 geant4/LEMuSR/YIELDS/gonin create mode 100755 geant4/LEMuSR/YIELDS/gonin$ create mode 100644 geant4/LEMuSR/YIELDS/gonin.cc create mode 100644 geant4/LEMuSR/YIELDS/gonin.cc~ create mode 100644 geant4/LEMuSR/YIELDS/macro.c create mode 100644 geant4/LEMuSR/YIELDS/macro.c~ create mode 100644 geant4/LEMuSR/YIELDS/run create mode 100644 geant4/LEMuSR/YIELDS/script.c create mode 100644 geant4/LEMuSR/YIELDS/test.txt create mode 100644 geant4/LEMuSR/YIELDS/test2.txt create mode 100644 geant4/LEMuSR/YIELDS/test4.txt create mode 100644 geant4/LEMuSR/YIELDS/test5.txt create mode 100644 geant4/LEMuSR/YIELDS/test6.txt create mode 100644 geant4/LEMuSR/YIELDS/ycorr.eps create mode 100644 geant4/LEMuSR/YIELDS/ycorr.pdf create mode 100644 geant4/LEMuSR/YIELDS/ycorrected.eps create mode 100644 geant4/LEMuSR/YIELDS/ycorrected.pdf create mode 100644 geant4/LEMuSR/YIELDS/yields.cc create mode 100644 geant4/LEMuSR/YIELDS/yields.cc~ create mode 100644 geant4/LEMuSR/YIELDS/yields.eps create mode 100644 geant4/LEMuSR/YIELDS/yields.for create mode 100644 geant4/LEMuSR/YIELDS/yields.h create mode 100644 geant4/LEMuSR/YIELDS/yields.h~ create mode 100644 geant4/LEMuSR/YIELDS/yields.jpg create mode 100644 geant4/LEMuSR/YIELDS/yields1.bmp create mode 100644 geant4/LEMuSR/YIELDS/yields2.eps create mode 100644 geant4/LEMuSR/YIELDS/yields3.eps create mode 100644 geant4/LEMuSR/YIELDS/yieldst.eps create mode 100644 geant4/LEMuSR/YIELDS/ytest.eps create mode 100644 geant4/LEMuSR/YIELDS/ytest.pdf create mode 100644 geant4/LEMuSR/YIELDS/ytestlog.eps create mode 100644 geant4/LEMuSR/YIELDS/ytestlog.pdf create mode 100644 geant4/LEMuSR/allmk.sh create mode 100644 geant4/LEMuSR/asym.sh create mode 100644 geant4/LEMuSR/dawn.sh create mode 100644 geant4/LEMuSR/field.sh create mode 100644 geant4/LEMuSR/focal.sh create mode 100644 geant4/LEMuSR/include/AsymCheck.hh create mode 100644 geant4/LEMuSR/include/FieldCheck.hh create mode 100644 geant4/LEMuSR/include/FocalLengthTest.hh create mode 100644 geant4/LEMuSR/include/G4AtRestSpinPrecession.hh create mode 100644 geant4/LEMuSR/include/G4DecayWithSpin.hh create mode 100644 geant4/LEMuSR/include/G4ParticleChangeForAtRestSP.hh create mode 100644 geant4/LEMuSR/include/LEMuSRAtRestSpinRotation.hh create mode 100644 geant4/LEMuSR/include/LEMuSRCryoField.hh create mode 100644 geant4/LEMuSR/include/LEMuSRCryoHit.hh create mode 100644 geant4/LEMuSR/include/LEMuSRCryoSD.hh create mode 100644 geant4/LEMuSR/include/LEMuSRCylVector.hh create mode 100644 geant4/LEMuSR/include/LEMuSRDecay.hh create mode 100644 geant4/LEMuSR/include/LEMuSRDepolarize.hh create mode 100644 geant4/LEMuSR/include/LEMuSRDetectorConstruction.hh create mode 100644 geant4/LEMuSR/include/LEMuSRDetectorMessenger.hh create mode 100644 geant4/LEMuSR/include/LEMuSREMPhysics.hh create mode 100644 geant4/LEMuSR/include/LEMuSRElFieldMix.hh create mode 100644 geant4/LEMuSR/include/LEMuSRElMagField.hh create mode 100644 geant4/LEMuSR/include/LEMuSRElMag_SpinEqRhs.hh create mode 100644 geant4/LEMuSR/include/LEMuSRElectricField.hh create mode 100644 geant4/LEMuSR/include/LEMuSRElectricField.hh~ create mode 100644 geant4/LEMuSR/include/LEMuSREqMagElectricField.hh create mode 100644 geant4/LEMuSR/include/LEMuSREventAction.hh create mode 100644 geant4/LEMuSR/include/LEMuSRGeneralPhysics.hh create mode 100644 geant4/LEMuSR/include/LEMuSRHadronPhysics.hh create mode 100644 geant4/LEMuSR/include/LEMuSRIonPhysics.hh create mode 100644 geant4/LEMuSR/include/LEMuSRMSC.hh create mode 100644 geant4/LEMuSR/include/LEMuSRMSC.icc create mode 100644 geant4/LEMuSR/include/LEMuSRMUONIUM.hh create mode 100644 geant4/LEMuSR/include/LEMuSRMUONIUMScatt.hh create mode 100644 geant4/LEMuSR/include/LEMuSRMag_SpinEqRhs.hh create mode 100644 geant4/LEMuSR/include/LEMuSRMagneticField.hh create mode 100644 geant4/LEMuSR/include/LEMuSRMcpHit.hh create mode 100644 geant4/LEMuSR/include/LEMuSRMcpSD.hh create mode 100644 geant4/LEMuSR/include/LEMuSRMuonDecayChannel.hh create mode 100644 geant4/LEMuSR/include/LEMuSRMuonPhysics.hh create mode 100644 geant4/LEMuSR/include/LEMuSROScintHit.hh create mode 100644 geant4/LEMuSR/include/LEMuSROScintSD.hh create mode 100644 geant4/LEMuSR/include/LEMuSRParticleChangeForSR.hh create mode 100644 geant4/LEMuSR/include/LEMuSRParticleGun.hh create mode 100644 geant4/LEMuSR/include/LEMuSRParticleGunMessenger.hh create mode 100644 geant4/LEMuSR/include/LEMuSRPgaMessenger.hh create mode 100644 geant4/LEMuSR/include/LEMuSRPhysicsList.hh create mode 100644 geant4/LEMuSR/include/LEMuSRPrimaryGeneratorAction.hh create mode 100644 geant4/LEMuSR/include/LEMuSRRNDMAGField.hh create mode 100644 geant4/LEMuSR/include/LEMuSRRunAction.hh create mode 100644 geant4/LEMuSR/include/LEMuSRScintHit.hh create mode 100644 geant4/LEMuSR/include/LEMuSRScintSD.hh create mode 100644 geant4/LEMuSR/include/LEMuSRStackingAction.hh create mode 100644 geant4/LEMuSR/include/LEMuSRStackingActionMessenger.hh create mode 100644 geant4/LEMuSR/include/LEMuSRSteppingAction.hh create mode 100644 geant4/LEMuSR/include/LEMuSRTrack.hh create mode 100644 geant4/LEMuSR/include/LEMuSRTrackingAction.hh create mode 100644 geant4/LEMuSR/include/LEMuSRVisManager.hh create mode 100644 geant4/LEMuSR/include/PhysicsList.hh create mode 100644 geant4/LEMuSR/include/TDCheck.hh create mode 100644 geant4/LEMuSR/include/meyer.h create mode 100644 geant4/LEMuSR/include/yields.h create mode 100644 geant4/LEMuSR/make.sh create mode 100644 geant4/LEMuSR/mk.sh create mode 100644 geant4/LEMuSR/mkclean.sh create mode 100644 geant4/LEMuSR/src/AsymCheck.cc create mode 100644 geant4/LEMuSR/src/FieldCheck.cc create mode 100644 geant4/LEMuSR/src/FocalLengthTest.cc create mode 100644 geant4/LEMuSR/src/LEMuSRAtRestSpinRotation.cc create mode 100644 geant4/LEMuSR/src/LEMuSRCryoField.cc create mode 100644 geant4/LEMuSR/src/LEMuSRCryoHit.cc create mode 100644 geant4/LEMuSR/src/LEMuSRCryoSD.cc create mode 100644 geant4/LEMuSR/src/LEMuSRDecay.cc create mode 100644 geant4/LEMuSR/src/LEMuSRDepolarize.cc create mode 100644 geant4/LEMuSR/src/LEMuSRDetectorConstruction.cc create mode 100644 geant4/LEMuSR/src/LEMuSRDetectorMessenger.cc create mode 100644 geant4/LEMuSR/src/LEMuSREMPhysics.cc create mode 100644 geant4/LEMuSR/src/LEMuSRElFieldMix.cc create mode 100644 geant4/LEMuSR/src/LEMuSRElMagField.cc create mode 100644 geant4/LEMuSR/src/LEMuSRElMag_SpinEqRhs.cc create mode 100644 geant4/LEMuSR/src/LEMuSRElectricField.cc create mode 100644 geant4/LEMuSR/src/LEMuSREqMagElectricField.cc create mode 100644 geant4/LEMuSR/src/LEMuSREventAction.cc create mode 100644 geant4/LEMuSR/src/LEMuSRGeneralPhysics.cc create mode 100644 geant4/LEMuSR/src/LEMuSRHadronPhysics.cc create mode 100644 geant4/LEMuSR/src/LEMuSRIonPhysics.cc create mode 100644 geant4/LEMuSR/src/LEMuSRMSC.cc create mode 100644 geant4/LEMuSR/src/LEMuSRMUONIUM.cc create mode 100644 geant4/LEMuSR/src/LEMuSRMUONIUMScatt.cc create mode 100644 geant4/LEMuSR/src/LEMuSRMag_SpinEqRhs.cc create mode 100644 geant4/LEMuSR/src/LEMuSRMagneticField.cc create mode 100644 geant4/LEMuSR/src/LEMuSRMaterials.cc create mode 100644 geant4/LEMuSR/src/LEMuSRMcpHit.cc create mode 100644 geant4/LEMuSR/src/LEMuSRMcpSD.cc create mode 100644 geant4/LEMuSR/src/LEMuSRMuonDecayChannel.cc create mode 100644 geant4/LEMuSR/src/LEMuSRMuonPhysics.cc create mode 100644 geant4/LEMuSR/src/LEMuSROScintHit.cc create mode 100644 geant4/LEMuSR/src/LEMuSROScintSD.cc create mode 100644 geant4/LEMuSR/src/LEMuSRParticleChangeForSR.cc create mode 100644 geant4/LEMuSR/src/LEMuSRParticleGun.cc create mode 100644 geant4/LEMuSR/src/LEMuSRParticleGunMessenger.cc create mode 100644 geant4/LEMuSR/src/LEMuSRPgaMessenger.cc create mode 100644 geant4/LEMuSR/src/LEMuSRPhysicsList.cc create mode 100644 geant4/LEMuSR/src/LEMuSRPrimaryGeneratorAction.cc create mode 100644 geant4/LEMuSR/src/LEMuSRRNDMAGField.cc create mode 100644 geant4/LEMuSR/src/LEMuSRRunAction.cc create mode 100644 geant4/LEMuSR/src/LEMuSRScintHit.cc create mode 100644 geant4/LEMuSR/src/LEMuSRScintSD.cc create mode 100644 geant4/LEMuSR/src/LEMuSRStackingAction.cc create mode 100644 geant4/LEMuSR/src/LEMuSRStackingActionMessenger.cc create mode 100644 geant4/LEMuSR/src/LEMuSRSteppingAction.cc create mode 100644 geant4/LEMuSR/src/LEMuSRTrack.cc create mode 100644 geant4/LEMuSR/src/LEMuSRTrackingAction.cc create mode 100644 geant4/LEMuSR/src/LEMuSRVisManager.cc create mode 100644 geant4/LEMuSR/src/LEMuSRdummydets.cc create mode 100644 geant4/LEMuSR/src/PhysicsList.cc create mode 100644 geant4/LEMuSR/src/TDCheck.cc create mode 100644 geant4/LEMuSR/src/meyer.cc create mode 100644 geant4/LEMuSR/src/yields.cc create mode 100644 geant4/LEMuSR/stepping.sh create mode 100644 geant4/LEMuSR/td.sh diff --git a/geant4/LEMuSR/GNUmakefile b/geant4/LEMuSR/GNUmakefile new file mode 100644 index 0000000..ab55435 --- /dev/null +++ b/geant4/LEMuSR/GNUmakefile @@ -0,0 +1,71 @@ +# $Id$ +# -------------------------------------------------------------- +# GNUmakefile for examples module. Gabriele Cosmo, 06/04/98. +# -------------------------------------------------------------- + +name := LEMuSR +G4TARGET := $(name) +G4EXLIB := true + +ifndef G4INSTALL + G4INSTALL = ../ +endif + +.PHONY: all +all: lib bin + +include $(G4INSTALL)/config/architecture.gmk + +include $(G4INSTALL)/config/binmake.gmk + +########################### TRIUMF ############################### +#CPPFLAGS += -I$(G4INSTALL)/spintest/triumf/spintest/include + +########################### ROOT ################################# +ifdef ROOTSYS +ifndef G4UI_USE_ROOT +CPPFLAGS += -DG4ANALYSIS_USE_ROOT $(shell $(ROOTSYS)/bin/root-config --cflags) +ROOTLIBS = $(shell $(ROOTSYS)/bin/root-config --nonew --glibs) -lMinuit -lHtml +ROOTLIBS := $(filter-out -lNew,$(ROOTLIBS)) +ROOTLIBS := $(filter-out -lThread,$(ROOTLIBS)) +ROOTLIBS := $(filter-out -lpthread,$(ROOTLIBS)) +LDLIBS += $(ROOTLIBS) +endif +endif + + +ifdef ASYM_USE_LEMU +CPPFLAGS += -DASYM_USE_LEMU +endif + +ifdef LEMU_TEST_ASYM +CPPFLAGS += -DLEMU_TEST_ASYM +endif + +ifdef LEMU_TEST_FIELD +CPPFLAGS += -DLEMU_TEST_FIELD +endif + +ifdef LEMU_TEST_CFOIL +CPPFLAGS += -DLEMU_TEST_CFOIL +endif + +ifdef LEMU_TEST_FOCAL_LENGTH +CPPFLAGS += -DLEMU_TEST_FOCAL_LENGTH +endif + +ifdef G4SRVERBOSE +CPPFLAGS += -DG4SRVERBOSE +endif + +ifdef DEBUG_INTERPOLATING_FIELD +CPPFLAGS += -DDEBUG_INTERPOLATING_FIELD +endif + +ifdef NO_CFOIL +CPPFLAGS += -DNO_CFOIL +endif + +ifdef LEMU_GET_NEWMAPS +CPPFLAGS += -DLEMU_GET_NEWMAPS +endif diff --git a/geant4/LEMuSR/LEMuSR.cc b/geant4/LEMuSR/LEMuSR.cc new file mode 100644 index 0000000..6c09256 --- /dev/null +++ b/geant4/LEMuSR/LEMuSR.cc @@ -0,0 +1,179 @@ +//§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§//* +// LOW ENERGY MUON SPIN RELAXATION, ROTATION, RADIATION Geant4 SIMULATION +// ID : LEMuSR.cc , v 1.0 +// AUTHOR: Taofiq PARAISO +// DATE : 2004-06-24 09:57 + +//§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§// +// +// & &&&&&&&&&& &&&&&&& &&&&&&&& +// & & && && & && +// & & & & & & && +// & &&&&&&& & & &&&&&& &&&&&&&& +// & & & && & & && +// & & && & & && && & & +// &&&&&&&&&& &&&&&&&&&& & &&&&& && &&&&&&& & && +// & +// & +// & +// & +// +//§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§// + + + +// G4 CLASSES +#include "G4RunManager.hh" +#include "G4UImanager.hh" +#include "G4UIterminal.hh" +#include "G4UItcsh.hh" + +#include "G4ios.hh" +#include + +// LEMuSR CLASSES +#include "LEMuSRDetectorConstruction.hh" + +#include "LEMuSRPhysicsList.hh" +#include "PhysicsList.hh" + +#include "LEMuSRPrimaryGeneratorAction.hh" + +#include "LEMuSRRunAction.hh" +#include "LEMuSREventAction.hh" +#include "LEMuSRSteppingAction.hh" +#include "LEMuSRStackingAction.hh" +#include "LEMuSRTrackingAction.hh" + +// DUMMY PLANES STEPPING ACTIONS +#include "AsymCheck.hh" +#include "FieldCheck.hh" +#include "TDCheck.hh" +#include "FocalLengthTest.hh" + + +// LEMuSR VISUALIZATION CLASS +#include "LEMuSRVisManager.hh" + +// Interactive root xwindow +#ifdef G4UI_USE_ROOT +#include "G4UIRoot.hh" +#endif + + +int main(int argc,char** argv)//argc:: defines the user interface +{ + + // random numbers + time_t myseed; + time(&myseed); + RanecuEngine *theRanGenerator = new RanecuEngine; + theRanGenerator->setSeed(myseed); + HepRandom::setTheEngine(theRanGenerator); + + + // 1 The run manager construction + G4RunManager* runManager = new G4RunManager; + + // 2 The three mandatory classes + + // 2.1 LEMuSR Initialization classes + LEMuSRDetectorConstruction* lemuDetector = new LEMuSRDetectorConstruction(); + + LEMuSRPhysicsList* lemuPhysicsList = new LEMuSRPhysicsList(); + + // 2.2 LEMuSR Action class + LEMuSRPrimaryGeneratorAction* lemuPGA = new LEMuSRPrimaryGeneratorAction(); + + + // 2.3 Setting the mandatory Initialization classes + runManager ->SetUserInitialization( lemuDetector ); + + runManager ->SetUserInitialization( lemuPhysicsList ); + + + // 2.4 Setting the mandatory Action class + runManager ->SetUserAction( lemuPGA ); + + // 3 The optionnal classes + runManager ->SetUserAction( new LEMuSRRunAction()); + //#ifndef LEMU_TEST_FOCAL_LENGTH + runManager ->SetUserAction( new LEMuSREventAction());// scintillators, sensitive detectors + //#endif + + + // optionnal stepping action: enable one at once + +#if defined LEMU_TEST_ASYM + runManager ->SetUserAction( new AsymCheck()); +#elif defined LEMU_TEST_FIELD + runManager ->SetUserAction( new FieldCheck()); +#elif defined LEMU_TEST_CFOIL + runManager ->SetUserAction( new TDCheck()); +#elif defined LEMU_TEST_FOCAL_LENGTH + runManager ->SetUserAction( new FocalLengthTest()); +#else + runManager ->SetUserAction( new LEMuSRSteppingAction());// fur debugging +#endif + + + + // 4 The visualization manager construction and initialization + // ! will be initialize only if the env variable G4VIS_USE=1 ! +#ifdef G4VIS_USE + LEMuSRVisManager* lemuVisManager = new LEMuSRVisManager; + lemuVisManager -> Initialize(); +#endif + + // 5 Initialize G4 kernel + runManager -> Initialize(); + + + // Configuration of the User Interface manager + G4UImanager* UI = G4UImanager::GetUIpointer(); + + G4UIsession* session = 0; + + + +#if defined G4UI_USE_ROOT + // G4UIRoot is a ROOT based GUI + session = new G4UIRoot( argc, argv); +#elif defined G4UI_USE_TCSH + session = new G4UIterminal(new G4UItcsh); + G4cout<<"\n G4UI_USE_TCSH! \n"<ApplyCommand("/control/execute visual.mac"); + UI->ApplyCommand("/run/verbose 2"); + + // UI->ApplyCommand("/Detector/MagneticField on"); + // UI->ApplyCommand("/run/beamOn 1"); +#if defined LEMU_TEST_ASYM + // UI->ApplyCommand("/Detector/ElectricField off"); + UI->ApplyCommand("/Detector/MagneticField 50"); + UI->ApplyCommand("/Detector/AsymCheck on"); + UI->ApplyCommand("/lemuGun/gunPosition 0 0 0"); + UI->ApplyCommand("/lemuGun/energy/defined 0"); + G4cout<<"\n READY TO TEST ASYMETRY! "; +#endif + + + session->SessionStart(); + + // JOB TERMINATION + + delete session; + +#if defined G4VIS_USE + delete lemuVisManager; +#endif + + + delete runManager; + return 0; +} + + 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..635131d58e0534e4086aaf0643b35fd3b580d1c1 GIT binary patch literal 8540 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 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..baa7f15e55eb61e0a682f24a37ba461807a4c37b GIT binary patch literal 9389 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 Ig8r`o0NcONkpKVy literal 0 HcmV?d00001 diff --git a/geant4/LEMuSR/MEYER/Mall2.eps b/geant4/LEMuSR/MEYER/Mall2.eps new file mode 100644 index 0000000..1b3c6ba --- /dev/null +++ b/geant4/LEMuSR/MEYER/Mall2.eps @@ -0,0 +1,977 @@ +%!PS-Adobe-2.0 +%%Title: Mall2.eps +%%Creator: gnuplot 3.7 patchlevel 3 +%%CreationDate: Mon Apr 11 19:39: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 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 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 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 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 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 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 +(Meyer's distribution) Cshow +grestore +3838 70 M +(scatt. angle [deg]) Cshow +1.000 UP +1.000 UL +LT0 +6311 4739 M +('M5.keV') Rshow +783 4872 Pls +853 4858 Pls +922 4843 Pls +992 4829 Pls +1061 4814 Pls +1131 4800 Pls +1200 4785 Pls +1269 4771 Pls +1339 4756 Pls +1408 4742 Pls +1478 4712 Pls +1547 4666 Pls +1616 4620 Pls +1686 4573 Pls +1755 4527 Pls +1825 4481 Pls +1894 4434 Pls +1964 4388 Pls +2033 4342 Pls +2102 4296 Pls +2172 4238 Pls +2241 4180 Pls +2311 4122 Pls +2380 4064 Pls +2450 4004 Pls +2519 3937 Pls +2588 3869 Pls +2658 3802 Pls +2727 3735 Pls +2797 3668 Pls +2866 3601 Pls +2936 3535 Pls +3005 3468 Pls +3074 3401 Pls +3144 3335 Pls +3213 3268 Pls +3283 3201 Pls +3352 3135 Pls +3421 3068 Pls +3491 3004 Pls +3560 2940 Pls +3630 2876 Pls +3699 2811 Pls +3769 2747 Pls +3838 2683 Pls +3907 2619 Pls +3977 2555 Pls +4046 2491 Pls +4116 2431 Pls +4185 2377 Pls +4255 2324 Pls +4324 2270 Pls +4393 2216 Pls +4463 2163 Pls +4532 2109 Pls +4602 2055 Pls +4671 2002 Pls +4740 1948 Pls +4810 1904 Pls +4879 1862 Pls +4949 1819 Pls +5018 1777 Pls +5088 1734 Pls +5157 1692 Pls +5226 1649 Pls +5296 1607 Pls +5365 1564 Pls +5435 1525 Pls +5504 1490 Pls +5574 1455 Pls +5643 1421 Pls +5712 1386 Pls +5782 1355 Pls +5851 1326 Pls +5921 1297 Pls +5990 1269 Pls +6060 1240 Pls +6129 1216 Pls +6198 1193 Pls +6268 1170 Pls +6337 1147 Pls +6407 1124 Pls +6476 1102 Pls +6545 1079 Pls +6615 1056 Pls +6684 1033 Pls +6754 1012 Pls +6823 995 Pls +6893 979 Pls +6962 962 Pls +6594 4739 Pls +1.000 UP +1.000 UL +LT1 +6311 4599 M +('M10.keV') Rshow +783 4872 Crs +853 4843 Crs +922 4814 Crs +992 4785 Crs +1061 4756 Crs +1131 4712 Crs +1200 4619 Crs +1269 4527 Crs +1339 4434 Crs +1408 4342 Crs +1478 4238 Crs +1547 4121 Crs +1616 4003 Crs +1686 3869 Crs +1755 3734 Crs +1825 3601 Crs +1894 3467 Crs +1964 3334 Crs +2033 3201 Crs +2102 3067 Crs +2172 2939 Crs +2241 2811 Crs +2311 2682 Crs +2380 2554 Crs +2450 2430 Crs +2519 2323 Crs +2588 2215 Crs +2658 2108 Crs +2727 2001 Crs +2797 1903 Crs +2866 1818 Crs +2936 1733 Crs +3005 1648 Crs +3074 1563 Crs +3144 1489 Crs +3213 1420 Crs +3283 1354 Crs +3352 1297 Crs +3421 1239 Crs +3491 1193 Crs +3560 1147 Crs +3630 1101 Crs +3699 1055 Crs +3769 1011 Crs +3838 978 Crs +3907 945 Crs +3977 912 Crs +4046 879 Crs +4116 850 Crs +4185 826 Crs +4255 802 Crs +4324 778 Crs +4393 755 Crs +4463 735 Crs +4532 717 Crs +4602 700 Crs +4671 682 Crs +4740 665 Crs +4810 652 Crs +4879 640 Crs +4949 629 Crs +5018 617 Crs +5088 605 Crs +5157 596 Crs +5226 587 Crs +5296 578 Crs +5365 569 Crs +5435 560 Crs +5504 554 Crs +5574 547 Crs +5643 540 Crs +5712 534 Crs +5782 529 Crs +5851 524 Crs +5921 520 Crs +5990 516 Crs +6060 512 Crs +6129 508 Crs +6198 504 Crs +6268 500 Crs +6337 496 Crs +6407 492 Crs +6476 488 Crs +6545 483 Crs +6615 481 Crs +6684 479 Crs +6754 477 Crs +6823 474 Crs +6893 472 Crs +6962 470 Crs +6594 4599 Crs +1.000 UP +1.000 UL +LT2 +6311 4459 M +('M20.keV') Rshow +749 4872 Star +783 4843 Star +818 4814 Star +853 4785 Star +888 4757 Star +922 4713 Star +957 4620 Star +992 4528 Star +1026 4436 Star +1061 4343 Star +1096 4240 Star +1131 4124 Star +1165 4006 Star +1200 3872 Star +1235 3738 Star +1269 3605 Star +1304 3472 Star +1339 3338 Star +1374 3205 Star +1408 3072 Star +1443 2944 Star +1478 2816 Star +1512 2688 Star +1547 2560 Star +1582 2435 Star +1616 2328 Star +1651 2221 Star +1686 2114 Star +1721 2007 Star +1755 1908 Star +1790 1823 Star +1825 1738 Star +1859 1654 Star +1894 1569 Star +1929 1494 Star +1964 1425 Star +1998 1359 Star +2033 1301 Star +2068 1244 Star +2102 1196 Star +2137 1150 Star +2172 1105 Star +2207 1059 Star +2241 1014 Star +2276 981 Star +2311 948 Star +2345 915 Star +2380 882 Star +2415 852 Star +2450 828 Star +2484 804 Star +2519 781 Star +2554 757 Star +2588 737 Star +2623 719 Star +2658 702 Star +2693 684 Star +2727 667 Star +2762 654 Star +2797 642 Star +2831 630 Star +2866 618 Star +2901 606 Star +2936 597 Star +2970 588 Star +3005 579 Star +3040 570 Star +3074 561 Star +3109 555 Star +3144 548 Star +3178 541 Star +3213 535 Star +3248 529 Star +3283 525 Star +3317 521 Star +3352 517 Star +3387 513 Star +3421 509 Star +3456 505 Star +3491 501 Star +3526 496 Star +3560 492 Star +3595 488 Star +3630 484 Star +3664 481 Star +3699 479 Star +3734 477 Star +3769 475 Star +3803 473 Star +3838 470 Star +3873 468 Star +3907 466 Star +3942 464 Star +3977 462 Star +4012 460 Star +4046 458 Star +4081 456 Star +4116 455 Star +4150 454 Star +4185 452 Star +4220 451 Star +4255 450 Star +4289 449 Star +4324 448 Star +4359 446 Star +4393 445 Star +4428 444 Star +4463 443 Star +4498 442 Star +4532 441 Star +4567 441 Star +4602 440 Star +4636 439 Star +4671 439 Star +4706 438 Star +4740 437 Star +4775 436 Star +4810 436 Star +4845 435 Star +4879 434 Star +4914 434 Star +4949 433 Star +4983 433 Star +5018 432 Star +5053 431 Star +5088 431 Star +5122 430 Star +5157 430 Star +5192 429 Star +5226 428 Star +5261 428 Star +5296 427 Star +5331 427 Star +5365 426 Star +5400 425 Star +5435 425 Star +5469 424 Star +5504 424 Star +5539 423 Star +5574 422 Star +5608 422 Star +5643 421 Star +5678 421 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 +('M50.keV') Rshow +731 4872 Box +749 4836 Box +766 4800 Box +783 4764 Box +801 4713 Box +818 4597 Box +835 4482 Box +853 4366 Box +870 4240 Box +888 4095 Box +905 3939 Box +922 3771 Box +940 3604 Box +957 3438 Box +974 3271 Box +992 3105 Box +1009 2943 Box +1026 2783 Box +1044 2623 Box +1061 2463 Box +1078 2327 Box +1096 2193 Box +1113 2059 Box +1131 1929 Box +1148 1823 Box +1165 1717 Box +1183 1611 Box +1200 1511 Box +1217 1424 Box +1235 1344 Box +1252 1272 Box +1269 1207 Box +1287 1150 Box +1304 1093 Box +1321 1036 Box +1339 989 Box +1356 948 Box +1374 906 Box +1391 865 Box +1408 834 Box +1426 804 Box +1443 774 Box +1460 745 Box +1478 723 Box +1495 702 Box +1512 680 Box +1530 660 Box +1547 645 Box +1564 630 Box +1582 615 Box +1599 602 Box +1616 590 Box +1634 579 Box +1651 567 Box +1669 558 Box +1686 549 Box +1703 541 Box +1721 533 Box +1738 527 Box +1755 522 Box +1773 517 Box +1790 512 Box +1807 507 Box +1825 501 Box +1842 496 Box +1859 491 Box +1877 486 Box +1894 482 Box +1912 479 Box +1929 476 Box +1946 474 Box +1964 471 Box +1981 468 Box +1998 466 Box +2016 463 Box +2033 460 Box +2050 458 Box +2068 456 Box +2085 454 Box +2102 453 Box +2120 451 Box +2137 450 Box +2155 448 Box +2172 447 Box +2189 445 Box +2207 444 Box +2224 442 Box +2241 442 Box +2259 441 Box +2276 440 Box +2293 439 Box +2311 438 Box +2328 437 Box +2345 436 Box +2363 435 Box +2380 435 Box +2397 434 Box +2415 433 Box +2432 432 Box +2450 432 Box +2467 431 Box +2484 430 Box +2502 429 Box +2519 429 Box +2536 428 Box +2554 427 Box +2571 426 Box +2588 426 Box +2606 425 Box +2623 424 Box +2640 423 Box +2658 423 Box +2675 422 Box +2693 421 Box +2710 420 Box +2727 420 Box +2745 420 Box +2762 420 Box +2779 420 Box +2797 420 Box +2814 420 Box +2831 420 Box +2849 420 Box +2866 420 Box +2883 420 Box +2901 420 Box +2918 420 Box +2936 420 Box +2953 420 Box +2970 420 Box +2988 420 Box +3005 420 Box +3022 420 Box +3040 420 Box +6594 4319 Box +stroke +grestore +end +showpage +%%Trailer +%%DocumentFonts: Helvetica +%%Pages: 1 diff --git a/geant4/LEMuSR/MEYER/Mall2.pdf b/geant4/LEMuSR/MEYER/Mall2.pdf new file mode 100644 index 0000000000000000000000000000000000000000..7c458949ae481de6cd63d7e69e9d4efa39714e9c GIT binary patch literal 15881 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 Wg`3A!RCxphczHq0%nF){p#KFoR5nup 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..cc44613880952cf20887897a860b27343dc05322 GIT binary patch literal 15322 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

0pr#!}tD|dd;I5VJqjT%4 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 E0o;2Xafc4q;eBbl@{`lT{nK?6O&YU@O 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 +#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 = "< +#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.for~ b/geant4/LEMuSR/MEYER/meyer.for~ new file mode 100644 index 0000000..116b88d --- /dev/null +++ b/geant4/LEMuSR/MEYER/meyer.for~ @@ -0,0 +1,367 @@ +;; This buffer is for notes you don't want to save, and for Lisp evaluation. +;; If you want to create a file, visit that file with C-x C-f, +;; then enter the text in that file's own buffer. + +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=============================================================================== + + 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/meyer.h~ b/geant4/LEMuSR/MEYER/meyer.h~ new file mode 100644 index 0000000..af560b9 --- /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); + 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/mtest.for~ b/geant4/LEMuSR/MEYER/mtest.for~ new file mode 100644 index 0000000..3c070a0 --- /dev/null +++ b/geant4/LEMuSR/MEYER/mtest.for~ @@ -0,0 +1,691 @@ + 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=============================================================================== + diff --git a/geant4/LEMuSR/MEYER/mutrack.for b/geant4/LEMuSR/MEYER/mutrack.for new file mode 100644 index 0000000..5e8635e --- /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("< +#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" << std::endl; + std::cin>>thick; + thick=thick*1.0e-6; + + 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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:w$MB_sy5{c|IPG-F<`ld9Ot0!2>}u+l66Q&L?3hmRyg;y4vXF`e%$hD^lXg+~hC5%qtO;fuVPD4EsPUFk@qF!JAp+MjTiXj?F3?`?J6a#* zUu5@9_Uam}TBhqe#039IWSLK6=n;;@BaoX!kx8ZgU(a493jIjs=Qx6Ix3nswS1z8-^ZbR?49cTlM@fgf+-;lq}B%mIH0~Z7)fC6=YClAKh z95Z8X00QYS^}u(1PBQ83(^F4 zh3R2a$L0SK&437tk+5ga! z0c*1VkRhO3_djGP8N|Qz&=}c&#YH1gU{(Lm7+4G*tSbL0LnA=6|0To!ONNDR=iho% zvK3fBk->kh;DEk^FA>BF4!#5+fn_%Ivj_(WuC^rj?;@T;wIWlQsN%3V@Sm^4r?k~z F{{?qoZIJ)~ 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..c24fb2e2705a6b9725713a3c370598a7a987eebd GIT binary patch literal 7728 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 GApZqKksc8M 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=============================================================================== + 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=============================================================================== + diff --git a/geant4/LEMuSR/YIELDS/GNUmakefile b/geant4/LEMuSR/YIELDS/GNUmakefile new file mode 100644 index 0000000..49e40cd --- /dev/null +++ b/geant4/LEMuSR/YIELDS/GNUmakefile @@ -0,0 +1,67 @@ +# $Id$ +# -------------------------------------------------------------- +# GNUmakefile for examples module. Gabriele Cosmo, 06/04/98. +# -------------------------------------------------------------- + +name := YIELDS +G4TARGET := $(name) +G4EXLIB := true + +ifndef G4INSTALL + G4INSTALL = ../ +endif + +.PHONY: all +all: lib bin + +include $(G4INSTALL)/config/architecture.gmk + +include $(G4INSTALL)/config/binmake.gmk + +########################### TRIUMF ############################### +#CPPFLAGS += -I$(G4INSTALL)/spintest/triumf/spintest/include + +########################### ROOT ################################# +ifdef ROOTSYS +ifndef G4UI_USE_ROOT +CPPFLAGS += -DG4ANALYSIS_USE_ROOT $(shell $(ROOTSYS)/bin/root-config --cflags) +ROOTLIBS = $(shell $(ROOTSYS)/bin/root-config --nonew --glibs) -lMinuit -lHtml +ROOTLIBS := $(filter-out -lNew,$(ROOTLIBS)) +ROOTLIBS := $(filter-out -lThread,$(ROOTLIBS)) +ROOTLIBS := $(filter-out -lpthread,$(ROOTLIBS)) +LDLIBS += $(ROOTLIBS) +endif +endif + + +ifdef ASYM_USE_LEMU +CPPFLAGS += -DASYM_USE_LEMU +endif + +ifdef LEMU_TEST_ASYM +CPPFLAGS += -DLEMU_TEST_ASYM +endif + +ifdef LEMU_TEST_FIELD +CPPFLAGS += -DLEMU_TEST_FIELD +endif + +ifdef LEMU_TEST_CFOIL +CPPFLAGS += -DLEMU_TEST_CFOIL +endif + +ifdef LEMU_TEST_FOCAL_LENGTH +CPPFLAGS += -DLEMU_TEST_FOCAL_LENGTH +endif + +ifdef G4SRVERBOSE +CPPFLAGS += -DG4SRVERBOSE +endif + +ifdef DEBUG_INTERPOLATING_FIELD +CPPFLAGS += -DDEBUG_INTERPOLATING_FIELD +endif + +ifdef NO_CFOIL +CPPFLAGS += -DNO_CFOIL +endif diff --git a/geant4/LEMuSR/YIELDS/a.out b/geant4/LEMuSR/YIELDS/a.out new file mode 100755 index 0000000000000000000000000000000000000000..c4a1c62af841a17f17bfee10017592479e502ec0 GIT binary patch literal 12872 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 WS8Z%@X5%=5?=+pEJqI)n$NvS+VkD>l literal 0 HcmV?d00001 diff --git a/geant4/LEMuSR/YIELDS/fig.eps b/geant4/LEMuSR/YIELDS/fig.eps new file mode 100644 index 0000000..a574687 --- /dev/null +++ b/geant4/LEMuSR/YIELDS/fig.eps @@ -0,0 +1,768 @@ +%!PS-Adobe-2.0 +%%Title: fig.eps +%%Creator: gnuplot 3.7 patchlevel 3 +%%CreationDate: Thu Jul 21 10:48:26 2005 +%%DocumentFonts: (atend) +%%BoundingBox: 50 50 554 770 +%%Orientation: Portrait +%%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 +0 setgray +newpath +(Helvetica) findfont 140 scalefont setfont +1.000 UL +LTb +1.000 UL +LTa +714 420 M +4088 0 V +1.000 UL +LTb +714 420 M +63 0 V +4025 0 R +-63 0 V +630 420 M +( 0) Rshow +1.000 UL +LTa +714 1056 M +4088 0 V +1.000 UL +LTb +714 1056 M +63 0 V +4025 0 R +-63 0 V +-4109 0 R +( 0.1) Rshow +1.000 UL +LTa +714 1692 M +4088 0 V +1.000 UL +LTb +714 1692 M +63 0 V +4025 0 R +-63 0 V +-4109 0 R +( 0.2) Rshow +1.000 UL +LTa +714 2328 M +4088 0 V +1.000 UL +LTb +714 2328 M +63 0 V +4025 0 R +-63 0 V +-4109 0 R +( 0.3) Rshow +1.000 UL +LTa +714 2964 M +4088 0 V +1.000 UL +LTb +714 2964 M +63 0 V +4025 0 R +-63 0 V +-4109 0 R +( 0.4) Rshow +1.000 UL +LTa +714 3600 M +4088 0 V +1.000 UL +LTb +714 3600 M +63 0 V +4025 0 R +-63 0 V +-4109 0 R +( 0.5) Rshow +1.000 UL +LTa +714 4236 M +4088 0 V +1.000 UL +LTb +714 4236 M +63 0 V +4025 0 R +-63 0 V +-4109 0 R +( 0.6) Rshow +1.000 UL +LTa +714 4872 M +4088 0 V +1.000 UL +LTb +714 4872 M +63 0 V +4025 0 R +-63 0 V +-4109 0 R +( 0.7) Rshow +1.000 UL +LTa +714 5508 M +4088 0 V +1.000 UL +LTb +714 5508 M +63 0 V +4025 0 R +-63 0 V +-4109 0 R +( 0.8) Rshow +1.000 UL +LTa +714 6144 M +4088 0 V +1.000 UL +LTb +714 6144 M +63 0 V +4025 0 R +-63 0 V +-4109 0 R +( 0.9) Rshow +1.000 UL +LTa +714 6780 M +4088 0 V +1.000 UL +LTb +714 6780 M +63 0 V +4025 0 R +-63 0 V +-4109 0 R +( 1) Rshow +1.000 UL +LTa +714 420 M +0 6360 V +1.000 UL +LTb +714 420 M +0 63 V +0 6297 R +0 -63 V +714 280 M +( 0) Cshow +1.000 UL +LTa +1643 420 M +0 6360 V +1.000 UL +LTb +1643 420 M +0 63 V +0 6297 R +0 -63 V +0 -6437 R +( 0.5) Cshow +1.000 UL +LTa +2572 420 M +0 6360 V +1.000 UL +LTb +2572 420 M +0 63 V +0 6297 R +0 -63 V +0 -6437 R +( 1) Cshow +1.000 UL +LTa +3501 420 M +0 6360 V +1.000 UL +LTb +3501 420 M +0 63 V +0 6297 R +0 -63 V +0 -6437 R +( 1.5) Cshow +1.000 UL +LTa +4430 420 M +0 6017 V +0 280 R +0 63 V +1.000 UL +LTb +4430 420 M +0 63 V +0 6297 R +0 -63 V +0 -6437 R +( 2) Cshow +1.000 UL +LTb +714 420 M +4088 0 V +0 6360 V +-4088 0 V +714 420 L +140 3600 M +currentpoint gsave translate 90 rotate 0 0 M +(Yields) Cshow +grestore +2758 70 M +(Energy [keV] in power of 10) Cshow +2758 6990 M +(Muonium production yields in Trigger Detector's Carbon Foil) Cshow +1.000 UP +1.000 UL +LT0 +4151 6647 M +(mu+) Rshow +4235 6647 M +399 0 V +1368 924 M +560 284 V +327 235 V +232 204 V +180 184 V +147 169 V +125 156 V +108 145 V +95 138 V +85 130 V +77 125 V +70 119 V +64 114 V +60 109 V +56 106 V +52 103 V +49 99 V +46 96 V +44 94 V +41 91 V +39 89 V +38 86 V +36 85 V +34 82 V +33 81 V +32 79 V +30 78 V +30 76 V +28 74 V +27 74 V +27 72 V +25 70 V +25 70 V +24 68 V +24 68 V +22 66 V +22 65 V +22 65 V +21 63 V +20 63 V +20 61 V +20 61 V +19 60 V +18 60 V +18 58 V +18 58 V +17 57 V +17 57 V +17 55 V +16 56 V +16 54 V +16 54 V +15 54 V +16 53 V +14 52 V +15 52 V +14 51 V +14 51 V +14 50 V +14 50 V +13 49 V +13 27 V +13 4 V +13 4 V +12 4 V +12 3 V +13 4 V +12 3 V +11 4 V +12 3 V +5 1 V +1368 924 Pls +1928 1208 Pls +2255 1443 Pls +2487 1647 Pls +2667 1831 Pls +2814 2000 Pls +2939 2156 Pls +3047 2301 Pls +3142 2439 Pls +3227 2569 Pls +3304 2694 Pls +3374 2813 Pls +3438 2927 Pls +3498 3036 Pls +3554 3142 Pls +3606 3245 Pls +3655 3344 Pls +3701 3440 Pls +3745 3534 Pls +3786 3625 Pls +3825 3714 Pls +3863 3800 Pls +3899 3885 Pls +3933 3967 Pls +3966 4048 Pls +3998 4127 Pls +4028 4205 Pls +4058 4281 Pls +4086 4355 Pls +4113 4429 Pls +4140 4501 Pls +4165 4571 Pls +4190 4641 Pls +4214 4709 Pls +4238 4777 Pls +4260 4843 Pls +4282 4908 Pls +4304 4973 Pls +4325 5036 Pls +4345 5099 Pls +4365 5160 Pls +4385 5221 Pls +4404 5281 Pls +4422 5341 Pls +4440 5399 Pls +4458 5457 Pls +4475 5514 Pls +4492 5571 Pls +4509 5626 Pls +4525 5682 Pls +4541 5736 Pls +4557 5790 Pls +4572 5844 Pls +4588 5897 Pls +4602 5949 Pls +4617 6001 Pls +4631 6052 Pls +4645 6103 Pls +4659 6153 Pls +4673 6203 Pls +4686 6252 Pls +4699 6279 Pls +4712 6283 Pls +4725 6287 Pls +4737 6291 Pls +4749 6294 Pls +4762 6298 Pls +4774 6301 Pls +4785 6305 Pls +4797 6308 Pls +4434 6647 Pls +1.000 UP +1.000 UL +LT2 +4151 6507 M +(mu0) Rshow +4235 6507 M +399 0 V +1368 6017 M +560 -282 V +327 -209 V +232 -179 V +180 -161 V +147 -149 V +125 -139 V +108 -132 V +95 -124 V +85 -120 V +77 -114 V +70 -110 V +64 -107 V +60 -102 V +56 -100 V +52 -97 V +49 -94 V +46 -91 V +44 -89 V +41 -87 V +39 -86 V +38 -83 V +36 -81 V +34 -80 V +33 -78 V +32 -77 V +30 -75 V +30 -74 V +28 -73 V +27 -71 V +27 -71 V +25 -69 V +25 -68 V +24 -67 V +24 -66 V +22 -65 V +22 -65 V +22 -63 V +21 -63 V +20 -61 V +20 -61 V +20 -61 V +19 -59 V +18 -59 V +18 -58 V +18 -57 V +17 -57 V +17 -56 V +17 -55 V +16 -55 V +16 -55 V +16 -53 V +15 -54 V +16 -52 V +14 -52 V +15 -52 V +14 -51 V +14 -51 V +14 -50 V +14 -50 V +13 -49 V +13 -27 V +13 -4 V +13 -4 V +12 -4 V +12 -3 V +13 -4 V +12 -4 V +11 -3 V +12 -3 V +5 -2 V +1368 6017 Star +1928 5735 Star +2255 5526 Star +2487 5347 Star +2667 5186 Star +2814 5037 Star +2939 4898 Star +3047 4766 Star +3142 4642 Star +3227 4522 Star +3304 4408 Star +3374 4298 Star +3438 4191 Star +3498 4089 Star +3554 3989 Star +3606 3892 Star +3655 3798 Star +3701 3707 Star +3745 3618 Star +3786 3531 Star +3825 3445 Star +3863 3362 Star +3899 3281 Star +3933 3201 Star +3966 3123 Star +3998 3046 Star +4028 2971 Star +4058 2897 Star +4086 2824 Star +4113 2753 Star +4140 2682 Star +4165 2613 Star +4190 2545 Star +4214 2478 Star +4238 2412 Star +4260 2347 Star +4282 2282 Star +4304 2219 Star +4325 2156 Star +4345 2095 Star +4365 2034 Star +4385 1973 Star +4404 1914 Star +4422 1855 Star +4440 1797 Star +4458 1740 Star +4475 1683 Star +4492 1627 Star +4509 1572 Star +4525 1517 Star +4541 1462 Star +4557 1409 Star +4572 1355 Star +4588 1303 Star +4602 1251 Star +4617 1199 Star +4631 1148 Star +4645 1097 Star +4659 1047 Star +4673 997 Star +4686 948 Star +4699 921 Star +4712 917 Star +4725 913 Star +4737 909 Star +4749 906 Star +4762 902 Star +4774 898 Star +4785 895 Star +4797 892 Star +4434 6507 Star +stroke +grestore +end +showpage +%%Trailer +%%DocumentFonts: Helvetica +%%Pages: 1 diff --git a/geant4/LEMuSR/YIELDS/fig.gif b/geant4/LEMuSR/YIELDS/fig.gif new file mode 100644 index 0000000..73da2e9 --- /dev/null +++ b/geant4/LEMuSR/YIELDS/fig.gif @@ -0,0 +1,768 @@ +%!PS-Adobe-2.0 +%%Title: fig.gif +%%Creator: gnuplot 3.7 patchlevel 3 +%%CreationDate: Thu Jul 21 10:48:48 2005 +%%DocumentFonts: (atend) +%%BoundingBox: 50 50 554 770 +%%Orientation: Portrait +%%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 +0 setgray +newpath +(Helvetica) findfont 140 scalefont setfont +1.000 UL +LTb +1.000 UL +LTa +714 420 M +4088 0 V +1.000 UL +LTb +714 420 M +63 0 V +4025 0 R +-63 0 V +630 420 M +( 0) Rshow +1.000 UL +LTa +714 1056 M +4088 0 V +1.000 UL +LTb +714 1056 M +63 0 V +4025 0 R +-63 0 V +-4109 0 R +( 0.1) Rshow +1.000 UL +LTa +714 1692 M +4088 0 V +1.000 UL +LTb +714 1692 M +63 0 V +4025 0 R +-63 0 V +-4109 0 R +( 0.2) Rshow +1.000 UL +LTa +714 2328 M +4088 0 V +1.000 UL +LTb +714 2328 M +63 0 V +4025 0 R +-63 0 V +-4109 0 R +( 0.3) Rshow +1.000 UL +LTa +714 2964 M +4088 0 V +1.000 UL +LTb +714 2964 M +63 0 V +4025 0 R +-63 0 V +-4109 0 R +( 0.4) Rshow +1.000 UL +LTa +714 3600 M +4088 0 V +1.000 UL +LTb +714 3600 M +63 0 V +4025 0 R +-63 0 V +-4109 0 R +( 0.5) Rshow +1.000 UL +LTa +714 4236 M +4088 0 V +1.000 UL +LTb +714 4236 M +63 0 V +4025 0 R +-63 0 V +-4109 0 R +( 0.6) Rshow +1.000 UL +LTa +714 4872 M +4088 0 V +1.000 UL +LTb +714 4872 M +63 0 V +4025 0 R +-63 0 V +-4109 0 R +( 0.7) Rshow +1.000 UL +LTa +714 5508 M +4088 0 V +1.000 UL +LTb +714 5508 M +63 0 V +4025 0 R +-63 0 V +-4109 0 R +( 0.8) Rshow +1.000 UL +LTa +714 6144 M +4088 0 V +1.000 UL +LTb +714 6144 M +63 0 V +4025 0 R +-63 0 V +-4109 0 R +( 0.9) Rshow +1.000 UL +LTa +714 6780 M +4088 0 V +1.000 UL +LTb +714 6780 M +63 0 V +4025 0 R +-63 0 V +-4109 0 R +( 1) Rshow +1.000 UL +LTa +714 420 M +0 6360 V +1.000 UL +LTb +714 420 M +0 63 V +0 6297 R +0 -63 V +714 280 M +( 0) Cshow +1.000 UL +LTa +1643 420 M +0 6360 V +1.000 UL +LTb +1643 420 M +0 63 V +0 6297 R +0 -63 V +0 -6437 R +( 0.5) Cshow +1.000 UL +LTa +2572 420 M +0 6360 V +1.000 UL +LTb +2572 420 M +0 63 V +0 6297 R +0 -63 V +0 -6437 R +( 1) Cshow +1.000 UL +LTa +3501 420 M +0 6360 V +1.000 UL +LTb +3501 420 M +0 63 V +0 6297 R +0 -63 V +0 -6437 R +( 1.5) Cshow +1.000 UL +LTa +4430 420 M +0 6017 V +0 280 R +0 63 V +1.000 UL +LTb +4430 420 M +0 63 V +0 6297 R +0 -63 V +0 -6437 R +( 2) Cshow +1.000 UL +LTb +714 420 M +4088 0 V +0 6360 V +-4088 0 V +714 420 L +140 3600 M +currentpoint gsave translate 90 rotate 0 0 M +(Yields) Cshow +grestore +2758 70 M +(Energy [keV] in power of 10) Cshow +2758 6990 M +(Muonium production yields in Trigger Detector's Carbon Foil) Cshow +1.000 UP +1.000 UL +LT0 +4151 6647 M +(mu+) Rshow +4235 6647 M +399 0 V +1368 924 M +560 284 V +327 235 V +232 204 V +180 184 V +147 169 V +125 156 V +108 145 V +95 138 V +85 130 V +77 125 V +70 119 V +64 114 V +60 109 V +56 106 V +52 103 V +49 99 V +46 96 V +44 94 V +41 91 V +39 89 V +38 86 V +36 85 V +34 82 V +33 81 V +32 79 V +30 78 V +30 76 V +28 74 V +27 74 V +27 72 V +25 70 V +25 70 V +24 68 V +24 68 V +22 66 V +22 65 V +22 65 V +21 63 V +20 63 V +20 61 V +20 61 V +19 60 V +18 60 V +18 58 V +18 58 V +17 57 V +17 57 V +17 55 V +16 56 V +16 54 V +16 54 V +15 54 V +16 53 V +14 52 V +15 52 V +14 51 V +14 51 V +14 50 V +14 50 V +13 49 V +13 27 V +13 4 V +13 4 V +12 4 V +12 3 V +13 4 V +12 3 V +11 4 V +12 3 V +5 1 V +1368 924 Pls +1928 1208 Pls +2255 1443 Pls +2487 1647 Pls +2667 1831 Pls +2814 2000 Pls +2939 2156 Pls +3047 2301 Pls +3142 2439 Pls +3227 2569 Pls +3304 2694 Pls +3374 2813 Pls +3438 2927 Pls +3498 3036 Pls +3554 3142 Pls +3606 3245 Pls +3655 3344 Pls +3701 3440 Pls +3745 3534 Pls +3786 3625 Pls +3825 3714 Pls +3863 3800 Pls +3899 3885 Pls +3933 3967 Pls +3966 4048 Pls +3998 4127 Pls +4028 4205 Pls +4058 4281 Pls +4086 4355 Pls +4113 4429 Pls +4140 4501 Pls +4165 4571 Pls +4190 4641 Pls +4214 4709 Pls +4238 4777 Pls +4260 4843 Pls +4282 4908 Pls +4304 4973 Pls +4325 5036 Pls +4345 5099 Pls +4365 5160 Pls +4385 5221 Pls +4404 5281 Pls +4422 5341 Pls +4440 5399 Pls +4458 5457 Pls +4475 5514 Pls +4492 5571 Pls +4509 5626 Pls +4525 5682 Pls +4541 5736 Pls +4557 5790 Pls +4572 5844 Pls +4588 5897 Pls +4602 5949 Pls +4617 6001 Pls +4631 6052 Pls +4645 6103 Pls +4659 6153 Pls +4673 6203 Pls +4686 6252 Pls +4699 6279 Pls +4712 6283 Pls +4725 6287 Pls +4737 6291 Pls +4749 6294 Pls +4762 6298 Pls +4774 6301 Pls +4785 6305 Pls +4797 6308 Pls +4434 6647 Pls +1.000 UP +1.000 UL +LT2 +4151 6507 M +(mu0) Rshow +4235 6507 M +399 0 V +1368 6017 M +560 -282 V +327 -209 V +232 -179 V +180 -161 V +147 -149 V +125 -139 V +108 -132 V +95 -124 V +85 -120 V +77 -114 V +70 -110 V +64 -107 V +60 -102 V +56 -100 V +52 -97 V +49 -94 V +46 -91 V +44 -89 V +41 -87 V +39 -86 V +38 -83 V +36 -81 V +34 -80 V +33 -78 V +32 -77 V +30 -75 V +30 -74 V +28 -73 V +27 -71 V +27 -71 V +25 -69 V +25 -68 V +24 -67 V +24 -66 V +22 -65 V +22 -65 V +22 -63 V +21 -63 V +20 -61 V +20 -61 V +20 -61 V +19 -59 V +18 -59 V +18 -58 V +18 -57 V +17 -57 V +17 -56 V +17 -55 V +16 -55 V +16 -55 V +16 -53 V +15 -54 V +16 -52 V +14 -52 V +15 -52 V +14 -51 V +14 -51 V +14 -50 V +14 -50 V +13 -49 V +13 -27 V +13 -4 V +13 -4 V +12 -4 V +12 -3 V +13 -4 V +12 -4 V +11 -3 V +12 -3 V +5 -2 V +1368 6017 Star +1928 5735 Star +2255 5526 Star +2487 5347 Star +2667 5186 Star +2814 5037 Star +2939 4898 Star +3047 4766 Star +3142 4642 Star +3227 4522 Star +3304 4408 Star +3374 4298 Star +3438 4191 Star +3498 4089 Star +3554 3989 Star +3606 3892 Star +3655 3798 Star +3701 3707 Star +3745 3618 Star +3786 3531 Star +3825 3445 Star +3863 3362 Star +3899 3281 Star +3933 3201 Star +3966 3123 Star +3998 3046 Star +4028 2971 Star +4058 2897 Star +4086 2824 Star +4113 2753 Star +4140 2682 Star +4165 2613 Star +4190 2545 Star +4214 2478 Star +4238 2412 Star +4260 2347 Star +4282 2282 Star +4304 2219 Star +4325 2156 Star +4345 2095 Star +4365 2034 Star +4385 1973 Star +4404 1914 Star +4422 1855 Star +4440 1797 Star +4458 1740 Star +4475 1683 Star +4492 1627 Star +4509 1572 Star +4525 1517 Star +4541 1462 Star +4557 1409 Star +4572 1355 Star +4588 1303 Star +4602 1251 Star +4617 1199 Star +4631 1148 Star +4645 1097 Star +4659 1047 Star +4673 997 Star +4686 948 Star +4699 921 Star +4712 917 Star +4725 913 Star +4737 909 Star +4749 906 Star +4762 902 Star +4774 898 Star +4785 895 Star +4797 892 Star +4434 6507 Star +stroke +grestore +end +showpage +%%Trailer +%%DocumentFonts: Helvetica +%%Pages: 1 diff --git a/geant4/LEMuSR/YIELDS/fig.pdf b/geant4/LEMuSR/YIELDS/fig.pdf new file mode 100644 index 0000000000000000000000000000000000000000..9a8599772b6c707b56f4c046d96a30aeba7b00ad GIT binary patch literal 9499 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%0D1oefGGF>@ce&~C;9&CtZ)#w-x&NJ z;i5kifw=yi5Wmhuvj3ZpIQ~8ZQcxI7s-JlMkpcJNFc1*Z7m*W;3Q5Cnj{n_A*2>IubznDlGh;Pl`LjN%b6M>k3 zq=baS&HlQy{&hhFuhLeomMAQblBNMv$p(YN|GWr7h52DfUP;McH)MA#${GSP@A{0<@vc^FFG$U|$b1a^Oswf=18FO(dXemPe2i?U&%>V!Z literal 0 HcmV?d00001 diff --git a/geant4/LEMuSR/YIELDS/gonin b/geant4/LEMuSR/YIELDS/gonin new file mode 100755 index 0000000000000000000000000000000000000000..585bbfb3bbdfeca2719b14164914ce1dae0827d5 GIT binary patch literal 12155 zcmd5?4{%gPn(rhNnAH>xiWm`hM@0$eGEVrn!NoNYh9nYT%pXJ$Uxt~1H#o^;Gcyo8 zbi+k7;}Ff2=y6wi75}4mbw{nradlg6SXl|4b(dm24$h1lcV%xVP|@QMJ=eM4ulsfK z60&vRRb5@DzV!R`_x0D^Uw41~UeEUvU(J%dygZ>(z9 zYsC~X4n^e6X@?9*RzRgflsP~J>@7e8e zlG;(BJ736l$;YEG!8gGp4FZ$cFSbFdLY*qKO>zU1G|zuL5z1aEMD|IClN17vr1^J( z4|rbE`frIw*4+{f&5TBxlWm@O%ri^XMc3rmDwj9Ny6h*3;vsS9>hLf0%CueIBw1l`=}H7SA(tsT?)De z#CaW^>Y=PV<#5gfgZ+O1)B{|A#)$Kg?*ZOw@$Z2A;42R24&aFx%>eRV@RwThRlxng z-?!waqtQX&1r~lDa;Jg)7LEgpM;*>;3;z05<~fu;f!HZvno|;(v_19e5H9%<)#BzumweSp2V1zXy1qg}(sa1DvpM zDfIRNUuo&z41PcGO%}d|;|G4%l0Sm-)4+8Wz7O&Od-Zk;Pk_7&_@IU707tRLImZ*l z1kp=*E4h)Uq0bHZAK;n&|6mkfV6Dd!q2SFobD_@_#_GC6G+teoC@l?|fmS2Y8i*v~ z)j^-H7G<;71>%vQ5sN2U!-1yiV7=k1n``)&22pQ0_;W1&dMz-9o*zWwMyw^=?As(O z#RGLdOTkh|&mV3f(!AjhtEmgHPqQIl(^I>&F0Pa=F13nd(YVjQq_!?rXZVC+Y-npU zTEeaISaTp6No+ATc`u^pLrO1fpcSPY7_DYh$Ku8cjJYWm3abXoA}GRG!*i;eBMFEq zYa~XNUu27OgV9(#ELGJd=7gI=(Q3AT0W(=|)O#_P^9;)z7dH)7H_>J=mQ1J_XsPiH zO$R3-G*mpiTrRE^7- zY$W4hjLV>$)ksqy(kv<~Dva44uc)l4UQ}VsvOSf0W{Zkds}?S*HcD}f5e6I|9I*1xux^?MBjjCH^_g}7P$5Cq5)-0x?Nl=JLgZmi*CI z9L{k#;CMC^!dbN-9}fiy=IB=&bI5LG4o&UMaUeg$9EVybb70ahIybmzPA=$?q zhx5D4ad7rC$D#fna~$9espB1|oY@aCr0fEWC;Kuwb?7aTn`=TMcViU)VJ?xoks~+x zcw#VzbR#Wbl6RtCVp_ta$xrl3OpEYsNSxRsF)d@diF+ibh0GG-Zi#6rlT&!2U1D0y zEF*4_n3glki5n%R1ub%yo#5=kzdKi&12{vo zx1;}Oy1Oygby-vpYqq^L9&6g4?%;91y*H7c>rb!!`p{ca2J4~yw&<&v_vDOcLwJu( zyS5)rT$MW8(d&4gICprcIC=8zLW<@cdMkBSt)*uh(J|xC5Y|K1XDb~Wto@}2hAW`BsK-f_Uu<=gG=@}b%@O625C zsqGQs-`ewp%e%vhc)XXkBwQ4QqxL+1RhX){U8)bq8+IopN-Xa%^;ObY-uC z%jh^zS%vo;Isb@@8| zX8UtrmTwfwkY*3&Bzsg2(hUKVuV&KBJ9Eiys4^c$by=_@m+WLgN)=>$*-YUssk8Nzj;nhW~B+d5WLX<+(Q~ko`4^xka#rf8h{ne>t~3P?XCFk(}A_ zfHN;S9a_wGu8QZrl2e0DnvK}Z8-=;&aTMRDipQuW*V6rJXWDA@vDREwOYT(+Zm5y9 zs-yODsfM2e(g`SEfhs0DxiK$W$&u1MfCKAY>T}W^aV*MXod17iUB`iTh^8A{$}^;W zlhO^vDPK0#aO$9M@Oc0A@55Pq`QRtFAM_o)+OcxNLEpg4pFRWBUzC6IBL{u&O+NPd z?HOPHz_R|#+C6wU+M8Ls4|%5WsI|TNGQPfnWqp~oyJhj9Rot8L^$sk9bk9NGt|y8e zD-Zgfo-p$;RCh05=UR2pw{!mMeL$Vb?VZOD`gRQd_5n0>`q(G`cH-BAXAk%ig(v<( ztsZM@7MVRzZ4SasX1!n16xeBhcg~tBy@89&pFv9Q+cUZ3X`1^NL)E^N(x~Rv_5WR$ zG@q~N;84B&TB=G(o#>(8IORltkM<5Evz8yoUMjKx|F@9vaZ1_zv()n1K`4paeBCz!{w18$Wy z(($b>Pp@^RmsvHzY;+DRDjTSlO_rBu*0{*zx#7%|dk5|)!}CCkD|2_Tt-O4o6(uF< zB=!!?n)dBVH$0u%-iF1PdU7lNXXNv-!GUDEwnLsWQ>LOA-MF{dR=GRfu=9VYeBcW? zrJ0HnRxY`SW*^lxi}f1HKRNdz>fd42UsJ3rT|jrQ)Qy&m(dY%#|Ch6BxNAymRxch{ zRDvb(Vdidkdf8OYk^lSY@{&|u>P`m=I`+$X^G{2cyNAnMQf_LxyjYfXh0m?ISHDY) zL$QD)(y^P%t9jani zhpfJT|CjmO4|V-Gm%KE4EBpk9nmTLgNqxS2`{Cs0Cy(~cq&&r-SKXcE;d^I8tQp^h!V?N4L?Rqd%=0AL62k2k zZYgH{>!<%ly1v}k+8S$hN1EMD;e;6rxu;LRI}(nD;?t+!D%=a)-s^U% zq7}9E*Qt8&E4}YL>)ZS3?Z^J&vC()B zR}aU7&p^?K+>Lw?c{%cP$QzND;ShQnc{z;SkNiR8r;tB|+zDS+3>{2)_xo!^-d5*0 zc{3)89FESssVH}Y_?}#XocB>;;RNUQ{6&`(uJpLd0Lwv+9S-N8Lzly~%i+}g%8r87 z9@i$1)9-QRw|I&gkoi6C{NVyY(vu&O4CTo;64)aZc;bC71^*J zx39zTa6$gBJd>(Du4d1qH6GVm`3w>2s|S@}pZy5=P#uhgJbqwt56X76K8%BS2k1fY z*w3MQ=p$h+m*<^^@9WuxM;xNE_&JBzSeOvc=GEb8TmEnIvISz7qY&U-2PN7I@vV$H z6DOmNcS=Cqh5WHR{IjKduw!5vnnx1v8Ticm21#^XgL)X#D5X;)Sx)(ZF=g?@etV|)p;7xXsh2ws)>~mb;`j9CB9$67CxQj-j|S=gglW{x9mxoptf;{C}<^?dFMZX-Wjv2@kHF zRc`91NHZ=VTZE@MmI!-ry*D!v*dRP+Aa3F;*wT!ODo?Zu&xYotXA>@=BeCWYzyPl` z9HqQ^Xo)6-CxZK7;la%#{;vlBD~8i0AUt8ySl=3G3L9n!H8p}tTxf>dg5j2gfnG+# z@-%`x^ah$DLE#A|Vy$stm2C{NPcf)p7e{F@*3=YkrVqW)#NUp%&$&0{Z-M~ae>zED z0B{3H|2`#uy92|mg^)|1jJy;?zd(KT5hmpN@T~dFN&HQNeu8rJ9bP<~hAitMlQQ%L zJZ$MdC`Vu8MrHaKohZvx3BtCHQI0<1RdklVSGUV@68$p$3ZLm)vXJY+GuzdD!=ng- za8)Vm&^L8r*RnraA9HTxC`ilEm+e9!eH{55pO#DFnSG_Nq%Sp5iT+O~t+xdQTCN>( z?U37}2MHeKNPldT4d`^hEkyZv^?P_33fVW>iEG}j&ru@8X2|KJ^=WL+ z>1T*lG=qu-P*}B0zoD>df&M{ZWl{P8h1IO;cY*>r^J-r!zUmP7ufj5u?;Hwq6ly;z ztTqt$ox9Gb#Y>4`D_I2*LHwyueyvT;~dNR@8b{m~TL8 z-72g+G1sTUd~*_l>ri2AJ|wO;g;m4?*OkJ`!*Km5jLl$61u}|YxS&8rI@qz@Q?UP2 zeL9k?TDVZ~iBd>+cxKUjv5zZXvz_SbwJw-wdq3ONbXxk(IQ5 zewVXY>(}2ETEG65AYKAN{ry1P2yBl5xgWSEH5>!-1h9Swo`{p5-;nm0kfXp{Km0CX zOvtCe6Ywp>op(9(e*@eLeL6;DDz-3hIjb!B>w&pHxN{lfFay{gL&6vd`g5>_EB~|H zR$yMq5>L#(T%>^cTh3x&w#V}3 zaHq{)*8w-8zK&Tb1D;~zR|2>Wcn|9H z9hCN}vDN4NHUdwwjW-6|3wa%5^CoaVu#T~rgu{Fg_+3liG~m;~bry~S+s7LR*8XoI z-mp@@r(PYl$78_un4Fh^?J+q&2e#YeFt9yF=R-RmBm4wd-wn_nPTLviMpILP?fPZ` z+hcm}0@imUtZ$C0FM@$+)D{ULf~|>oBDsFO2XQ+_Mg59eqo%s99sv@Dv3LaXRT)ca z7cTP|i+q*U%cZ~_6+_Z32yDRDLQ6E92!|LwVT5AFhG=YEAZo~O3nP$h6Y3Kslx%9+ zqFeJVUp(BH2C5;A*o=N2)+#?-q*i&)<_R+Js4h`v7?GI#PBK={DK!|1kwBOdOCpH# zxgQ8oAOQq+gm5L-nhZ+pjYQC)L~y-qXjB2BjH+f=z-#%pjnEsV*S<)suBsR+t_(FP zV?^qem)jzz3k%{I4PeM_KDzEQzr~(U*Lyh{2J1jj+6%(tdQs zk|lLM1Q#w`RO7?4lOBP)3f>Z7fTOC82)+Z)ilQ4adDe0n9f3Du0=4^_Ul~p)H|-0B n{Fu?PVg*Odr`|c|xsNe++3Hg7`eX1u^k0rlr{;Vs5pe57m^`Bn-D}4Uz$#b*VyT9yI*5) zP=hf_3>j034rR%TJ2;{>Tgy8Bu;uPd7???L-Px>VxnWGZu}0j^!fLcw23=-)zwh36 zlb4XK0=IT=*Xet|d(J)g|M#7T^{R50%cUuor{!xzo$YSVT=-Kjmz=qpPxELqwQ1UA z+5|+AH@6uwAdvux3J~W8<&y_IcN_SiZvm6Yqi&LLObcqfRMSXIuX!au0i1Z*?IATI z!Rb6rf2mB1qKUdKTUjg8vYaH=YZB-x&=e5e#h~wkrV_wi z0V)EaT4-lk7wWqZbR~%CeW1%g=j$dSfoNO!45MkZ3qUN}C7{V5I@TY}BKnG$?jjI} zz;{4}plKlX?^tI-*+84yGaC%*dk{1PoR7?iCovVB?E`y}*`@7eKEM_}jMrcH~zKJj2FIAYTUjt}XxXhz|hQ z*!W?{*8wlI@%JE~0PePN1@PgWZV$)6B#h4YA+MYdfft~!8S*zF%<_LZhOc2xq^$bT zb=Pr1%+ri@HC8lLS!0!ygv?;lu#&-um8uNsdNtzaYzU?zAtRo$lHp)uWoWgb*UU2l z%R@-F68yO~zd;F%qvxhb%7`bzF@3X0lnU19wu0r5zIh~vNNnT(tfnT&GR=X2ttXO9 z>DBeaDyx^*q$F5cVoSuMDLqhLT@$Y{bj>g}HZ>WEa55E-1)~vbi?O-*JSs7)^xW#a zq=a>30~(d_l(7ocZ;aQ6Wrp)3h(fi)b1P#J3!-e88f#7{5*tt8JhPq`ipEo6Tj$(x ztUg-Ff}BI|t~OQ|qknHS>~=Z7uCa?*W6cf4)0R+?N>u5?{lea`y9?1HL+Jc+L2HfE zsz2OpREIZ4QdT&*BpOVm!uC**ZEI|7jK_?W6--)&!SUb7p?{;6x-V&I;id$mHikk* ziqR#SQ5(BI603*CRJt)tW=P5#MyM%h1g&sW1of+21(o%Yn2}C}Q7?mXb|#HM^yIQ7 zON=@GVr^Mf<>DnqsUuY4pQ9~VyLQpyN}~i@k`M?4AY6+1n&b^?i=RkX(cwl81j-|Ao$do zx-x>TE?@hRLmo?x$Pb?O-e2E~mD8;~ZtFT7X?DXrQk3VGy^mYdfEiQM$9_-DK2rn3c11_uXn zaMRfmCV7Ls0<%R-cEMnmz-$?l$CAPQ0<(ooAMqZ6*;3|A;!c6tVkWzEuvuWXoH?I3 zAuwCeEF-QHm@R2m5C;Tii<$xAGJ)B$=33%nf!V@l9kEYfwzSC#4SEG;i<=2zO<=aX z*+e|_XGBbA517rw0|K)r%dVD_llOI!wA@*nrKecbZNP+)bnxd8jIdGcwu z=k_(`f*o#8b|LC>va=I?Uz0@w?XGQy-ols&w70OntzA}LuD5;tnIngU48}+EZQfTg z4$`w;Y{EIY-P`(}b!pqFmM-^CiF5A_N2ibfwt%9pBZt~f$+7if0tJK4DXa^XPi#3+ zXfiU_+j7{8OoZH26jn&gI*bg>9+r6sLfKN(26Bk(&`$?UPRQ(Me^PPg$HRgbIs}Jo z!QV*1j6Repn296$M@Ks9uQ{E$;+kCgOfG#o%j1(&Zt|3aOmg$8Q2yM!3jDL6XNL8^ zB6Jl6vb`#B=}0k#Q!f>%%k0#bAWvD1dsU*RRN&|tRf$~sWG+3F#mr-2L@OLQ#NOF< z!otLC*FEjEg>Cv!TkS~{sYCAzWUp6Q1NH>6(-g!MLY6}0&SCu>wFf%%p+I%^7OYe) zhut0efq+Q%rW83oqpfv2TCaUK|3wxD0@+t2vrR+}zKwz?&XXgWk-5mM|G!ja%$rmJ zDpaA|n_T7s#^VQ5b18+0dbC+mcM7H-YOUz0BV1R zsIB+lK%T3&qo|b&N#0 z=pNLOcAQ~RVMjZZsk;1)s0+qPlM1|`0u3tAp#txJE!wR^R5hm!PDat#%yvs1lkBrQ z$mX|7zU-spmpM}2Yp1;Wtggjy`Q4~wmx_Kx^jmhC8_r6D5%-)k4N~OZ;9$w7SQC3t z-Y-Su(t+{2?F83HHGEIE)t+hBz3sI{awvD}*<-!m`>8b8D-TK~(XTJy4yH;-SuI<*JzxnkZpw4vb_G8`p&VfHX zh>T7j{p|OH|2lB$u#Um@97@l{NKWoTvkt1|Y~KA9yA6F@Bm!KWhNZUJLqn`EXd3g8 z;baXeS%(U&R)K#wEe3*9(c{DE{7UL2DK!`qv(ba{_I35AhwMcy`$hk0 z?fomZXQl_o*)*8~re^N+(VXr2uJ+pJ$4^tP(ojFs(3cwe z3m8Vre4Lq9hLGH+up*z7gJP4nqjf4KYam-9m9(62x9f$uggaNPI4}QE^{E|`OM9|^ zDIyCwXKV!tDR#WHt+fam+jsNd!4F7&n~Kl9L4oX7i00hFM*VBICU;TKwg(HjWTt1g zJm_(yujTNYiqdC)e#$P2+qAG{Z_>;z90;;$87+1jwAHZqU&$;-;yotSZgORxVcEpC z%^dGoQ-d_>5Rt^eH2dm*=5ifRpTXMD(a!%_?;QL(ujJItAEYj6`AmWD(nXscpBtLlYtGw1D9rxwZ7iDij+uwB$&la|xwl7ztps$+|NVj@Dl%!W4zmM3gTUPUF2I zDy2|#<;tEc+Zd1GZl?L`gO+B6Q&aw1$($R*mKm@2U3;y_ zB6aPxw`jfvzT&Gi-FKT$oBaddqQ$GKS6`*nv~<1mqWGOrI%kyug zQe08Ao#^~J_^+ZBcyQf><@+%F1=zPa%6|`ksta$6=&-^rlHh)pI-y0SGU=@P`pz02{=U2FY zxUcz%+oR-{wdB|My_@}>fZv;6>+%;h`n`~49*=@1ce*|Q%rpoO=aF~RUsUP$#{5Nh z`Mv8!*a!COpiiE1dv?QjuN|F76|~~`tM!2%!L0ZJWkAC^QEu{2gE(tg|55zqlFzp4 z1D|iJqxdUCv2m?%6;Hzn?D~Q;Zmn!;k6Q~BG-}Vebc9a0cIW-rt^Lwn0Pv-o5eM{}IXm3&`VoD(=gC!=*!%W+5LmwP+*EQ1On;H|BxuZV%s-d*Jguk8Q&@ zdJhQ0B|a1JSTW+va|r&YkIVZc;5j>_&#_&ZfMJ!8Z}uwuDe89$G~o%1JJ1Z!ji7SS z8c+jhGw3nUv!I`W-UR&?^a1Eo&?(Ra+ybV6W`J%4m4nuR8bF&tkAXyyGzn^_&M_f-TfUlrf=C3p7R(pehcT>j6~-24sl`Tt78Ht?sm zG+Mz8@U5iuO%;l8?M-O@SlkNx@%%K~3U1W=W-w)9o!k;bLg`yc&A&00_HV{(X(S#S z1q|?#;V9*0AQ81Re*_PinjbG?_-_CJD~^>nsQJUD(U1%_h7GeGDHVcBJh+9MLg9pE zpp?8Q2vampInMP@QP{-@Qx6^ENvlCz9~kBuF%z?D55mls zvPwRL@P#1CagFJL-0=Eq%W*|!l-%Qppd9Pl1-UNB zWt9+o)`9LxkdhPMAF)_36&(4e^l`saawl+~H~~5C<;p3!mmPB4g0DfNR4O5xNBFmP zm|ZWvt3r{+^kmKHFL2fGrY{xXD0TA8S<1K$y? zQO?=UipRZ@x|ExV!@_3@z*lngIR=#5b0y9I7s&6se1~V*I4?QWocela;7u2D$|-#c zJAJM*#PUnMTu&sHIdk2RSmwa>L1NjWTn8kUy{h*1e9`lAUQ50#5a+MN!V_l)iRFah ze3Y0c6|7gom@`<~641}LM+oPU#8RH~MPfXt!*O0n%&*g$#_=yPTTatB&Lw8A$nh*O zPcm}cN-S4mj!%g(Dd9K{C6*^8jyH+r*LjXBiRB8z@gp$?hr{KIui_&S`D4D$=Z{(` zSpO@;ICGleYqEPmI_t9AtXbe}|o4AFvmE zWw&q&nB$oH=@`Ql-9bhT= zlTqIka53~P5Exf(;4cfWW0$6;2V4gHuC4D9Y~BIj8XMmM?5zJin+L4k1K7Uha*F~7<>X%|7>zo<%xj^fm9o+e4Sv{`7)w^Ksy3=B zYgXffy4PzoOKzRTNRtZ5E8r0)?Dwz%mTpWp@Kvt;1fOX2Us#S{@RT)O5al7$A zI2p$Qlx8=|tfH*UX*wXDtBgimiEZNtX=gK9$P7mlb2MY=ohuius9a*(d7O(853M^! zt7096smIvpl{HSon=#ymgkj!)9{G+K4~VHQV@g9~sI$#_#t7MiVP%apT^hq>$D+$bJu@WmQa~SIw2Hqc}nU5ySe9kibv9lKzKgPNn(kt{u-xZFB=lb^m)StvD#?8Mp!&MaRI>EZ!e&$%FAnXShp=&T%}__;c{UwsA@SyGmOzQ$_NZR+nQ@s vFWO^htR literal 0 HcmV?d00001 diff --git a/geant4/LEMuSR/YIELDS/gonin.cc b/geant4/LEMuSR/YIELDS/gonin.cc new file mode 100644 index 0000000..ebec310 --- /dev/null +++ b/geant4/LEMuSR/YIELDS/gonin.cc @@ -0,0 +1,91 @@ +#include +#include +#include +#include +#include +#include +#include +#include "yields.h" + +using namespace std; + +void Draw(double mass); +std::string flt2string( double& number); + + Yields Gonin; + + +int main() +{ + double Energy, Mass; + double yvector[3]; + // Yields Gonin; + + /* std::cout<<"Enter energy in keV: "; + std::cin>>Energy; + + std::cout<<"Enter mass in MeV/c²: "; + std::cin>>Mass; + + + + // calculate yields + //Yields(Energy,Mass*1000); + + // std::cout<<"Yield+: "<< Yield_plus< +#include +#include +#include +#include +#include +#include +#include "yields.h" + +using namespace std; + +void Draw(double mass); +std::string flt2string( double& number); + + Yields Gonin; + + +int main() +{ + double Energy, Mass; + double yvector[3]; + // Yields Gonin; + + std::cout<<"Enter energy in keV: "; + std::cin>>Energy; + + std::cout<<"Enter mass in MeV/c²: "; + std::cin>>Mass; + + + + // calculate yields + //Yields(Energy,Mass*1000); + + // std::cout<<"Yield+: "<< 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¬>>`*C>av1dSuVYF7JeBnO*b?;W+>)^H zpCd}oo|&i;tKas3IjYAz)ktQ)PFhKjipf$%2fA04Cdv!N$4V)A!|neDQzBTFyB&>3 zfDi=j^TdX_psOlfA7%;9tVl{8jgkn4l2LYcvhR(3aGvaK`ygV!R$aM0we4|?uz*TE zM2F(&-=-=X5n&mieV*I)Y&nfXk()|^pc&e5Lfe2&u**0I-$HPyasnq9L@1vMdpxfY zIPb^74e_>5edn*Y7btt723s;pXZpOrvU&RnN5b07%*k;;$CnqyQ5}2J?oZEhid7=H zq9Rvi^IjI;Ow)?Ba){_VE1P9JpkWgbWVV;L z_{g-KO5XlqH=*B9UUA39#=$y%&Tv_Hu#qa6zXbm@_1c0Dof6H*;1nfDphS=oW}s+L zILIgEIXA`&np-dEs11A!jPKtGSW31wCgyy+Bo)ffeFya9p$lG!Xk(9RJD4yP4_`ur zi;IlM*2MpnRL{H3l){wU6zmj>!f2;ZewAwZ2^xzSHyW(SFOeItmI8+j?Xn1=Zed*= znTvGRzQnXT+nfq|O@vZ$^2cPIM(Brvcmq37D2G0}tY}B%F(}mF%M6P(jP{#S!qQj0 zC)%Q*vNK{*;^pnRCFx_!smoJQH+1zafs-GzXz3Vr0%$kAIAuRrVVU~)4@Gg>PAu(X zIyh*wDo&?kEw+HhB&{UwSzZheRtc4N-B*7Rd1;3&lO?>cX0SbCH|=D4x~k3U6W-6n zUj}^+ChVIbxjgj=X&F{y;>*0}4wW?f>tCQGCVpRYvC=JzC zNj1lxxUpp}_cTn3& zHbYP51E1NO)*&{k8iF*fu`gklhf9*N>#uS5M&3FSZz+-8-SmvtQtJ6WV?=jyjcVUh zKBoQ_2z{C3@ot=5@|TX8j`k$KuBq~4bHCer*@DgW>US{UQi0S|#{AFP+O{c#tyY3e zpG@eRi0&Faxw}hOeSeeQQbGH0LW-cR0^3mHdRi=#!$-qa;!h?YzbZRlhBV=^d9@I* zkv0%ehwZ%?d;UbeVQ^4=huv*!{n&Rd2zOOcU$Yvv$q1~;5HMV z{eGy1(|QJjDKIM~B$R;KMD?h+i=jT#&WB_BrKmH9n#T9dxn&lOqMu&h!X{MY(ZE(# z^ok$2FdPsWyAwKLQt*EH^v^l&OfB9K1_T@3f$=yY0-3=H}WELrk=VM z@}7%1yorL2G4%dPI3b}-J45%20#By`n%xMGdzJbOi%8u=ca_6@el!~)XafP+-rq{MVs~P35Dr`9&+HdKAzdrq zkugcvWMhoPsqo{!KF?+GJXMFg`dH44rR96^zkZB|+)cNV9QL8rE*8^BIO4s?RBsKA z8>qOUvqG+Sse9kD)rxfC{w|XST7VV~>x>7?RCkl;InLI*_KOgYBn?#sWhYF8tuWU9 zT_+WxRrZr@>PKZ=6vsXXqO|VMTQR(?8JPLnMA$n|^7~Uxh@tRhwNJP8- z)MzqCc+%}i;R6*~nBH?_cfb#65pSyf3^j5i5g!(R*t8v)dsXsWyTB9L57dhga=*EB zo}26x!MD}+wD>$fO*D!L88&Icr-to{`&$`3e#{Kh`MdlWAFJgZVn&7p@4SoM_eDOh z=XO88vvp2Vx|h!)%Eo)Mv9NTk9xvaPOyOG?*2ZmYSiv-e};n2 z-i=o@OXvH`p#A}jcoTsbZGsJwKpEfkj>uYdA(2tT-h~@vU@AH zg6_X46xlTBnT+yS3u>!d(=*eNnGcrn(FFe0w$pq~AXbXs&BeUG;Bz?7qJKT zu}2%{kM*jj^wL0cI&Ki}YJ$j_ld4871Vt_2?#u=#f=|wSg`YmZL&t~*3XfP-t{CZx zynnkW>BU|dvD^x=Q0kTo*6knop7l4qazJ7kZ*G$QI3gUs#fd>wd1GSEzx*yVI)!-E zenwo&Oxh^g#BL9tw;3YQ*Op+xUzm7wSj}oMhnP*q6_$Pdz=l=Um0m{8L_P7Pold{# ziz4^aI~$?`7kr$;4yV2cu)tJ&=C>}{dTc~=j$@}5bY)px*cee%D`T+}=Nruj*vx1N z*UmV$D??oP{27Zr*@&8I=4RWd9cv#$CbwoAskh06ZzNyd*v<@VMYVMQ{ugssl_jbi z<>ZC({pt8ny~qDlqk_fsY+=z#BH_rdl?{7XR8h=`g9aC)Wyfid39Yq105V6AQ);4h0FtiT*06i z@dE-}!2)f~72YqnKX?ER>Ry1G`wwkifZlH*P`})~fI@%(oB-?};Q=1M@2`0NG6)Lh z3J#b@{i68)g8O3tl%Y^E{=oz8Q8J>&eqUT%fB|_SfI)v60f7DE02JQ;kL&*k{*~;% zbcF(T`)z~Yzfggnfq;7c9T2~Cy5j#E4)yz62OcgyAgF%Y>kkev4}|~*x%vwQ33%m- z!f%NG-7gCE_uN14fiWP2ewqC@>;I3xR|5PY!o~N~hyNsk(hC)fS3q36Jb#q@1$0FL zl{NoF`qw=W2&e$O3P>na>mR!#|JaED_L2()=8Qa`JNn%L?ibjm7UVAQ}N?{~qJy1GXXl zbBv!KXq*27j+^&C#{dA-7TdqzAiPi@<^DYe<>KZ8wp0EE2jznB06Sy<9^-`y0ISx& z$2bLefNuOh$N2wyjF7kZc8nCp5p(V|q-91}7JsZ0#FG2Y@`8Yw0j87CLK>rJ^oUnob literal 0 HcmV?d00001 diff --git a/geant4/LEMuSR/YIELDS/yields.cc b/geant4/LEMuSR/YIELDS/yields.cc new file mode 100644 index 0000000..e92a607 --- /dev/null +++ b/geant4/LEMuSR/YIELDS/yields.cc @@ -0,0 +1,102 @@ +#include "yields.h" +#include +#include +#include +#include + +/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + Die Funktion sowie die Parameter sind uebernommen aus: + + M.Gonin, R.Kallenbach, P.Bochsler: 'Charge exchange of hydrogen atoms + in carbon foils at 0.4 - 120 keV', Rev.Sci.Instrum. 65 (3), March 1994 + + +fIRST IMPLEMENTATION BY ANLSEM,H. IN FORTRAN +C++ CONVERSION T.K.PARAISO 04-2005 +c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ + +Yields::Yields(){;} +Yields::~Yields(){;} + +void Yields::GetYields( + double E, // kinetische Energie in keV + double masse,// in keV / c**2 + double yvector[3])// pointer to yields table +{ + + // YIELDS FUNCTIONS PRAMETERS + double a_zero,a_minus; + double k_Fermi,k_zero,k_minus; + double zwo_k_Fermi; + double k_Fermi_Quad,k_zero_Quad,k_minus_Quad; + double vc_minus,vc_plus,v_Bohr,v_rel; + + + // YIELDS FUNCTIONS PARAMETERs VALUES + a_zero = 0.953 ; + a_minus = 0.029 ; + k_Fermi = 1.178 ;// ! [v_Bohr] + k_Fermi_Quad = k_Fermi * k_Fermi ; + zwo_k_Fermi = 2. * k_Fermi ; + k_zero = 0.991*k_Fermi ; //! [v_Bohr] + k_zero_Quad = k_zero * k_zero ; + k_minus = 0.989*k_Fermi ; // [v_Bohr] + k_minus_Quad = k_minus * k_minus ; + vc_minus = 0.284 ; + vc_plus = 0.193 ; // [v_Bohr] + v_Bohr = 7.2974E-3 ; // [c] + + + + + // ABORT IF ENERGY NEGaTIVE------------------------------------- + if (E < 0) + { + std::cout<< "Error in method ''Yields'':"< ABORT!"< exp(-vc_minus/v_rel)) Yield_minus=exp(-vc_minus/v_rel); + if(Yield_plus > exp(-vc_plus/v_rel)) Yield_plus=exp(-vc_plus/v_rel); + + Yield_zero = 1. - (Yield_minus + Yield_plus); + + yvector[0]=Yield_plus; + yvector[1]=Yield_zero; + yvector[2]=Yield_minus; + + + + +} + diff --git a/geant4/LEMuSR/YIELDS/yields.cc~ b/geant4/LEMuSR/YIELDS/yields.cc~ new file mode 100644 index 0000000..285e30d --- /dev/null +++ b/geant4/LEMuSR/YIELDS/yields.cc~ @@ -0,0 +1,103 @@ +#include "yields.h" +#include +#include +#include +#include + +/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + Die Funktion sowie die Parameter sind uebernommen aus: + + M.Gonin, R.Kallenbach, P.Bochsler: 'Charge exchange of hydrogen atoms + in carbon foils at 0.4 - 120 keV', Rev.Sci.Instrum. 65 (3), March 1994 + + +fIRST IMPLEMENTATION BY ANLSEM,H. IN FORTRAN +C++ CONVERSION T.K.PARAISO 04-2005 +c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ + +Yields::Yields(){;} +Yields::~Yields(){;} + +void Yields::GetYields( + double E, // kinetische Energie in keV + double masse,// in keV / c**2 + double yvector[3])// pointer to yields table +{ + + // YIELDS FUNCTIONS PRAMETERS + double a_zero,a_minus; + double k_Fermi,k_zero,k_minus; + double zwo_k_Fermi; + double k_Fermi_Quad,k_zero_Quad,k_minus_Quad; + double vc_minus,vc_plus,v_Bohr,v_rel; + + + // YIELDS FUNCTIONS PARAMETERs VALUES + a_zero = 0.953, a_minus = 0.029 ; + k_Fermi = 1.178 ;// ! [v_Bohr] + k_Fermi_Quad = k_Fermi * k_Fermi ; + zwo_k_Fermi = 2. * k_Fermi ; + k_zero = 0.991*k_Fermi ; //! [v_Bohr] + k_zero_Quad = k_zero * k_zero ; + k_minus = 0.989*k_Fermi ; // [v_Bohr] + k_minus_Quad = k_minus * k_minus ; + vc_minus = 0.284, vc_plus = 0.193 ; // [v_Bohr] + v_Bohr = 7.2974E-3 ; // [c] + + + + + // ABORT IF ENERGY NEGaTIVE------------------------------------- + if (E < 0) + { + std::cout<< "Error in method ''Yields'':"< ABORT!"<1) Yield_minus=1; + if(Yield_minus<0) Yield_minus=0; + if(Yield_zero>1) Yield_zero=1; + if(Yield_zero<0) Yield_zero=0; + if(Yield_plus>1) Yield_plus=1; + if(Yield_plus<0) Yield_plus=0; + + yvector[0]=Yield_plus; + yvector[1]=Yield_zero; + yvector[2]=Yield_minus; + + + + +} + diff --git a/geant4/LEMuSR/YIELDS/yields.eps b/geant4/LEMuSR/YIELDS/yields.eps new file mode 100644 index 0000000..72863c8 --- /dev/null +++ b/geant4/LEMuSR/YIELDS/yields.eps @@ -0,0 +1,274 @@ +%!PS-Adobe-1.0 +%%BoundingBox: 0 0 720 504 +%%BoundingBox: 0 0 595 842 +%%Creator: KDE 3.1.3-6.10 Red Hat +%%CreationDate: Thu Jul 21 10:56:35 2005 +%%Orientation: Portrait +%%Pages: 1 +%%DocumentFonts: + +%%EndComments +%%BeginProlog +% Prolog copyright 1994-2003 Trolltech. You may copy this prolog in any way +% that is directly related to this document. For other use of this prolog, +% see your licensing agreement for Qt. +/d/def load def/D{bind d}bind d/d2{dup dup}D/B{0 d2}D/W{255 d2}D/ED{exch d}D +/D0{0 ED}D/LT{lineto}D/MT{moveto}D/S{stroke}D/F{setfont}D/SW{setlinewidth}D +/CP{closepath}D/RL{rlineto}D/NP{newpath}D/CM{currentmatrix}D/SM{setmatrix}D +/TR{translate}D/SD{setdash}D/SC{aload pop setrgbcolor}D/CR{currentfile read +pop}D/i{index}D/bs{bitshift}D/scs{setcolorspace}D/DB{dict dup begin}D/DE{end +d}D/ie{ifelse}D/sp{astore pop}D/BSt 0 d/LWi 1 d/PSt 1 d/Cx 0 d/Cy 0 d/WFi +false d/OMo false d/BCol[1 1 1]d/PCol[0 0 0]d/BkCol[1 1 1]d/BDArr[0.94 0.88 +0.63 0.50 0.37 0.12 0.06]d/defM matrix d/nS 0 d/GPS{PSt 1 ge PSt 5 le and{{ +LArr PSt 1 sub 2 mul get}{LArr PSt 2 mul 1 sub get}ie}{[]}ie}D/QS{PSt 0 ne{ +LWi SW gsave PCol SC true GPS 0 SD S OMo PSt 1 ne and grestore{BkCol SC +false GPS dup 0 get SD S}if}if}D/r28{{CR dup 32 gt{exit}if pop}loop 3{CR} +repeat 0 4{7 bs exch dup 128 gt{84 sub}if 42 sub 127 and add}repeat}D/rA 0 d +/rL 0 d/rB{rL 0 eq{/rA r28 d/rL 28 d}if dup rL gt{rA exch rL sub rL exch/rA +0 d/rL 0 d rB exch bs add}{dup rA 16#fffffff 3 -1 roll bs not and exch dup +rL exch sub/rL ED neg rA exch bs/rA ED}ie}D/uc{/rL 0 d 0{dup 2 i length ge{ +exit}if 1 rB 1 eq{3 rB dup 3 ge{1 add dup rB 1 i 5 ge{1 i 6 ge{1 i 7 ge{1 i +8 ge{128 add}if 64 add}if 32 add}if 16 add}if 3 add exch pop}if 3 add exch +10 rB 1 add{dup 3 i lt{dup}{2 i}ie 4 i 3 i 3 i sub 2 i getinterval 5 i 4 i 3 +-1 roll putinterval dup 4 -1 roll add 3 1 roll 4 -1 roll exch sub dup 0 eq{ +exit}if 3 1 roll}loop pop pop}{3 rB 1 add{2 copy 8 rB put 1 add}repeat}ie} +loop pop}D/sl D0/QCIgray D0/QCIcolor D0/QCIindex D0/QCI{/colorimage where{ +pop false 3 colorimage}{exec/QCIcolor ED/QCIgray QCIcolor length 3 idiv +string d 0 1 QCIcolor length 3 idiv 1 sub{/QCIindex ED/x QCIindex 3 mul d +QCIgray QCIindex QCIcolor x get 0.30 mul QCIcolor x 1 add get 0.59 mul +QCIcolor x 2 add get 0.11 mul add add cvi put}for QCIgray image}ie}D/di{ +gsave TR dup false ne{/languagelevel where{pop languagelevel 3 ge}{false}ie} +{false}ie{/ma ED 8 eq{/dc[0 1]d/DeviceGray}{/dc[0 1 0 1 0 1]d/DeviceRGB}ie +scs/im ED/mt ED/h ED/w ED/id 7 DB/ImageType 1 d/Width w d/Height h d +/ImageMatrix mt d/DataSource im d/BitsPerComponent 8 d/Decode dc d DE/md 7 +DB/ImageType 1 d/Width w d/Height h d/ImageMatrix mt d/DataSource ma d +/BitsPerComponent 1 d/Decode[0 1]d DE 4 DB/ImageType 3 d/DataDict id d +/MaskDict md d/InterleaveType 3 d end image}{pop dup 1 eq{pop false 3 1 roll +imagemask}{8 4 1 roll 8 eq{image}{QCI}ie}ie}ie grestore}d/BF{gsave BSt 1 eq{ +BCol SC WFi{fill}{eofill}ie}if BSt 2 ge BSt 8 le and{BDArr BSt 2 sub get/sc +ED BCol{1. exch sub sc mul 1. exch sub}forall 3 array astore SC WFi{fill}{ +eofill}ie}if BSt 9 ge BSt 14 le and{WFi{clip}{eoclip}ie defM SM pathbbox 3 i +3 i TR 4 2 roll 3 2 roll exch sub/h ED sub/w ED OMo{NP 0 0 MT 0 h RL w 0 RL +0 h neg RL CP BkCol SC fill}if BCol SC 0.3 SW NP BSt 9 eq BSt 11 eq or{0 4 h +{dup 0 exch MT w exch LT}for}if BSt 10 eq BSt 11 eq or{0 4 w{dup 0 MT h LT} +for}if BSt 12 eq BSt 14 eq or{w h gt{0 6 w h add{dup 0 MT h sub h LT}for}{0 +6 w h add{dup 0 exch MT w sub w exch LT}for}ie}if BSt 13 eq BSt 14 eq or{w h +gt{0 6 w h add{dup h MT h sub 0 LT}for}{0 6 w h add{dup w exch MT w sub 0 +exch LT}for}ie}if S}if BSt 24 eq{}if grestore}D/mat matrix d/ang1 D0/ang2 D0 +/w D0/h D0/x D0/y D0/ARC{/ang2 ED/ang1 ED/h ED/w ED/y ED/x ED mat CM pop x w +2 div add y h 2 div add TR 1 h w div neg scale ang2 0 ge{0 0 w 2 div ang1 +ang1 ang2 add arc}{0 0 w 2 div ang1 ang1 ang2 add arcn}ie mat SM}D/C D0/P{NP +MT 0.5 0.5 rmoveto 0 -1 RL -1 0 RL 0 1 RL CP PCol SC fill}D/M{/Cy ED/Cx ED}D +/L{NP Cx Cy MT/Cy ED/Cx ED Cx Cy LT QS}D/DL{NP MT LT QS}D/HL{1 i DL}D/VL{2 i +exch DL}D/R{/h ED/w ED/y ED/x ED NP x y MT 0 h RL w 0 RL 0 h neg RL CP BF QS +}D/ACR{/h ED/w ED/y ED/x ED x y MT 0 h RL w 0 RL 0 h neg RL CP}D/xr D0/yr D0 +/rx D0/ry D0/rx2 D0/ry2 D0/RR{/yr ED/xr ED/h ED/w ED/y ED/x ED xr 0 le yr 0 +le or{x y w h R}{xr 100 ge yr 100 ge or{x y w h E}{/rx xr w mul 200 div d/ry +yr h mul 200 div d/rx2 rx 2 mul d/ry2 ry 2 mul d NP x rx add y MT x y rx2 +ry2 180 -90 x y h add ry2 sub rx2 ry2 270 -90 x w add rx2 sub y h add ry2 +sub rx2 ry2 0 -90 x w add rx2 sub y rx2 ry2 90 -90 ARC ARC ARC ARC CP BF QS} +ie}ie}D/E{/h ED/w ED/y ED/x ED mat CM pop x w 2 div add y h 2 div add TR 1 h +w div scale NP 0 0 w 2 div 0 360 arc mat SM BF QS}D/A{16 div exch 16 div +exch NP ARC QS}D/PIE{/ang2 ED/ang1 ED/h ED/w ED/y ED/x ED NP x w 2 div add y +h 2 div add MT x y w h ang1 16 div ang2 16 div ARC CP BF QS}D/CH{16 div exch +16 div exch NP ARC CP BF QS}D/BZ{curveto QS}D/CRGB{255 div 3 1 roll 255 div +3 1 roll 255 div 3 1 roll}D/BC{CRGB BkCol sp}D/BR{CRGB BCol sp/BSt ED}D/WB{1 +W BR}D/NB{0 B BR}D/PE{setlinejoin setlinecap CRGB PCol sp/LWi ED/PSt ED LWi +0 eq{0.25/LWi ED}if}D/P1{1 0 5 2 roll 0 0 PE}D/ST{defM SM concat}D/MF{true +exch true exch{exch pop exch pop dup 0 get dup findfont dup/FontName get 3 +-1 roll eq{exit}if}forall exch dup 1 get/fxscale ED 2 get/fslant ED exch +/fencoding ED[fxscale 0 fslant 1 0 0]makefont fencoding false eq{}{dup +maxlength dict begin{1 i/FID ne{def}{pop pop}ifelse}forall/Encoding +fencoding d currentdict end}ie definefont pop}D/MFEmb{findfont dup length +dict begin{1 i/FID ne{d}{pop pop}ifelse}forall/Encoding ED currentdict end +definefont pop}D/DF{findfont/fs 3 -1 roll d[fs 0 0 fs -1 mul 0 0]makefont d} +D/ty 0 d/Y{/ty ED}D/Tl{gsave SW PCol SC NP 1 i exch MT 1 i 0 RL S grestore}D +/T{PCol SC ty MT 1 i dup length 2 div exch stringwidth pop 3 -1 roll exch +sub exch div exch 0 exch ashow}D/QI{/C save d pageinit/Cx 0 d/Cy 0 d/OMo +false d}D/QP{C restore showpage}D/SPD{/setpagedevice where{1 DB 3 1 roll d +end setpagedevice}{pop pop}ie}D/SV{BSt LWi PSt Cx Cy WFi OMo BCol PCol BkCol +/nS nS 1 add d gsave}D/RS{nS 0 gt{grestore/BkCol ED/PCol ED/BCol ED/OMo ED +/WFi ED/Cy ED/Cx ED/PSt ED/LWi ED/BSt ED/nS nS 1 sub d}if}D/CLSTART{/clipTmp +matrix CM d defM SM NP}D/CLEND{clip NP clipTmp SM}D/CLO{grestore gsave defM +SM}D + +/LArr[ [] [] [ 11.944 3.583 ] [ 3.583 11.944 ] [ 3.583 3.583 ] [ 3.583 3.583 ] [ 5.972 3.583 3.583 3.583 ] [ 3.583 5.972 3.583 3.583 ] [ 5.972 3.583 3.583 3.583 3.583 ] [ 3.583 5.972 3.583 3.583 3.583 3.583 ] ] d +/pageinit { +36 23.4419 translate +% 185*281mm (portrait) +0 795.349 translate 0.837209 -0.837209 scale/defM matrix CM d } d +%%EndProlog +%%BeginSetup +%%EndSetup +%%Page: 1 1 +%%BeginPageSetup +QI +%%EndPageSetup +[1 0 0 1 -36 316]ST +B P1 +NB +W BC +/sl 60480 string uc +Þýù1¾õ½¼íýúÜý÷»ýñùüåõûÍíùIÝõ½¼íýúÜý÷»ýñùüåõûÍíùIÝõ½¼íýúÜý÷»ýñùüåõûÍíùIÝõ½¼»6 +E,*¾Á1¶X.çÙLðǶÃ-Q>îî5X´Þ/*â@5åÞ:×=â=@å1;ËSÚMÈ-UÆÜÑüÌåPH»C×L´;ÆV9ÐDÁºåð,¸2F3¿¸¾+À-?¶³/AHîZ4ÌFà+çÛëÂ=˹¶5AÄîLIìîÞßLFØß±ù¶Ñ<Õ±ïòMìZßO±ÚUÀ=N·@>Å +ºðÈ:ìâM8ò¶>01*îÊF8;àùÀ¾5è¸L*19î*äìöêG/ÚæÁUÔ¹N.ÅEïVWÍëà¿÷ÛDÆ51¶Ò2õ0CÍåH½Å-ض +/µÁîXWÌÃÞ7FF6ÆM+BP»0Iå³ñP6X7ßGLúW5¶ÎÅ»ï×Aò×,îX;0/ðýê=ʶä11±î*>X>ßGÐFØÄ-Þ¶T2Q +0ï8¼Ìéä-úê*¾-2¶,,µZîÞý8²ÞO/FçÁES¶O.õ½÷ü@X¿ï?óÛTÂÁê¶Ô0µúï²@ÌGÞ/9FTÂES·;,1;ñü± +ÍKãWìºÎÍ»++QÜõè*X;Y¶ÞëåÜêÀ;ÀEöö-QÄïî@X>àS8ÚSÂÉEºä+µIE¿+>9ÚâÀEä¶Õ.QÆðVRXÈM4Ú +·¹+Õäð08XÚß;ݺY2¶,±1L¶,ÎJîæâÌ:YËÞÓ4ÚZرS¶Â11úôX=ìößÛWÚRÂM3·¸;ALî,2ÌÓßGLFÇÀU1 +¶ð8µÖîâMÌOãÛØÚ6¿Uµ¶>8õÆñèÄÌ×àCëFÁÁUÁ÷K1ZKE¹óùÏÂÉ1öü7ZE¼ê8ÍGÂBǶð*í½*Ô±ÆGà×ñ +21<ïâ+Üý+ºýñùüåõûÍíùIÝõ½¼íýúÜý÷»ýñùüåõûÍíùIÝPÆ1*îûÑY=å0*öüIÙÉEùû½´MÉôùQÝXÔËõ +ý×ëºEåH5*ºý*æ1úÖçåôϲµ0/úYEøüIùû½´EËëùýêÚ°Ð5åôñ»ô¼XЯÈòû½ôàXЯÈòû½ôàXðûÝKIJ¶ +ÝÕýíÙÏõý×ëºM9ä±I°Ä¾U½á±½âľUµ*:@ÎJî¾/аÁõý×7ô×10*ú½OÍû;CðÀ°Ñ÷V¶?O*ú-Íû;Eðú±± +îçÑ´æ4ÒøüIEýåH;¿ÊêôÅâÆÑÍ/ÕÜÎåüÆ7·õ×/*µVÎÓRóû½´EÑTÅ@çÑWʼýêQÙ;íý±Ù÷ÄHÊå¼Ñ6 ++Q,*ÜÌåüÐ7CÊ7,öüIÙ¿Iùಱ÷¿úàÙíIùO°.F·-*¯+/,Q6:ÉCFKÀYï×Y°Mè¯á*¾ýVI¹2ÚCRóû½´´Í +»¯*Ǻ´ïóG,F:¾ÑBö2HùO°N°Í»Ì0õýøâ+æÓUüU*øû±ÝâÄFýêE=Æá6XÎõãáH3¾õý×Wò׿×ñ×3·ô3@ú +4ÍûÑæÜèë/ÐôÅ÷V¶ó,*ðÄÁËÜN +UPÞüPùÛÊ,Ú4+ÆHÀù»û±Í¾Ó¿´ÙìæDÑÄXÛ¸³+¶ÖçɲÊ/ú.Í»ÏØ·ÓçØEЯ´>×Ò¿U1*:·FVÆI,*L+8SÞ76êÅAD:;ð,ëµð-ðÈýêC¹ú·ÑåÜRY²6ôF8+¸ðâÇI +°M3Oë-ûê-ÒûO´>Çå0æä91E»ÇÃøLÁóà/æ0-F:¾Ý<*îè/*º?Íë/7+Qt°Q*HÅ7Û0W*:û㼹ͻ¿Øîâ9× +ÏÁÍ?ÕX»AÍë5ËG,ö?L>ÇåÄ*ú@Íë47CË/Q¼Æ7Ûàê-*öVI¹Bù4²ýÆåÄæìKMøû±ÙÀ±å°É±íÊôù¶*¶?JÙ +ÃVܯHÙSD°JùÃêRZ@ÚØÁÄú¾ÍG-BÑûEH5XG*¾1ñ×GÁ;7-ØGð×;ØÛâð7ñ×ËÑ;òâÇ=ÛÐ;ëï×+ØA´òû¼ô +3+¾=;*¿*IßÄÞÓ-*¶·MÍâ±¹2MÞÇ×ê4ëÍ:*îT´M׺ẴE³âÎôUÖÏMÍÛÁĺÆÍ/QX*JÁ²N=º´¾ôë7û< +ÍëO63ÉG+ö2*:Bùà±ÙÆãEä±ESMè°ù+²ùàÄÞÓ-*¶ºMíõ±1±½À7¿U;ØCêæ5÷êüà2¶Ð?°Ù/HEJÙÕVܯH +ÙåD°ùÐë5E4Ê»ò×¹æÆ1ø×Þý7æ0.VBµEàÄÞÓ-*ÆíÄHÃå´Fľ=;*12Î×-*XÃæ´AɵÊåôÚÄÊãÀ=UôêÄÖ +ÏæV¶?í7»ÝÍGÐÛ°å´Ãå@+NºMÍß±Ù8MÞÇ-*æèä+Õ8*J¹×ºáº´í³.F3Ðë>7×áåÄæP¼MÝõ±á°M²AºØëî +×+Ø·íæ¹öêìáÆ<ëÌ0¾ÞêÑÍëL@íBÍëÃ7KQÌFç?7×ÓãÜ*¾³êæùûê@ÜϾêÙÊë6Í/*,*8OÞÇ/61êÅAÜ.L +Ö=QúI3/R,æÏ+*ÕT*¸Äã1ZÍKL5»´¹´âÆ@Fç=7×Êå0ä0+VæÄôò×APùÈ-XãJU0°áºÔ÷½ðâÇXçÆËZ´/Þ +д²UÍ»>3Õ°ù2/ÜÒ-Âä8+²RäÂâHåêÛRòäHù²0øâ*ø±MP±ßÇHçÆËºÔÚ¸³YEȯ*%%% +d +720 84[1 0 0 1 0 0]sl 8 false 0 84 di +/sl 60480 string uc +Þ½Ø***ì:ÞZÞ3.FÞ¾-+B?öD4Z+@ÀQ*FïýN>J¹0ÆÛ¸/ÞÓO³à¿**ýÙ+¾LÂ=ǶA4ùïõ¯2îâ3+òã*¾U1 +*Z±ÓÖÎåÌLÚÆÂÁKìBÍëÕ7KQÌFç?7×¾æXìÄôò×Q:ïå»ô;êôÝ7ÃãôÏå0àÜ;ëÁÎæB¿êÚ6+QT*,+ø8*ÞÓ +4¾Û+ÞPßׯHÙ¹E>÷»ô8¼ÎíIÙÙE,Ì.*²Ò7¿Uç¯ô8Dð±½ô¶´2J9ë2Ú¸**Iè±ÙEM@Î×E@Á¾êêB¹7JæõÍë +ë7+QP*Ð9ëûì2ÚT+Öä7ûêÍ7Ç»J*ýû±ÙGM8Êô0¶¹¿Ê»+*ùNļýê¼í2¶<,î*+DãÄðÚêG²â=ýê-Ð/Qøâ +Äà°ßÓÍó×»Í;Ǹô°Í*XÓ*V?*øû±¹¼MÞÇ-*æ;E,Õ,±Á*´¸Míú±Ãý=KØ7°Mîè/*ºVÍë÷63ÉË´²µø.·X +ôHÌÎíIÙ÷EÐNÙC´>@5Xãù×¹æÆÍü×ÅVE?êìò±Q*üÔåü,63Ê/Q0+DJ*ÞÓºC¹7UæõÍû0DÞ;éXWMÀ°ßÓK¾ËíæðH¹2îR0X*ÞÊÞéR¾äZ;º,Þ3**À*ÔÅ5 +ô4¾UüÅ*@ëC1,*úí0*4;8:Þ;/FÈ¿Q¸*ôâ3ýQ´R5ðèÓ7àL´4ÛÉåÌLFÆÂ¼øêÍÏ;îâ+*êìÄÞÓ5*Öú7ëç +±YJLSÞÅûê<ë7ìæ@@ÙCHE,ùIJ9RÞ76êÅAüBL.åÀ=Ù±/¶Ó,Zý*ÖS¶´Êå¼77SË7ÑÛØ7¿U¿×K*éÝÏõý× +õLù´õó×ËZMûü×½.MÞÇ2¾J¾û**Ú¸**5àÂÅð×ÍNMêÇ=*Ìê3=´Á×¹ÖÏõý×ÕEùJ*Ô±×M*Yì±½3Äê1±é +±U²ù**øû±IÇÄÎ=Q*VR²ßÓ/Wô8´òû½ô³å<ýQ*.,V0±U*üÚåü?63лJ*É2ëÌ2ʼýêåÐ;îN/Þ0@¹.ZM +ÍÛÁ7»ýÍËäÄæÇ=QÔ:2Ã×ýì±ý4ÄÂä8+êÞ±µ²×7*ßëõ×ÝOMÔÞ×îè+*êVMôÞBEWÐÄCÙÄ3â¼×;¶Ð,:½*V +4±ýÊåü?63ÈW,¶ð*縴.JÍֺŽôÍç2¶°NEUå@äXé±õZMíý±±Ù;¶<*:UH¾UéØêQñ×½0MıÁ*<ûê8°÷ +ÌüêYÑ;×´@Ú¸**éêÆGBP8Û**@:6Yö±ßÇ4¾>KE,ÎO´>GF6åì¾BDäêü6Ä.ãH:¾¯¾Ê@¹B¹µÍÛQ.=*ü+² +æåüG7+QL*,+ð÷ê×êÛ»ô8´òû½´ÔE,QT²Ñ÷êÛSô°Iù¾±¹ñ±Ý8ľ=A*:3äÔ*²@ÉíSPEä±½ÍÄNÀ×AL¹í +7×-áòÃɲÊ<û+E4Ì/QÐïê2¾ÌùV*î0*ôû<9ð7T±1²YÑ´Nô++ò@ÉI?ë=.ÖIY²6ô²6»óÃ7?âܯëÁÍÛãã +ìßÄðùêO2áYüê5ÓWÏ»÷×Ùòê9ñ×I2MÞÇ5*¶Å×1,εÔÐíIù3³âGäÜ2ëPæÆGBä/X6<>,VøODPÇDäê@½M +ß×îâOåÄ*²ßåÄãÄ*N/.ÕÒîæ4DäêÜ:ÄÒäÄç@-Êã8äìñ±A9ß1GE0îÆ,ÌãÞ¸ºÏ¯Öѯò³áE4Ã»ÞØ-+îT. +J5ëRX¶**ì*JL¶ï-Iú±YÒÔF·°6*XëÓ±µ÷×·ôMµ»ôMàÆæê;*¶ó**¸2S@õ×;*A±Î¯×ѯò³íE4Ë7/Öì +ãìßÄо-% +d +720 84[1 0 0 1 0 0]sl 8 false 0 168 di +/sl 60480 string uc +ÞýC*J***ö1îX.8°JëÞ+:Ê,Â@ÚÈÁ<¾C¿ÕÏ*»åLü.¾=üÍ*¶/*ÚèMÍDÐÈ6*P50+<+ÀE.¶ó+ŰîM9*F· +R*7>*÷»ô3+â,ÜQRùдEä±ýÐľU;*îN/J5ëæÌHùÀ1È,H÷åÀU¿*òâÇ=7Ð;¹öV*:Êî4SÍ1ß3çÌ.ÚÈÀÄ +CÙÅÂ;îT+J²´3J1;O¼îºÇÒUñÃÄßÌÄÏÕ¼×;·óè>Þ¸C¹1EÈ;8Ôî5ýø±ßÓ2¾îê4¾ÌúêÛÝâåºÁ¿êB¾¯¾3 +WïýNË´2Jé.JXî6J**8*ÞüºÏ¯ÖѯòÓU´òä°í:Þ¿æôË7ë>ÓHóåÜòê,ëôùêÃÒUáÊë1à2¶ó,*ì¯ô¿*òË +ÓNô×*ÞDPدHù1³âÛãH3WïýN1²â86ñN²µý<7ÑN7±´¹Ý;¶?,îÒ±M*,+X>JÝ»ôDJÙ¯äôùZâJ´6ÞëåÔâ +ÔèXͱµ4ß*J+Þ8»Ï¯ÖѯòÓ?´>¿ãHLW·ðâØE°1Ä·ç×ɽÇÄSÐÄCÙý´@Ì7ËG,ÖòÄ꿯ì³ô@îÓ¯äôóZ. +Ú¸+*÷´áÆOXîÚÄäää57ÁG7MYë¯M×Vô¶´/ÞFJÉêR°Íë*A×ô׳ÊJôÉ7¿U3»ôÂôZô¿èôÕåô¾Éúŵ2Ë/ +Õ°±ÀæV¶ÐÏVÜÁIùë²NJôV´¸ÍÛGåìßÄÜýåäö×÷S´³´/ÞHE°1Ä×ç<»Ø8*ÕÐòê*ë:ë@°÷¼üêIÑ;îè+*N +ç×=ØA8Î?´òû½´¸EÈ<±íÇôÌFùáºôÍ߯æV¶?óCÎ=Q̲8ɵòå¼C7CÉË÷±M±Å*ÔÕ;¹ZÊË@SáÊWá.°ÑêR +F´äÈ»>ØÉéÆGBäPÉòçD*Ú4+ÆÝ±U*,+P+DÁãùù±ÝÉľUUîê-ÈWÒë/EøüIEÇ7¿U1*Z3ÃJQÌF×ÒÄ꿯´ +ØNÝô*ÞÓ2¾»²ô2JYֺɽôYçÆÞ곺´ÃôHüZAEøüIEÅ7Ëãìá±ßÇ4¾J¾1õ×Ý.MôL×1FùJ±5³E¿ãùú±½Ç +ÄÖU*XÛØÐOÎ=QÌò¿7»ýÍ»ý×éèê;¾¼úV*:*î4-XßÞ¼ºïÓ;,Ú¸+*É4ëHÎÊû¾ñ.´¹»ô=ç2·óèÐD,ÌÚ2¾ +J¾ãíæÀHùV¯+¾åù×òè?ýÉøêÀê-+æÄÍ»<3Ï×»ò×I.MÞÓ5-Ö@+Î=QÌêV>°Óæ»»ôË.ÚL¿8S¾åÏ;Å>¹Y7 +3ËW,Öú7Wë±+¾ÉÍ»+*ñ,YM+ØÁÃÞÓ<¾ëãLZôèAñJ*¾ýë*J;à+,Ê,ÚDÃûöàAE.¸óèÓûÛ,FS+2.B/Öô* +Væ±í>ôS<µÊåü673ÊG,ÖÞ7?ãÌ*VúÄôò×Õ:;+/º1¿ºÖPËK:QB¹ÁELQÌF×ø7WƯ*¾*¾R¾=7¶/-ùïÃAÄ +2îT.Þ<+:D¹.ZÉß¶HÏûæ57ÁGGµMîTZ´2Þ@µ²3ËÛÁĺýÍ/üU¯9Sô4µ.ÌÚ2¾J¾1ô×Y,MİY¸ôôDÎ:UÌ +FSÏÛñ*òùå¼37¯Õúݸ³ãEDÎÛó7»ýÍ»Û×UÚÏæê;¾9ô×ý+MÞÓ5*Ö¯µÒäP8Øýã±IÂÄNZ×Eê2¶ðL*,+ô¹ +MÍý±-±µû×=ØàýÇ4ëåó×Ý+MÞÓ×êC¾»5J¾ôÄ+ÎíIù;²NLÇÛâľ=A*ZÝEøöIE3åìñÄà°Q*üÔå¼.6KÕX +Ûè*öRË/Qà±ñ?ëíð×ÝJM,±Å*¸ÞÄä°Q³A¹MYü±1²¹ßÄÞÇ5*öÖHù5ZNZ´LÍÛU8NÈ×é¶À¼ýêQÎ;±×3»ô +TE=×+*ñ*É5¾¼ýêììÆGZôܵ>BUÌF×Ý7ûêÍ7ÊëY +Í»+*Wò×*J*Þ¯/Ê0êÅAÜ6L¾U±×±*ËO*Ã×1.ZY+Ö9¶ÌÞܾÂоMÒæBÍëç7×ÅâXúÄÞÇE+Ö×7Wæ±YJô// +Ò1FÈ¿X8âÛÒçÔ.*XëÁ±õ¼M;×ðâÇ>FÙEHùV<Øæ±EBM诵Ð×ÙåÁæê;¾ËÓàðHU**¶IÙë++7Ú;=×Éçêëí +æ²@F××7O+1%% +d +720 84[1 0 0 1 0 0]sl 8 false 0 252 di +/sl 60480 string uc +Þ½Ø***ì:Þ;1ÚÆ¿5*22öE.ZO@°Õ*Ú¸Óû,ÂÌ*¶<*J**2,ÖÐQ7Së0*4;XOà;/êÅAÜÇK¾UA*Î÷ð,Ì6+Æ +=Qä+´?*5øêSÂ-Ò»SÙ7ñ×ûÙ;EØê8ÖÏ*ë»ëæÌHù,DP:ù@M +L±-+¸;ZȱQ*Ô.*E/åÄ÷êÔëÆ³OôüµÒ@E*ZSEøÃI5XWɱÙÞÄÀ°Y¹ôÅ÷ê´ãÆÃ³´9V,F·+*Gäð7ñ×7Ø; +/×¹éêHÖ;¶7×Óæ4ýQÀ+@°M»ý×ËÇ;±×5úê¼îê+W¶<6ÎÕVܯHÙ?E,X?ã@,²é7ÃáÔæìáÄHíåHæê0Ü +Ïæê;¾Gêæ-öê´âÆÃ´´±êà²@F30æR@íBÍëÂ7×êäôÂ7/ä0*.-N¼Mýô±é¯AÙ×W¯MïÖ?Ø÷ìæYöêìáÆÇêë +´´µ.M²ô2JM׺Ẵõ³ÂÛðýèÓPçÆÛÄÔö½<6:ã7ûÛÍ/Õ8*JŲâXG¹J5Ì.-âµMíß±ù8MÔÊ×ë¿6ïÖ?Øûâ +ð7ñ×GÕ;Á×K*˼MÏ×M*çëæñûêçêR¾8çÆOÅÔö½<×7û2Íë³6·Î×W½*¿×+*ß*Wâð7ñ×»Ô;ÙíêôÖ϶ê4ë +º´ò÷¼ôôEÙQ´>D¹.îߺ´½¯âüEÙUâ;D5úÍ*ú@ÍëP7·ÏÖ»Î×W°MK×-*5LÓHXÐû°å°HÙ1DÙQ´>:¹L¹17 +çõÍëP63Çë/Ëë@ö*Q8*Þµ÷êHè2¶ó,*DNMø,²Å²Å+@ÀTGÛNÉãÌWêRMV´áêæR@F3ÑÛ5Tóñ<³=Â6ä0+º +4+2Ë/QøÅãEä±ERMP±M+¸NMøÁ±Y*¾ö½°1ÒèëOØUôN½Mîè¿ä¼7EØ,åHJÓãZR*Þ¯/Ê0êÅAøB;Ø.±ÙPK +İ1²±Íæ/·´6Þ?/FLÃÄ÷êÌçÆ¼çêÌ×Ïæê;¾âïZIû¶+×A>ÎHîR0¸OÇØ/MøO±¹QèP±ßÇòïZIû¶<3ûò×ë +À×îè1ÇÏ=12Ê7*20ÆÛLµó×ã+Wò×»Ï;A2ù*±½Ä7GÊØ¶ê4ëÚïZIû¶@3*Þ?å80>+..º1,*ÕP+L±É-H/5 +Oî,Ï×M*·Èß¿**ýÙ+¾LÂ5ǶB4ùïÃPG.¶?B5X»6<Èä0ıM+ðÔæÛºô>à¿NÚ.ðÄ÷êÄæÆÎê;¾ý¯MõÑ0Ì6 +æÄ,êý±YJàãQú5±¹Ä×YáÄXQWJô´ð¶Ö8æÜ:뿾ؾ=BÖ9Y²QL>äÜùêå°+îâ/*2ýQ<ËæãH¹áÒ½=ZôFÞ +õÖϺд@UÌöÍÒ±ýÙåÜÞêǾݯM3Oë¿ääè×7ý×7¾×îèYBÎWæKäÌëöÍÛùÄâÁ×IßÄ<ÊD¶ð**Âý=SáßPYÐ +¯È²ãËûN´>åÒ/ãÈ=QL+ÜÅåXF±ßÓIZIÙоêöêFGÙïI¹ç7Ç8±Ý¾7ãF³á×ÇÈôùøV¶?Ûäü*Eȼè0±ßÇZ +¾ÚïZÑAçæ5¶¯ÖC°ôÕCÀÞê*¾Z¾Ýï×ùêÆ°ê²CÙéµ²=SUÏËH8´ø<7ÑN¹ùV¸óèÓ9°MU÷ê-*:üÍN71E»ÇP +ä¾Îê<¾8õÌÛÁMÈÌëöÍÛáÄÊâÀUIâÄÔ=³¯×+*×áßPYЯȲUÊG0öH´²KS¹Þ×K*SáßPYйCî,±Q,ØØ¸DL +IP±Q*ÜÃåìVMà°ßÓA°MUÉØÎê+¾âïZÑAçBOØ2äü;EØÝÒËæä91E»Çô6¿ãZôíï-¶ð,*Âý=Íà±AÒ;Uàêô +ÛϳPWRÔF·<4îW»´V@ÚØ5Lòî7ë²è,°á±±ðêÄýêãZ´Ù¸Pí¿ã¶´2ÞÑöê³²âðBÙSµ²åS¹Þ×K*Iç±AÅ×Ë +¸MÙÌD¶ðL*ÜÂåPEÖEãêõ=4+×îN*Jô2ìõóÍä±á°õÆ×»¶MË:³á×K*àýÇÒïZÑAçBOÈà±µ·×û¶Më:³C·´ +á½´ÔT2É/ÕØîX¸÷Wà°-*ÐÅî¼YýáÉW-æ97çBEè4SEÌËIJÝÄåH¯êËX´ýëRÁNëZô.Þµöêâ>5XÛß¾XÁɼ +ÕÈÎê+¾ê;Úëéýʰ9¾JE²NáêRáNë+å0+º;ÍGÈ/ÕøNMDäÄDPèXÇ@öI+ÖNá**+*ÅBî60ôá5UNÂHÎêŲ8 +¯×+*CNòÀFE0î6-8ãÞ¸º¯½óí6ÈëNEèBS¹ê×ñ×é²ÊKÂ5Ä/*,*XäJí>çR@Úè=7çBEèBSÉL²9*ÞHIùR< +Dç±YV´éÊâñ÷2¶°NE4:-ôöå8ãÀUÛð;7±ûëÔ;+×ï×åGE1á*%% +d +720 84[1 0 0 1 0 0]sl 8 false 0 336 di +/sl 60480 string uc +Þ½Ø***ì:ÞË0FÇ¿5*22æ1,*Õ,*ØàJÌÄJµÖR9ô-F·**,ÞÇU>¶:*Þý´*Î2ïP<ÌÇ༺¯;»BÈ/ÕDÁKÜÔ¾ +6å4ýQ<ÎæÛºô>LõºôSãôÄXõÇ7ÛGÚÄÙÏÖê*¾7Däºô;N²ÆåÜÒêÙCçW±éB¿êAE¸Þ×K*5²6*:*:4î,-Ìß +Þ¼º;¹ãÀUéÅÅŵ81FE.îXLEà×õáÕQAE3¹í´MDäÄDPèô³Mîâ¾´>JJJ-½ôR´<ÉÛWôòÌ7³ÊÒWéÄ0°Í+J +á¼´XÈûÛ·îP°9Ü@Fç2åÜ4äH*¾PçóX×ÏÄÇØëëæGâÐ=QúÅ*2*Q¸áO´LØEUÐÄCÙÄ3â¼×Ïîéá*æ7A×Ç;N +ø×9E4ÀXõHØ7ñ×éëÆÄ×ÏÄÇØÓëæÇæH¹ëô¶ÇÄSÐÄCÙŰMµ6ùâ+.¾=ûï<íÝ3ôÃ3ðâÇ×ë°¾ô¶ôÄSý/Eßù +Ø;¶°ÑÄ÷üIÙ9´ÒíIùÙ±NݽôµíÆõý×½ø±½¹Äòùåüô7÷üIùQ½ôµåƼýêíÜ;íý±ýòåüô6çõÍûëEðû½ôÍ +üêíÌ;ûü×Ý»MÜýåüçÍûëCÐíIùÙµâùýêIû×ÝGMøû±½ùĺýÍûµH5*.*Úè¾Ó÷àL´ðû½ôTFE0îÈ-´ä5Eß +Çõý×É¿ÆCëU8æËOèB±ùøHù4?Üýå¼ýÍûÁIùû-JIîáLIùûMJݰP+÷6ÞùA¾8üê:¾õI*W6ØMØí½*Üý÷»ý +ñùüåõûÍíùIÝõ½¼éÜ0*:*α:°<ÎORÐI4°PòTÇøáÄøÂæÌØN6JåJâRJÑòRáJNÉÂN·W6Jé.ÞÆNÁºý;² +È×óÆÂÚÀÆH×ÏE.æB-æ=A·/;Ûðü»<;9÷±M*¸ÁNì¾NÉöRáêRVNÅJâ×ÇÚK¾X÷êP×Ðä÷êH×ÏP·ó¹?·Á*G +-;Iâ±ùNOøQ±YÖâ6JÑJNOÞ+/²ÄÈòÅÀFðÎH×Ï8ðê¸Ç:¾¼¿ÆÐ¾1ð×»°MGâ×ÁMWLÅ/;K*?+GðOûð×Û°M +ã:,*¾ä¾ÆõI:íýúÜý÷»ýñùüåõûÍíùIÝõ½¼íýúÜý÷»ýñùüåõûÍíùIÝõ½¼íýúø5S*¾-*Æô5¾ýÁW¶¿1Õ +6;çPN°6Q>îä@´°4½ü±±ýÀɱ¶°ÌDZLX=·ÞÖÙÐÃõý×·½ô+¸äÌ3CË.*2*¶M5íI²µ¯ÅÃÅÃÄÅ6î,/L+è- +Ì»ô×>Føä5ʶ,1QFî8@88Þ;³ÚÏÀEÔ¶á=Å2îû9JäÍ»<ͱ*ÞýëµÜ¶¾-DRYR-¶=ÚA;îè±Y·Þ¿1F²¾É4¶ +B/Õºð:+Üý+âú×ÅZùLLYÃòÓ/FCå-½»æÊåÒîT9X·J7ö37ÒKIÓÄÙS¶A,åÎðûIÞF5¿UÊöü5Z;Í»»*ÅIùV48÷J0Í»î+ +ÕBï<,8ïàÃ>Úüêõí×÷½ô/*2ý*T-XÂÞC/F¾¾EY¶M-µÐîæ1X»ôC1F3Ã5X¶J1Q°îæ3ì¾ÞçåÜÀÄõÝ*U5í +ÙÍËÅ4<*ÂõY*ÛN×Iï±+%% +d +720 84[1 0 0 1 0 0]sl 8 false 0 420 di + +QP +%%Trailer +%%Pages: 1 +%%DocumentFonts: +%%EOF diff --git a/geant4/LEMuSR/YIELDS/yields.for b/geant4/LEMuSR/YIELDS/yields.for new file mode 100644 index 0000000..d59d080 --- /dev/null +++ b/geant4/LEMuSR/YIELDS/yields.for @@ -0,0 +1,95 @@ + + + + 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 + + diff --git a/geant4/LEMuSR/YIELDS/yields.h b/geant4/LEMuSR/YIELDS/yields.h new file mode 100644 index 0000000..bf45ebe --- /dev/null +++ b/geant4/LEMuSR/YIELDS/yields.h @@ -0,0 +1,26 @@ +#ifndef Yields_h +#define Yield_h 1 + +class Yields +{ + +public: + //constructor + Yields(); + //destructor + ~Yields(); + + void GetYields(double E, double masse, double yvector[]); + + +private: + // VARIABLES + double Q_zero,Q_minus,D; + double Yield_minus,Yield_zero,Yield_plus; + + double help1,help2,help3; + +}; + + +#endif diff --git a/geant4/LEMuSR/YIELDS/yields.h~ b/geant4/LEMuSR/YIELDS/yields.h~ new file mode 100644 index 0000000..c2cca9a --- /dev/null +++ b/geant4/LEMuSR/YIELDS/yields.h~ @@ -0,0 +1,27 @@ +#ifndef Yields_h +#define Yield_h 1 + +class YieldsFunctions +{ + +public: + //constructor + YieldsFunctions(); + //destructor + ~YieldsFunctions(); + + void Yields(double E, double masse); + + + +private: + // VARIABLES + double Q_zero,Q_minus,D; + double Yield_minus,Yield_zero,Yield_plus; + + double help1,help2,help3; + +}; + + +#endif diff --git a/geant4/LEMuSR/YIELDS/yields.jpg b/geant4/LEMuSR/YIELDS/yields.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5ec5ba09ea6818b3dddb38b311a89a24c8a899f1 GIT binary patch literal 101561 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�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 literal 0 HcmV?d00001 diff --git a/geant4/LEMuSR/YIELDS/yields2.eps b/geant4/LEMuSR/YIELDS/yields2.eps new file mode 100644 index 0000000..f41a205 --- /dev/null +++ b/geant4/LEMuSR/YIELDS/yields2.eps @@ -0,0 +1,768 @@ +%!PS-Adobe-2.0 +%%Title: yields2.eps +%%Creator: gnuplot 3.7 patchlevel 3 +%%CreationDate: Thu Jul 21 10:57:45 2005 +%%DocumentFonts: (atend) +%%BoundingBox: 50 50 554 770 +%%Orientation: Portrait +%%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 +0 setgray +newpath +(Helvetica) findfont 140 scalefont setfont +1.000 UL +LTb +1.000 UL +LTa +714 420 M +4088 0 V +1.000 UL +LTb +714 420 M +63 0 V +4025 0 R +-63 0 V +630 420 M +( 0) Rshow +1.000 UL +LTa +714 1056 M +4088 0 V +1.000 UL +LTb +714 1056 M +63 0 V +4025 0 R +-63 0 V +-4109 0 R +( 0.1) Rshow +1.000 UL +LTa +714 1692 M +4088 0 V +1.000 UL +LTb +714 1692 M +63 0 V +4025 0 R +-63 0 V +-4109 0 R +( 0.2) Rshow +1.000 UL +LTa +714 2328 M +4088 0 V +1.000 UL +LTb +714 2328 M +63 0 V +4025 0 R +-63 0 V +-4109 0 R +( 0.3) Rshow +1.000 UL +LTa +714 2964 M +4088 0 V +1.000 UL +LTb +714 2964 M +63 0 V +4025 0 R +-63 0 V +-4109 0 R +( 0.4) Rshow +1.000 UL +LTa +714 3600 M +4088 0 V +1.000 UL +LTb +714 3600 M +63 0 V +4025 0 R +-63 0 V +-4109 0 R +( 0.5) Rshow +1.000 UL +LTa +714 4236 M +4088 0 V +1.000 UL +LTb +714 4236 M +63 0 V +4025 0 R +-63 0 V +-4109 0 R +( 0.6) Rshow +1.000 UL +LTa +714 4872 M +4088 0 V +1.000 UL +LTb +714 4872 M +63 0 V +4025 0 R +-63 0 V +-4109 0 R +( 0.7) Rshow +1.000 UL +LTa +714 5508 M +4088 0 V +1.000 UL +LTb +714 5508 M +63 0 V +4025 0 R +-63 0 V +-4109 0 R +( 0.8) Rshow +1.000 UL +LTa +714 6144 M +4088 0 V +1.000 UL +LTb +714 6144 M +63 0 V +4025 0 R +-63 0 V +-4109 0 R +( 0.9) Rshow +1.000 UL +LTa +714 6780 M +4088 0 V +1.000 UL +LTb +714 6780 M +63 0 V +4025 0 R +-63 0 V +-4109 0 R +( 1) Rshow +1.000 UL +LTa +714 420 M +0 6360 V +1.000 UL +LTb +714 420 M +0 63 V +0 6297 R +0 -63 V +714 280 M +( 0) Cshow +1.000 UL +LTa +1643 420 M +0 6360 V +1.000 UL +LTb +1643 420 M +0 63 V +0 6297 R +0 -63 V +0 -6437 R +( 0.5) Cshow +1.000 UL +LTa +2572 420 M +0 6360 V +1.000 UL +LTb +2572 420 M +0 63 V +0 6297 R +0 -63 V +0 -6437 R +( 1) Cshow +1.000 UL +LTa +3501 420 M +0 6360 V +1.000 UL +LTb +3501 420 M +0 63 V +0 6297 R +0 -63 V +0 -6437 R +( 1.5) Cshow +1.000 UL +LTa +4430 420 M +0 6017 V +0 280 R +0 63 V +1.000 UL +LTb +4430 420 M +0 63 V +0 6297 R +0 -63 V +0 -6437 R +( 2) Cshow +1.000 UL +LTb +714 420 M +4088 0 V +0 6360 V +-4088 0 V +714 420 L +140 3600 M +currentpoint gsave translate 90 rotate 0 0 M +(Yields) Cshow +grestore +2758 70 M +(Energy [keV] in power of 10) Cshow +2758 6990 M +(Muonium production yields in Trigger Detector's Carbon Foil) Cshow +1.000 UP +1.000 UL +LT0 +4151 6647 M +(mu+) Rshow +4235 6647 M +399 0 V +1368 924 M +560 284 V +327 235 V +232 204 V +180 184 V +147 169 V +125 156 V +108 145 V +95 138 V +85 130 V +77 125 V +70 119 V +64 114 V +60 109 V +56 106 V +52 103 V +49 99 V +46 96 V +44 94 V +41 91 V +39 89 V +38 86 V +36 85 V +34 82 V +33 81 V +32 79 V +30 78 V +30 76 V +28 74 V +27 74 V +27 72 V +25 70 V +25 70 V +24 68 V +24 68 V +22 66 V +22 65 V +22 65 V +21 63 V +20 63 V +20 61 V +20 61 V +19 60 V +18 60 V +18 58 V +18 58 V +17 57 V +17 57 V +17 55 V +16 56 V +16 54 V +16 54 V +15 54 V +16 53 V +14 52 V +15 52 V +14 51 V +14 51 V +14 50 V +14 50 V +13 49 V +13 27 V +13 4 V +13 4 V +12 4 V +12 3 V +13 4 V +12 3 V +11 4 V +12 3 V +5 1 V +1368 924 Pls +1928 1208 Pls +2255 1443 Pls +2487 1647 Pls +2667 1831 Pls +2814 2000 Pls +2939 2156 Pls +3047 2301 Pls +3142 2439 Pls +3227 2569 Pls +3304 2694 Pls +3374 2813 Pls +3438 2927 Pls +3498 3036 Pls +3554 3142 Pls +3606 3245 Pls +3655 3344 Pls +3701 3440 Pls +3745 3534 Pls +3786 3625 Pls +3825 3714 Pls +3863 3800 Pls +3899 3885 Pls +3933 3967 Pls +3966 4048 Pls +3998 4127 Pls +4028 4205 Pls +4058 4281 Pls +4086 4355 Pls +4113 4429 Pls +4140 4501 Pls +4165 4571 Pls +4190 4641 Pls +4214 4709 Pls +4238 4777 Pls +4260 4843 Pls +4282 4908 Pls +4304 4973 Pls +4325 5036 Pls +4345 5099 Pls +4365 5160 Pls +4385 5221 Pls +4404 5281 Pls +4422 5341 Pls +4440 5399 Pls +4458 5457 Pls +4475 5514 Pls +4492 5571 Pls +4509 5626 Pls +4525 5682 Pls +4541 5736 Pls +4557 5790 Pls +4572 5844 Pls +4588 5897 Pls +4602 5949 Pls +4617 6001 Pls +4631 6052 Pls +4645 6103 Pls +4659 6153 Pls +4673 6203 Pls +4686 6252 Pls +4699 6279 Pls +4712 6283 Pls +4725 6287 Pls +4737 6291 Pls +4749 6294 Pls +4762 6298 Pls +4774 6301 Pls +4785 6305 Pls +4797 6308 Pls +4434 6647 Pls +1.000 UP +1.000 UL +LT2 +4151 6507 M +(mu0) Rshow +4235 6507 M +399 0 V +1368 6017 M +560 -282 V +327 -209 V +232 -179 V +180 -161 V +147 -149 V +125 -139 V +108 -132 V +95 -124 V +85 -120 V +77 -114 V +70 -110 V +64 -107 V +60 -102 V +56 -100 V +52 -97 V +49 -94 V +46 -91 V +44 -89 V +41 -87 V +39 -86 V +38 -83 V +36 -81 V +34 -80 V +33 -78 V +32 -77 V +30 -75 V +30 -74 V +28 -73 V +27 -71 V +27 -71 V +25 -69 V +25 -68 V +24 -67 V +24 -66 V +22 -65 V +22 -65 V +22 -63 V +21 -63 V +20 -61 V +20 -61 V +20 -61 V +19 -59 V +18 -59 V +18 -58 V +18 -57 V +17 -57 V +17 -56 V +17 -55 V +16 -55 V +16 -55 V +16 -53 V +15 -54 V +16 -52 V +14 -52 V +15 -52 V +14 -51 V +14 -51 V +14 -50 V +14 -50 V +13 -49 V +13 -27 V +13 -4 V +13 -4 V +12 -4 V +12 -3 V +13 -4 V +12 -4 V +11 -3 V +12 -3 V +5 -2 V +1368 6017 Star +1928 5735 Star +2255 5526 Star +2487 5347 Star +2667 5186 Star +2814 5037 Star +2939 4898 Star +3047 4766 Star +3142 4642 Star +3227 4522 Star +3304 4408 Star +3374 4298 Star +3438 4191 Star +3498 4089 Star +3554 3989 Star +3606 3892 Star +3655 3798 Star +3701 3707 Star +3745 3618 Star +3786 3531 Star +3825 3445 Star +3863 3362 Star +3899 3281 Star +3933 3201 Star +3966 3123 Star +3998 3046 Star +4028 2971 Star +4058 2897 Star +4086 2824 Star +4113 2753 Star +4140 2682 Star +4165 2613 Star +4190 2545 Star +4214 2478 Star +4238 2412 Star +4260 2347 Star +4282 2282 Star +4304 2219 Star +4325 2156 Star +4345 2095 Star +4365 2034 Star +4385 1973 Star +4404 1914 Star +4422 1855 Star +4440 1797 Star +4458 1740 Star +4475 1683 Star +4492 1627 Star +4509 1572 Star +4525 1517 Star +4541 1462 Star +4557 1409 Star +4572 1355 Star +4588 1303 Star +4602 1251 Star +4617 1199 Star +4631 1148 Star +4645 1097 Star +4659 1047 Star +4673 997 Star +4686 948 Star +4699 921 Star +4712 917 Star +4725 913 Star +4737 909 Star +4749 906 Star +4762 902 Star +4774 898 Star +4785 895 Star +4797 892 Star +4434 6507 Star +stroke +grestore +end +showpage +%%Trailer +%%DocumentFonts: Helvetica +%%Pages: 1 diff --git a/geant4/LEMuSR/YIELDS/yields3.eps b/geant4/LEMuSR/YIELDS/yields3.eps new file mode 100644 index 0000000..35d520d --- /dev/null +++ b/geant4/LEMuSR/YIELDS/yields3.eps @@ -0,0 +1,976 @@ +%!PS-Adobe-2.0 +%%Title: yields3.eps +%%Creator: gnuplot 3.7 patchlevel 3 +%%CreationDate: Mon Aug 15 17:56:04 2005 +%%DocumentFonts: (atend) +%%BoundingBox: 50 50 554 770 +%%Orientation: Landscape +%%Pages: (atend) +%%EndComments +/gnudict 256 dict def +gnudict begin +/Color false def +/Solid false def +/gnulinewidth 5.000 def +/userlinewidth gnulinewidth def +/vshift -66 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 +/MFshow {{dup dup 0 get findfont exch 1 get scalefont setfont + [ currentpoint ] exch dup 2 get 0 exch rmoveto dup dup 5 get exch 4 get + {show} {stringwidth pop 0 rmoveto}ifelse dup 3 get + {2 get neg 0 exch rmoveto pop} {pop aload pop moveto}ifelse} forall} bind def +/MFwidth {0 exch {dup 3 get{dup dup 0 get findfont exch 1 get scalefont setfont + 5 get stringwidth pop add} + {pop} ifelse} forall} bind def +/MLshow { currentpoint stroke M + 0 exch R MFshow } bind def +/MRshow { currentpoint stroke M + exch dup MFwidth neg 3 -1 roll R MFshow } def +/MCshow { currentpoint stroke M + exch dup MFwidth -2 div 3 -1 roll R MFshow } def +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 200 scalefont setfont +1.000 UL +LTb +1.000 UL +LTa +1020 600 M +5840 0 V +1.000 UL +LTb +1020 600 M +63 0 V +5777 0 R +-63 0 V + stroke +900 600 M +[ [(Helvetica) 200.0 0.0 true true ( 0)] +] -66.7 MRshow +1.000 UL +LTa +1020 1020 M +5840 0 V +1.000 UL +LTb +1020 1020 M +63 0 V +5777 0 R +-63 0 V + stroke +900 1020 M +[ [(Helvetica) 200.0 0.0 true true ( 0.1)] +] -66.7 MRshow +1.000 UL +LTa +1020 1440 M +5840 0 V +1.000 UL +LTb +1020 1440 M +63 0 V +5777 0 R +-63 0 V + stroke +900 1440 M +[ [(Helvetica) 200.0 0.0 true true ( 0.2)] +] -66.7 MRshow +1.000 UL +LTa +1020 1860 M +5840 0 V +1.000 UL +LTb +1020 1860 M +63 0 V +5777 0 R +-63 0 V + stroke +900 1860 M +[ [(Helvetica) 200.0 0.0 true true ( 0.3)] +] -66.7 MRshow +1.000 UL +LTa +1020 2280 M +5840 0 V +1.000 UL +LTb +1020 2280 M +63 0 V +5777 0 R +-63 0 V + stroke +900 2280 M +[ [(Helvetica) 200.0 0.0 true true ( 0.4)] +] -66.7 MRshow +1.000 UL +LTa +1020 2700 M +5840 0 V +1.000 UL +LTb +1020 2700 M +63 0 V +5777 0 R +-63 0 V + stroke +900 2700 M +[ [(Helvetica) 200.0 0.0 true true ( 0.5)] +] -66.7 MRshow +1.000 UL +LTa +1020 3120 M +5840 0 V +1.000 UL +LTb +1020 3120 M +63 0 V +5777 0 R +-63 0 V + stroke +900 3120 M +[ [(Helvetica) 200.0 0.0 true true ( 0.6)] +] -66.7 MRshow +1.000 UL +LTa +1020 3540 M +5840 0 V +1.000 UL +LTb +1020 3540 M +63 0 V +5777 0 R +-63 0 V + stroke +900 3540 M +[ [(Helvetica) 200.0 0.0 true true ( 0.7)] +] -66.7 MRshow +1.000 UL +LTa +1020 3960 M +5840 0 V +1.000 UL +LTb +1020 3960 M +63 0 V +5777 0 R +-63 0 V + stroke +900 3960 M +[ [(Helvetica) 200.0 0.0 true true ( 0.8)] +] -66.7 MRshow +1.000 UL +LTa +1020 4380 M +364 0 V +1237 0 R +4239 0 V +1.000 UL +LTb +1020 4380 M +63 0 V +5777 0 R +-63 0 V + stroke +900 4380 M +[ [(Helvetica) 200.0 0.0 true true ( 0.9)] +] -66.7 MRshow +1.000 UL +LTa +1020 4800 M +5840 0 V +1.000 UL +LTb +1020 4800 M +63 0 V +5777 0 R +-63 0 V + stroke +900 4800 M +[ [(Helvetica) 200.0 0.0 true true ( 1)] +] -66.7 MRshow +1.000 UL +LTa +1020 600 M +0 4200 V +1.000 UL +LTb +1020 600 M +0 63 V +0 4137 R +0 -63 V + stroke +1020 400 M +[ [(Helvetica) 200.0 0.0 true true ( 0.1)] +] -66.7 MCshow +1553 600 M +0 31 V +0 4169 R +0 -31 V +1864 600 M +0 31 V +0 4169 R +0 -31 V +2085 600 M +0 31 V +0 4169 R +0 -31 V +2257 600 M +0 31 V +0 4169 R +0 -31 V +2397 600 M +0 31 V +0 4169 R +0 -31 V +2515 600 M +0 31 V +0 4169 R +0 -31 V +2618 600 M +0 31 V +0 4169 R +0 -31 V +2708 600 M +0 31 V +0 4169 R +0 -31 V +1.000 UL +LTa +2789 600 M +0 4200 V +1.000 UL +LTb +2789 600 M +0 63 V +0 4137 R +0 -63 V + stroke +2789 400 M +[ [(Helvetica) 200.0 0.0 true true ( 1)] +] -66.7 MCshow +3322 600 M +0 31 V +0 4169 R +0 -31 V +3633 600 M +0 31 V +0 4169 R +0 -31 V +3854 600 M +0 31 V +0 4169 R +0 -31 V +4026 600 M +0 31 V +0 4169 R +0 -31 V +4166 600 M +0 31 V +0 4169 R +0 -31 V +4284 600 M +0 31 V +0 4169 R +0 -31 V +4387 600 M +0 31 V +0 4169 R +0 -31 V +4477 600 M +0 31 V +0 4169 R +0 -31 V +1.000 UL +LTa +4558 600 M +0 4200 V +1.000 UL +LTb +4558 600 M +0 63 V +0 4137 R +0 -63 V + stroke +4558 400 M +[ [(Helvetica) 200.0 0.0 true true ( 10)] +] -66.7 MCshow +5091 600 M +0 31 V +0 4169 R +0 -31 V +5402 600 M +0 31 V +0 4169 R +0 -31 V +5623 600 M +0 31 V +0 4169 R +0 -31 V +5795 600 M +0 31 V +0 4169 R +0 -31 V +5935 600 M +0 31 V +0 4169 R +0 -31 V +6053 600 M +0 31 V +0 4169 R +0 -31 V +6156 600 M +0 31 V +0 4169 R +0 -31 V +6246 600 M +0 31 V +0 4169 R +0 -31 V +1.000 UL +LTa +6327 600 M +0 4200 V +1.000 UL +LTb +6327 600 M +0 63 V +0 4137 R +0 -63 V + stroke +6327 400 M +[ [(Helvetica) 200.0 0.0 true true ( 100)] +] -66.7 MCshow +6860 600 M +0 31 V +0 4169 R +0 -31 V +1.000 UL +LTb +1020 600 M +5840 0 V +0 4200 V +-5840 0 V +0 -4200 V + stroke +200 2700 M +currentpoint gsave translate 90 rotate 0 0 moveto +[ [(Helvetica) 200.0 0.0 true true (Yields)] +] -66.7 MCshow +grestore +3940 100 M +[ [(Helvetica) 200.0 0.0 true true (Energy [keV/amu])] +] -66.7 MCshow +2.500 UP +1.000 UL +LT0 +1744 4380 M +[ [(Helvetica) 200.0 0.0 true true (mu+)] +] -66.7 MRshow +1864 4380 M +637 0 V +3412 933 M +533 187 V +311 155 V +221 136 V +172 121 V +140 111 V +118 103 V +103 96 V +90 91 V +81 86 V +74 83 V +66 78 V +62 75 V +57 73 V +53 70 V +49 67 V +47 66 V +44 63 V +42 62 V +39 60 V +37 59 V +36 57 V +34 56 V +33 55 V +31 53 V +30 52 V +29 51 V +28 51 V +27 49 V +26 48 V +26 48 V +24 46 V +24 46 V +23 46 V +22 44 V +22 44 V +21 43 V +20 42 V +20 42 V +19 42 V +19 40 V +19 41 V +18 39 V +18 39 V +17 39 V +17 38 V +16 38 V +17 37 V +15 37 V +16 37 V +15 36 V +15 35 V +15 36 V +14 35 V +14 34 V +14 34 V +14 34 V +13 34 V +13 33 V +13 33 V +13 33 V +12 17 V +13 3 V +12 2 V +12 3 V +11 2 V +12 3 V +11 2 V +11 2 V +11 2 V +11 2 V +11 2 V +11 2 V +10 2 V +10 2 V +11 2 V +10 2 V +10 2 V +9 2 V +10 2 V +10 1 V +9 2 V +9 2 V +10 1 V +9 2 V +9 2 V +8 1 V +9 2 V +8 1 V +3412 933 Pls +3945 1120 Pls +4256 1275 Pls +4477 1411 Pls +4649 1532 Pls +4789 1643 Pls +4907 1746 Pls +5010 1842 Pls +5100 1933 Pls +5181 2019 Pls +5255 2102 Pls +5321 2180 Pls +5383 2255 Pls +5440 2328 Pls +5493 2398 Pls +5542 2465 Pls +5589 2531 Pls +5633 2594 Pls +5675 2656 Pls +5714 2716 Pls +5751 2775 Pls +5787 2832 Pls +5821 2888 Pls +5854 2943 Pls +5885 2996 Pls +5915 3048 Pls +5944 3099 Pls +5972 3150 Pls +5999 3199 Pls +6025 3247 Pls +6051 3295 Pls +6075 3341 Pls +6099 3387 Pls +6122 3433 Pls +6144 3477 Pls +6166 3521 Pls +6187 3564 Pls +6207 3606 Pls +6227 3648 Pls +6246 3690 Pls +6265 3730 Pls +6284 3771 Pls +6302 3810 Pls +6320 3849 Pls +6337 3888 Pls +6354 3926 Pls +6370 3964 Pls +6387 4001 Pls +6402 4038 Pls +6418 4075 Pls +6433 4111 Pls +6448 4146 Pls +6463 4182 Pls +6477 4217 Pls +6491 4251 Pls +6505 4285 Pls +6519 4319 Pls +6532 4353 Pls +6545 4386 Pls +6558 4419 Pls +6571 4452 Pls +6583 4469 Pls +6596 4472 Pls +6608 4474 Pls +6620 4477 Pls +6631 4479 Pls +6643 4482 Pls +6654 4484 Pls +6665 4486 Pls +6676 4488 Pls +6687 4490 Pls +6698 4492 Pls +6709 4494 Pls +6719 4496 Pls +6729 4498 Pls +6740 4500 Pls +6750 4502 Pls +6760 4504 Pls +6769 4506 Pls +6779 4508 Pls +6789 4509 Pls +6798 4511 Pls +6807 4513 Pls +6817 4514 Pls +6826 4516 Pls +6835 4518 Pls +6843 4519 Pls +6852 4521 Pls +2182 4380 Pls +2.500 UP +1.000 UL +LT2 +1744 4180 M +[ [(Helvetica) 200.0 0.0 true true (mu0)] +] -66.7 MRshow +1864 4180 M +637 0 V +911 116 R +533 -186 V +311 -138 V +221 -118 V +172 -107 V +140 -98 V +118 -92 V +103 -87 V +90 -82 V +81 -79 V +74 -76 V +66 -72 V +62 -70 V +57 -68 V +53 -66 V +49 -64 V +47 -62 V +44 -60 V +42 -59 V +39 -58 V +37 -56 V +36 -55 V +34 -54 V +33 -53 V +31 -51 V +30 -51 V +29 -50 V +28 -48 V +27 -48 V +26 -48 V +26 -46 V +24 -46 V +24 -45 V +23 -44 V +22 -44 V +22 -43 V +21 -42 V +20 -42 V +20 -41 V +19 -41 V +19 -40 V +19 -40 V +18 -39 V +18 -39 V +17 -38 V +17 -38 V +16 -38 V +17 -37 V +15 -37 V +16 -36 V +15 -36 V +15 -35 V +15 -35 V +14 -35 V +14 -35 V +14 -34 V +14 -33 V +13 -34 V +13 -33 V +13 -33 V +13 -33 V +12 -17 V +13 -3 V +12 -3 V +12 -2 V +11 -2 V +12 -3 V +11 -2 V +11 -2 V +11 -3 V +11 -2 V +11 -2 V +11 -2 V +10 -2 V +10 -2 V +11 -2 V +10 -2 V +10 -2 V +9 -2 V +10 -2 V +10 -2 V +9 -2 V +9 -2 V +10 -2 V +9 -2 V +9 -2 V +8 -1 V +9 -2 V +8 -2 V +3412 4296 Star +3945 4110 Star +4256 3972 Star +4477 3854 Star +4649 3747 Star +4789 3649 Star +4907 3557 Star +5010 3470 Star +5100 3388 Star +5181 3309 Star +5255 3233 Star +5321 3161 Star +5383 3091 Star +5440 3023 Star +5493 2957 Star +5542 2893 Star +5589 2831 Star +5633 2771 Star +5675 2712 Star +5714 2654 Star +5751 2598 Star +5787 2543 Star +5821 2489 Star +5854 2436 Star +5885 2385 Star +5915 2334 Star +5944 2284 Star +5972 2236 Star +5999 2188 Star +6025 2140 Star +6051 2094 Star +6075 2048 Star +6099 2003 Star +6122 1959 Star +6144 1915 Star +6166 1872 Star +6187 1830 Star +6207 1788 Star +6227 1747 Star +6246 1706 Star +6265 1666 Star +6284 1626 Star +6302 1587 Star +6320 1548 Star +6337 1510 Star +6354 1472 Star +6370 1434 Star +6387 1397 Star +6402 1360 Star +6418 1324 Star +6433 1288 Star +6448 1253 Star +6463 1218 Star +6477 1183 Star +6491 1148 Star +6505 1114 Star +6519 1081 Star +6532 1047 Star +6545 1014 Star +6558 981 Star +6571 948 Star +6583 931 Star +6596 928 Star +6608 925 Star +6620 923 Star +6631 921 Star +6643 918 Star +6654 916 Star +6665 914 Star +6676 911 Star +6687 909 Star +6698 907 Star +6709 905 Star +6719 903 Star +6729 901 Star +6740 899 Star +6750 897 Star +6760 895 Star +6769 893 Star +6779 891 Star +6789 889 Star +6798 887 Star +6807 885 Star +6817 883 Star +6826 881 Star +6835 879 Star +6843 878 Star +6852 876 Star +2182 4180 Star +stroke +grestore +end +showpage +%%Trailer +%%DocumentFonts: Helvetica +%%Pages: 1 diff --git a/geant4/LEMuSR/YIELDS/yieldst.eps b/geant4/LEMuSR/YIELDS/yieldst.eps new file mode 100644 index 0000000..375cfd1 --- /dev/null +++ b/geant4/LEMuSR/YIELDS/yieldst.eps @@ -0,0 +1,770 @@ +%!PS-Adobe-2.0 +%%Title: yields3.eps +%%Creator: gnuplot 3.7 patchlevel 3 +%%CreationDate: Thu Jul 21 10:58:25 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 840 M +6248 0 V +1.000 UL +LTb +714 840 M +63 0 V +6185 0 R +-63 0 V +630 840 M +( 0.1) Rshow +1.000 UL +LTa +714 1260 M +6248 0 V +1.000 UL +LTb +714 1260 M +63 0 V +6185 0 R +-63 0 V +-6269 0 R +( 0.2) Rshow +1.000 UL +LTa +714 1680 M +6248 0 V +1.000 UL +LTb +714 1680 M +63 0 V +6185 0 R +-63 0 V +-6269 0 R +( 0.3) Rshow +1.000 UL +LTa +714 2100 M +6248 0 V +1.000 UL +LTb +714 2100 M +63 0 V +6185 0 R +-63 0 V +-6269 0 R +( 0.4) Rshow +1.000 UL +LTa +714 2520 M +6248 0 V +1.000 UL +LTb +714 2520 M +63 0 V +6185 0 R +-63 0 V +-6269 0 R +( 0.5) Rshow +1.000 UL +LTa +714 2940 M +6248 0 V +1.000 UL +LTb +714 2940 M +63 0 V +6185 0 R +-63 0 V +-6269 0 R +( 0.6) Rshow +1.000 UL +LTa +714 3360 M +6248 0 V +1.000 UL +LTb +714 3360 M +63 0 V +6185 0 R +-63 0 V +-6269 0 R +( 0.7) Rshow +1.000 UL +LTa +714 3780 M +6248 0 V +1.000 UL +LTb +714 3780 M +63 0 V +6185 0 R +-63 0 V +-6269 0 R +( 0.8) Rshow +1.000 UL +LTa +714 4200 M +6248 0 V +1.000 UL +LTb +714 4200 M +63 0 V +6185 0 R +-63 0 V +-6269 0 R +( 0.9) Rshow +1.000 UL +LTa +714 4620 M +6248 0 V +1.000 UL +LTb +714 4620 M +63 0 V +6185 0 R +-63 0 V +-6269 0 R +( 1) Rshow +1.000 UL +LTa +714 420 M +0 4200 V +1.000 UL +LTb +714 420 M +0 63 V +0 4137 R +0 -63 V +714 280 M +( 0) Cshow +1.000 UL +LTa +2134 420 M +0 4200 V +1.000 UL +LTb +2134 420 M +0 63 V +0 4137 R +0 -63 V +0 -4277 R +( 0.5) Cshow +1.000 UL +LTa +3554 420 M +0 4200 V +1.000 UL +LTb +3554 420 M +0 63 V +0 4137 R +0 -63 V +0 -4277 R +( 1) Cshow +1.000 UL +LTa +4974 420 M +0 4200 V +1.000 UL +LTb +4974 420 M +0 63 V +0 4137 R +0 -63 V +0 -4277 R +( 1.5) Cshow +1.000 UL +LTa +6394 420 M +0 3857 V +0 280 R +0 63 V +1.000 UL +LTb +6394 420 M +0 63 V +0 4137 R +0 -63 V +0 -4277 R +( 2) Cshow +1.000 UL +LTb +714 420 M +6248 0 V +0 4200 V +-6248 0 V +714 420 L +140 2520 M +currentpoint gsave translate 90 rotate 0 0 M +(Yields) Cshow +grestore +3838 70 M +(Energy [keV] in power of 10) Cshow +3838 4830 M +(Muonium production yields in Trigger Detector's Carbon Foil) Cshow +1.000 UP +1.000 UL +LT0 +6311 4487 M +(mu+) Rshow +6395 4487 M +399 0 V +1714 753 M +855 187 V +500 155 V +355 136 V +275 121 V +225 111 V +190 103 V +165 96 V +145 91 V +130 86 V +118 83 V +107 78 V +99 75 V +91 73 V +85 70 V +80 67 V +75 66 V +70 63 V +67 62 V +63 60 V +60 59 V +58 57 V +55 56 V +52 55 V +50 53 V +49 52 V +46 51 V +45 51 V +43 49 V +42 48 V +41 48 V +39 46 V +38 46 V +37 46 V +35 44 V +35 44 V +34 43 V +33 42 V +32 42 V +31 42 V +31 40 V +29 41 V +29 39 V +29 39 V +27 39 V +27 38 V +27 38 V +26 37 V +25 37 V +25 37 V +25 36 V +24 35 V +23 36 V +23 35 V +23 34 V +22 34 V +22 34 V +21 34 V +21 33 V +21 33 V +21 33 V +20 17 V +19 3 V +20 2 V +19 3 V +19 2 V +18 3 V +19 2 V +18 2 V +17 2 V +8 1 V +1714 753 Pls +2569 940 Pls +3069 1095 Pls +3424 1231 Pls +3699 1352 Pls +3924 1463 Pls +4114 1566 Pls +4279 1662 Pls +4424 1753 Pls +4554 1839 Pls +4672 1922 Pls +4779 2000 Pls +4878 2075 Pls +4969 2148 Pls +5054 2218 Pls +5134 2285 Pls +5209 2351 Pls +5279 2414 Pls +5346 2476 Pls +5409 2536 Pls +5469 2595 Pls +5527 2652 Pls +5582 2708 Pls +5634 2763 Pls +5684 2816 Pls +5733 2868 Pls +5779 2919 Pls +5824 2970 Pls +5867 3019 Pls +5909 3067 Pls +5950 3115 Pls +5989 3161 Pls +6027 3207 Pls +6064 3253 Pls +6099 3297 Pls +6134 3341 Pls +6168 3384 Pls +6201 3426 Pls +6233 3468 Pls +6264 3510 Pls +6295 3550 Pls +6324 3591 Pls +6353 3630 Pls +6382 3669 Pls +6409 3708 Pls +6436 3746 Pls +6463 3784 Pls +6489 3821 Pls +6514 3858 Pls +6539 3895 Pls +6564 3931 Pls +6588 3966 Pls +6611 4002 Pls +6634 4037 Pls +6657 4071 Pls +6679 4105 Pls +6701 4139 Pls +6722 4173 Pls +6743 4206 Pls +6764 4239 Pls +6785 4272 Pls +6805 4289 Pls +6824 4292 Pls +6844 4294 Pls +6863 4297 Pls +6882 4299 Pls +6900 4302 Pls +6919 4304 Pls +6937 4306 Pls +6954 4308 Pls +6594 4487 Pls +1.000 UP +1.000 UL +LT2 +6311 4347 M +(mu0) Rshow +6395 4347 M +399 0 V +1714 4116 M +855 -186 V +500 -138 V +355 -118 V +275 -107 V +225 -98 V +190 -92 V +165 -87 V +145 -82 V +130 -79 V +118 -76 V +107 -72 V +99 -70 V +91 -68 V +85 -66 V +80 -64 V +75 -62 V +70 -60 V +67 -59 V +63 -58 V +60 -56 V +58 -55 V +55 -54 V +52 -53 V +50 -51 V +49 -51 V +46 -50 V +45 -48 V +43 -48 V +42 -48 V +41 -46 V +39 -46 V +38 -45 V +37 -44 V +35 -44 V +35 -43 V +34 -42 V +33 -42 V +32 -41 V +31 -41 V +31 -40 V +29 -40 V +29 -39 V +29 -39 V +27 -38 V +27 -38 V +27 -38 V +26 -37 V +25 -37 V +25 -36 V +25 -36 V +24 -35 V +23 -35 V +23 -35 V +23 -35 V +22 -34 V +22 -33 V +21 -34 V +21 -33 V +21 -33 V +21 -33 V +20 -17 V +19 -3 V +20 -3 V +19 -2 V +19 -2 V +18 -3 V +19 -2 V +18 -2 V +17 -3 V +8 -1 V +1714 4116 Star +2569 3930 Star +3069 3792 Star +3424 3674 Star +3699 3567 Star +3924 3469 Star +4114 3377 Star +4279 3290 Star +4424 3208 Star +4554 3129 Star +4672 3053 Star +4779 2981 Star +4878 2911 Star +4969 2843 Star +5054 2777 Star +5134 2713 Star +5209 2651 Star +5279 2591 Star +5346 2532 Star +5409 2474 Star +5469 2418 Star +5527 2363 Star +5582 2309 Star +5634 2256 Star +5684 2205 Star +5733 2154 Star +5779 2104 Star +5824 2056 Star +5867 2008 Star +5909 1960 Star +5950 1914 Star +5989 1868 Star +6027 1823 Star +6064 1779 Star +6099 1735 Star +6134 1692 Star +6168 1650 Star +6201 1608 Star +6233 1567 Star +6264 1526 Star +6295 1486 Star +6324 1446 Star +6353 1407 Star +6382 1368 Star +6409 1330 Star +6436 1292 Star +6463 1254 Star +6489 1217 Star +6514 1180 Star +6539 1144 Star +6564 1108 Star +6588 1073 Star +6611 1038 Star +6634 1003 Star +6657 968 Star +6679 934 Star +6701 901 Star +6722 867 Star +6743 834 Star +6764 801 Star +6785 768 Star +6805 751 Star +6824 748 Star +6844 745 Star +6863 743 Star +6882 741 Star +6900 738 Star +6919 736 Star +6937 734 Star +6954 731 Star +6594 4347 Star +stroke +grestore +end +showpage +%%Trailer +%%DocumentFonts: Helvetica +%%Pages: 1 diff --git a/geant4/LEMuSR/YIELDS/ytest.eps b/geant4/LEMuSR/YIELDS/ytest.eps new file mode 100644 index 0000000..8cf4ea1 --- /dev/null +++ b/geant4/LEMuSR/YIELDS/ytest.eps @@ -0,0 +1,733 @@ +%!PS-Adobe-2.0 +%%Title: ytest.eps +%%Creator: gnuplot 3.7 patchlevel 3 +%%CreationDate: Tue Apr 12 12:16:43 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 +574 280 M +6388 0 V +1.000 UL +LTb +574 280 M +63 0 V +6325 0 R +-63 0 V +490 280 M +( 0) Rshow +1.000 UL +LTa +574 1198 M +6388 0 V +1.000 UL +LTb +574 1198 M +63 0 V +6325 0 R +-63 0 V +-6409 0 R +( 0.5) Rshow +1.000 UL +LTa +574 2117 M +6388 0 V +1.000 UL +LTb +574 2117 M +63 0 V +6325 0 R +-63 0 V +-6409 0 R +( 1) Rshow +1.000 UL +LTa +574 3035 M +6388 0 V +1.000 UL +LTb +574 3035 M +63 0 V +6325 0 R +-63 0 V +-6409 0 R +( 1.5) Rshow +1.000 UL +LTa +574 3954 M +6388 0 V +1.000 UL +LTb +574 3954 M +63 0 V +6325 0 R +-63 0 V +-6409 0 R +( 2) Rshow +1.000 UL +LTa +574 4872 M +6388 0 V +1.000 UL +LTb +574 4872 M +63 0 V +6325 0 R +-63 0 V +-6409 0 R +( 2.5) Rshow +1.000 UL +LTa +574 280 M +0 4592 V +1.000 UL +LTb +574 280 M +0 63 V +0 4529 R +0 -63 V +574 140 M +( 0) Cshow +1.000 UL +LTa +1852 280 M +0 4592 V +1.000 UL +LTb +1852 280 M +0 63 V +0 4529 R +0 -63 V +0 -4669 R +( 20) Cshow +1.000 UL +LTa +3129 280 M +0 4592 V +1.000 UL +LTb +3129 280 M +0 63 V +0 4529 R +0 -63 V +0 -4669 R +( 40) Cshow +1.000 UL +LTa +4407 280 M +0 4109 V +0 420 R +0 63 V +1.000 UL +LTb +4407 280 M +0 63 V +0 4529 R +0 -63 V +0 -4669 R +( 60) Cshow +1.000 UL +LTa +5684 280 M +0 4109 V +0 420 R +0 63 V +1.000 UL +LTb +5684 280 M +0 63 V +0 4529 R +0 -63 V +0 -4669 R +( 80) 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 +( 100) Cshow +1.000 UL +LTb +574 280 M +6388 0 V +0 4592 V +-6388 0 V +574 280 L +1.000 UL +LT0 +6311 4739 M +(Yield_plus\(x\)*exp\(-vc_plus/v_rel\(x\)\)) Rshow +6395 4739 M +399 0 V +639 635 M +64 190 V +65 148 V +64 125 V +65 110 V +64 99 V +65 90 V +64 84 V +65 79 V +64 74 V +65 70 V +64 66 V +65 64 V +64 61 V +65 58 V +64 57 V +65 54 V +64 53 V +65 51 V +65 49 V +64 48 V +65 47 V +64 45 V +65 44 V +64 44 V +65 42 V +64 41 V +65 40 V +64 40 V +65 39 V +64 38 V +65 37 V +64 36 V +65 36 V +64 36 V +65 34 V +64 34 V +65 34 V +64 33 V +65 32 V +65 32 V +64 32 V +65 31 V +64 30 V +65 30 V +64 30 V +65 30 V +64 28 V +65 29 V +64 28 V +65 28 V +64 28 V +65 27 V +64 27 V +65 26 V +64 27 V +65 26 V +64 25 V +65 26 V +65 25 V +64 25 V +65 24 V +64 25 V +65 24 V +64 24 V +65 23 V +64 24 V +65 23 V +64 23 V +65 22 V +64 23 V +65 22 V +64 22 V +65 22 V +64 22 V +65 22 V +64 21 V +65 21 V +64 21 V +65 21 V +65 21 V +64 20 V +65 20 V +64 21 V +65 20 V +64 19 V +65 20 V +64 20 V +65 19 V +64 19 V +65 19 V +64 19 V +65 19 V +64 19 V +65 19 V +64 18 V +65 18 V +64 19 V +65 18 V +1.000 UL +LT1 +6311 4599 M +(exp\(-vc_plus/v_rel\(x\)\)) Rshow +6395 4599 M +399 0 V +639 1611 M +64 132 V +65 62 V +64 39 V +65 26 V +64 20 V +65 16 V +64 13 V +65 11 V +64 9 V +65 8 V +64 7 V +65 6 V +64 5 V +65 5 V +64 5 V +65 4 V +64 4 V +65 3 V +65 3 V +64 3 V +65 3 V +64 2 V +65 3 V +64 2 V +65 2 V +64 2 V +65 2 V +64 2 V +65 2 V +64 2 V +65 1 V +64 2 V +65 1 V +64 1 V +65 2 V +64 1 V +65 1 V +64 1 V +65 2 V +65 1 V +64 1 V +65 1 V +64 1 V +65 1 V +64 1 V +65 0 V +64 1 V +65 1 V +64 1 V +65 1 V +64 1 V +65 0 V +64 1 V +65 1 V +64 0 V +65 1 V +64 1 V +65 0 V +65 1 V +64 1 V +65 0 V +64 1 V +65 0 V +64 1 V +65 0 V +64 1 V +65 0 V +64 1 V +65 0 V +64 1 V +65 0 V +64 1 V +65 0 V +64 1 V +65 0 V +64 1 V +65 0 V +64 0 V +65 1 V +65 0 V +64 1 V +65 0 V +64 0 V +65 1 V +64 0 V +65 0 V +64 1 V +65 0 V +64 0 V +65 1 V +64 0 V +65 0 V +64 1 V +65 0 V +64 0 V +65 1 V +64 0 V +65 0 V +1.000 UL +LT2 +6311 4459 M +(Yield_plus\(x\)) Rshow +6395 4459 M +399 0 V +639 770 M +64 194 V +65 150 V +64 126 V +65 111 V +64 100 V +65 91 V +64 84 V +65 79 V +64 74 V +65 70 V +64 67 V +65 63 V +64 61 V +65 59 V +64 56 V +65 54 V +64 53 V +65 50 V +65 50 V +64 47 V +65 47 V +64 45 V +65 44 V +64 44 V +65 42 V +64 41 V +65 40 V +64 39 V +65 39 V +64 38 V +65 37 V +64 36 V +65 36 V +64 35 V +65 35 V +64 34 V +65 33 V +64 33 V +65 32 V +65 32 V +64 31 V +65 31 V +64 31 V +65 30 V +64 29 V +65 30 V +64 28 V +65 29 V +64 28 V +65 28 V +64 27 V +65 27 V +64 27 V +65 26 V +64 26 V +65 26 V +64 26 V +65 25 V +65 25 V +64 25 V +65 24 V +64 25 V +65 23 V +64 24 V +65 24 V +64 23 V +65 23 V +64 23 V +65 23 V +64 22 V +65 22 V +64 22 V +65 22 V +64 22 V +65 21 V +64 21 V +65 21 V +64 21 V +65 21 V +65 20 V +64 21 V +65 20 V +64 20 V +65 20 V +64 20 V +65 19 V +64 20 V +65 19 V +64 19 V +65 19 V +64 19 V +65 19 V +64 19 V +65 18 V +64 18 V +65 19 V +64 18 V +65 18 V +stroke +grestore +end +showpage +%%Trailer +%%DocumentFonts: Helvetica +%%Pages: 1 diff --git a/geant4/LEMuSR/YIELDS/ytest.pdf b/geant4/LEMuSR/YIELDS/ytest.pdf new file mode 100644 index 0000000000000000000000000000000000000000..bd90f5fc65d2b97891cf9e030416de0d62a29670 GIT binary patch literal 6198 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

VTMlrCiICho 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 literal 0 HcmV?d00001 diff --git a/geant4/LEMuSR/allmk.sh b/geant4/LEMuSR/allmk.sh new file mode 100644 index 0000000..8406255 --- /dev/null +++ b/geant4/LEMuSR/allmk.sh @@ -0,0 +1,18 @@ +cd $G4INSTALL/source/particles/management +gmake +cd $G4INSTALL/source/particles/leptons +gmake +cd $G4INSTALL/source/run/ +gmake +cd $G4INSTALL/source/geometry/magneticfield/ +gmake +cd $G4INSTALL/source/track/ +gmake +cd $G4INSTALL/source/tracking/ +gmake +cd $G4INSTALL/source/processes/management/ +gmake +cd $G4INSTALL/source/processes/decay/ +gmake +cd $wlem +gmake diff --git a/geant4/LEMuSR/asym.sh b/geant4/LEMuSR/asym.sh new file mode 100644 index 0000000..862211e --- /dev/null +++ b/geant4/LEMuSR/asym.sh @@ -0,0 +1,13 @@ +export ASYM_USE_LEMU=1 + +unset LEMU_TEST_FIELD +unset LEMU_TEST_CFOIL +unset LEMU_TEST_FOCAL_LENGTH +export LEMU_TEST_ASYM=1 + + +rm ~/geant4/tmp/Linux-g++/LEMuSR/exe/* +rm ~/geant4/tmp/Linux-g++/LEMuSR/LEMuSRDetectorConstruction.* +rm ~/geant4/tmp/Linux-g++/LEMuSR/LEMuSRPrimaryGeneratorAction.* +rm ~/geant4/tmp/Linux-g++/LEMuSR/LEMuSRMuonPhysics.* + diff --git a/geant4/LEMuSR/dawn.sh b/geant4/LEMuSR/dawn.sh new file mode 100644 index 0000000..a5b466f --- /dev/null +++ b/geant4/LEMuSR/dawn.sh @@ -0,0 +1,4 @@ +export G4DAWN_NAMED_PIPE=1 +export G4DAWN_GUI_ALWAYS=1 + + diff --git a/geant4/LEMuSR/field.sh b/geant4/LEMuSR/field.sh new file mode 100644 index 0000000..f15b623 --- /dev/null +++ b/geant4/LEMuSR/field.sh @@ -0,0 +1,10 @@ +export ASYM_USE_LEMU=1 +export LEMU_TEST_FIELD=1 +unset LEMU_TEST_CFOIL +unset LEMU_TEST_FOCAL_LENGTH +unset LEMU_TEST_ASYM + +rm ~/geant4/tmp/Linux-g++/LEMuSR/exe/* +rm ~/geant4/tmp/Linux-g++/LEMuSR/LEMuSRDetectorConstruction.* +rm ~/geant4/tmp/Linux-g++/LEMuSR/LEMuSRPrimaryGeneratorAction.* + diff --git a/geant4/LEMuSR/focal.sh b/geant4/LEMuSR/focal.sh new file mode 100644 index 0000000..474dd62 --- /dev/null +++ b/geant4/LEMuSR/focal.sh @@ -0,0 +1,11 @@ +export ASYM_USE_LEMU=1 + +export LEMU_TEST_FOCAL_LENGTH=1 +unset LEMU_TEST_ASYM +unset LEMU_TEST_FIELD + + +rm ~/geant4/tmp/Linux-g++/LEMuSR/exe/* +rm ~/geant4/tmp/Linux-g++/LEMuSR/LEMuSRDetectorConstruction.* +rm ~/geant4/tmp/Linux-g++/LEMuSR/LEMuSRPrimaryGeneratorAction.* + diff --git a/geant4/LEMuSR/include/AsymCheck.hh b/geant4/LEMuSR/include/AsymCheck.hh new file mode 100644 index 0000000..b60e49f --- /dev/null +++ b/geant4/LEMuSR/include/AsymCheck.hh @@ -0,0 +1,139 @@ + +#ifndef AsymCheck_h +#define AsymCheck_h 1 + +#include "G4UserSteppingAction.hh" +#include "globals.hh" +#include +#include "LEMuSRVisManager.hh" +#include "LEMuSRDetectorConstruction.hh" +#include "G4RunManager.hh" +#include "G4Run.hh" + + +// root histogram classes +#include + +#include "TROOT.h" +#include "TFile.h" +#include "TH1.h" +#include "TRandom.h" +#include "TTree.h" +#include "TBranch.h" +#include "TClonesArray.h" +#include "TStopwatch.h" + + + +class AsymCheck : public G4UserSteppingAction +{ +public: + + static AsymCheck* GetInstance(); + + AsymCheck() ; + ~AsymCheck() ; + + + + + + + + void UserSteppingAction(const G4Step *theStep); + + void SetParticleVolumeNames(const G4Step *theStep); + + void SetPositionMomentum(const G4Step *theStep); + + void SetTimeEnergy(const G4Step *theStep); + + void SetAngles(const G4Step* aStep); + + void PrintDatas(const G4Step *theStep); + + void SetField(const G4Step *theStep); + + void SetSpinDirection(const G4Step* aStep); + + void SetPositronAngles(const G4Step *theStep); + + G4bool CheckCondition(const G4Step* aStep); + + G4String p_name, v_name, pv_name; + + G4ThreeVector position,momentum,momentum_direction, polarization, m, parpol, p; + + G4double kenergy, tenergy, localtime, globaltime, proptime; + + G4double theta,sintheta, costheta, phi, sinphi, cosphi; + + + +typedef struct { + + Float_t kenergy, tenergy, localtime, globaltime, proptime; + + Float_t theta,phi; + + + + Float_t positionx, positiony,positionz,momdirx,momdiry,momdirz; + + Int_t ID; + + } LEMuSRparticle ; + +typedef struct { + + Float_t asym,L,R,S; + + + } Asym ; + +typedef struct { + + Float_t omegat,time; + + } Spin ; + + + LEMuSRparticle positron; + Asym asym; + Spin spin; + + + void Update(); + + void BookRoot(); + void FillRoot(); + void WriteRoot(); + + void PrintAsym(); + + // TROOT eventTree; + Int_t nevent , comp , split , write , hfill , read ,arg4, arg5 ; + TFile *myFile; + TTree *myTree; + TBranch *b,*b2; + TH1D *hEnergy, *hTime, *hAngle, *hAngle2; + + TTree *tree; + + TFile* F; + TTree *dt; + + Float_t time; + + + G4double L,R,A; + G4double BR1, BR2, dm1,dm2;// decay modes and branching ratios + +private: + + static AsymCheck* pointer; + + +}; + +#endif diff --git a/geant4/LEMuSR/include/FieldCheck.hh b/geant4/LEMuSR/include/FieldCheck.hh new file mode 100644 index 0000000..6fda8a7 --- /dev/null +++ b/geant4/LEMuSR/include/FieldCheck.hh @@ -0,0 +1,138 @@ +///§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§//* +// LOW ENERGY MUON SPIN RELAXATION, ROTATION, RADIATION +// +// ID : FieldCheck.hh , v 1.2 +// AUTHOR: Taofiq PARAISO +// DATE : 2004-09-17 10:20 +//§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§// +// +// & &&&&&&&&&& &&&&&&& &&&&&&&& +// & & && && & && +// & & & & & & && +// & &&&&&&& & & &&&&&& &&&&&&&& +// & & & && & & && +// & & && & & && && & & +// &&&&&&&&&& &&&&&&&&&& & &&&&& && &&&&&&& & && +// & +// & +// & +// & +// FIELDCHECK +//§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§// +#ifndef FieldCheck_h +#define FieldCheck_h 1 + +#include "G4UserSteppingAction.hh" +#include "globals.hh" +#include +#include "LEMuSRVisManager.hh" +#include "LEMuSRDetectorConstruction.hh" + + + +#include "G4RunManager.hh" +#include "G4EventManager.hh" +#include "G4Run.hh" + + +// root histogram classes +#include + +#include "TROOT.h" +#include "TFile.h" +#include "TH1.h" +#include "TRandom.h" +#include "TTree.h" +#include "TBranch.h" +#include "TClonesArray.h" +#include "TStopwatch.h" + + + +class FieldCheck : public G4UserSteppingAction +{ +public: + + static FieldCheck* GetInstance(); + + FieldCheck() ; + ~FieldCheck() ; + + + void UserSteppingAction(const G4Step *theStep); + + void SetParticleVolumeNames(const G4Step *theStep); + + void SetPositionMomentum(const G4Step *theStep); + + void SetTimeEnergy(const G4Step *theStep); + + void SetAngles(const G4Step* aStep); + + void PrintDatas(const G4Step *theStep); + + void SetField(const G4Step *theStep); + + void SetSpinDirection(const G4Step* aStep); + + void SetPositronAngles(const G4Step *theStep); + + G4bool CheckCondition(const G4Step* aStep); + + G4String p_name, v_name, pv_name; + + G4ThreeVector position,momentum,momentum_direction, polarization, m, parpol, p; + + G4double kenergy, tenergy, localtime, globaltime, proptime, fx, fy, fz, bx,by,bz; + + G4double theta,sintheta, costheta, phi, sinphi, cosphi,charge; + + G4int loop, evt; + +typedef struct { + + Float_t tenergy, localtime, globaltime, proptime; + + Float_t positionx, positiony,positionz,momdirx,momdiry,momdirz; + + Float_t Bx,By,Bz,Ex,Ey,Ez, charge; + Int_t index, event, id; + + } LEMuSRparticle ; + + LEMuSRparticle muon; + + void Update(); + + void BookRoot(); + void FillRoot(); + void WriteRoot(); + + void PrintField(const G4Step *theStep); + + // TROOT eventTree; + Int_t nevent , comp , split , write , hfill , read ,arg4, arg5 ; + TFile *myFile; + TTree *myTree; + TBranch *b,*b2; + TH1D *hEnergy, *hTime, *hAngle, *hAngle2; + + TTree *tree; + + TFile* F; + TTree *dt; + + Float_t time; + + + G4double L,R,A; + + +private: + + static FieldCheck* pointer; + + +}; + +#endif diff --git a/geant4/LEMuSR/include/FocalLengthTest.hh b/geant4/LEMuSR/include/FocalLengthTest.hh new file mode 100644 index 0000000..322976f --- /dev/null +++ b/geant4/LEMuSR/include/FocalLengthTest.hh @@ -0,0 +1,132 @@ +///§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§//* +// LOW ENERGY MUON SPIN RELAXATION, ROTATION, RADIATION +// +// ID : FocalLengthTest.hh , v 1.2 +// AUTHOR: Taofiq PARAISO +// DATE : 2005-03-02 09:37 +//§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§// +// +// & &&&&&&&&&& &&&&&&& &&&&&&&& +// & & && && & && +// & & & & & & && +// & &&&&&&& & & &&&&&& &&&&&&&& +// & & & && & & && +// & & && & & && && & & +// &&&&&&&&&& &&&&&&&&&& & &&&&& && &&&&&&& & && +// & +// & +// & +// & +// FocalLengthTest +//§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§// +#ifndef FocalLengthTest_h +#define FocalLengthTest_h 1 + +#include "G4UserSteppingAction.hh" +#include "globals.hh" +#include +#include "LEMuSRVisManager.hh" +#include "LEMuSRDetectorConstruction.hh" + +// root histogram classes +#include +#include "TROOT.h" +#include "TFile.h" +#include "TH1.h" +#include "TRandom.h" +#include "TTree.h" +#include "TBranch.h" +#include "TClonesArray.h" +#include "TStopwatch.h" + + + +class FocalLengthTest : public G4UserSteppingAction +{ +public: + + static FocalLengthTest* GetInstance(); + + FocalLengthTest() ; + ~FocalLengthTest() ; + + void UserSteppingAction(const G4Step *theStep); + + void SetParticleVolumeNames(const G4Step *theStep); + + void SetPositionMomentum(const G4Step *theStep); + + void SetTimeEnergy(const G4Step *theStep); + + void SetAngles(const G4Step* aStep); + + void PrintDatas(const G4Step *theStep); + + void SetField(const G4Step *theStep); + + void SetSpinDirection(const G4Step* aStep); + + void SetPositronAngles(const G4Step *theStep); + + + void LoopKiller(const G4Step*aStep); + G4int loop; + + G4bool CheckCondition(const G4Step* aStep); + + G4String p_name, v_name, pv_name; + + G4ThreeVector position,momentum,momentum_direction, polarization, m, parpol, p; + + G4double kenergy, tenergy, localtime, globaltime, proptime, fx, fy, fz, init_kenergy; + + G4double theta,sintheta, costheta, phi, sinphi, cosphi; + + + +typedef struct { + + Float_t kenergy; + + Float_t focal, ratio; + + Float_t positionx, positiony,positionz,momdirx,momdiry,momdirz; + Int_t index, event; + } LEMuSRparticle ; + + LEMuSRparticle muon; + + void Update(); + + void BookRoot(); + void FillRoot(); + void WriteRoot(); + + void PrintField(const G4Step *theStep); + + // TROOT eventTree; + Int_t nevent , comp , split , write , hfill , read ,arg4, arg5 ; + TFile *myFile; + TTree *myTree; + TBranch *b,*b2; + TH1D *hEnergy, *hTime, *hAngle, *hAngle2; + + TTree *tree; + + TFile* F; + TTree *dt; + + Float_t time; + + + G4double L,R,A; + + +private: + + static FocalLengthTest* pointer; + + +}; + +#endif diff --git a/geant4/LEMuSR/include/G4AtRestSpinPrecession.hh b/geant4/LEMuSR/include/G4AtRestSpinPrecession.hh new file mode 100644 index 0000000..442573c --- /dev/null +++ b/geant4/LEMuSR/include/G4AtRestSpinPrecession.hh @@ -0,0 +1,57 @@ +// +// ******************************************************************** +// * DISCLAIMER * +// * * +// * The following disclaimer summarizes all the specific disclaimers * +// * of contributors to this software. The specific disclaimers,which * +// * govern, are listed with their locations in: * +// * http://cern.ch/geant4/license * +// * * +// * Neither the authors of this software system, nor their employing * +// * institutes,nor the agencies providing financial support for this * +// * work make any representation or warranty, express or implied, * +// * regarding this software system or assume any liability for its * +// * use. * +// * * +// * This code implementation is the intellectual property of the * +// * GEANT4 collaboration. * +// * By copying, distributing or modifying the Program (or any work * +// * based on the Program) you indicate your acceptance of this * +// * statement, and all its terms. * +// ******************************************************************** +// +// ------------------------------------------------------------ +// GEANT 4 class header file +// +// History: +// 17 August 2004 P. Gumplinger +// ------------------------------------------------------------ +// +#ifndef G4AtRestSpinPrecession_hh +#define G4AtRestSpinPrecession_hh 1 + +#include "G4VRestProcess.hh" +#include "G4ParticleChangeForAtRestSP.hh" + +class G4AtRestSpinPrecession : public G4VRestProcess +{ + +public: + G4AtRestSpinPrecession(); + ~G4AtRestSpinPrecession(); + + G4bool IsApplicable(const G4ParticleDefinition&); + G4VParticleChange* AtRestDoIt(const G4Track& aTrack,const G4Step& aStep); + + virtual G4double GetMeanLifeTime(const G4Track&, + G4ForceCondition*); +private: + + G4ParticleChangeForAtRestSP fParticleChange; + + G4ThreeVector NewSpin(const G4Step& aStep, + G4ThreeVector B, G4double deltatime ); + +}; + +#endif diff --git a/geant4/LEMuSR/include/G4DecayWithSpin.hh b/geant4/LEMuSR/include/G4DecayWithSpin.hh new file mode 100644 index 0000000..a8cbb95 --- /dev/null +++ b/geant4/LEMuSR/include/G4DecayWithSpin.hh @@ -0,0 +1,69 @@ +// +// ******************************************************************** +// * DISCLAIMER * +// * * +// * The following disclaimer summarizes all the specific disclaimers * +// * of contributors to this software. The specific disclaimers,which * +// * govern, are listed with their locations in: * +// * http://cern.ch/geant4/license * +// * * +// * Neither the authors of this software system, nor their employing * +// * institutes,nor the agencies providing financial support for this * +// * work make any representation or warranty, express or implied, * +// * regarding this software system or assume any liability for its * +// * use. * +// * * +// * This code implementation is the intellectual property of the * +// * GEANT4 collaboration. * +// * By copying, distributing or modifying the Program (or any work * +// * based on the Program) you indicate your acceptance of this * +// * statement, and all its terms. * +// ******************************************************************** +// +// ------------------------------------------------------------ +// GEANT 4 class header file +// +// History: +// 17 August 2004 P. Gumplinger +// ------------------------------------------------------------ +// +#ifndef G4DecayWithSpin_h +#define G4DecayWithSpin_h 1 + +#include "G4ios.hh" +#include "globals.hh" +#include "G4VRestDiscreteProcess.hh" +#include "G4ParticleChangeForDecay.hh" + +#include "G4Decay.hh" + +class G4VExtDecayer; + +class G4DecayWithSpin : public G4Decay +{ + public: + // Constructors + G4DecayWithSpin(const G4String& processName ="DecayWithSpin"); + + // Destructor + virtual ~G4DecayWithSpin(); + + protected: // With Description + virtual G4VParticleChange* DecayIt( + const G4Track& aTrack, + const G4Step& aStep + ); + // The DecayIt() method returns by pointer a particle-change object, + // which has information of daughter particles. + + // private: +public: + G4ThreeVector Spin_Precession(const G4Step& aStep, + G4ThreeVector B, G4double deltatime ); + + +}; + + + +#endif diff --git a/geant4/LEMuSR/include/G4ParticleChangeForAtRestSP.hh b/geant4/LEMuSR/include/G4ParticleChangeForAtRestSP.hh new file mode 100644 index 0000000..98ca440 --- /dev/null +++ b/geant4/LEMuSR/include/G4ParticleChangeForAtRestSP.hh @@ -0,0 +1,45 @@ +// +// ******************************************************************** +// * DISCLAIMER * +// * * +// * The following disclaimer summarizes all the specific disclaimers * +// * of contributors to this software. The specific disclaimers,which * +// * govern, are listed with their locations in: * +// * http://cern.ch/geant4/license * +// * * +// * Neither the authors of this software system, nor their employing * +// * institutes,nor the agencies providing financial support for this * +// * work make any representation or warranty, express or implied, * +// * regarding this software system or assume any liability for its * +// * use. * +// * * +// * This code implementation is the intellectual property of the * +// * GEANT4 collaboration. * +// * By copying, distributing or modifying the Program (or any work * +// * based on the Program) you indicate your acceptance of this * +// * statement, and all its terms. * +// ******************************************************************** +// +// ------------------------------------------------------------ +// GEANT 4 class header file +// +// History: +// 17 August 2004 P. Gumplinger +// ------------------------------------------------------------ +// +#ifndef G4ParticleChangeForAtRestSP_hh +#define G4ParticleChangeForAtRestSP_hh 1 + +#include "G4ParticleChange.hh" + +class G4ParticleChangeForAtRestSP : public G4ParticleChange +{ +public: + G4ParticleChangeForAtRestSP(); + virtual ~G4ParticleChangeForAtRestSP(); + + virtual G4Step* UpdateStepForAtRest(G4Step* Step); + +}; + +#endif diff --git a/geant4/LEMuSR/include/LEMuSRAtRestSpinRotation.hh b/geant4/LEMuSR/include/LEMuSRAtRestSpinRotation.hh new file mode 100644 index 0000000..274c578 --- /dev/null +++ b/geant4/LEMuSR/include/LEMuSRAtRestSpinRotation.hh @@ -0,0 +1,55 @@ +#ifndef LEMUSRATRESTSPINROTATION_H +#define LEMUSRATRESTSPINROTATION_H 1 + +#include "G4VRestProcess.hh" +#include "G4DynamicParticle.hh" +#include "G4MagneticField.hh" +#include "G4ParticleTypes.hh" +#include "globals.hh" +#include "G4VParticleChange.hh" +#include "G4ios.hh" +#include "G4ForceCondition.hh" +#include "G4ParticleChangeForTransport.hh" +#include "LEMuSRParticleChangeForSR.hh" +class LEMuSRAtRestSpinRotation : public G4VRestProcess +{ +public: + LEMuSRAtRestSpinRotation(const G4String& processName = "SpinRotationAtRest" ); + LEMuSRAtRestSpinRotation(G4VRestProcess& ); + + virtual ~LEMuSRAtRestSpinRotation(); + + static LEMuSRAtRestSpinRotation* GetInstance(); +private: + static LEMuSRAtRestSpinRotation* pointer; + +public: + G4VParticleChange* AtRestDoIt(const G4Track& theTrack, const G4Step& theStep); + + // G4Track + void RotateSpin(const G4Step&, G4ThreeVector, G4double); + + G4double point[4]; + G4double B[3], rotation_angle; + + G4double itime, ftime, deltatime; + G4ThreeVector SpinDirection; + + + G4ParticleChange thePParticleChange; + G4VParticleChange theVParticleChange; + G4ParticleChangeForTransport theTParticleChange; + LEMuSRParticleChangeForSR theParticleChange; + const G4Field *mfield; + + inline G4double GetMeanLifeTime(const G4Track&, G4ForceCondition* condition) + { + *condition = Forced; + return DBL_MAX; + } + G4ThreeVector polar; + + + +}; +#endif diff --git a/geant4/LEMuSR/include/LEMuSRCryoField.hh b/geant4/LEMuSR/include/LEMuSRCryoField.hh new file mode 100644 index 0000000..3641ba0 --- /dev/null +++ b/geant4/LEMuSR/include/LEMuSRCryoField.hh @@ -0,0 +1,32 @@ +#include "G4ElectricField.hh" +#include"G4ThreeVector.hh" +#include"G4ios.hh" + +class LEMuSRCryoField : public G4ElectricField +{ +public: + + + LEMuSRCryoField(G4ThreeVector FieldVector); + LEMuSRCryoField(G4ThreeVector FieldVector,G4double radius,G4double zmin, G4double zmax,G4double mcpv_z); + ~LEMuSRCryoField(); + + G4bool DoesFieldChangeEnergy() const { return true; } + // Since an electric field can change track energy + + void GetFieldValue(const G4double pos[4], G4double *field) const; + + G4bool uniform; + + + G4double R; + + +private: + G4double flength, fpotential, fradius, fzmin, fzmax; + + + G4ThreeVector position; + G4ThreeVector EField; + +}; diff --git a/geant4/LEMuSR/include/LEMuSRCryoHit.hh b/geant4/LEMuSR/include/LEMuSRCryoHit.hh new file mode 100644 index 0000000..128c317 --- /dev/null +++ b/geant4/LEMuSR/include/LEMuSRCryoHit.hh @@ -0,0 +1,86 @@ +#ifndef LEMuSRCryoHit_h +#define LEMuSRCryoHit_h 1 + +#include "G4VHit.hh" +#include "G4THitsCollection.hh" +#include "G4Allocator.hh" +#include "G4ThreeVector.hh" +#include "G4LogicalVolume.hh" +#include "G4VPhysicalVolume.hh" + +class LEMuSRCryoHit : public G4VHit +{ +public: + // contructor and destructor + LEMuSRCryoHit(); + ~LEMuSRCryoHit(); + + void Draw(); + void Print(); + void print(G4String name); + + // operator for hit collector definition + LEMuSRCryoHit(const LEMuSRCryoHit &right); + const LEMuSRCryoHit& operator=(const LEMuSRCryoHit &right); + G4int operator==(const LEMuSRCryoHit &right) const; + + inline void *operator new(size_t); + inline void operator delete(void *aHit); + + // private variables + +private: + G4double energy_deposition, time_of_flight, spin; + G4ThreeVector position, momentum; + G4LogicalVolume* lv_Volume; + G4VPhysicalVolume* pv_Volume; + G4String particle_name; + + // inline functions +public: + inline void SetEnergyDeposition(G4double ed){energy_deposition = ed;} + inline void AddEnergyDeposition(G4double ed){energy_deposition += ed;} + inline G4double GetEnergyDeposition(){return energy_deposition;} + + inline void SetTimeOfFlight(G4double tf){ time_of_flight=tf;} + inline void AddTimeOfFlight(G4double tf){ time_of_flight+=tf;} + inline G4double GetTimeOfFlight(){return time_of_flight;} + + inline void SetSpin(G4double sp){ spin=sp;} + inline G4double GetSpin(){return spin;} + + + inline void SetPosition(G4ThreeVector pos){position =pos;} + inline G4ThreeVector GetPosition(){return position;} + + inline void SetMomentum(G4ThreeVector mom){momentum =mom;} + inline G4ThreeVector GetMomentum(){return momentum;} + + inline void SetParticleName(G4String name){particle_name=name;} + inline G4String GetParticleName(){return particle_name;} + + inline G4LogicalVolume* GetLogicalVolume(){return lv_Volume;} + inline G4VPhysicalVolume* GetPhysicalVolume(){return pv_Volume;} + +}; + +// define the collection class according to template G4THitsCollection + +typedef G4THitsCollection LEMuSRCryoHitsCollection; + +extern G4Allocator LEMuSRCryoHitAllocator; + +inline void* LEMuSRCryoHit :: operator new(size_t) +{ + void *aHit; + aHit = (void*) LEMuSRCryoHitAllocator.MallocSingle(); + return aHit; +} + +inline void LEMuSRCryoHit :: operator delete(void *aHit) +{ + LEMuSRCryoHitAllocator.FreeSingle((LEMuSRCryoHit*) aHit); +} + + +#endif diff --git a/geant4/LEMuSR/include/LEMuSRCryoSD.hh b/geant4/LEMuSR/include/LEMuSRCryoSD.hh new file mode 100644 index 0000000..1519663 --- /dev/null +++ b/geant4/LEMuSR/include/LEMuSRCryoSD.hh @@ -0,0 +1,88 @@ +#ifndef LEMuSRCryoSD_h +#define LEMuSRCryoSD_h 1 + + + +#include "G4VSensitiveDetector.hh" + +#include "LEMuSRCryoHit.hh" +#include "G4RunManager.hh" +#include "G4Run.hh" + +// root histogram classes +#include + +#include "TROOT.h" +#include "TFile.h" +#include "TH1.h" +#include "TRandom.h" +#include "TTree.h" +#include "TBranch.h" +#include "TClonesArray.h" +#include "TStopwatch.h" +#include "LEMuSRCryoHit.hh" + + + +class G4Step; +class G4HCofThisEvent; +class G4TouchableHistory; + +class LEMuSRCryoSD : public G4VSensitiveDetector +{ +public: + + LEMuSRCryoSD(G4String name); + ~LEMuSRCryoSD(); + + void Initialize (G4HCofThisEvent* HCE); + G4bool ProcessHits(G4Step* aStep, G4TouchableHistory*ROhist); + void EndOfEvent (G4HCofThisEvent* HCE); + void clear(); + void DrawAll(); + void PrintAll(); + + void BookRoot(); + void FillRoot(); + void WriteRoot(); + + TFile *myFile; + TTree *myTree; + TTree *tree; + + // HIT datas + + G4String p_name, vname; + G4double spin, edep, toten, kinen, tof, globaltime, proptime; + G4ThreeVector hitpos, hitmom; + G4int ID; + + G4bool condition; + + G4bool CheckCondition(const G4Step* aStep); + + void GetDatas(const G4Step* aStep); + + +typedef struct +{ + Float_t kenergy, tenergy, edeposit; + Float_t localtime, globaltime, proptime; + Float_t positionx, positiony,positionz; + Float_t momdirx,momdiry,momdirz, foil; + Int_t muon,positron,gamma, runid; +} cryoHit ; + + cryoHit theHit; + void getHit(); + +private: + LEMuSRCryoHitsCollection *CryoCollection; + + G4double positionResolution; + G4int mu,e,g; + +}; + + +#endif diff --git a/geant4/LEMuSR/include/LEMuSRCylVector.hh b/geant4/LEMuSR/include/LEMuSRCylVector.hh new file mode 100644 index 0000000..406bb90 --- /dev/null +++ b/geant4/LEMuSR/include/LEMuSRCylVector.hh @@ -0,0 +1,20 @@ +#ifndef LEMuSRCylVector_h +#define LEMuSRCylVector_h 1 + +#include "G4ThreeVector.hh" +#include "G4UnitsTable.hh" + +class LEMuSRCylVector : public G4ThreeVector +{ +public: + LEMuSRCylVector(); + LEMuSRCylVector(){;} + + + +}; + + + + +#endif diff --git a/geant4/LEMuSR/include/LEMuSRDecay.hh b/geant4/LEMuSR/include/LEMuSRDecay.hh new file mode 100644 index 0000000..a864901 --- /dev/null +++ b/geant4/LEMuSR/include/LEMuSRDecay.hh @@ -0,0 +1,34 @@ +#ifndef LEMuSRDecay_h +#define LEMuSRDecay_h 1 + +#include "G4Decay.hh" + + +#include "G4ios.hh" +#include "globals.hh" +#include "G4VRestDiscreteProcess.hh" +#include "G4ParticleChangeForDecay.hh" +class G4VExtDecayer; + +class G4Decay; + +class LEMuSRDecay : public G4Decay +{ + +protected: // With Description + virtual G4VParticleChange* DecayIt( + const G4Track& aTrack, + const G4Step& aStep + ); + // The DecayIt() method returns by pointer a particle-change object, + // which has information of daughter particles. + G4ParticleChangeForDecay pParticleChangeForDecay; + // const G4VExtDecayer *m_ExtDecayer; + G4double m_RemainderLifeTime; + +public: +G4int testa, testb; +}; + + +#endif diff --git a/geant4/LEMuSR/include/LEMuSRDepolarize.hh b/geant4/LEMuSR/include/LEMuSRDepolarize.hh new file mode 100644 index 0000000..1ab0e08 --- /dev/null +++ b/geant4/LEMuSR/include/LEMuSRDepolarize.hh @@ -0,0 +1,88 @@ + +#ifndef LEMuSRDepolarize_h +#define LEMuSRDepolarize_h 1 +#include "G4VDiscreteProcess.hh" +#include "G4EnergyLossTables.hh" +#include "G4GPILSelection.hh" +#include "G4PhysicsLogVector.hh" +#include "G4VPhysicalVolume.hh" +#include "G4VParticleChange.hh" +#include "G4ParticleChange.hh" +#include "G4UnitsTable.hh" +#include "G4MaterialCutsCouple.hh" +#include "G4ForceCondition.hh" + +#include "G4ParticleTable.hh" +#include "G4DynamicParticle.hh" +#include "LEMuSRPrimaryGeneratorAction.hh" +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +class LEMuSRDepolarize : public G4VDiscreteProcess + +{ + public: // with description + LEMuSRDepolarize(const G4String& name="mudep" , + G4ProcessType aType = fElectromagnetic ); + + + ~LEMuSRDepolarize(); + + + G4VParticleChange* AtRestDoIt( + const G4Track& , + const G4Step& + ); + + G4VParticleChange* PreStepDoIt( + const G4Track& , + const G4Step& + ); + + G4VParticleChange* PostStepDoIt( + const G4Track& , + const G4Step& + ); + + + G4double GetMeanFreePath(const G4Track& aTrack, + G4double previousStepSize, + G4ForceCondition* condition + ); + + + + G4bool CheckCondition( const G4Step& aStep); + G4bool CheckCondition( const G4Step* aStep); + + + G4String p_name, vname; + G4double spin, edep, toten, kinen, tof, globaltime, proptime, itime, ftime,gtime, deltatime; + G4ThreeVector hitpos, hitmom; + G4int ID; + + G4bool condition; + + void GetDatas( const G4Step* aStep); + // model parameters + G4ParticleTable* particleTable; + G4ParticleDefinition* particle; + G4double rnd; + G4DynamicParticle *DP; + + G4ParticleChange fParticleChange; + + + void PrepareSecondary(const G4Track&); + G4Track* aSecondary; + + void InitializeSecondaries(const G4Track&); + + + +}; + + +#endif + + + diff --git a/geant4/LEMuSR/include/LEMuSRDetectorConstruction.hh b/geant4/LEMuSR/include/LEMuSRDetectorConstruction.hh new file mode 100644 index 0000000..1524df7 --- /dev/null +++ b/geant4/LEMuSR/include/LEMuSRDetectorConstruction.hh @@ -0,0 +1,518 @@ +//§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§//* +// LOW ENERGY MUON SPIN RELAXATION, ROTATION, RADIATION +// +// ID : LEMuSRDetectorConstruction.hh , v 1.0 +// AUTHOR: Taofiq PARAISO +// DATE : 2004-06-24 16:24 +//§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§// +// +// & &&&&&&&&&& &&&&&&& &&&&&&&& +// & & && && & && +// & & & & & & && +// & &&&&&&& & & &&&&&& &&&&&&&& +// & & & && & & && +// & & && & & && && & & +// &&&&&&&&&& &&&&&&&&&& & &&&&& && &&&&&&& & && +// & +// & +// & +// & +// DETECTOR CONSTRUCTION.HH +//§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§// + + +#ifndef LEMuSRDetectorConstruction_H +#define LEMuSRDetectorConstruction_H 1 + + +#include "globals.hh" +#include "G4VUserDetectorConstruction.hh" + + +// G4 CLASSES FOR MATERIAL DEFINITION +#include "G4Material.hh" +#include "G4MaterialTable.hh" +#include "G4Element.hh" +#include "G4ElementTable.hh" +#include "G4Isotope.hh" +#include "G4UnitsTable.hh" +#include "G4Transform3D.hh" + +// G4 ATTRIBUTES CLASSES +#include "G4UserLimits.hh" +#include "G4VisAttributes.hh" +#include "G4Colour.hh" + +// G4 SENSITIVE DETECTOR +#include "G4SDManager.hh" +#include "LEMuSRScintSD.hh" +#include "LEMuSROScintSD.hh" +#include "LEMuSRMcpSD.hh" +#include "LEMuSRCryoSD.hh" + +// G4 FIELD MANAGER +#include "G4UniformMagField.hh" +#include "G4UniformElectricField.hh" +#include "G4FieldManager.hh" +#include "LEMuSRRNDMAGField.hh" + + +class LEMuSRDetectorMessenger; // modif + +class G4Box; +class G4Tubs; +class G4Cons; +class G4SubtractionSolid; +class G4UnionSolid; + +class G4LogicalVolume; +class G4VPhysicalVolume; +class G4Material; + + +class LEMuSRDetectorConstruction : public G4VUserDetectorConstruction +{ + +public: + // Constructeur et destructeur + static LEMuSRDetectorConstruction* theDetector; // un pointeur a l'instance + static LEMuSRDetectorConstruction* GetInstance(); + + LEMuSRDetectorConstruction(); + ~LEMuSRDetectorConstruction(); + + + // construction + G4VPhysicalVolume* Construct(); + + G4VPhysicalVolume* lemuDetector(); + + + // messenger + LEMuSRDetectorMessenger* Messenger; + + + + //declaration of all the volumes + + +private: + + //=======LABORATORY::WORLD================= + + // solid + G4Box* LABO_box; + + // logical + G4LogicalVolume* lv_LABO; + + // physical + G4VPhysicalVolume* pv_LABO; + + // materials + G4Material* LABO_material; + + + + //======= MPC2 ================= + + void lemuMCP2(); + + //solids + G4Tubs* MCPV_tube; + G4Tubs* MCPS_tube; + G4Tubs* F160_tube; + G4Tubs* F100_tube; + G4Tubs* F200_tube; + G4Tubs* GATV_tube; + G4Tubs* GATS_tube; + G4UnionSolid* MCPV_vtube; + + + // logicals volumes + G4LogicalVolume* lv_MCPV; + G4LogicalVolume* lv_MCPS ; + G4LogicalVolume* lv_F160 ; + G4LogicalVolume* lv_F100 ; + G4LogicalVolume* lv_F200 ; + G4LogicalVolume* lv_GATV; + G4LogicalVolume* lv_GATS ; + + // physical volumes + G4VPhysicalVolume* pv_MCPV; + G4VPhysicalVolume* pv_MCPS; + G4VPhysicalVolume* pv_F160 ; + G4VPhysicalVolume* pv_F100 ; + G4VPhysicalVolume* pv_F200 ; + G4VPhysicalVolume* pv_GATV; + G4VPhysicalVolume* pv_GATS ; + + void buildAnodeField(); + + + // parameter +public: + G4double mcpv_z; + G4int Grid, Guards; + + + +//=================== ANODE ======================= +private: + + void lemuANODE(); + + // solids + G4Cons* RA_E_cone; + G4Cons* RA_M_cone; + G4Box *RA_Ebox, *RA_Mbox; + G4SubtractionSolid* RA_E, *RA_M; + G4Tubs* RA_G_tube, *RAV_tube; + + // logical + G4LogicalVolume* lv_RA_E ; + G4LogicalVolume* lv_RA_M ; + G4LogicalVolume* lv_RA_G ; + G4LogicalVolume* lv_RAV ; + + // physical + G4VPhysicalVolume* pv_RA_E ; + G4VPhysicalVolume* pv_RA_M ; + G4VPhysicalVolume* pv_RA_G ; + G4VPhysicalVolume* pv_RAV ; + + + + + +//================ MCP DETECTOR ===================== +private: + void lemuMCPdet(); + + // solids + G4Tubs* DMCP_tube; + G4Tubs* MCPM_tube; + G4Box* MCPA_box; + G4Tubs* ANVA_tube; + G4Box* MCSR_box; + G4Tubs* MCVR_tube; + G4Tubs* MCSS_tube; + + // logical volumes + G4LogicalVolume* lv_DMCP ; + G4LogicalVolume* lv_MCPA ; + G4LogicalVolume* lv_MCPM ; + G4LogicalVolume* lv_ANVA ; + G4LogicalVolume* lv_MCSR ; + G4LogicalVolume* lv_MCVR ; + G4LogicalVolume* lv_MCSS ; + + // physical volumes + G4VPhysicalVolume* pv_DMCP ; + G4VPhysicalVolume* pv_MCPA ; + G4VPhysicalVolume* pv_MCPM ; + G4VPhysicalVolume* pv_MCPM2; + G4VPhysicalVolume* pv_ANVA ; + G4VPhysicalVolume* pv_ANVA2; + G4VPhysicalVolume* pv_MCSR ; + G4VPhysicalVolume* pv_MCVR ; + G4VPhysicalVolume* pv_MCSS ; + + // parameters +public: + G4double B; // magnetic field default unit gauss + +//================ CRYOSTAT ====================== +private: + void lemuCRYO(); + + // solids + G4Tubs* SAH1_tube; + G4Tubs* SAH2_tube; + G4Tubs* SAH3_tube; + G4Tubs* SAPH_tube; + G4Tubs* COFI_tube; + G4Tubs* CRY1_tube; + G4Tubs* CRY2_tube; + G4Tubs* CRY3_tube; + G4Tubs* CRY4_tube; + G4Tubs* CRSH_tube; + G4Tubs* cryoField_tube; + G4Tubs* CRSH2_tube; + G4Tubs* Guard_Rings; + + // logical volumes + G4LogicalVolume* lv_SAH1 ; + G4LogicalVolume* lv_SAH2 ; + G4LogicalVolume* lv_SAH3; + G4LogicalVolume* lv_SAPH ; + G4LogicalVolume* lv_COFI ; + G4LogicalVolume* lv_CRY1 ; + G4LogicalVolume* lv_CRY2 ; + G4LogicalVolume* lv_CRY3 ; + G4LogicalVolume* lv_CRY4 ; + G4LogicalVolume* lv_CRSH ; + G4LogicalVolume* lv_CRSH2 ; + G4LogicalVolume* lv_Guards ; + G4LogicalVolume* lv_cryoField ; + + + // physical volumes + G4VPhysicalVolume* pv_SAH1 ; + G4VPhysicalVolume* pv_SAH2 ; + G4VPhysicalVolume* pv_SAH3 ; + G4VPhysicalVolume* pv_SAPH ; + G4VPhysicalVolume* pv_COFI ; + G4VPhysicalVolume* pv_CRY1 ; + G4VPhysicalVolume* pv_CRY2 ; + G4VPhysicalVolume* pv_CRY3 ; + G4VPhysicalVolume* pv_CRY4 ; + G4VPhysicalVolume* pv_CRSH ; + G4VPhysicalVolume* pv_CRSH2 ; + G4VPhysicalVolume* pv_Guard1 ; + G4VPhysicalVolume* pv_Guard2 ; + G4VPhysicalVolume* pv_cryoField; + + // Cryo electric field manager + G4FieldManager* cryoFieldMgr; + G4ElectricField* cryoField; + + G4FieldManager* sampleFieldMgr; + G4MagneticField* sampleField; + + + void buildCryoField(); + void NEWMAPS(); + +public: + // Parameters + G4double cryoFieldLength,cryoVoltage; + G4String Material_SAH; + + + //================ LINSE three ====================== +private: + void lemuLinse3(); + + // solids + G4Tubs* L3VA_tube; + G4Tubs* L3ST_tube; + G4Tubs* L3F_tube; // flange + + G4SubtractionSolid* L3GP_tube; + G4Tubs* L3GP1, *L3GP2, *L3GP3; // L3GV_tube is a boolean + + + G4SubtractionSolid* L3HP_tube; + + G4Tubs* L3HP1, *L3HP2 , *L3HP3, *L3HP4, *L3HP5; + + // logical volumes + G4LogicalVolume* lv_L3VA ; + G4LogicalVolume* lv_L3ST ; + G4LogicalVolume* lv_L3F;//flange + + // Ground potential + G4LogicalVolume* lv_L3GP1, *lv_L3GP2 , *lv_L3GP3; + + // High potential + G4LogicalVolume* lv_L3HP, *lv_L3HP3, *lv_L3HP4, *lv_L3HP5 ; + + + + // physical volumes + G4double L3z; + G4VPhysicalVolume* pv_L3VA ; + G4VPhysicalVolume* pv_L3ST ; + G4VPhysicalVolume* pv_L3F1, *pv_L3F2 ;// flanges + + + G4VPhysicalVolume* pv_L3GP1, *pv_L3GP2, *pv_L3GP3, *pv_L3GP4, *pv_L3GP5, *pv_L3GP6, *pv_L3GP7, *pv_L3GP8 ; + + G4VPhysicalVolume* pv_L3HP, *pv_L3HP3, *pv_L3HP4, *pv_L3HP5 , *pv_L3HP6, *pv_L3HP7, *pv_L3HP8; + G4VPhysicalVolume* pv_L3GV2 ; + + + + //================ TRIGGER DETECTOR ==================== +private: + void lemuTrigger_Detector(); + + // solids + G4Tubs* Trigger_tube; + G4Tubs* TriggerV_tube; + G4Tubs* TriggerF_tube; // flange + + G4Box* Trigger_box, *Trigger_box2, *Trigger_box3; + + // magnetic field manager + G4FieldManager* T1FieldMgr; + G4UniformElectricField* T1Field; + // magnetic field manager + G4FieldManager* T2FieldMgr; + G4UniformElectricField* T2Field; + // magnetic field manager + G4FieldManager* T3FieldMgr; + G4UniformElectricField* T3Field; + + + // logical + G4LogicalVolume *lv_Trigger, *lv_TriggerF, *lv_TriggerV, *lv_TriggerB, *lv_TriggerB2, *lv_TriggerB3, *lv_CFOIL; + // physica.l + G4VPhysicalVolume *pv_Trigger, *pv_TriggerF1, *pv_TriggerF2,*pv_TriggerV, *pv_TriggerB, *pv_TriggerB2, *pv_TriggerB3, *pv_CFOIL; + + + //================ COMPENSATION GATE ==================== +private: + void lemuCGate(); + + // solids + G4Tubs* CGate_tube; + G4Tubs* CGateV_tube; + G4Tubs* CGateF_tube; // flange + // logical + G4LogicalVolume *lv_CGate, *lv_CGateF, *lv_CGateV; + // physica.l + G4VPhysicalVolume *pv_CGate, *pv_CGateF1, *pv_CGateF2,*pv_CGateV; + + + //======= INNER/OUTER SCINTILLATOR ================= +private: + void lemuSCINT(); + + + //solids + G4Tubs* SCIS_tube; + G4Tubs* SCOS_tube; + + // logicals volumes + G4LogicalVolume* lv_SCIS; + G4LogicalVolume* lv_SCOS ; + + // physical volumes + G4VPhysicalVolume* pv_SCISl; + G4VPhysicalVolume* pv_SCOSl; + + G4VPhysicalVolume* pv_SCISr; + G4VPhysicalVolume* pv_SCOSr; + + G4VPhysicalVolume* pv_SCISb; + G4VPhysicalVolume* pv_SCOSb; + + G4VPhysicalVolume* pv_SCISt; + G4VPhysicalVolume* pv_SCOSt; + G4Transform3D rotation1; + G4Transform3D rotation2; + G4Transform3D rotation3; + + + + + //================ ASYMETRY TEST VOLUMES ================ +private: + void lemuAsym(); + + // solids + G4Tubs* Asym_tube; + // logical + G4LogicalVolume *lv_Asym, *lv_AsymL, *lv_AsymR; + // physica.l + G4VPhysicalVolume *pv_Asym, *pv_Asym2, *pv_AsymL, *pv_AsymR; + G4Transform3D Asym_rotation; + + + + //========= ELECTRIC FIELD TEST VOLUMES ================ +private: + void lemuFieldCheck(); + // solids + G4Tubs* fchk_tube; + // logical + G4LogicalVolume* lv_fchk, *lv_fchk2,*lv_fchk3; + // physical + G4VPhysicalVolume* pv_fchk,*pv_fchk2,*pv_fchk3,*pv_fchk4,*pv_fchk5,*pv_fchk6,*pv_fchk7,*pv_fchk8,*pv_fchk9,*pv_fchk1,*pv_fchk10,*pv_fchk11,*pv_fchk12,*pv_fchk13,*pv_fchk14,*pv_fchk15,*pv_fchk16,*pv_fchk17,*pv_fchk18,*pv_fchk19,*pv_fchk20,*pv_fchk21,*pv_fchk22,*pv_fchk23,*pv_fchk24,*pv_fchk25,*pv_fchk26,*pv_fchk27,*pv_fchk28,*pv_fchk29,*pv_fchk30,*pv_fchk31,*pv_fchk32,*pv_fchk33,*pv_fchk34,*pv_fchk35,*pv_fchk36,*pv_fchk37,*pv_fchk38,*pv_fchk39,*pv_fchk40,*pv_fchk41,*pv_fchk42,*pv_fchk43,*pv_fchk44,*pv_fchk45,*pv_fchk46,*pv_fchk47,*pv_fchk48,*pv_fchk49,*pv_fchk50,*pv_fchk51,*pv_fchk52,*pv_fchk53,*pv_fchk54,*pv_fchk55,*pv_fchk56,*pv_fchk57,*pv_fchk58,*pv_fchk59,*pv_fchk60,*pv_fchk61,*pv_fchk62,*pv_fchk63,*pv_fchk64,*pv_fchk65,*pv_fchk66,*pv_fchk67,*pv_fchk68,*pv_fchk69,*pv_fchk70,*pv_fchk71,*pv_fchk72; + + + //====== SENSITIVE DETECTORS ========================== +public: + LEMuSRCryoSD *CryoSD; + LEMuSRMcpSD *McpSD; + LEMuSRScintSD *iScintSD; + LEMuSROScintSD *oScintSD; + G4int scint, mcp, cryo; + + + //====== MATERIAL DECLARATION ========================= +private: + void MaterialsDefinition(); + + //materials + G4Material* SC_material; + G4Material* SAH_material; + G4Material* SAPH_material; + G4Material* Scint_material; + G4Material* DMCP_material; + G4Material* Vacuum ; + G4Material* SSteel ; + G4Material* Copper ; + G4Material* Macor ; + G4Material* Carbon ; + + + //====== ATTRIBUTES SETTING ========================= + void LoadAttributes(); + + G4VisAttributes* Blue_style, *Red_style, *Purple_style, *Green_style, *Yellow_style, *dRed_style , *dYellow_style, *lBlue_style,*fBlue_style, *dBlue_style, *oxsteel; + G4VisAttributes* VTBB_style,*MCP_style, *MACOR_style, *SCINT_style, *dSCINT_style; + G4VisAttributes* White_style; + + + G4UserLimits* VTBB_lim; + + + //====== ARGUMENTS AND PARAMETERS====================== + +public: + G4double dSPhi; // starting angle for detector + G4double dEPhi; // ending angle for detector + + G4double sSPhi; // starting angle for detector + G4double sEPhi; // ending angle for detector + + G4int magfield, elfield, anode_elfield, trigger_field; + G4double L3FieldVal,AnodeFieldVal,RALval,RARval, FieldStepLim, cfthk; + G4FieldManager* L3FieldMgr, *GFieldMgr; + G4double offset, mcdetector, halfview; + G4double AsymCheck; + G4double RA_Ez, RA_Mz, RA_Gz, GATVz; + inline G4double GetParamMC(){return mcdetector;} + + //======= TEMPLATE Volume To Be Built ================= + + void lemuVTBB(); + + //solids + G4Tubs* VTBB_tube; + + // logicals volumes + G4LogicalVolume* lv_VTBB; + + + // physical volumes + G4VPhysicalVolume* pv_VTBB; + + + + //materials + G4Material* VTBB_material; + + + + + + // print STATUS + void PrintStatus(); +}; + +#endif + diff --git a/geant4/LEMuSR/include/LEMuSRDetectorMessenger.hh b/geant4/LEMuSR/include/LEMuSRDetectorMessenger.hh new file mode 100644 index 0000000..a3d83c5 --- /dev/null +++ b/geant4/LEMuSR/include/LEMuSRDetectorMessenger.hh @@ -0,0 +1,85 @@ +#ifndef LEMuSRDetectorMessenger_h +#define LEMuSRDetectorMessenger_h 1 + + +#include "G4ios.hh" +#include "globals.hh" +#include "G4UImessenger.hh" +#include "LEMuSRDetectorConstruction.hh" +#include "LEMuSRElectricField.hh" +#include "G4RunManager.hh" + +#include "G4UIdirectory.hh" +#include "G4UIcmdWith3VectorAndUnit.hh" +#include "G4UIcmdWith3Vector.hh" +#include "G4UIcmdWithADoubleAndUnit.hh" +#include "G4UIcmdWithAString.hh" +#include "G4UIcmdWithADouble.hh" + +#include "G4UIcmdWithAnInteger.hh" +#include "G4UIcmdWithoutParameter.hh" +#include "G4UIcommand.hh" +#include "G4UImanager.hh" +#include "G4UIterminal.hh" +#include "G4UItcsh.hh" + +class G4UIcommand; +class G4UIdirectory; +class G4UIcmdWithADouble; +class G4UIcmdWithADoubleAndUnit; +class G4UIcmdWith3VectorAndUnit; +class G4UIcmdWith3Vector; +class G4UIcmdWithAnInteger; +class G4UIcmdWithAString; +class G4UIcmdWithoutParameter; +class LEMuSRDetectorConstruction; //modif + +class LEMuSRDetectorMessenger : public G4UImessenger { +public: + LEMuSRDetectorMessenger(LEMuSRDetectorConstruction*); + ~LEMuSRDetectorMessenger(); + + +public: + void SetNewValue(G4UIcommand* command, G4String newvalue); + + + //arguments +private: + LEMuSRDetectorConstruction* theDetector; + + // commands +private: + + G4UIdirectory* DetMode; + + //commands with STRING + G4UIcmdWithAString* SetDetMode ; + G4UIcmdWithAString* SetElField ; + G4UIcmdWithAString* SetGrid ; + G4UIcmdWithAString* SetGuards ; + G4UIcmdWithAString* SetDetVisualization ; + G4UIcmdWithAString* SetSAHmaterial ; + + G4UIcmdWithAString* SetAsymCheck ; + G4UIcmdWithAString* SetFieldCheck ; + + //commands with DOUBLE + G4UIcmdWithADouble* SetThirdLensPotential, *SetCFthk ; + G4UIcmdWithADouble* SetFieldStepLim ; + G4UIcmdWithADouble* SetMagField ; + + G4UIcmdWithADouble* SetCryoPotential; + + + //coomand with 3vector + G4UIcmdWith3Vector* SetRAPotential; + + + + G4VPhysicalVolume* newDetector; + + +}; + +#endif diff --git a/geant4/LEMuSR/include/LEMuSREMPhysics.hh b/geant4/LEMuSR/include/LEMuSREMPhysics.hh new file mode 100644 index 0000000..d69a821 --- /dev/null +++ b/geant4/LEMuSR/include/LEMuSREMPhysics.hh @@ -0,0 +1,61 @@ +// ------------------------------------------- +// History +// first version 12 Nov. 2000 by H.Kurashige +// ------------------------------------------------------------ +#ifndef LEMuSREMPhysics_h +#define LEMuSREMPhysics_h 1 + +#include "globals.hh" +#include "G4ios.hh" + +#include "G4VPhysicsConstructor.hh" + +#include "G4PhotoElectricEffect.hh" +#include "G4ComptonScattering.hh" +#include "G4GammaConversion.hh" +#include "G4MultipleScattering.hh" +#include "G4eIonisation.hh" +#include "G4eBremsstrahlung.hh" +#include "G4eplusAnnihilation.hh" + +class LEMuSREMPhysics : public G4VPhysicsConstructor +{ + public: + LEMuSREMPhysics(const G4String& name ="EM"); + virtual ~LEMuSREMPhysics(); + + public: + // This method will be invoked in the Construct() method. + // each particle type will be instantiated + virtual void ConstructParticle(); + + // This method will be invoked in the Construct() method. + // each physics process will be instantiated and + // registered to the process manager of each particle type + virtual void ConstructProcess(); + + protected: + // Gamma physics + G4PhotoElectricEffect thePhotoEffect; + G4ComptonScattering theComptonEffect; + G4GammaConversion thePairProduction; + + // Electron physics + G4MultipleScattering theElectronMultipleScattering; + G4eIonisation theElectronIonisation; + G4eBremsstrahlung theElectronBremsStrahlung; + + //Positron physics + G4MultipleScattering thePositronMultipleScattering; + G4eIonisation thePositronIonisation; + G4eBremsstrahlung thePositronBremsStrahlung; + G4eplusAnnihilation theAnnihilation; +}; + + +#endif + + + + + diff --git a/geant4/LEMuSR/include/LEMuSRElFieldMix.hh b/geant4/LEMuSR/include/LEMuSRElFieldMix.hh new file mode 100644 index 0000000..3b8b146 --- /dev/null +++ b/geant4/LEMuSR/include/LEMuSRElFieldMix.hh @@ -0,0 +1,70 @@ +///§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§//* +// LOW ENERGY MUON SPIN RELAXATION, ROTATION, RADIATION +// +// ID :LEMuSRElFieldMix.hh , v 1.3 +// AUTHOR: Taofiq PARAISO +// DATE : 2005-02-14 15:15 +//§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§// +// +// & &&&&&&&&&& &&&&&&& &&&&&&&& +// & & && && & && +// & & & & & & && +// & &&&&&&& & & &&&&&& &&&&&&&& +// & & & && & & && +// & & && & & && && & & +// &&&&&&&&&& &&&&&&&&&& & &&&&& && &&&&&&& & && +// & +// & +// & +// & +// Electric Field MIX +//§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§// + +#ifndef LEMUSRELECTRICFIELDMIX_H +#define LEMUSRELECTRICFIELDMIX_H 1 + +#include"G4ElectricField.hh" +#include"G4ElectroMagneticField.hh" +#include "globals.hh" +#include "G4ios.hh" + +#include +#include +#include +#include +#include +#include "CLHEP/Matrix/Vector.h" +#include "CLHEP/Matrix/Matrix.h" + + +#include "LEMuSRElectricField.hh" + +class LEMuSRElFieldMix : public G4ElectricField +{ +public: + + + LEMuSRElFieldMix( LEMuSRElectricField* E1, LEMuSRElectricField* E2, G4double field1_val, G4double field2_val); + + LEMuSRElFieldMix( G4ElectricField* E1, G4ElectricField* E2, G4double field1_val, G4double field2_val); + + + + + ~LEMuSRElFieldMix(); + + void GetFieldValue(const G4double point[4], G4double *Bfield) const; + + void Test(); + +public: + G4double coef1, coef2; + // LEMuSRElectricField* field1, *field2; + G4ElectricField* field1, *field2; + + +}; + +#endif + + diff --git a/geant4/LEMuSR/include/LEMuSRElMagField.hh b/geant4/LEMuSR/include/LEMuSRElMagField.hh new file mode 100644 index 0000000..ae804dc --- /dev/null +++ b/geant4/LEMuSR/include/LEMuSRElMagField.hh @@ -0,0 +1,43 @@ +#ifndef LEMUSRELECTRICMAGFIELD_H +#define LEMUSRELECTRICMAGFIELD_H 1 + +#include"G4ElectricField.hh" +#include"G4MagneticField.hh" +#include"G4ElectroMagneticField.hh" +#include "globals.hh" +#include "G4ios.hh" + +#include +#include +#include +#include +#include +#include "CLHEP/Matrix/Vector.h" +#include "CLHEP/Matrix/Matrix.h" + + +#include "LEMuSRElectricField.hh" + +class LEMuSRElMagField : public G4MagneticField +{ +public: + + + LEMuSRElMagField( G4ElectricField* E, G4MagneticField* B, G4double field1_val, G4double field2_val); + + ~LEMuSRElMagField(); + + void GetFieldValue(const G4double point[4], G4double *Bfield) const; + + void Test(); + + G4bool DoesFieldChangeEnergy() const { return true; }// important to state that field changes energy (electric part!!!) + +public: + G4double coef1, coef2; + G4ElectricField* field1; + G4MagneticField* field2; + +}; + +#endif diff --git a/geant4/LEMuSR/include/LEMuSRElMag_SpinEqRhs.hh b/geant4/LEMuSR/include/LEMuSRElMag_SpinEqRhs.hh new file mode 100644 index 0000000..72100fa --- /dev/null +++ b/geant4/LEMuSR/include/LEMuSRElMag_SpinEqRhs.hh @@ -0,0 +1,41 @@ + + +#ifndef LEMuSRELMAG_SPIN_EQRHS +#define LEMuSRELMAG_SPIN_EQRHS + +#include "G4Types.hh" +#include "G4Mag_EqRhs.hh" + +class G4MagneticField; + +class LEMuSRElMag_SpinEqRhs : public G4Mag_EqRhs +{ + public: // with description + + LEMuSRElMag_SpinEqRhs( G4MagneticField* MagField ); + ~LEMuSRElMag_SpinEqRhs(); + // Constructor and destructor. No actions. + + void SetChargeMomentumMass(G4double particleCharge, // in e+ units + G4double MomentumXc, + G4double mass); + + void EvaluateRhsGivenB( const G4double y[], + const G4double B[3], + G4double dydx[] ) const; + // Given the value of the magnetic field B, this function + // calculates the value of the derivative dydx. + + private: + + G4double omegac; + G4double anomaly; + G4double ParticleCharge; + + G4double E; + G4double gamma, m_mass; + G4double beta; + G4double cst; +}; + +#endif /* LEMuSRELMAG_SPIN_EQRHS */ diff --git a/geant4/LEMuSR/include/LEMuSRElectricField.hh b/geant4/LEMuSR/include/LEMuSRElectricField.hh new file mode 100644 index 0000000..037ee07 --- /dev/null +++ b/geant4/LEMuSR/include/LEMuSRElectricField.hh @@ -0,0 +1,81 @@ +///§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§//* +// LOW ENERGY MUON SPIN RELAXATION, ROTATION, RADIATION +// +// ID :LEMuSRElectricField.hh , v 1.3 +// AUTHOR: Taofiq PARAISO +// DATE : 2004-09-17 10:20 +//§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§// +// +// & &&&&&&&&&& &&&&&&& &&&&&&&& +// & & && && & && +// & & & & & & && +// & &&&&&&& & & &&&&&& &&&&&&&& +// & & & && & & && +// & & && & & && && & & +// &&&&&&&&&& &&&&&&&&&& & &&&&& && &&&&&&& & && +// & +// & +// & +// & +// Electric Field +//§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§// + +#ifndef LEMUSRELECTRICFIELD_H +#define LEMUSRELECTRICFIELD_H 1 + +#include"G4ElectricField.hh" +#include"G4ElectroMagneticField.hh" +#include "globals.hh" +#include "G4ios.hh" + +#include +#include +#include +#include +#include +#include "CLHEP/Matrix/Vector.h" +#include "CLHEP/Matrix/Matrix.h" + + + +class LEMuSRElectricField : public G4ElectricField +{ +public: + + + LEMuSRElectricField(G4double fieldval,const char* Xfile, + const char* Yfile, + const char* Zfile,G4String map_length_unit, + G4double Offset, G4double nx, G4double ny, G4double nz);//offset must be entered in millimeter + + LEMuSRElectricField(G4double fieldval,const char* file,G4String map_length_unit, + G4double Offset, G4double nx, G4double ny, G4double nz); + + + ~LEMuSRElectricField(); + + void GetFieldValue(const G4double Point[4], G4double *Bfield) const; + + void Test(); + +public: + // std::vector< std::vector< std::vector< G4double > > > xField; // vector of + // vector of + // vector of G4doubles [[[a]i]j]k + + // std::vector< std::vector< std::vector< G4double > > > yField; + // std::vector< std::vector< std::vector< G4double > > > zField; + + G4double xField[90][90][201]; + G4double yField[90][90][201]; + G4double zField[90][90][201]; + // The physical limits of the defined region + G4double minx, maxx, miny, maxy, minz, maxz; + + G4double dx, dy, dz, zOffset, nx,ny,nz, FieldVal; + G4String map_unit; +}; + +#endif + + diff --git a/geant4/LEMuSR/include/LEMuSRElectricField.hh~ b/geant4/LEMuSR/include/LEMuSRElectricField.hh~ new file mode 100644 index 0000000..47d921f --- /dev/null +++ b/geant4/LEMuSR/include/LEMuSRElectricField.hh~ @@ -0,0 +1,81 @@ +///§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§//* +// LOW ENERGY MUON SPIN RELAXATION, ROTATION, RADIATION +// +// ID :LEMuSRElectricField.hh , v 1.3 +// AUTHOR: Taofiq PARAISO +// DATE : 2004-09-17 10:20 +//§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§// +// +// & &&&&&&&&&& &&&&&&& &&&&&&&& +// & & && && & && +// & & & & & & && +// & &&&&&&& & & &&&&&& &&&&&&&& +// & & & && & & && +// & & && & & && && & & +// &&&&&&&&&& &&&&&&&&&& & &&&&& && &&&&&&& & && +// & +// & +// & +// & +// Electric Field +//§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§// + +#ifndef LEMUSRELECTRICFIELD_H +#define LEMUSRELECTRICFIELD_H 1 + +#include"G4ElectricField.hh" +#include"G4ElectroMagneticField.hh" +#include "globals.hh" +#include "G4ios.hh" + +#include +#include +#include +#include +#include +#include "CLHEP/Matrix/Vector.h" +#include "CLHEP/Matrix/Matrix.h" + + + +class LEMuSRElectricField : public G4ElectricField +{ +public: + + + LEMuSRElectricField(G4double fieldval,const char* Xfile, + const char* Yfile, + const char* Zfile,G4String map_length_unit, + G4double Offset, G4double nx, G4double ny, G4double nz);//offset must be entered in millimeter + + LEMuSRElectricField(G4double fieldval,const char* file,G4String map_length_unit, + G4double Offset, G4double nx, G4double ny, G4double nz); + + + ~LEMuSRElectricField(); + + void GetFieldValue(const G4double Point[4], G4double *Bfield) const; + + void Test(); + +public: + // std::vector< std::vector< std::vector< G4double > > > xField; // vector of + // vector of + // vector of G4doubles [[[a]i]j]k + + // std::vector< std::vector< std::vector< G4double > > > yField; + // std::vector< std::vector< std::vector< G4double > > > zField; + + G4double xField*; + G4double yField*; + G4double zField*; + // The physical limits of the defined region + G4double minx, maxx, miny, maxy, minz, maxz; + + G4double dx, dy, dz, zOffset, nx,ny,nz, FieldVal; + G4String map_unit; +}; + +#endif + + diff --git a/geant4/LEMuSR/include/LEMuSREqMagElectricField.hh b/geant4/LEMuSR/include/LEMuSREqMagElectricField.hh new file mode 100644 index 0000000..4a0c91c --- /dev/null +++ b/geant4/LEMuSR/include/LEMuSREqMagElectricField.hh @@ -0,0 +1,82 @@ +// +// ******************************************************************** +// * DISCLAIMER * +// * * +// * The following disclaimer summarizes all the specific disclaimers * +// * of contributors to this software. The specific disclaimers,which * +// * govern, are listed with their locations in: * +// * http://cern.ch/geant4/license * +// * * +// * Neither the authors of this software system, nor their employing * +// * institutes,nor the agencies providing financial support for this * +// * work make any representation or warranty, express or implied, * +// * regarding this software system or assume any liability for its * +// * use. * +// * * +// * This code implementation is the intellectual property of the * +// * GEANT4 collaboration. * +// * By copying, distributing or modifying the Program (or any work * +// * based on the Program) you indicate your acceptance of this * +// * statement, and all its terms. * +// ******************************************************************** +// +// +// $Id$ +// GEANT4 tag $Name$ +// +// +// class LEMuSREqMagElectricField +// +// Class description: +// +// This is the right-hand side of equation of motion in a combined +// electric and magnetic field. + +// History: +// - Created. V.Grichine, 10.11.98 +// ------------------------------------------------------------------- + + +#ifndef LEMuSREQMAGELECTRICFIELD_hh +#define LEMuSREQMAGELECTRICFIELD_hh + +#include "G4EquationOfMotion.hh" +#include "G4ElectroMagneticField.hh" + +class LEMuSREqMagElectricField : public G4EquationOfMotion +{ + public: // with description + + LEMuSREqMagElectricField(G4ElectroMagneticField *emField ) + : G4EquationOfMotion( emField ) {;} + + ~LEMuSREqMagElectricField() {;} + + void SetChargeMomentumMass(G4double particleCharge, // in e+ units + G4double MomentumXc, + G4double mass); + + void EvaluateRhsGivenB(const G4double y[], + const G4double Field[], + G4double dydx[] ) const; + // Given the value of the electromagnetic field, this function + // calculates the value of the derivative dydx. + + private: + + G4double fElectroMagCof ; + G4double fMassCof; + + G4double omegac; + G4double anomaly; + G4double ParticleCharge; + + G4double E; + G4double gamma; + G4double beta; + + + +}; + +#endif diff --git a/geant4/LEMuSR/include/LEMuSREventAction.hh b/geant4/LEMuSR/include/LEMuSREventAction.hh new file mode 100644 index 0000000..2663bd5 --- /dev/null +++ b/geant4/LEMuSR/include/LEMuSREventAction.hh @@ -0,0 +1,97 @@ +//§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§//* +// LOW ENERGY MUON SPIN RELAXATION, ROTATION, RADIATION Geant4 SIMULATION +// ID : LEMuSREventAction.hh , v 1.0 +// AUTHOR: Taofiq PARAISO +// DATE : 2004-07-07 11:15 +// +//§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§// +// +// & &&&&&&&&&& &&&&&&& &&&&&&&& +// & & && && & && +// & & & & & & && +// & &&&&&&& & & &&&&&& &&&&&&&& +// & & & && & & && +// & & && & & && && & & +// &&&&&&&&&& &&&&&&&&&& & &&&&& && &&&&&&& & && +// & +// & +// & +// & +// EVENT ACTION.HH +//§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§//// + +// + +#ifndef LEMuSREventAction_h +#define LEMuSREventAction_h 1 + +#include "G4UserEventAction.hh" +#include "globals.hh" + +// root histogram classes +#include + +#include "TROOT.h" +#include "TFile.h" +#include "TH1.h" +#include "TRandom.h" +#include "TTree.h" +#include "TBranch.h" +#include "TClonesArray.h" +#include "TStopwatch.h" +#include "LEMuSRCryoHit.hh" + +class G4EventManager; +class G4Event; + + +class LEMuSREventAction : public G4UserEventAction +{ +public: + LEMuSREventAction(); + ~LEMuSREventAction(); +public: // with description + void BeginOfEventAction(const G4Event* anEvent); + void EndOfEventAction(const G4Event* anEvent); + + void SetDrawFlag (G4String val) {drawFlag = val;}; + // Two virtual method the user can override. + +void SDCollManagement(const G4Event* evt); + + +private: + G4String drawFlag; + + G4int iScintCollID, oScintCollID, CryoCollID, McpCollID; + + + + + + // root variables +public: + + // TROOT eventTree; + Int_t nevent , comp , split , write , hfill , read ,arg4, arg5 ; + TFile *myFile; + TTree *myTree; + TBranch *b; + TH1D *hTest ,*hTest2,*hTest3, *hTest4; + + + LEMuSRCryoHit* aHit; + G4double en_dep; + + + + typedef struct { + G4double lifetime, energy, angle; + } PRIMDATAS; + + + PRIMDATAS PMdatas; + +}; + +#endif diff --git a/geant4/LEMuSR/include/LEMuSRGeneralPhysics.hh b/geant4/LEMuSR/include/LEMuSRGeneralPhysics.hh new file mode 100644 index 0000000..04a57c6 --- /dev/null +++ b/geant4/LEMuSR/include/LEMuSRGeneralPhysics.hh @@ -0,0 +1,46 @@ +// History +// first version 12 Nov. 2000 by H.Kurashige +// ------------------------------------------------------------ +#ifndef LEMuSRGeneralPhysics_h +#define LEMuSRGeneralPhysics_h 1 + +#include "globals.hh" +#include "G4ios.hh" + +#include "G4VPhysicsConstructor.hh" +#include "G4StepLimiter.hh" + +#include "LEMuSRDecay.hh" + +class LEMuSRGeneralPhysics : public G4VPhysicsConstructor +{ +public: + LEMuSRGeneralPhysics(const G4String& name = "general"); + virtual ~LEMuSRGeneralPhysics(); + +public: + // This method will be invoked in the Construct() method. + // each particle type will be instantiated + virtual void ConstructParticle(); + + // This method will be invoked in the Construct() method. + // each physics process will be instantiated and + // registered to the process manager of each particle type + virtual void ConstructProcess(); + +protected: + LEMuSRDecay fDecayProcess; + G4StepLimiter fStepLimiter; +}; + + +#endif + + + + + + + + + diff --git a/geant4/LEMuSR/include/LEMuSRHadronPhysics.hh b/geant4/LEMuSR/include/LEMuSRHadronPhysics.hh new file mode 100644 index 0000000..32d48f1 --- /dev/null +++ b/geant4/LEMuSR/include/LEMuSRHadronPhysics.hh @@ -0,0 +1,322 @@ +// $Id$ +// GEANT4 tag $Name$ +// +// ------------------------------------------------------------ +// GEANT 4 class header file +// +// This class is an derived class of G4VPhysicsConstructor +// +// ------------------------------------------------------------ +#ifndef LEMuSRHadronPhysics_h +#define LEMuSRHadronPhysics_h 1 + +#include "globals.hh" +#include "G4ios.hh" +#include + +#include "G4VPhysicsConstructor.hh" + +#include "G4MultipleScattering.hh" +#include "G4hIonisation.hh" + +#include "G4HadronElasticProcess.hh" +#include "G4HadronFissionProcess.hh" +#include "G4HadronCaptureProcess.hh" + +#include "G4PionPlusInelasticProcess.hh" +#include "G4PionMinusInelasticProcess.hh" +#include "G4KaonPlusInelasticProcess.hh" +#include "G4KaonZeroSInelasticProcess.hh" +#include "G4KaonZeroLInelasticProcess.hh" +#include "G4KaonMinusInelasticProcess.hh" +#include "G4ProtonInelasticProcess.hh" +#include "G4AntiProtonInelasticProcess.hh" +#include "G4NeutronInelasticProcess.hh" +#include "G4AntiNeutronInelasticProcess.hh" +#include "G4LambdaInelasticProcess.hh" +#include "G4AntiLambdaInelasticProcess.hh" +#include "G4SigmaPlusInelasticProcess.hh" +#include "G4SigmaMinusInelasticProcess.hh" +#include "G4AntiSigmaPlusInelasticProcess.hh" +#include "G4AntiSigmaMinusInelasticProcess.hh" +#include "G4XiZeroInelasticProcess.hh" +#include "G4XiMinusInelasticProcess.hh" +#include "G4AntiXiZeroInelasticProcess.hh" +#include "G4AntiXiMinusInelasticProcess.hh" +#include "G4DeuteronInelasticProcess.hh" +#include "G4TritonInelasticProcess.hh" +#include "G4AlphaInelasticProcess.hh" +#include "G4OmegaMinusInelasticProcess.hh" +#include "G4AntiOmegaMinusInelasticProcess.hh" + +// Low-energy Models +#include "G4LElastic.hh" +#include "G4LFission.hh" +#include "G4LCapture.hh" + +#include "G4LEPionPlusInelastic.hh" +#include "G4LEPionMinusInelastic.hh" +#include "G4LEKaonPlusInelastic.hh" +#include "G4LEKaonZeroSInelastic.hh" +#include "G4LEKaonZeroLInelastic.hh" +#include "G4LEKaonMinusInelastic.hh" +#include "G4LEProtonInelastic.hh" +#include "G4LEAntiProtonInelastic.hh" +#include "G4LENeutronInelastic.hh" +#include "G4LEAntiNeutronInelastic.hh" +#include "G4LELambdaInelastic.hh" +#include "G4LEAntiLambdaInelastic.hh" +#include "G4LESigmaPlusInelastic.hh" +#include "G4LESigmaMinusInelastic.hh" +#include "G4LEAntiSigmaPlusInelastic.hh" +#include "G4LEAntiSigmaMinusInelastic.hh" +#include "G4LEXiZeroInelastic.hh" +#include "G4LEXiMinusInelastic.hh" +#include "G4LEAntiXiZeroInelastic.hh" +#include "G4LEAntiXiMinusInelastic.hh" +#include "G4LEDeuteronInelastic.hh" +#include "G4LETritonInelastic.hh" +#include "G4LEAlphaInelastic.hh" +#include "G4LEOmegaMinusInelastic.hh" +#include "G4LEAntiOmegaMinusInelastic.hh" + +// High-energy Models + +#include "G4HEPionPlusInelastic.hh" +#include "G4HEPionMinusInelastic.hh" +#include "G4HEKaonPlusInelastic.hh" +#include "G4HEKaonZeroInelastic.hh" +#include "G4HEKaonZeroInelastic.hh" +#include "G4HEKaonMinusInelastic.hh" +#include "G4HEProtonInelastic.hh" +#include "G4HEAntiProtonInelastic.hh" +#include "G4HENeutronInelastic.hh" +#include "G4HEAntiNeutronInelastic.hh" +#include "G4HELambdaInelastic.hh" +#include "G4HEAntiLambdaInelastic.hh" +#include "G4HESigmaPlusInelastic.hh" +#include "G4HESigmaMinusInelastic.hh" +#include "G4HEAntiSigmaPlusInelastic.hh" +#include "G4HEAntiSigmaMinusInelastic.hh" +#include "G4HEXiZeroInelastic.hh" +#include "G4HEXiMinusInelastic.hh" +#include "G4HEAntiXiZeroInelastic.hh" +#include "G4HEAntiXiMinusInelastic.hh" +#include "G4HEOmegaMinusInelastic.hh" +#include "G4HEAntiOmegaMinusInelastic.hh" + +// Stopping processes +#include "G4AntiProtonAnnihilationAtRest.hh" +#include "G4AntiNeutronAnnihilationAtRest.hh" + +#ifdef TRIUMF_STOP_PIMINUS +#include "G4PionMinusAbsorptionAtRest.hh" +#else +#include "G4PiMinusAbsorptionAtRest.hh" +#endif +#ifdef TRIUMF_STOP_KMINUS +#include "G4KaonMinusAbsorption.hh" +#else +#include "G4KaonMinusAbsorptionAtRest.hh" +#endif + +// quark gluon string model with chips afterburner. +#include "G4TheoFSGenerator.hh" +#include "G4ExcitationHandler.hh" +#include "G4PreCompoundModel.hh" +#include "G4GeneratorPrecompoundInterface.hh" +#include "G4QGSModel.hh" +#include "G4QGSParticipants.hh" +#include "G4QGSMFragmentation.hh" +#include "G4ExcitedStringDecay.hh" + +class LEMuSRHadronPhysics : public G4VPhysicsConstructor +{ + public: + LEMuSRHadronPhysics(const G4String& name ="hadron"); + virtual ~LEMuSRHadronPhysics(); + + public: + // This method will be invoked in the Construct() method. + // each particle type will be instantiated + virtual void ConstructParticle(); + + // This method will be invoked in the Construct() method. + // each physics process will be instantiated and + // registered to the process manager of each particle type + virtual void ConstructProcess(); + + protected: + // Elastic Process + G4HadronElasticProcess theElasticProcess; + G4LElastic* theElasticModel; + + // Pi + + G4PionPlusInelasticProcess thePionPlusInelastic; + G4LEPionPlusInelastic* theLEPionPlusModel; + G4MultipleScattering thePionPlusMult; + G4hIonisation thePionPlusIonisation; + + // Pi - + G4PionMinusInelasticProcess thePionMinusInelastic; + G4LEPionMinusInelastic* theLEPionMinusModel; + G4MultipleScattering thePionMinusMult; + G4hIonisation thePionMinusIonisation; +#ifdef TRIUMF_STOP_PIMINUS + G4PionMinusAbsorptionAtRest thePionMinusAbsorption; +#else + G4PiMinusAbsorptionAtRest thePionMinusAbsorption; +#endif + + // pi+ and pi- + + G4TheoFSGenerator theTheoModel; + G4ExcitationHandler theHandler; + G4PreCompoundModel * thePreEquilib; + G4GeneratorPrecompoundInterface theCascade; + G4QGSModel< G4QGSParticipants > theStringModel; + G4QGSMFragmentation theFragmentation; + G4ExcitedStringDecay * theStringDecay; + + // K + + G4KaonPlusInelasticProcess theKaonPlusInelastic; + G4LEKaonPlusInelastic* theLEKaonPlusModel; + G4HEKaonPlusInelastic* theHEKaonPlusModel; + G4MultipleScattering theKaonPlusMult; + G4hIonisation theKaonPlusIonisation; + + // K - + G4KaonMinusInelasticProcess theKaonMinusInelastic; + G4LEKaonMinusInelastic* theLEKaonMinusModel; + G4HEKaonMinusInelastic* theHEKaonMinusModel; + G4MultipleScattering theKaonMinusMult; + G4hIonisation theKaonMinusIonisation; +#ifdef TRIUMF_STOP_KMINUS + G4KaonMinusAbsorption theKaonMinusAbsorption; +#else + G4PiMinusAbsorptionAtRest theKaonMinusAbsorption; +#endif + + // K0L + G4KaonZeroLInelasticProcess theKaonZeroLInelastic; + G4LEKaonZeroLInelastic* theLEKaonZeroLModel; + G4HEKaonZeroInelastic* theHEKaonZeroLModel; + + // K0S + G4KaonZeroSInelasticProcess theKaonZeroSInelastic; + G4LEKaonZeroSInelastic* theLEKaonZeroSModel; + G4HEKaonZeroInelastic* theHEKaonZeroSModel; + + // Proton + G4ProtonInelasticProcess theProtonInelastic; + G4LEProtonInelastic* theLEProtonModel; + G4HEProtonInelastic* theHEProtonModel; + G4MultipleScattering theProtonMult; + G4hIonisation theProtonIonisation; + + // anti-proton + G4AntiProtonInelasticProcess theAntiProtonInelastic; + G4LEAntiProtonInelastic* theLEAntiProtonModel; + G4HEAntiProtonInelastic* theHEAntiProtonModel; + G4MultipleScattering theAntiProtonMult; + G4hIonisation theAntiProtonIonisation; + G4AntiProtonAnnihilationAtRest theAntiProtonAnnihilation; + + // neutron + G4NeutronInelasticProcess theNeutronInelastic; + G4LENeutronInelastic* theLENeutronModel; + G4HENeutronInelastic* theHENeutronModel; + G4HadronFissionProcess theNeutronFission; + G4LFission* theNeutronFissionModel; + G4HadronCaptureProcess theNeutronCapture; + G4LCapture* theNeutronCaptureModel; + + + // anti-neutron + G4AntiNeutronInelasticProcess theAntiNeutronInelastic; + G4LEAntiNeutronInelastic* theLEAntiNeutronModel; + G4HEAntiNeutronInelastic* theHEAntiNeutronModel; + G4AntiNeutronAnnihilationAtRest theAntiNeutronAnnihilation; + + // Lambda + G4LambdaInelasticProcess theLambdaInelastic; + G4LELambdaInelastic* theLELambdaModel; + G4HELambdaInelastic* theHELambdaModel; + + // AntiLambda + G4AntiLambdaInelasticProcess theAntiLambdaInelastic; + G4LEAntiLambdaInelastic* theLEAntiLambdaModel; + G4HEAntiLambdaInelastic* theHEAntiLambdaModel; + + // SigmaMinus + G4SigmaMinusInelasticProcess theSigmaMinusInelastic; + G4LESigmaMinusInelastic* theLESigmaMinusModel; + G4HESigmaMinusInelastic* theHESigmaMinusModel; + G4MultipleScattering theSigmaMinusMult; + G4hIonisation theSigmaMinusIonisation; + + // AntiSigmaMinus + G4AntiSigmaMinusInelasticProcess theAntiSigmaMinusInelastic; + G4LEAntiSigmaMinusInelastic* theLEAntiSigmaMinusModel; + G4HEAntiSigmaMinusInelastic* theHEAntiSigmaMinusModel; + G4MultipleScattering theAntiSigmaMinusMult; + G4hIonisation theAntiSigmaMinusIonisation; + + // SigmaPlus + G4SigmaPlusInelasticProcess theSigmaPlusInelastic; + G4LESigmaPlusInelastic* theLESigmaPlusModel; + G4HESigmaPlusInelastic* theHESigmaPlusModel; + G4MultipleScattering theSigmaPlusMult; + G4hIonisation theSigmaPlusIonisation; + + // AntiSigmaPlus + G4AntiSigmaPlusInelasticProcess theAntiSigmaPlusInelastic; + G4LEAntiSigmaPlusInelastic* theLEAntiSigmaPlusModel; + G4HEAntiSigmaPlusInelastic* theHEAntiSigmaPlusModel; + G4MultipleScattering theAntiSigmaPlusMult; + G4hIonisation theAntiSigmaPlusIonisation; + + // XiZero + G4XiZeroInelasticProcess theXiZeroInelastic; + G4LEXiZeroInelastic* theLEXiZeroModel; + G4HEXiZeroInelastic* theHEXiZeroModel; + + // AntiXiZero + G4AntiXiZeroInelasticProcess theAntiXiZeroInelastic; + G4LEAntiXiZeroInelastic* theLEAntiXiZeroModel; + G4HEAntiXiZeroInelastic* theHEAntiXiZeroModel; + + // XiMinus + G4XiMinusInelasticProcess theXiMinusInelastic; + G4LEXiMinusInelastic* theLEXiMinusModel; + G4HEXiMinusInelastic* theHEXiMinusModel; + G4MultipleScattering theXiMinusMult; + G4hIonisation theXiMinusIonisation; + + // AntiXiMinus + G4AntiXiMinusInelasticProcess theAntiXiMinusInelastic; + G4LEAntiXiMinusInelastic* theLEAntiXiMinusModel; + G4HEAntiXiMinusInelastic* theHEAntiXiMinusModel; + G4MultipleScattering theAntiXiMinusMult; + G4hIonisation theAntiXiMinusIonisation; + + // OmegaMinus + G4OmegaMinusInelasticProcess theOmegaMinusInelastic; + G4LEOmegaMinusInelastic* theLEOmegaMinusModel; + G4HEOmegaMinusInelastic* theHEOmegaMinusModel; + G4MultipleScattering theOmegaMinusMult; + G4hIonisation theOmegaMinusIonisation; + + // AntiOmegaMinus + G4AntiOmegaMinusInelasticProcess theAntiOmegaMinusInelastic; + G4LEAntiOmegaMinusInelastic* theLEAntiOmegaMinusModel; + G4HEAntiOmegaMinusInelastic* theHEAntiOmegaMinusModel; + G4MultipleScattering theAntiOmegaMinusMult; + G4hIonisation theAntiOmegaMinusIonisation; + + +}; + + +#endif + diff --git a/geant4/LEMuSR/include/LEMuSRIonPhysics.hh b/geant4/LEMuSR/include/LEMuSRIonPhysics.hh new file mode 100644 index 0000000..9d4a3d4 --- /dev/null +++ b/geant4/LEMuSR/include/LEMuSRIonPhysics.hh @@ -0,0 +1,80 @@ +// ------------------------------------------- +// History +// first version 12 Nov. 2000 by H.Kurashige +// ------------------------------------------------------------ +#ifndef LEMuSRIonPhysics_h +#define LEMuSRIonPhysics_h 1 + +#include "globals.hh" +#include "G4ios.hh" + +#include "G4VPhysicsConstructor.hh" + +#include "G4HadronElasticProcess.hh" +#include "G4LElastic.hh" + +#include "G4DeuteronInelasticProcess.hh" +#include "G4LEDeuteronInelastic.hh" + +#include "G4TritonInelasticProcess.hh" +#include "G4LETritonInelastic.hh" + +#include "G4AlphaInelasticProcess.hh" +#include "G4LEAlphaInelastic.hh" + +#include "G4hIonisation.hh" +#include "G4ionIonisation.hh" +#include "G4MultipleScattering.hh" + +class LEMuSRIonPhysics : public G4VPhysicsConstructor +{ + public: + LEMuSRIonPhysics(const G4String& name="ion"); + virtual ~LEMuSRIonPhysics(); + + public: + // This method will be invoked in the Construct() method. + // each particle type will be instantiated + virtual void ConstructParticle(); + + // This method will be invoked in the Construct() method. + // each physics process will be instantiated and + // registered to the process manager of each particle type + virtual void ConstructProcess(); + + protected: + // Elastic Process + G4HadronElasticProcess theElasticProcess; + G4LElastic* theElasticModel; + + // Generic Ion physics + G4MultipleScattering fIonMultipleScattering; + G4ionIonisation fIonIonisation; + + // Deuteron physics + G4MultipleScattering fDeuteronMultipleScattering; + G4hIonisation fDeuteronIonisation; + G4DeuteronInelasticProcess fDeuteronProcess; + G4LEDeuteronInelastic* fDeuteronModel; + + // Triton physics + G4MultipleScattering fTritonMultipleScattering; + G4hIonisation fTritonIonisation; + G4TritonInelasticProcess fTritonProcess; + G4LETritonInelastic* fTritonModel; + + // Alpha physics + G4MultipleScattering fAlphaMultipleScattering; + G4hIonisation fAlphaIonisation; + G4AlphaInelasticProcess fAlphaProcess; + G4LEAlphaInelastic* fAlphaModel; + + // He3 physics + G4MultipleScattering fHe3MultipleScattering; + G4hIonisation fHe3Ionisation; + +}; + + +#endif + diff --git a/geant4/LEMuSR/include/LEMuSRMSC.hh b/geant4/LEMuSR/include/LEMuSRMSC.hh new file mode 100644 index 0000000..86cc646 --- /dev/null +++ b/geant4/LEMuSR/include/LEMuSRMSC.hh @@ -0,0 +1,227 @@ +// +// ******************************************************************** +// * DISCLAIMER * +// * * +// * The following disclaimer summarizes all the specific disclaimers * +// * of contributors to this software. The specific disclaimers,which * +// * govern, are listed with their locations in: * +// * http://cern.ch/geant4/license * +// * * +// * Neither the authors of this software system, nor their employing * +// * institutes,nor the agencies providing financial support for this * +// * work make any representation or warranty, express or implied, * +// * regarding this software system or assume any liability for its * +// * use. * +// * * +// * This code implementation is the intellectual property of the * +// * GEANT4 collaboration. * +// * By copying, distributing or modifying the Program (or any work * +// * based on the Program) you indicate your acceptance of this * +// * statement, and all its terms. * +// ******************************************************************** +// +// $Id$ +// GEANT4 tag $Name$ +// +//------------- G4MultipleScattering52 physics process -------------------------- +// by Laszlo Urban, March 2001 +// +// 07-08-01 new methods Store/Retrieve PhysicsTable +// 23-08-01 new angle and z distribution,energy dependence reduced, +// Store,Retrieve methods commented out temporarily, L.Urban +// 11-09-01 G4MultipleScatteringx put as default: G4MultipleScattering +// Store,Retrieve methods reactived (mma) +// 13-09-01 Unused TrueToGeomTransformation method deleted, +// class description (L.Urban) +// 19-09-01 come back to previous process name msc +// 17-04-02 NEW angle distribution + boundary algorithm modified, L.Urban +// 22-04-02 boundary algorithm modified -> important improvement in timing !!!! +// (L.Urban) +// 24-04-02 some minor changes in boundary algorithm, L.Urban +// 24-05-02 changes in data members, L.Urban +// 30-10-02 changes in data members, L.Urban +// 05-02-03 changes in data members, L.Urban +// 18-04-03 Change signature of GetTransportMeanFreePath (V.Ivanchenko) +// 08-08-03 This class is frozen at the release 5.2 (V.Ivanchenko) +// 08-11-04 Remove Store/Retrieve tables (V.Ivantchenko) + +//------------------------------------------------------------------------------ + +// class description +// +// The class simulates the multiple scattering for any kind +// of charged particle. +// +// class description - end + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +#ifndef LEMuSRMSC_h +#define LEMuSRMSC_h 1 +#include "G4VContinuousDiscreteProcess.hh" +#include "G4EnergyLossTables.hh" +#include "G4GPILSelection.hh" +#include "G4PhysicsLogVector.hh" +#include "G4VPhysicalVolume.hh" +#include "G4ParticleChangeForMSC.hh" +#include "G4UnitsTable.hh" +#include "G4MaterialCutsCouple.hh" +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +class LEMuSRMSC : public G4VContinuousDiscreteProcess + +{ + public: // with description + + LEMuSRMSC(const G4String& processName="lemumsc"); + + ~LEMuSRMSC(); + + G4bool IsApplicable ( const G4ParticleDefinition& ); + // returns true for charged particles, false otherwise + + void BuildPhysicsTable(const G4ParticleDefinition& aParticleType); + // This function overloads the corresponding virtual function + // of the base class G4VContinuousDiscreteProcess. + // It is invoked by the G4ParticleWithCuts()::SetCut() method. + // It prepares the table of the transport mean free paths + // for every material. + + void PrintInfoDefinition(); + // Print few lines of informations about the process: validity range, + // origine ..etc.. + // Invoked by BuildPhysicsTable(). + + G4double AlongStepGetPhysicalInteractionLength(const G4Track&, + G4double previousStepSize, + G4double currentMinimumStep, + G4double& currentSafety, + G4GPILSelection* selection); + // The function overloads the corresponding function of the base + // class.It limits the step near to boundaries only + // and invokes the method GetContinuousStepLimit at every step. + + G4double GetContinuousStepLimit(const G4Track& aTrack, + G4double previousStepSize, + G4double currentMinimumStep, + G4double& currentSafety); + // It performs the true step length --> geometrical step length + // transformation. It is invoked by the + // AlongStepGetPhysicalInteractionLength method. + + G4double GetMeanFreePath(const G4Track& aTrack, + G4double previousStepSize, + G4ForceCondition* condition); + // It sets the force condition to true only + // in order to have the PostStepDoIt called at every step. + // This function overloads a virtual function of the base class. + // It is invoked by the ProcessManager of the Particle. + + + G4double GetTransportMeanFreePath( + G4double KineticEnergy,const G4MaterialCutsCouple* couple); + // Just a utility method to get the values of the transport + // mean free path . (It is not used inside the class.) + + G4VParticleChange* AlongStepDoIt(const G4Track& aTrack,const G4Step& aStep); + // The geometrical step length --> true path length transformation + // is performed here (the inverse of the transformation done + // by GetContinuousStepLimit). + + G4VParticleChange* PostStepDoIt(const G4Track& aTrack,const G4Step& aStep); + // It computes the final state of the particle: samples the + // scattering angle and computes the lateral displacement. + // The final state is returned as a ParticleChange object. + // This function overloads a virtual function of the base class. + // It is invoked by the ProcessManager of the Particle. + + void Setsamplez(G4bool value) {samplez = value;}; + // geom. step length distribution should be sampled or not + + void Setdtrl(G4double value) {dtrl = value;}; + // to reduce the energy/step dependence + + void SetBoundary(G4bool value) {boundary = value;}; + void Setfacxsi(G4double value) {facxsi = value; + G4cout << " facxsi=" << facxsi << G4endl;}; + void SetFacrange(G4double val) {facrange=val; + nsmallstep = G4int(std::log((cf+facrange-1.)/ + facrange)/std::log(cf))+1 ; + G4cout << " fr=" << facrange + << " nsmall=" << nsmallstep << G4endl ;}; + // Steplimit after boundary crossing = facrange*range + // estimated nb of steps at boundary nsmallstep = 1/facrange + + + void SetLateralDisplacementFlag(G4bool flag) {fLatDisplFlag = flag;}; + // lateral displacement to be/not to be computed + + void SetNuclCorrPar(G4double val) {NuclCorrPar = val;}; + void SetFactPar(G4double val) {FactPar = val;}; + + protected: // with description + + virtual G4double ComputeTransportCrossSection( + const G4ParticleDefinition& aParticleType, + G4double KineticEnergy, + G4double AtomicNumber, + G4double AtomicWeight); + // It computes the transport cross section. + // The transport mean free path is 1/(transport cross section). + + private: + + // hide assignment operator as private + LEMuSRMSC & operator = (const LEMuSRMSC &right); + LEMuSRMSC ( const LEMuSRMSC &); + + private: // data members + + G4PhysicsTable* theTransportMeanFreePathTable; + + G4double taubig,tausmall,taulim; + + G4double LowestKineticEnergy; + G4double HighestKineticEnergy; + G4int TotBin; + + G4int materialIndex; + + G4double tLast; + G4double zLast; + + // model parameters + G4bool boundary; // spec. handling near boundaries + G4double facrange,tlimit,tlimitmin,cf; + G4int stepno,stepnolastmsc,nsmallstep ; + G4double laststep ; + G4GPILSelection valueGPILSelectionMSC; + + G4double zmean; // z(geom.step length) + G4bool samplez ; // distribution + + G4double range,T0,T1,lambda0,lambda1, // used to reduce the energy + Tlow,alam,blam,dtrl,lambdam, // (or step length) dependence + clam,zm,cthm; + + // with/without lateral displacement + G4bool fLatDisplFlag; + + // nuclear size effect correction + G4double NuclCorrPar; + G4double FactPar; + + G4ParticleChangeForMSC fParticleChange; + + G4double alfa1,alfa2,alfa3,b,xsi,c0,facxsi ; // angle distr. parameters + // facxsi : some tuning + // possibility in the tail +}; + +#include "LEMuSRMSC.icc" + +#endif + + + diff --git a/geant4/LEMuSR/include/LEMuSRMSC.icc b/geant4/LEMuSR/include/LEMuSRMSC.icc new file mode 100644 index 0000000..e7a5779 --- /dev/null +++ b/geant4/LEMuSR/include/LEMuSRMSC.icc @@ -0,0 +1,97 @@ +// +// ******************************************************************** +// * DISCLAIMER * +// * * +// * The following disclaimer summarizes all the specific disclaimers * +// * of contributors to this software. The specific disclaimers,which * +// * govern, are listed with their locations in: * +// * http://cern.ch/geant4/license * +// * * +// * Neither the authors of this software system, nor their employing * +// * institutes,nor the agencies providing financial support for this * +// * work make any representation or warranty, express or implied, * +// * regarding this software system or assume any liability for its * +// * use. * +// * * +// * This code implementation is the intellectual property of the * +// * GEANT4 collaboration. * +// * By copying, distributing or modifying the Program (or any work * +// * based on the Program) you indicate your acceptance of this * +// * statement, and all its terms. * +// ******************************************************************** +// +// $Id$ +// GEANT4 tag $Name$ +// +//------------ LEMuSRMSC physics process --------------------------- +// by Laszlo Urban, March 2001 +// +// Modified: +// +// 18-05-01 V.Ivanchenko Clean up against Linux ANSI compilation +// 23-08-01 new angle and z distribution,energy dependence reduced, +// Store,Retrieve methods commented out temporarily, L.Urban +// 27-08-01 bugfix in AlongStepDoIt, L.Urban +// 28-08-01 GetContinuousStepLimit and AlongStepDoIt moved to .cc file (mma) +// 11-09-01 G4MultipleScatteringx put as default: G4MultipleScattering (mma) +// 15-01-03 Migrade to cut per region (V.Ivanchenko) +// 18-04-03 Change signature of GetTransportMeanFreePath (V.Ivanchenko) +// 16-06-03: ShortLived are not applicable any more (V.Ivanchenko) +// 08-08-03 This class is frozen at the release 5.2 (V.Ivanchenko) +// +//------------------------------------------------------------------------------ + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +inline +G4bool LEMuSRMSC::IsApplicable(const G4ParticleDefinition& particle) +{ + return(particle.GetPDGCharge() != 0. && !particle.IsShortLived()); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +inline G4double LEMuSRMSC::AlongStepGetPhysicalInteractionLength( + const G4Track& track, + G4double previousStepSize, + G4double currentMinimumStep, + G4double& currentSafety, + G4GPILSelection* selection) +{ + // get Step limit proposed by the process + G4double steplength = GetContinuousStepLimit(track,previousStepSize, + currentMinimumStep,currentSafety); + // set return value for G4GPILSelection + *selection = valueGPILSelectionMSC; + return steplength; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +inline G4double LEMuSRMSC::GetMeanFreePath( + const G4Track&, + G4double, + G4ForceCondition* condition) + + // it does not limit the Step size , but it sets condition to + // Forced , because the PostStepDoIt always has to be called + +{ + *condition = Forced; + return DBL_MAX; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +inline +G4double LEMuSRMSC::GetTransportMeanFreePath(G4double KineticEnergy, + const G4MaterialCutsCouple* couple) +{ + G4bool isOut; + + return (*theTransportMeanFreePathTable) + (couple->GetIndex())->GetValue(KineticEnergy,isOut); +} + + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/geant4/LEMuSR/include/LEMuSRMUONIUM.hh b/geant4/LEMuSR/include/LEMuSRMUONIUM.hh new file mode 100644 index 0000000..01c96ef --- /dev/null +++ b/geant4/LEMuSR/include/LEMuSRMUONIUM.hh @@ -0,0 +1,81 @@ + +#ifndef LEMuSRMUONIUM_h +#define LEMuSRMUONIUM_h 1 +#include "G4VDiscreteProcess.hh" +#include "G4EnergyLossTables.hh" +#include "G4GPILSelection.hh" +#include "G4PhysicsLogVector.hh" +#include "G4VPhysicalVolume.hh" +#include "G4VParticleChange.hh" +#include "G4UnitsTable.hh" +#include "G4MaterialCutsCouple.hh" +#include "G4ForceCondition.hh" + +#include "G4ParticleTable.hh" +#include "G4DynamicParticle.hh" +#include "LEMuSRPrimaryGeneratorAction.hh" + +#include "yields.h" +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +class LEMuSRMUONIUM : public G4VDiscreteProcess + +{ + public: // with description + LEMuSRMUONIUM(const G4String& name="Muformation" , + G4ProcessType aType = fElectromagnetic ); + + + ~LEMuSRMUONIUM(); + + G4VParticleChange* PostStepDoIt( + const G4Track& , + const G4Step& + ); + G4double GetMeanFreePath(const G4Track& aTrack, + G4double previousStepSize, + G4ForceCondition* condition + ); + + + + G4bool CheckCondition( const G4Step& aStep); + G4bool CheckCondition( const G4Step* aStep); + + + G4String p_name, vname; + G4double spin, edep, toten, kinen, tof, globaltime, proptime; + G4ThreeVector hitpos, hitmom; + G4int ID; + + G4bool condition; + + void GetDatas( const G4Step* aStep); + // model parameters + G4ParticleTable* particleTable; + G4ParticleDefinition* particle; + Yields Gonin; + G4double yvector[3]; + G4double rnd; + G4DynamicParticle *DP; + + G4VParticleChange fParticleChange; + + + + + + void PrepareSecondary(const G4Track&); + G4Track* aSecondary; + + void InitializeSecondaries(const G4Track&); + + + +}; + + +#endif + + + diff --git a/geant4/LEMuSR/include/LEMuSRMUONIUMScatt.hh b/geant4/LEMuSR/include/LEMuSRMUONIUMScatt.hh new file mode 100644 index 0000000..12b6e5f --- /dev/null +++ b/geant4/LEMuSR/include/LEMuSRMUONIUMScatt.hh @@ -0,0 +1,80 @@ + +#ifndef LEMuSRMUONIUMScatt_h +#define LEMuSRMUONIUMScatt_h 1 +#include "G4VDiscreteProcess.hh" +#include "G4EnergyLossTables.hh" +#include "G4GPILSelection.hh" +#include "G4PhysicsLogVector.hh" +#include "G4VPhysicalVolume.hh" +#include "G4VParticleChange.hh" +#include "G4ParticleChange.hh" +#include "G4UnitsTable.hh" +#include "G4MaterialCutsCouple.hh" +#include "G4ForceCondition.hh" + +#include "G4ParticleTable.hh" +#include "G4DynamicParticle.hh" +#include "LEMuSRPrimaryGeneratorAction.hh" + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +class LEMuSRMUONIUMScatt : public G4VDiscreteProcess + +{ + public: // with description + LEMuSRMUONIUMScatt(const G4String& name="Muscatt" , + G4ProcessType aType = fGeneral ); + + + ~LEMuSRMUONIUMScatt(); + + G4VParticleChange* PostStepDoIt( + const G4Track& , + const G4Step& + ); + G4double GetMeanFreePath(const G4Track& aTrack, + G4double previousStepSize, + G4ForceCondition* condition + ); + + + + G4bool CheckCondition( const G4Step& aStep); + G4bool CheckCondition( const G4Step* aStep); + + + G4String p_name, vname; + G4double spin, edep, toten, kinen, tof, globaltime, proptime; + G4ThreeVector hitpos, hitmom; + G4int ID; + + G4bool condition; + + void GetDatas( const G4Step* aStep); + // model parameters + G4ParticleTable* particleTable; + G4ParticleDefinition* particle; + G4double yvector[3]; + G4double rnd; + G4DynamicParticle *DP; + + G4ParticleChange fParticleChange; + + + + + + void PrepareSecondary(const G4Track&); + G4Track* aSecondary; + + void InitializeSecondaries(const G4Track&); + + + +}; + + +#endif + + + diff --git a/geant4/LEMuSR/include/LEMuSRMag_SpinEqRhs.hh b/geant4/LEMuSR/include/LEMuSRMag_SpinEqRhs.hh new file mode 100644 index 0000000..20dec9b --- /dev/null +++ b/geant4/LEMuSR/include/LEMuSRMag_SpinEqRhs.hh @@ -0,0 +1,77 @@ +// +// ******************************************************************** +// * DISCLAIMER * +// * * +// * The following disclaimer summarizes all the specific disclaimers * +// * of contributors to this software. The specific disclaimers,which * +// * govern, are listed with their locations in: * +// * http://cern.ch/geant4/license * +// * * +// * Neither the authors of this software system, nor their employing * +// * institutes,nor the agencies providing financial support for this * +// * work make any representation or warranty, express or implied, * +// * regarding this software system or assume any liability for its * +// * use. * +// * * +// * This code implementation is the intellectual property of the * +// * GEANT4 collaboration. * +// * By copying, distributing or modifying the Program (or any work * +// * based on the Program) you indicate your acceptance of this * +// * statement, and all its terms. * +// ******************************************************************** +// +// +// $Id$ +// GEANT4 tag $Name$ +// +// +// class G4Mag_SpinEqRhs +// +// Class description: +// +// This is the equation of motion for a particle with spin in a pure +// magnetic field. The three components of the particle's spin are +// treated utilising BMT equation. + +// History: +// - Created: J.Apostolakis, P.Gumplinger - February 8th, 1999. +// -------------------------------------------------------------------- + +#ifndef LEMuSRMAG_SPIN_EQRHS +#define LEMuSRMAG_SPIN_EQRHS + +#include "G4Types.hh" +#include "G4Mag_EqRhs.hh" + +class G4MagneticField; + +class LEMuSRMag_SpinEqRhs : public G4Mag_EqRhs +{ + public: // with description + + LEMuSRMag_SpinEqRhs( G4MagneticField* MagField ); + ~LEMuSRMag_SpinEqRhs(); + // Constructor and destructor. No actions. + + void SetChargeMomentumMass(G4double particleCharge, // in e+ units + G4double MomentumXc, + G4double mass); + + void EvaluateRhsGivenB( const G4double y[], + const G4double B[3], + G4double dydx[] ) const; + // Given the value of the magnetic field B, this function + // calculates the value of the derivative dydx. + + private: + + G4double omegac; + G4double anomaly; + G4double ParticleCharge; + + G4double E; + G4double gamma; + G4double beta; +}; + +#endif /* LEMuSRMAG_SPIN_EQRHS */ diff --git a/geant4/LEMuSR/include/LEMuSRMagneticField.hh b/geant4/LEMuSR/include/LEMuSRMagneticField.hh new file mode 100644 index 0000000..63c4697 --- /dev/null +++ b/geant4/LEMuSR/include/LEMuSRMagneticField.hh @@ -0,0 +1,28 @@ +#include "G4UniformMagField.hh" +#include"G4ThreeVector.hh" +#include"G4ios.hh" + +class LEMuSRMagneticField : public G4UniformMagField +{ +public: + + + LEMuSRMagneticField(const G4ThreeVector FieldVector); + ~LEMuSRMagneticField(); + + void GetFieldValue(const G4double pos[4], G4double *field) const; + + G4bool uniform; + + + G4double R; + + +private: + G4double flength, fpotential, fradius, fzmin, fzmax; + + + G4ThreeVector position; + G4ThreeVector BField; + +}; diff --git a/geant4/LEMuSR/include/LEMuSRMcpHit.hh b/geant4/LEMuSR/include/LEMuSRMcpHit.hh new file mode 100644 index 0000000..26c580a --- /dev/null +++ b/geant4/LEMuSR/include/LEMuSRMcpHit.hh @@ -0,0 +1,86 @@ +#ifndef LEMuSRMcpHit_h +#define LEMuSRMcpHit_h 1 + +#include "G4VHit.hh" +#include "G4THitsCollection.hh" +#include "G4Allocator.hh" +#include "G4ThreeVector.hh" +#include "G4LogicalVolume.hh" +#include "G4VPhysicalVolume.hh" + +class LEMuSRMcpHit : public G4VHit +{ +public: + // contructor and destructor + LEMuSRMcpHit(); + ~LEMuSRMcpHit(); + + void Draw(); + void Print(); + void print(G4String name); + + // operator for hit collector definition + LEMuSRMcpHit(const LEMuSRMcpHit &right); + const LEMuSRMcpHit& operator=(const LEMuSRMcpHit &right); + G4int operator==(const LEMuSRMcpHit &right) const; + + inline void *operator new(size_t); + inline void operator delete(void *aHit); + + // private variables + +private: + G4double energy_deposition, time_of_flight,spin; + G4ThreeVector position, momentum; + G4LogicalVolume* lv_Volume; + G4VPhysicalVolume* pv_Volume; + G4String particle_name; + + // inline functions +public: + inline void SetEnergyDeposition(G4double ed){energy_deposition = ed;} + inline void AddEnergyDeposition(G4double ed){energy_deposition += ed;} + inline G4double GetEnergyDeposition(){return energy_deposition;} + + inline void SetTimeOfFlight(G4double tf){ time_of_flight=tf;} + inline void AddTimeOfFlight(G4double tf){ time_of_flight+=tf;} + inline G4double GetTimeOfFlight(){return time_of_flight;} + + inline void SetSpin(G4double sp){ spin=sp;} + inline G4double GetSpin(){return spin;} + + inline void SetPosition(G4ThreeVector pos){position =pos;} + inline G4ThreeVector GetPosition(){return position;} + + inline void SetMomentum(G4ThreeVector mom){momentum =mom;} + inline G4ThreeVector GetMomentum(){return momentum;} + + inline void SetParticleName(G4String name){particle_name=name;} + inline G4String GetParticleName(){return particle_name;} + + + inline G4LogicalVolume* GetLogicalVolume(){return lv_Volume;} + inline G4VPhysicalVolume* GetPhysicalVolume(){return pv_Volume;} + +}; + +// define the collection class according to template G4THitsCollection + +typedef G4THitsCollection LEMuSRMcpHitsCollection; + +extern G4Allocator LEMuSRMcpHitAllocator; + +inline void* LEMuSRMcpHit :: operator new(size_t) +{ + void *aHit; + aHit = (void*) LEMuSRMcpHitAllocator.MallocSingle(); + return aHit; +} + +inline void LEMuSRMcpHit :: operator delete(void *aHit) +{ + LEMuSRMcpHitAllocator.FreeSingle((LEMuSRMcpHit*) aHit); +} + + +#endif diff --git a/geant4/LEMuSR/include/LEMuSRMcpSD.hh b/geant4/LEMuSR/include/LEMuSRMcpSD.hh new file mode 100644 index 0000000..5a0c694 --- /dev/null +++ b/geant4/LEMuSR/include/LEMuSRMcpSD.hh @@ -0,0 +1,90 @@ +#ifndef LEMuSRMcpSD_h +#define LEMuSRMcpSD_h 1 + + + + + +#include "G4VSensitiveDetector.hh" + +#include "LEMuSRMcpHit.hh" +#include "G4RunManager.hh" +#include "G4Run.hh" + + +// root histogram classes +#include + +#include "TROOT.h" +#include "TFile.h" +#include "TH1.h" +#include "TRandom.h" +#include "TTree.h" +#include "TBranch.h" +#include "TClonesArray.h" +#include "TStopwatch.h" +#include "LEMuSRCryoHit.hh" + + + +class G4Step; +class G4HCofThisEvent; +class G4TouchableHistory; + +class LEMuSRMcpSD : public G4VSensitiveDetector +{ +public: + + LEMuSRMcpSD(G4String name); + ~LEMuSRMcpSD(); + + void Initialize (G4HCofThisEvent* HCE); + G4bool ProcessHits(G4Step* aStep, G4TouchableHistory*ROhist); + void EndOfEvent (G4HCofThisEvent* HCE); + void clear(); + void DrawAll(); + void PrintAll(); + + void BookRoot(); + void FillRoot(); + void WriteRoot(); + + TFile *myFile; + TTree *myTree; + TTree *tree; + + // HIT datas + + G4String p_name, vname; + G4double spin, edep, toten, kinen, tof, globaltime, proptime; + G4ThreeVector hitpos, hitmom; + G4int ID; + + G4bool condition; + + G4bool CheckCondition(const G4Step* aStep); + + void GetDatas(const G4Step* aStep); + + +typedef struct +{ + Float_t kenergy, tenergy, edeposit; + Float_t localtime, globaltime, proptime; + Float_t positionx, positiony,positionz; + Float_t momdirx,momdiry,momdirz, foil; + Int_t muon,positron,gamma, runid; +} mcpHit ; + + mcpHit theHit; + void getHit(); + +private: + LEMuSRMcpHitsCollection *McpCollection; + + G4double positionResolution; + G4int mu,e,g; + +}; + +#endif diff --git a/geant4/LEMuSR/include/LEMuSRMuonDecayChannel.hh b/geant4/LEMuSR/include/LEMuSRMuonDecayChannel.hh new file mode 100644 index 0000000..3568c77 --- /dev/null +++ b/geant4/LEMuSR/include/LEMuSRMuonDecayChannel.hh @@ -0,0 +1,82 @@ +//§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§//* +// LOW ENERGY MUON SPIN RELAXATION, ROTATION, RADIATION Geant4 SIMULATION +// ID : LEMuSRMuonDecayChannel.hh , v 1.0 +// AUTHOR: Taofiq PARAISO based on G4MuonDecayChannel $Id$ +// DATE : 2004-07-13 11:15 +// +//§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§// +// +// & &&&&&&&&&& &&&&&&& &&&&&&&& +// & & && && & && +// & & & & & & && +// & &&&&&&& & & &&&&&& &&&&&&&& +// & & & && & & && +// & & && & & && && & & +// &&&&&&&&&& &&&&&&&&&& & &&&&& && &&&&&&& & && +// & +// & +// & +// & +// MUON DECAY CHANNEL.HH +//§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§//// + + + +#ifndef LEMuSRMuonDecayChannel_h +#define LEMuSRMuonDecayChannel_h 1 + + +#include "G4ios.hh" +#include "globals.hh" +#include "G4VDecayChannel.hh" +#include "G4DynamicParticle.hh" +#include "Randomize.hh" +#include "G4ThreeVector.hh" +#include "G4Transform3D.hh" + +class LEMuSRMuonDecayChannel : public G4VDecayChannel +{ + + // Class Decription + // + // To do list:: + // Find muon polarization + // Compute the positron angle distribution + // Compute the positron energy as a function of angle distribution + // Remove G4MuonDecayChannel in decay table and add this new one + +public: + //Constructors + LEMuSRMuonDecayChannel(const G4String& theParentName, + G4double theBR); + // Destructor + ~LEMuSRMuonDecayChannel(); + + static LEMuSRMuonDecayChannel* pointer; + static LEMuSRMuonDecayChannel* GetInstance(); + + +void finalize(); + +public: // With Description + virtual G4DecayProducts *DecayIt(G4double); + HepRandomEngine* theEngine; + G4ThreeVector emomdir; + + G4double alpha,sinalpha, cosalpha, delta, sindelta, cosdelta; + G4double costheta, sintheta, phi, sinphi, cosphi, theta; + + inline G4double GetTheta(){return theta;}; + inline G4double GetPhi(){return phi;}; + + + + G4DecayProducts *DecayItPolarized(G4double,G4ThreeVector polar); + + +private: + + +}; + +#endif diff --git a/geant4/LEMuSR/include/LEMuSRMuonPhysics.hh b/geant4/LEMuSR/include/LEMuSRMuonPhysics.hh new file mode 100644 index 0000000..db5bad5 --- /dev/null +++ b/geant4/LEMuSR/include/LEMuSRMuonPhysics.hh @@ -0,0 +1,96 @@ + +// History +// first version 12 Nov. 2000 by H.Kurashige +// ------------------------------------------------------------ + +#ifndef LEMuSRMuonPhysics_h +#define LEMuSRMuonPhysics_h 1 + +#include "globals.hh" +#include "G4ios.hh" + +#include "G4VPhysicsConstructor.hh" +#include "G4MultipleScattering.hh" +#include "G4MultipleScattering52.hh" +#include "LEMuSRMSC.hh" +#include "G4MuBremsstrahlung.hh" +#include "G4MuPairProduction.hh" +#include "G4MuIonisation.hh" +#include "G4hIonisation.hh" + +#include "G4MuonMinusCaptureAtRest.hh" + +#include "G4DecayWithSpin.hh" +#include "G4MuonDecayChannel.hh" +#include "G4MuonDecayChannelWithSpin.hh" + +#include "LEMuSRAtRestSpinRotation.hh" +#include "LEMuSRDecay.hh" + +#include "LEMuSRMUONIUM.hh" +#include "LEMuSRDepolarize.hh" +#include "LEMuSRMUONIUMScatt.hh" + + + +#include"G4VMuEnergyLoss.hh" + + +class LEMuSRMuonPhysics : public G4VPhysicsConstructor +{ + public: + LEMuSRMuonPhysics(const G4String& name="muon"); + virtual ~LEMuSRMuonPhysics(); + + public: + // This method will be invoked in the Construct() method. + // each particle type will be instantiated + virtual void ConstructParticle(); + + // This method will be invoked in the Construct() method. + // each physics process will be instantiated and + // registered to the process manager of each particle type + virtual void ConstructProcess(); + + protected: + // Muon physics + G4MuIonisation fMuPlusIonisation; + G4MultipleScattering fMuoniumMultipleScattering; + LEMuSRMSC fMuPlusMultipleScattering; + G4MuBremsstrahlung fMuPlusBremsstrahlung ; + G4MuPairProduction fMuPlusPairProduction; + LEMuSRMUONIUMScatt fMuoniumScatt; + LEMuSRMUONIUM fMuFormation; + LEMuSRDepolarize fDepolarization; + + + + G4MuIonisation fMuMinusIonisation; + G4MultipleScattering fMuMinusMultipleScattering; + G4MuBremsstrahlung fMuMinusBremsstrahlung ; + G4MuPairProduction fMuMinusPairProduction; + + G4MuonMinusCaptureAtRest fMuMinusCaptureAtRest; + + +#ifdef ASYM_USE_LEMU + LEMuSRDecay fDecayProcess; +#else + G4Decay fDecayProcess; + G4DecayWithSpin fSDecayProcess; +#endif + + LEMuSRAtRestSpinRotation fMuAtRestSpinRotation; + + // Tau physics + G4MultipleScattering fTauPlusMultipleScattering; + G4hIonisation fTauPlusIonisation; + + G4MultipleScattering fTauMinusMultipleScattering; + G4hIonisation fTauMinusIonisation; + +}; + + +#endif + diff --git a/geant4/LEMuSR/include/LEMuSROScintHit.hh b/geant4/LEMuSR/include/LEMuSROScintHit.hh new file mode 100644 index 0000000..1c78246 --- /dev/null +++ b/geant4/LEMuSR/include/LEMuSROScintHit.hh @@ -0,0 +1,85 @@ +#ifndef LEMuSROScintHit_h +#define LEMuSROScintHit_h 1 + +#include "G4VHit.hh" +#include "G4THitsCollection.hh" +#include "G4Allocator.hh" +#include "G4ThreeVector.hh" +#include "G4LogicalVolume.hh" +#include "G4VPhysicalVolume.hh" + +class LEMuSROScintHit : public G4VHit +{ +public: + // contructor and destructor + LEMuSROScintHit(); + ~LEMuSROScintHit(); + + void Draw(); + void Print(); + void print(G4String name); + + // operator for hit collector definition + LEMuSROScintHit(const LEMuSROScintHit &right); + const LEMuSROScintHit& operator=(const LEMuSROScintHit &right); + G4int operator==(const LEMuSROScintHit &right) const; + + inline void *operator new(size_t); + inline void operator delete(void *aHit); + + // private variables + +private: + G4double energy_deposition, time_of_flight,spin; + G4ThreeVector position, momentum; + G4LogicalVolume* lv_Volume; + G4VPhysicalVolume* pv_Volume; + G4String particle_name; + + // inline functions +public: + inline void SetEnergyDeposition(G4double ed){energy_deposition = ed;} + inline void AddEnergyDeposition(G4double ed){energy_deposition += ed;} + inline G4double GetEnergyDeposition(){return energy_deposition;} + + inline void SetTimeOfFlight(G4double tf){ time_of_flight=tf;} + inline void AddTimeOfFlight(G4double tf){ time_of_flight+=tf;} + inline G4double GetTimeOfFlight(){return time_of_flight;} + + inline void SetSpin(G4double sp){ spin=sp;} + inline G4double GetSpin(){return spin;} + + inline void SetPosition(G4ThreeVector pos){position =pos;} + inline G4ThreeVector GetPosition(){return position;} + + inline void SetMomentum(G4ThreeVector mom){momentum =mom;} + inline G4ThreeVector GetMomentum(){return momentum;} + + inline void SetParticleName(G4String name){particle_name=name;} + inline G4String GetParticleName(){return particle_name;} + + inline G4LogicalVolume* GetLogicalVolume(){return lv_Volume;} + inline G4VPhysicalVolume* GetPhysicalVolume(){return pv_Volume;} + +}; + +// define the collection class according to template G4THitsCollection + +typedef G4THitsCollection LEMuSROScintHitsCollection; + +extern G4Allocator LEMuSROScintHitAllocator; + +inline void* LEMuSROScintHit :: operator new(size_t) +{ + void *aHit; + aHit = (void*) LEMuSROScintHitAllocator.MallocSingle(); + return aHit; +} + +inline void LEMuSROScintHit :: operator delete(void *aHit) +{ + LEMuSROScintHitAllocator.FreeSingle((LEMuSROScintHit*) aHit); +} + + +#endif diff --git a/geant4/LEMuSR/include/LEMuSROScintSD.hh b/geant4/LEMuSR/include/LEMuSROScintSD.hh new file mode 100644 index 0000000..bd728d6 --- /dev/null +++ b/geant4/LEMuSR/include/LEMuSROScintSD.hh @@ -0,0 +1,86 @@ +#ifndef LEMuSROScintSD_h +#define LEMuSROScintSD_h 1 + + + +#include "G4VSensitiveDetector.hh" + +#include "LEMuSROScintHit.hh" + + +// root histogram classes +#include + +#include "TROOT.h" +#include "TFile.h" +#include "TH1.h" +#include "TRandom.h" +#include "TTree.h" +#include "TBranch.h" +#include "TClonesArray.h" +#include "TStopwatch.h" +#include "LEMuSRCryoHit.hh" + + + +class G4Step; +class G4HCofThisEvent; +class G4TouchableHistory; + +class LEMuSROScintSD : public G4VSensitiveDetector +{ +public: + + LEMuSROScintSD(G4String name); + ~LEMuSROScintSD(); + + void Initialize (G4HCofThisEvent* HCE); + G4bool ProcessHits(G4Step* aStep, G4TouchableHistory*ROhist); + void EndOfEvent (G4HCofThisEvent* HCE); + void clear(); + void DrawAll(); + void PrintAll(); + + void BookRoot(); + void FillRoot(); + void WriteRoot(); + + TFile *myFile; + TTree *myTree; + TTree *tree; + + // HIT datas + + G4String p_name, vname; + G4double spin, edep, toten, kinen, tof, globaltime, proptime; + G4ThreeVector hitpos, hitmom; + G4int ID; + + G4bool condition; + + G4bool CheckCondition(const G4Step* aStep); + + void GetDatas(const G4Step* aStep); + + +typedef struct +{ + Float_t kenergy, tenergy, edeposit; + Float_t localtime, globaltime, proptime; + Float_t positionx, positiony,positionz; + Float_t momdirx,momdiry,momdirz; + Float_t scLeft, scRight, scBottom, scTop ; + Int_t runID; +} scintHit ; + + scintHit theHit; + void getHit(); + +private: + LEMuSROScintHitsCollection *ScintCollection; + + G4double positionResolution; + +}; + +#endif diff --git a/geant4/LEMuSR/include/LEMuSRParticleChangeForSR.hh b/geant4/LEMuSR/include/LEMuSRParticleChangeForSR.hh new file mode 100644 index 0000000..786e058 --- /dev/null +++ b/geant4/LEMuSR/include/LEMuSRParticleChangeForSR.hh @@ -0,0 +1,25 @@ +#ifndef LEMuSRParticleChangeForSR_h +#define LEMuSRParticleChangeForSR_h 1 + +#include "G4ParticleChangeForTransport.hh" + + +class LEMuSRParticleChangeForSR : public G4ParticleChangeForTransport +{ + + G4Step* UpdateStepForAtRest(G4Step* Step); + +public: + G4double theDecayTime; + + + + + inline void SetDecayTime(G4double fDecayTime) { theDecayTime = fDecayTime; } + + inline G4double GetDecayTime() { return theDecayTime; } + +}; + + +#endif diff --git a/geant4/LEMuSR/include/LEMuSRParticleGun.hh b/geant4/LEMuSR/include/LEMuSRParticleGun.hh new file mode 100644 index 0000000..04974eb --- /dev/null +++ b/geant4/LEMuSR/include/LEMuSRParticleGun.hh @@ -0,0 +1,34 @@ +#ifndef LEMuSRParticleGun_h +#define LEMuSRParticleGun_h 1 + +#include "G4ParticleGun.hh" +#include "G4Event.hh" +#include "G4PrimaryParticle.hh" + +class LEMuSRParticleGunMessenger; +#include"G4ParticleGunMessenger.hh" + +class LEMuSRParticleGun: public G4ParticleGun +{ +public: + LEMuSRParticleGun(); + ~LEMuSRParticleGun(); + + + void GeneratePrimaryVertex(G4Event* evt); + + inline void SetDecayTime(G4double d) {decaytime = d;} + + G4double decaytime; + + +protected: + void SetInitialValues(); + + private: + LEMuSRParticleGunMessenger* theMessenger; + G4ParticleGunMessenger* Messenger; + +}; + +#endif diff --git a/geant4/LEMuSR/include/LEMuSRParticleGunMessenger.hh b/geant4/LEMuSR/include/LEMuSRParticleGunMessenger.hh new file mode 100644 index 0000000..a183c20 --- /dev/null +++ b/geant4/LEMuSR/include/LEMuSRParticleGunMessenger.hh @@ -0,0 +1,59 @@ +#ifndef LEMUSRPARTICLEGUNMESSENGER +#define LEMUSRPARTICLEGUNMESSENGER + +class LEMuSRParticleGun; +class G4ParticleTable; +class G4UIcommand; +class G4UIdirectory; +class G4UIcmdWithoutParameter; +class G4UIcmdWithAString; +class G4UIcmdWithADoubleAndUnit; +class G4UIcmdWith3Vector; +class G4UIcmdWith3VectorAndUnit; +class G4UIcmdWithAnInteger; + +#include "G4UImessenger.hh" +#include "globals.hh" + +class LEMuSRParticleGunMessenger : public G4UImessenger +{ +public: + LEMuSRParticleGunMessenger(LEMuSRParticleGun* gun); + ~LEMuSRParticleGunMessenger(); + + + public: + void SetNewValue(G4UIcommand * command,G4String newValues); + G4String GetCurrentValue(G4UIcommand * command); + + private: + void IonCommand(G4String newValues); + + private: + LEMuSRParticleGun* fParticleGun; + G4ParticleTable * particleTable; + + private: //commands + G4UIdirectory * gunDirectory; + G4UIcmdWithoutParameter * listCmd; + G4UIcmdWithAString * particleCmd; + G4UIcmdWith3Vector * directionCmd; + G4UIcmdWithADoubleAndUnit * energyCmd; + G4UIcmdWith3VectorAndUnit * positionCmd; + G4UIcmdWithADoubleAndUnit * timeCmd; + G4UIcmdWith3Vector * polCmd; + G4UIcmdWithAnInteger * numberCmd; + + G4UIcommand * ionCmd; + + private: // for ion shooting + G4bool fShootIon; + G4int fAtomicNumber; + G4int fAtomicMass; + G4int fIonCharge; + G4double fIonExciteEnergy; + + +}; + +#endif diff --git a/geant4/LEMuSR/include/LEMuSRPgaMessenger.hh b/geant4/LEMuSR/include/LEMuSRPgaMessenger.hh new file mode 100644 index 0000000..1cdf234 --- /dev/null +++ b/geant4/LEMuSR/include/LEMuSRPgaMessenger.hh @@ -0,0 +1,67 @@ +///§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§//* +// LOW ENERGY MUON SPIN RELAXATION, ROTATION, RADIATION +// +// ID : LEMuSRPgaMessenger.cc , v 1.2 +// AUTHOR: Taofiq PARAISO +// DATE : 2004-09-16 09:12 +//§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§// +// +// & &&&&&&&&&& &&&&&&& &&&&&&&& +// & & && && & && +// & & & & & & && +// & &&&&&&& & & &&&&&& &&&&&&&& +// & & & && & & && +// & & && & & && && & & +// &&&&&&&&&& &&&&&&&&&& & &&&&& && &&&&&&& & && +// & +// & +// & +// & +// PRIMARY GENERATOR ACTION MESSENGER +//§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§// + + +#ifndef LEMUSRPGAMESSENGER_H +#define LEMUSRPGAMESSENGER_H 1 + +class LEMuSRPrimaryGeneratorAction; +class G4UIdirectory; +class G4UIcmdWithoutParameter; +class G4UIcmdWithAString; +class G4UIcmdWithADoubleAndUnit; +class G4UIcmdWithADouble; +class G4UIcmdWith3Vector; +class G4UIcmdWith3VectorAndUnit; +class G4UIcmdWithAnInteger; + +#include "G4UImessenger.hh" +#include "globals.hh" + +class LEMuSRPgaMessenger: public G4UImessenger +{ + public: + LEMuSRPgaMessenger(LEMuSRPrimaryGeneratorAction* thPGA); + ~LEMuSRPgaMessenger(); + + public: + void SetNewValue(G4UIcommand * command,G4String newValues); + + private: + LEMuSRPrimaryGeneratorAction * lemuPGA; + + private: //commands + G4UIdirectory * pgaDirectory; + G4UIcmdWithAString *setRndEnergy; + G4UIcmdWithAString *setMuonium; + G4UIcmdWithoutParameter *reset; + G4UIcmdWith3Vector *posCmd, *momCmd, *scaCmd, *scbCmd, *scgCmd, *setEGauss; + G4UIcmdWithADouble *setEnergy; + G4UIcmdWithADouble *setKEoffset; + G4UIcmdWithADouble *setCharge; + + + + +}; + +#endif diff --git a/geant4/LEMuSR/include/LEMuSRPhysicsList.hh b/geant4/LEMuSR/include/LEMuSRPhysicsList.hh new file mode 100644 index 0000000..10cce94 --- /dev/null +++ b/geant4/LEMuSR/include/LEMuSRPhysicsList.hh @@ -0,0 +1,25 @@ +#ifndef LEMuSRPhysicsList_h +#define LEMuSRPhysicsList_h 1 + +#include "G4VModularPhysicsList.hh" +#include "globals.hh" + +class LEMuSRPhysicsList: public G4VModularPhysicsList +{ +public: + LEMuSRPhysicsList(); + virtual ~LEMuSRPhysicsList(); + +public: + // SetCuts() + virtual void SetCuts(); + + +}; + + +#endif + + + + diff --git a/geant4/LEMuSR/include/LEMuSRPrimaryGeneratorAction.hh b/geant4/LEMuSR/include/LEMuSRPrimaryGeneratorAction.hh new file mode 100644 index 0000000..38cc303 --- /dev/null +++ b/geant4/LEMuSR/include/LEMuSRPrimaryGeneratorAction.hh @@ -0,0 +1,99 @@ +///§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§//* +// LOW ENERGY MUON SPIN RELAXATION, ROTATION, RADIATION +// +// ID : LEMuSRPrimaryGeneratorAction.hh , v 1.3 +// AUTHOR: Taofiq PARAISO +// DATE : 2004-09-16 09:12 +//§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§// +// +// & &&&&&&&&&& &&&&&&& &&&&&&&& +// & & && && & && +// & & & & & & && +// & &&&&&&& & & &&&&&& &&&&&&&& +// & & & && & & && +// & & && & & && && & & +// &&&&&&&&&& &&&&&&&&&& & &&&&& && &&&&&&& & && +// & +// & +// & +// & +// PRIMARY GENERATOR ACTION +//§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§// + + + + +#ifndef LEMuSRPrimaryGeneratorAction_h +#define LEMuSRPrimaryGeneratorAction_h 1 + +// G4 LIBRARIES +#include "G4VUserPrimaryGeneratorAction.hh" +#include "globals.hh" +#include "G4ThreeVector.hh" +#include "LEMuSRParticleGun.hh" +#include "G4Event.hh" +#include "Randomize.hh" +#include "G4ParticleGun.hh" +#include "LEMuSRPgaMessenger.hh" + + + +#include +#include +#include +#include +#include +#include +#include + +// G4 CLASSES +//class G4RandGauss; +class G4ParticleGun; +class LEMuSRParticleGun; +class G4Event; + + +// LEMuSRPrimaryGeneratorAction CLASS DEFINITION +class LEMuSRPrimaryGeneratorAction : public G4VUserPrimaryGeneratorAction +{ + // Constructor & Destructor + public: + LEMuSRPrimaryGeneratorAction(); + ~LEMuSRPrimaryGeneratorAction(); + + + +static LEMuSRPrimaryGeneratorAction* thePGA; + static LEMuSRPrimaryGeneratorAction* GetPGA(); + // Event generation method + void GeneratePrimaries(G4Event* anEvent); + void GetScanningMode(G4int scan_mode); + +private: + LEMuSRParticleGun* lemuParticleGun; +public: + double rndenergy; + G4double decaytime, energy; + HepRandomEngine * theEngine; + + G4double X, Y, Z,momX, momY, momZ, m_xrange, m_yrange; + G4int m_counterx, m_nbxsteps, m_countery, m_nbysteps, scan, gauss; + G4double radius, angle, mean, stddev, sc_mean, sc_stddev; + G4double circ; + G4bool rnd; + LEMuSRPgaMessenger* messenger; + + G4double charge, ke_offset; + + G4String pname; + + //=============================== + std::ofstream Yprint; + double table[1000]; + int i,j; +}; + +#endif + + + diff --git a/geant4/LEMuSR/include/LEMuSRRNDMAGField.hh b/geant4/LEMuSR/include/LEMuSRRNDMAGField.hh new file mode 100644 index 0000000..9c42c4c --- /dev/null +++ b/geant4/LEMuSR/include/LEMuSRRNDMAGField.hh @@ -0,0 +1,30 @@ +#include "G4UniformMagField.hh" +#include"G4ThreeVector.hh" +#include"G4ios.hh" + +class LEMuSRRNDMAGField : public G4UniformMagField +{ +public: + + + LEMuSRRNDMAGField(const G4ThreeVector FieldVector, G4double randomness); + ~LEMuSRRNDMAGField(); + + void GetFieldValue(const G4double pos[4], G4double *field) const; + + G4bool uniform; + + + G4double R; + + G4double randomness; + + +private: + G4double flength, fpotential, fradius, fzmin, fzmax; + + + G4ThreeVector position; + G4ThreeVector BField; + +}; diff --git a/geant4/LEMuSR/include/LEMuSRRunAction.hh b/geant4/LEMuSR/include/LEMuSRRunAction.hh new file mode 100644 index 0000000..eedc70f --- /dev/null +++ b/geant4/LEMuSR/include/LEMuSRRunAction.hh @@ -0,0 +1,61 @@ +//§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§//* +// LOW ENERGY MUON SPIN RELAXATION, ROTATION, RADIATION Geant4 SIMULATION +// ID : LEMuSRRunAction.hh , v 1.0 +// AUTHOR: Taofiq PARAISO +// DATE : 2004-07-07 11:15 +// +//§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§// +// +// & &&&&&&&&&& &&&&&&& &&&&&&&& +// & & && && & && +// & & & & & & && +// & &&&&&&& & & &&&&&& &&&&&&&& +// & & & && & & && +// & & && & & && && & & +// &&&&&&&&&& &&&&&&&&&& & &&&&& && &&&&&&& & && +// & +// & +// & +// & +// RUN ACTION.HH +//§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§// + + + +#ifndef LEMuSRRunAction_h +#define LEMuSRRunAction_h 1 + +#include "G4UserRunAction.hh" +#include "globals.hh" +#include "G4ParticleGun.hh" + + +// root histogram classes +#include + +#include "TROOT.h" +#include "TFile.h" +#include "TH1.h" +#include "TRandom.h" +#include "TTree.h" +#include "TBranch.h" + + + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +class G4Run; + +class LEMuSRRunAction : public G4UserRunAction +{ + public: + LEMuSRRunAction(); + ~LEMuSRRunAction(); + + public: + void BeginOfRunAction(const G4Run*); + void EndOfRunAction(const G4Run*); + +}; + +#endif diff --git a/geant4/LEMuSR/include/LEMuSRScintHit.hh b/geant4/LEMuSR/include/LEMuSRScintHit.hh new file mode 100644 index 0000000..428f205 --- /dev/null +++ b/geant4/LEMuSR/include/LEMuSRScintHit.hh @@ -0,0 +1,85 @@ +#ifndef LEMuSRScintHit_h +#define LEMuSRScintHit_h 1 + +#include "G4VHit.hh" +#include "G4THitsCollection.hh" +#include "G4Allocator.hh" +#include "G4ThreeVector.hh" +#include "G4LogicalVolume.hh" +#include "G4VPhysicalVolume.hh" + +class LEMuSRScintHit : public G4VHit +{ +public: + // contructor and destructor + LEMuSRScintHit(); + ~LEMuSRScintHit(); + + void Draw(); + void Print(); + void print(G4String name); + + // operator for hit collector definition + LEMuSRScintHit(const LEMuSRScintHit &right); + const LEMuSRScintHit& operator=(const LEMuSRScintHit &right); + G4int operator==(const LEMuSRScintHit &right) const; + + inline void *operator new(size_t); + inline void operator delete(void *aHit); + + // private variables + +private: + G4double energy_deposition, time_of_flight, spin, kenergy, tenergy; + G4ThreeVector position, momentum; + G4LogicalVolume* lv_Volume; + G4VPhysicalVolume* pv_Volume; + G4String particle_name; + + // inline functions +public: + inline void SetEnergyDeposition(G4double ed){energy_deposition = ed;} + inline void AddEnergyDeposition(G4double ed){energy_deposition += ed;} + inline G4double GetEnergyDeposition(){return energy_deposition;} + + inline void SetTimeOfFlight(G4double tf){ time_of_flight=tf;} + inline void AddTimeOfFlight(G4double tf){ time_of_flight+=tf;} + inline G4double GetTimeOfFlight(){return time_of_flight;} + + inline void SetSpin(G4double sp){ spin=sp;} + inline G4double GetSpin(){return spin;} + + inline void SetPosition(G4ThreeVector pos){position=pos;} + inline G4ThreeVector GetPosition(){return position;} + + inline void SetMomentum(G4ThreeVector mom){momentum=mom;} + inline G4ThreeVector GetMomentum(){return momentum;} + + inline void SetParticleName(G4String name){particle_name=name;} + inline G4String GetParticleName(){return particle_name;} + + inline G4LogicalVolume* GetLogicalVolume(){return lv_Volume;} + inline G4VPhysicalVolume* GetPhysicalVolume(){return pv_Volume;} + +}; + +// define the collection class according to template G4THitsCollection + +typedef G4THitsCollection LEMuSRScintHitsCollection; + +extern G4Allocator LEMuSRScintHitAllocator; + +inline void* LEMuSRScintHit :: operator new(size_t) +{ + void *aHit; + aHit = (void*) LEMuSRScintHitAllocator.MallocSingle(); + return aHit; +} + +inline void LEMuSRScintHit :: operator delete(void *aHit) +{ + LEMuSRScintHitAllocator.FreeSingle((LEMuSRScintHit*) aHit); +} + + +#endif diff --git a/geant4/LEMuSR/include/LEMuSRScintSD.hh b/geant4/LEMuSR/include/LEMuSRScintSD.hh new file mode 100644 index 0000000..6bda6f2 --- /dev/null +++ b/geant4/LEMuSR/include/LEMuSRScintSD.hh @@ -0,0 +1,89 @@ +#ifndef LEMuSRScintSD_h +#define LEMuSRScintSD_h 1 + + + +#include "G4VSensitiveDetector.hh" + +#include "LEMuSRScintHit.hh" + +// root histogram classes +#include + +#include "TROOT.h" +#include "TFile.h" +#include "TH1.h" +#include "TRandom.h" +#include "TTree.h" +#include "TBranch.h" +#include "TClonesArray.h" +#include "TStopwatch.h" +#include "LEMuSRCryoHit.hh" +#include "G4PrimaryParticle.hh" +#include "G4RunManager.hh" +#include "G4Run.hh" + +class G4Step; +class G4HCofThisEvent; +class G4TouchableHistory; + +class LEMuSRScintSD : public G4VSensitiveDetector +{ +public: + + LEMuSRScintSD(G4String name); + ~LEMuSRScintSD(); + + void Initialize (G4HCofThisEvent* HCE); + G4bool ProcessHits(G4Step* aStep, G4TouchableHistory*ROhist); + void EndOfEvent (G4HCofThisEvent* HCE); + void clear(); + void DrawAll(); + void PrintAll(); + + void BookRoot(); + void FillRoot(); + void WriteRoot(); + + TFile *myFile; + TTree *myTree; + TTree *tree; + + // HIT datas + + G4String p_name, vname; + G4double spin, edep, toten, kinen, tof, globaltime, proptime; + G4ThreeVector hitpos, hitmom,hitvertex; + G4int scintID, runID; + G4double parentCharge; + + G4bool condition; + + G4bool CheckCondition(const G4Step* aStep); + + void GetDatas(const G4Step* aStep); + + +typedef struct +{ + Float_t kenergy, tenergy, edeposit; + Float_t localtime, globaltime, proptime; + Float_t positionx, positiony,positionz; + Float_t momdirx,momdiry,momdirz; + Float_t ipositionx, ipositiony,ipositionz; + Float_t scLeft, scRight, scBottom, scTop ; + Int_t runID; + Float_t motherCharge; +} scintHit ; + + scintHit theHit; + void getHit(); + +private: + LEMuSRScintHitsCollection *ScintCollection; + + G4double positionResolution; + +}; + +#endif diff --git a/geant4/LEMuSR/include/LEMuSRStackingAction.hh b/geant4/LEMuSR/include/LEMuSRStackingAction.hh new file mode 100644 index 0000000..7e666c0 --- /dev/null +++ b/geant4/LEMuSR/include/LEMuSRStackingAction.hh @@ -0,0 +1,75 @@ +//§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§//* +// LOW ENERGY MUON SPIN RELAXATION, ROTATION, RADIATION Geant4 SIMULATION +// ID : LEMuSRStackingAction.hh , v 1.0 +// AUTHOR: Taofiq PARAISO +// DATE : 2004-07-07 11:15 +// +//§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§// +// +// & &&&&&&&&&& &&&&&&& &&&&&&&& +// & & && && & && +// & & & & & & && +// & &&&&&&& & & &&&&&& &&&&&&&& +// & & & && & & && +// & & && & & && && & & +// &&&&&&&&&& &&&&&&&&&& & &&&&& && &&&&&&& & && +// & +// & +// & +// & +// STACKING ACTION.HH +//§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§// + +#ifndef LEMuSRStackingAction_H +#define LEMuSRStackingAction_H 1 + +#include "globals.hh" +#include "G4UserStackingAction.hh" +#include "G4ThreeVector.hh" + +class G4Track; + +#include "LEMuSRScintHit.hh" +class LEMuSRStackingActionMessenger; + +class LEMuSRStackingAction : public G4UserStackingAction +{ +public: + LEMuSRStackingAction(); + virtual ~LEMuSRStackingAction(); + +public: + virtual G4ClassificationOfNewTrack ClassifyNewTrack(const G4Track* aTrack); + virtual void NewStage(); + virtual void PrepareNewEvent(); + +private: + // G4bool InsideRoI(const G4Track * aTrack,G4double ang); + G4VHitsCollection* GetCollection(G4String colName); + + LEMuSRScintHitsCollection* ScintHits; + LEMuSRStackingActionMessenger* theMessenger; + + G4int stage; + + /* G4int reqMuon; + G4int reqIsoMuon; + G4int reqIso; + G4double angRoI; + */ + + +public: + /* inline void SetNRequestMuon(G4int val) { reqMuon = val; } + inline G4int GetNRequestMuon() const { return reqMuon; } + inline void SetNRequestIsoMuon(G4int val) { reqIsoMuon = val; } + inline G4int GetNRequestIsoMuon() const { return reqIsoMuon; } + inline void SetNIsolation(G4int val) { reqIso = val; } + inline G4int GetNIsolation() const { return reqIso; } + inline void SetRoIAngle(G4double val) { angRoI = val; } + inline G4double GetRoIAngle() const { return angRoI; } + */ +}; + +#endif + diff --git a/geant4/LEMuSR/include/LEMuSRStackingActionMessenger.hh b/geant4/LEMuSR/include/LEMuSRStackingActionMessenger.hh new file mode 100644 index 0000000..ab10f93 --- /dev/null +++ b/geant4/LEMuSR/include/LEMuSRStackingActionMessenger.hh @@ -0,0 +1,35 @@ + +#ifndef LEMuSRStackingActionMessenger_h +#define LEMuSRStackingActionMessenger_h 1 + +class LEMuSRStackingAction; +class G4UIcmdWithAnInteger; +class G4UIcmdWithADoubleAndUnit; + +#include "G4UImessenger.hh" +#include "globals.hh" + +class LEMuSRStackingActionMessenger: public G4UImessenger +{ + public: + LEMuSRStackingActionMessenger(LEMuSRStackingAction* msa); + ~LEMuSRStackingActionMessenger(); + + public: + void SetNewValue(G4UIcommand * command,G4String newValues); + G4String GetCurrentValue(G4UIcommand * command); + + private: + LEMuSRStackingAction * myAction; + + private: //commands + /* G4UIcmdWithAnInteger * muonCmd; + G4UIcmdWithAnInteger * isomuonCmd; + G4UIcmdWithAnInteger * isoCmd; + G4UIcmdWithADoubleAndUnit * roiCmd; + */ + +}; + +#endif + diff --git a/geant4/LEMuSR/include/LEMuSRSteppingAction.hh b/geant4/LEMuSR/include/LEMuSRSteppingAction.hh new file mode 100644 index 0000000..c2497db --- /dev/null +++ b/geant4/LEMuSR/include/LEMuSRSteppingAction.hh @@ -0,0 +1,59 @@ +//§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§//* +// LOW ENERGY MUON SPIN RELAXATION, ROTATION, RADIATION Geant4 SIMULATION +// ID : LEMuSRSteppingAction.hh , v 1.0 +// AUTHOR: Taofiq PARAISO +// DATE : 2004-07-07 11:15 +// +//§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§// +// +// & &&&&&&&&&& &&&&&&& &&&&&&&& +// & & && && & && +// & & & & & & && +// & &&&&&&& & & &&&&&& &&&&&&&& +// & & & && & & && +// & & && & & && && & & +// &&&&&&&&&& &&&&&&&&&& & &&&&& && &&&&&&& & && +// & +// & +// & +// & +// STEPPING ACTION.HH +//§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§// + + + + +#ifndef LEMuSRSteppingAction_h +#define LEMuSRSteppingAction_h 1 + +#include "G4UserSteppingAction.hh" +#include "globals.hh" +#include +#include "LEMuSRVisManager.hh" +#include "LEMuSRDetectorConstruction.hh" + + +class LEMuSRSteppingAction : public G4UserSteppingAction +{ +public: + + static LEMuSRSteppingAction* GetInstance(); + + LEMuSRSteppingAction() ; + ~LEMuSRSteppingAction() ; + + + void UserSteppingAction(const G4Step *theStep); + void FieldInfo(const G4Step *theStep); + void ParticleInfo(const G4Step *theStep); + void LoopKiller(const G4Step *theStep); + +private: + + static LEMuSRSteppingAction* pointer; + G4int loop; + + +}; + +#endif diff --git a/geant4/LEMuSR/include/LEMuSRTrack.hh b/geant4/LEMuSR/include/LEMuSRTrack.hh new file mode 100644 index 0000000..b2de162 --- /dev/null +++ b/geant4/LEMuSR/include/LEMuSRTrack.hh @@ -0,0 +1,11 @@ +#include "G4Track.hh" +#include "G4DynamicParticle.hh" + +class LEMuSRTrack : public G4Track +{ + +public: + void SetDynamicParticle(G4DynamicParticle ); + + +}; diff --git a/geant4/LEMuSR/include/LEMuSRTrackingAction.hh b/geant4/LEMuSR/include/LEMuSRTrackingAction.hh new file mode 100644 index 0000000..acddc1f --- /dev/null +++ b/geant4/LEMuSR/include/LEMuSRTrackingAction.hh @@ -0,0 +1,48 @@ +#ifndef LEMuSRTrackingAction_h +#define LEMuSRTrackingAction_h 1 +#include "G4DynamicParticle.hh" +#include "G4UserTrackingAction.hh" +#include "G4Track.hh" +#include "globals.hh" + +// root histogram classes +#include + +#include "TROOT.h" +#include "TFile.h" +#include "TH1.h" +#include "TRandom.h" +#include "TTree.h" +#include "TBranch.h" +#include "TClonesArray.h" +#include "TStopwatch.h" +#include "LEMuSRCryoHit.hh" + + + +class LEMuSRTrackingAction : public G4UserTrackingAction { + + public: + LEMuSRTrackingAction(); + ~ LEMuSRTrackingAction(); + void PreUserTrackingAction(const G4Track*); + void PostUserTrackingAction(const G4Track*); + + void Collect_datas(const G4Track*); + + + // TROOT eventTree; + Int_t nevent , comp , split , write , hfill , read ,arg4, arg5 ; + TFile *myFile; + TTree *myTree; + TBranch *b; + TH1D *hEnergy, *hTime, *hAngle, *hAngle2; + +private: + + + +}; +#endif + + diff --git a/geant4/LEMuSR/include/LEMuSRVisManager.hh b/geant4/LEMuSR/include/LEMuSRVisManager.hh new file mode 100644 index 0000000..f827c5e --- /dev/null +++ b/geant4/LEMuSR/include/LEMuSRVisManager.hh @@ -0,0 +1,27 @@ + +#ifndef LEMuSRVisManager_h +#define LEMuSRVisManager_h 1 + +#ifdef G4VIS_USE + +#include "G4VisManager.hh" + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +class LEMuSRVisManager: public G4VisManager { + +public: + + LEMuSRVisManager (); + ~LEMuSRVisManager (); +private: + + void RegisterGraphicsSystems (); + +}; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +#endif + +#endif diff --git a/geant4/LEMuSR/include/PhysicsList.hh b/geant4/LEMuSR/include/PhysicsList.hh new file mode 100644 index 0000000..0759f5e --- /dev/null +++ b/geant4/LEMuSR/include/PhysicsList.hh @@ -0,0 +1,49 @@ + +#ifndef PhysicsList_h +#define PhysicsList_h 1 + +#include "globals.hh" +#include "G4VUserPhysicsList.hh" + +#include "G4MuonPlus.hh" +#include "G4MuonMinus.hh" +#include "G4NeutrinoMu.hh" +#include "G4AntiNeutrinoMu.hh" + +#include "G4MultipleScattering.hh" +#include "G4MuBremsstrahlung.hh" +#include "G4MuPairProduction.hh" +#include "G4MuIonisation.hh" + +#include "G4DecayWithSpin.hh" + +class PhysicsList: public G4VUserPhysicsList +{ +public: + PhysicsList(); + ~PhysicsList(); + +protected: + // Construct particle and physics process + void ConstructParticle(); + void ConstructProcess(); + + void SetCuts(); + +private: + + G4DecayWithSpin* theDecayProcess; + + G4MuIonisation* theMuPlusIonisation; + G4MultipleScattering* theMuPlusMultipleScattering; + G4MuBremsstrahlung* theMuPlusBremsstrahlung ; + G4MuPairProduction* theMuPlusPairProduction; + + G4MuIonisation* theMuMinusIonisation; + G4MultipleScattering* theMuMinusMultipleScattering; + G4MuBremsstrahlung* theMuMinusBremsstrahlung ; + G4MuPairProduction* theMuMinusPairProduction; + +}; + +#endif diff --git a/geant4/LEMuSR/include/TDCheck.hh b/geant4/LEMuSR/include/TDCheck.hh new file mode 100644 index 0000000..f6d9cc4 --- /dev/null +++ b/geant4/LEMuSR/include/TDCheck.hh @@ -0,0 +1,128 @@ +///§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§//* +// LOW ENERGY MUON SPIN RELAXATION, ROTATION, RADIATION +// +// ID : TDCheck.hh , v 1.2 +// AUTHOR: Taofiq PARAISO +// DATE : 2005-03-01 10:11 +//§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§// +// +// & &&&&&&&&&& &&&&&&& &&&&&&&& +// & & && && & && +// & & & & & & && +// & &&&&&&& & & &&&&&& &&&&&&&& +// & & & && & & && +// & & && & & && && & & +// &&&&&&&&&& &&&&&&&&&& & &&&&& && &&&&&&& & && +// & +// & +// & +// & +// TDCHECK +//§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§// +#ifndef TDCheck_h +#define TDCheck_h 1 + +#include "G4UserSteppingAction.hh" +#include "globals.hh" +#include +#include "LEMuSRVisManager.hh" +#include "LEMuSRDetectorConstruction.hh" + + +#include "G4RunManager.hh" +#include "G4Run.hh" + + +// root histogram classes +#include + +#include "TROOT.h" +#include "TFile.h" +#include "TH1.h" +#include "TRandom.h" +#include "TTree.h" +#include "TBranch.h" +#include "TClonesArray.h" +#include "TStopwatch.h" + + + +class TDCheck : public G4UserSteppingAction +{ +public: + + static TDCheck* GetInstance(); + + TDCheck() ; + ~TDCheck() ; + + void UserSteppingAction(const G4Step *theStep); + + void SetParticleVolumeNames(const G4Step *theStep); + + void SetPositionMomentum(const G4Step *theStep); + + void SetTimeEnergy(const G4Step *theStep); + + G4bool CheckCondition(const G4Step* aStep); + + G4String p_name, v_name, pv_name, previousv_name, nextv_name; + + G4ThreeVector position,momentum,momentum_direction, polarization, m, parpol, p; + + G4double kenergy, tenergy, localtime, globaltime, proptime, fx, fy, fz, oldz, thk_old; + G4int id, old_id, index; + G4double theta,sintheta, costheta, phi, sinphi, cosphi; + + + void LoopKiller(const G4Step*aStep); + G4int loop; + + +typedef struct { + + Float_t ienergy,tenergy, localtime, globaltime, proptime; + + Float_t positionx, positiony,positionz,momdirx,momdiry,momdirz; + + Float_t angle; + Int_t index; + Float_t thickness; + Int_t id, charge; + + } LEMuSRparticle ; + + LEMuSRparticle muon; + + void Update(); + + void BookRoot(); + void FillRoot(); + void WriteRoot(); + + // TROOT eventTree; + Int_t nevent , comp , split , write , hfill , read ,arg4, arg5 ; + TFile *myFile; + TTree *myTree; + TBranch *b,*b2; + TH1D *hEnergy, *hTime, *hAngle, *hAngle2; + + TTree *tree; + + TFile* F; + TTree *dt; + + Float_t time; + + + G4double L,R,A; + + +private: + + static TDCheck* pointer; + + +}; + +#endif diff --git a/geant4/LEMuSR/include/meyer.h b/geant4/LEMuSR/include/meyer.h new file mode 100644 index 0000000..06295bc --- /dev/null +++ b/geant4/LEMuSR/include/meyer.h @@ -0,0 +1,27 @@ +#ifndef meyer_h +#define meyer_h 1 + +#include +#include +#include +#include +#include +#include +#include +#include "globals.hh" + +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); + void Get_F_Function(double tau,double theta, double Ekin, double Z1, double Z2, double m1, double m2, double* F); + +}; + +#endif diff --git a/geant4/LEMuSR/include/yields.h b/geant4/LEMuSR/include/yields.h new file mode 100644 index 0000000..2e2c0ff --- /dev/null +++ b/geant4/LEMuSR/include/yields.h @@ -0,0 +1,28 @@ +#ifndef Yields_h +#define Yield_h 1 + +#include "globals.hh" + +class Yields +{ + +public: + //constructor + Yields(); + //destructor + ~Yields(); + + void GetYields(double E, double masse, double yvector[]); + + +private: + // VARIABLES + double Q_zero,Q_minus,D; + double Yield_minus,Yield_zero,Yield_plus; + + double help1,help2,help3; + +}; + + +#endif diff --git a/geant4/LEMuSR/make.sh b/geant4/LEMuSR/make.sh new file mode 100644 index 0000000..8420350 --- /dev/null +++ b/geant4/LEMuSR/make.sh @@ -0,0 +1,10 @@ +#cd ~/geant4.7.0/source/particles/management +#gmake +#cd ~/geant4.7.0/source/particles/leptons +#gmake +cd ~/geant4.7.0/source/geometry/magneticfield/ +gmake +#cd ~/geant4.7.0/source/geometry/navigation/ +#gmake +cd $wlem +gmake diff --git a/geant4/LEMuSR/mk.sh b/geant4/LEMuSR/mk.sh new file mode 100644 index 0000000..120ecc0 --- /dev/null +++ b/geant4/LEMuSR/mk.sh @@ -0,0 +1,10 @@ +cd ~/geant4.6.1/source/processes/decay/ +make +cd ~/geant4.6.1/source/track +make +cd ~/geant4.6.1/source/particles/management/ +make +cd ~/geant4.6.1/source/particles/leptons/ +make +cd $lem +make \ No newline at end of file diff --git a/geant4/LEMuSR/mkclean.sh b/geant4/LEMuSR/mkclean.sh new file mode 100644 index 0000000..96b5986 --- /dev/null +++ b/geant4/LEMuSR/mkclean.sh @@ -0,0 +1,14 @@ +cd ~/geant4.6.1/source/processes/decay/ +make clean +$make +cd ~/geant4.6.1/source/track +make clean +$make +cd ~/geant4.6.1/source/particles/management/ +make clean +$make +cd ~/geant4.6.1/source/particles/leptons/ +make clean +$make +cd $lem +$make diff --git a/geant4/LEMuSR/src/AsymCheck.cc b/geant4/LEMuSR/src/AsymCheck.cc new file mode 100644 index 0000000..4ddffe1 --- /dev/null +++ b/geant4/LEMuSR/src/AsymCheck.cc @@ -0,0 +1,277 @@ +///§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§//* +// LOW ENERGY MUON SPIN RELAXATION, ROTATION, RADIATION +// +// ID : AsymCheck.cc , v 1.2 +// AUTHOR: Taofiq PARAISO +// DATE : 2004-08-20 10:20 +//§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§// +// +// & &&&&&&&&&& &&&&&&& &&&&&&&& +// & & && && & && +// & & & & & & && +// & &&&&&&& & & &&&&&& &&&&&&&& +// & & & && & & && +// & & && & & && && & & +// &&&&&&&&&& &&&&&&&&&& & &&&&& && &&&&&&& & && +// & +// & +// & +// & +// ASYMCHECK +//§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§// +#include "AsymCheck.hh" + +#include "G4SteppingManager.hh" +#include "G4Transform3D.hh" +#include "G4DynamicParticle.hh" +#include "G4UnitsTable.hh" +#include "LEMuSRMuonDecayChannel.hh" +#include "G4MuonDecayChannelWithSpin.hh" + +AsymCheck::AsymCheck() +{ + + A=0;L=0;R=0; + BR1=BR2=dm1=dm2=0; + BookRoot(); + + pointer=this ; +} + + +AsymCheck::~AsymCheck() +{ + PrintAsym(); +G4cout <<"\n Left/Right Asymmetry: L vs R = " << L <<" vs " << R <<" => A = " << A <<" for "<< L+R <<" particles.\n"<GetTrack()->GetCreatorProcess()) + { + if( aStep->GetTrack()->GetCreatorProcess()->GetProcessName()=="Decay"|| aStep->GetTrack()->GetCreatorProcess()->GetProcessName()=="DecayWithSpin") + + { + condition=true; + } + } + } + } + + return condition; + +} + + +void AsymCheck::SetAngles(const G4Step* aStep) +{ + //lemu + // theta = LEMuSRMuonDecayChannel::GetInstance()->theta; + // phi = LEMuSRMuonDecayChannel::GetInstance()->phi; + + // triumf + m=aStep->GetPreStepPoint()->GetMomentumDirection(); + p= aStep->GetTrack()->GetDynamicParticle()->GetPolarization(); + + m.rotateUz(G4ThreeVector(-1.,0.,0.)); + p.rotateUz(G4ThreeVector(-1.,0.,0.)); + + theta = m.theta(p); + if (m.x()<0)phi = acos(m.x()/sin(theta))*(-1.); + else if (m.x()>=0)phi = acos(m.x()/sin(theta))*(+1.); + + +} + + +void AsymCheck::SetParticleVolumeNames(const G4Step* aStep) +{ + // NAMES + p_name = aStep->GetTrack()->GetDefinition()->GetParticleName(); // particle name + v_name = aStep->GetTrack()->GetVolume()->GetLogicalVolume()->GetName(); //lv_name + pv_name = aStep->GetTrack()->GetVolume()->GetName(); //lv_name + +} + + +void AsymCheck::SetPositionMomentum(const G4Step* aStep) +{ + + // POSITION, MOMENTUM + position = aStep->GetPreStepPoint()->GetPosition(); // position + momentum = aStep->GetPreStepPoint()->GetMomentum(); // momentum + momentum_direction = aStep->GetPreStepPoint()->GetMomentumDirection(); // momentum + + if(position.x()>0) L++; + else if(position.x()<0) R++; + +} + + +void AsymCheck::SetTimeEnergy(const G4Step* aStep) +{ + + // ENERGY + kenergy= aStep->GetTrack()->GetDynamicParticle()->GetKineticEnergy(); // position + + tenergy= aStep->GetTrack()->GetDynamicParticle()->GetTotalEnergy(); // position + + // TIME + localtime = aStep->GetTrack()->GetLocalTime(); // time since track creation + globaltime = aStep->GetPreStepPoint()->GetGlobalTime();// time since event creation + proptime = aStep->GetTrack()->GetProperTime(); // proper time of the particle + time = proptime; + + positron.kenergy =kenergy ; +} + + +void AsymCheck::SetSpinDirection(const G4Step* aStep) +{ + polarization = aStep->GetTrack()->GetDynamicParticle()->GetPolarization(); + // G4cout <<"Polarization " << polarization <GetPreStepPoint()->GetGlobalTime(); +} + + +void AsymCheck::Update() +{ + positron.kenergy =kenergy/MeV ; + positron.tenergy =tenergy; + positron.localtime =localtime ; + positron.globaltime =globaltime/ns ; + positron.proptime = proptime ; + + positron.theta = theta/rad ; + positron.phi = phi/rad; + + positron.positionx = position.x()/mm; + positron.positiony = position.y()/mm; + positron.positionz = position.z()/mm; + + positron.momdirx= momentum_direction.x()/mm; + positron.momdiry= momentum_direction.y()/mm; + positron.momdirz= momentum_direction.z()/mm; + + positron.ID=G4RunManager::GetRunManager()->GetCurrentRun()->GetRunID(); + + +} + + +// PRINT VALUES + +void AsymCheck::PrintAsym() +{ + A = (L-R)/(L+R); + // G4cout <<"\n Left/Right Asymmetry: L vs R = " << L <<" vs " << R <<" => A = " << A <<" for "<< L+R <<" particles.\n"<GetTrack()->GetCreatorProcess()) + { + G4cout << "NOT PRIMARY PARTICLE : created by : " << aStep->GetTrack()->GetCreatorProcess()->GetProcessName() <<" ;\n "; + } + + G4cout << "particle name : " << p_name <<" ;\n " + << "volume name : " << v_name <<" ;\n " + << "kinetic energy : " << G4BestUnit(kenergy,"Energy") <<" ;\n " + << "total energy : " << G4BestUnit(tenergy,"Energy") <<" ;\n " + << "current energy : " << G4BestUnit(aStep->GetPreStepPoint()->GetTotalEnergy(),"Energy") <<" ;\n " + << "Time (l,g,p) : " << G4BestUnit(localtime,"Time") <<" ; " + << G4BestUnit(globaltime,"Time")<<" ; " + << G4BestUnit(proptime,"Time") <<" ;\n " + << "position : " << position <<" ;\n " + << "momentum : " << momentum <<" ;\n " + << "momentum direction: " << momentum_direction<<" ;\n " + << "theta angle : " << theta <<" ;\n " + << "phi angle : " << phi <<" ;\n " + + <Branch("positron",&positron.kenergy,"kenergy/F:tenergy/F:localtime/F:globaltime:propertime/F:theta:phi:positionx/F:positiony:positionz:momdirx:momdiry:momdirz/F:runID/I"); + + tree->Branch("Asymetry",&asym.asym,"Asym/F:L:R:S"); + + tree->Branch("spin",&spin.omegat,"omegat/F:time"); + +} + + +void AsymCheck::FillRoot() +{ + tree->Fill(); + // tree->Scan(); + +} + +void AsymCheck::WriteRoot() +{ + myFile->Write(); + myFile->Close(); + +} diff --git a/geant4/LEMuSR/src/FieldCheck.cc b/geant4/LEMuSR/src/FieldCheck.cc new file mode 100644 index 0000000..8b8e2c8 --- /dev/null +++ b/geant4/LEMuSR/src/FieldCheck.cc @@ -0,0 +1,376 @@ +///§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§//* +// LOW ENERGY MUON SPIN RELAXATION, ROTATION, RADIATION +// +// ID :FieldCheck.cc , v 1.2 +// AUTHOR: Taofiq PARAISO +// DATE : 2004-09-17 10:20 +//§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§// +// +// & &&&&&&&&&& &&&&&&& &&&&&&&& +// & & && && & && +// & & & & & & && +// & &&&&&&& & & &&&&&& &&&&&&&& +// & & & && & & && +// & & && & & && && & & +// &&&&&&&&&& &&&&&&&&&& & &&&&& && &&&&&&& & && +// & +// & +// & +// & +// FIELDCHECK +//§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§// +#include "FieldCheck.hh" + +#include "G4SteppingManager.hh" +#include "G4Transform3D.hh" +#include "G4DynamicParticle.hh" +#include "G4UnitsTable.hh" +#include "LEMuSRDetectorConstruction.hh" +#include "G4VVisManager.hh" +#include "G4Polyline.hh" +#include "G4VisAttributes.hh" +#include "G4Colour.hh" + + + +FieldCheck::FieldCheck() +{ + + BookRoot(); + muon.index= 0; + + + loop=0; + pointer=this ; +} + + +FieldCheck::~FieldCheck() +{ + WriteRoot(); +} + +FieldCheck* FieldCheck::pointer=0; +FieldCheck* FieldCheck::GetInstance() +{ + return pointer; +} + + +void FieldCheck::UserSteppingAction(const G4Step* aStep) + +{ + if( aStep->GetPreStepPoint()&& aStep->GetPostStepPoint()->GetPhysicalVolume() ) + { + SetParticleVolumeNames(aStep); + kenergy= aStep->GetTrack()->GetDynamicParticle()->GetKineticEnergy(); // position + + if(CheckCondition(aStep)) + { + + SetPositionMomentum(aStep); + SetTimeEnergy(aStep); + // SetSpinDirection(aStep); + + // Print datas to screen + // PrintDatas(aStep); + PrintField(aStep); + + Update(); + FillRoot(); +#if defined G4UI_USE_ROOT + myFile->Write(); +#endif + + } + + + // kill useless particles + // kill useless particles + /* if(aStep->GetTrack()->GetDefinition()->GetParticleName()=="e-" + ||aStep->GetTrack()->GetDefinition()->GetParticleName()=="gamma") + { + aStep->GetTrack()->SetTrackStatus(fStopAndKill); + }*/ + + if(p_name!="mu+" &&p_name!="Mu" &&p_name!="e+" &&p_name!="geantino") + { + aStep->GetTrack()->SetTrackStatus(fStopAndKill); + } + + + // loop killa + if(aStep->GetStepLength()<0.01*mm) + { + loop++; + if(loop>20) + { + aStep->GetTrack()->SetTrackStatus(fStopAndKill); + loop=0; + } + } + + + + } + + + G4VVisManager* pVVisManager = G4VVisManager::GetConcreteInstance(); + + if (pVVisManager) { + //----- Define a line segment + G4Polyline polyline; + G4Colour colour; + if (p_name == "mu+") colour = G4Colour(1., 0., 0.); + else if (p_name == "Mu" ) colour = G4Colour(0., 0., 1.); + else if (p_name == "e+" ) colour = G4Colour(1., 1., 0.); + else colour = G4Colour(1., 0., 1.); + G4VisAttributes attribs(colour); + polyline.SetVisAttributes(attribs); + polyline.push_back(aStep->GetPreStepPoint()->GetPosition()); + polyline.push_back(aStep->GetPostStepPoint()->GetPosition()); + + //----- Call a drawing method for G4Polyline + pVVisManager -> Draw(polyline); + + } +} + + + + + +G4bool FieldCheck::CheckCondition(const G4Step* aStep) +{ + G4bool condition=false; + + if((p_name == "mu+"||p_name=="Mu"||p_name=="geantino")/*&&v_name=="lv_MCPV"*/&&aStep->GetPreStepPoint()->GetPosition().z()<16*cm) + + // if(aStep->GetPostStepPoint()->GetProcessDefinedStep() != NULL) + // { + // if( aStep->GetPostStepPoint()->GetProcessDefinedStep()->GetProcessName()=="Decay") + // { + { + condition=true; + } + return condition; + + +} + + +void FieldCheck::SetParticleVolumeNames(const G4Step* aStep) +{ + // NAMES + p_name = aStep->GetTrack()->GetDefinition()->GetParticleName(); // particle name + v_name = aStep->GetPostStepPoint()->GetPhysicalVolume()->GetLogicalVolume()->GetName(); //lv_name + pv_name = aStep->GetTrack()->GetVolume()->GetName(); //lv_name + +} + + +void FieldCheck::SetPositionMomentum(const G4Step* aStep) +{ + + // POSITION, MOMENTUM + position = aStep->GetTrack()->GetPosition(); // position + momentum = aStep->GetTrack()->GetMomentum(); // momentum + momentum_direction = aStep->GetTrack()->GetMomentumDirection(); // momentum + +} + + +void FieldCheck::SetTimeEnergy(const G4Step* aStep) +{ + + // ENERGY + kenergy= aStep->GetTrack()->GetDynamicParticle()->GetKineticEnergy(); // position + + tenergy= aStep->GetTrack()->GetDynamicParticle()->GetTotalEnergy(); // position + + // TIME + localtime = aStep->GetPostStepPoint()->GetLocalTime(); // time since track creation + globaltime = aStep->GetPostStepPoint()->GetGlobalTime();// time since event creation + proptime = aStep->GetPostStepPoint()->GetProperTime(); // proper time of the particle + time = proptime; + + charge=aStep->GetTrack()->GetDynamicParticle()->GetCharge(); + +} + + +void FieldCheck::SetSpinDirection(const G4Step* aStep) +{ + polarization = aStep->GetTrack()->GetDynamicParticle()->GetPolarization(); + // G4cout<GetCurrentRun()->GetRunID(); + evt=G4RunManager::GetRunManager()->GetCurrentEvent()->GetEventID(); + muon.event = evt; + + muon.charge= charge; + +} + + +// PRINT VALUES + +void FieldCheck::PrintField(const G4Step* aStep) +{ + // G4cout<< position.z()<GetTrack()->GetVolume()->GetLogicalVolume()->GetFieldManager()) + { + G4double point[4]; + G4double Bfield[6]; + + point[0]=position.x(); + point[1]=position.y(); + point[2]=position.z(); + + aStep->GetTrack()->GetVolume()->GetLogicalVolume()->GetFieldManager()->GetDetectorField()->GetFieldValue(point, Bfield); + // G4cout<< position.z()<-34.7*cm + &&LEMuSRDetectorConstruction::GetInstance()->magfield==1 + &&LEMuSRDetectorConstruction::GetInstance()->anode_elfield==1) + { + // G4cout<<"Case EM "<-34.7*cm + &&LEMuSRDetectorConstruction::GetInstance()->magfield==1 + &&LEMuSRDetectorConstruction::GetInstance()->anode_elfield==0) + { + // G4cout<<"Case Mag "<-34.7*cm + &&LEMuSRDetectorConstruction::GetInstance()->magfield==0 + &&LEMuSRDetectorConstruction::GetInstance()->anode_elfield==1) + { + // G4cout<<"Case Elec "<GetTrack()->GetCreatorProcess()) + { + G4cout << "NOT PRIMARY PARTICLE : created by : " << aStep->GetTrack()->GetCreatorProcess()->GetProcessName() <<" ;\n "; + } + + G4cout << "particle name : " << p_name <<" ;\n " + << "volume name : " << v_name <<" ;\n " + << "kinetic energy : " << G4BestUnit(kenergy,"Energy") <<" ;\n " + << "Time (l,g,p) : " << G4BestUnit(localtime,"Time") <<" ; " + << G4BestUnit(globaltime,"Time")<<" ; " + << G4BestUnit(proptime,"Time") <<" ;\n " + << "position : " << G4BestUnit(position,"Length")<<" ;\n " + << "momentum : " << momentum <<" ;\n " + << "momentum direction: " << momentum_direction<<" ;\n " + <Branch("muon",&muon.tenergy,"kenergy/F:localtime/F:globaltime:propertime/F:positionx/F:positiony:positionz:momdirx:momdiry:momdirz:Bx:By:Bz:Ex:Ey:Ez:charge/F:index/I:event/I:runID/I"); + +} + + +void FieldCheck::FillRoot() +{ + tree->Fill(); + // tree->Scan(); + +} + +void FieldCheck::WriteRoot() +{ + myFile->Write(); + myFile->Close(); + +} diff --git a/geant4/LEMuSR/src/FocalLengthTest.cc b/geant4/LEMuSR/src/FocalLengthTest.cc new file mode 100644 index 0000000..4cd0dcd --- /dev/null +++ b/geant4/LEMuSR/src/FocalLengthTest.cc @@ -0,0 +1,264 @@ +///§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§//* +// LOW ENERGY MUON SPIN RELAXATION, ROTATION, RADIATION +// +// ID :FocalLengthTest.cc , v 1.2 +// AUTHOR: Taofiq PARAISO +// DATE : 2005-03-02 09:37 +//§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§// +// +// & &&&&&&&&&& &&&&&&& &&&&&&&& +// & & && && & && +// & & & & & & && +// & &&&&&&& & & &&&&&& &&&&&&&& +// & & & && & & && +// & & && & & && && & & +// &&&&&&&&&& &&&&&&&&&& & &&&&& && &&&&&&& & && +// & +// & +// & +// & +// FOCALLENGTHTEST +//§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§// +#include "FocalLengthTest.hh" + +#include "G4SteppingManager.hh" +#include "G4Transform3D.hh" +#include "G4DynamicParticle.hh" +#include "G4UnitsTable.hh" + +#include "LEMuSRPrimaryGeneratorAction.hh" + + +FocalLengthTest::FocalLengthTest() +{ + + BookRoot(); + muon.event=0; + loop=0; + pointer=this ; +} + + +FocalLengthTest::~FocalLengthTest() +{ + WriteRoot(); +} + +FocalLengthTest* FocalLengthTest::pointer=0; +FocalLengthTest* FocalLengthTest::GetInstance() +{ + return pointer; +} + + +void FocalLengthTest::UserSteppingAction(const G4Step* aStep) + +{ + if( aStep->GetPreStepPoint()&& aStep->GetPreStepPoint()->GetPhysicalVolume() ) + { + + LoopKiller(aStep); + SetParticleVolumeNames(aStep); + + if(CheckCondition(aStep)) + { + + // Get datas + SetPositionMomentum(aStep); + SetTimeEnergy(aStep); + + Update(); + FillRoot(); +#if defined G4UI_USE_ROOT + myFile->Write(); +#endif + + } + } + + +} + +void FocalLengthTest::LoopKiller(const G4Step *aStep) +{ + // loop killa + if(aStep->GetStepLength()<0.001*mm) + { + loop++; + if(loop>20) + { + aStep->GetTrack()->SetTrackStatus(fStopAndKill); + loop=0; + } + } + + // kill useless particles + if(aStep->GetTrack()->GetDefinition()->GetParticleName()=="e-" + ||aStep->GetTrack()->GetDefinition()->GetParticleName()=="gamma") + { + if(aStep->GetTrack()->GetKineticEnergy()<10.*eV) + { + aStep->GetTrack()->SetTrackStatus(fStopAndKill); + } + } + +} + + + + +G4bool FocalLengthTest::CheckCondition(const G4Step* ) +{ + G4bool condition=false; + + // if(p_name == "geantino" && v_name=="lv_fchk") // change also in pga + if(p_name == "mu+" && v_name=="lv_fchk") + { + if(pv_name=="pv_f1"||pv_name=="pv_f44")// THE FIRST DUMMY PLANE + { + condition=true; + } + } + + return condition; + +} + + + +void FocalLengthTest::SetParticleVolumeNames(const G4Step* aStep) +{ + // NAMES + p_name = aStep->GetTrack()->GetDefinition()->GetParticleName(); // particle name + v_name = aStep->GetPreStepPoint()->GetPhysicalVolume()->GetLogicalVolume()->GetName(); //lv_name + pv_name = aStep->GetTrack()->GetVolume()->GetName(); //lv_name + +} + + +void FocalLengthTest::SetPositionMomentum(const G4Step* aStep) +{ + + // POSITION, MOMENTUM + position = aStep->GetPreStepPoint()->GetPosition(); // position + momentum = aStep->GetPreStepPoint()->GetMomentum(); // momentum + momentum_direction = aStep->GetPreStepPoint()->GetMomentumDirection(); // momentum + +} + + +void FocalLengthTest::SetTimeEnergy(const G4Step* aStep) +{ + + // ENERGY + kenergy= aStep->GetTrack()->GetDynamicParticle()->GetKineticEnergy(); // position + + tenergy= aStep->GetTrack()->GetDynamicParticle()->GetTotalEnergy(); // position + + // TIME + localtime = aStep->GetPreStepPoint()->GetLocalTime(); // time since track creation + globaltime = aStep->GetPreStepPoint()->GetGlobalTime();// time since event creation + proptime = aStep->GetPreStepPoint()->GetProperTime(); // proper time of the particle + time = proptime; + +} + + +void FocalLengthTest::SetSpinDirection(const G4Step* aStep) +{ + polarization = aStep->GetTrack()->GetDynamicParticle()->GetPolarization(); + +} + + +void FocalLengthTest::Update() +{ + muon.index++; + + + if(pv_name=="pv_f1")// THE FIRST DUMMY PLANE + { + muon.index=0; + muon.event++; + init_kenergy=LEMuSRPrimaryGeneratorAction::GetPGA()->energy; + } + + if(pv_name=="pv_f44") + { + G4double FL, h, l, d; + h=sqrt(position.x()*position.x()+position.y()*position.y()); + d=sqrt(momentum_direction.x()*momentum_direction.x()+momentum_direction.y()*momentum_direction.y()); + l=momentum_direction.z(); + + FL= h*l/d+22.*cm;// 22 cm from the last plane pv_f44 to the center of the lense + //G4cout <<"Focal length for this particle : " << FL/meter <<"meter" <energy/keV; + // G4cout <<"Kinectic energy for this particle : " << init_kenergy/keV <<"keV" <Branch("muon",&muon.kenergy,"kenergy/F:focal/F:ratio/F:positionx/F:positiony/F:positionz/F:momdirx/F:momdiry/F:momdirz"); + +} + + +void FocalLengthTest::FillRoot() +{ + tree->Fill(); + // tree->Scan(); + +} + +void FocalLengthTest::WriteRoot() +{ + myFile->Write(); + myFile->Close(); + +} diff --git a/geant4/LEMuSR/src/LEMuSRAtRestSpinRotation.cc b/geant4/LEMuSR/src/LEMuSRAtRestSpinRotation.cc new file mode 100644 index 0000000..f9242af --- /dev/null +++ b/geant4/LEMuSR/src/LEMuSRAtRestSpinRotation.cc @@ -0,0 +1,229 @@ +///§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§//* +// LOW ENERGY MUON SPIN RELAXATION, ROTATION, RADIATION +// +// ID : LEMuSRAtRestSpinRotation.cc , v 1.2 +// AUTHOR: Taofiq PARAISO +// DATE : 2004-08-20 10:20 +//§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§// +// +// & &&&&&&&&&& &&&&&&& &&&&&&&& +// & & && && & && +// & & & & & & && +// & &&&&&&& & & &&&&&& &&&&&&&& +// & & & && & & && +// & & && & & && && & & +// &&&&&&&&&& &&&&&&&&&& & &&&&& && &&&&&&& & && +// & +// & +// & +// & +// AT REST SPIN ROTATION +//§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§// + +#include "LEMuSRAtRestSpinRotation.hh" + +#include "G4ThreeVector.hh" +#include "G4MagneticField.hh" +#include "G4Track.hh" +#include "G4FieldManager.hh" +#include +#include "globals.hh" +#include "G4ParticleChange.hh" +#include "G4ios.hh" +#include "G4Transform3D.hh" +#include "G4UnitsTable.hh" + +#include "G4ParticleTable.hh" +#include "G4ParticleDefinition.hh" + +#include "G4ProcessVector.hh" +#include "G4ProcessManager.hh" + + +LEMuSRAtRestSpinRotation::LEMuSRAtRestSpinRotation(const G4String& processName) + : G4VRestProcess (processName) +{ + G4cout << GetProcessName() << " is created "<< G4endl; + pointer = this; +} + + +LEMuSRAtRestSpinRotation::~LEMuSRAtRestSpinRotation() +{;} + + +LEMuSRAtRestSpinRotation* LEMuSRAtRestSpinRotation::pointer=0; +LEMuSRAtRestSpinRotation* LEMuSRAtRestSpinRotation::GetInstance() +{ + return pointer; +} + + + + +G4VParticleChange* LEMuSRAtRestSpinRotation::AtRestDoIt(const G4Track& theTrack, const G4Step& aStep) +{ + + theParticleChange.Initialize(theTrack); + theParticleChange.ProposeTrackStatus(fAlive); + // G4cout<<"AT REST::: globaltime "<< theTrack.GetGlobalTime()/ns <GetPreAssignedDecayProperTime(); + + + + deltatime = ftime - itime; + theParticleChange.ProposeGlobalTime(deltatime + itime -gtime); + theParticleChange.ProposeProperTime(deltatime); + + polar = aStep.GetTrack()->GetPolarization(); + + + if(aStep.GetTrack()->GetVolume()->GetLogicalVolume()->GetFieldManager()) + { + + + G4FieldManager *fMgr = theTrack.GetVolume()->GetLogicalVolume()->GetFieldManager(); + + + // if(!fMgr->DoesFieldChangeEnergy())//then we have a magnetic field + if(fMgr->FieldHasMagComponent())//then we have a magnetic field + { + +#ifdef G4SRVERBOSE + G4cout<<"AT REST::: MAGNETIC FIELD HERE" <GetDetectorField(); + + mfield->GetFieldValue(point,B); + +#ifdef G4SRVERBOSE + G4cout <<"AT REST::: MAGNETIC FIELD B="<< B[0] <<" " << B[1] <<" " << B[2] <GetDefinition()->GetPDGCharge(); + a= 1.165922e-3; + fqz = 8.5062e+7*rad/(s*kilogauss); + + gamma = aStep.GetTrack()->GetDefinition()->GetGammaFactor()*rad; + + // G4cout<< fqz*(s*tesla)<GetPolarization(); + HepVector3D newspin; + newspin = Spin_rotation*spin; + + G4double x,y,z,alpha; + x = sqrt(spin*spin); + y = sqrt(newspin*newspin); + z = spin*newspin/x/y; + alpha = acos(z); + +#ifdef G4SRVERBOSE + G4cout<< "AT REST::: PARAMETERS\n" + << "Initial spin : " << spin <<"\n" + << "Delta time : " << deltatime <<"\n" + << "Rotation angle: " << rotation_angle/(M_PI*rad) <<"\n" + << "New spin : " << newspin <<"\n" + << "Checked norms : " << x <<" " <fzmin) + { + G4double R=sqrt(X*X+Y*Y); + if(R +#include + +#include "G4UnitsTable.hh" + +G4Allocator LEMuSRCryoHitAllocator; + +LEMuSRCryoHit::LEMuSRCryoHit() +{;} + +LEMuSRCryoHit::~LEMuSRCryoHit() +{;} + +LEMuSRCryoHit::LEMuSRCryoHit(const LEMuSRCryoHit &right) : G4VHit() +{ + particle_name = right.particle_name; + energy_deposition = right.energy_deposition; + time_of_flight = right.time_of_flight; + position = right.position; + momentum = right.momentum; +} + +const LEMuSRCryoHit& LEMuSRCryoHit::operator=(const LEMuSRCryoHit &right) +{ + particle_name = right.particle_name; + energy_deposition = right.energy_deposition; + time_of_flight = right.time_of_flight; + position = right.position; + momentum = right.momentum; + return *this; +} + + + +G4int LEMuSRCryoHit::operator==(const LEMuSRCryoHit &right) const +{ + return (this==&right) ? 1 : 0; +} + +void LEMuSRCryoHit::Draw() +{ + G4VVisManager* VisManager = G4VVisManager::GetConcreteInstance(); + if(VisManager) + { + G4Circle circle(position); + circle.SetScreenSize(0.1); + circle.SetFillStyle(G4Circle::filled); + G4Colour colour(1.,1.,1.); + G4VisAttributes attributes(colour); + circle.SetVisAttributes(attributes); + VisManager->Draw(circle); + } +} + +void LEMuSRCryoHit::Print() +{} + +void LEMuSRCryoHit::print(G4String name) +{ + ofstream TestPrint(name,ios::app); + if (!TestPrint.is_open()) exit(8); + TestPrint << "particle name : " << particle_name <<" ;\n " + << "energy_deposition : " << G4BestUnit(energy_deposition,"Energy") <<" ;\n " + << "time_of_flight : " << G4BestUnit(time_of_flight,"Time") <<" ;\n " + << "position : " << position <<" ;\n " + << "momentum : " << momentum <<" ;\n " + <AddHitsCollection(HCID,CryoCollection); +} + +G4bool LEMuSRCryoSD::ProcessHits(G4Step* aStep, G4TouchableHistory*) +{ + // G4cout << "PROCESS HIT"<GetTrack()->GetDefinition()->GetParticleName(); // particle name + if(p_name=="mu+")mu=1; + if(p_name=="Mu")e=1; + // G4cout<<"mu+ "<< mu <<" mu "<SetParticleName(p_name); + aHit->SetSpin(spin); + + aHit->SetMomentum( hitmom ); + aHit->SetPosition( hitpos ); + + aHit->SetTimeOfFlight( tof); + aHit->SetEnergyDeposition( edep ); + + + CryoCollection->insert( aHit ); + // aHit->Print(); + // aHit->print("Statistics/SCIS.Hits"); + aHit->Draw(); + + + PrintAll(); + + + return true; +} + +void LEMuSRCryoSD::EndOfEvent(G4HCofThisEvent*) +{ + // G4int NbHits = CryoCollection->entries(); + // G4cout << "\n-------->Hits Collection: in this event they are " << NbHits + // << " hits in the cryo: " << G4endl; + // for (G4int i=0;iPrint(); + +} + +G4bool LEMuSRCryoSD::CheckCondition(const G4Step* aStep) +{ + G4bool condition=false; + if(p_name == "mu+"||p_name == "Mu") + { + if(aStep->GetTrack()->GetNextVolume()->GetLogicalVolume()->GetName()=="lv_SAH2"||aStep->GetTrack()->GetNextVolume()->GetLogicalVolume()->GetName()=="lv_SAH3"||aStep->GetTrack()->GetNextVolume()->GetLogicalVolume()->GetName()=="lv_SAH1"||aStep->GetTrack()->GetNextVolume()->GetLogicalVolume()->GetName()=="lv_CRSH2"||aStep->GetTrack()->GetNextVolume()->GetLogicalVolume()->GetName()=="lv_CRSH"||aStep->GetTrack()->GetNextVolume()->GetLogicalVolume()->GetName()=="lv_SAPH") + { + condition=true; + } + } + return condition; + +} + + +void LEMuSRCryoSD::clear() +{ + delete CryoCollection; +} + +void LEMuSRCryoSD::DrawAll() +{ +} + +void LEMuSRCryoSD::PrintAll() +{ + +} + + +void LEMuSRCryoSD::GetDatas(const G4Step *aStep) +{ + // Get datas + //a Volume, name, spin + vname = aStep->GetPreStepPoint()->GetPhysicalVolume()->GetName(); + spin= aStep->GetTrack()->GetDefinition()->GetPDGSpin(); // spin in units of 1 + + //b Position momentum + hitpos = aStep->GetPreStepPoint()->GetPosition(); // position + hitmom = aStep->GetPreStepPoint()->GetMomentum(); // momentum + + //c Times + tof = aStep->GetPreStepPoint()->GetLocalTime(); // time since track creation + globaltime = aStep->GetPreStepPoint()->GetGlobalTime();// time since event creation + proptime = aStep->GetPreStepPoint()->GetProperTime(); // particle's proper time + + //d Energy + edep = aStep->GetTotalEnergyDeposit(); + + toten = aStep->GetTrack()->GetTotalEnergy(); + + kinen = aStep->GetTrack()->GetKineticEnergy(); + + +} + + +void LEMuSRCryoSD::getHit() +{ + theHit.kenergy = kinen/keV; + theHit.tenergy = toten/keV; + theHit.edeposit = edep/keV; + theHit.localtime = tof/ns; + theHit.globaltime = globaltime/ns; + theHit.proptime = proptime/ns; + theHit.positionx = hitpos.x()/mm; + theHit.positiony = hitpos.y()/mm; + theHit.positionz = hitpos.z()/mm; + theHit.momdirx = hitmom.x(); + theHit.momdiry = hitmom.y(); + theHit.momdirz = hitmom.z(); + theHit.foil = LEMuSRDetectorConstruction::GetInstance()->cfthk; + theHit.muon = mu; + theHit.positron = e; + theHit.gamma = g; + theHit.runid = G4RunManager::GetRunManager()->GetCurrentRun()->GetRunID(); +} + +// ROOT METHODS + +void LEMuSRCryoSD::BookRoot() +{ + // open root file + myFile = new TFile("SDCryoE0.root", "RECREATE"); + // myFile->SetCompressionLevel(1); + + tree = new TTree ("tree"," Cryo Datas"); + + tree->Branch("cryoHit",&theHit.kenergy,"kenergy/F:tenergy/F:edeposit/F:localtime/F:globaltime:propertime/F:positionx/F:positiony:positionz:momdirx:momdiry:momdirz/F:foil/F:muon/I:muonium/I:gamma/I:runID/I"); + +} + +void LEMuSRCryoSD::FillRoot() +{ + tree->Fill(); +} + +void LEMuSRCryoSD::WriteRoot() +{ + myFile->Write(); + myFile->Close(); +} + diff --git a/geant4/LEMuSR/src/LEMuSRDecay.cc b/geant4/LEMuSR/src/LEMuSRDecay.cc new file mode 100644 index 0000000..558e240 --- /dev/null +++ b/geant4/LEMuSR/src/LEMuSRDecay.cc @@ -0,0 +1,196 @@ +#include"LEMuSRDecay.hh" + +#include "G4DynamicParticle.hh" +#include "G4DecayProducts.hh" +#include "G4DecayTable.hh" +#include "G4PhysicsLogVector.hh" +#include "G4ParticleChangeForDecay.hh" +#include "G4VExtDecayer.hh" +#include "G4ThreeVector.hh" +#include "LEMuSRMuonDecayChannel.hh" + +G4VParticleChange* LEMuSRDecay::DecayIt(const G4Track& aTrack, const G4Step& aStep) +{ + + + // G4cerr<<"METHOD CALLED WHEN SHOULD NOT BE AT ALL!!!!\n";//enable for geant code + // The DecayIt() method returns by pointer a particle-change object. + // Units are expressed in GEANT4 internal units. + // get particle + const G4DynamicParticle* aParticle = aTrack.GetDynamicParticle(); + G4ParticleDefinition* aParticleDef = aParticle->GetDefinition(); + + + // if particle is not a muon + if(aParticle->GetDefinition()->GetParticleName()!="mu+"&&aParticle->GetDefinition()->GetParticleName()!="Mu") + { + G4ParticleChangeForDecay* k; + k = (G4ParticleChangeForDecay*)G4Decay::DecayIt(aTrack,aStep); + return k ; + } + // m_ExtDecayer = 0;//G4Decay::GetExtDecayer(); + m_RemainderLifeTime = G4Decay::GetRemainderLifeTime(); + + // check if the particle is stable + if (aParticleDef->GetPDGStable()) return &pParticleChangeForDecay ; + + + //check if thePreAssignedDecayProducts exists + const G4DecayProducts* o_products = (aParticle->GetPreAssignedDecayProducts()); + G4bool isPreAssigned = (o_products != 0); + G4DecayProducts* products = 0; + + // decay table + G4DecayTable *decaytable = aParticleDef->GetDecayTable(); + + // check if external decayer exists + G4bool isExtDecayer = (decaytable == 0); + + // Error due to NO Decay Table + if ( (decaytable == 0) && !isExtDecayer &&!isPreAssigned ){ +#ifdef G4VERBOSE + if (GetVerboseLevel()>0) { + G4cerr << "LEMuSRDecay::DoIt : decay table not defined for "; + G4cerr << aParticle->GetDefinition()->GetParticleName()<< G4endl; + } +#endif + pParticleChangeForDecay.SetNumberOfSecondaries(0); + // Kill the parent particle + pParticleChangeForDecay.ProposeTrackStatus( fStopAndKill ) ; + pParticleChangeForDecay.ProposeLocalEnergyDeposit(0.0); + + ClearNumberOfInteractionLengthLeft(); + return &pParticleChangeForDecay ; + } + + if (isPreAssigned) { + // copy decay products + products = new G4DecayProducts(*o_products); + } else { + + + //+++++++++++++++++++++++++++++++++++ACCORDING TO DECAY TABLE++++++++++++++++++++++++++ + // decay acoording to decay table + // choose a decay channel + G4VDecayChannel *decaychannel = decaytable->SelectADecayChannel(); + if (decaychannel == 0 ){ + // decay channel not found + G4Exception("G4Decay::DoIt : can not determine decay channel "); + } else { + G4int temp = decaychannel->GetVerboseLevel(); + // execute DecayIt() +#ifdef G4VERBOSE + if (GetVerboseLevel()>1) { + G4cerr << "LEMuSRDecay::DoIt : selected decay channel addr:" << decaychannel <SetVerboseLevel(GetVerboseLevel()); + } +#endif + + // CHECK FOR POLARIASATION AND ASSIGN IT TO THE DECAY METHOD + + G4ThreeVector parent_polarization = aParticle->GetPolarization(); + + //-----------------------------INFORMATION--------------------------------- + // G4cout <<"LEMuSRDecay MESSAGE:: polarization is " << parent_polarization <<" .\n"; + if(aParticle->GetDefinition()->GetParticleName()=="mu+"||aParticle->GetDefinition()->GetParticleName()=="Mu") + { + decaychannel->SetParentPolarization(parent_polarization); + if(decaychannel->GetKinematicsName()=="LEMuSR Muon Decay") + { + products = decaychannel->DecayIt(aParticle->GetMass());//decaychannel->DecayItPolarized(aParticle->GetMass(),parent_polarization);// has to be included in G4VDecayChannel. + testa++; + } + + else if(decaychannel->GetKinematicsName()=="Muon Decay") + { + products = decaychannel->DecayIt(aParticle->GetMass()); + testb++; + } +#ifdef G4VERBOSE + if (GetVerboseLevel()>1) { + G4cout<<"Decay Channela "<DecayIt(aParticle->GetMass()) ; + + + +#ifdef G4VERBOSE + if (GetVerboseLevel()>1) { + decaychannel->SetVerboseLevel(temp); + } +#endif +#ifdef G4VERBOSE + // for debug + //if (! products->IsChecked() ) products->DumpInfo(); +#endif + } + } + + // get parent particle information ................................... + G4double ParentEnergy = aParticle->GetTotalEnergy(); + G4ThreeVector ParentDirection(aParticle->GetMomentumDirection()); + + //boost all decay products to laboratory frame + G4double energyDeposit = 0.0; + G4double finalGlobalTime = aTrack.GetGlobalTime(); + if (aTrack.GetTrackStatus() == fStopButAlive ){ + // AtRest case + finalGlobalTime += m_RemainderLifeTime; + energyDeposit += aParticle->GetKineticEnergy(); + if (isPreAssigned) products->Boost( ParentEnergy, ParentDirection); + } else { + // PostStep case + if (!isExtDecayer) products->Boost( ParentEnergy, ParentDirection); + } + //add products in pParticleChangeForDecay + G4int numberOfSecondaries = products->entries(); + + pParticleChangeForDecay.SetNumberOfSecondaries(numberOfSecondaries); + +#ifdef G4VERBOSE + if (GetVerboseLevel()>1) { + G4cerr << "LEMuSRDecay::DoIt : Decay vertex :"; + G4cerr << " Time: " << finalGlobalTime/ns << "[ns]"; + G4cerr << " X:" << (aTrack.GetPosition()).x() /cm << "[cm]"; + G4cerr << " Y:" << (aTrack.GetPosition()).y() /cm << "[cm]"; + G4cerr << " Z:" << (aTrack.GetPosition()).z() /cm << "[cm]"; + G4cerr << G4endl; + G4cerr << "G4Decay::DoIt : decay products in Lab. Frame" << G4endl; + products->DumpInfo(); + } +#endif + G4int index; + G4ThreeVector currentPosition; + const G4TouchableHandle thand = aTrack.GetTouchableHandle(); + + for (index=0; index < numberOfSecondaries; index++) + { + // get current position of the track + currentPosition = aTrack.GetPosition(); + // create a new track object + G4Track* secondary = new G4Track( products->PopProducts(), + finalGlobalTime , + currentPosition ); + // switch on good for tracking flag + secondary->SetGoodForTrackingFlag(); + secondary->SetTouchableHandle(thand); + // add the secondary track in the List + pParticleChangeForDecay.AddSecondary(secondary); + } + delete products; + + // Kill the parent particle + pParticleChangeForDecay.ProposeTrackStatus( fStopAndKill ) ; + + pParticleChangeForDecay.ProposeLocalEnergyDeposit(energyDeposit); + pParticleChangeForDecay.ProposeGlobalTime( finalGlobalTime ); + // reset NumberOfInteractionLengthLeft + ClearNumberOfInteractionLengthLeft(); + + return &pParticleChangeForDecay ; + +} diff --git a/geant4/LEMuSR/src/LEMuSRDepolarize.cc b/geant4/LEMuSR/src/LEMuSRDepolarize.cc new file mode 100644 index 0000000..a42e191 --- /dev/null +++ b/geant4/LEMuSR/src/LEMuSRDepolarize.cc @@ -0,0 +1,175 @@ + +#include "LEMuSRDepolarize.hh" +#include "G4StepStatus.hh" +#include "G4Navigator.hh" +#include "G4TransportationManager.hh" +#include "Randomize.hh" +#include "G4ProductionCutsTable.hh" +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +using namespace std; + +LEMuSRDepolarize:: LEMuSRDepolarize(const G4String& name , + G4ProcessType aType ) + : G4VDiscreteProcess(name, aType) +{} + + +LEMuSRDepolarize:: ~LEMuSRDepolarize() +{} + + +G4VParticleChange* LEMuSRDepolarize::AtRestDoIt( + const G4Track& trackData, + const G4Step& aStep ) +{ + // Initialize ParticleChange (by setting all its members equal + // to corresponding members in G4Track) + fParticleChange.Initialize(trackData); + + // tao :: Get Time + itime = trackData.GetProperTime(); + gtime = trackData.GetGlobalTime(); + ftime = trackData.GetDynamicParticle()->GetPreAssignedDecayProperTime(); + + deltatime = ftime - itime; + fParticleChange.ProposeGlobalTime(deltatime + itime -gtime); + + // set position momentum energy + fParticleChange.ProposePosition(trackData.GetPosition()); + fParticleChange.ProposeMomentumDirection(trackData.GetMomentumDirection()); + fParticleChange.ProposeEnergy(trackData.GetKineticEnergy()); + fParticleChange.ProposeGlobalTime(gtime); + fParticleChange.ProposeProperTime(itime); + fParticleChange.ProposeTrackStatus(trackData.GetTrackStatus()) ; + + if( CheckCondition(aStep)) + { + G4double costheta, sintheta, cosphi, sinphi, theta, phi; + + phi = 2.0*M_PI*G4UniformRand()*rad; + sinphi = sin(phi); + cosphi = cos(phi); + + theta = M_PI*G4UniformRand()*rad; + sintheta = sin(theta); + costheta = cos(theta); + + // rotation angles + G4double px = sintheta*sinphi; + G4double py = sintheta*cosphi; + G4double pz = costheta; + + G4ThreeVector direction0(px,py,pz); + + fParticleChange.ProposePolarization(px,py,pz); + // G4cout<<"DEPOLARIZE at rest"<GetPreAssignedDecayProperTime(); + + deltatime = ftime - itime; + fParticleChange.ProposeGlobalTime(deltatime + itime -gtime); + + // set position momentum energy + fParticleChange.ProposePosition(trackData.GetPosition()); + fParticleChange.ProposeMomentumDirection(trackData.GetMomentumDirection()); + fParticleChange.ProposeEnergy(trackData.GetKineticEnergy()); + fParticleChange.ProposeGlobalTime(gtime); + fParticleChange.ProposeProperTime(itime); + fParticleChange.ProposeTrackStatus(trackData.GetTrackStatus()) ; + + if( CheckCondition(aStep)) + { + G4double costheta, sintheta, cosphi, sinphi, theta, phi; + + phi = 2.0*M_PI*G4UniformRand()*rad; + sinphi = sin(phi); + cosphi = cos(phi); + + theta = M_PI*G4UniformRand()*rad; + sintheta = sin(theta); + costheta = cos(theta); + + // rotation angles + G4double px = sintheta*sinphi; + G4double py = sintheta*cosphi; + G4double pz = costheta; + + G4ThreeVector direction0(px,py,pz); + fParticleChange.ProposePolarization(px,py,pz); + // G4cout<<"DEPOLARIZE post step"<GetDefinition()->GetParticleName(); // particle name + if((p_name == "mu+"||p_name=="Mu")) + { + if(aStep.GetTrack()->GetVolume()->GetLogicalVolume()->GetName()=="lv_SAH1" + ||aStep.GetTrack()->GetVolume()->GetLogicalVolume()->GetName()=="lv_SAH2" + ||aStep.GetTrack()->GetVolume()->GetLogicalVolume()->GetName()=="lv_SAH3" + ||aStep.GetTrack()->GetVolume()->GetLogicalVolume()->GetName()=="lv_SAPH") + { + condition=true;// ACTIVATE PROCESS IN VOLUME ONLY:: LOOK IN G4 DOCUMENTATION + } + } + return condition; + +} + + +G4double LEMuSRDepolarize:: GetMeanFreePath(const G4Track& , + G4double , + G4ForceCondition* condition + ) +{ + + *condition = Forced; + return DBL_MAX; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void LEMuSRDepolarize::GetDatas( const G4Step* ) +{} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + + + +void LEMuSRDepolarize::PrepareSecondary(const G4Track& track) +{ + aSecondary = new G4Track(DP,track.GetGlobalTime(),track.GetPosition()); +} diff --git a/geant4/LEMuSR/src/LEMuSRDetectorConstruction.cc b/geant4/LEMuSR/src/LEMuSRDetectorConstruction.cc new file mode 100644 index 0000000..e95d096 --- /dev/null +++ b/geant4/LEMuSR/src/LEMuSRDetectorConstruction.cc @@ -0,0 +1,1383 @@ +//§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§//* +// LOW ENERGY MUON SPIN RELAXATION, ROTATION, RADIATION +// +// ID : LEMuSRDetectorConstruction.cc , v 1.0 +// AUTHOR: Taofiq PARAISO +// DATE : 2004-06-24 16:33 +//§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§// +// +// & &&&&&&&&&& &&&&&&& &&&&&&&& +// & & && && & && +// & & & & & & && +// & &&&&&&& & & &&&&&& &&&&&&&& +// & & & && & & && +// & & && & & && && & & +// &&&&&&&&&& &&&&&&&&&& & &&&&& && &&&&&&& & && +// & +// & +// & +// & +// DETECTOR CONSTRUCTION +//§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§// + + +// G4 GEOMETRIC FORMS CLASSES + +#include "G4Tubs.hh" +#include "G4Box.hh" +#include "G4Trap.hh" +#include "G4Cons.hh" +#include "G4Sphere.hh" +#include "G4SubtractionSolid.hh" +#include "G4UnionSolid.hh" +#include "G4UnitsTable.hh" + +// G4 VOLUME DEFINITION CLASSES +#include "G4LogicalVolume.hh" +#include "G4VPhysicalVolume.hh" +#include "G4PVReplica.hh" +#include "G4PVPlacement.hh" +#include "G4GeometryManager.hh" +#include "G4FieldManager.hh" +#include "G4PropagatorInField.hh" +#include "G4ChordFinder.hh" +#include "G4El_UsualEqRhs.hh" +#include "G4ClassicalRK4.hh" +#include "G4SimpleHeum.hh" +#include "G4SimpleRunge.hh" +#include "G4MagIntegratorStepper.hh" +#include "G4TransportationManager.hh" +#include "G4GeometryManager.hh" +#include "G4UnitsTable.hh" +//#include "G4RotationMatrix.hh" + +// G4 CLASSES +#include "G4ios.hh" +#include + + +// HEADER +#include "LEMuSRDetectorConstruction.hh" +#include "LEMuSRDetectorMessenger.hh" + + +// process remove +#include "G4ParticleTable.hh" +#include "G4ParticleDefinition.hh" +#include "G4ParticleChange.hh" +#include "G4ProcessVector.hh" +#include "G4ProcessManager.hh" +#include "G4VProcess.hh" + +// electric fieldmap +#include "LEMuSRElectricField.hh" +#include "LEMuSRElFieldMix.hh" +#include "LEMuSRElMagField.hh" +#include "G4ElectricField.hh" +#include "G4ElectroMagneticField.hh" +#include "G4EqMagElectricField.hh" +#include "G4El_MagEqRhs.hh" +#include "LEMuSRCryoField.hh" +#include "LEMuSRMag_SpinEqRhs.hh" +#include "LEMuSRElMag_SpinEqRhs.hh" +#include "LEMuSRMagneticField.hh" +#include "G4Mag_SpinEqRhs.hh" +//§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§// + + + +// CONSTRUCTOR & DESTRUCTOR +LEMuSRDetectorConstruction::LEMuSRDetectorConstruction() +{ + MaterialsDefinition (); + Messenger = new LEMuSRDetectorMessenger(this); + + //default visualization + dSPhi = 0*deg; // starting angle + dEPhi = 360*deg; // ending angle + + +#ifdef LEMU_GET_NEWMAPS + NEWMAPS(); +#endif + + //do not change following values!!!________________________________ + AsymCheck=0; // test asymmetry + scint = 0; // initial state for the scintillator sensitive detector + mcp = 0; // initial state for the mcp sensitive detector + cryo = 0; // initial state for the cryo sensitive detector + mcdetector = 1;// default apparatus with mcp detector + L3FieldVal=6.78; // initial state for the third lönse field + FieldStepLim=10.*mm; + Grid=1; + Guards=0; + Material_SAH="copper"; + //_________________________________________________________________ + + // can be changed + magfield = 1;// magfield enabled + elfield = 0;// 3rd lens elfield / 0 = disabled + anode_elfield =0; //anode field / 0 = disabled + trigger_field = 1;// trigger field / 1 = enabled + AnodeFieldVal=1;// scale of RA field + RALval=0.; // left anode voltage + RARval=0.; // right anode voltage + cfthk = 1.75;// carbon foil thickness in unit mug/cm2 + cryoFieldLength = 3.5; // cryo field length + cryoVoltage = 12.; // cryo voltage + B=50.; // magfield value + + theDetector= this; +} + +LEMuSRDetectorConstruction::~LEMuSRDetectorConstruction() +{ + +} + +LEMuSRDetectorConstruction* LEMuSRDetectorConstruction::theDetector=0; +LEMuSRDetectorConstruction* LEMuSRDetectorConstruction::GetInstance() +{ + return theDetector; +} + + + +// CONTRUCT THE DETECTOR + + +G4VPhysicalVolume* LEMuSRDetectorConstruction::Construct() +{ + return lemuDetector(); +} + + + +//§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§// +// DEFINE THE DETECTOR +//§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§// + +G4VPhysicalVolume* LEMuSRDetectorConstruction::lemuDetector() // !attention au V dans G4VP... +{ + + + // +++++++++++++++++++++++++++++++DEFINE THE MOTHER VOLUME: THE LABORATOY++++++++++++++++++++++ + // solid + G4double LABO_x = 2*m; + G4double LABO_y = 2*m; + G4double LABO_z = 2*m; + + LABO_box = new G4Box("World_box",LABO_x,LABO_y,LABO_z); + // logical volume + LABO_material = G4Material::GetMaterial("Air"); + lv_LABO = new G4LogicalVolume(LABO_box,LABO_material,"lv_World",0,0,0); + + // physical volume + pv_LABO = new G4PVPlacement(0, // no rotation matrix + G4ThreeVector(), // ()==(0,0,0) + lv_LABO, // logical volume + "pv_World", // name + 0, // no mother volume + false, // always false + 0); // !!! lv_LABO is the world logical, mother volume is 0 for the world! + + //SET VISUAL ATTRIBUTES + //-------NONE---------- + + lv_LABO->SetVisAttributes(G4VisAttributes::Invisible); + G4UserLimits* LABO_lim = new G4UserLimits(); + LABO_lim->SetUserMinEkine(1.*eV); + // LABO_lim->SetUserMaxTrackLength(1.2*m); + + lv_LABO->SetUserLimits(LABO_lim); + + //--------------------- + + + // END OF LABORATORY DEFINITION // + + + + // &&&&&&&&&&&&&&&& ADD THE OTHER DETECTOR VOLUMES &&&&&&&&&&&&&&&&&&&&&// + + + + // LOAD ATTRIBUTES AND USER LIMIT + LoadAttributes(); + //------------------------------- + + // main materials + + Vacuum = G4Material::GetMaterial("vacuum"); + SSteel = G4Material::GetMaterial("stainless_steel"); + //------------------------------- + + + lemuMCP2(); + + + if(AsymCheck==1) + { + lemuAsym(); + } + + + + if(AsymCheck==0) + { + + lemuTrigger_Detector(); + lemuCGate(); + lemuLinse3(); + lemuANODE(); + lemuSCINT(); + +#ifdef LEMU_TEST_FOCAL_LENGTH + lemuFieldCheck(); +#endif + + + if(mcdetector==0) //then use cryostat + { + lemuCRYO(); + if(cryo==0) + { + G4SDManager* SDMGR = G4SDManager::GetSDMpointer(); + + G4String CryoName = "/LEMuSR/Cryo_sample"; + + CryoSD = new LEMuSRCryoSD(CryoName); + + SDMGR->AddNewDetector(CryoSD); + cryo=1; + } + + lv_SAH2->SetSensitiveDetector(CryoSD); + + } + + + else if(mcdetector==1) //then use multiple channel detector + { + lemuMCPdet(); + if(mcp==0) + { + G4SDManager* SDMGR = G4SDManager::GetSDMpointer(); + + G4String McpName = "/LEMuSR/MCP"; + + McpSD = new LEMuSRMcpSD(McpName); + + SDMGR->AddNewDetector(McpSD); + mcp=1; + } + + lv_DMCP->SetSensitiveDetector(McpSD); + + } + + + //SENSITIVE DETECTOR + + + if(scint==0) + { + G4SDManager* SDMGR = G4SDManager::GetSDMpointer(); + + G4String iScintName = "/LEMuSR/Scintillator/Inner"; + G4String oScintName = "/LEMuSR/Scintillator/Outer"; + + iScintSD = new LEMuSRScintSD(iScintName); + oScintSD = new LEMuSROScintSD(oScintName); + + SDMGR->AddNewDetector(iScintSD); + SDMGR->AddNewDetector(oScintSD); + scint=1; + } + + lv_SCIS->SetSensitiveDetector(iScintSD); + lv_SCOS->SetSensitiveDetector(oScintSD); + + } + + + + + + + // PRINT STATUS + G4cout<<"geometry defined"<SetVisAttributes(Blue_style);//G4VisAttributes::Invisible); + lv_MCPS->SetVisAttributes(Blue_style); + lv_F160->SetVisAttributes(fBlue_style); + lv_F100->SetVisAttributes(fBlue_style); + lv_F200->SetVisAttributes(fBlue_style); + // lv_GATV->SetVisAttributes(Blue_style);//G4VisAttributes::Invisible); + lv_GATS->SetVisAttributes(Blue_style); + + + // user limits + G4UserLimits* RAV_lim = new G4UserLimits(); + RAV_lim -> SetMaxAllowedStep(FieldStepLim ); + //RAV_lim->SetUserMaxTrackLength(1.2*m); + RAV_lim-> SetUserMinEkine(1.*eV); + lv_MCPV->SetUserLimits(RAV_lim); + // + +} + + +//§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§// +// DEFINE THE ANODE +//§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§// + +void LEMuSRDetectorConstruction::lemuANODE() +{ + // conical anode + + G4double dSPhie=-acos(1/4.51469); + G4double dEPhie=2*acos(1/4.51469); + RA_E_cone= new G4Cons( "sRA_E", 4.51469*cm,6.25*cm,3.35*cm,3.9*cm,2.25*cm, dSPhie, dEPhie); + + RA_M_cone= new G4Cons( "sRA_M", 5.67937*cm,6.25*cm,4.51469*cm,6.25*cm,2.25*cm, dSPhie, dEPhie); + + RA_Ebox = new G4Box("RA_Ebox", 1.*cm,12.5*cm,2.25*cm ); + RA_Mbox = new G4Box("RA_Mbox", 1.*cm,12.5*cm,2.25*cm ); + //boolean + // RA_E= new G4SubtractionSolid("RA_E", RA_E_cone, RA_Ebox); + // RA_M= new G4SubtractionSolid("RA_M", RA_M_cone, RA_Mbox); + + RA_G_tube= new G4Tubs( "sRA_G", 5.8*cm,6.25*cm,5.55*cm, dSPhi, dEPhi); + + + // logicals volumes + lv_RA_E = new G4LogicalVolume( RA_E_cone , SSteel ,"lv_RA_E",0,0,0); + lv_RA_M = new G4LogicalVolume( RA_M_cone , SSteel ,"lv_RA_M",0,0,0); + lv_RA_G = new G4LogicalVolume( RA_G_tube , SSteel ,"lv_RA_G",0,0,0); + + + // physical volumes + RA_Gz= -25.45+3.75; + RA_Ez= -10.35+2.25; + RA_Mz= -10.35-2.25; + + + //#changed mother volumes!!!! + pv_RA_E = new G4PVPlacement( 0, G4ThreeVector( 0*cm, 0*cm, RA_Ez*cm-mcpv_z),lv_RA_E ,"pv_RA_E",lv_MCPV, false, 0 ); + pv_RA_M = new G4PVPlacement( 0, G4ThreeVector( 0*cm, 0*cm, RA_Mz*cm-mcpv_z),lv_RA_M ,"pv_RA_M",lv_MCPV, false, 0 ); + pv_RA_G = new G4PVPlacement( 0, G4ThreeVector( 0*cm, 0*cm, RA_Gz*cm-mcpv_z),lv_RA_G ,"pv_RA_G",lv_MCPV, false, 0 ); + + rotation1=G4RotateZ3D(180*deg) ; + + G4Transform3D tr_E,tr_M, trl_E, trl_M; + trl_E=G4Translate3D(0.,0.,RA_Ez*cm-mcpv_z); + trl_M=G4Translate3D(0.,0.,RA_Mz*cm-mcpv_z); + + tr_E=trl_E*rotation1; + tr_M=trl_M*rotation1; + + + G4VPhysicalVolume* pv_RA_E2; + pv_RA_E2 = new G4PVPlacement(tr_E,lv_RA_E ,"pv_RA_E2",lv_MCPV, false, 0 ); + G4VPhysicalVolume* pv_RA_M2; + pv_RA_M2 = new G4PVPlacement(tr_M,lv_RA_M ,"pv_RA_M2",lv_MCPV, false, 0 ); + + + // Visual attributes + lv_RA_E->SetVisAttributes(lBlue_style); + lv_RA_M->SetVisAttributes(dBlue_style); + lv_RA_G->SetVisAttributes(lBlue_style); + + +} + + + + + + + +//§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§// +// DEFINE THE CRYOSTAT +//§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§// + +void LEMuSRDetectorConstruction:: lemuCRYO() +{ + + // cu or al plates + SAH1_tube= new G4Tubs( "sSAH1", 0.*cm,3.5*cm,0.25*cm, dSPhi, dEPhi); + SAH2_tube= new G4Tubs( "sSAH2", 0.*cm,3.5*cm,0.2*cm, dSPhi, dEPhi); + SAH3_tube= new G4Tubs( "sSAH3", 2.*cm,3.5*cm,0.05*cm, dSPhi, dEPhi); + SAPH_tube= new G4Tubs( "sSAPH", 0.*cm,3.0*cm,0.3*cm, dSPhi, dEPhi); + + // cryo + COFI_tube= new G4Tubs( "sCOFI", 0.*cm,2.75*cm,0.5*cm, dSPhi, dEPhi); + CRY1_tube= new G4Tubs( "sCRY1", 0.*cm,1.5*cm,0.35*cm, dSPhi, dEPhi); + CRY2_tube= new G4Tubs( "sCRY2", 0.5*cm,1.5*cm,2.5*cm, dSPhi, dEPhi); + CRY3_tube= new G4Tubs( "sCRY3", 3.8*cm,4.7*cm,0.55*cm, dSPhi, dEPhi); + CRY4_tube= new G4Tubs( "sCRY4", 1.5*cm,3.8*cm,0.1*cm, dSPhi, dEPhi); + CRSH_tube= new G4Tubs( "sCRSH", 4.7*cm,4.8*cm,4.5*cm, dSPhi, dEPhi);//HE shield + CRSH2_tube= new G4Tubs( "sCRSH2", 3.0*cm,4.8*cm,.05*cm, dSPhi, dEPhi);//front HE shield + + //materials + SAH_material = G4Material::GetMaterial(Material_SAH);//G4Material::GetMaterial("aluminium"); + SAPH_material = G4Material::GetMaterial("saphire"); + Copper = G4Material::GetMaterial("copper"); + + + Guard_Rings = new G4Tubs ("sGuard",3.0*cm,3.5*cm,0.25*cm, dSPhi, dEPhi); + + + // logicals volumes + + + // sample MAGNETIC field + sampleField = new LEMuSRRNDMAGField(G4ThreeVector(0.,0.,100*gauss),1.); + + G4Mag_SpinEqRhs *Mag_SpinEqRhs; + G4MagIntegratorStepper *pStepper; + Mag_SpinEqRhs = new G4Mag_SpinEqRhs(sampleField); + pStepper = new G4ClassicalRK4( Mag_SpinEqRhs,12 ); + + G4ChordFinder* pChordFinder = new G4ChordFinder(sampleField,1.e-5* mm, pStepper ); + G4FieldManager* sampleFieldMgr = new G4FieldManager(); // 1 + sampleFieldMgr->SetDetectorField(sampleField,true); + sampleFieldMgr->SetChordFinder(pChordFinder); + + + lv_SAH1 = new G4LogicalVolume( SAH1_tube , SAH_material ,"lv_SAH1",0,0,0); + lv_SAH2 = new G4LogicalVolume( SAH2_tube , SAH_material ,"lv_SAH2",0,0,0); + lv_SAH3 = new G4LogicalVolume( SAH3_tube , SAH_material ,"lv_SAH3",0,0,0); + lv_SAPH = new G4LogicalVolume( SAPH_tube , SAPH_material ,"lv_SAPH",0,0,0); + lv_COFI = new G4LogicalVolume( COFI_tube , Copper ,"lv_COFI",0,0,0); + lv_CRY1 = new G4LogicalVolume( CRY1_tube , Copper ,"lv_CRY1",0,0,0); + lv_CRY2 = new G4LogicalVolume( CRY2_tube , Copper ,"lv_CRY2",0,0,0); + lv_CRY3 = new G4LogicalVolume( CRY3_tube , Copper ,"lv_CRY3",0,0,0); + lv_CRY4 = new G4LogicalVolume( CRY4_tube , Copper ,"lv_CRY4",0,0,0); + lv_CRSH = new G4LogicalVolume( CRSH_tube , Copper ,"lv_CRSH",0,0,0); + lv_CRSH2 = new G4LogicalVolume( CRSH2_tube , Copper ,"lv_CRSH2",0,0,0); + + lv_Guards = new G4LogicalVolume(Guard_Rings, Copper, "lv_GRING",0,0,0); + + + + // physical volumes + offset=0.0; + pv_SAH1 = new G4PVPlacement( 0, G4ThreeVector(0 *cm,0 *cm, 2.65*cm-mcpv_z), lv_SAH1 ,"pv_SAH1",lv_MCPV,false, 0 ); + pv_SAH2 = new G4PVPlacement( 0, G4ThreeVector(0 *cm,0 *cm, 1.6*cm-mcpv_z), lv_SAH2 ,"pv_SAH2",lv_MCPV, false, 0 ); + // pv_SAH3 = new G4PVPlacement( 0, G4ThreeVector(0 *cm,0 *cm, 1.35*cm-mcpv_z),lv_SAH3 ,"pv_SAH3",lv_MCPV, false, 0 ); + pv_SAPH = new G4PVPlacement( 0, G4ThreeVector(0 *cm,0 *cm, 2.10*cm-mcpv_z),lv_SAPH ,"pv_SAPH",lv_MCPV, false, 0 ); + pv_COFI = new G4PVPlacement( 0, G4ThreeVector(0 *cm,0 *cm, 3.40*cm-mcpv_z),lv_COFI ,"pv_COFI",lv_MCPV, false, 0 ); + pv_CRY1 = new G4PVPlacement( 0, G4ThreeVector(0 *cm,0 *cm, 4.25*cm-mcpv_z),lv_CRY1 ,"pv_CRY1",lv_MCPV, false, 0 ); + pv_CRY2 = new G4PVPlacement( 0, G4ThreeVector(0 *cm,0 *cm, 6.75*cm-mcpv_z),lv_CRY2 ,"pv_CRY2",lv_MCPV, false, 0 ); + pv_CRY3 = new G4PVPlacement( 0, G4ThreeVector(0 *cm,0 *cm, 5.10*cm-mcpv_z),lv_CRY3 ,"pv_CRY3",lv_MCPV, false, 0 ); + pv_CRY4 = new G4PVPlacement( 0, G4ThreeVector(0 *cm,0 *cm, 5.10*cm-mcpv_z),lv_CRY4 ,"pv_CRY4",lv_MCPV, false, 0 ); + pv_CRSH = new G4PVPlacement( 0, G4ThreeVector(0 *cm,0 *cm, 1.6*cm-mcpv_z),lv_CRSH ,"pv_CRSH", lv_MCPV, false, 0 ); + pv_CRSH2 = new G4PVPlacement( 0, G4ThreeVector(0 *cm,0 *cm, 1.6*cm-mcpv_z-4.55*cm),lv_CRSH2 ,"pv_CRSH2", lv_MCPV, false, 0 ); + + pv_Guard1 = new G4PVPlacement( 0, G4ThreeVector(0 *cm,0 *cm, 1.6*cm- 1.43333*cm-mcpv_z), lv_Guards ,"pv_G_Ring1",lv_MCPV, false, 0); + pv_Guard2 = new G4PVPlacement( 0, G4ThreeVector(0 *cm,0 *cm, 1.6*cm- 1.43333*cm- 1.43333*cm-mcpv_z), lv_Guards ,"pv_G_Ring2",lv_MCPV, false, 0); + + + // Visual Attributes + lv_SAH1->SetVisAttributes(Red_style); + lv_SAH2->SetVisAttributes(Red_style); + lv_SAH3->SetVisAttributes(Red_style); + lv_SAPH->SetVisAttributes(oxsteel); + lv_COFI->SetVisAttributes(dRed_style); + lv_CRY1->SetVisAttributes(dRed_style); + lv_CRY2->SetVisAttributes(dRed_style); + lv_CRY3->SetVisAttributes(dRed_style); + lv_CRY4->SetVisAttributes(dRed_style); + lv_CRSH->SetVisAttributes(dRed_style); + lv_CRSH2->SetVisAttributes(Red_style); + + + + + +} + + + + + +//§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§// +// DEFINE THE MULTIPLE CHANNEL-DETECTOR +//§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§// + +void LEMuSRDetectorConstruction:: lemuMCPdet() +{ + + //MCP + DMCP_tube= new G4Tubs( "sDMCP",0.*cm,2.15*cm,0.15*cm , dSPhi, dEPhi); + MCPM_tube= new G4Tubs( "sMCPM", 2.40*cm, 3.25*cm, 0.075*cm, dSPhi, dEPhi); + MCPA_box = new G4Box( "sMCPA", 3.65*cm, 3.65*cm, 0.40*cm); + ANVA_tube= new G4Tubs( "sANVA", 0.00*cm, 2.75*cm, 0.15*cm, dSPhi, dEPhi); + MCSR_box = new G4Box( "sMCSR", 3.65*cm, 3.65*cm, 0.10*cm); + MCVR_tube= new G4Tubs( "sMCVR", 0.00*cm, 2.75*cm, 0.10*cm, dSPhi, dEPhi); + MCSS_tube= new G4Tubs( "sMCSS", 4.00*cm, 4.80*cm, 0.25*cm, dSPhi, dEPhi); + + //materials + + Macor = G4Material::GetMaterial("macor"); + DMCP_material = G4Material::GetMaterial("mcpglass"); + + + // logicals volumes + lv_DMCP = new G4LogicalVolume( DMCP_tube , DMCP_material ,"lv_DMCP",0,0,0); + lv_MCPM = new G4LogicalVolume( MCPM_tube , Macor ,"lv_MCVR",0,0,0); + lv_MCPA = new G4LogicalVolume( MCPA_box , SSteel ,"lv_MCPA",0,0,0); + lv_ANVA = new G4LogicalVolume( ANVA_tube , Vacuum ,"lv_ANVA",0,0,0); + lv_MCSR = new G4LogicalVolume( MCSR_box , SSteel ,"lv_MCSR",0,0,0); + lv_MCVR = new G4LogicalVolume( MCVR_tube , Vacuum ,"lv_MCVR",0,0,0); + lv_MCSS = new G4LogicalVolume( MCSS_tube , SSteel ,"lv_MCSS",0,0,0); + + + // physical volumes + pv_DMCP = new G4PVPlacement( 0, G4ThreeVector(0 *cm,0 *cm, 2.15*cm-mcpv_z),lv_DMCP ,"pv_DMCP",lv_MCPV, false, 0 ); + pv_MCPM = new G4PVPlacement( 0, G4ThreeVector(0 *cm,0 *cm, 1.955*cm-mcpv_z),lv_MCPM ,"pv_MCPM",lv_MCPV, false, 0 ); + pv_MCPM2= new G4PVPlacement( 0, G4ThreeVector(0 *cm,0 *cm, 2.405*cm-mcpv_z),lv_MCPM ,"pv_MCPM2",lv_MCPV, false, 0 ); + pv_MCSR = new G4PVPlacement( 0, G4ThreeVector( 0.*cm, 0.*cm, 2.63*cm-mcpv_z),lv_MCSR ,"pv_MCSR",lv_MCPV, false, 0 ); + pv_MCVR = new G4PVPlacement( 0, G4ThreeVector( 0.*cm, 0.*cm, 0.0*cm),lv_MCVR ,"pv_MCVR",lv_MCSR, false, 0 );//CF SUBSTRACTION + pv_MCPA = new G4PVPlacement( 0, G4ThreeVector(0 *cm,0 *cm, 3.73*cm-mcpv_z),lv_MCPA ,"pv_MCPA",lv_MCPV, false, 0 ); + pv_ANVA = new G4PVPlacement( 0, G4ThreeVector( 0.*cm, 0.*cm, -0.25*cm),lv_ANVA ,"pv_ANVA",lv_MCPA, false, 0 ); // PART OF THE anode + pv_ANVA2= new G4PVPlacement( 0, G4ThreeVector( 0.*cm, 0.*cm, 0.25*cm),lv_ANVA ,"pv_ANVA2",lv_MCPA, false, 0 ); + pv_MCSS = new G4PVPlacement( 0, G4ThreeVector( 0.*cm, 0.*cm, 6.38*cm-mcpv_z),lv_MCSS ,"pv_MCSS",lv_MCPV, false, 0 ); + + // Visual Attributes + lv_DMCP->SetVisAttributes(MCP_style); + lv_MCPM->SetVisAttributes(MACOR_style); + lv_MCSR->SetVisAttributes(Green_style); + lv_MCVR->SetVisAttributes(VTBB_style); + lv_MCPA->SetVisAttributes(Green_style); + lv_ANVA->SetVisAttributes(VTBB_style); + lv_MCSS ->SetVisAttributes(Green_style); + +} + + + + +//§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§// +// DEFINE THE SCINTILLATOR +//§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§// +void LEMuSRDetectorConstruction::lemuSCINT() +{ + + // solids + SCIS_tube= new G4Tubs("sSCIS",9.0*cm,9.5*cm, 13.0*cm, -45*deg, +90*deg); + SCOS_tube= new G4Tubs("sSCOS",9.6*cm,10.1*cm, 13.0*cm, -45*deg, +90*deg); + + // materials + SC_material= G4Material::GetMaterial("scint"); + + // logical + lv_SCIS= new G4LogicalVolume(SCIS_tube,SC_material,"lv_SCIS",0,0,0); + lv_SCOS= new G4LogicalVolume(SCOS_tube,SC_material,"lv_SCOS",0,0,0); + + // physical + rotation1=G4RotateZ3D(90*deg) ; + rotation2=G4RotateZ3D(180*deg) ; + rotation3=G4RotateZ3D(270*deg) ; + + pv_SCISr = new G4PVPlacement( rotation2,lv_SCIS ,"pv_SCISr",lv_LABO, false, 0 ); + pv_SCOSr = new G4PVPlacement( rotation2,lv_SCOS ,"pv_SCOSr",lv_LABO, false, 0 ); + + + if(halfview==0) + { + pv_SCISt = new G4PVPlacement( rotation1,lv_SCIS ,"pv_SCISt",lv_LABO, false, 0 ); + pv_SCOSt = new G4PVPlacement( rotation1,lv_SCOS ,"pv_SCOSt",lv_LABO, false, 0 ); + + pv_SCISl = new G4PVPlacement( 0 , G4ThreeVector(0 *cm,0 *cm, 0*cm),lv_SCIS ,"pv_SCISl",lv_LABO, false, 0 ); + pv_SCOSl = new G4PVPlacement( 0 , G4ThreeVector(0 *cm,0 *cm, 0*cm),lv_SCOS ,"pv_SCOSl",lv_LABO, false, 0 ); + + pv_SCISb = new G4PVPlacement( rotation3,lv_SCIS ,"pv_SCISb",lv_LABO, false, 0 ); + pv_SCOSb = new G4PVPlacement( rotation3,lv_SCOS ,"pv_SCOSb",lv_LABO, false, 0 ); + + } + else if(halfview==1) + { + pv_SCISb = new G4PVPlacement( rotation3,lv_SCIS ,"pv_SCISb",lv_LABO, false, 0 ); + pv_SCOSb = new G4PVPlacement( rotation3,lv_SCOS ,"pv_SCOSb",lv_LABO, false, 0 ); + pv_SCISt = new G4PVPlacement( rotation1,lv_SCIS ,"pv_SCISt",lv_LABO, false, 0 ); + pv_SCOSt = new G4PVPlacement( rotation1,lv_SCOS ,"pv_SCOSt",lv_LABO, false, 0 ); + } + + + // vis attributes + lv_SCIS->SetVisAttributes(SCINT_style); + lv_SCOS->SetVisAttributes(dSCINT_style); +} + + + +//§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§// +// DEFINE THE THIRD LENS +//§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§// + + +void LEMuSRDetectorConstruction::lemuLinse3() +{ + + // L3 tube + L3VA_tube= new G4Tubs( "sL3VA", 0.*cm,10.0*cm,22.0*cm, dSPhi, dEPhi); + L3ST_tube= new G4Tubs( "sL3ST", 10.0*cm, 10.3*cm, 22.0*cm, dSPhi, dEPhi); + + L3F_tube= new G4Tubs( "sL3F", 10.3*cm, 12.65*cm, 1.2*cm, dSPhi, dEPhi); + + // Ground Potential tubes + L3GP1= new G4Tubs("LGP1", 6.5*cm, 6.7*cm, 6.65*cm, dSPhi, dEPhi); + L3GP2= new G4Tubs("LGP2", 8.1*cm, 8.3*cm, 6.65*cm, dSPhi, dEPhi); + L3GP3= new G4Tubs("LGP3", 6.7*cm,8.1*cm,0.4*cm, dSPhi, dEPhi); + + // High Potential tube + + L3HP1= new G4Tubs("LHP1", 6.5*cm, 8.3*cm, 5.5*cm, dSPhi, dEPhi); + L3HP2= new G4Tubs("LHP2", 6.7*cm, 8.1*cm, 5.*cm, dSPhi, dEPhi); + L3HP4= new G4Tubs("LHP4", 8.1*cm, 8.3*cm, 0.6*cm, dSPhi, dEPhi); + L3HP5= new G4Tubs("LHP5", 6.7*cm, 6.85*cm, 0.75*cm, dSPhi, dEPhi); + + // L3HP_tube= new G4SubtractionSolid("sL3HP", L3HP1, L3HP2); + + + // Logical volumes + + // electric field + + if(elfield==1) + { + + G4ElectricField* L3Field = new LEMuSRElectricField(L3FieldVal, + "/home/l_paraiso/geant4.7.0/LEMuSR/FieldMaps/ThirdLense/L3b.map" + ,"dm",-567,60,60,100); + + //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + + L3FieldMgr = new G4FieldManager();//1 + + G4MagIntegratorStepper *pStepper; + G4El_UsualEqRhs *fEquation = new G4El_UsualEqRhs(L3Field); + + pStepper = new G4ClassicalRK4( fEquation, 12 ); + + // equation considers spin or not + G4ChordFinder* pChordFinder = new G4ChordFinder( L3Field, + 1.e-3 * mm, // Minimum step size + pStepper); + + L3FieldMgr->SetDetectorField(L3Field); + L3FieldMgr->SetChordFinder(pChordFinder); + + lv_L3VA = new G4LogicalVolume( L3VA_tube , Vacuum ,"lv_L3VA",L3FieldMgr,0,0); + + } + + if(elfield==0) + { + lv_L3VA = new G4LogicalVolume( L3VA_tube , Vacuum ,"lv_L3VA",0,0,0); + } + + lv_L3ST = new G4LogicalVolume( L3ST_tube , SSteel ,"lv_L3ST",0,0,0); + + lv_L3F = new G4LogicalVolume( L3F_tube , SSteel ,"lv_L3F",0,0,0); + + lv_L3GP1= new G4LogicalVolume( L3GP1 , SSteel ,"lv_L3GP1",0,0,0); + lv_L3GP2= new G4LogicalVolume( L3GP2 , SSteel ,"lv_L3GP2",0,0,0); + lv_L3GP3= new G4LogicalVolume( L3GP3 , SSteel ,"lv_L3GP3",0,0,0); + + lv_L3HP= new G4LogicalVolume( L3HP1 , SSteel ,"lv_L3HP",0,0,0); + lv_L3HP4= new G4LogicalVolume( L3HP4 , SSteel ,"lv_L3HP4",0,0,0); + lv_L3HP5= new G4LogicalVolume( L3HP5 , SSteel ,"lv_L3HP5",0,0,0); + + + // Physical volumes + L3z= -56.7; + + pv_L3VA = new G4PVPlacement( 0, G4ThreeVector( 0*cm,0 *cm, L3z*cm),lv_L3VA ,"pv_L3VA",lv_LABO, false, 0 ); + pv_L3ST = new G4PVPlacement( 0, G4ThreeVector(0 *cm, 0*cm, L3z*cm),lv_L3ST ,"pv_L3ST",lv_LABO, false, 0 ); + + pv_L3F1 = new G4PVPlacement( 0, G4ThreeVector(0 *cm, 0*cm, (L3z+20.8)*cm),lv_L3F ,"pv_L3F1",lv_LABO, false, 0 ); + pv_L3F2 = new G4PVPlacement( 0, G4ThreeVector(0 *cm, 0*cm, (L3z-20.8)*cm),lv_L3F ,"pv_L3F2",lv_LABO, false, 0 ); + + //ground potential + pv_L3GP1 = new G4PVPlacement( 0, G4ThreeVector( 0.*cm, 0.*cm,13.35*cm),lv_L3GP1 ,"pv_L3GP1",lv_L3VA, false, 0 ); + pv_L3GP2 = new G4PVPlacement( 0, G4ThreeVector( 0.*cm, 0.*cm, 13.35*cm),lv_L3GP2 ,"pv_L3GP2",lv_L3VA, false, 0 ); + pv_L3GP3 = new G4PVPlacement( 0, G4ThreeVector( 0.*cm, 0.*cm, 19.6*cm),lv_L3GP3 ,"pv_L3GP3",lv_L3VA, false, 0 ); + pv_L3GP4 = new G4PVPlacement( 0, G4ThreeVector( 0.*cm, 0.*cm, 7.1*cm),lv_L3GP3 ,"pv_L3GP4",lv_L3VA, false, 0 ); + pv_L3GP5 = new G4PVPlacement( 0, G4ThreeVector( 0.*cm, 0.*cm,-13.35*cm),lv_L3GP1 ,"pv_L3GP5",lv_L3VA, false, 0 ); + pv_L3GP6 = new G4PVPlacement( 0, G4ThreeVector( 0.*cm, 0.*cm, -13.35*cm),lv_L3GP2 ,"pv_L3GP6",lv_L3VA, false, 0 ); + pv_L3GP7 = new G4PVPlacement( 0, G4ThreeVector( 0.*cm, 0.*cm, -19.6*cm),lv_L3GP3 ,"pv_L3GP7",lv_L3VA, false, 0 ); + pv_L3GP8 = new G4PVPlacement( 0, G4ThreeVector( 0.*cm, 0.*cm, -7.1*cm),lv_L3GP3 ,"pv_L3GP8",lv_L3VA, false, 0 ); + + + pv_L3HP = new G4PVPlacement( 0, G4ThreeVector( 0.*cm, 0.*cm,0*cm),lv_L3HP ,"pv_L3HP",lv_L3VA, false, 0 ); + pv_L3HP4 = new G4PVPlacement( 0, G4ThreeVector( 0.*cm, 0.*cm, 6.1*cm),lv_L3HP4 ,"pv_L3HP4",lv_L3VA, false, 0 ); + pv_L3HP5 = new G4PVPlacement( 0, G4ThreeVector( 0.*cm, 0.*cm, 4.425*cm),lv_L3HP5 ,"pv_L3HP5",lv_L3VA, false, 0 ); + pv_L3HP7 = new G4PVPlacement( 0, G4ThreeVector( 0.*cm, 0.*cm, -6.1*cm),lv_L3HP4,"pv_L3HP7",lv_L3VA, false, 0 ); + pv_L3HP8 = new G4PVPlacement( 0, G4ThreeVector( 0.*cm, 0.*cm, -4.425*cm),lv_L3HP5 ,"pv_L3HP8",lv_L3VA, false, 0 ); + + + + + + //Visual Attributes: + // Load attributes and userlimits + + lv_L3VA->SetVisAttributes(G4VisAttributes::Invisible); + lv_L3ST->SetVisAttributes(Blue_style); + lv_L3F->SetVisAttributes(fBlue_style); + + lv_L3GP1->SetVisAttributes(lBlue_style); + lv_L3GP2->SetVisAttributes(Blue_style); + lv_L3GP3->SetVisAttributes(dBlue_style); + + + lv_L3HP->SetVisAttributes(lBlue_style); + lv_L3HP4->SetVisAttributes(Blue_style); + lv_L3HP5->SetVisAttributes(dBlue_style); + + G4UserLimits* L3V_lim = new G4UserLimits(); + L3V_lim -> SetMaxAllowedStep(FieldStepLim ); + //L3V_lim->SetUserMaxTrackLength(1.2*m); + L3V_lim-> SetUserMinEkine(1.*eV); + lv_L3VA->SetUserLimits(L3V_lim); + +} + + + + + +//§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§// +// DEFINE THE TRIGGER DETECTOR +//§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§// + +void LEMuSRDetectorConstruction::lemuTrigger_Detector() +{ + + //--------------------- CYLINDER AND FLANGES-------------------- + + // solids + TriggerV_tube = new G4Tubs("sTriggerV",0.*cm,10.*cm,14.8*cm, dSPhi, dEPhi); + Trigger_tube = new G4Tubs("sTrigger",10.*cm,10.3*cm,14.8*cm, dSPhi, dEPhi); + TriggerF_tube = new G4Tubs( "sTF", 10.3*cm, 12.65*cm, 1.2*cm, dSPhi, dEPhi); + + Trigger_box = new G4Box("TBox", 4.5*cm, 4.5*cm, 0.4*cm); + Trigger_box2 = new G4Box("TBox", 4.*sqrt(2)*cm, 4.5*cm, 0.7/sqrt(2)*cm); + + G4double thk; + thk = (cfthk*1.e-6/2.)*cm;//denominator must correspnd to graphite's density in material def. + Trigger_box3 = new G4Box("TFoilBox", 6*cm, 6*cm,thk/2.); + + + lv_TriggerV = new G4LogicalVolume(TriggerV_tube,Vacuum,"lv_TriggerV",0,0,0); + lv_TriggerF = new G4LogicalVolume(TriggerF_tube,SSteel,"lv_TriggerF",0,0,0); + lv_Trigger = new G4LogicalVolume(Trigger_tube,SSteel,"lv_Trigger",0,0,0); + + Carbon= G4Material::GetMaterial("graphite"); + lv_CFOIL=new G4LogicalVolume(Trigger_box3,Carbon,"lv_CFOIL",0,0,0); + + + G4double Triggerz = -109.2;//L3z - 22 - 15.7 -14.8; + + pv_TriggerV = new G4PVPlacement( 0,G4ThreeVector(0.*cm,0.*cm,Triggerz*cm),lv_TriggerV,"pv_TriggerV",lv_LABO, false, 0 ); + pv_TriggerF1 = new G4PVPlacement( 0,G4ThreeVector(0.*cm,0.*cm,(Triggerz+13.6)*cm),lv_TriggerF,"pv_TriggerF1",lv_LABO, false, 0 ); + pv_TriggerF2 = new G4PVPlacement( 0,G4ThreeVector(0.*cm,0.*cm,(Triggerz-13.6)*cm),lv_TriggerF,"pv_TriggerF2",lv_LABO, false, 0 ); + pv_Trigger = new G4PVPlacement( 0,G4ThreeVector(0.*cm,0.*cm,Triggerz*cm),lv_Trigger,"pv_Trigger",lv_LABO, false, 0 ); + + + + //--------------------- CARBON FOIL----------------------------- + +#ifndef NO_CFOIL + pv_CFOIL = new G4PVPlacement( 0,G4ThreeVector(0.*cm,0.*cm,-4.5*cm),lv_CFOIL,"pv_CFOIL",lv_TriggerV, false, 0 ); +#endif + + //--------------------- ELECTRIC FIELD ZONES-------------------- + + + // field + + T1Field = new G4UniformElectricField(G4ThreeVector(0.,0.,-23.75*kilovolt/meter)); + T1FieldMgr = new G4FieldManager(); + T1FieldMgr->SetDetectorField(T1Field); + + T2Field = new G4UniformElectricField(G4ThreeVector(0.,0.,+41.416*kilovolt/meter)); + T2FieldMgr = new G4FieldManager(); + T2FieldMgr->SetDetectorField(T2Field); + + T3Field = new G4UniformElectricField(G4ThreeVector(0.,0.,-493.75*kilovolt/meter)); + T3FieldMgr = new G4FieldManager(); + T3FieldMgr->SetDetectorField(T3Field); + + G4MagIntegratorStepper *pStepper; + G4El_UsualEqRhs *fEquation = new G4El_UsualEqRhs(T1Field); + pStepper = new G4ClassicalRK4( fEquation, 12 ); + G4ChordFinder* pChordFinder = new G4ChordFinder( T1Field,1e-10 * mm,pStepper); + T1FieldMgr->SetDetectorField(T1Field); + T1FieldMgr->SetChordFinder(pChordFinder); + + G4MagIntegratorStepper *pStepper2; + G4El_UsualEqRhs *fEquation2 = new G4El_UsualEqRhs(T2Field); + pStepper2 = new G4ClassicalRK4( fEquation2, 12 ); + G4ChordFinder* pChordFinder2 = new G4ChordFinder( T2Field,1e-10 * mm,pStepper2); + T2FieldMgr->SetDetectorField(T2Field); + T2FieldMgr->SetChordFinder(pChordFinder2); + + G4MagIntegratorStepper *pStepper3; + G4El_UsualEqRhs *fEquation3 = new G4El_UsualEqRhs(T3Field); + pStepper3 = new G4ClassicalRK4( fEquation3, 12 ); + G4ChordFinder* pChordFinder3 = new G4ChordFinder( T3Field,1e-10 * mm,pStepper3);//minimum step =0 becuz the field is very big! + //therefore, all min step were set to very small values, just in case. + T3FieldMgr->SetDetectorField(T3Field); + T3FieldMgr->SetChordFinder(pChordFinder3); + + + // logical volumes + + + lv_TriggerB=new G4LogicalVolume(Trigger_box,Vacuum,"lv_TriggerB",T1FieldMgr,0,0); + lv_TriggerB2=new G4LogicalVolume(Trigger_box2,Vacuum,"lv_TriggerB2",T2FieldMgr,0,0); + lv_TriggerB3=new G4LogicalVolume(Trigger_box,Vacuum,"lv_TriggerB3",T3FieldMgr,0,0); + + + G4Transform3D Rotation2, transformation2, trl; + trl=G4Translate3D(0.,0.,2.25*mm); + Rotation2= G4Rotate3D(45*deg,G4ThreeVector(0.,1.,0.)); + transformation2=trl*Rotation2; + + + if(trigger_field!=0) + { + pv_TriggerB = new G4PVPlacement( 0,G4ThreeVector(0.*cm,0.*cm,(-3.85)*cm),lv_TriggerB,"pv_TriggerB",lv_TriggerV, false, 0 ); + + pv_TriggerB2 = new G4PVPlacement(transformation2,lv_TriggerB2,"pv_TriggerB2",lv_TriggerV, false, 0 ); + + pv_TriggerB3 = new G4PVPlacement( 0,G4ThreeVector(0.*cm,0.*cm,(+4.3)*cm),lv_TriggerB3,"pv_TriggerB3",lv_TriggerV, false, 0 ); + } + + + //visual attibutes + lv_TriggerV->SetVisAttributes(G4VisAttributes::Invisible); + lv_Trigger->SetVisAttributes(Blue_style); + lv_TriggerF->SetVisAttributes(fBlue_style); + lv_CFOIL->SetVisAttributes(MACOR_style); + + G4UserLimits* RAV_lim = new G4UserLimits(); + // RAV_lim -> SetMaxAllowedStep(FieldStepLim ); + // RAV_lim->SetUserMaxTrackLength(1.2*m); + RAV_lim-> SetUserMinEkine(1.*eV); + lv_TriggerV->SetUserLimits(RAV_lim); + +} + + + +//§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§// +// DEFINE THE COMPENSATION GATE +//§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§// + +void LEMuSRDetectorConstruction::lemuCGate() +{ + + // solids + CGateV_tube = new G4Tubs("sCGateV",0.*cm,10.*cm,7.85*cm, dSPhi, dEPhi); + CGate_tube = new G4Tubs("sCGate",10.*cm,10.3*cm,7.85*cm, dSPhi, dEPhi); + CGateF_tube = new G4Tubs( "sCGF", 10.3*cm, 12.65*cm, 1.2*cm, dSPhi, dEPhi); + + + // logical volumes + lv_CGateV = new G4LogicalVolume(CGateV_tube,Vacuum,"lv_CGateV",0,0,0); + lv_CGateF = new G4LogicalVolume(CGateF_tube,SSteel,"lv_CGateF",0,0,0); + lv_CGate = new G4LogicalVolume(CGate_tube,SSteel,"lv_CGate",0,0,0); + + + G4double CompGatez=-86.55 ;// L3z-22-7.85; + + pv_CGateV = new G4PVPlacement( 0,G4ThreeVector(0.*cm,0.*cm,CompGatez*cm),lv_CGateV,"pv_CGateV",lv_LABO, false, 0 ); + pv_CGateF1 = new G4PVPlacement( 0,G4ThreeVector(0.*cm,0.*cm,(CompGatez+6.65)*cm),lv_CGateF,"pv_CGateF1",lv_LABO, false, 0 ); + pv_CGateF2 = new G4PVPlacement( 0,G4ThreeVector(0.*cm,0.*cm,(CompGatez-6.65)*cm),lv_CGateF,"pv_CGateF2",lv_LABO, false, 0 ); + pv_CGate = new G4PVPlacement( 0,G4ThreeVector(0.*cm,0.*cm,CompGatez*cm),lv_CGate,"pv_CGate",lv_LABO, false, 0 ); + + //visual attibutes + lv_CGateV->SetVisAttributes(G4VisAttributes::Invisible); + lv_CGate->SetVisAttributes(Blue_style); + lv_CGateF->SetVisAttributes(fBlue_style); + + G4UserLimits* RAV_lim = new G4UserLimits(); + RAV_lim -> SetMaxAllowedStep(FieldStepLim ); + // RAV_lim->SetUserMaxTrackLength(1.2*m); + RAV_lim-> SetUserMinEkine(1.*eV); + lv_CGateV->SetUserLimits(RAV_lim); + +} + + + +//§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§// +// DEFINE THE FIELDS +//§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§// + + + +void LEMuSRDetectorConstruction::buildAnodeField() +{ + + + char dir[256]="\0"; + + int k=2*Grid+Guards; + std::cout<<"k: "<GetFieldValue(position,Efield); + do + { + + GField->GetFieldValue(position,Efield); + G4cout<SetDetectorField(GField,false); + GFieldMgr->SetChordFinder(pChordFinder); + + lv_MCPV = new G4LogicalVolume( MCPV_tube, Vacuum ,"lv_MCPV",GFieldMgr,0,0); + + +#ifdef DEBUG_INTERPOLATING_FIELD + //**************************************************************************// + G4double Efield[3]; + G4double position[4]; + position[0]=0*mm; + position[1]=0*mm; + position[2]=-103*mm; + position[3]=0*mm; + GField->GetFieldValue(position,Efield); + do + { + G4cout<<"Position? "<>position[0]>>position[1]>>position[2]>>position[3]; + GField->GetFieldValue(position,Efield); + G4cout<<"Field E Value " << G4BestUnit(Efield[0]*meter,"Electric potential") <<"/m " <SetDetectorField(EMField,true); + EMFieldMgr->SetChordFinder(EMChordFinder); + + + lv_MCPV = new G4LogicalVolume( MCPV_tube , Vacuum ,"lv_MCPV",EMFieldMgr,0,0); + + + ////////////////// +#ifdef DEBUG_INTERPOLATING_FIELD + G4double EBfield[6]; + G4double position[4]; + position[0]=0*mm; + position[1]=0*mm; + position[2]=-300.*mm; + position[3]=0; + GField->GetFieldValue(position,EBfield); + do + { + + EMField->GetFieldValue(position,EBfield); + G4cout<GetFieldManager(); // 2 + mcFieldMgr->SetDetectorField(mcField,true); + mcFieldMgr->SetChordFinder(pChordFinder); + lv_MCPV = new G4LogicalVolume( MCPV_tube , Vacuum ,"lv_MCPV",mcFieldMgr,0,0); + } + if(magfield==0) + { + // 4 no field at all + lv_MCPV = new G4LogicalVolume( MCPV_tube , Vacuum ,"lv_MCPV",0,0,0); + } + + + } + + +} + + + + + +void LEMuSRDetectorConstruction::buildCryoField() +{ + // sample ELECTRIC field + G4double d= cryoFieldLength*cm; + G4double V= cryoVoltage*kilovolt; + + G4ThreeVector C_field(0.,0.,-V/d); + + + // char dir[]="/home/l_paraiso/geant4.7.0/LEMuSR/FieldMaps/MCPV-80-80-200/Grid_NoGuards/"; + + char dir[256]; + int k=2*Grid+Guards; + switch(k) + { + + case 0: + stpcpy(dir,"/home/l_paraiso/geant4.7.0/LEMuSR/FieldMaps/MCPV-80-80-200/No_Grid_NoGuards/\0"); break; + + case 1: + stpcpy(dir,"/home/l_paraiso/geant4.7.0/LEMuSR/FieldMaps/MCPV-80-80-200/No_Grid_Guards/\0"); break; + + case 2: + stpcpy(dir,"/home/l_paraiso/geant4.7.0/LEMuSR/FieldMaps/MCPV-80-80-200/Grid_NoGuards/\0"); break; + + case 3: + stpcpy(dir,"/home/l_paraiso/geant4.7.0/LEMuSR/FieldMaps/MCPV-80-80-200/Grid_Guards/\0"); break; + + default: break; + } + + + char filename[]="SAMPLE.map"; + + const char* fmap=strcat(dir,filename); + + cryoField = new LEMuSRElectricField(cryoVoltage,fmap,"mm",0.0,80,80,200);//offset in milimeters) + + +#ifdef DEBUG_INTERPOLATING_FIELD + + G4double Efield[3]; + G4double position[4]; + position[0]=0*mm; + position[1]=0*mm; + position[2]=-100.*mm; + position[3]=0; + cryoField->GetFieldValue(position,Efield); + do + { + + cryoField->GetFieldValue(position,Efield); + G4cout<SetGuidance("Set detector parameters"); + + // commands + SetDetMode = new G4UIcmdWithAString("/Detector/Mode",this); + SetDetMode->SetGuidance("\n mcp: multiple channel mode \n cryo: cryostat mode "); + SetDetMode->SetParameterName("mode",false); + SetDetMode->SetDefaultValue("mcp"); + SetDetMode->AvailableForStates(G4State_PreInit,G4State_Idle); + + + // commands + + // El field on/off + SetElField = new G4UIcmdWithAString("/Detector/ElectricField",this); + SetElField->SetGuidance("\n on: electric field on \n off: electric field off "); + SetElField->SetParameterName("field",false); + SetElField->SetDefaultValue("on"); + SetElField->AvailableForStates(G4State_PreInit,G4State_Idle); + + + // Grid on/off + SetGrid = new G4UIcmdWithAString("/Detector/Sample/Grid",this); + SetGrid->SetGuidance("\n on: Sample Grid on \n off: Sample Grid off "); + SetGrid->SetParameterName("grid",false); + SetGrid->SetDefaultValue("on"); + SetGrid->AvailableForStates(G4State_PreInit,G4State_Idle); + + + // Guards on/off + SetGuards = new G4UIcmdWithAString("/Detector/Sample/Guards",this); + SetGuards->SetGuidance("\n on: Sample Guards Rings on \n off: Sample Guards off "); + SetGuards->SetParameterName("guards",false); + SetGuards->SetDefaultValue("on"); + SetGuards->AvailableForStates(G4State_PreInit,G4State_Idle); + + + // ASYM + SetAsymCheck = new G4UIcmdWithAString("/Detector/AsymCheck",this); + SetAsymCheck->SetGuidance("\n on: asym on \n off:asym off "); + SetAsymCheck->SetParameterName("asym",false); + SetAsymCheck->SetDefaultValue("on"); + SetAsymCheck->AvailableForStates(G4State_PreInit,G4State_Idle); + + + // SAH MATERIAL + SetSAHmaterial = new G4UIcmdWithAString("/Detector/Sample/Material",this); + SetSAHmaterial->SetGuidance("\n Sample material"); + SetSAHmaterial->SetParameterName("material",false); + SetSAHmaterial->SetDefaultValue("copper"); + SetSAHmaterial->AvailableForStates(G4State_PreInit,G4State_Idle); + + + + // ELECTRIC POTENTIALS + SetThirdLensPotential = new G4UIcmdWithADouble("/Detector/Voltage/ThirdLense",this); + SetThirdLensPotential->SetGuidance("\n Third Lense Middle Cylinder Voltage Value >> IN KILOVOLT "); + SetThirdLensPotential->SetParameterName("f",false); + SetThirdLensPotential->SetDefaultValue(1); + SetThirdLensPotential->AvailableForStates(G4State_PreInit,G4State_Idle); + + SetMagField = new G4UIcmdWithADouble("/Detector/MagneticField",this); + SetMagField->SetGuidance("\n Magnetic Field Max Value >>> in GAUSS "); + SetMagField->SetParameterName("f",false); + SetMagField->SetDefaultValue(100); + SetMagField->AvailableForStates(G4State_PreInit,G4State_Idle); + + + + + SetRAPotential = new G4UIcmdWith3Vector("/Detector/Voltage/ConicalAnode",this); + SetRAPotential->SetGuidance("\n Conical anode left and right side Voltage Values >> IN KILOVOLT; set build to !=0 to build the detector "); + SetRAPotential->SetParameterName("RA-Left Voltage [kV]","RA-Right Voltage [kV]","Build",false,true); + SetRAPotential->SetDefaultValue(Hep3Vector(8.1,8.1,1.0)); + SetRAPotential->AvailableForStates(G4State_PreInit,G4State_Idle); + + SetCryoPotential = new G4UIcmdWithADouble("/Detector/Voltage/Cryo",this); + SetCryoPotential->SetGuidance("\n Cryo voltage in kV "); + SetCryoPotential->SetParameterName("Voltage [kV]",true,true); + SetCryoPotential->SetDefaultValue(7.2); + SetCryoPotential->AvailableForStates(G4State_PreInit,G4State_Idle); + + + + SetDetVisualization = new G4UIcmdWithAString("/Detector/View",this); + SetDetVisualization->SetGuidance("\n quarter: quarter cut view of the detector \n half: half cut view of the detector \n total: view of the total detector "); + SetDetVisualization->SetParameterName("view",false); + SetDetVisualization->SetDefaultValue("total"); + SetDetVisualization->AvailableForStates(G4State_PreInit,G4State_Idle); + + SetFieldStepLim = new G4UIcmdWithADouble("/Detector/MaxStepInField",this); + SetFieldStepLim->SetGuidance("\n The user step limitation in third lense and conical anode [mm] "); + SetFieldStepLim->SetParameterName("usl",false); + SetFieldStepLim->SetDefaultValue(10.); + SetFieldStepLim->AvailableForStates(G4State_PreInit,G4State_Idle); + + + // Carbon Foil + SetCFthk = new G4UIcmdWithADouble("/Detector/CfoilThickness",this); + SetCFthk->SetGuidance("\n Carbon foil thickness; unit is mug/cm2 "); + SetCFthk->SetParameterName("f",false); + SetCFthk->SetDefaultValue(1.0); + SetCFthk->AvailableForStates(G4State_PreInit,G4State_Idle); + + +} + +LEMuSRDetectorMessenger::~LEMuSRDetectorMessenger() +{ + delete theDetector; + delete DetMode; + delete SetMagField; + delete SetThirdLensPotential; + delete SetCFthk; + delete SetCryoPotential; + delete SetRAPotential; + delete SetElField; + delete SetGrid; + delete SetGuards; + delete SetFieldCheck; + delete SetAsymCheck; + delete SetDetMode; + delete SetDetVisualization; + delete SetFieldStepLim; + delete SetSAHmaterial; + +} + + +void LEMuSRDetectorMessenger::SetNewValue(G4UIcommand* command, G4String newvalue)//MUST have the name SetNewValue:: inherited method from messenger class. +{ + G4UImanager* UI = G4UImanager::GetUIpointer(); + + + if(command == SetDetMode) + { + if(newvalue=="mcp") + { + theDetector->mcdetector=1; + } + else if(newvalue=="cryo") + { + theDetector->mcdetector=0; + } + else + { + G4cout << "Unknown command: please check value."<Construct(); + G4cout << "New detector built."<DefineWorldVolume(newDetector); + + G4cout << " runmanager updated\n" ; + + // Actualisation du visualiseur + //UI ->ApplyCommand("/vis/viewer/refresh") ; + //UI ->ApplyCommand("/vis/viewer/update"); + + } + + + else if(command == SetThirdLensPotential) + { + if(SetThirdLensPotential->GetNewDoubleValue(newvalue)!=0.) + { + theDetector->elfield=1; + theDetector->L3FieldVal=SetThirdLensPotential->GetNewDoubleValue(newvalue); + } + + else if(SetThirdLensPotential->GetNewDoubleValue(newvalue)==0.) + { + theDetector->elfield=0; + + } + newDetector = theDetector->Construct(); + G4RunManager::GetRunManager()->DefineWorldVolume(newDetector); + + } + + else if(command == SetMagField) + { + if(SetMagField->GetNewDoubleValue(newvalue)!=0.) + { + theDetector->magfield=1; + theDetector->B=SetMagField->GetNewDoubleValue(newvalue); + } + else if(SetMagField->GetNewDoubleValue(newvalue)==0.) + { + theDetector->magfield=0; + } + newDetector = theDetector->Construct(); + G4RunManager::GetRunManager()->DefineWorldVolume(newDetector); + } + + + + else if(command == SetSAHmaterial) + { + if(G4Material::GetMaterial(newvalue)) + { + theDetector->Material_SAH=newvalue; + newDetector = theDetector->Construct(); + G4RunManager::GetRunManager()->DefineWorldVolume(newDetector); + } + else + { + G4cout<<":-? Material "<Material_SAH<<"."<cfthk=SetCFthk->GetNewDoubleValue(newvalue); + newDetector = theDetector->Construct(); + G4RunManager::GetRunManager()->DefineWorldVolume(newDetector); + G4cout<<"Thickness: " << LEMuSRDetectorConstruction::GetInstance()->cfthk<GetNew3VectorValue(newvalue).x(); + rar = SetRAPotential->GetNew3VectorValue(newvalue).y(); + build = SetRAPotential->GetNew3VectorValue(newvalue).z(); + + theDetector->RALval=ral; + theDetector->RARval=rar; + G4cout<<"Conical anode Voltage:\n RA-L: "<< ral <<"[kV] RA-R: "<anode_elfield=1; + if(build!=0.0) + { + newDetector = theDetector->Construct(); + G4RunManager::GetRunManager()->DefineWorldVolume(newDetector); + } + + else + { + G4cout<<"\n ~~~~~~~~~~~~~ATTENTION:: DETECTOR NOT BUILT~~~~~~~~~~~~"<GetNewDoubleValue(newvalue); + + theDetector->cryoVoltage=V; + G4cout<<"Cryo Voltage:\n V: "<< V <<"[kV]"<anode_elfield=1; + newDetector = theDetector->Construct(); + G4RunManager::GetRunManager()->DefineWorldVolume(newDetector); + } + + + + else if(command == SetElField) + { + if(newvalue=="on") + { + // theDetector->elfield=1; + // theDetector->anode_elfield=1; + theDetector->trigger_field=1; + G4cout<<"THIS COMMAND ONLY ENABLES THE TRIGGER FIELD.\n" + <<" TO SET THE ELECTROSTATIC LENSES USE /Detector/Voltage COMMAND."<elfield=0; + theDetector->anode_elfield=0; + theDetector->trigger_field=0; + } + else + { + G4cout<<"UNRECOGNIZED COMMAND ENTER on OR off."<Construct(); + G4RunManager::GetRunManager()->DefineWorldVolume(newDetector); + + } + + + + // SAMPLE GRID + else if(command == SetGrid) + { + if(newvalue=="on") + { + theDetector->Grid=1; + + } + + else if(newvalue=="off") + { + + theDetector->Grid=0; + + } + G4cout<<"SAMPLE CRYOSTAT:: GRID ON ==>> DON'T FORGET TO REBUILD DETECTOR"<Guards=1; + + } + + else if(newvalue=="off") + { + + theDetector->Guards=0; + + } + G4cout<<"SAMPLE CRYOSTAT:: GUARDS ON ==>> DON'T FORGET TO REBUILD DETECTOR"<FieldStepLim=SetFieldStepLim->GetNewDoubleValue(newvalue)*mm; + newDetector = theDetector->Construct(); + G4RunManager::GetRunManager()->DefineWorldVolume(newDetector); + } + + + + else if(command == SetAsymCheck) + { + if(newvalue=="on") + { + theDetector->AsymCheck=1; + + } + + else if(newvalue=="off") + { + theDetector->AsymCheck=0; + + } + newDetector = theDetector->Construct(); + G4RunManager::GetRunManager()->DefineWorldVolume(newDetector); + + } + + + else if(command == SetDetVisualization) + { + if(newvalue=="total") + { + theDetector->dSPhi=0*deg; + theDetector->dEPhi=360*deg; + theDetector->halfview=0; + } + else if(newvalue=="half") + { + theDetector->dSPhi=+90*deg; + theDetector->dEPhi=180*deg; + theDetector->halfview=1; + } + else if(newvalue=="quarter") + { + theDetector->dSPhi=0*deg; + theDetector->dEPhi=270*deg; + theDetector->halfview=1; + } + else + { + G4cout << "Unknown command: please check value."<Construct(); + G4RunManager::GetRunManager()->DefineWorldVolume(newDetector); + + G4cout << " \n !!! BEFORE '/run/beamOn' :: PLEASE ENSURE TOTAL GEOMETRY IS LOADED !!! \n" ; + // Update visualization + //UI ->ApplyCommand("/vis/viewer/refresh") ; + //UI ->ApplyCommand("/vis/viewer/update"); + + } + + else + { + G4cout << "Unknown command: please check value."< + + +LEMuSREMPhysics::LEMuSREMPhysics(const G4String& name) + : G4VPhysicsConstructor(name) +{ +} + +LEMuSREMPhysics::~LEMuSREMPhysics() +{ +} + +#include "G4ParticleDefinition.hh" +#include "G4ParticleTable.hh" + +#include "G4Gamma.hh" + +#include "G4Electron.hh" +#include "G4Positron.hh" + +#include "G4NeutrinoE.hh" +#include "G4AntiNeutrinoE.hh" +#include "G4UserSpecialCuts.hh" +void LEMuSREMPhysics::ConstructParticle() +{ + // gamma + G4Gamma::GammaDefinition(); + + // electron + G4Electron::ElectronDefinition(); + G4Positron::PositronDefinition(); + G4NeutrinoE::NeutrinoEDefinition(); + G4AntiNeutrinoE::AntiNeutrinoEDefinition(); +} + + +#include "G4ProcessManager.hh" + + +void LEMuSREMPhysics::ConstructProcess() +{ + G4ProcessManager * pManager = 0; + + // Gamma Physics + pManager = G4Gamma::Gamma()->GetProcessManager(); + pManager->AddDiscreteProcess(&thePhotoEffect); + pManager->AddDiscreteProcess(&theComptonEffect); + pManager->AddDiscreteProcess(&thePairProduction); + pManager->AddProcess(new G4UserSpecialCuts(),-1,-1,1); + // Electron Physics + pManager = G4Electron::Electron()->GetProcessManager(); + + pManager->AddProcess(&theElectronMultipleScattering, -1, 1, 1); + pManager->AddProcess(&theElectronIonisation, -1, 2, 2); + pManager->AddProcess(&theElectronBremsStrahlung, -1, 3, 3); + pManager->AddProcess(new G4UserSpecialCuts(),-1,-1,4); + + //Positron Physics + pManager = G4Positron::Positron()->GetProcessManager(); + + pManager->AddProcess(&thePositronMultipleScattering, -1, 1, 1); + pManager->AddProcess(&thePositronIonisation, -1, 2, 2); + pManager->AddProcess(&thePositronBremsStrahlung, -1, 3, 3); + pManager->AddProcess(&theAnnihilation, 0,-1, 4); + pManager->AddProcess(new G4UserSpecialCuts(),-1,-1,5); +} + + + diff --git a/geant4/LEMuSR/src/LEMuSRElFieldMix.cc b/geant4/LEMuSR/src/LEMuSRElFieldMix.cc new file mode 100644 index 0000000..3721046 --- /dev/null +++ b/geant4/LEMuSR/src/LEMuSRElFieldMix.cc @@ -0,0 +1,95 @@ +///§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§//* +// LOW ENERGY MUON SPIN RELAXATION, ROTATION, RADIATION +// +// ID :LEMuSRElFieldMix.cc , v 1.3 +// AUTHOR: Taofiq PARAISO +// DATE : 2004-09-17 10:20 +//§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§// +// +// & &&&&&&&&&& &&&&&&& &&&&&&&& +// & & && && & && +// & & & & & & && +// & &&&&&&& & & &&&&&& &&&&&&&& +// & & & && & & && +// & & && & & && && & & +// &&&&&&&&&& &&&&&&&&&& & &&&&& && &&&&&&& & && +// & +// & +// & +// & +// Electric Field +//§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§// +#include"LEMuSRElFieldMix.hh" +#include"G4UnitsTable.hh" + + +LEMuSRElFieldMix::LEMuSRElFieldMix( LEMuSRElectricField *E1, LEMuSRElectricField *E2, G4double field1_val, G4double field2_val) +{ + coef1 = field1_val; + coef2 = field2_val; + field1 = E1; + field2 = E2; + G4cout<<"FIELDMIX COEFS "<< coef1 <<"AND "<< coef2<minz <maxz <GetFieldValue(position, Bfield1); + // G4cout<<"Field 1 Value " << G4BestUnit(Bfield1[0]*coef1*meter,"Electric potential") <<"/m " <GetFieldValue(position2, Bfield2); + // G4cout<<"Field 2 Value " << G4BestUnit(Bfield2[0]*coef2*meter,"Electric potential") <<"/m " < + +LEMuSRElMagField::LEMuSRElMagField( G4ElectricField *E, G4MagneticField *B, G4double field1_val, G4double field2_val) +{ + coef1 = field1_val; + coef2 = field2_val; + field1 = E; + field2 = B; + G4cout<<"ELMAGFIELD COEFS "<< coef1 <<"AND "<< coef2<minz <maxz <GetFieldValue(position, Efield); + + field2->GetFieldValue(position2, Bfield); + /* + G4cout<<"Field E Value " << G4BestUnit(Efield[0]*coef1*meter,"Electric potential") <<"/m " <> xval >> yval >> zval >> bx; + fy >> xval >> yval >> zval >> by; + fz >> xval >> yval >> zval >> bz; + + xField[ix][iy][iz] = bx*volt/meter; + yField[ix][iy][iz] = by*volt/meter; + zField[ix][iy][iz] = bz*volt/meter; + if (firstline==0) + { + minx =xval; + miny =yval; + minz =zval; + + firstline=1; + } + + } + } + } + + + fx.close(); fy.close(); fz.close(); + + maxx = xval; + maxy = yval; + maxz = zval; + + G4cout<>output_name; + std::ofstream fout (output_name); // open destination file + fout.close (); + + + fout.open(output_name); + if (!fout.is_open()) exit(8); + + for (ix=0; ix>bx >>by >>bz; + + xField[ix][iy][iz] = bx*volt/meter; + yField[ix][iy][iz] = by*volt/meter; + zField[ix][iy][iz] = bz*volt/meter; + + } + } + } + + fmap>> maxx >> maxy >> maxz ; + fmap>> minx >> miny >> minz ; + G4cout<< maxx<<" " << maxy<<" " <> zöro"; + } + + + + G4double x = (point[0]/mm)/length_ratio; + G4double y = (point[1]/mm)/length_ratio; + G4double z = ((point[2] - zOffset)/mm)/length_ratio; + + +#ifdef DEBUG_INTERPOLATING_FIELD + + G4cout<<"POSITION:: " <=minx && x<=maxx && y>=miny && y<=maxy && (z)>=minz && (z)<=maxz ) + { + + // Position of given point within region, normalized to the range + // [0,1] + G4double xfraction = (x - minx) / (maxx-minx); + G4double yfraction = (y - miny) / (maxy-miny); + G4double zfraction = (z - minz) / (maxz-minz);//!!!!! PROBLEM MAY BE HERE + + // Need addresses of these to pass to modf below. + // modf uses its second argument as an OUTPUT argument. + G4double xdindex, ydindex, zdindex; + + // Position of the point within the cuboid defined by the + // nearest surrounding tabulated points + + G4double xlocal = ( modf(xfraction*(nx-1), &xdindex)); + G4double ylocal = ( modf(yfraction*(ny-1), &ydindex)); + G4double zlocal = ( modf(zfraction*(nz-1), &zdindex)); + + // The indices of the nearest tabulated point whose coordinates + // are all less than those of the given point + /* int xindex = static_cast(xdindex); + int yindex = static_cast(ydindex); + int zindex = static_cast(zdindex); + */ + G4int xindex = (G4int)(xdindex); + G4int yindex = (G4int)(ydindex); + G4int zindex = (G4int)(zdindex); + + +#ifdef DEBUG_INTERPOLATING_FIELD + G4cout << "Local x,y,z: " << xlocal << " " << ylocal << " " << zlocal << endl; + G4cout << "Index x,y,z: " << xindex << " " << yindex << " " << zindex << endl; +#endif + + //********************* FIELD INTERPOLATION***************************// + //*********** FROM GEANT4 EXTENDED EXAMPLE PURGING MAGNET ************// + + // Full 3-dimensional version + + // example: if map_unit= 'dm' multiply by 10 since field map generated by femlab is in volt/decimeter! in order to get the field in V/m. + + Bfield[0] = + (xField[xindex ][yindex ][zindex ] * (1-xlocal) * (1-ylocal) * (1-zlocal) + + xField[xindex ][yindex ][zindex+1] * (1-xlocal) * (1-ylocal) * zlocal + + xField[xindex ][yindex+1][zindex ] * (1-xlocal) * ylocal * (1-zlocal) + + xField[xindex ][yindex+1][zindex+1] * (1-xlocal) * ylocal * zlocal + + xField[xindex+1][yindex ][zindex ] * xlocal * (1-ylocal) * (1-zlocal) + + xField[xindex+1][yindex ][zindex+1] * xlocal * (1-ylocal) * zlocal + + xField[xindex+1][yindex+1][zindex ] * xlocal * ylocal * (1-zlocal) + + xField[xindex+1][yindex+1][zindex+1] * xlocal * ylocal * zlocal); + Bfield[1] = + (yField[xindex ][yindex ][zindex ] * (1-xlocal) * (1-ylocal) * (1-zlocal) + + yField[xindex ][yindex ][zindex+1] * (1-xlocal) * (1-ylocal) * zlocal + + yField[xindex ][yindex+1][zindex ] * (1-xlocal) * ylocal * (1-zlocal) + + yField[xindex ][yindex+1][zindex+1] * (1-xlocal) * ylocal * zlocal + + yField[xindex+1][yindex ][zindex ] * xlocal * (1-ylocal) * (1-zlocal) + + yField[xindex+1][yindex ][zindex+1] * xlocal * (1-ylocal) * zlocal + + yField[xindex+1][yindex+1][zindex ] * xlocal * ylocal * (1-zlocal) + + yField[xindex+1][yindex+1][zindex+1] * xlocal * ylocal * zlocal); + Bfield[2] = + (zField[xindex ][yindex ][zindex ] * (1-xlocal) * (1-ylocal) * (1-zlocal) + + zField[xindex ][yindex ][zindex+1] * (1-xlocal) * (1-ylocal) * zlocal + + zField[xindex ][yindex+1][zindex ] * (1-xlocal) * ylocal * (1-zlocal) + + zField[xindex ][yindex+1][zindex+1] * (1-xlocal) * ylocal * zlocal + + zField[xindex+1][yindex ][zindex ] * xlocal * (1-ylocal) * (1-zlocal) + + zField[xindex+1][yindex ][zindex+1] * xlocal * (1-ylocal) * zlocal + + zField[xindex+1][yindex+1][zindex ] * xlocal * ylocal * (1-zlocal) + + zField[xindex+1][yindex+1][zindex+1] * xlocal * ylocal * zlocal); + + } else { + // G4cout<<"RANGE ERROR=>field 0:: RANGE is " << minx <<" " << maxx <<" " << miny <<" " << maxy <<" " << minz <<" "<< maxz <<" "; + Bfield[0] = 0.0; + Bfield[1] = 0.0; + Bfield[2] = 0.0; + } + + + //G4cout<<"Field Value " << G4BestUnit(Bfield[0]*meter,"Electric potential") <<"/m " <GetCollectionID("InnerScintCollection"); + + } + + if(oScintCollID<0) + { + oScintCollID = SDman->GetCollectionID("OuterScintCollection"); + + } + + // check detectors mode (mcp or cryo => k) + LEMuSRDetectorConstruction* lemuDet = LEMuSRDetectorConstruction::GetInstance(); + G4double k = lemuDet->GetParamMC(); + if(k==1){ + if(McpCollID<0) + { + McpCollID = SDman->GetCollectionID("McpCollection"); + } + } + else{ + if(CryoCollID<0) + { + CryoCollID = SDman->GetCollectionID("CryoCollection"); + } + } + + +} + + + +void LEMuSREventAction::EndOfEventAction(const G4Event* evt) +{ + // G4cout << ">>> Event " << evt->GetEventID() << G4endl; + + + // extract the trajectories and draw them + + if (G4VVisManager::GetConcreteInstance()) + { + G4TrajectoryContainer * trajectoryContainer = evt->GetTrajectoryContainer(); + G4int n_trajectories = 0; + if (trajectoryContainer) n_trajectories = trajectoryContainer->entries(); + + for (G4int i=0; iGetTrajectoryContainer()))[i]); + if (drawFlag == "all") trj->DrawTrajectory(500); + else if ((drawFlag == "charged")&&(trj->GetCharge() != 0.)) + trj->DrawTrajectory(50); + else if ((drawFlag == "neutral")&&(trj->GetCharge() == 0.)) + trj->DrawTrajectory(50); + } + } + + // SDCollManagement(evt); + +} + + +void LEMuSREventAction::SDCollManagement(const G4Event* evt) +{ + + // informations about hits and draw them + int nos_hit, nis_hit, nm_hit, nc_hit; + + + + if(iScintCollID<0||oScintCollID<0) + { + G4cout<<"IDERROR"; + return; + } + G4HCofThisEvent * HCE = evt->GetHCofThisEvent(); + LEMuSRScintHitsCollection* iScintHC = 0; + LEMuSROScintHitsCollection* oScintHC = 0; + LEMuSRMcpHitsCollection* McpHC = 0; + LEMuSRCryoHitsCollection* CryoHC = 0; + + + // check detectors mode (mcp or cryo => k) + LEMuSRDetectorConstruction* lemuDet = LEMuSRDetectorConstruction::GetInstance(); + G4double k = lemuDet->GetParamMC(); + + if(HCE) + { + iScintHC = (LEMuSRScintHitsCollection*)(HCE->GetHC(iScintCollID)); + oScintHC = (LEMuSROScintHitsCollection*)(HCE->GetHC(oScintCollID)); + if(k==0) {CryoHC = (LEMuSRCryoHitsCollection*)(HCE->GetHC(CryoCollID));} + else{ McpHC = (LEMuSRMcpHitsCollection*)(HCE->GetHC(McpCollID));} + } + + + if(iScintHC) + { + nis_hit = iScintHC->entries(); + // G4cout << " " << nis_hit + // << " hits are stored in LEMuSRHitsCollection for SCIS." << G4endl; + } + + if(oScintHC) + { + nos_hit = oScintHC->entries(); + // G4cout << " " << nos_hit + // << " hits are stored in LEMuSRHitsCollection for SCOS." << G4endl; + + } + + + + + if(k==0) + { + if (CryoCollID <0) return ; + + if(CryoHC) + { + nc_hit = CryoHC->entries(); + // G4cout << " " << nc_hit + // << " hits are stored in LEMuSRHitsCollection for CRYO." << G4endl; + + + + for(int i=0;iGetEnergyDeposition()/keV; + + } + } + } + + else if(k==1) + { + if(McpCollID <0) return ; + if(McpHC) + { + nm_hit = McpHC->entries(); + // G4cout << " " << nm_hit + // << " hits are stored in LEMuSRHitsCollection for MCP." << G4endl; + + } + } + + + +} diff --git a/geant4/LEMuSR/src/LEMuSRGeneralPhysics.cc b/geant4/LEMuSR/src/LEMuSRGeneralPhysics.cc new file mode 100644 index 0000000..9979675 --- /dev/null +++ b/geant4/LEMuSR/src/LEMuSRGeneralPhysics.cc @@ -0,0 +1,105 @@ + //§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§//* +// LOW ENERGY MUON SPIN RELAXATION, ROTATION, RADIATION +// +// ID : LEMuSRGeneralPhysics.cc , v 1.1 +// AUTHOR: Taofiq PARAISO +// DATE : 2004-08-24 16:33 +//§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§// +// +// & &&&&&&&&&& &&&&&&& &&&&&&&& +// & & && && & && +// & & & & & & && +// & &&&&&&& & & &&&&&& &&&&&&&& +// & & & && & & && +// & & && & & && && & & +// &&&&&&&&&& &&&&&&&&&& & &&&&& && &&&&&&& & && +// & +// & +// & +// & +// GENERAL PHYSICS +//§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§// + +#include "LEMuSRGeneralPhysics.hh" + +#include "globals.hh" +#include "G4ios.hh" +#include +#include "G4StepLimiter.hh" + + +LEMuSRGeneralPhysics::LEMuSRGeneralPhysics(const G4String& name) + : G4VPhysicsConstructor(name) +{ +} + +LEMuSRGeneralPhysics::~LEMuSRGeneralPhysics() +{ +} + +#include "G4ParticleDefinition.hh" +#include "G4ProcessManager.hh" +// Bosons +#include "G4ChargedGeantino.hh" +#include "G4Geantino.hh" + +#include "G4UserSpecialCuts.hh" +#include "G4Neutron.hh" + + +void LEMuSRGeneralPhysics::ConstructParticle() +{ + // pseudo-particles + G4Neutron::Neutron(); + G4Geantino::GeantinoDefinition(); + G4ChargedGeantino::ChargedGeantinoDefinition(); +} + +void LEMuSRGeneralPhysics::ConstructProcess() +{ + // Add Decay Process + theParticleIterator->reset(); + while( (*theParticleIterator)() ) + { + + G4ParticleDefinition* particle = theParticleIterator->value(); + G4ProcessManager* pmanager = particle->GetProcessManager(); + if (fDecayProcess.IsApplicable(*particle)&&particle->GetParticleName()!="mu+"&&particle->GetParticleName()!="Mu") + { + pmanager ->AddProcess(&fDecayProcess); + // set ordering for PostStepDoIt and AtRestDoIt + pmanager ->SetProcessOrdering(&fDecayProcess, idxPostStep); + pmanager ->SetProcessOrdering(&fDecayProcess, idxAtRest); + } + if (particle->GetParticleName()!="mu+"&&particle->GetParticleName()!="Mu") + { + pmanager->AddProcess(new G4UserSpecialCuts(),-1,-1,1); + } + //#if defined LEMU_TEST_FIELD + if (particle->GetParticleName()=="mu+"||particle->GetParticleName()=="Mu") + { + pmanager->AddProcess(&fStepLimiter,-1,-1,1); // + pmanager->AddProcess(new G4UserSpecialCuts(),-1,-1,1); + + } + //#endif + } + + + G4ProcessManager* Gpmanager; + Gpmanager = G4Geantino::Geantino()->GetProcessManager(); + Gpmanager->AddProcess(new G4UserSpecialCuts(),-1,-1,1); // + Gpmanager->AddProcess(&fStepLimiter,-1,-1,1); // + + + G4ProcessManager* Npmanager; + Npmanager = G4Neutron::Neutron()->GetProcessManager(); + + Npmanager->AddProcess(new G4UserSpecialCuts(),-1,-1,1); // + Npmanager->AddProcess(new G4UserSpecialCuts(),-1,-1,1); // + + +} + + + diff --git a/geant4/LEMuSR/src/LEMuSRHadronPhysics.cc b/geant4/LEMuSR/src/LEMuSRHadronPhysics.cc new file mode 100644 index 0000000..02b306c --- /dev/null +++ b/geant4/LEMuSR/src/LEMuSRHadronPhysics.cc @@ -0,0 +1,415 @@ +// $Id$ +// GEANT4 tag $Name$ +// + +#include "LEMuSRHadronPhysics.hh" + +#include "globals.hh" +#include "G4ios.hh" +#include + + +LEMuSRHadronPhysics::LEMuSRHadronPhysics(const G4String& name) + : G4VPhysicsConstructor(name) +{ +} + +LEMuSRHadronPhysics::~LEMuSRHadronPhysics() +{ +delete theStringDecay; +} + +#include "G4ParticleDefinition.hh" +#include "G4ParticleTable.hh" + +// Nuclei +#include "G4MesonConstructor.hh" +#include "G4BaryonConstructor.hh" +#include "G4ShortLivedConstructor.hh" + +void LEMuSRHadronPhysics::ConstructParticle() +{ + // Construct all mesons + G4MesonConstructor pMesonConstructor; + pMesonConstructor.ConstructParticle(); + + // Construct all barions + G4BaryonConstructor pBaryonConstructor; + pBaryonConstructor.ConstructParticle(); + + // Construct resonaces and quarks + G4ShortLivedConstructor pShortLivedConstructor; + pShortLivedConstructor.ConstructParticle(); + +} + + +#include "G4ProcessManager.hh" + + +void LEMuSRHadronPhysics::ConstructProcess() +{ + G4ProcessManager * pManager = 0; + G4cout << "" << G4endl; + G4cout << "You are using the ExoN04HadronPhysics" << G4endl; + G4cout << " - Note that this hadronic physics list is not optimized for any particular usage" << G4endl; + G4cout << " - If you wish to have a starting point tailored for a particular area of work," << G4endl; + G4cout << " please use one of the available physics lists by use-case." << G4endl; + G4cout << " More information can also be found from the Geant4 HyperNews." << G4endl; + G4cout << "" << G4endl; + // Elastic Process + theElasticModel = new G4LElastic(); + theElasticProcess.RegisterMe(theElasticModel); + + // pi+ and pi- + + thePreEquilib = new G4PreCompoundModel(&theHandler); + theCascade.SetDeExcitation(thePreEquilib); + theTheoModel.SetTransport(&theCascade); + theTheoModel.SetHighEnergyGenerator(&theStringModel); + theStringDecay = new G4ExcitedStringDecay(&theFragmentation); + theStringModel.SetFragmentationModel(theStringDecay); + theTheoModel.SetMinEnergy(15*GeV); + theTheoModel.SetMaxEnergy(100*TeV); + + // PionPlus + pManager = G4PionPlus::PionPlus()->GetProcessManager(); + // add process + pManager->AddDiscreteProcess(&theElasticProcess); + + theLEPionPlusModel = new G4LEPionPlusInelastic(); + thePionPlusInelastic.RegisterMe(theLEPionPlusModel); + thePionPlusInelastic.RegisterMe(&theTheoModel); + pManager->AddDiscreteProcess(&thePionPlusInelastic); + + pManager->AddProcess(&thePionPlusIonisation, ordInActive,2, 2); + + pManager->AddProcess(&thePionPlusMult); + pManager->SetProcessOrdering(&thePionPlusMult, idxAlongStep, 1); + pManager->SetProcessOrdering(&thePionPlusMult, idxPostStep, 1); + + // PionMinus + pManager = G4PionMinus::PionMinus()->GetProcessManager(); + // add process + pManager->AddDiscreteProcess(&theElasticProcess); + + theLEPionMinusModel = new G4LEPionMinusInelastic(); + thePionMinusInelastic.RegisterMe(theLEPionMinusModel); + thePionMinusInelastic.RegisterMe(&theTheoModel); + pManager->AddDiscreteProcess(&thePionMinusInelastic); + + pManager->AddProcess(&thePionMinusIonisation, ordInActive,2, 2); + + pManager->AddProcess(&thePionMinusMult); + pManager->SetProcessOrdering(&thePionMinusMult, idxAlongStep, 1); + pManager->SetProcessOrdering(&thePionMinusMult, idxPostStep, 1); + + pManager->AddRestProcess(&thePionMinusAbsorption, ordDefault); + + // KaonPlus + pManager = G4KaonPlus::KaonPlus()->GetProcessManager(); + // add process + pManager->AddDiscreteProcess(&theElasticProcess); + + theLEKaonPlusModel = new G4LEKaonPlusInelastic(); + theHEKaonPlusModel = new G4HEKaonPlusInelastic(); + theKaonPlusInelastic.RegisterMe(theLEKaonPlusModel); + theKaonPlusInelastic.RegisterMe(&theTheoModel); + pManager->AddDiscreteProcess(&theKaonPlusInelastic); + + pManager->AddProcess(&theKaonPlusIonisation, ordInActive,2, 2); + + pManager->AddProcess(&theKaonPlusMult); + pManager->SetProcessOrdering(&theKaonPlusMult, idxAlongStep, 1); + pManager->SetProcessOrdering(&theKaonPlusMult, idxPostStep, 1); + + // KaonMinus + pManager = G4KaonMinus::KaonMinus()->GetProcessManager(); + // add process + pManager->AddDiscreteProcess(&theElasticProcess); + + theLEKaonMinusModel = new G4LEKaonMinusInelastic(); + theHEKaonMinusModel = new G4HEKaonMinusInelastic(); + theKaonMinusInelastic.RegisterMe(theLEKaonMinusModel); + theKaonMinusInelastic.RegisterMe(theHEKaonMinusModel); + pManager->AddDiscreteProcess(&theKaonMinusInelastic); + + pManager->AddProcess(&theKaonMinusIonisation, ordInActive,2, 2); + + pManager->AddProcess(&theKaonMinusMult); + pManager->SetProcessOrdering(&theKaonMinusMult, idxAlongStep, 1); + pManager->SetProcessOrdering(&theKaonMinusMult, idxPostStep, 1); + + pManager->AddRestProcess(&theKaonMinusAbsorption, ordDefault); + + // KaonZeroL + pManager = G4KaonZeroLong::KaonZeroLong()->GetProcessManager(); + // add process + pManager->AddDiscreteProcess(&theElasticProcess); + + theLEKaonZeroLModel = new G4LEKaonZeroLInelastic(); + theHEKaonZeroLModel = new G4HEKaonZeroInelastic(); + theKaonZeroLInelastic.RegisterMe(theLEKaonZeroLModel); + theKaonZeroLInelastic.RegisterMe(theHEKaonZeroLModel); + pManager->AddDiscreteProcess(&theKaonZeroLInelastic); + + // KaonZeroS + pManager = G4KaonZeroShort::KaonZeroShort()->GetProcessManager(); + // add process + pManager->AddDiscreteProcess(&theElasticProcess); + + theLEKaonZeroSModel = new G4LEKaonZeroSInelastic(); + theHEKaonZeroSModel = new G4HEKaonZeroInelastic(); + theKaonZeroSInelastic.RegisterMe(theLEKaonZeroSModel); + theKaonZeroSInelastic.RegisterMe(theHEKaonZeroSModel); + pManager->AddDiscreteProcess(&theKaonZeroSInelastic); + + // Proton + pManager = G4Proton::Proton()->GetProcessManager(); + // add process + pManager->AddDiscreteProcess(&theElasticProcess); + + theLEProtonModel = new G4LEProtonInelastic(); + theHEProtonModel = new G4HEProtonInelastic(); + theProtonInelastic.RegisterMe(theLEProtonModel); + theProtonInelastic.RegisterMe(&theTheoModel); + pManager->AddDiscreteProcess(&theProtonInelastic); + + pManager->AddProcess(&theProtonIonisation, ordInActive,2, 2); + + pManager->AddProcess(&theProtonMult); + pManager->SetProcessOrdering(&theProtonMult, idxAlongStep, 1); + pManager->SetProcessOrdering(&theProtonMult, idxPostStep, 1); + + // anti-Proton + pManager = G4AntiProton::AntiProton()->GetProcessManager(); + // add process + pManager->AddDiscreteProcess(&theElasticProcess); + + theLEAntiProtonModel = new G4LEAntiProtonInelastic(); + theHEAntiProtonModel = new G4HEAntiProtonInelastic(); + theAntiProtonInelastic.RegisterMe(theLEAntiProtonModel); + theAntiProtonInelastic.RegisterMe(theHEAntiProtonModel); + pManager->AddDiscreteProcess(&theAntiProtonInelastic); + + pManager->AddProcess(&theAntiProtonIonisation, ordInActive,2, 2); + + pManager->AddProcess(&theAntiProtonMult); + pManager->SetProcessOrdering(&theAntiProtonMult, idxAlongStep, 1); + pManager->SetProcessOrdering(&theAntiProtonMult, idxPostStep, 1); + + pManager->AddRestProcess(&theAntiProtonAnnihilation); + + // Neutron + pManager = G4Neutron::Neutron()->GetProcessManager(); + // add process + pManager->AddDiscreteProcess(&theElasticProcess); + + theLENeutronModel = new G4LENeutronInelastic(); + theHENeutronModel = new G4HENeutronInelastic(); + theNeutronInelastic.RegisterMe(theLENeutronModel); + theNeutronInelastic.RegisterMe(&theTheoModel); + pManager->AddDiscreteProcess(&theNeutronInelastic); + + theNeutronFissionModel = new G4LFission(); + theNeutronFission.RegisterMe(theNeutronFissionModel); + pManager->AddDiscreteProcess(&theNeutronFission); + + theNeutronCaptureModel = new G4LCapture(); + theNeutronCapture.RegisterMe(theNeutronCaptureModel); + pManager->AddDiscreteProcess(&theNeutronCapture); + + // AntiNeutron + pManager = G4AntiNeutron::AntiNeutron()->GetProcessManager(); + // add process + pManager->AddDiscreteProcess(&theElasticProcess); + + theLEAntiNeutronModel = new G4LEAntiNeutronInelastic(); + theHEAntiNeutronModel = new G4HEAntiNeutronInelastic(); + theAntiNeutronInelastic.RegisterMe(theLEAntiNeutronModel); + theAntiNeutronInelastic.RegisterMe(theHEAntiNeutronModel); + pManager->AddDiscreteProcess(&theAntiNeutronInelastic); + + pManager->AddRestProcess(&theAntiNeutronAnnihilation); + + // Lambda + pManager = G4Lambda::Lambda()->GetProcessManager(); + // add process + pManager->AddDiscreteProcess(&theElasticProcess); + + theLELambdaModel = new G4LELambdaInelastic(); + theHELambdaModel = new G4HELambdaInelastic(); + theLambdaInelastic.RegisterMe(theLELambdaModel); + theLambdaInelastic.RegisterMe(theHELambdaModel); + pManager->AddDiscreteProcess(&theLambdaInelastic); + + // AntiLambda + pManager = G4AntiLambda::AntiLambda()->GetProcessManager(); + // add process + pManager->AddDiscreteProcess(&theElasticProcess); + + theLEAntiLambdaModel = new G4LEAntiLambdaInelastic(); + theHEAntiLambdaModel = new G4HEAntiLambdaInelastic(); + theAntiLambdaInelastic.RegisterMe(theLEAntiLambdaModel); + theAntiLambdaInelastic.RegisterMe(theHEAntiLambdaModel); + pManager->AddDiscreteProcess(&theAntiLambdaInelastic); + + // SigmaMinus + pManager = G4SigmaMinus::SigmaMinus()->GetProcessManager(); + // add process + pManager->AddDiscreteProcess(&theElasticProcess); + + theLESigmaMinusModel = new G4LESigmaMinusInelastic(); + theHESigmaMinusModel = new G4HESigmaMinusInelastic(); + theSigmaMinusInelastic.RegisterMe(theLESigmaMinusModel); + theSigmaMinusInelastic.RegisterMe(theHESigmaMinusModel); + pManager->AddDiscreteProcess(&theSigmaMinusInelastic); + + pManager->AddProcess(&theSigmaMinusIonisation, ordInActive,2, 2); + + pManager->AddProcess(&theSigmaMinusMult); + pManager->SetProcessOrdering(&theSigmaMinusMult, idxAlongStep, 1); + pManager->SetProcessOrdering(&theSigmaMinusMult, idxPostStep, 1); + + // anti-SigmaMinus + pManager = G4AntiSigmaMinus::AntiSigmaMinus()->GetProcessManager(); + // add process + pManager->AddDiscreteProcess(&theElasticProcess); + + theLEAntiSigmaMinusModel = new G4LEAntiSigmaMinusInelastic(); + theHEAntiSigmaMinusModel = new G4HEAntiSigmaMinusInelastic(); + theAntiSigmaMinusInelastic.RegisterMe(theLEAntiSigmaMinusModel); + theAntiSigmaMinusInelastic.RegisterMe(theHEAntiSigmaMinusModel); + pManager->AddDiscreteProcess(&theAntiSigmaMinusInelastic); + + pManager->AddProcess(&theAntiSigmaMinusIonisation, ordInActive,2, 2); + + pManager->AddProcess(&theAntiSigmaMinusMult); + pManager->SetProcessOrdering(&theAntiSigmaMinusMult, idxAlongStep, 1); + pManager->SetProcessOrdering(&theAntiSigmaMinusMult, idxPostStep, 1); + + // SigmaPlus + pManager = G4SigmaPlus::SigmaPlus()->GetProcessManager(); + // add process + pManager->AddDiscreteProcess(&theElasticProcess); + + theLESigmaPlusModel = new G4LESigmaPlusInelastic(); + theHESigmaPlusModel = new G4HESigmaPlusInelastic(); + theSigmaPlusInelastic.RegisterMe(theLESigmaPlusModel); + theSigmaPlusInelastic.RegisterMe(theHESigmaPlusModel); + pManager->AddDiscreteProcess(&theSigmaPlusInelastic); + + pManager->AddProcess(&theSigmaPlusIonisation, ordInActive,2, 2); + + pManager->AddProcess(&theSigmaPlusMult); + pManager->SetProcessOrdering(&theSigmaPlusMult, idxAlongStep, 1); + pManager->SetProcessOrdering(&theSigmaPlusMult, idxPostStep, 1); + + // anti-SigmaPlus + pManager = G4AntiSigmaPlus::AntiSigmaPlus()->GetProcessManager(); + // add process + pManager->AddDiscreteProcess(&theElasticProcess); + + theLEAntiSigmaPlusModel = new G4LEAntiSigmaPlusInelastic(); + theHEAntiSigmaPlusModel = new G4HEAntiSigmaPlusInelastic(); + theAntiSigmaPlusInelastic.RegisterMe(theLEAntiSigmaPlusModel); + theAntiSigmaPlusInelastic.RegisterMe(theHEAntiSigmaPlusModel); + pManager->AddDiscreteProcess(&theAntiSigmaPlusInelastic); + + pManager->AddProcess(&theAntiSigmaPlusIonisation, ordInActive,2, 2); + + pManager->AddProcess(&theAntiSigmaPlusMult); + pManager->SetProcessOrdering(&theAntiSigmaPlusMult, idxAlongStep, 1); + pManager->SetProcessOrdering(&theAntiSigmaPlusMult, idxPostStep, 1); + + // XiMinus + pManager = G4XiMinus::XiMinus()->GetProcessManager(); + // add process + pManager->AddDiscreteProcess(&theElasticProcess); + + theLEXiMinusModel = new G4LEXiMinusInelastic(); + theHEXiMinusModel = new G4HEXiMinusInelastic(); + theXiMinusInelastic.RegisterMe(theLEXiMinusModel); + theXiMinusInelastic.RegisterMe(theHEXiMinusModel); + pManager->AddDiscreteProcess(&theXiMinusInelastic); + + pManager->AddProcess(&theXiMinusIonisation, ordInActive,2, 2); + + pManager->AddProcess(&theXiMinusMult); + pManager->SetProcessOrdering(&theXiMinusMult, idxAlongStep, 1); + pManager->SetProcessOrdering(&theXiMinusMult, idxPostStep, 1); + + // anti-XiMinus + pManager = G4AntiXiMinus::AntiXiMinus()->GetProcessManager(); + // add process + pManager->AddDiscreteProcess(&theElasticProcess); + + theLEAntiXiMinusModel = new G4LEAntiXiMinusInelastic(); + theHEAntiXiMinusModel = new G4HEAntiXiMinusInelastic(); + theAntiXiMinusInelastic.RegisterMe(theLEAntiXiMinusModel); + theAntiXiMinusInelastic.RegisterMe(theHEAntiXiMinusModel); + pManager->AddDiscreteProcess(&theAntiXiMinusInelastic); + + pManager->AddProcess(&theAntiXiMinusIonisation, ordInActive,2, 2); + + pManager->AddProcess(&theAntiXiMinusMult); + pManager->SetProcessOrdering(&theAntiXiMinusMult, idxAlongStep, 1); + pManager->SetProcessOrdering(&theAntiXiMinusMult, idxPostStep, 1); + + // XiZero + pManager = G4XiZero::XiZero()->GetProcessManager(); + // add process + pManager->AddDiscreteProcess(&theElasticProcess); + + theLEXiZeroModel = new G4LEXiZeroInelastic(); + theHEXiZeroModel = new G4HEXiZeroInelastic(); + theXiZeroInelastic.RegisterMe(theLEXiZeroModel); + theXiZeroInelastic.RegisterMe(theHEXiZeroModel); + pManager->AddDiscreteProcess(&theXiZeroInelastic); + + // anti-XiZero + pManager = G4AntiXiZero::AntiXiZero()->GetProcessManager(); + // add process + pManager->AddDiscreteProcess(&theElasticProcess); + + theLEAntiXiZeroModel = new G4LEAntiXiZeroInelastic(); + theHEAntiXiZeroModel = new G4HEAntiXiZeroInelastic(); + theAntiXiZeroInelastic.RegisterMe(theLEAntiXiZeroModel); + theAntiXiZeroInelastic.RegisterMe(theHEAntiXiZeroModel); + pManager->AddDiscreteProcess(&theAntiXiZeroInelastic); + + // OmegaMinus + pManager = G4OmegaMinus::OmegaMinus()->GetProcessManager(); + // add process + pManager->AddDiscreteProcess(&theElasticProcess); + + theLEOmegaMinusModel = new G4LEOmegaMinusInelastic(); + theHEOmegaMinusModel = new G4HEOmegaMinusInelastic(); + theOmegaMinusInelastic.RegisterMe(theLEOmegaMinusModel); + theOmegaMinusInelastic.RegisterMe(theHEOmegaMinusModel); + pManager->AddDiscreteProcess(&theOmegaMinusInelastic); + + pManager->AddProcess(&theOmegaMinusIonisation, ordInActive,2, 2); + + pManager->AddProcess(&theOmegaMinusMult); + pManager->SetProcessOrdering(&theOmegaMinusMult, idxAlongStep, 1); + pManager->SetProcessOrdering(&theOmegaMinusMult, idxPostStep, 1); + + // anti-OmegaMinus + pManager = G4AntiOmegaMinus::AntiOmegaMinus()->GetProcessManager(); + // add process + pManager->AddDiscreteProcess(&theElasticProcess); + + theLEAntiOmegaMinusModel = new G4LEAntiOmegaMinusInelastic(); + theHEAntiOmegaMinusModel = new G4HEAntiOmegaMinusInelastic(); + theAntiOmegaMinusInelastic.RegisterMe(theLEAntiOmegaMinusModel); + theAntiOmegaMinusInelastic.RegisterMe(theHEAntiOmegaMinusModel); + pManager->AddDiscreteProcess(&theAntiOmegaMinusInelastic); + + pManager->AddProcess(&theAntiOmegaMinusIonisation, ordInActive,2, 2); + + pManager->AddProcess(&theAntiOmegaMinusMult); + pManager->SetProcessOrdering(&theAntiOmegaMinusMult, idxAlongStep, 1); + pManager->SetProcessOrdering(&theAntiOmegaMinusMult, idxPostStep, 1); + +} diff --git a/geant4/LEMuSR/src/LEMuSRIonPhysics.cc b/geant4/LEMuSR/src/LEMuSRIonPhysics.cc new file mode 100644 index 0000000..ddac283 --- /dev/null +++ b/geant4/LEMuSR/src/LEMuSRIonPhysics.cc @@ -0,0 +1,103 @@ +// $Id$ +// GEANT4 tag $Name$ +// +// + +#include "LEMuSRIonPhysics.hh" + +#include "globals.hh" +#include "G4ios.hh" +#include + + +LEMuSRIonPhysics::LEMuSRIonPhysics(const G4String& name) + : G4VPhysicsConstructor(name) +{ +} + +LEMuSRIonPhysics::~LEMuSRIonPhysics() +{ +} + +#include "G4ParticleDefinition.hh" +#include "G4ParticleTable.hh" + +// Nuclei +#include "G4IonConstructor.hh" + +void LEMuSRIonPhysics::ConstructParticle() +{ + // Construct light ions + G4IonConstructor pConstructor; + pConstructor.ConstructParticle(); +} + + +#include "G4ProcessManager.hh" + + +void LEMuSRIonPhysics::ConstructProcess() +{ + G4ProcessManager * pManager = 0; + + // Elastic Process + theElasticModel = new G4LElastic(); + theElasticProcess.RegisterMe(theElasticModel); + + // Generic Ion + pManager = G4GenericIon::GenericIon()->GetProcessManager(); + // add process + pManager->AddDiscreteProcess(&theElasticProcess); + + pManager->AddProcess(&fIonMultipleScattering, -1, 1, 1); + pManager->AddProcess(&fIonIonisation, -1, 2, 2); + + // Deuteron + pManager = G4Deuteron::Deuteron()->GetProcessManager(); + // add process + pManager->AddDiscreteProcess(&theElasticProcess); + + fDeuteronModel = new G4LEDeuteronInelastic(); + fDeuteronProcess.RegisterMe(fDeuteronModel); + pManager->AddDiscreteProcess(&fDeuteronProcess); + + pManager->AddProcess(&fDeuteronMultipleScattering, -1, 1, 1); + pManager->AddProcess(&fDeuteronIonisation, -1, 2, 2); + + // Triton + pManager = G4Triton::Triton()->GetProcessManager(); + // add process + pManager->AddDiscreteProcess(&theElasticProcess); + + fTritonModel = new G4LETritonInelastic(); + fTritonProcess.RegisterMe(fTritonModel); + pManager->AddDiscreteProcess(&fTritonProcess); + + pManager->AddProcess(&fTritonMultipleScattering, -1, 1, 1); + pManager->AddProcess(&fTritonIonisation, -1, 2, 2); + + // Alpha + pManager = G4Alpha::Alpha()->GetProcessManager(); + // add process + pManager->AddDiscreteProcess(&theElasticProcess); + + fAlphaModel = new G4LEAlphaInelastic(); + fAlphaProcess.RegisterMe(fAlphaModel); + pManager->AddDiscreteProcess(&fAlphaProcess); + + pManager->AddProcess(&fAlphaMultipleScattering, -1, 1, 1); + pManager->AddProcess(&fAlphaIonisation, -1, 2, 2); + + // He3 + pManager = G4He3::He3()->GetProcessManager(); + // add process + pManager->AddDiscreteProcess(&theElasticProcess); + + pManager->AddProcess(&fHe3MultipleScattering, -1, 1, 1); + pManager->AddProcess(&fHe3Ionisation, -1, 2, 2); + + +} + + + diff --git a/geant4/LEMuSR/src/LEMuSRMSC.cc b/geant4/LEMuSR/src/LEMuSRMSC.cc new file mode 100644 index 0000000..344a16e --- /dev/null +++ b/geant4/LEMuSR/src/LEMuSRMSC.cc @@ -0,0 +1,1116 @@ +// +// ******************************************************************** +// * DISCLAIMER * +// * * +// * The following disclaimer summarizes all the specific disclaimers * +// * of contributors to this software. The specific disclaimers,which * +// * govern, are listed with their locations in: * +// * http://cern.ch/geant4/license * +// * * +// * Neither the authors of this software system, nor their employing * +// * institutes,nor the agencies providing financial support for this * +// * work make any representation or warranty, express or implied, * +// * regarding this software system or assume any liability for its * +// * use. * +// * * +// * This code implementation is the intellectual property of the * +// * GEANT4 collaboration. * +// * By copying, distributing or modifying the Program (or any work * +// * based on the Program) you indicate your acceptance of this * +// * statement, and all its terms. * +// ******************************************************************** +// +// +// $Id$ +// GEANT4 tag $Name$ +// +// ----------------------------------------------------------------------------- +// 16/05/01 value of cparm changed , L.Urban +// 18/05/01 V.Ivanchenko Clean up against Linux ANSI compilation +// 07/08/01 new methods Store/Retrieve PhysicsTable (mma) +// 23-08-01 new angle and z distribution,energy dependence reduced, +// Store,Retrieve methods commented out temporarily, L.Urban +// 27-08-01 in BuildPhysicsTable:aParticleType.GetParticleName()=="mu+" (mma) +// 28-08-01 GetContinuousStepLimit and AlongStepDoIt moved from .icc file (mma) +// 03-09-01 value of data member factlim changed, L.Urban +// 10-09-01 small change in GetContinuousStepLimit, L.Urban +// 11-09-01 G4MultipleScatteringx put as default G4MultipleScattering +// store/retrieve physics table reactivated (mma) +// 13-09-01 corr. in ComputeTransportCrossSection, L.Urban +// 14-09-01 protection in GetContinuousStepLimit, L.Urban +// 17-09-01 migration of Materials to pure STL (mma) +// 27-09-01 value of data member factlim changed, L.Urban +// 31-10-01 big fixed in PostStepDoIt,L.Urban +// 24-04-02 some minor changes in boundary algorithm, L.Urban +// 06-05-02 bug fixed in GetContinuousStepLimit, L.Urban +// 24-05-02 changes in angle distribution and boundary algorithm, L.Urban +// 11-06-02 bug fixed in ComputeTransportCrossSection, L.Urban +// 12-08-02 bug fixed in PostStepDoIt (lateral displacement), L.Urban +// 15-08-02 new angle distribution, L.Urban +// 26-09-02 angle distribution + boundary algorithm modified, L.Urban +// 15-10-02 temporary fix for proton scattering +// 30-10-02 modified angle distribution,mods in boundary algorithm, +// changes in data members, L.Urban +// 30-10-02 rename variable cm - Ecm, V.Ivanchenko +// 11-12-02 precision problem in ComputeTransportCrossSection +// for small Tkin/for heavy particles cured, L.Urban +// 05-02-03 changes in data members, new sampling for geom. +// path length, step dependence reduced with new +// method +// 17-03-03 cut per region, V.Ivanchenko +// 13-04-03 add initialisation in GetContinuesStepLimit +// + change table size (V.Ivanchenko) +// 26-04-03 fix problems of retrieve tables (M.Asai) +// 23-05-03 important change in angle distribution for muons/hadrons +// the central part now is similar to the Highland parametrization + +// minor correction in angle sampling algorithm (for all particles) +// (L.Urban) +// 24-05-03 bug in nuclear size corr.computation fixed thanks to Vladimir(L.Urban) +// 30-05-03 misprint in PostStepDoIt corrected(L.Urban) +// 08-08-03 This class is frozen at the release 5.2 (V.Ivanchenko) +// 08-11-04 Remove Store/Retrieve tables (V.Ivantchenko) +// 07-04-05 in BuildPhysicsTable:aParticleType.GetParticleName()=="Mu" (PARAISO) +// ----------------------------------------------------------------------------- +// +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +#include "LEMuSRMSC.hh" +#include "G4StepStatus.hh" +#include "G4Navigator.hh" +#include "G4TransportationManager.hh" +#include "Randomize.hh" +#include "G4ProductionCutsTable.hh" +#include "LEMuSRDetectorConstruction.hh" +#include "LEMuSRPrimaryGeneratorAction.hh" + + +#include "meyer.h" +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +using namespace std; + +LEMuSRMSC::LEMuSRMSC(const G4String& processName) + : G4VContinuousDiscreteProcess(processName), + theTransportMeanFreePathTable(0), + taubig(8.0),tausmall(1.e-14),taulim(1.e-5), + LowestKineticEnergy(0.1*keV), + HighestKineticEnergy(100.*TeV), + TotBin(100), + materialIndex(0), + tLast (0.0), + zLast (0.0), + boundary(true), + facrange(0.199),tlimit(1.e10*mm),tlimitmin(1.e-7*mm), + cf(1.001), + stepno(0),stepnolastmsc(-1000000),nsmallstep(5), + laststep(0.), + valueGPILSelectionMSC(NotCandidateForSelection), + zmean(0.),samplez(true), + range(1.),T0(1.),T1(1.),lambda0(1.),lambda1(-1.), + Tlow(0.),alam(1.),blam(1.),dtrl(0.15), + lambdam(-1.),clam(1.),zm(1.),cthm(1.), + fLatDisplFlag(true), + NuclCorrPar (0.0615), + FactPar(0.40), + facxsi(1.) + { } + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +LEMuSRMSC::~LEMuSRMSC() +{ + if(theTransportMeanFreePathTable) + { + theTransportMeanFreePathTable->clearAndDestroy(); + delete theTransportMeanFreePathTable; + } +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void LEMuSRMSC::BuildPhysicsTable( + const G4ParticleDefinition& aParticleType) +{ + // set values of some data members + if((aParticleType.GetParticleName() == "e-") || + (aParticleType.GetParticleName() == "e+")) + { + // parameters for e+/e- + alfa1 = 1.45 ; + alfa2 = 0.60 ; + alfa3 = 0.30 ; + b = 1. ; + xsi = facxsi*2.22 ; + c0 = 2.30 ; + } + else + { + // parameters for heavy particles + alfa1 = 1.10 ; + alfa2 = 0.14 ; + alfa3 = 0.07 ; + b = 1. ; + xsi = facxsi*2.70 ; + c0 = 1.40 ; + } + + // .............................. + Tlow = aParticleType.GetPDGMass(); + + // tables are built for MATERIALS + const G4double sigmafactor = twopi*classic_electr_radius* + classic_electr_radius; + G4double KineticEnergy,AtomicNumber,AtomicWeight,sigma,lambda; + G4double density; + + // destroy old tables if any + if (theTransportMeanFreePathTable) + { + theTransportMeanFreePathTable->clearAndDestroy(); + delete theTransportMeanFreePathTable; + } + + // create table + const G4ProductionCutsTable* theCoupleTable= + G4ProductionCutsTable::GetProductionCutsTable(); + size_t numOfCouples = theCoupleTable->GetTableSize(); + + theTransportMeanFreePathTable = new G4PhysicsTable(numOfCouples); + + // loop for materials + for (size_t i=0; i + GetMaterialCutsCouple(i); + const G4Material* material = couple->GetMaterial(); + const G4ElementVector* theElementVector = material->GetElementVector(); + const G4double* NbOfAtomsPerVolume = + material->GetVecNbOfAtomsPerVolume(); + const G4int NumberOfElements = material->GetNumberOfElements(); + density = material->GetDensity(); + + // loop for kinetic energy values + for (G4int i=0; iGetLowEdgeEnergy(i); + sigma = 0.; + + // loop for element in the material + for (G4int iel=0; ielGetZ(); + AtomicWeight = (*theElementVector)[iel]->GetA(); + sigma += NbOfAtomsPerVolume[iel]* + ComputeTransportCrossSection(aParticleType,KineticEnergy, + AtomicNumber,AtomicWeight); + } + sigma *= sigmafactor; + lambda = 1./sigma; + aVector->PutValue(i,lambda); + } + + theTransportMeanFreePathTable->insert(aVector); + + } + + if((aParticleType.GetParticleName() == "e-" ) || + (aParticleType.GetParticleName() == "mu+" ) || + (aParticleType.GetParticleName() == "Mu" ) || + (aParticleType.GetParticleName() == "proton") ) PrintInfoDefinition(); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +G4double LEMuSRMSC::ComputeTransportCrossSection( + const G4ParticleDefinition& aParticleType, + G4double KineticEnergy, + G4double AtomicNumber,G4double AtomicWeight) +{ + const G4double epsfactor = 2.*electron_mass_c2*electron_mass_c2* + Bohr_radius*Bohr_radius/(hbarc*hbarc); + const G4double epsmin = 1.e-4 , epsmax = 1.e10; + + const G4double Zdat[15] = { 4., 6.,13.,20.,26.,29.,32.,38.,47., + 50.,56.,64.,74.,79.,82. }; + + const G4double Tdat[23] = {0.0001*MeV,0.0002*MeV,0.0004*MeV,0.0007*MeV, + 0.001*MeV,0.002*MeV,0.004*MeV,0.007*MeV, + 0.01*MeV,0.02*MeV,0.04*MeV,0.07*MeV, + 0.1*MeV,0.2*MeV,0.4*MeV,0.7*MeV, + 1.*MeV,2.*MeV,4.*MeV,7.*MeV,10.*MeV,20.*MeV, + 10000.0*MeV}; + + // corr. factors for e-/e+ lambda + G4double celectron[15][23] = + {{1.125,1.072,1.051,1.047,1.047,1.050,1.052,1.054, + 1.054,1.057,1.062,1.069,1.075,1.090,1.105,1.111, + 1.112,1.108,1.100,1.093,1.089,1.087,0.7235 }, + {1.408,1.246,1.143,1.096,1.077,1.059,1.053,1.051, + 1.052,1.053,1.058,1.065,1.072,1.087,1.101,1.108, + 1.109,1.105,1.097,1.090,1.086,1.082,0.7925 }, + {2.833,2.268,1.861,1.612,1.486,1.309,1.204,1.156, + 1.136,1.114,1.106,1.106,1.109,1.119,1.129,1.132, + 1.131,1.124,1.113,1.104,1.099,1.098,0.9147 }, + {3.879,3.016,2.380,2.007,1.818,1.535,1.340,1.236, + 1.190,1.133,1.107,1.099,1.098,1.103,1.110,1.113, + 1.112,1.105,1.096,1.089,1.085,1.098,0.9700 }, + {6.937,4.330,2.886,2.256,1.987,1.628,1.395,1.265, + 1.203,1.122,1.080,1.065,1.061,1.063,1.070,1.073, + 1.073,1.070,1.064,1.059,1.056,1.056,1.0022 }, + {9.616,5.708,3.424,2.551,2.204,1.762,1.485,1.330, + 1.256,1.155,1.099,1.077,1.070,1.068,1.072,1.074, + 1.074,1.070,1.063,1.059,1.056,1.052,1.0158 }, + {11.72,6.364,3.811,2.806,2.401,1.884,1.564,1.386, + 1.300,1.180,1.112,1.082,1.073,1.066,1.068,1.069, + 1.068,1.064,1.059,1.054,1.051,1.050,1.0284 }, + {18.08,8.601,4.569,3.183,2.662,2.025,1.646,1.439, + 1.339,1.195,1.108,1.068,1.053,1.040,1.039,1.039, + 1.039,1.037,1.034,1.031,1.030,1.036,1.0515 }, + {18.22,10.48,5.333,3.713,3.115,2.367,1.898,1.631, + 1.498,1.301,1.171,1.105,1.077,1.048,1.036,1.033, + 1.031,1.028,1.024,1.022,1.021,1.024,1.0834 }, + {14.14,10.65,5.710,3.929,3.266,2.453,1.951,1.669, + 1.528,1.319,1.178,1.106,1.075,1.040,1.027,1.022, + 1.020,1.017,1.015,1.013,1.013,1.020,1.0937 }, + {14.11,11.73,6.312,4.240,3.478,2.566,2.022,1.720, + 1.569,1.342,1.186,1.102,1.065,1.022,1.003,0.997, + 0.995,0.993,0.993,0.993,0.993,1.011,1.1140 }, + {22.76,20.01,8.835,5.287,4.144,2.901,2.219,1.855, + 1.677,1.410,1.224,1.121,1.073,1.014,0.986,0.976, + 0.974,0.972,0.973,0.974,0.975,0.987,1.1410 }, + {50.77,40.85,14.13,7.184,5.284,3.435,2.520,2.059, + 1.837,1.512,1.283,1.153,1.091,1.010,0.969,0.954, + 0.950,0.947,0.949,0.952,0.954,0.963,1.1750 }, + {65.87,59.06,15.87,7.570,5.567,3.650,2.682,2.182, + 1.939,1.579,1.325,1.178,1.108,1.014,0.965,0.947, + 0.941,0.938,0.940,0.944,0.946,0.954,1.1922 }, + // {45.60,47.34,15.92,7.810,5.755,3.767,2.760,2.239, // paper..... + {55.60,47.34,15.92,7.810,5.755,3.767,2.760,2.239, + 1.985,1.609,1.343,1.188,1.113,1.013,0.960,0.939, + 0.933,0.930,0.933,0.936,0.939,0.949,1.2026 }}; + G4double cpositron[15][23] = { + {2.589,2.044,1.658,1.446,1.347,1.217,1.144,1.110, + 1.097,1.083,1.080,1.086,1.092,1.108,1.123,1.131, + 1.131,1.126,1.117,1.108,1.103,1.100,0.7235 }, + {3.904,2.794,2.079,1.710,1.543,1.325,1.202,1.145, + 1.122,1.096,1.089,1.092,1.098,1.114,1.130,1.137, + 1.138,1.132,1.122,1.113,1.108,1.102,0.7925 }, + {7.970,6.080,4.442,3.398,2.872,2.127,1.672,1.451, + 1.357,1.246,1.194,1.179,1.178,1.188,1.201,1.205, + 1.203,1.190,1.173,1.159,1.151,1.145,0.9147 }, + {9.714,7.607,5.747,4.493,3.815,2.777,2.079,1.715, + 1.553,1.353,1.253,1.219,1.211,1.214,1.225,1.228, + 1.225,1.210,1.191,1.175,1.166,1.174,0.9700 }, + {17.97,12.95,8.628,6.065,4.849,3.222,2.275,1.820, + 1.624,1.382,1.259,1.214,1.202,1.202,1.214,1.219, + 1.217,1.203,1.184,1.169,1.160,1.151,1.0022 }, + {24.83,17.06,10.84,7.355,5.767,3.707,2.546,1.996, + 1.759,1.465,1.311,1.252,1.234,1.228,1.238,1.241, + 1.237,1.222,1.201,1.184,1.174,1.159,1.0158 }, + {23.26,17.15,11.52,8.049,6.375,4.114,2.792,2.155, + 1.880,1.535,1.353,1.281,1.258,1.247,1.254,1.256, + 1.252,1.234,1.212,1.194,1.183,1.170,1.0284 }, + {22.33,18.01,12.86,9.212,7.336,4.702,3.117,2.348, + 2.015,1.602,1.385,1.297,1.268,1.251,1.256,1.258, + 1.254,1.237,1.214,1.195,1.185,1.179,1.0515 }, + {33.91,24.13,15.71,10.80,8.507,5.467,3.692,2.808, + 2.407,1.873,1.564,1.425,1.374,1.330,1.324,1.320, + 1.312,1.288,1.258,1.235,1.221,1.205,1.0834 }, + {32.14,24.11,16.30,11.40,9.015,5.782,3.868,2.917, + 2.490,1.925,1.596,1.447,1.391,1.342,1.332,1.327, + 1.320,1.294,1.264,1.240,1.226,1.214,1.0937 }, + {29.51,24.07,17.19,12.28,9.766,6.238,4.112,3.066, + 2.602,1.995,1.641,1.477,1.414,1.356,1.342,1.336, + 1.328,1.302,1.270,1.245,1.231,1.233,1.1140 }, + {38.19,30.85,21.76,15.35,12.07,7.521,4.812,3.498, + 2.926,2.188,1.763,1.563,1.484,1.405,1.382,1.371, + 1.361,1.330,1.294,1.267,1.251,1.239,1.1410 }, + {49.71,39.80,27.96,19.63,15.36,9.407,5.863,4.155, + 3.417,2.478,1.944,1.692,1.589,1.480,1.441,1.423, + 1.409,1.372,1.330,1.298,1.280,1.258,1.1750 }, + {59.25,45.08,30.36,20.83,16.15,9.834,6.166,4.407, + 3.641,2.648,2.064,1.779,1.661,1.531,1.482,1.459, + 1.442,1.400,1.354,1.319,1.299,1.272,1.1922 }, + {56.38,44.29,30.50,21.18,16.51,10.11,6.354,4.542, + 3.752,2.724,2.116,1.817,1.692,1.554,1.499,1.474, + 1.456,1.412,1.364,1.328,1.307,1.282,1.2026 }}; + + G4double sigma; + G4double Z23 = 2.*log(AtomicNumber)/3.; Z23 = exp(Z23); + + G4double ParticleMass = aParticleType.GetPDGMass(); + G4double ParticleKineticEnergy = KineticEnergy ; + + // correction if particle .ne. e-/e+ + // compute equivalent kinetic energy + // lambda depends on p*beta .... + G4double Mass = ParticleMass ; + if((aParticleType.GetParticleName() != "e-") && + (aParticleType.GetParticleName() != "e+") ) + { + G4double TAU = KineticEnergy/Mass ; + G4double c = Mass*TAU*(TAU+2.)/(electron_mass_c2*(TAU+1.)) ; + G4double w = c-2. ; + G4double tau = 0.5*(w+sqrt(w*w+4.*c)) ; + KineticEnergy = electron_mass_c2*tau ; + Mass = electron_mass_c2 ; + } + + G4double Charge = aParticleType.GetPDGCharge(); + G4double ChargeSquare = Charge*Charge/(eplus*eplus); + + G4double TotalEnergy = KineticEnergy + Mass ; + G4double beta2 = KineticEnergy*(TotalEnergy+Mass) + /(TotalEnergy*TotalEnergy); + G4double bg2 = KineticEnergy*(TotalEnergy+Mass) + /(Mass*Mass); + + G4double eps = epsfactor*bg2/Z23; + + if (eps epsmax) w1=log(2.*eps)+1./eps-3./(8.*eps*eps); + else w1=log((a+1.)/(a-1.))-2./(a+1.); + w = 1./((1.-x0)*eps); + if (w < epsmin) w2=-log(w)-1.+2.*w-1.5*w*w; + else w2 = log((a-x0)/(a-1.))-(1.-x0)/(a-x0); + corrnuclsize = w1/w2; + corrnuclsize = exp(-FactPar*ParticleMass/ParticleKineticEnergy)* + (corrnuclsize-1.)+1.; + } + + // interpolate in AtomicNumber and beta2 + // get bin number in Z + G4int iZ = 14; + while ((iZ>=0)&&(Zdat[iZ]>=AtomicNumber)) iZ -= 1; + if (iZ==14) iZ = 13; + if (iZ==-1) iZ = 0 ; + + G4double Z1 = Zdat[iZ]; + G4double Z2 = Zdat[iZ+1]; + G4double ratZ = (AtomicNumber-Z1)/(Z2-Z1); + + // get bin number in T (beta2) + G4int iT = 22; + while ((iT>=0)&&(Tdat[iT]>=KineticEnergy)) iT -= 1; + if(iT==22) iT = 21; + if(iT==-1) iT = 0 ; + + // calculate betasquare values + G4double T = Tdat[iT], E = T + electron_mass_c2; + G4double b2small = T*(E+electron_mass_c2)/(E*E); + T = Tdat[iT+1]; E = T + electron_mass_c2; + G4double b2big = T*(E+electron_mass_c2)/(E*E); + G4double ratb2 = (beta2-b2small)/(b2big-b2small); + + G4double c1,c2,cc1,cc2,corr; + + if (Charge < 0.) + { + c1 = celectron[iZ][iT]; + c2 = celectron[iZ+1][iT]; + cc1 = c1+ratZ*(c2-c1); + + c1 = celectron[iZ][iT+1]; + c2 = celectron[iZ+1][iT+1]; + cc2 = c1+ratZ*(c2-c1); + + corr = cc1+ratb2*(cc2-cc1); + sigma /= corr; + } + + if (Charge > 0.) + { + c1 = cpositron[iZ][iT]; + c2 = cpositron[iZ+1][iT]; + cc1 = c1+ratZ*(c2-c1); + + c1 = cpositron[iZ][iT+1]; + c2 = cpositron[iZ+1][iT+1]; + cc2 = c1+ratZ*(c2-c1); + + corr = cc1+ratb2*(cc2-cc1); + sigma /= corr; + } + + // nucl. size correction for particles other than e+/e- only at present !!!! + if((aParticleType.GetParticleName() != "e-") && + (aParticleType.GetParticleName() != "e+") ) + sigma /= corrnuclsize; + + return sigma; + +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +G4double LEMuSRMSC::GetContinuousStepLimit( + const G4Track& track, + G4double, + G4double currentMinimumStep, + G4double&) +{ + G4double zPathLength,tPathLength; + const G4DynamicParticle* aParticle; + G4double tau,zt,cz,cz1,grej,grej0; + const G4double expmax = 100., ztmax = (2.*expmax+1.)/(2.*expmax+3.) ; + const G4double tmax = 1.e20*mm ; + + G4bool isOut; + + // this process is not a candidate for selection by default + valueGPILSelectionMSC = NotCandidateForSelection; + + tPathLength = currentMinimumStep; + + const G4MaterialCutsCouple* couple = track.GetMaterialCutsCouple(); + materialIndex = couple->GetIndex(); + + aParticle = track.GetDynamicParticle(); + T0 = aParticle->GetKineticEnergy(); + + lambda0 = (*theTransportMeanFreePathTable) + (materialIndex)->GetValue(T0,isOut); + + + range = G4EnergyLossTables::GetRange(aParticle->GetDefinition(), + T0,couple); + //VI Initialisation at the beginning of the step + cthm = 1.; + lambda1 = -1.; + lambdam = -1.; + alam = range; + blam = 1.+alam/lambda0 ; + zm = 1.; + + // special treatment near boundaries ? + if (boundary && range >= currentMinimumStep) + { + // step limitation at boundary ? + stepno = track.GetCurrentStepNumber() ; + if(stepno == 1) + { + stepnolastmsc = -1000000 ; + tlimit = 1.e10 ; + } + + if(stepno > 1) + { + if(track.GetStep()->GetPreStepPoint()->GetStepStatus() == fGeomBoundary) + { + stepnolastmsc = stepno ; + // if : diff.treatment for small/not small Z + if(range > lambda0) + tlimit = facrange*range ; + else + tlimit = facrange*lambda0 ; + if(tlimit < tlimitmin) tlimit = tlimitmin ; + laststep = tlimit ; + if(tPathLength > tlimit) + { + tPathLength = tlimit ; + valueGPILSelectionMSC = CandidateForSelection; + } + } + else if(stepno > stepnolastmsc) + { + if((stepno - stepnolastmsc) < nsmallstep) + { + if(tPathLength > tlimit) + { + laststep *= cf ; + tPathLength = laststep ; + valueGPILSelectionMSC = CandidateForSelection; + } + } + } + } + } + + // do the true -> geom transformation + zmean = tPathLength; + + tau = tPathLength/lambda0 ; + + if (tau < tausmall || range < currentMinimumStep) zPathLength = tPathLength; + else + { + if(tPathLength/range < dtrl) zmean = lambda0*(1.-exp(-tau)); + else + { + T1 = G4EnergyLossTables::GetPreciseEnergyFromRange( + aParticle->GetDefinition(),range-tPathLength,couple); + lambda1 = (*theTransportMeanFreePathTable) + (materialIndex)->GetValue(T1,isOut); + if(T0 < Tlow) + alam = range ; + else + alam = lambda0*tPathLength/(lambda0-lambda1) ; + blam = 1.+alam/lambda0 ; + if(tPathLength/range < 2.*dtrl) + { + zmean = alam*(1.-exp(blam*log(1.-tPathLength/alam)))/blam ; + lambdam = -1. ; + } + else + { + G4double w = 1.-0.5*tPathLength/alam ; + lambdam = lambda0*w ; + clam = 1.+alam/lambdam ; + cthm = exp(alam*log(w)/lambda0) ; + zm = alam*(1.-exp(blam*log(w)))/blam ; + zmean = zm + alam*(1.-exp(clam*log(w)))*cthm/clam ; + } + } + + // sample z + zt = zmean/tPathLength ; + if (samplez && (zt < ztmax) && (zt > 0.5)) + { + cz = 0.5*(3.*zt-1.)/(1.-zt) ; + if(tPathLength < exp(log(tmax)/(2.*cz))) + { + cz1 = 1.+cz ; + grej0 = exp(cz1*log(cz*tPathLength/cz1))/cz ; + do + { + zPathLength = tPathLength*exp(log(G4UniformRand())/cz1) ; + grej = exp(cz*log(zPathLength))*(tPathLength-zPathLength)/grej0 ; + } while (grej < G4UniformRand()) ; + } + else zPathLength = zmean; + } + else zPathLength = zmean; + } + // protection against z > lambda + if(zPathLength > lambda0) + zPathLength = lambda0 ; + + tLast = tPathLength; + zLast = zPathLength; + + return zPathLength; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +G4VParticleChange* LEMuSRMSC::AlongStepDoIt( + const G4Track& track,const G4Step& step) +{ + // only a geom path->true path transformation is performed + + fParticleChange.Initialize(track); + + G4double geomPathLength = step.GetStepLength(); + + G4double truePathLength = 0. ; + + //VI change order of if operators + if(geomPathLength == zLast) truePathLength = tLast; + else if(geomPathLength/lambda0 < tausmall) truePathLength = geomPathLength; + else + { + if(lambda1 < 0.) truePathLength = -lambda0*log(1.-geomPathLength/lambda0) ; + else if(lambdam < 0.) + { + if(blam*geomPathLength/alam < 1.) + truePathLength = alam*(1.-exp(log(1.-blam*geomPathLength/alam)/ + blam)) ; + else + truePathLength = tLast; + } + else + { + if(geomPathLength <= zm) + { + if(blam*geomPathLength/alam < 1.) + truePathLength = alam*(1.-exp(log(1.-blam*geomPathLength/alam)/ + blam)) ; + else + truePathLength = 0.5*tLast; + + lambdam = -1. ; + } + else + { + if(clam*(geomPathLength-zm)/(alam*cthm) < 1.) + truePathLength = 0.5*tLast + alam*(1.- + exp(log(1.-clam*(geomPathLength-zm)/(alam*cthm)))/clam) ; + else + truePathLength = tLast ; + } + } + // protection .... + if(truePathLength > tLast) + truePathLength = tLast ; + } + + //VI truePath length cannot be smaller than geomPathLength + if (truePathLength < geomPathLength) truePathLength = geomPathLength; + fParticleChange.ProposeTrueStepLength(truePathLength); + + return &fParticleChange; + +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +G4VParticleChange* LEMuSRMSC::PostStepDoIt( + const G4Track& trackData, + const G4Step& stepData) +{ + // angle distribution parameters + const G4double kappa = 2.5, kappapl1 = kappa+1., kappami1 = kappa-1. ; + + fParticleChange.Initialize(trackData); + G4double truestep = stepData.GetStepLength(); + + const G4DynamicParticle* aParticle = trackData.GetDynamicParticle(); + G4double KineticEnergy = aParticle->GetKineticEnergy(); + G4double Mass = aParticle->GetDefinition()->GetPDGMass() ; + + // do nothing for stopped particles ! + if(KineticEnergy > 0.) + { + // change direction first ( scattering ) + G4double cth = 1.0 ; + G4double tau = truestep/lambda0 ; + + if (tau < tausmall) cth = 1.; + else if(tau > taubig) cth = -1.+2.*G4UniformRand(); + else + { + if(lambda1 > 0.) + { + if(lambdam < 0.) + tau = -alam*log(1.-truestep/alam)/lambda0 ; + else + tau = -log(cthm)-alam*log(1.-(truestep-0.5*tLast)/alam)/lambdam ; + } + + if(tau > taubig) cth = -1.+2.*G4UniformRand(); + else + { + const G4double amax=25. ; + const G4double tau0 = 0.02 ; + const G4double c_highland = 13.6*MeV, corr_highland=0.038 ; + + const G4double x1fac1 = exp(-xsi) ; + const G4double x1fac2 = (1.-(1.+xsi)*x1fac1)/(1.-x1fac1) ; + const G4double x1fac3 = 1.3 ; // x1fac3 >= 1. !!!!!!!!! + + G4double a,x0,c,xmean1,xmean2, + xmeanth,prob,qprob ; + G4double ea,eaa,b1,bx,eb1,ebx,cnorm1,cnorm2,f1x0,f2x0,w ; + + // for heavy particles take the width of the cetral part + // from the Highland formula + // (Particle Physics Booklet, July 2002, eq. 26.10) + if(Mass > electron_mass_c2) // + other conditions (beta, x/X0,...?) + { + G4double Q = fabs(aParticle->GetDefinition()->GetPDGCharge()) ; + G4double X0 = trackData.GetMaterialCutsCouple()-> + GetMaterial()->GetRadlen() ; + G4double xx0 = truestep/X0 ; + G4double betacp = KineticEnergy*(KineticEnergy+2.*Mass)/ + (KineticEnergy+Mass) ; + G4double theta0=c_highland*Q*sqrt(xx0)* + (1.+corr_highland*log(xx0))/betacp ; + if(theta0 > tausmall) + a = 0.5/(1.-cos(theta0)) ; + else + a = 1./(theta0*theta0) ; + } + else + { + w = log(tau/tau0) ; + if(tau < tau0) + a = (alfa1-alfa2*w)/tau ; + else + a = (alfa1+alfa3*w)/tau ; + } + + xmeanth = exp(-tau) ; + + x0 = 1.-xsi/a ; + if(x0 < -1.) x0 = -1. ; + + if(x0 == -1.) + { + // 1 model fuction only + // in order to have xmean1 > xmeanth -> qprob < 1 + if((1.-1./a) < xmeanth) + a = 1./(1.-xmeanth) ; + + if(a*(1.-x0) < amax) + ea = exp(-a*(1.-x0)) ; + else + ea = 0. ; + eaa = 1.-ea ; + xmean1 = 1.-1./a+(1.-x0)*ea/eaa ; + + c = 2. ; + b1 = b+1. ; + bx = b1 ; + eb1 = b1 ; + ebx = b1 ; + xmean2 = 0. ; + + prob = 1. ; + qprob = xmeanth/xmean1 ; + } + else + { + // 2 model fuctions + // in order to have xmean1 > xmeanth + if((1.-x1fac2/a) < xmeanth) + { + a = x1fac3*x1fac2/(1.-xmeanth) ; + if(a*(1.-x0) < amax) + ea = exp(-a*(1.-x0)) ; + else + ea = 0. ; + eaa = 1.-ea ; + xmean1 = 1.-1./a+(1.-x0)*ea/eaa ; + } + else + { + ea = x1fac1 ; + eaa = 1.-x1fac1 ; + xmean1 = 1.-x1fac2/a ; + } + + // from continuity of the 1st derivatives + c = a*(b-x0) ; + if(a*tau < c0) + c = c0*(b-x0)/tau ; + + if(c == 1.) c=1.000001 ; + if(c == 2.) c=2.000001 ; + if(c == 3.) c=3.000001 ; + + b1 = b+1. ; + bx=b-x0 ; + eb1=exp((c-1.)*log(b1)) ; + ebx=exp((c-1.)*log(bx)) ; + xmean2 = (x0*eb1+ebx+(eb1*bx-b1*ebx)/(2.-c))/(eb1-ebx) ; + + cnorm1 = a/eaa ; + f1x0 = cnorm1*exp(-a*(1.-x0)) ; + cnorm2 = (c-1.)*eb1*ebx/(eb1-ebx) ; + f2x0 = cnorm2/exp(c*log(b-x0)) ; + + // from continuity at x=x0 + prob = f2x0/(f1x0+f2x0) ; + // from xmean = xmeanth + qprob = (f1x0+f2x0)*xmeanth/(f2x0*xmean1+f1x0*xmean2) ; + } + + // protection against prob or qprob > 1 and + // prob or qprob < 0 + // *************************************************************** + if((qprob > 1.) || (qprob < 0.) || (prob > 1.) || (prob < 0.)) + { + // this print possibility has been left intentionally + // for debugging purposes .......................... + G4bool pr = false ; + // pr = true ; + if(pr) + { + const G4double prlim = 0.10 ; + if((fabs((xmeanth-xmean2)/(xmean1-xmean2)-prob)/prob > prlim) || + ((xmeanth-xmean2)/(xmean1-xmean2) > 1.) || + ((xmeanth-xmean2)/(xmean1-xmean2) < 0.) ) + { + G4cout.precision(5) ; + G4cout << "\nparticle=" << aParticle->GetDefinition()-> + GetParticleName() << " in material " + << trackData.GetMaterialCutsCouple()-> + GetMaterial()->GetName() << " with kinetic energy " + << KineticEnergy << " MeV," << G4endl ; + G4cout << " step length=" + << truestep << " mm" << G4endl ; + G4cout << "p=" << prob << " q=" << qprob << " -----> " + << "p=" << (xmeanth-xmean2)/(xmean1-xmean2) + << " q=" << 1. << G4endl ; + } + } + qprob = 1. ; + prob = (xmeanth-xmean2)/(xmean1-xmean2) ; + } + // ************************************************************** + + // sampling of costheta + if(G4UniformRand() < qprob) + { + if(G4UniformRand() < prob) + cth = 1.+log(ea+G4UniformRand()*eaa)/a ; + else + cth = b-b1*bx/exp(log(ebx-G4UniformRand()*(ebx-eb1))/(c-1.)) ; + } + else + cth = -1.+2.*G4UniformRand() ; + } + + + // TAO if Kenergy<100*keV use Meyer + if(KineticEnergy<100*keV && + trackData.GetMaterialCutsCouple()-> + GetMaterial()->GetNumberOfElements()==1&& + stepData.GetPreStepPoint()->GetPhysicalVolume()-> + GetName()=="pv_CFOIL" + ) + { + + /* G4cout << "\nparticle=" << aParticle->GetDefinition()-> + GetParticleName() << " in material " + << trackData.GetMaterialCutsCouple()-> + GetMaterial() ->GetName() << " with kinetic energy " + << KineticEnergy << " MeV," << G4endl ; + */ + + G4double Z1, Z2; + G4double m1, m2, proton_mass; + proton_mass=938.28*MeV; + Z1=aParticle->GetDefinition()->GetPDGCharge(); + Z2=trackData.GetMaterialCutsCouple()-> + GetMaterial()->GetZ(); + + m1=aParticle->GetDefinition()->GetPDGMass()/proton_mass; + m2=2*Z2; + + /* + G4cout << "\nparticle mass = " << m1 + << "\nparticle charge= " << Z1 + << "\nmaterial mass = " << m2 + << "\nmaterial charge= " << Z2 + << G4endl ; + */ + + + //MEYERS FACTORS + + meyer meyer; + double thetaSchlange,thetaSchlangeMax; + double theta,thetaMax; + double f1,f2,F; + + + //--------------------------------- + //- Parameters: + double a0; // ! Bohrscher Radius in cm + a0 = 5.29E-9;//unit == centimeter + double screeningPar; // ! Screeningparameter "a" in cm fuer Teilchen der + // ! Kernladungszahl Z1=1 in Kohlenstoff (Z2 = 6) + // ! bei Streichung von Z1 (vgl. Referenz, S. 268) + double r0Meyer; // ! r0(C) berechnet aus dem screeningParameter "a" + // ! und dem ebenfalls bei Meyer angegebenem + // ! Verhaeltnis a/r0=0.26 (vgl. Referenz, S. 263 oben) + double eSquare; // ! elektrische Ladung zum Quadrat in keV*cm + double Pi ; // ! die Kreiszahl + + // MEYER NO UNIT NUMBERS + double Ekin= KineticEnergy/keV; + double thick= LEMuSRDetectorConstruction::GetInstance()->cfthk; + + //the screening parameter + double D= exp(2/3*log(Z1))+exp(2/3*log(Z2)); + double a_=0.885*a0/sqrt(D); + screeningPar=a_; // screeningPar = 2.5764E-9; + + r0Meyer = 9.909E-9; + eSquare = 1.44E-10; + Pi = 3.141592654; + + double Meyer_faktor3; + double Meyer_faktor4; + double zzz;// ! "Hilfsparameter" + double Meyer_faktor5; + + Meyer_faktor3 = (screeningPar/r0Meyer) * (screeningPar/r0Meyer); + + Meyer_faktor4 = (m1+m2)/m2/2.; + // std::cout<<"MEYER_F4 "< kann ich nicht ... => STOP"< Tabelle A + thetaSchlangeMax = 4.0; + } + else if (thick<=8.) + { + //! => Tabelle B + thetaSchlangeMax = 7.0; + } + else if (thick<=20.) + { + //! => Tabelle C + thetaSchlangeMax = 20.0; + } + else + { + std::cout<< "Subroutine ''Get_F_Function_Meyer'':"< kann ich nicht ... => STOP"<F); + // std::cout<<"theta " <GetMomentumDirection(); + + G4ThreeVector newDirection(dirx,diry,dirz); + newDirection.rotateUz(ParticleDirection); + fParticleChange.ProposeMomentumDirection(newDirection.x(), + newDirection.y(), + newDirection.z()); + + if (fLatDisplFlag) + { + // compute mean lateral displacement, only for safety > tolerance ! + G4double safetyminustolerance = stepData.GetPostStepPoint()->GetSafety(); + G4double rmean, etau; + + if (safetyminustolerance > 0.) + { + if (tau < tausmall) rmean = 0.; + else if(tau < taulim) rmean = kappa*tau*tau*tau*(1.-kappapl1*tau/4.)/6.; + else + { + if(tau0.) rmean = 2.*lambda0*sqrt(rmean/3.); + else rmean = 0.; + + // for rmean > 0) only + if (rmean > 0.) + { + if (rmean>safetyminustolerance) rmean = safetyminustolerance; + + // sample direction of lateral displacement + phi = twopi*G4UniformRand(); + dirx = cos(phi); diry = sin(phi); dirz = 0.; + + G4ThreeVector latDirection(dirx,diry,dirz); + latDirection.rotateUz(ParticleDirection); + + // compute new endpoint of the Step + G4ThreeVector newPosition = stepData.GetPostStepPoint()->GetPosition() + + rmean*latDirection; + + G4Navigator* navigator = + G4TransportationManager::GetTransportationManager() + ->GetNavigatorForTracking(); + navigator->LocateGlobalPointWithinVolume(newPosition); + + fParticleChange.ProposePosition(newPosition); + } + } + } + } + + return &fParticleChange; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void LEMuSRMSC::PrintInfoDefinition() +{ + G4String comments = " Tables of transport mean free paths."; + comments += "\n New model of MSC , computes the lateral \n"; + comments += " displacement of the particle , too."; + + G4cout << G4endl << GetProcessName() << ": " << comments + << "\n PhysicsTables from " + << G4BestUnit(LowestKineticEnergy ,"Energy") + << " to " << G4BestUnit(HighestKineticEnergy,"Energy") + << " in " << TotBin << " bins. \n"; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/geant4/LEMuSR/src/LEMuSRMUONIUM.cc b/geant4/LEMuSR/src/LEMuSRMUONIUM.cc new file mode 100644 index 0000000..7405c61 --- /dev/null +++ b/geant4/LEMuSR/src/LEMuSRMUONIUM.cc @@ -0,0 +1,140 @@ + +#include "LEMuSRMUONIUM.hh" +#include "G4StepStatus.hh" +#include "G4Navigator.hh" +#include "G4TransportationManager.hh" +#include "Randomize.hh" +#include "G4ProductionCutsTable.hh" + + +#include "meyer.h" +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +using namespace std; + +LEMuSRMUONIUM:: LEMuSRMUONIUM(const G4String& name , + G4ProcessType aType ) + : G4VDiscreteProcess(name, aType) +{} + + +LEMuSRMUONIUM:: ~LEMuSRMUONIUM() +{} + + +G4VParticleChange* LEMuSRMUONIUM::PostStepDoIt( + const G4Track& trackData, + const G4Step& aStep ) +{ + // Initialize ParticleChange (by setting all its members equal + // to corresponding members in G4Track) + fParticleChange.Initialize(trackData); + + + G4Track theNewTrack; + if( CheckCondition(aStep)) + { + GetDatas(&aStep); + G4Step theStep; + PrepareSecondary( trackData); + + fParticleChange.AddSecondary(aSecondary); + fParticleChange.ProposeTrackStatus(fStopAndKill) ; + + } + else + { + fParticleChange.ProposeTrackStatus(trackData.GetTrackStatus()) ; + } + + return &fParticleChange; +} + + +G4bool LEMuSRMUONIUM::CheckCondition( const G4Step& aStep) +{ + G4bool condition=false; + p_name = aStep.GetTrack()->GetDefinition()->GetParticleName(); // particle name + if(p_name == "mu+"&&aStep.GetTrack()->GetVolume()->GetLogicalVolume()->GetName()=="lv_CFOIL") + { + condition=true; + } + + return condition; + +} + + +G4double LEMuSRMUONIUM:: GetMeanFreePath(const G4Track& , + G4double , + G4ForceCondition* condition + ) +{ + + *condition = Forced; + return DBL_MAX; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +void LEMuSRMUONIUM::GetDatas( const G4Step* aStep) +{ + + // Particle generation according to yields + particleTable=G4ParticleTable::GetParticleTable(); + rnd=G4UniformRand(); + // std::cout<<"rnd : "<GetTrack()->GetDynamicParticle() + ->GetKineticEnergy()/keV; //LEMuSRPrimaryGeneratorAction::GetPGA()->energy/keV+LEMuSRPrimaryGeneratorAction::GetPGA()->ke_offset/keV; + Gonin.GetYields(E,105*1000,yvector); + + + G4String p_new="Mu"; + // MUON PLUS + + if(p_name=="mu+") + { + if(rndFindParticle(p_name) ; + } + else + { + particle = particleTable->FindParticle(p_new); + } + + // Set the new dynamic particle + + + + + DP = new G4DynamicParticle(particle, + aStep->GetTrack()->GetDynamicParticle() + ->GetMomentumDirection(), + + aStep->GetTrack()->GetDynamicParticle() + ->GetKineticEnergy() + ); + // IMPORTANT : COPY THOSE DATA TO GET THE SAME PARTICLE PROPERTIES!!!! + // SHOULD BE KEPT WHEN BUILDING A PARTICLE CHANGE + DP->SetProperTime(aStep->GetTrack()->GetDynamicParticle()->GetProperTime()); + DP->SetPolarization(aStep->GetTrack()->GetDynamicParticle()->GetPolarization().x(),aStep->GetTrack()->GetDynamicParticle()->GetPolarization().y(),aStep->GetTrack()->GetDynamicParticle()->GetPolarization().z()); + DP->SetPreAssignedDecayProperTime(aStep->GetTrack()->GetDynamicParticle()->GetPreAssignedDecayProperTime()); + } + + +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + + + +void LEMuSRMUONIUM::PrepareSecondary(const G4Track& track) +{ + if(p_name=="mu+") + { + aSecondary = new G4Track(DP,track.GetGlobalTime(),track.GetPosition()); + } + + +} diff --git a/geant4/LEMuSR/src/LEMuSRMUONIUMScatt.cc b/geant4/LEMuSR/src/LEMuSRMUONIUMScatt.cc new file mode 100644 index 0000000..06c5eaf --- /dev/null +++ b/geant4/LEMuSR/src/LEMuSRMUONIUMScatt.cc @@ -0,0 +1,125 @@ +#include "LEMuSRMUONIUMScatt.hh" +#include "G4StepStatus.hh" +#include "G4Navigator.hh" +#include "G4TransportationManager.hh" +#include "Randomize.hh" +#include "G4ProductionCutsTable.hh" + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +using namespace std; + +LEMuSRMUONIUMScatt:: LEMuSRMUONIUMScatt(const G4String& name , + G4ProcessType aType ) + : G4VDiscreteProcess(name, aType) +{} + + +LEMuSRMUONIUMScatt:: ~LEMuSRMUONIUMScatt() +{} + + +G4VParticleChange* LEMuSRMUONIUMScatt::PostStepDoIt( + const G4Track& trackData, + const G4Step& aStep ) +{ + fParticleChange.Initialize(trackData); + + // tao :: Get Time + G4double itime = trackData.GetProperTime(); + G4double gtime = trackData.GetGlobalTime(); + G4double ftime = trackData.GetDynamicParticle()->GetPreAssignedDecayProperTime(); + + G4double deltatime = ftime - itime; + fParticleChange.ProposeGlobalTime(deltatime + itime -gtime); + + // set position momentum energy + fParticleChange.ProposePosition(trackData.GetPosition()); + fParticleChange.ProposeMomentumDirection(trackData.GetMomentumDirection()); + fParticleChange.ProposeEnergy(trackData.GetKineticEnergy()); + fParticleChange.ProposeGlobalTime(gtime); + fParticleChange.ProposeProperTime(itime); + fParticleChange.ProposeTrackStatus(trackData.GetTrackStatus()) ; + + if( CheckCondition(aStep)) + { + // fParticleChange.ProposeEnergy(0); + fParticleChange.ProposePosition(trackData.GetStep()->GetPreStepPoint()->GetPosition()); + + fParticleChange.ProposePolarization(trackData.GetPolarization()); + // G4cout<<" at rest "<< trackData.GetStep()->GetPreStepPoint()->GetPosition() <GetDefinition()->GetParticleName(); // particle name + if(p_name == "Mu"&&aStep.GetTrack()->GetVolume()->GetLogicalVolume()->GetName()!="lv_CFOIL"&&aStep.GetTrack()->GetVolume()->GetLogicalVolume()->GetMaterial()->GetName()!="vacuum") + { + condition=true; + } + + return condition; + +} + + +G4double LEMuSRMUONIUMScatt:: GetMeanFreePath(const G4Track& , + G4double , + G4ForceCondition* condition + ) +{ + + *condition = Forced; + return DBL_MAX; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void LEMuSRMUONIUMScatt::GetDatas( const G4Step* aStep) +{ + + // Particle generation according to yields + particleTable=G4ParticleTable::GetParticleTable(); + particle = particleTable->FindParticle("Mu"); + + // Set the new dynamic particle + DP = new G4DynamicParticle(particle, + aStep->GetTrack()->GetDynamicParticle() + ->GetMomentumDirection(),0.0/*the kinectic energy set to zero*/ + ); + + + DP->SetProperTime(aStep->GetTrack()->GetDynamicParticle()->GetPreAssignedDecayProperTime()); + DP->SetPolarization(aStep->GetTrack()->GetDynamicParticle()->GetPolarization().x(),aStep->GetTrack()->GetDynamicParticle()->GetPolarization().y(),aStep->GetTrack()->GetDynamicParticle()->GetPolarization().z()); + DP->SetPreAssignedDecayProperTime(aStep->GetTrack()->GetDynamicParticle()->GetPreAssignedDecayProperTime()); + + +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + + + +void LEMuSRMUONIUMScatt::PrepareSecondary(const G4Track& track) +{ + aSecondary = new G4Track(DP,track.GetDynamicParticle()->GetPreAssignedDecayProperTime(),track.GetPosition()); + + +;} diff --git a/geant4/LEMuSR/src/LEMuSRMag_SpinEqRhs.cc b/geant4/LEMuSR/src/LEMuSRMag_SpinEqRhs.cc new file mode 100644 index 0000000..fd7cd4b --- /dev/null +++ b/geant4/LEMuSR/src/LEMuSRMag_SpinEqRhs.cc @@ -0,0 +1,121 @@ + // +// ******************************************************************** +// * DISCLAIMER * +// * * +// * The following disclaimer summarizes all the specific disclaimers * +// * of contributors to this software. The specific disclaimers,which * +// * govern, are listed with their locations in: * +// * http://cern.ch/geant4/license * +// * * +// * Neither the authors of this software system, nor their employing * +// * institutes,nor the agencies providing financial support for this * +// * work make any representation or warranty, express or implied, * +// * regarding this software system or assume any liability for its * +// * use. * +// * * +// * This code implementation is the intellectual property of the * +// * GEANT4 collaboration. * +// * By copying, distributing or modifying the Program (or any work * +// * based on the Program) you indicate your acceptance of this * +// * statement, and all its terms. * +// ******************************************************************** +// +// +// $Id$ +// GEANT4 tag $Name$ +// +// This is the standard right-hand side for equation of motion. +// This version of the right-hand side includes the three components +// of the particle's spin. +// +// J. Apostolakis, February 8th, 1999 +// P. Gumplinger, February 8th, 1999 +// D. Cote-Ahern, P. Gumplinger, April 11th, 2001 +// +// -------------------------------------------------------------------- + +#include "LEMuSRMag_SpinEqRhs.hh" +#include "G4MagneticField.hh" +#include "G4ThreeVector.hh" + + +LEMuSRMag_SpinEqRhs::LEMuSRMag_SpinEqRhs( G4MagneticField* MagField ) + : G4Mag_EqRhs( MagField ) {} + +LEMuSRMag_SpinEqRhs::~LEMuSRMag_SpinEqRhs() {} + +void +LEMuSRMag_SpinEqRhs::SetChargeMomentumMass(G4double particleCharge, // in e+ units + G4double MomentumXc, + G4double mass) +{ + // To set fCof_val + G4Mag_EqRhs::SetChargeMomentumMass(particleCharge, MomentumXc, mass); + + omegac = 0.105658387*GeV/mass * 2.837374841e-3*(rad/cm/kilogauss); + anomaly = 1.165923e-3; + ParticleCharge = particleCharge; + + E = sqrt(sqr(MomentumXc)+sqr(mass)); + beta = MomentumXc/E; + gamma = E/mass; + + // G4cout<<"LEMuSRMAg_SpinEqRhs :: mass" << mass/g << " \n"; + +} + +void +LEMuSRMag_SpinEqRhs::EvaluateRhsGivenB( const G4double y[], + const G4double B[3], + G4double dydx[] ) const +{ + G4double momentum_mag_square = sqr(y[3]) + sqr(y[4]) + sqr(y[5]); + // G4cout << "\n------------ LEMuSRMAg_SpinEqRhs :: mommagnitude : "<< sqrt(momentum_mag_square) <<"\n"; + G4double inv_momentum_magnitude = 1.0 / sqrt( momentum_mag_square ); + G4double cof = FCof()*inv_momentum_magnitude; + + dydx[0] = y[3] * inv_momentum_magnitude; // (d/ds)x = Vx/V + dydx[1] = y[4] * inv_momentum_magnitude; // (d/ds)y = Vy/V + dydx[2] = y[5] * inv_momentum_magnitude; // (d/ds)z = Vz/V + dydx[3] = cof*(y[4]*B[2] - y[5]*B[1]) ; // Ax = a*(Vy*Bz - Vz*By) + dydx[4] = cof*(y[5]*B[0] - y[3]*B[2]) ; // Ay = a*(Vz*Bx - Vx*Bz) + dydx[5] = cof*(y[3]*B[1] - y[4]*B[0]) ; // Az = a*(Vx*By - Vy*Bx) + + + G4ThreeVector pos(y[0], y[1], y[2]); + + G4ThreeVector u(y[3], y[4], y[5]); + u *= inv_momentum_magnitude; + + G4ThreeVector BField(B[0],B[1],B[2]); + + G4double udb = anomaly*beta*gamma/(1.+gamma) * (BField * u); + G4double ucb = (anomaly+1./gamma)/beta; + + // Initialise the values of dydx that we do not update. + dydx[6] = dydx[7] = dydx[8] = 0.0; + + G4ThreeVector Spin(y[9],y[10],y[11]); + G4ThreeVector dSpin; + + dSpin = 0;//ParticleCharge*omegac*(ucb*(Spin.cross(BField))-udb*(Spin.cross(u))); + + + dydx[ 9] = dSpin.x(); + dydx[10] = dSpin.y(); + dydx[11] = dSpin.z(); + //G4cout<<"LEMuSRMAg_SpinEqRhs :: dydx" << Spin*u << " \n"; + + // G4cout<<"LEMuSRMAg_SpinEqRhs :: dydx \n" + // << dydx[0] <<" " << dydx[1] <<" "<< dydx[2] <<" "<<"\n" + // << dydx[3] <<" " << dydx[4] <<" "<< dydx[5] <<" "<<"\n" + // << dydx[6] <<" " << dydx[7] <<" "<< dydx[8] <<" "<<"\n" + // << dydx[9] <<" " << dydx[10] <<" "<< dydx[11] <<" "<<"\n"; + + + // G4cout<<"LEMuSRMAg_SpinEqRhs ::" << pos <<"\n" << u <<"\n" << Spin <<"\n" << BField <<"\n" < + + +LEMuSRMagneticField::LEMuSRMagneticField(const G4ThreeVector FieldVector) + :G4UniformMagField(FieldVector ) +{ + BField=FieldVector; + +} + + +LEMuSRMagneticField::~LEMuSRMagneticField() +{;} + + +void LEMuSRMagneticField::GetFieldValue (const G4double pos[4], + G4double *field ) const +{ + + + + field[0]= 0.0; + field[1]= 0.0; + field[2]= 0.0; + + G4double X,Y,Z,factor; + + X= pos[0];Y=pos[1];Z=pos[2]*mm; + // G4cout<<"\n"<-20*cm) + { //G4cout<<"true!"; + factor=exp((-Z*Z)/(10*cm*10*cm)); + field[0]= BField.x()*factor ;//TAO + field[1]= BField.y()*factor ; + field[2]= BField.z()*factor ; + + //G4cout<<"true!"< + + +// HEADER +#include "LEMuSRDetectorConstruction.hh" +#include "LEMuSRDetectorMessenger.hh" + + +// process remove +#include "G4ParticleTable.hh" +#include "G4ParticleDefinition.hh" +#include "G4ParticleChange.hh" +#include "G4ProcessVector.hh" +#include "G4ProcessManager.hh" +#include "G4VProcess.hh" + +// electric fieldmap +#include "LEMuSRElectricField.hh" +#include "LEMuSRElFieldMix.hh" +#include "G4ElectricField.hh" +#include "G4ElectroMagneticField.hh" +#include "G4EqMagElectricField.hh" + +//§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§// + + + +//§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§// +// DEFINE COLOR AND USER LIMIT ATTRIBUTES +//§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§// + +void LEMuSRDetectorConstruction :: LoadAttributes() +{ + + // visual attributes + + Blue_style = new G4VisAttributes(G4Colour(0.80,0.83,1.)); + Blue_style->SetForceSolid(true); + //Blue_style->SetForceWireframe(false); + fBlue_style = new G4VisAttributes(G4Colour(0.85,.88,0.92)); + fBlue_style->SetForceSolid(true); + + + Red_style = new G4VisAttributes(G4Colour(1.0,0.,.0)); + Red_style->SetForceSolid(true); + + oxsteel = new G4VisAttributes(G4Colour(0.9,0.8,0.75)); + oxsteel->SetForceSolid(true); + + dRed_style = new G4VisAttributes(G4Colour(0.5,0.,.0)); + dRed_style->SetForceSolid(true); + // dRed_style->SetForceWireframe(false); + + Green_style = new G4VisAttributes(G4Colour(0.,1.,.0)); + Green_style->SetForceSolid(true); + // Green_style->SetForceWireframe(false); + + White_style = new G4VisAttributes(G4Colour(1.,1.,1.0)); + White_style->SetForceSolid(true); + // White_style->SetForceWireframe(false); + + lBlue_style = new G4VisAttributes(G4Colour(0.,.5,1.0)); + lBlue_style->SetForceSolid(true); + + + dBlue_style = new G4VisAttributes(G4Colour(0.,.25,.5)); + dBlue_style->SetForceSolid(true); + + Purple_style = new G4VisAttributes(G4Colour(1.,0.,1.0)); + Purple_style->SetForceSolid(true); + // Purple_style->SetForceWireframe(false); + + MCP_style = new G4VisAttributes(G4Colour(0.5,0.2,.7)); + MCP_style->SetForceSolid(true); + // MCP_style->SetForceWireframe(false); + + MACOR_style = new G4VisAttributes(G4Colour(0.9,0.9,.1)); + MACOR_style->SetForceSolid(true); + // MACOR_style->SetForceWireframe(false); + + SCINT_style = new G4VisAttributes(G4Colour(0.5,0.5,.75)); + SCINT_style->SetForceSolid(true); + + dSCINT_style = new G4VisAttributes(G4Colour(0.3,0.3,.3)); + dSCINT_style->SetForceSolid(true); + + + + + VTBB_style = new G4VisAttributes(G4Colour(0.9,0.9,.9)); + //VTBB_style->SetForceSolid(true); + VTBB_style->SetForceWireframe(true); + + // user limits + VTBB_lim = new G4UserLimits(); + + +} + + + + +//§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§// +// MATERIALS DEFINITION +//§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§// + +void LEMuSRDetectorConstruction :: MaterialsDefinition () +{ + + + + G4double a; // atomic mass + G4double z; // atomic number + G4double density; // + G4String name, symbol; // + G4int nbelements; // number of elements + G4double fractionmass; // fractionnal mass - for mixtures + + + + /*** ELEMENTS***/ + + + + // definition hydrogene + a=1.01*g/mole; + G4Element* H = new G4Element(name="hydrogen", symbol="H", z=1., a); + + // definition boron + a=10.811*g/mole; + G4Element* B = new G4Element(name="boron", symbol="B", z=5., a); + + + // definition carbon + a=12.0107*g/mole; + G4Element* C= new G4Element(name="carbone", symbol="C", z=6., a); + + // definition nitrogen + a=14.01*g/mole; + G4Element* N = new G4Element(name="nitrogen", // le nom + symbol="N", // le symbole + z=7., // le numero atomique + a); // la masse atomique + + + // definition oxygene + a=16.00*g/mole; + G4Element* O = new G4Element(name="oxygen",symbol="O", z=8., a); + + // definition sodium + a=22.989770*g/mole; + G4Element* Na= new G4Element(name="sodium", symbol="Na", z=11, a); + + + // definition magnesium + a=24.305*g/mole; + G4Element* Mg= new G4Element ("magnesium","Mg", z=12,a) ; + + // definition aluminium + a=26.981538*g/mole; + G4Element* Al= new G4Element(name="aluminium", symbol="Al", z=13, a); + + // definition silicon + a=28.0855*g/mole; + G4Element* Si= new G4Element(name="silicon", symbol="Si", z=14., a); + + // definition potassium + a=39.0983*g/mole; + G4Element* K= new G4Element(name="potassium", symbol="K", z=19., a); + + // definition chromium + a=51.9961*g/mole; + G4Element* Cr= new G4Element(name="chromium", symbol="Cr", z=24., a); + + // definition mangenese + // a=54.938049*g/mole; + // G4Element* Mn= new G4Element(name="manganese", symbol="Mn", z=25., a); + + // definition iron + a=55.847*g/mole; + G4Element* Fe= new G4Element(name="fer", symbol="Fe", z=26., a); + + // definition nickel + a=58.6934*g/mole; + G4Element* Ni= new G4Element(name="nickel", symbol="Ni", z=28., a); + + // definition copper + a=63.546*g/mole; + G4Element* Cu= new G4Element(name="copper", symbol="Cu", z=29., a); + + // definition zinc + a=65.409*g/mole; + G4Element* Zn= new G4Element(name="zinc", symbol="Zn", z=30., a); + + // definition arsenic + a=74.92160*g/mole; + G4Element* As = new G4Element(name="arsenic", symbol="As", z=33., a); + + // definition rubidium + a=85.4678*g/mole; + G4Element* Rb= new G4Element(name="rubidium", symbol="Rb", z=37., a); + + //definition iodine + a=126.90447*g/mole; + G4Element* I = new G4Element(name="iodine", symbol="I", z=53., a); + + //definition caesium + a=132.90545*g/mole; + G4Element* Cs = new G4Element(name="caesium", symbol="Cs", z=55., a); + + //definition barium + a=137.327*g/mole; + G4Element* Ba= new G4Element(name="barium", symbol="Ba", z=56., a); + + // definition tantalum + a=180.95*g/mole; + G4Element* Ta= new G4Element(name="tantalum", symbol="Ta", z=73., a); + + // definition tungsten + a=183.85*g/mole; + G4Element* W= new G4Element(name="tungsten", symbol="W", z=74., a); + + // definition gold + a=196.97*g/mole; + G4Element* Au= new G4Element(name="gold", symbol="Au", z=79., a); + + // definition lead + a=207.2*g/mole; + G4Element* Pb= new G4Element(name="lead", symbol="Pb", z=82., a); + + + + + + /***MATERIAUX***/ + + // definition : composition de Air + density=1.290*mg/cm3; + G4Material* Air= new G4Material(name="Air", density,nbelements=2); + Air->AddElement (N, fractionmass=0.7);//fractionmass=G4double + Air->AddElement (O, fractionmass=0.3);//fractionmass=G4double + + + density=1.e-9*g/cm3; + G4Material* vac= new G4Material(name="vac", density,nbelements=1); + vac->AddMaterial (Air, fractionmass=1.);//fractionmass=G4double + + + // vacuum + density=1.e-15*g/cm3; + /* G4Material* vacuum = new G4Material("vacuum", z=1., a=1.01*g/mole, density, kStateGas, 3.e-10*pascal, 2.73*kelvin); + G4Material* vacuum2; + vacuum2= vacuum; + */ + density= 2.376e-15*g/cm3; + G4double temperature= 300*kelvin; + G4double pressure= 3.0e-9*pascal; + G4Material* vacuum = new G4Material(name="vacuum", density, nbelements=1, + kStateGas,temperature,pressure); + vacuum-> AddMaterial(Air, fractionmass= 1.); + + //definition H2O= + density = 1.000*g/cm3; + G4Material* H2O = new G4Material(name="H2O", density, 2); + H2O->AddElement (H, nbelements=2);//nbelements=G4int + H2O->AddElement (O, nbelements=1);//nbelements=G4int + + + + //definition materiau 'tantale' + density = 16.650*g/cm3; + G4Material* tantale = new G4Material(name="tantale", density, 1); + tantale->AddElement (Ta, nbelements=1); + + //definition materiau 'or' + density = 19.300*g/cm3; + G4Material* gold = new G4Material(name="gold", density, 1); + gold->AddElement (Au, nbelements=1); + + // definition materiau 'iron' + density = 7.874*g/cm3; + G4Material* iron = new G4Material("iron",density,1); + iron->AddElement (Fe,1); + + // definition materiau 'tungsten' + density =19.250*g/cm3; + G4Material* tungsten = new G4Material("tungsten",density,1); + tungsten->AddElement(W,1); + + + // definition : composition of Graphite + density=2.*g/cm3; + G4Material* graphite= new G4Material(name="graphite",density,1); + graphite->AddElement (C,1); + + + /***MATERIAUX***/ + + // definition composition of NaI + density = 3.67*g/cm3; + G4Material* NaI = new G4Material(name="NaI", density, 2); + NaI->AddElement (Na, nbelements=1);//nbelements=G4int + NaI->AddElement (I, nbelements=1);//nbelements=G4int + + // definition composition of MgO + density = 3.60*g/cm3; + G4Material* MgO = new G4Material(name="MgO", density, 2); + MgO->AddElement (Mg, nbelements=1);//nbelements=G4int + MgO->AddElement (O, nbelements=1);//nbelements=G4int + + // definition composition of K2O + density = 2.350*g/cm3; + G4Material* K2O = new G4Material(name="K2O", density, 2); + K2O->AddElement (O, nbelements=1); + K2O->AddElement (K, nbelements=2); + +// definition composition of SiO2 + density = 2.533*g/cm3; + G4Material* SiO2 = new G4Material(name="SiO2", density, 2); + SiO2->AddElement (O, nbelements=2); + SiO2->AddElement (Si, nbelements=1); + + + // definition composition of B2O3 + density = 2.550*g/cm3; + G4Material* B2O3 = new G4Material(name="B2O3", density, 2); + B2O3->AddElement (B, nbelements=2); + B2O3->AddElement (O, nbelements=3); + + + // definition : composition of saphire //Al2-O3 + density=3.985*g/cm3; + G4Material*saphire = new G4Material(name="saphire", density,2); + saphire->AddElement (Al, nbelements=2); + saphire->AddElement (O, nbelements=3); + + //definition materiau 'copper' + density = 8.920*g/cm3; + G4Material* copper = new G4Material(name="copper", density, 1); + copper->AddElement (Cu, nbelements=1); + + // definition materiau 'aluminium' + density = 2.700*g/cm3; + G4Material* aluminium = new G4Material("aluminium",density,1); + aluminium->AddElement (Al,1); + + // definition composition de Brass + density=8.67*g/cm3; + G4Material* brass= new G4Material(name="brass", density,4); + brass->AddElement (Cu, fractionmass=63./100.); + brass->AddElement (Pb, fractionmass=3./100.); + brass->AddElement (Fe, fractionmass=0.1/100.); + brass->AddElement (Zn, fractionmass=33.9/100.); + + + // definition composition de mcpglass + density = 2.*g/cm3; + G4Material* mcpglass = new G4Material(name="mcpglass", density, 9); + mcpglass->AddElement (Pb, fractionmass= 0.48 ); + mcpglass->AddElement (O, fractionmass= 0.258 ); + mcpglass->AddElement (Si, fractionmass= 0.182 ); + mcpglass->AddElement (K, fractionmass= 0.042 ); + mcpglass->AddElement (Rb, fractionmass= 0.018 ); + mcpglass->AddElement (Ba, fractionmass= 0.013 ); + mcpglass->AddElement (As, fractionmass= 0.004 ); + mcpglass->AddElement (Cs, fractionmass= 0.002 ); + mcpglass->AddElement (Na, fractionmass= 0.001 ); + + // definition composition de scint + density = 1.*g/cm3; + G4Material* scint = new G4Material(name="scint", density, 2); + scint->AddElement (C, fractionmass= 1/2.04 ); + scint->AddElement (H, fractionmass= 1.04/2.04); + + // definition : composition de stainless_steel + density=7.930*g/cm3; + G4Material* stainless_steel= new G4Material(name="stainless_steel", density,3); + stainless_steel->AddElement (Ni, fractionmass= 0.11); + stainless_steel->AddElement (Cr, fractionmass= 0.18); + stainless_steel->AddElement (Fe, fractionmass= 0.71); + + + // definition : composition de macor + density=2.52*g/cm3; + G4Material* macor= new G4Material(name="macor", density,5); + macor->AddMaterial (SiO2, fractionmass=0.47); + macor->AddMaterial (saphire, fractionmass=0.17); + macor->AddMaterial (MgO, fractionmass=0.18); + macor->AddMaterial (K2O, fractionmass=0.105); + macor->AddMaterial (B2O3, fractionmass=0.075); + + // G4cout << *(G4Material::GetMaterialTable()) << G4endl; + +} + diff --git a/geant4/LEMuSR/src/LEMuSRMcpHit.cc b/geant4/LEMuSR/src/LEMuSRMcpHit.cc new file mode 100644 index 0000000..14bae77 --- /dev/null +++ b/geant4/LEMuSR/src/LEMuSRMcpHit.cc @@ -0,0 +1,75 @@ +#include "LEMuSRMcpHit.hh" +#include "G4VVisManager.hh" +#include "G4Circle.hh" +#include "G4Colour.hh" +#include "G4VisAttributes.hh" +#include "G4ios.hh" +#include +#include + +#include "G4UnitsTable.hh" + +G4Allocator LEMuSRMcpHitAllocator; + +LEMuSRMcpHit::LEMuSRMcpHit() +{;} + +LEMuSRMcpHit::~LEMuSRMcpHit() +{;} + +LEMuSRMcpHit::LEMuSRMcpHit(const LEMuSRMcpHit &right) : G4VHit() +{ + particle_name = right.particle_name; + energy_deposition = right.energy_deposition; + time_of_flight = right.time_of_flight; + position = right.position; + momentum = right.momentum; +} + +const LEMuSRMcpHit& LEMuSRMcpHit::operator=(const LEMuSRMcpHit &right) +{ + particle_name = right.particle_name; + energy_deposition = right.energy_deposition; + time_of_flight = right.time_of_flight; + position = right.position; + momentum = right.momentum; + return *this; +} + + + +G4int LEMuSRMcpHit::operator==(const LEMuSRMcpHit &right) const +{ + return (this==&right) ? 1 : 0; +} + +void LEMuSRMcpHit::Draw() +{ + G4VVisManager* VisManager = G4VVisManager::GetConcreteInstance(); + if(VisManager) + { + G4Circle circle(position); + circle.SetScreenSize(0.1); + circle.SetFillStyle(G4Circle::filled); + G4Colour colour(1.,1.,1.); + G4VisAttributes attributes(colour); + circle.SetVisAttributes(attributes); + VisManager->Draw(circle); + } +} + +void LEMuSRMcpHit::Print() +{} + +void LEMuSRMcpHit::print(G4String name) +{ + ofstream TestPrint(name,ios::app); + if (!TestPrint.is_open()) exit(8); + TestPrint << "particle name : " << particle_name <<" ;\n " + << "energy_deposition : " << G4BestUnit(energy_deposition,"Energy") <<" ;\n " + << "time_of_flight : " << G4BestUnit(time_of_flight,"Time") <<" ;\n " + << "position : " << position <<" ;\n " + << "momentum : " << momentum <<" ;\n " + <AddHitsCollection(HCID,McpCollection); +} + +G4bool LEMuSRMcpSD::ProcessHits(G4Step* aStep, G4TouchableHistory*) +{ + + p_name = aStep->GetTrack()->GetDefinition()->GetParticleName(); + + if( CheckCondition(aStep)) + { + GetDatas(aStep); + getHit(); + FillRoot(); + } + + + //PrintAll(); + + return true; +} + +void LEMuSRMcpSD::EndOfEvent(G4HCofThisEvent*) +{ + /* + G4int NbHits = McpCollection->entries(); + G4cout << "\n-------->Hits Collection: in this event they are " << NbHits + << " hits in the mcp: " << G4endl; + for (G4int i=0;iPrint(); + */ +} + +G4bool LEMuSRMcpSD::CheckCondition(const G4Step* aStep) +{ + + G4bool condition=false; + mu=e=g=0; + + + + if(aStep->GetPreStepPoint()->GetGlobalTime()/ns<1000.) + { + if(p_name == "e+"&&aStep->GetTrack()->GetNextVolume()->GetLogicalVolume()->GetName()!="lv_DMCP") + { + if( aStep->GetTrack()->GetCreatorProcess()) + { + if( aStep->GetTrack()->GetCreatorProcess()->GetProcessName()=="Decay") + { + condition=false;//true; + } + } + } + // if(p_name == "proton") + if(p_name == "mu+"||p_name == "Mu") + { + condition=true; + if(p_name=="mu+")mu=1; + if(p_name=="Mu")e=1; + } + if(p_name == "gamma") + { + g=1; + condition=false;//true; + } + } + + + return condition; + + +} + + +void LEMuSRMcpSD::clear() +{ + delete McpCollection; +} + +void LEMuSRMcpSD::DrawAll() +{ +} + +void LEMuSRMcpSD::PrintAll() +{ + + // Define Hit + + LEMuSRMcpHit* aHit; + aHit = new LEMuSRMcpHit(); + + //++++++++++++++ set hit values _______________ + aHit->SetParticleName(p_name); + aHit->SetSpin(spin); + + aHit->SetMomentum( hitmom ); + aHit->SetPosition( hitpos ); + + aHit->SetTimeOfFlight( tof ); + aHit->SetEnergyDeposition( edep ); + + + // McpCollection->insert( aHit ); + // aHit->Print(); + // aHit->print("Statistics/SCIS.Hits"); + // aHit->Draw(); + + +} + + +void LEMuSRMcpSD::GetDatas(const G4Step *aStep) +{ + // Get datas + //a Volume, name, spin + vname = aStep->GetPreStepPoint()->GetPhysicalVolume()->GetName(); + spin= aStep->GetTrack()->GetDefinition()->GetPDGSpin(); // spin in units of 1 + + //b Position momentum + hitpos = aStep->GetPreStepPoint()->GetPosition()/cm; // position + hitmom = aStep->GetPreStepPoint()->GetMomentumDirection(); // momentum + + //c Times + tof = aStep->GetPreStepPoint()->GetLocalTime()/ns; // time since track creation + globaltime = aStep->GetPreStepPoint()->GetGlobalTime()/ns;// time since event creation + proptime = aStep->GetTrack()->GetDynamicParticle()->GetProperTime()/ns; // particle's proper time + + //d Energy + edep = aStep->GetTotalEnergyDeposit(); + + toten = LEMuSRPrimaryGeneratorAction::GetPGA()->energy/keV;//aStep->GetTrack()->GetTotalEnergy(); + + kinen = aStep->GetPreStepPoint()->GetKineticEnergy(); + + +} + + +void LEMuSRMcpSD::getHit() +{ + theHit.kenergy = kinen; + theHit.tenergy = toten; + theHit.edeposit = edep; + theHit.localtime = tof; + theHit.globaltime = globaltime; + theHit.proptime = proptime; + theHit.positionx = hitpos.x(); + theHit.positiony = hitpos.y(); + theHit.positionz = hitpos.z(); + theHit.momdirx = hitmom.x(); + theHit.momdiry = hitmom.y(); + theHit.momdirz = hitmom.z(); + theHit.foil = LEMuSRDetectorConstruction::GetInstance()->cfthk; + theHit.muon = mu; + theHit.positron = e; + theHit.gamma = g; + theHit.runid = G4RunManager::GetRunManager()->GetCurrentRun()->GetRunID(); +} + +// ROOT METHODS + +void LEMuSRMcpSD::BookRoot() +{ + // open root file + myFile = new TFile("SDMcp.root", "RECREATE"); + // myFile->SetCompressionLevel(1); + + tree = new TTree ("tree"," Mcp Datas"); + + tree->Branch("mcpHit",&theHit.kenergy,"kenergy/F:init_energy/F:edeposit/F:localtime/F:globaltime:propertime/F:positionx/F:positiony:positionz:momentumx:momentumy:momentumz/F:foil/F:muon/I:muonium/I:gamma/I:ID/I"); + +} + +void LEMuSRMcpSD::FillRoot() +{ + tree->Fill(); +} + +void LEMuSRMcpSD::WriteRoot() +{ + myFile->Write(); + myFile->Close(); +} + diff --git a/geant4/LEMuSR/src/LEMuSRMuonDecayChannel.cc b/geant4/LEMuSR/src/LEMuSRMuonDecayChannel.cc new file mode 100644 index 0000000..d3b71b0 --- /dev/null +++ b/geant4/LEMuSR/src/LEMuSRMuonDecayChannel.cc @@ -0,0 +1,285 @@ +//§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§//* +// LOW ENERGY MUON SPIN RELAXATION, ROTATION, RADIATION Geant4 SIMULATION +// ID : LEMuSRMuonDecayChannel.cc , v 1.2 +// AUTHOR: Taofiq PARAISO based on G4MuonDecayChannel $Id$ +// DATE : 2004-07-13 11:15 +// +// add muonium decay, PARAISO 07/04/2005 +// +//§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§// +// +// & &&&&&&&&&& &&&&&&& &&&&&&&& +// & & && && & && +// & & & & & & && +// & &&&&&&& & & &&&&&& &&&&&&&& +// & & & && & & && +// & & && & & && && & & +// &&&&&&&&&& &&&&&&&&&& & &&&&& && &&&&&&& & && +// & +// & +// & +// & +// MUON DECAY CHANNEL.CC +//§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§//// + + + +#include "Randomize.hh" +#include "G4ios.hh" +#include "G4ParticleDefinition.hh" +#include "G4DecayProducts.hh" +#include "G4VDecayChannel.hh" +#include "LEMuSRMuonDecayChannel.hh" +#include "Randomize.hh" +#include "G4LorentzVector.hh" +#include "G4LorentzRotation.hh" +#include "G4Transform3D.hh" +#include "G4UnitsTable.hh" + +#include "LEMuSRAtRestSpinRotation.hh" + + +LEMuSRMuonDecayChannel::LEMuSRMuonDecayChannel(const G4String& theParentName, + G4double theBR) + :G4VDecayChannel("LEMuSR Muon Decay",1) +{ + + // set names for daughter particles + if (theParentName == "mu+") { + SetBR(theBR); + SetParent("mu+"); + SetNumberOfDaughters(3); + SetDaughter(0, "e+"); + SetDaughter(1, "nu_e"); + SetDaughter(2, "anti_nu_mu"); + + } else if (theParentName == "mu-") { + SetBR(theBR); + SetParent("mu-"); + SetNumberOfDaughters(3); + SetDaughter(0, "e-"); + SetDaughter(1, "anti_nu_e"); + SetDaughter(2, "nu_mu"); + } + else if (theParentName == "Mu") { + SetBR(theBR); + SetParent("Mu"); + SetNumberOfDaughters(3); + SetDaughter(0, "e+"); + SetDaughter(1, "nu_e"); + SetDaughter(2, "anti_nu_mu"); + } + else { + +#ifdef G4VERBOSE + if (GetVerboseLevel()>0) { + G4cout << "LEMuSRMuonDecayChannel:: constructor :"; + G4cout << " parent particle is not muon but "; + G4cout << theParentName << G4endl; + } +#endif + + } + + // get the random number engine + theEngine = HepRandom::getTheEngine(); + + + theParentPolarization=G4ThreeVector(0,0,0); + pointer = this; + + + +} + +LEMuSRMuonDecayChannel* LEMuSRMuonDecayChannel::pointer=0; +LEMuSRMuonDecayChannel* LEMuSRMuonDecayChannel::GetInstance() +{ + return pointer; +} + + + +LEMuSRMuonDecayChannel::~LEMuSRMuonDecayChannel() +{ + +} + + +G4DecayProducts *LEMuSRMuonDecayChannel::DecayItPolarized(G4double mass,G4ThreeVector polar) +{ + SetParentPolarization(polar); + +#ifdef G4VERBOSE + if (GetVerboseLevel()>2) { + G4cout << "LEMuSRMuonDecayChannel:: theParentPolarization is" <2) { + G4cout << "LEMuSRMuonDecayChannel::DecayIt "; + } +#endif + + if (parent == 0) FillParent(); + if (daughters == 0) FillDaughters(); + + // parent mass + G4double parentmass = parent->GetPDGMass(); + + //daughters'mass + G4double daughtermass[3]; + G4double sumofdaughtermass = 0.0; + for (G4int index=0; index<3; index++){ + daughtermass[index] = daughters[index]->GetPDGMass(); + sumofdaughtermass += daughtermass[index]; + } + + //create parent G4DynamicParticle at rest + G4ThreeVector dummy; + G4DynamicParticle * parentparticle = new G4DynamicParticle( parent, dummy, 0.0); + //create G4Decayproducts + G4DecayProducts *products = new G4DecayProducts(*parentparticle); + delete parentparticle; + + + // Calculate Positron energy + + G4double daughtermomentum[3]; + G4double energy; + G4double x; // maximal positron energy is 52.831MeV + G4double r; + + do { + do { + r = G4UniformRand(); + x = G4UniformRand(); + } while (r > (3.0 - 2.0*x)*x*x); + + + energy = x*52.831*MeV; + } while (energy <0.0|| energy > 52.831); + + + + // Anglular Distribution + + G4double energymax=52.831*MeV; + G4double E=energy/energymax; + + G4double D = (2*E-1)/(3-2*E); + + // theta + G4double K = G4UniformRand(); + costheta = 1/D*(-1.+ sqrt(1.-2*D*(2*K-1)+D*D)); + theta = acos(costheta); + sintheta=sin(theta); + + // phi + phi = 2.0*M_PI*G4UniformRand()*rad; + sinphi = sin(phi); + cosphi = cos(phi); + + // rotation angles + G4double px = sintheta*sinphi; + G4double py = sintheta*cosphi; + G4double pz = costheta; + + G4ThreeVector direction0(px,py,pz); + + direction0.rotateUz(theParentPolarization); + +#ifdef G4VERBOSE + if (GetVerboseLevel()>2) { + G4cout << "LEMuSRMuonDecayChanel::DecayIt \n"; + G4cout <<"e+ momentum direction: " << direction0 <SetPolarization(theParentPolarization.x(),theParentPolarization.y(),theParentPolarization.z()); + products->PushProducts(daughterparticle); + + + + // daughter 1 ,2 (neutrinos) + // create neutrinos in the C.M frame of two neutrinos + G4double energy2 = parentmass*(1.0 - x/2.0); + G4double vmass = sqrt((energy2-daughtermomentum[0])*(energy2+daughtermomentum[0])); + G4double beta = -1.0*daughtermomentum[0]/energy2; + G4double costhetan = 2.*G4UniformRand()-1.0; + G4double sinthetan = sqrt((1.0-costhetan)*(1.0+costhetan)); + G4double phin = 2.0*M_PI*G4UniformRand()*rad; + G4double sinphin = sin(phin); + G4double cosphin = cos(phin); + + G4ThreeVector direction1(sinthetan*cosphin,sinthetan*sinphin,costhetan); + G4DynamicParticle * daughterparticle1 + = new G4DynamicParticle( daughters[1], direction1*(vmass/2.)); + G4DynamicParticle * daughterparticle2 + = new G4DynamicParticle( daughters[2], direction1*(-1.0*vmass/2.)); + + // boost to the muon rest frame + G4LorentzVector p4; + p4 = daughterparticle1->Get4Momentum(); + p4.boost( direction0.x()*beta, direction0.y()*beta, direction0.z()*beta); + daughterparticle1->Set4Momentum(p4); + p4 = daughterparticle2->Get4Momentum(); + p4.boost( direction0.x()*beta, direction0.y()*beta, direction0.z()*beta); + daughterparticle2->Set4Momentum(p4); + products->PushProducts(daughterparticle1); + products->PushProducts(daughterparticle2); + daughtermomentum[1] = daughterparticle1->GetTotalMomentum(); + daughtermomentum[2] = daughterparticle2->GetTotalMomentum(); + + // output message +#ifdef G4VERBOSE + if (GetVerboseLevel()>2) { + G4cout << "LEMuSRMuonDecayChanel::DecayIt "; + G4cout << " THETA aNGLE ::" <DumpInfo(); + } +#endif + + + return products; +} diff --git a/geant4/LEMuSR/src/LEMuSRMuonPhysics.cc b/geant4/LEMuSR/src/LEMuSRMuonPhysics.cc new file mode 100644 index 0000000..7baa98c --- /dev/null +++ b/geant4/LEMuSR/src/LEMuSRMuonPhysics.cc @@ -0,0 +1,154 @@ +#include "LEMuSRMuonPhysics.hh" + +#include "globals.hh" +#include "G4ios.hh" +#include + + +LEMuSRMuonPhysics::LEMuSRMuonPhysics(const G4String& name) + : G4VPhysicsConstructor(name) +{ +} + +LEMuSRMuonPhysics::~LEMuSRMuonPhysics() +{ +} + +#include "G4ParticleDefinition.hh" +#include "G4ParticleTable.hh" + +#include "G4MuonPlus.hh" +#include "G4Muonium.hh" +#include "G4MuonMinus.hh" +#include "G4TauMinus.hh" +#include "G4TauPlus.hh" +#include "G4NeutrinoTau.hh" +#include "G4AntiNeutrinoTau.hh" +#include "G4NeutrinoMu.hh" +#include "G4AntiNeutrinoMu.hh" +#include "LEMuSRMuonDecayChannel.hh" +#include "G4UserSpecialCuts.hh" +#include "G4DecayTable.hh" +#include "G4MuonDecayChannelWithSpin.hh" + + + + +void LEMuSRMuonPhysics::ConstructParticle() +{ + // Mu + G4MuonPlus::MuonPlusDefinition(); + G4Muonium::MuoniumDefinition(); + G4MuonMinus::MuonMinusDefinition(); + G4NeutrinoMu::NeutrinoMuDefinition(); + G4AntiNeutrinoMu::AntiNeutrinoMuDefinition(); + + // Tau + G4TauMinus::TauMinusDefinition(); + G4TauPlus::TauPlusDefinition(); + G4NeutrinoTau::NeutrinoTauDefinition(); + G4AntiNeutrinoTau::AntiNeutrinoTauDefinition(); + + +#ifdef ASYM_USE_LEMU + G4DecayTable* MuonPlusDecayTable = new G4DecayTable(); + MuonPlusDecayTable -> Insert(new LEMuSRMuonDecayChannel("mu+",1.00)); + G4MuonPlus::MuonPlusDefinition() -> SetDecayTable(MuonPlusDecayTable); + + G4DecayTable* MuoniumDecayTable = new G4DecayTable(); + MuoniumDecayTable -> Insert(new LEMuSRMuonDecayChannel("Mu",0.5)); + MuoniumDecayTable -> Insert(new G4MuonDecayChannel("Mu",0.5)); + G4Muonium::MuoniumDefinition() -> SetDecayTable(MuoniumDecayTable); + + G4DecayTable* MuonMinusDecayTable = new G4DecayTable(); + MuonMinusDecayTable -> Insert(new LEMuSRMuonDecayChannel("mu-",1.00)); + G4MuonMinus::MuonMinusDefinition() -> SetDecayTable(MuonMinusDecayTable); + G4cout<<"ASYM_USE_LEMU\n"; +#else + G4DecayTable* MuonPlusDecayTable = new G4DecayTable(); + MuonPlusDecayTable -> Insert(new G4MuonDecayChannel("mu+",1.00)); + G4MuonPlus::MuonPlusDefinition() -> SetDecayTable(MuonPlusDecayTable); + + G4DecayTable* MuoniumDecayTable = new G4DecayTable(); + MuoniumDecayTable -> Insert(new G4MuonDecayChannel("Mu",1.)); + G4Muonium::MuoniumDefinition() -> SetDecayTable(MuoniumDecayTable); + + G4DecayTable* MuonMinusDecayTable = new G4DecayTable(); + MuonMinusDecayTable -> Insert(new G4MuonDecayChannelWithSpin("mu-",1.00)); + G4MuonMinus::MuonMinusDefinition() -> SetDecayTable(MuonMinusDecayTable); + G4cout<<"ASYM_USE_G4\n"; +#endif + + +} + + +#include "G4ProcessManager.hh" + +void LEMuSRMuonPhysics::ConstructProcess() +{ + G4ProcessManager * pManager = 0; + + // Muon Plus Physics + pManager = G4MuonPlus::MuonPlus()->GetProcessManager(); + + pManager->AddProcess(&fMuAtRestSpinRotation, 1, -1, -1); //(&fprocess, atrest, prestep, poststep) + pManager->AddProcess(&fMuFormation,-1, -1, 1); + pManager->AddProcess(&fMuPlusMultipleScattering,-1, 1, -1);// may crash when enabled as post step process + pManager->AddProcess(&fMuPlusIonisation, -1, 2, 2); + pManager->AddProcess(&fMuPlusBremsstrahlung, -1, 3, 3); + pManager->AddProcess(&fMuPlusPairProduction, -1, 4, 4); + + pManager->AddProcess(new G4UserSpecialCuts(),-1,-1,6); + // pManager ->SetProcessOrderingToLast(&fDepolarization, idxAtRest); + // pManager ->SetProcessOrdering(&fDepolarization, idxPostStep); + + // the last process: decay + pManager->AddProcess(&fDecayProcess); + pManager ->SetProcessOrderingToLast(&fDecayProcess, idxAtRest); + pManager ->SetProcessOrdering(&fDecayProcess, idxPostStep); + + + // Muonium Physics is the same as muon plus physics + pManager = G4Muonium::Muonium()->GetProcessManager(); + + pManager->AddProcess(&fMuAtRestSpinRotation, 1, -1, -1); + pManager->AddProcess(&fMuPlusIonisation, -1, 2, 2); + pManager->AddProcess(&fMuoniumScatt, -1, -1, 3); + pManager->AddProcess(&fMuPlusBremsstrahlung, -1, 4, 4); + pManager->AddProcess(&fMuPlusPairProduction, -1, 5, 5); + + pManager->AddProcess(new G4UserSpecialCuts(),-1,-1,6); + + // the last process: decay + pManager->AddProcess(&fDecayProcess); + pManager->SetProcessOrderingToLast(&fDecayProcess, idxAtRest); + pManager->SetProcessOrdering(&fDecayProcess, idxPostStep); + + // Muon Minus Physics + pManager = G4MuonMinus::MuonMinus()->GetProcessManager(); + + pManager->AddProcess(&fMuMinusMultipleScattering,-1, 1, 1); + pManager->AddProcess(&fMuMinusIonisation, -1, 2, 2); + pManager->AddProcess(&fMuMinusBremsstrahlung, -1, 3, 3); + pManager->AddProcess(&fMuMinusPairProduction, -1, 4, 4); + + pManager->AddRestProcess(&fMuMinusCaptureAtRest); + pManager->AddProcess(&fDecayProcess); + pManager->SetProcessOrderingToLast(&fDecayProcess, idxAtRest); + pManager->SetProcessOrdering(&fDecayProcess, idxPostStep); + + // Tau Plus Physics + pManager = G4TauPlus::TauPlus()->GetProcessManager(); + + pManager->AddProcess(&fTauPlusMultipleScattering, -1, 1, 1); + pManager->AddProcess(&fTauPlusIonisation, -1, 2, 2); + + // Tau Minus Physics + pManager = G4TauMinus::TauMinus()->GetProcessManager(); + + pManager->AddProcess(&fTauMinusMultipleScattering, -1, 1, 1); + pManager->AddProcess(&fTauMinusIonisation, -1, 2, 2); + +} + diff --git a/geant4/LEMuSR/src/LEMuSROScintHit.cc b/geant4/LEMuSR/src/LEMuSROScintHit.cc new file mode 100644 index 0000000..9b66ab7 --- /dev/null +++ b/geant4/LEMuSR/src/LEMuSROScintHit.cc @@ -0,0 +1,75 @@ +#include "LEMuSROScintHit.hh" +#include "G4VVisManager.hh" +#include "G4Circle.hh" +#include "G4Colour.hh" +#include "G4VisAttributes.hh" +#include "G4ios.hh" +#include +#include + +#include "G4UnitsTable.hh" + +G4Allocator LEMuSROScintHitAllocator; + +LEMuSROScintHit::LEMuSROScintHit() +{;} + +LEMuSROScintHit::~LEMuSROScintHit() +{;} + +LEMuSROScintHit::LEMuSROScintHit(const LEMuSROScintHit &right) : G4VHit() +{ + particle_name = right.particle_name; + energy_deposition = right.energy_deposition; + time_of_flight = right.time_of_flight; + position = right.position; + momentum = right.momentum; +} + +const LEMuSROScintHit& LEMuSROScintHit::operator=(const LEMuSROScintHit &right) +{ + particle_name = right.particle_name; + energy_deposition = right.energy_deposition; + time_of_flight = right.time_of_flight; + position = right.position; + momentum = right.momentum; + return *this; +} + + + +G4int LEMuSROScintHit::operator==(const LEMuSROScintHit &right) const +{ + return (this==&right) ? 1 : 0; +} + +void LEMuSROScintHit::Draw() +{ + G4VVisManager* VisManager = G4VVisManager::GetConcreteInstance(); + if(VisManager) + { + G4Circle circle(position); + circle.SetScreenSize(0.1); + circle.SetFillStyle(G4Circle::filled); + G4Colour colour(1.,1.,1.); + G4VisAttributes attributes(colour); + circle.SetVisAttributes(attributes); + VisManager->Draw(circle); + } +} + +void LEMuSROScintHit::Print() +{} + +void LEMuSROScintHit::print(G4String name) +{ + ofstream TestPrint(name,ios::app); + if (!TestPrint.is_open()) exit(8); + TestPrint << "particle name : " << particle_name <<" ;\n " + << "energy_deposition : " << G4BestUnit(energy_deposition,"Energy") <<" ;\n " + << "time_of_flight : " << G4BestUnit(time_of_flight,"Time") <<" ;\n " + << "position : " << position <<" ;\n " + << "momentum : " << momentum <<" ;\n " + <AddHitsCollection(HCID,ScintCollection); +} + +G4bool LEMuSROScintSD::ProcessHits(G4Step* aStep, G4TouchableHistory*) +{ + // G4cout << "PROCESS HIT"<GetTrack()->GetDefinition()->GetParticleName(); // particle name + + + if( CheckCondition(aStep)) + { + GetDatas(aStep); + getHit(); + FillRoot(); + } + + + // Define Hit + aHit = new LEMuSROScintHit(); + + //++++++++++++++ set hit values _______________ + aHit->SetParticleName(p_name); + aHit->SetSpin(spin); + + aHit->SetMomentum( hitmom ); + aHit->SetPosition( hitpos ); + + aHit->SetTimeOfFlight( tof); + aHit->SetEnergyDeposition( edep ); + + + ScintCollection->insert( aHit ); + // aHit->Print(); + // aHit->print("Statistics/SCIS.Hits"); + aHit->Draw(); + + + PrintAll(); + + + return true; +} + +void LEMuSROScintSD::EndOfEvent(G4HCofThisEvent*) +{ + // G4int NbHits = ScintCollection->entries(); + // G4cout << "\n-------->Hits Collection: in this event they are " << NbHits + // << " hits in the inner scintillator: " << G4endl; + // for (G4int i=0;iPrint(); + +} + +G4bool LEMuSROScintSD::CheckCondition(const G4Step* aStep) +{ + G4bool condition=false; + + if(p_name == "e+"&&aStep->GetTrack()->GetNextVolume()->GetLogicalVolume()->GetName()!="lv_SCOS") + { + if( aStep->GetTrack()->GetCreatorProcess()) + { + if( aStep->GetTrack()->GetCreatorProcess()->GetProcessName()=="Decay") + { + condition=true; + } + } + } + + return condition; + +} + + +void LEMuSROScintSD::clear() +{ + delete ScintCollection; +} + +void LEMuSROScintSD::DrawAll() +{ +} + +void LEMuSROScintSD::PrintAll() +{ + +} + + +void LEMuSROScintSD::GetDatas(const G4Step *aStep) +{ + // Get datas + //a Volume, name, spin + vname = aStep->GetPreStepPoint()->GetPhysicalVolume()->GetName(); + spin= aStep->GetTrack()->GetDefinition()->GetPDGSpin(); // spin in units of 1 + + //b Position momentum + hitpos = aStep->GetPreStepPoint()->GetPosition(); // position + hitmom = aStep->GetPreStepPoint()->GetMomentum(); // momentum + + //c Times + tof = aStep->GetPreStepPoint()->GetLocalTime(); // time since track creation + globaltime = aStep->GetPreStepPoint()->GetGlobalTime();// time since event creation + proptime = aStep->GetPreStepPoint()->GetProperTime(); // particle's proper time + + //d Energy + edep = aStep->GetTotalEnergyDeposit(); + + toten = aStep->GetTrack()->GetTotalEnergy(); + + kinen = aStep->GetTrack()->GetKineticEnergy(); + + //e OScint ID + +} + + +void LEMuSROScintSD::getHit() +{ + theHit.kenergy = kinen; + theHit.tenergy = toten; + theHit.edeposit = edep; + theHit.localtime = tof; + theHit.globaltime = globaltime; + theHit.proptime = proptime; + theHit.positionx = hitpos.x(); + theHit.positiony = hitpos.y(); + theHit.positionz = hitpos.z(); + theHit.momdirx = hitmom.x(); + theHit.momdiry = hitmom.y(); + theHit.momdirz = hitmom.z(); + if (vname=="pv_SCISl") + { + theHit.scLeft = globaltime;//+=1;// + } + else if (vname=="pv_SCISb") + { + theHit.scBottom =globaltime ;//+=1; + } + else if (vname=="pv_SCISr") + { + theHit.scRight =globaltime;//+=1; + } + else if (vname=="pv_SCISt") + { + theHit.scTop = globaltime;//+=1; + } +} + +// ROOT METHODS + +void LEMuSROScintSD::BookRoot() +{ + // open root file + myFile = new TFile("SDOuterScintE0.root", "RECREATE"); + // myFile->SetCompressionLevel(1); + + tree = new TTree ("tree","Outer Scintillator Datas"); + + tree->Branch("scintHit",&theHit.kenergy,"kenergy/F:tenergy/F:edeposit/F:localtime/F:globaltime:propertime/F:positionx/F:positiony:positionz:momdirx:momdiry:momdirz/F:Left/F:Right/F:Bottom/F:Top/F:runID"); + +} + +void LEMuSROScintSD::FillRoot() +{ + tree->Fill(); +} + +void LEMuSROScintSD::WriteRoot() +{ + myFile->Write(); + myFile->Close(); +} diff --git a/geant4/LEMuSR/src/LEMuSRParticleChangeForSR.cc b/geant4/LEMuSR/src/LEMuSRParticleChangeForSR.cc new file mode 100644 index 0000000..33d5338 --- /dev/null +++ b/geant4/LEMuSR/src/LEMuSRParticleChangeForSR.cc @@ -0,0 +1,64 @@ +///§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§//* +// LOW ENERGY MUON SPIN RELAXATION, ROTATION, RADIATION +// +// ID : LEMuSRParticleChangeForSR.cc , v 1.2b +// AUTHOR: Taofiq PARAISO +// DATE : 2004-08-20 10:36 +//§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§// +// +// & &&&&&&&&&& &&&&&&& &&&&&&&& +// & & && && & && +// & & & & & & && +// & &&&&&&& & & &&&&&& &&&&&&&& +// & & & && & & && +// & & && & & && && & & +// &&&&&&&&&& &&&&&&&&&& & &&&&& && &&&&&&& & && +// & +// & +// & +// & +// PARTICLE CHANGE FOR SPIN ROTATION +//§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§// + +#include "LEMuSRParticleChangeForSR.hh" + + + +G4Step* LEMuSRParticleChangeForSR::UpdateStepForAtRest(G4Step* pStep) +{ + G4StepPoint* pPreStepPoint = pStep->GetPreStepPoint(); + G4StepPoint* pPostStepPoint = pStep->GetPostStepPoint(); + G4Track* aTrack = pStep->GetTrack(); + + // update polarization + + pPostStepPoint->SetMomentumDirection(theMomentumDirectionChange); + pPostStepPoint->SetKineticEnergy(theEnergyChange); + pPostStepPoint->AddPolarization( thePolarizationChange + - pPreStepPoint->GetPolarization()); + + // update position and time + pPostStepPoint->AddPosition( thePositionChange + - pPreStepPoint->GetPosition() ); + + + pStep->SetControlFlag( theSteppingControlFlag ); + + // Update track + pStep->UpdateTrack(); + + +#ifdef G4SRVERBOSE + G4cout<<"STEP UPDATED " + << aTrack->GetDynamicParticle()->GetPreAssignedDecayProperTime() + <<" " + << aTrack->GetDynamicParticle()->GetProperTime() + <GetPDGMass(); + G4double energy = particle_energy + mass; + G4double pmom = sqrt(energy*energy-mass*mass); + G4double px = pmom*particle_momentum_direction.x(); + G4double py = pmom*particle_momentum_direction.y(); + G4double pz = pmom*particle_momentum_direction.z(); + for( G4int i=0; iSetMass( mass ); + // particle->SetCharge( particle_charge ); + // G4cout<<"Charge (from gun) = " << particle->GetCharge() <<" \n" <SetPolarization(particle_polarization.x(), + particle_polarization.y(), + particle_polarization.z()); + particle->SetProperTime(decaytime); + // G4cout<<"Muon decay time = " << decaytime/ns <<"ns. \n" <SetPrimary( particle ); + + + } + + evt->AddPrimaryVertex( vertex ); +} diff --git a/geant4/LEMuSR/src/LEMuSRParticleGunMessenger.cc b/geant4/LEMuSR/src/LEMuSRParticleGunMessenger.cc new file mode 100644 index 0000000..762af1d --- /dev/null +++ b/geant4/LEMuSR/src/LEMuSRParticleGunMessenger.cc @@ -0,0 +1,231 @@ +#include "LEMuSRParticleGunMessenger.hh" +#include "LEMuSRParticleGun.hh" +#include "G4Geantino.hh" +#include "G4ThreeVector.hh" +#include "G4ParticleTable.hh" +#include "G4IonTable.hh" +#include "G4UIdirectory.hh" +#include "G4UIcmdWithoutParameter.hh" +#include "G4UIcmdWithAString.hh" +#include "G4UIcmdWithADoubleAndUnit.hh" +#include "G4UIcmdWith3Vector.hh" +#include "G4UIcmdWith3VectorAndUnit.hh" +#include "G4UIcmdWithAnInteger.hh" +#include "G4ios.hh" +#include "G4Tokenizer.hh" + +#include +#include + + +LEMuSRParticleGunMessenger::LEMuSRParticleGunMessenger(LEMuSRParticleGun* fPtclGun) + :fParticleGun(fPtclGun),fShootIon(false) +{ + particleTable = G4ParticleTable::GetParticleTable(); + + gunDirectory = new G4UIdirectory("/lemuGun/"); + gunDirectory->SetGuidance("Particle Gun control commands."); + + listCmd = new G4UIcmdWithoutParameter("/lemuGun/List",this); + listCmd->SetGuidance("List available particles."); + listCmd->SetGuidance(" Invoke G4ParticleTable."); + + particleCmd = new G4UIcmdWithAString("/lemuGun/particle",this); + particleCmd->SetGuidance("Set particle to be generated."); + particleCmd->SetGuidance(" (geantino is default)"); + particleCmd->SetGuidance(" (ion can be specified for shooting ions)"); + particleCmd->SetParameterName("particleName",true); + particleCmd->SetDefaultValue("geantino"); + G4String candidateList; + G4int nPtcl = particleTable->entries(); + for(G4int i=0;iGetParticle(i)->IsShortLived())) + { + candidateList += particleTable->GetParticleName(i); + candidateList += " "; + } + } + candidateList += "ion "; + particleCmd->SetCandidates(candidateList); + + directionCmd = new G4UIcmdWith3Vector("/lemuGun/direction",this); + directionCmd->SetGuidance("Set momentum direction."); + directionCmd->SetGuidance("Direction needs not to be a unit vector."); + directionCmd->SetParameterName("Px","Py","Pz",true,true); + directionCmd->SetRange("Px != 0 || Py != 0 || Pz != 0"); + + energyCmd = new G4UIcmdWithADoubleAndUnit("/lemuGun/energy",this); + energyCmd->SetGuidance("Set kinetic energy."); + energyCmd->SetParameterName("Energy",true,true); + energyCmd->SetDefaultUnit("GeV"); + //energyCmd->SetUnitCategory("Energy"); + //energyCmd->SetUnitCandidates("eV keV MeV GeV TeV"); + + positionCmd = new G4UIcmdWith3VectorAndUnit("/lemuGun/position",this); + positionCmd->SetGuidance("Set starting position of the particle."); + positionCmd->SetParameterName("X","Y","Z",true,true); + positionCmd->SetDefaultUnit("cm"); + //positionCmd->SetUnitCategory("Length"); + //positionCmd->SetUnitCandidates("microm mm cm m km"); + + timeCmd = new G4UIcmdWithADoubleAndUnit("/lemuGun/time",this); + timeCmd->SetGuidance("Set initial time of the particle."); + timeCmd->SetParameterName("t0",true,true); + timeCmd->SetDefaultUnit("ns"); + //timeCmd->SetUnitCategory("Time"); + //timeCmd->SetUnitCandidates("ns ms s"); + + polCmd = new G4UIcmdWith3Vector("/lemuGun/polarization",this); + polCmd->SetGuidance("Set polarization."); + polCmd->SetParameterName("Px","Py","Pz",true,true); + polCmd->SetRange("Px>=-1.&&Px<=1.&&Py>=-1.&&Py<=1.&&Pz>=-1.&&Pz<=1."); + + numberCmd = new G4UIcmdWithAnInteger("/lemuGun/number",this); + numberCmd->SetGuidance("Set number of particles to be generated."); + numberCmd->SetParameterName("N",true,true); + numberCmd->SetRange("N>0"); + + ionCmd = new G4UIcommand("/lemuGun/ion",this); + ionCmd->SetGuidance("Set properties of ion to be generated."); + ionCmd->SetGuidance("[usage] /lemuGun/ion Z A Q"); + ionCmd->SetGuidance(" Z:(int) AtomicNumber"); + ionCmd->SetGuidance(" A:(int) AtomicMass"); + ionCmd->SetGuidance(" Q:(int) Charge of Ion (in unit of e)"); + ionCmd->SetGuidance(" E:(double) Excitation energy (in keV)"); + + G4UIparameter* param; + param = new G4UIparameter("Z",'i',false); + param->SetDefaultValue("1"); + ionCmd->SetParameter(param); + param = new G4UIparameter("A",'i',false); + param->SetDefaultValue("1"); + ionCmd->SetParameter(param); + param = new G4UIparameter("Q",'i',true); + param->SetDefaultValue("0"); + ionCmd->SetParameter(param); + param = new G4UIparameter("E",'d',true); + param->SetDefaultValue("0.0"); + ionCmd->SetParameter(param); + + // set initial value to G4ParticleGun + fParticleGun->SetParticleDefinition( G4Geantino::Geantino() ); + fParticleGun->SetParticleMomentumDirection( G4ThreeVector(1.0,0.0,0.0) ); + fParticleGun->SetParticleEnergy( 1.0*GeV ); + fParticleGun->SetParticlePosition(G4ThreeVector(0.0*cm, 0.0*cm, 0.0*cm)); + fParticleGun->SetParticleTime( 0.0*ns ); +} + + + +LEMuSRParticleGunMessenger::~LEMuSRParticleGunMessenger() +{ + delete listCmd; + delete particleCmd; + delete directionCmd; + delete energyCmd; + delete positionCmd; + delete timeCmd; + delete polCmd; + delete numberCmd; + delete ionCmd; + delete gunDirectory; +} + + +void LEMuSRParticleGunMessenger::SetNewValue(G4UIcommand * command,G4String newValues) +{ + if( command==listCmd ) + { particleTable->DumpTable(); } + else if( command==particleCmd ) + { + if (newValues =="ion") { + fShootIon = true; + } else { + fShootIon = false; + G4ParticleDefinition* pd = particleTable->FindParticle(newValues); + if(pd != 0) + { fParticleGun->SetParticleDefinition( pd ); } + } + } + else if( command==directionCmd ) + { fParticleGun->SetParticleMomentumDirection(directionCmd->GetNew3VectorValue(newValues)); } + else if( command==energyCmd ) + { fParticleGun->SetParticleEnergy(energyCmd->GetNewDoubleValue(newValues)); } + else if( command==positionCmd ) + { fParticleGun->SetParticlePosition(positionCmd->GetNew3VectorValue(newValues)); } + else if( command==timeCmd ) + { fParticleGun->SetParticleTime(timeCmd->GetNewDoubleValue(newValues)); } + else if( command==polCmd ) + { fParticleGun->SetParticlePolarization(polCmd->GetNew3VectorValue(newValues)); } + else if( command==numberCmd ) + { fParticleGun->SetNumberOfParticles(numberCmd->GetNewIntValue(newValues)); } + else if( command==ionCmd ) + { IonCommand(newValues); } +} + +G4String LEMuSRParticleGunMessenger::GetCurrentValue(G4UIcommand * command) +{ + G4String cv; + + if( command==directionCmd ) + { cv = directionCmd->ConvertToString(fParticleGun->GetParticleMomentumDirection()); } + else if( command==particleCmd ) + { cv = fParticleGun->GetParticleDefinition()->GetParticleName(); } + else if( command==energyCmd ) + { cv = energyCmd->ConvertToString(fParticleGun->GetParticleEnergy(),"GeV"); } + else if( command==positionCmd ) + { cv = positionCmd->ConvertToString(fParticleGun->GetParticlePosition(),"cm"); } + else if( command==timeCmd ) + { cv = timeCmd->ConvertToString(fParticleGun->GetParticleTime(),"ns"); } + else if( command==polCmd ) + { cv = polCmd->ConvertToString(fParticleGun->GetParticlePolarization()); } + else if( command==numberCmd ) + { cv = numberCmd->ConvertToString(fParticleGun->GetNumberOfParticles()); } + else if( command==ionCmd ) + { + if (fShootIon) { + cv = ItoS(fAtomicNumber) + " " + ItoS(fAtomicMass) + " "; + cv += ItoS(fIonCharge); + } else { + cv = ""; + } + } + return cv; +} + +void LEMuSRParticleGunMessenger::IonCommand(G4String newValues) +{ + if (fShootIon) { + G4Tokenizer next( newValues ); + // check argument + fAtomicNumber = StoI(next()); + fAtomicMass = StoI(next()); + G4String sQ = next(); + if (sQ.isNull()) { + fIonCharge = fAtomicNumber; + } else { + fIonCharge = StoI(sQ); + sQ = next(); + if (sQ.isNull()) { + fIonExciteEnergy = 0.0; + } else { + fIonExciteEnergy = StoD(sQ) * keV; + } + } + + G4ParticleDefinition* ion; + ion = particleTable->GetIon( fAtomicNumber, fAtomicMass, fIonExciteEnergy); + if (ion==0) { + G4cout << "Ion with Z=" << fAtomicNumber; + G4cout << " A=" << fAtomicMass << "is not be defined" << G4endl; + } else { + fParticleGun->SetParticleDefinition(ion); + fParticleGun->SetParticleCharge(fIonCharge*eplus); + } + } else { + G4cout << "Set /lemuGun/particle to ion before using /lemuGun/ion command"; + G4cout << G4endl; + } +} + diff --git a/geant4/LEMuSR/src/LEMuSRPgaMessenger.cc b/geant4/LEMuSR/src/LEMuSRPgaMessenger.cc new file mode 100644 index 0000000..d5575b5 --- /dev/null +++ b/geant4/LEMuSR/src/LEMuSRPgaMessenger.cc @@ -0,0 +1,239 @@ +///§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§//* +// LOW ENERGY MUON SPIN RELAXATION, ROTATION, RADIATION +// +// ID : LEMuSRPgaMessenger.cc , v 1.1 +// AUTHOR: Taofiq PARAISO +// DATE : 2004-06-30 09:12 +//§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§// +// +// & &&&&&&&&&& &&&&&&& &&&&&&&& +// & & && && & && +// & & & & & & && +// & &&&&&&& & & &&&&&& &&&&&&&& +// & & & && & & && +// & & && & & && && & & +// &&&&&&&&&& &&&&&&&&&& & &&&&& && &&&&&&& & && +// & +// & +// & +// & +// PRIMARY GENERATOR ACTION MEESENGER +//§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§// + + +#include "LEMuSRPgaMessenger.hh" + + +#include "LEMuSRPrimaryGeneratorAction.hh" +#include "G4UIdirectory.hh" +#include "G4UIcmdWithAString.hh" +#include "G4UIcmdWithoutParameter.hh" +#include "G4UIcmdWithADoubleAndUnit.hh" +#include "G4UIcmdWithADouble.hh" +#include "G4UIcmdWith3Vector.hh" +#include "G4UIcmdWith3VectorAndUnit.hh" +#include "G4UIcmdWithAnInteger.hh" +#include "G4ios.hh" +#include "G4UnitsTable.hh" +#include "G4ParticleTable.hh" +LEMuSRPgaMessenger::LEMuSRPgaMessenger(LEMuSRPrimaryGeneratorAction *thePGA) +:lemuPGA(thePGA) +{ + pgaDirectory = new G4UIdirectory("/lemuGun/"); + pgaDirectory->SetGuidance("LEMuSR particle shooting control commands."); + + // commands + + posCmd = new G4UIcmdWith3Vector("/lemuGun/gunPosition",this); + posCmd->SetGuidance("Set Gun Position >> IN CENTIMETERS."); + posCmd->SetParameterName("X [cm]","Y [cm]","Z [cm]",true,true); + posCmd->SetDefaultValue(Hep3Vector(0., 0., -114)); + + posCmd = new G4UIcmdWith3Vector("/lemuGun/MomentumDirection",this); + posCmd->SetGuidance("Set momentum direction >> sum must equal one."); + posCmd->SetParameterName("momX ","momY ","momZ ",true,true); + posCmd->SetDefaultValue(Hep3Vector(0., 0., 1.)); + + + scaCmd = new G4UIcmdWith3Vector("/lemuGun/scan/square",this); + scaCmd->SetGuidance("Gun scan: xrange yrange nbins \n Shoot right number of particles to fill. \n xrange and yrange are divided in nbins.\n"); + scaCmd->SetParameterName("X range [cm]","Y range [cm]","Number of bins",true,true); + scaCmd->SetDefaultValue(Hep3Vector(2., 2., 400)); + + scbCmd = new G4UIcmdWith3Vector("/lemuGun/scan/circular",this); + scbCmd->SetGuidance("Gun scan: radius Rsteps ThetaSteps \n Shoot Rsteps*Thetasteps particles to fill."); + scbCmd->SetParameterName("Radius [cm]","Number of step along radius","Number of steps along angle",true,true); + scbCmd->SetDefaultValue(Hep3Vector(1., 36 , 360 )); + + scgCmd = new G4UIcmdWith3Vector("/lemuGun/scan/gauss",this); + scgCmd->SetGuidance("Gun gauss scan:."); + scgCmd->SetParameterName("Radius [cm]","Number of step along radius","Number of steps along angle",true,true); + scgCmd->SetDefaultValue(Hep3Vector(1., 36 , 360 )); + + + + reset = new G4UIcmdWithoutParameter("/lemuGun/scan/reset",this); + reset->SetGuidance("\n Reset the counters for scanning"); + + setEnergy = new G4UIcmdWithADouble("/lemuGun/energy/defined",this); + setEnergy->SetGuidance("\n Energy Value >> IN keV \n "); + setEnergy->SetParameterName("Energy in [keV]",false); + setEnergy->SetDefaultValue(20); + setEnergy->AvailableForStates(G4State_PreInit,G4State_Idle); + + setKEoffset = new G4UIcmdWithADouble("/lemuGun/energy/offset",this); // not implemented yet + setKEoffset->SetGuidance("\n KEoffset Value >> IN keV \n "); + setKEoffset->SetParameterName("KEoffset in [keV]; default value 3.73",false); + setKEoffset->SetDefaultValue(0); + setKEoffset->AvailableForStates(G4State_PreInit,G4State_Idle); + + + + setRndEnergy = new G4UIcmdWithAString("/lemuGun/energy/random",this); + setRndEnergy->SetGuidance("Gaussian energy distribution with default mean 20 kev and 0.5 kev deviation"); + setRndEnergy->SetParameterName("Random Energy: on/off",true); + setRndEnergy->SetDefaultValue("on"); + + + setMuonium = new G4UIcmdWithAString("/lemuGun/particle",this); + setMuonium->SetGuidance("Particles to be shot"); + setMuonium->SetParameterName("Particle types: mu+/Mu",true); + setMuonium->SetDefaultValue("mu+"); + + + setEGauss = new G4UIcmdWith3Vector("/lemuGun/energy/gauss",this); + setEGauss->SetGuidance("Gaussian energy distribution with specified mean and standard deviation\n ENTER VALUES >> IN keV "); + setEGauss->SetParameterName("Mean Energy","Standard Deviation","",true,true); + setEGauss->SetDefaultValue(Hep3Vector(20., 0.5, 0.0)); + +} + + +LEMuSRPgaMessenger::~LEMuSRPgaMessenger() +{ + delete posCmd; + delete momCmd; + delete scaCmd; + delete scgCmd; + delete scbCmd; + delete reset; + delete setEnergy; + delete setRndEnergy; + delete setMuonium; + delete setKEoffset; + delete setEGauss; + delete pgaDirectory; +} + + +void LEMuSRPgaMessenger::SetNewValue(G4UIcommand * command,G4String newValues) +{ + + if( command==posCmd ) + { + lemuPGA->scan=0; + lemuPGA->X=posCmd->GetNew3VectorValue(newValues).x(); + lemuPGA->Y=posCmd->GetNew3VectorValue(newValues).y(); + lemuPGA->Z=posCmd->GetNew3VectorValue(newValues).z(); + } + else if( command==momCmd ) + { + // lemuPGA->scan=0; + lemuPGA->momX=momCmd->GetNew3VectorValue(newValues).x(); + lemuPGA->momY=momCmd->GetNew3VectorValue(newValues).y(); + lemuPGA->momZ=momCmd->GetNew3VectorValue(newValues).z(); + } + else if( command==scaCmd) + { + lemuPGA->scan=1; + G4int xb, yb; + lemuPGA->m_xrange=scaCmd->GetNew3VectorValue(newValues).x(); + lemuPGA->m_yrange=scaCmd->GetNew3VectorValue(newValues).y(); + + xb=(G4int)(scaCmd->GetNew3VectorValue(newValues).z()/(2*scaCmd->GetNew3VectorValue(newValues).x())); + yb=(G4int)(scaCmd->GetNew3VectorValue(newValues).z()/(2*scaCmd->GetNew3VectorValue(newValues).y())); + + // xb=(G4int)(scaCmd->GetNew3VectorValue(newValues).z()); + // yb=(G4int)(scaCmd->GetNew3VectorValue(newValues).z()); + lemuPGA->m_nbxsteps=xb; + lemuPGA->m_nbysteps=yb; + + + lemuPGA->m_counterx = 0; + lemuPGA->m_countery = 0; + + G4cout<<"Scan will make " << lemuPGA->m_nbxsteps << " steps along x and " <m_nbysteps <<" steps along y.\n sHooT :: " << xb*yb <<" particles to fill.\n "; + + } + + else if( command==scbCmd) + { + lemuPGA->scan=2; + lemuPGA->m_xrange=scbCmd->GetNew3VectorValue(newValues).x(); + lemuPGA->m_nbxsteps=(G4int)scbCmd->GetNew3VectorValue(newValues).y(); + lemuPGA->m_nbysteps=(G4int)scbCmd->GetNew3VectorValue(newValues).z(); + + lemuPGA->m_counterx = 0; + lemuPGA->m_countery = 0; + + } + + else if( command==scgCmd) + { + lemuPGA->scan=3; + lemuPGA->m_xrange=scgCmd->GetNew3VectorValue(newValues).x(); + lemuPGA->sc_mean =scgCmd->GetNew3VectorValue(newValues).y(); + lemuPGA->sc_stddev=scgCmd->GetNew3VectorValue(newValues).z(); + + lemuPGA->m_counterx = 0; + lemuPGA->m_countery = 0; + G4cout<<"Scan will make 40 steps along radius and 180 steps along angle.\n sHooT :: 3600 particles to fill.\n "; + } + else if( command==reset) + { + lemuPGA->m_counterx = 0; + lemuPGA->m_countery = 0; + } + + + else if( command==setMuonium) + { + G4ParticleTable* particleTable = G4ParticleTable::GetParticleTable(); + + if(particleTable->FindParticle(newValues)) + { + lemuPGA->pname=newValues; + } + else + { + lemuPGA->pname="mu+"; + G4cout<<"Particle " << newValues<<" not found ==>> will shoot mu+. "<ke_offset=setKEoffset->GetNewDoubleValue(newValues)*keV; + } + + else if(command == setEnergy) + { + lemuPGA->rnd=false; + G4double k=setEnergy->GetNewDoubleValue(newValues); + lemuPGA->energy=k*keV; + } + else if(command == setRndEnergy) + { + lemuPGA->rnd=true; + } + else if( command==setEGauss ) + { + lemuPGA->gauss=1; + lemuPGA->mean = setEGauss->GetNew3VectorValue(newValues).x(); + lemuPGA->stddev= setEGauss->GetNew3VectorValue(newValues).y(); + } + + + +} + diff --git a/geant4/LEMuSR/src/LEMuSRPhysicsList.cc b/geant4/LEMuSR/src/LEMuSRPhysicsList.cc new file mode 100644 index 0000000..fe48d95 --- /dev/null +++ b/geant4/LEMuSR/src/LEMuSRPhysicsList.cc @@ -0,0 +1,93 @@ +//§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§//* +// LOW ENERGY MUON SPIN RELAXATION, ROTATION, RADIATION +// +// ID : LEMuSRPhysicsList.cc , v 1.1 +// AUTHOR: Taofiq PARAISO +// DATE : 2004-08-24 16:33 +//§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§// +// +// & &&&&&&&&&& &&&&&&& &&&&&&&& +// & & && && & && +// & & & & & & && +// & &&&&&&& & & &&&&&& &&&&&&&& +// & & & && & & && +// & & && & & && && & & +// &&&&&&&&&& &&&&&&&&&& & &&&&& && &&&&&&& & && +// & +// & +// & +// & +// PHYSICS LIST +//§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§// + + +#include "LEMuSRPhysicsList.hh" + +#include "globals.hh" +#include "G4ParticleDefinition.hh" +#include "G4ProcessManager.hh" +#include "G4ProcessVector.hh" +#include "G4ParticleTypes.hh" +#include "G4ParticleTable.hh" + +#include "G4Material.hh" +#include "G4MaterialTable.hh" +#include "G4ios.hh" +#include + +#include "LEMuSRGeneralPhysics.hh" +#include "LEMuSREMPhysics.hh" +#include "LEMuSRMuonPhysics.hh" +#include "LEMuSRHadronPhysics.hh" +#include "LEMuSRIonPhysics.hh" + +LEMuSRPhysicsList::LEMuSRPhysicsList(): G4VModularPhysicsList() +{ + // default cut value (1.0mm) + defaultCutValue = 10.0*cm; + // SetVerboseLevel(1); + // SetCuts(); + SetCutsWithDefault(); + + SetCutValue(1*mm, "e+"); + SetCutValue(1*mm, "proton"); + + // SetCutValue(0.001*mm, "mu+"); + // SetCutValue(0.001*mm, "Mu"); + + // General Physics + RegisterPhysics( new LEMuSRGeneralPhysics("general") ); + + // EM Physics + RegisterPhysics( new LEMuSREMPhysics("standard EM")); + + // Muon Physics + RegisterPhysics( new LEMuSRMuonPhysics("muon")); + + // Hadron Physics + RegisterPhysics( new LEMuSRHadronPhysics("hadron")); + + // Ion Physics + RegisterPhysics( new LEMuSRIonPhysics("ion")); + + +} + +LEMuSRPhysicsList::~LEMuSRPhysicsList() +{ +} + +void LEMuSRPhysicsList::SetCuts() +{ + // " G4VUserPhysicsList::SetCutsWithDefault" method sets + // the default cut value for all particle types + SetCutsWithDefault(); + + SetCutValue(1.*mm, "e+"); + SetCutValue(1.*mm, "e-"); + +} + + + + diff --git a/geant4/LEMuSR/src/LEMuSRPrimaryGeneratorAction.cc b/geant4/LEMuSR/src/LEMuSRPrimaryGeneratorAction.cc new file mode 100644 index 0000000..489b9ef --- /dev/null +++ b/geant4/LEMuSR/src/LEMuSRPrimaryGeneratorAction.cc @@ -0,0 +1,354 @@ +///§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§//* +// LOW ENERGY MUON SPIN RELAXATION, ROTATION, RADIATION +// +// ID : LEMuSRPrimaryGeneratorAction.cc , v 1.3 +// AUTHOR: Taofiq PARAISO +// DATE : 2004-09-16 09:12 +//§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§// +// +// & &&&&&&&&&& &&&&&&& &&&&&&&& +// & & && && & && +// & & & & & & && +// & &&&&&&& & & &&&&&& &&&&&&&& +// & & & && & & && +// & & && & & && && & & +// &&&&&&&&&& &&&&&&&&&& & &&&&& && &&&&&&& & && +// & +// & +// & +// & +// PRIMARY GENERATOR ACTION +//§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§// + + + + +#include "LEMuSRPrimaryGeneratorAction.hh" +#include "LEMuSRPgaMessenger.hh" +#include "yields.h" + +// G4 LIBRARIES + +#include "G4ParticleTable.hh" +#include "G4ParticleDefinition.hh" +#include "G4UnitsTable.hh" +#include "Randomize.hh" +#include "G4Event.hh" +#include "G4ParticleGun.hh" +#include "LEMuSRParticleGun.hh" +#include "globals.hh" +#include "Randomize.hh" +#include "G4Gamma.hh" +#include "G4ThreeVector.hh" +#include "globals.hh" +#include "G4RunManager.hh" +#include "time.h" +#include "G4ios.hh" +#include + +#include "G4Muonium.hh" + + +LEMuSRPrimaryGeneratorAction::LEMuSRPrimaryGeneratorAction() +{ + + + // Instance pointer + thePGA=this; + + // Messenger + messenger = new LEMuSRPgaMessenger(this); + + // get the random number engine + theEngine = HepRandom::getTheEngine(); + + m_nbxsteps = 200; + m_nbysteps = 200; + m_counterx = 0; + m_countery = 0; + m_xrange = 2.; + m_yrange = 2.; + + lemuParticleGun = new LEMuSRParticleGun(); + lemuParticleGun->SetNumberOfParticles(1); + + X=0; Y=0; + Z=0.; + momX=0.; momY=0.; momZ=1; + + scan=0; + + rnd=false; + + energy=5*keV; + + gauss=0; mean=0; stddev=0; + + pname="mu+"; + + ke_offset=3.73*keV; +#if defined LEMU_TEST_ASYM + ke_offset=0; +#endif + charge=+1; + + //==================================TEST + /* i=j=0; + Yprint.open("test5.txt"); + if (!Yprint.is_open()) exit(8); + while(i<1000){table[i]=0; i++;} + */ + +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OO + + +LEMuSRPrimaryGeneratorAction::~LEMuSRPrimaryGeneratorAction() +{ + delete lemuParticleGun; + delete messenger; + + + //============================0000TEST + /* i=0; + do + { + // G4cout<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> + + // the random engine + G4RandGauss* iRndGauss = new G4RandGauss(theEngine, 20.0, 10.0); + + // the random energy + if(rnd) + { + rndenergy = iRndGauss->shoot(20.0, 0.50); + energy= rndenergy*keV;//default unit is MeV + } + + if(gauss==1) + { + rndenergy = iRndGauss->shoot(mean, stddev); + energy= rndenergy*keV;//default unit is MeV + } + +#ifdef DEBUG_LEMU_PGA + G4cout<<"Energy is "<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> + + G4ParticleTable* particleTable = G4ParticleTable::GetParticleTable(); + + G4ParticleDefinition* particle; + + particle = particleTable->FindParticle(pname); + + // std::cout<<"Particle "<< particle->GetParticleName(); + + + lemuParticleGun->SetParticleDefinition(particle); + + lemuParticleGun->SetParticleEnergy(energy+ke_offset); + + + + if(particle->GetParticleSubType()=="mu") + { + // the random time of the decay for muons + + G4double tau=0.000002197; // the muon mean lifetime + G4double rnddecaytime = - tau*log(1-G4UniformRand()); + decaytime = rnddecaytime*s; + lemuParticleGun->SetDecayTime(decaytime); + // G4cout<<"Decay Time is "<>>>>>>>>>>>>>>>>>> + + lemuParticleGun->SetParticleMomentumDirection(G4ThreeVector(momX,momY,momZ)); + lemuParticleGun->SetParticlePolarization(G4ThreeVector(1.,0.,0.)); +#if defined LEMU_TEST_ASYM + lemuParticleGun->SetParticlePosition(G4ThreeVector(0.,0.,0.)); + lemuParticleGun->SetParticlePolarization(G4ThreeVector(-1.,0.,0.)); + lemuParticleGun->SetParticleEnergy(0); +#endif + + + lemuParticleGun->GeneratePrimaryVertex(anEvent); + +} + + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OO +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OO + + + + +void LEMuSRPrimaryGeneratorAction::GetScanningMode(G4int scan) +{ + + //----------------------SINGLE SHOOTING POSITION >>>>>>>>>>>>>>>>>>>>>>>>>>>>> + if(scan==0) + { + lemuParticleGun->SetParticlePosition(G4ThreeVector(X*cm,Y*cm,Z*cm)); + } + + + + + //-------------------------SQUARE SCAN >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> + if(scan==1) + { + //scan: position of the gun + if(m_countery<=m_nbysteps) + { + if(m_counterx<=m_nbxsteps) + { + // total scan + X = -m_xrange+m_counterx*(2*m_xrange)/m_nbxsteps; + Y = -m_yrange+m_countery*(2*m_yrange)/m_nbysteps; + m_counterx++; + } + + if(m_counterx>m_nbxsteps) + { + m_countery++; + m_counterx=1; + } + } + + else if(m_countery>m_nbysteps) + { + m_countery=0; + m_counterx=0; + } + // SET POSITION + lemuParticleGun->SetParticlePosition(G4ThreeVector(X*cm,Y*cm,-114*cm)); + } + + + + + //----------------------CIRCULAR SCAN>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> + if(scan==2) + { + if(m_countery<=m_nbysteps) + { + if(m_counterx<=m_nbxsteps) + { + radius= m_xrange*(m_counterx/m_nbxsteps)*cm; + angle=2*M_PI*m_countery/(m_nbysteps)*rad; + X = radius*cos(angle); + Y = radius*sin(angle); + m_counterx++; + + } + + if(m_counterx>m_nbxsteps) + { + m_countery++; + m_counterx=1; + } + } + + else if (m_countery>m_nbysteps) + { + // X=0; + // Y=0; + m_countery=0; + m_counterx=0; + } + // SET POSITION + lemuParticleGun->SetParticlePosition(G4ThreeVector(X,Y,-114*cm)); + } + + + //----------------------CIRCULAR SCAN Gauss >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> + + + if(scan==3) + { + G4RandGauss* iRndGauss = new G4RandGauss(theEngine); + + + // G4cout <<"radius "<< radius/cm<shoot(sc_mean, sc_stddev)*cm; + Y = iRndGauss->shoot(sc_mean, sc_stddev)*cm; + + radius= sqrt(X*X+Y*Y); + }while(radius>2.5*cm); + // SET POSITION + lemuParticleGun->SetParticlePosition(G4ThreeVector(X,Y,-114*cm)); + } + + + +} + + + + + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OO + +LEMuSRPrimaryGeneratorAction* LEMuSRPrimaryGeneratorAction::thePGA=0; +LEMuSRPrimaryGeneratorAction* LEMuSRPrimaryGeneratorAction::GetPGA() +{ + return thePGA; +} + + + + + + + +//---------------------------------------------------------------- +//---------------------------------------------------------------- +//---------------------------------------------------------------- +//---------------------------------------------------------------- + + + /* + G4double k=G4UniformRand(); + if(k>0.5) + { + G4double gamma; + gamma = 0.5*((1.*eplus)/(0.1056584*GeV/(c_light*c_light))+(1.*eplus)/(0.51099906*MeV/(c_light*c_light))); + G4cout<< "PGA "<< k<< " " <SetGammaFactor(gamma); + } + else if(k<0.5) + { + G4double gamma; + gamma = 0.5*((1.*eplus)/(0.1056584*GeV/(c_light*c_light))-(1.*eplus)/(0.51099906*MeV/(c_light*c_light))); + G4cout<< "PGA "<< k<< " " <SetGammaFactor(gamma); + } + */ diff --git a/geant4/LEMuSR/src/LEMuSRRNDMAGField.cc b/geant4/LEMuSR/src/LEMuSRRNDMAGField.cc new file mode 100644 index 0000000..d251a02 --- /dev/null +++ b/geant4/LEMuSR/src/LEMuSRRNDMAGField.cc @@ -0,0 +1,68 @@ +#include "LEMuSRRNDMAGField.hh" +#include "G4ios.hh" +#include +#include "Randomize.hh" +#include "globals.hh" +#include "G4Transform3D.hh" +#include "G4UnitsTable.hh" + + +LEMuSRRNDMAGField::LEMuSRRNDMAGField(const G4ThreeVector FieldVector, G4double rndness ) + :G4UniformMagField(FieldVector ) +{ + BField=FieldVector; + + randomness=1; + + if(rndness<=1.&&rndness>=0) + { + randomness=rndness; + G4cout <<"Mag field randomness = "<GetRunID() << " start." << G4endl; + + G4RunManager::GetRunManager()->SetRandomNumberStore(true); + + if (G4VVisManager::GetConcreteInstance()) + { + G4UImanager* UI = G4UImanager::GetUIpointer(); + UI->ApplyCommand("/vis/scene/notifyHandlers"); + } + +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void LEMuSRRunAction::EndOfRunAction(const G4Run*) +{ + if (G4VVisManager::GetConcreteInstance()) + { + G4UImanager::GetUIpointer()->ApplyCommand("/vis/viewer/update"); + } +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + diff --git a/geant4/LEMuSR/src/LEMuSRScintHit.cc b/geant4/LEMuSR/src/LEMuSRScintHit.cc new file mode 100644 index 0000000..c37f3dd --- /dev/null +++ b/geant4/LEMuSR/src/LEMuSRScintHit.cc @@ -0,0 +1,75 @@ +#include "LEMuSRScintHit.hh" +#include "G4VVisManager.hh" +#include "G4Circle.hh" +#include "G4Colour.hh" +#include "G4VisAttributes.hh" +#include "G4ios.hh" +#include +#include + +#include "G4UnitsTable.hh" + +G4Allocator LEMuSRScintHitAllocator; + +LEMuSRScintHit::LEMuSRScintHit() +{;} + +LEMuSRScintHit::~LEMuSRScintHit() +{;} + +LEMuSRScintHit::LEMuSRScintHit(const LEMuSRScintHit &right) : G4VHit() +{ + particle_name = right.particle_name; + energy_deposition = right.energy_deposition; + time_of_flight = right.time_of_flight; + position = right.position; + momentum = right.momentum; +} + +const LEMuSRScintHit& LEMuSRScintHit::operator=(const LEMuSRScintHit &right) +{ + particle_name = right.particle_name; + energy_deposition = right.energy_deposition; + time_of_flight = right.time_of_flight; + position = right.position; + momentum = right.momentum; + return *this; +} + + + +G4int LEMuSRScintHit::operator==(const LEMuSRScintHit &right) const +{ + return (this==&right) ? 1 : 0; +} + +void LEMuSRScintHit::Draw() +{ + G4VVisManager* VisManager = G4VVisManager::GetConcreteInstance(); + if(VisManager) + { + G4Circle circle(position); + circle.SetScreenSize(0.1); + circle.SetFillStyle(G4Circle::filled); + G4Colour colour(1.,1.,1.); + G4VisAttributes attributes(colour); + circle.SetVisAttributes(attributes); + VisManager->Draw(circle); + } +} + +void LEMuSRScintHit::Print() +{} + +void LEMuSRScintHit::print(G4String name) +{ + ofstream TestPrint(name,ios::app); + if (!TestPrint.is_open()) exit(8); + TestPrint << "particle_name : " << particle_name <<" ;\n" + << "energy_deposition : " << G4BestUnit(energy_deposition,"Energy") <<" ;\n " + << "time_of_flight : " << G4BestUnit(time_of_flight,"Time") <<" ;\n " + << "position : " << position <<" ;\n " + << "momentum : " << momentum <<" ;\n " + <AddHitsCollection(HCID,ScintCollection); +} + +G4bool LEMuSRScintSD::ProcessHits(G4Step* aStep, G4TouchableHistory*) +{ + p_name = aStep->GetTrack()->GetDefinition()->GetParticleName(); // particle name + + + if( CheckCondition(aStep)) + { + GetDatas(aStep); + getHit(); + FillRoot(); + + } + aStep->GetTrack()->SetTrackStatus(fStopAndKill); + + // PrintAll(); + + + return true; +} + +void LEMuSRScintSD::EndOfEvent(G4HCofThisEvent*) +{ + // G4int NbHits = ScintCollection->entries(); + // G4cout << "\n-------->Hits Collection: in this event they are " << NbHits + // << " hits in the inner scintillator: " << G4endl; + // for (G4int i=0;iPrint(); + +} + +G4bool LEMuSRScintSD::CheckCondition(const G4Step* aStep) +{ + G4bool condition=false; + + if(p_name == "e+")//&&aStep->GetTrack()->GetNextVolume()->GetLogicalVolume()->GetName()!="lv_SCIS") + { + condition=true; + if( aStep->GetTrack()->GetCreatorProcess()) + { + if( aStep->GetTrack()->GetCreatorProcess()->GetProcessName()=="Decay"|| aStep->GetTrack()->GetCreatorProcess()->GetProcessName()=="DecayWithSpin") + { + condition=true; + } + } + } + + return condition; + +} + + +void LEMuSRScintSD::clear() +{ + delete ScintCollection; +} + +void LEMuSRScintSD::DrawAll() +{ +} + +void LEMuSRScintSD::PrintAll() +{ + // Define Hit + +// G4cout << "PROCESS HIT"<SetParticleName(p_name); + aHit->SetSpin(spin); + + aHit->SetMomentum( hitmom ); + aHit->SetPosition( hitpos ); + + aHit->SetTimeOfFlight( tof); + aHit->SetEnergyDeposition( edep ); + + + // ScintCollection->insert( aHit ); + // aHit->Print(); + // aHit->print("Statistics/SCIS.Hits"); + // aHit->Draw(); + + +} + + +void LEMuSRScintSD::GetDatas(const G4Step *aStep) +{ + // Get datas + //a Volume, name, spin + vname = aStep->GetPreStepPoint()->GetPhysicalVolume()->GetName(); + spin= aStep->GetTrack()->GetDefinition()->GetPDGSpin(); // spin in units of 1 + + //b Position momentum + hitpos = aStep->GetTrack()->GetPosition(); // position + hitmom = aStep->GetTrack()->GetMomentumDirection(); // momentum + hitvertex = aStep->GetTrack()->GetVertexPosition();// creation position + //c Times + tof = aStep->GetTrack()->GetLocalTime(); // time since track creation + globaltime = aStep->GetTrack()->GetGlobalTime();// time since event creation + proptime = aStep->GetTrack()->GetProperTime(); // particle's proper time + + //d Energy + edep = aStep->GetTotalEnergyDeposit(); + + toten = aStep->GetTrack()->GetTotalEnergy(); + + kinen = aStep->GetTrack()->GetKineticEnergy(); + + //e Scint scintID + + + //f runID + runID=G4RunManager::GetRunManager()->GetCurrentRun()->GetRunID(); + + //g parent charge: 0 for muonium and 1 for muon + +} + + +void LEMuSRScintSD::getHit() +{ + theHit.kenergy = kinen; + theHit.tenergy = toten; + theHit.edeposit = edep; + theHit.localtime = tof; + theHit.globaltime = globaltime; + theHit.proptime = proptime; + theHit.positionx = hitpos.x(); + theHit.positiony = hitpos.y(); + theHit.positionz = hitpos.z(); + theHit.momdirx = hitmom.x(); + theHit.momdiry = hitmom.y(); + theHit.momdirz = hitmom.z(); + theHit.ipositionx = hitvertex.x(); + theHit.ipositiony = hitvertex.y(); + theHit.ipositionz = hitvertex.z(); + theHit.runID = runID; + theHit.motherCharge = runID; + + theHit.scLeft = 0; + theHit.scBottom =0 ; + theHit.scRight =0; + theHit.scTop = 0; + + if (vname=="pv_SCISl") + { + theHit.scLeft = 1; + } + else if (vname=="pv_SCISb") + { + theHit.scBottom =1 ; + } + else if (vname=="pv_SCISr") + { + theHit.scRight =1; + } + else if (vname=="pv_SCISt") + { + theHit.scTop = 1; + } + + + + } + +// ROOT METHODS + +void LEMuSRScintSD::BookRoot() +{ + // open root file + myFile = new TFile("SDInnerScint.root", "RECREATE"); + // myFile->SetCompressionLevel(1); + + tree = new TTree ("tree","Inner Scintillator Datas"); + + tree->Branch("positron",&theHit.kenergy,"kenergy/F:tenergy/F:edeposit/F:localtime/F:globaltime:propertime/F:positionx/F:positiony:positionz:momentumx:momentumy:momentumz/F:initx/F:inity/F:initz/F:Left/F:Right/F:Bottom/F:Top/F:runID/I:parentCharge/F"); + +} + +void LEMuSRScintSD::FillRoot() +{ + tree->Fill(); +} + +void LEMuSRScintSD::WriteRoot() +{ + myFile->Write(); + myFile->Close(); +} diff --git a/geant4/LEMuSR/src/LEMuSRStackingAction.cc b/geant4/LEMuSR/src/LEMuSRStackingAction.cc new file mode 100644 index 0000000..6ccf69a --- /dev/null +++ b/geant4/LEMuSR/src/LEMuSRStackingAction.cc @@ -0,0 +1,94 @@ +//§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§//* +// LOW ENERGY MUON SPIN RELAXATION, ROTATION, RADIATION Geant4 SIMULATION +// ID : LEMuSRStackingAction.cc , v 1.0 +// AUTHOR: Taofiq PARAISO +// DATE : 2004-07-07 11:15 +// +//§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§// +// +// & &&&&&&&&&& &&&&&&& &&&&&&&& +// & & && && & && +// & & & & & & && +// & &&&&&&& & & &&&&&& &&&&&&&& +// & & & && & & && +// & & && & & && && & & +// &&&&&&&&&& &&&&&&&&&& & &&&&& && &&&&&&& & && +// & +// & +// & +// & +// STACKING ACTION.CC +//§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§// + + + + + + + + + +#include "LEMuSRStackingAction.hh" +#include "G4SDManager.hh" +#include "G4RunManager.hh" +#include "G4Event.hh" +#include "G4HCofThisEvent.hh" +#include "G4Track.hh" +#include "G4TrackStatus.hh" +#include "G4ParticleDefinition.hh" +#include "G4ParticleTypes.hh" +#include "LEMuSRStackingActionMessenger.hh" +#include "G4ios.hh" + +LEMuSRStackingAction::LEMuSRStackingAction() + :ScintHits(0), stage(0) +{ + theMessenger = new LEMuSRStackingActionMessenger(this); +} + +LEMuSRStackingAction::~LEMuSRStackingAction() +{ + delete theMessenger; + } + + + +G4ClassificationOfNewTrack +LEMuSRStackingAction::ClassifyNewTrack(const G4Track *) +{ + G4ClassificationOfNewTrack classification; + classification = fUrgent; + return classification; +} + + +G4VHitsCollection* LEMuSRStackingAction::GetCollection(G4String colName) +{ + G4SDManager* SDMan = G4SDManager::GetSDMpointer(); + G4RunManager* runMan = G4RunManager::GetRunManager(); + int colID = SDMan->GetCollectionID(colName); + if(colID>=0) + { + const G4Event* currentEvent = runMan->GetCurrentEvent(); + G4HCofThisEvent* HCE = currentEvent->GetHCofThisEvent(); + return HCE->GetHC(colID); + } + return 0; +} + + + +void LEMuSRStackingAction::NewStage() +{ + +} + + + +void LEMuSRStackingAction::PrepareNewEvent() +{ + stage = 0; + ScintHits = 0; +} + + diff --git a/geant4/LEMuSR/src/LEMuSRStackingActionMessenger.cc b/geant4/LEMuSR/src/LEMuSRStackingActionMessenger.cc new file mode 100644 index 0000000..87fc68e --- /dev/null +++ b/geant4/LEMuSR/src/LEMuSRStackingActionMessenger.cc @@ -0,0 +1,27 @@ +#include "LEMuSRStackingActionMessenger.hh" +#include "LEMuSRStackingAction.hh" +#include "G4UIcmdWithAnInteger.hh" +#include "G4UIcmdWithADoubleAndUnit.hh" +#include "G4ios.hh" + +LEMuSRStackingActionMessenger::LEMuSRStackingActionMessenger(LEMuSRStackingAction * msa) +:myAction(msa) +{ + ; +} + +LEMuSRStackingActionMessenger::~LEMuSRStackingActionMessenger() +{ + ; +} + +void LEMuSRStackingActionMessenger::SetNewValue(G4UIcommand *,G4String) +{ + ; +} + +G4String LEMuSRStackingActionMessenger::GetCurrentValue(G4UIcommand *) +{ + ; +} + diff --git a/geant4/LEMuSR/src/LEMuSRSteppingAction.cc b/geant4/LEMuSR/src/LEMuSRSteppingAction.cc new file mode 100644 index 0000000..5bb0873 --- /dev/null +++ b/geant4/LEMuSR/src/LEMuSRSteppingAction.cc @@ -0,0 +1,268 @@ +//§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§//* +// LOW ENERGY MUON SPIN RELAXATION, ROTATION, RADIATION Geant4 SIMULATION +// ID : LEMuSRSteppingAction.cc , v 1.0 +// AUTHOR: Taofiq PARAISO +// DATE : 2004-07-07 11:15 +// +//§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§// +// +// & &&&&&&&&&& &&&&&&& &&&&&&&& +// & & && && & && +// & & & & & & && +// & &&&&&&& & & &&&&&& &&&&&&&& +// & & & && & & && +// & & && & & && && & & +// &&&&&&&&&& &&&&&&&&&& & &&&&& && &&&&&&& & && +// & +// & +// & +// & +// STEPPING ACTION.CC +//§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§// + + + + +#include "LEMuSRSteppingAction.hh" +#include "G4SteppingManager.hh" +#include "G4Transform3D.hh" +#include "G4DynamicParticle.hh" +#include "G4ParticleDefinition.hh" +#include "G4ProcessManager.hh" +#include "LEMuSRDecay.hh" +#include "G4VVisManager.hh" +#include "G4Polyline.hh" +#include "G4VisAttributes.hh" +#include "G4Colour.hh" + + +LEMuSRSteppingAction::LEMuSRSteppingAction() +{ +pointer=this ; + loop=0; +} + + +LEMuSRSteppingAction::~LEMuSRSteppingAction() +{ + ; +} + +LEMuSRSteppingAction* LEMuSRSteppingAction::pointer=0; +LEMuSRSteppingAction* LEMuSRSteppingAction::GetInstance() +{ + return pointer; +} + + + +void LEMuSRSteppingAction::UserSteppingAction(const G4Step* aStep) + +{ + LoopKiller(aStep); + + G4VVisManager* pVVisManager = G4VVisManager::GetConcreteInstance(); + G4String p_name; + p_name = aStep->GetTrack()->GetDefinition()->GetParticleName(); // particle name + if (pVVisManager) { + //----- Define a line segment + G4Polyline polyline; + G4Colour colour; + if (p_name == "mu+") colour = G4Colour(1., 0., 0.); + else if (p_name == "Mu" ) colour = G4Colour(0., 0., 1.); + else if (p_name == "e+" ) colour = G4Colour(1., 1., 0.); + else colour = G4Colour(1., 0., 1.); + G4VisAttributes attribs(colour); + polyline.SetVisAttributes(attribs); + polyline.push_back(aStep->GetPreStepPoint()->GetPosition()); + polyline.push_back(aStep->GetPostStepPoint()->GetPosition()); + + //----- Call a drawing method for G4Polyline + pVVisManager -> Draw(polyline); + + } +} + + + +void LEMuSRSteppingAction::LoopKiller(const G4Step *aStep) +{ + // loop killa + if(aStep->GetTrack()->GetCurrentStepNumber()>2500) + { + aStep->GetTrack()->SetTrackStatus(fStopAndKill); + G4cout<<"killed "<GetTrack()->GetDefinition()->GetParticleName()=="e-" + ||aStep->GetTrack()->GetDefinition()->GetParticleName()=="gamma" + ||aStep->GetTrack()->GetDefinition()->GetParticleName()=="nu_e" + ||aStep->GetTrack()->GetDefinition()->GetParticleName()=="anti_nu_e" + ||aStep->GetTrack()->GetDefinition()->GetParticleName()=="nu_mu" + ||aStep->GetTrack()->GetDefinition()->GetParticleName()=="anti_nu_mu") + { + aStep->GetTrack()->SetTrackStatus(fStopAndKill); + } + + +} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +//-------------------------------------------------------------------------------- +//-------------------------------------------------------------------------------- + + + + + +void LEMuSRSteppingAction:: FieldInfo(const G4Step *aStep) +{ + + G4String p_name; + p_name = aStep->GetTrack()->GetDefinition()->GetParticleName(); // particle name + G4String v_name = aStep->GetTrack()->GetVolume()->GetLogicalVolume()->GetName(); + + if( aStep->GetTrack()->GetVolume()->GetLogicalVolume()->GetFieldManager()) + { + + G4cout << "Field Manager...OK: \n" + << "particle name : " << p_name <<" ;\n " + << "volume name : " << v_name <<" ;\n " + << "position : " << aStep->GetPostStepPoint()->GetPosition() <<" ;\n " + << "kenergy : " << aStep->GetTrack()->GetKineticEnergy()<<" ;\n " + << "momentum direction: " << aStep->GetPostStepPoint()->GetMomentumDirection() <<" ;\n " + << "polarization : " << aStep->GetPostStepPoint()->GetPolarization() <<" ;\n " + << "time : " << aStep->GetPostStepPoint()->GetGlobalTime() <<" ;\n " ; + // field datas + // G4cout << "Field Step : " << aStep->GetTrack()->GetVolume()->GetLogicalVolume()->GetFieldManager()->GetDeltaOneStep() <<" ;\n " ; + double point[4]; + point[0]= aStep->GetPostStepPoint()->GetPosition().x()/mm/100; + point[1]= aStep->GetPostStepPoint()->GetPosition().y()/mm/100; + point[2]= aStep->GetPostStepPoint()->GetPosition().z()/mm/100 + 5.67; + double field[6]; + aStep->GetTrack()->GetVolume()->GetLogicalVolume()->GetFieldManager()->GetDetectorField()->GetFieldValue(point,field); + G4cout <<"pOSITION : "<< point[0] <<" "<GetTrack()->GetDefinition()->GetParticleName(); // particle name + G4String v_name = aStep->GetTrack()->GetVolume()->GetLogicalVolume()->GetName(); + + // Get datas + //a + if(aStep->GetTrack()->GetDefinition()) + { + p_name = aStep->GetTrack()->GetDynamicParticle()->GetDefinition()->GetParticleName(); // particle name + + // if(p_name == "mu+") + // { + G4String nv_name; + G4String v_name = aStep->GetTrack()->GetVolume()->GetName(); // particle name + if(v_name!="pv_World") + { + nv_name = aStep->GetTrack()->GetNextVolume()->GetName(); // particle name + } + else if(v_name=="pv_World") + { + nv_name=v_name; + } + + G4double spin= aStep->GetTrack()->GetDynamicParticle()->GetDefinition()->GetPDGSpin(); // spin in units of 1 + //b + G4ThreeVector position = aStep->GetPostStepPoint()->GetPosition(); // position + G4ThreeVector momentum = aStep->GetPostStepPoint()->GetMomentum(); // momentum + //c + G4double tof = aStep->GetTrack()->GetLocalTime(); // time since track creation + G4double globaltime = aStep->GetTrack()->GetGlobalTime();// time since the event in which the track belongs is created. + G4double proptime = aStep->GetTrack()->GetProperTime(); // proper time of the particle + //d + G4double edep = aStep->GetTotalEnergyDeposit(); + + // Print Datas + + if( aStep->GetTrack()->GetCreatorProcess()) + { + G4cout << "NOT PRIMARY PARTICLE : created by : " << aStep->GetTrack()->GetCreatorProcess()->GetProcessName() <<" ;\n "; + // G4cout << "Parent particles are : " << aStep->GetTrack()->GetCreatorProcess()->GetProcessName() <<" ;\n "; + + } + + G4cout << "particle name : " << p_name <<" ;\n " + << "volume name : " << v_name <<" ;\n " + << "next volume name : " << nv_name <<" ;\n " + << "spin : " << spin <<" ;\n " + << "current energy : " << aStep->GetTrack()->GetDynamicParticle()->GetKineticEnergy()/keV <<" keV;\n " + << "energy_deposition : " << G4BestUnit(edep,"Energy") <<" ;\n " + << "time_of_flight : " << G4BestUnit(tof,"Time") <<" ; " << G4BestUnit(globaltime,"Time")<<" ; " << G4BestUnit(proptime,"Time") <<" ;\n " + << "position : " << position <<" ;\n " + << "momentum : " << momentum <<" ;\n " + << "polarization : " << aStep->GetTrack()->GetDynamicParticle()->GetPolarization() <<" ;\n " ; + if(aStep->GetPostStepPoint()->GetProcessDefinedStep()){ + G4cout << "process : " << aStep->GetPostStepPoint()->GetProcessDefinedStep()->GetProcessName() <<"\n" + <GetDynamicParticle(); + *theParticle = particle; +} diff --git a/geant4/LEMuSR/src/LEMuSRTrackingAction.cc b/geant4/LEMuSR/src/LEMuSRTrackingAction.cc new file mode 100644 index 0000000..4972c1d --- /dev/null +++ b/geant4/LEMuSR/src/LEMuSRTrackingAction.cc @@ -0,0 +1,42 @@ +#include"LEMuSRTrackingAction.hh" +#include"G4VProcess.hh" +#include"G4PrimaryParticle.hh" +#include"G4UnitsTable.hh" +#include"LEMuSRMuonDecayChannel.hh" + + +LEMuSRTrackingAction ::LEMuSRTrackingAction() +{ + + + +;} + +LEMuSRTrackingAction:: ~LEMuSRTrackingAction() +{ + +} + + +void LEMuSRTrackingAction::PreUserTrackingAction(const G4Track* theTrack) +{ + + +} + + + +void LEMuSRTrackingAction::Collect_datas(const G4Track* theTrack) +{ + + +} + + + + +void LEMuSRTrackingAction::PostUserTrackingAction(const G4Track*) +{ + ; +} + diff --git a/geant4/LEMuSR/src/LEMuSRVisManager.cc b/geant4/LEMuSR/src/LEMuSRVisManager.cc new file mode 100644 index 0000000..2d20e59 --- /dev/null +++ b/geant4/LEMuSR/src/LEMuSRVisManager.cc @@ -0,0 +1,113 @@ + +#ifdef G4VIS_USE + +#include "LEMuSRVisManager.hh" + +// Supported drivers... + +// Not needing external packages or libraries... +#include "G4ASCIITree.hh" +#include "G4DAWNFILE.hh" +#include "G4GAGTree.hh" +#include "G4HepRepFile.hh" +#include "G4HepRep.hh" +#include "G4RayTracer.hh" +#include "G4VRML1File.hh" +#include "G4VRML2File.hh" + +// Needing external packages or libraries... + +#ifdef G4VIS_USE_DAWN +#include "G4FukuiRenderer.hh" +#endif + +#ifdef G4VIS_USE_OPENGLX +#include "G4OpenGLImmediateX.hh" +#include "G4OpenGLStoredX.hh" +#endif + +#ifdef G4VIS_USE_OPENGLWIN32 +#include "G4OpenGLImmediateWin32.hh" +#include "G4OpenGLStoredWin32.hh" +#endif + +#ifdef G4VIS_USE_OPENGLXM +#include "G4OpenGLImmediateXm.hh" +#include "G4OpenGLStoredXm.hh" +#endif + +#ifdef G4VIS_USE_OIX +#include "G4OpenInventorX.hh" +#endif + +#ifdef G4VIS_USE_OIWIN32 +#include "G4OpenInventorWin32.hh" +#endif + +#ifdef G4VIS_USE_VRML +#include "G4VRML1.hh" +#include "G4VRML2.hh" +#endif + + + +LEMuSRVisManager::LEMuSRVisManager () {;} + +LEMuSRVisManager::~LEMuSRVisManager () {;} + +void LEMuSRVisManager::RegisterGraphicsSystems () { + + // Graphics Systems not needing external packages or libraries... + RegisterGraphicsSystem (new G4ASCIITree); + RegisterGraphicsSystem (new G4DAWNFILE); + RegisterGraphicsSystem (new G4GAGTree); + RegisterGraphicsSystem (new G4HepRepFile); + RegisterGraphicsSystem (new G4HepRep); + RegisterGraphicsSystem (new G4RayTracer); + RegisterGraphicsSystem (new G4VRML1File); + RegisterGraphicsSystem (new G4VRML2File); + + // Graphics systems needing external packages or libraries... + +#ifdef G4VIS_USE_DAWN + RegisterGraphicsSystem (new G4FukuiRenderer); +#endif + +#ifdef G4VIS_USE_OPENGLX + RegisterGraphicsSystem (new G4OpenGLImmediateX); + RegisterGraphicsSystem (new G4OpenGLStoredX); +#endif + +#ifdef G4VIS_USE_OPENGLWIN32 + RegisterGraphicsSystem (new G4OpenGLImmediateWin32); + RegisterGraphicsSystem (new G4OpenGLStoredWin32); +#endif + +#ifdef G4VIS_USE_OPENGLXM + RegisterGraphicsSystem (new G4OpenGLImmediateXm); + RegisterGraphicsSystem (new G4OpenGLStoredXm); +#endif + +#ifdef G4VIS_USE_OIX + RegisterGraphicsSystem (new G4OpenInventorX); +#endif + +#ifdef G4VIS_USE_OIWIN32 + RegisterGraphicsSystem (new G4OpenInventorWin32); +#endif + +#ifdef G4VIS_USE_VRML + RegisterGraphicsSystem (new G4VRML1); + RegisterGraphicsSystem (new G4VRML2); +#endif + + if (fVerbose > 0) { + G4cout << + "\nYou have successfully chosen to use the following graphics systems." + << G4endl; + PrintAvailableGraphicsSystems (); + } +} + +#endif + diff --git a/geant4/LEMuSR/src/LEMuSRdummydets.cc b/geant4/LEMuSR/src/LEMuSRdummydets.cc new file mode 100644 index 0000000..a3a38c6 --- /dev/null +++ b/geant4/LEMuSR/src/LEMuSRdummydets.cc @@ -0,0 +1,225 @@ +//§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§//* +// LOW ENERGY MUON SPIN RELAXATION, ROTATION, RADIATION +// +// ID : LEMuSRDetectorConstruction.cc , v 1.0 +// AUTHOR: Taofiq PARAISO +// DATE : 2004-06-24 16:33 +//§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§// +// +// & &&&&&&&&&& &&&&&&& &&&&&&&& +// & & && && & && +// & & & & & & && +// & &&&&&&& & & &&&&&& &&&&&&&& +// & & & && & & && +// & & && & & && && & & +// &&&&&&&&&& &&&&&&&&&& & &&&&& && &&&&&&& & && +// & +// & +// & +// & +// DETECTOR CONSTRUCTION +//§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§// + + +// G4 GEOMETRIC FORMS CLASSES + +#include "G4Tubs.hh" +#include "G4Box.hh" +#include "G4Trap.hh" +#include "G4Cons.hh" +#include "G4Sphere.hh" +#include "G4SubtractionSolid.hh" +#include "G4UnitsTable.hh" + +// G4 VOLUME DEFINITION CLASSES +#include "G4LogicalVolume.hh" +#include "G4VPhysicalVolume.hh" +#include "G4PVReplica.hh" +#include "G4PVPlacement.hh" +#include "G4GeometryManager.hh" +#include "G4FieldManager.hh" +#include "G4PropagatorInField.hh" +#include "LEMuSRMag_SpinEqRhs.hh" +#include "G4Mag_SpinEqRhs.hh" +#include "G4ChordFinder.hh" +#include "G4El_UsualEqRhs.hh" +#include "G4ClassicalRK4.hh" +#include "G4SimpleHeum.hh" +#include "G4SimpleRunge.hh" +#include "G4MagIntegratorStepper.hh" +#include "G4TransportationManager.hh" +#include "G4GeometryManager.hh" +#include "G4UnitsTable.hh" +//#include "G4RotationMatrix.hh" + +// G4 CLASSES +#include "G4ios.hh" +#include + + +// HEADER +#include "LEMuSRDetectorConstruction.hh" +#include "LEMuSRDetectorMessenger.hh" + + +// process remove +#include "G4ParticleTable.hh" +#include "G4ParticleDefinition.hh" +#include "G4ParticleChange.hh" +#include "G4ProcessVector.hh" +#include "G4ProcessManager.hh" +#include "G4VProcess.hh" + +// electric fieldmap +#include "LEMuSRElectricField.hh" +#include "LEMuSRElFieldMix.hh" +#include "G4ElectricField.hh" +#include "G4ElectroMagneticField.hh" +#include "G4EqMagElectricField.hh" + +//§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§// + + + +///§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§// +// DEFINE THE ASYMETRY DUMMY DETECTORS +//§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§// + +void LEMuSRDetectorConstruction::lemuAsym() +{ + + + // solids + Asym_tube = new G4Tubs("sAsym",0.*cm,1*cm,0.0000001*cm, dSPhi, dEPhi); + + G4Sphere *Asym_sphl = new G4Sphere("sphAsymL",25*cm,25.001*cm,0.*deg,360*deg,90*deg,90*deg); + G4Sphere *Asym_sphr = new G4Sphere("sphAsymR",25*cm,25.001*cm,0.*deg,360*deg,0*deg,90*deg); + + // logical volumes + lv_Asym = new G4LogicalVolume(Asym_tube,G4Material::GetMaterial("vacuum"),"lv_Asym",0,0,0); + + lv_AsymL = new G4LogicalVolume(Asym_sphl,G4Material::GetMaterial("vacuum"),"lv_AsymL",0,0,0); + lv_AsymR = new G4LogicalVolume(Asym_sphr,G4Material::GetMaterial("vacuum"),"lv_AsymR",0,0,0); + + // G4Translate3D trl =G4ThreeVector(+50.*cm,0.*cm,0.*cm); //uncomment + Asym_rotation = G4RotateY3D(90*deg); + + // G4Transform3D asymt3d= trl;//*Asym_rotation;//uncomment + // pv_Asym = new G4PVPlacement( asymt3d,lv_Asym,"pv_Asym1",lv_LABO, false, 0 );//uncomment + + // G4Translate3D trl2 =G4ThreeVector(-50.*cm,0.*cm,0.*cm);//uncomment + + // G4Transform3D asymt3d2= trl2*Asym_rotation;//uncomment + //pv_Asym2 = new G4PVPlacement( asymt3d2,lv_Asym,"pv_Asym2",lv_LABO, false, 0 );//uncomment + + pv_AsymL = new G4PVPlacement(Asym_rotation ,lv_AsymL,"pv_AsymL",lv_LABO, false, 0 ); + pv_AsymR = new G4PVPlacement(Asym_rotation ,lv_AsymR,"pv_AsymR",lv_LABO, false, 0 ); + + //visual attibutes + // lv_Asym->SetVisAttributes(VTBB_style); + + lv_AsymL->SetVisAttributes(Green_style); + lv_AsymR->SetVisAttributes(dRed_style); + + +} + + +//§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§// +// DEFINE THE ELECTRIC FIELD DUMMY DETECTORS +//§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§// +void LEMuSRDetectorConstruction::lemuFieldCheck() +{ + + // solids + fchk_tube = new G4Tubs("tube_fchk", 0., 6*cm, 0.001*mm, dSPhi, dEPhi); + + lv_fchk = new G4LogicalVolume(fchk_tube,G4Material::GetMaterial("vacuum"),"lv_fchk",0 ,0 ,0 ); + lv_fchk2 = new G4LogicalVolume(fchk_tube,G4Material::GetMaterial("vacuum"),"lv_fchk",0 ,0 ,0 ); + lv_fchk3 = new G4LogicalVolume(fchk_tube,G4Material::GetMaterial("vacuum"),"lv_fchk",0 ,0 ,0 ); + + + pv_fchk = new G4PVPlacement( 0,G4ThreeVector(0.*cm,0.*cm,0*cm),lv_fchk,"pv_f0",lv_L3VA, false, 0 ); + pv_fchk1 = new G4PVPlacement( 0,G4ThreeVector(0.*cm,0.*cm,-22*cm),lv_fchk,"pv_f1",lv_L3VA, false, 0 ); + /* pv_fchk2 = new G4PVPlacement( 0,G4ThreeVector(0.*cm,0.*cm, -21*cm),lv_fchk,"pv_f2",lv_L3VA, false, 0 ); + pv_fchk3 = new G4PVPlacement( 0,G4ThreeVector(0.*cm,0.*cm, -20*cm),lv_fchk,"pv_f3",lv_L3VA, false, 0 ); + pv_fchk4 = new G4PVPlacement( 0,G4ThreeVector(0.*cm,0.*cm, -19*cm),lv_fchk,"pv_f4",lv_L3VA, false, 0 ); + pv_fchk5 = new G4PVPlacement( 0,G4ThreeVector(0.*cm,0.*cm, -18*cm),lv_fchk,"pv_f5",lv_L3VA, false, 0 ); + pv_fchk6 = new G4PVPlacement( 0,G4ThreeVector(0.*cm,0.*cm, -17*cm),lv_fchk,"pv_f6",lv_L3VA, false, 0 ); + pv_fchk7 = new G4PVPlacement( 0,G4ThreeVector(0.*cm,0.*cm, -16*cm),lv_fchk,"pv_f7",lv_L3VA, false, 0 ); + pv_fchk8 = new G4PVPlacement( 0,G4ThreeVector(0.*cm,0.*cm, -15*cm),lv_fchk,"pv_f8",lv_L3VA, false, 0 ); + pv_fchk9 = new G4PVPlacement( 0,G4ThreeVector(0.*cm,0.*cm, -14*cm),lv_fchk,"pv_f9",lv_L3VA, false, 0 ); + pv_fchk10 = new G4PVPlacement( 0,G4ThreeVector(0.*cm,0.*cm, -13*cm),lv_fchk,"pv_f10",lv_L3VA, false, 0 ); + pv_fchk11 = new G4PVPlacement( 0,G4ThreeVector(0.*cm,0.*cm, -12*cm),lv_fchk,"pv_f11",lv_L3VA, false, 0 ); + pv_fchk12 = new G4PVPlacement( 0,G4ThreeVector(0.*cm,0.*cm, -11*cm),lv_fchk,"pv_f12",lv_L3VA, false, 0 ); + pv_fchk13 = new G4PVPlacement( 0,G4ThreeVector(0.*cm,0.*cm, -10*cm),lv_fchk,"pv_f13",lv_L3VA, false, 0 ); + pv_fchk14 = new G4PVPlacement( 0,G4ThreeVector(0.*cm,0.*cm, -9*cm),lv_fchk,"pv_f14",lv_L3VA, false, 0 ); + pv_fchk15 = new G4PVPlacement( 0,G4ThreeVector(0.*cm,0.*cm, -8*cm),lv_fchk,"pv_f15",lv_L3VA, false, 0 ); + pv_fchk16 = new G4PVPlacement( 0,G4ThreeVector(0.*cm,0.*cm, -7*cm),lv_fchk,"pv_f16",lv_L3VA, false, 0 ); + pv_fchk17 = new G4PVPlacement( 0,G4ThreeVector(0.*cm,0.*cm, -6*cm),lv_fchk,"pv_f17",lv_L3VA, false, 0 ); + pv_fchk18 = new G4PVPlacement( 0,G4ThreeVector(0.*cm,0.*cm, -5*cm),lv_fchk,"pv_f18",lv_L3VA, false, 0 ); + pv_fchk19 = new G4PVPlacement( 0,G4ThreeVector(0.*cm,0.*cm, -4*cm),lv_fchk,"pv_f19",lv_L3VA, false, 0 ); + pv_fchk20 = new G4PVPlacement( 0,G4ThreeVector(0.*cm,0.*cm, -3*cm),lv_fchk,"pv_f20",lv_L3VA, false, 0 ); + pv_fchk21 = new G4PVPlacement( 0,G4ThreeVector(0.*cm,0.*cm, -2*cm),lv_fchk,"pv_f21",lv_L3VA, false, 0 ); + pv_fchk22 = new G4PVPlacement( 0,G4ThreeVector(0.*cm,0.*cm, -1*cm),lv_fchk,"pv_f22",lv_L3VA, false, 0 ); + pv_fchk23 = new G4PVPlacement( 0,G4ThreeVector(0.*cm,0.*cm, +1*cm),lv_fchk,"pv_f23",lv_L3VA, false, 0 ); + pv_fchk24 = new G4PVPlacement( 0,G4ThreeVector(0.*cm,0.*cm, +2*cm),lv_fchk,"pv_f24",lv_L3VA, false, 0 ); + pv_fchk25 = new G4PVPlacement( 0,G4ThreeVector(0.*cm,0.*cm, +3*cm),lv_fchk,"pv_f25",lv_L3VA, false, 0 ); + pv_fchk26 = new G4PVPlacement( 0,G4ThreeVector(0.*cm,0.*cm, +4*cm),lv_fchk,"pv_f26",lv_L3VA, false, 0 ); + pv_fchk27 = new G4PVPlacement( 0,G4ThreeVector(0.*cm,0.*cm, +5*cm),lv_fchk,"pv_f27",lv_L3VA, false, 0 ); + pv_fchk28 = new G4PVPlacement( 0,G4ThreeVector(0.*cm,0.*cm, +6*cm),lv_fchk,"pv_f28",lv_L3VA, false, 0 ); + pv_fchk29 = new G4PVPlacement( 0,G4ThreeVector(0.*cm,0.*cm, +7*cm),lv_fchk,"pv_f29",lv_L3VA, false, 0 ); + pv_fchk30 = new G4PVPlacement( 0,G4ThreeVector(0.*cm,0.*cm, +8*cm),lv_fchk,"pv_f30",lv_L3VA, false, 0 ); + pv_fchk31 = new G4PVPlacement( 0,G4ThreeVector(0.*cm,0.*cm, +9*cm),lv_fchk,"pv_f31",lv_L3VA, false, 0 ); + pv_fchk32 = new G4PVPlacement( 0,G4ThreeVector(0.*cm,0.*cm, +10*cm),lv_fchk,"pv_f32",lv_L3VA, false, 0 ); + pv_fchk33 = new G4PVPlacement( 0,G4ThreeVector(0.*cm,0.*cm, +11*cm),lv_fchk,"pv_f33",lv_L3VA, false, 0 ); + pv_fchk34 = new G4PVPlacement( 0,G4ThreeVector(0.*cm,0.*cm, +12*cm),lv_fchk,"pv_f34",lv_L3VA, false, 0 ); + pv_fchk35 = new G4PVPlacement( 0,G4ThreeVector(0.*cm,0.*cm, +13*cm),lv_fchk,"pv_f35",lv_L3VA, false, 0 ); + pv_fchk36 = new G4PVPlacement( 0,G4ThreeVector(0.*cm,0.*cm, +14*cm),lv_fchk,"pv_f36",lv_L3VA, false, 0 ); + pv_fchk37 = new G4PVPlacement( 0,G4ThreeVector(0.*cm,0.*cm, +15*cm),lv_fchk,"pv_f37",lv_L3VA, false, 0 ); + pv_fchk38 = new G4PVPlacement( 0,G4ThreeVector(0.*cm,0.*cm, +16*cm),lv_fchk,"pv_f38",lv_L3VA, false, 0 ); + pv_fchk39 = new G4PVPlacement( 0,G4ThreeVector(0.*cm,0.*cm, +17*cm),lv_fchk,"pv_f39",lv_L3VA, false, 0 ); + pv_fchk40 = new G4PVPlacement( 0,G4ThreeVector(0.*cm,0.*cm, +18*cm),lv_fchk,"pv_f40",lv_L3VA, false, 0 ); + pv_fchk41 = new G4PVPlacement( 0,G4ThreeVector(0.*cm,0.*cm, +19*cm),lv_fchk,"pv_f41",lv_L3VA, false, 0 ); + pv_fchk42 = new G4PVPlacement( 0,G4ThreeVector(0.*cm,0.*cm, +20*cm),lv_fchk,"pv_f42",lv_L3VA, false, 0 ); + pv_fchk43 = new G4PVPlacement( 0,G4ThreeVector(0.*cm,0.*cm, +21*cm),lv_fchk,"pv_f43",lv_L3VA, false, 0 ); */ + pv_fchk44 = new G4PVPlacement( 0,G4ThreeVector(0.*cm,0.*cm, +21.5*cm),lv_fchk,"pv_f44",lv_L3VA, false, 0 ); + +#ifndef LEMU_TEST_FOCAL_LENGTH + // use another lv_fchk because belong to another mother volume + pv_fchk45 = new G4PVPlacement( 0,G4ThreeVector(0.*cm,0.*cm,(-8-25.45)*cm),lv_fchk2,"pv_f45",lv_RAV, false, 0 ); + pv_fchk46 = new G4PVPlacement( 0,G4ThreeVector(0.*cm,0.*cm,(-7-25.45)*cm),lv_fchk2,"pv_f46",lv_RAV, false, 0 ); + pv_fchk47 = new G4PVPlacement( 0,G4ThreeVector(0.*cm,0.*cm,(-5-25.45)*cm),lv_fchk2,"pv_f47",lv_RAV, false, 0 ); + pv_fchk48 = new G4PVPlacement( 0,G4ThreeVector(0.*cm,0.*cm,(-2.5-25.45)*cm),lv_fchk2,"pv_f48",lv_RAV, false, 0 ); + pv_fchk49 = new G4PVPlacement( 0,G4ThreeVector(0.*cm,0.*cm,(0-25.45)*cm),lv_fchk2,"pv_f49",lv_RAV, false, 0 ); + pv_fchk50 = new G4PVPlacement( 0,G4ThreeVector(0.*cm,0.*cm,(2.5-25.45)*cm),lv_fchk2,"pv_f50",lv_RAV, false, 0 ); + pv_fchk51 = new G4PVPlacement( 0,G4ThreeVector(0.*cm,0.*cm,(5-25.45)*cm),lv_fchk2,"pv_f51",lv_RAV, false, 0 ); + pv_fchk52 = new G4PVPlacement( 0,G4ThreeVector(0.*cm,0.*cm,(7-25.45)*cm),lv_fchk2,"pv_f52",lv_RAV, false, 0 ); + pv_fchk53 = new G4PVPlacement( 0,G4ThreeVector(0.*cm,0.*cm,(9-25.45)*cm),lv_fchk2,"pv_f53",lv_RAV, false, 0 ); + + + + + // use another lv_fchk because belong to another mother volume + pv_fchk54 = new G4PVPlacement( 0,G4ThreeVector(0.*cm,0.*cm,-16*cm),lv_fchk3,"pv_f54",lv_MCPV, false, 0 ); + pv_fchk55 = new G4PVPlacement( 0,G4ThreeVector(0.*cm,0.*cm,-15*cm),lv_fchk3,"pv_f55",lv_MCPV, false, 0 ); + pv_fchk56 = new G4PVPlacement( 0,G4ThreeVector(0.*cm,0.*cm,-14*cm),lv_fchk3,"pv_f56",lv_MCPV, false, 0 ); + pv_fchk57 = new G4PVPlacement( 0,G4ThreeVector(0.*cm,0.*cm,-13*cm),lv_fchk3,"pv_f57",lv_MCPV, false, 0 ); + pv_fchk58 = new G4PVPlacement( 0,G4ThreeVector(0.*cm,0.*cm,-12*cm),lv_fchk3,"pv_f58",lv_MCPV, false, 0 ); + pv_fchk59 = new G4PVPlacement( 0,G4ThreeVector(0.*cm,0.*cm,-11*cm),lv_fchk3,"pv_f59",lv_MCPV, false, 0 ); + pv_fchk60 = new G4PVPlacement( 0,G4ThreeVector(0.*cm,0.*cm,-10*cm),lv_fchk3,"pv_f60",lv_MCPV, false, 0 ); + pv_fchk61 = new G4PVPlacement( 0,G4ThreeVector(0.*cm,0.*cm,-9*cm),lv_fchk3,"pv_f61",lv_MCPV, false, 0 ); + pv_fchk62 = new G4PVPlacement( 0,G4ThreeVector(0.*cm,0.*cm, -8*cm),lv_fchk3,"pv_f62",lv_MCPV, false, 0 ); + + pv_fchk64 = new G4PVPlacement( 0,G4ThreeVector(0.*cm,0.*cm,-7*cm),lv_fchk3,"pv_f64",lv_MCPV, false, 0 ); + pv_fchk65 = new G4PVPlacement( 0,G4ThreeVector(0.*cm,0.*cm,-6*cm),lv_fchk3,"pv_f65",lv_MCPV, false, 0 ); + pv_fchk66 = new G4PVPlacement( 0,G4ThreeVector(0.*cm,0.*cm,-5*cm),lv_fchk3,"pv_f66",lv_MCPV, false, 0 ); + pv_fchk67 = new G4PVPlacement( 0,G4ThreeVector(0.*cm,0.*cm,-4*cm),lv_fchk3,"pv_f67",lv_MCPV, false, 0 ); + pv_fchk68 = new G4PVPlacement( 0,G4ThreeVector(0.*cm,0.*cm,-3*cm),lv_fchk3,"pv_f68",lv_MCPV, false, 0 ); + pv_fchk69 = new G4PVPlacement( 0,G4ThreeVector(0.*cm,0.*cm,-2*cm),lv_fchk3,"pv_f69",lv_MCPV, false, 0 ); + pv_fchk70 = new G4PVPlacement( 0,G4ThreeVector(0.*cm,0.*cm,+1.75*cm),lv_fchk3,"pv_f70",lv_MCPV, false, 0 ); + +#endif + + +} diff --git a/geant4/LEMuSR/src/PhysicsList.cc b/geant4/LEMuSR/src/PhysicsList.cc new file mode 100644 index 0000000..164ba64 --- /dev/null +++ b/geant4/LEMuSR/src/PhysicsList.cc @@ -0,0 +1,103 @@ +#include "PhysicsList.hh" + +#include "globals.hh" +#include "G4ParticleDefinition.hh" +#include "G4ParticleTypes.hh" +#include "G4ParticleTable.hh" + +#include "G4Material.hh" +#include "G4MaterialTable.hh" + +#include "G4ProcessManager.hh" +#include "G4ProcessVector.hh" + +#include "G4DecayTable.hh" + +#include "G4MuonDecayChannelWithSpin.hh" + +PhysicsList::PhysicsList() +{} + +PhysicsList::~PhysicsList() +{} + +void PhysicsList::ConstructParticle() +{ + G4Electron::ElectronDefinition(); + G4Positron::PositronDefinition(); + G4NeutrinoE::NeutrinoEDefinition(); + G4AntiNeutrinoE::AntiNeutrinoEDefinition(); + G4MuonPlus::MuonPlusDefinition(); + G4MuonMinus::MuonMinusDefinition(); + G4NeutrinoMu::NeutrinoMuDefinition(); + G4AntiNeutrinoMu::AntiNeutrinoMuDefinition(); + + G4DecayTable* MuonPlusDecayTable = new G4DecayTable(); + MuonPlusDecayTable -> Insert(new G4MuonDecayChannelWithSpin("mu+",1.00)); + G4MuonPlus::MuonPlusDefinition() -> SetDecayTable(MuonPlusDecayTable); + + G4DecayTable* MuonMinusDecayTable = new G4DecayTable(); + MuonMinusDecayTable -> Insert(new G4MuonDecayChannelWithSpin("mu-",1.00)); + G4MuonMinus::MuonMinusDefinition() -> SetDecayTable(MuonMinusDecayTable); + +} + +void PhysicsList::ConstructProcess() +{ + // Define transportation process + + AddTransportation(); + + theDecayProcess = new G4DecayWithSpin(); + + G4ProcessManager* pManager; + theParticleIterator->reset(); + while( (*theParticleIterator)() ){ + G4ParticleDefinition* particle = theParticleIterator->value(); + pManager = particle->GetProcessManager(); + + if (theDecayProcess->IsApplicable(*particle)) { + pManager->AddProcess(theDecayProcess); + pManager ->SetProcessOrderingToLast(theDecayProcess, idxAtRest); + } + } + + theMuPlusIonisation = new G4MuIonisation(); + theMuPlusMultipleScattering = new G4MultipleScattering(); + theMuPlusBremsstrahlung=new G4MuBremsstrahlung(); + theMuPlusPairProduction= new G4MuPairProduction(); + + theMuMinusIonisation = new G4MuIonisation(); + theMuMinusMultipleScattering = new G4MultipleScattering; + theMuMinusBremsstrahlung = new G4MuBremsstrahlung(); + theMuMinusPairProduction = new G4MuPairProduction(); + + // Muon Plus Physics + pManager = G4MuonPlus::MuonPlus()->GetProcessManager(); + pManager->AddProcess(theMuPlusMultipleScattering,-1, 1, 1); + pManager->AddProcess(theMuPlusIonisation, -1, 2, 2); + pManager->AddProcess(theMuPlusBremsstrahlung, -1, 3, 3); + pManager->AddProcess(theMuPlusPairProduction, -1, 4, 4); + + // Muon Minus Physics + pManager = G4MuonMinus::MuonMinus()->GetProcessManager(); + pManager->AddProcess(theMuMinusMultipleScattering,-1, 1, 1); + pManager->AddProcess(theMuMinusIonisation, -1, 2, 2); + pManager->AddProcess(theMuMinusBremsstrahlung, -1, 3, 3); + pManager->AddProcess(theMuMinusPairProduction, -1, 4, 4); + +} + +void PhysicsList::SetCuts() +{ + // suppress error messages even in case e/gamma/proton do not exist + G4int temp = GetVerboseLevel(); + SetVerboseLevel(0); + + // " G4VUserPhysicsList::SetCutsWithDefault" method sets + // the default cut value for all particle types + SetCutsWithDefault(); + + // Retrieve verbose level + SetVerboseLevel(temp); +} diff --git a/geant4/LEMuSR/src/TDCheck.cc b/geant4/LEMuSR/src/TDCheck.cc new file mode 100644 index 0000000..9156f4e --- /dev/null +++ b/geant4/LEMuSR/src/TDCheck.cc @@ -0,0 +1,256 @@ +///§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§//* +// LOW ENERGY MUON SPIN RELAXATION, ROTATION, RADIATION +// +// ID :TDCheck.cc , v 1.2 +// AUTHOR: Taofiq PARAISO +// DATE : 2005-03-01 10:07 +//§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§// +// +// & &&&&&&&&&& &&&&&&& &&&&&&&& +// & & && && & && +// & & & & & & && +// & &&&&&&& & & &&&&&& &&&&&&&& +// & & & && & & && +// & & && & & && && & & +// &&&&&&&&&& &&&&&&&&&& & &&&&& && &&&&&&& & && +// & +// & +// & +// & +// TDCHECK +//§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§// +#include "TDCheck.hh" + +#include "G4SteppingManager.hh" +#include "G4Transform3D.hh" +#include "G4DynamicParticle.hh" +#include "G4UnitsTable.hh" + + +#include "LEMuSRDetectorConstruction.hh" +#include "LEMuSRPrimaryGeneratorAction.hh" + + +TDCheck::TDCheck() +{ + + BookRoot(); + muon.thickness=0; + pointer=this ; + loop=0; + oldz=0; + thk_old=0; + id=0; + old_id=0; + loop=0; +} + + +TDCheck::~TDCheck() +{ + WriteRoot(); +} + +TDCheck* TDCheck::pointer=0; +TDCheck* TDCheck::GetInstance() +{ + return pointer; +} + + +void TDCheck::UserSteppingAction(const G4Step* aStep) + +{ + + if( aStep->GetPreStepPoint()&& aStep->GetPreStepPoint()->GetPhysicalVolume() ) + { + SetParticleVolumeNames(aStep); + + if(CheckCondition(aStep)) + { + // Get datas + SetPositionMomentum(aStep); + SetTimeEnergy(aStep); + Update(); + FillRoot(); +#if defined G4UI_USE_ROOT + myFile->Write(); +#endif + } + + + LoopKiller(aStep); + + } + +} + + +G4bool TDCheck::CheckCondition(const G4Step* ) +{ + G4bool condition=false; + + if(v_name=="lv_CFOIL" ) + { + if(p_name=="Mu" || p_name == "mu+") + { + condition=true; + } + } + + if(v_name=="lv_SAH2" ) + { + if(p_name=="Mu" || p_name == "mu+") + { + condition=true; + } + } + + return condition; + +} + + +void TDCheck::LoopKiller(const G4Step *aStep) +{ + // loop killa + if(aStep->GetStepLength()<0.1*mm) + { + loop++; + if(loop>20) + { + aStep->GetTrack()->SetTrackStatus(fStopAndKill); + loop=0; + } + } + + // kill useless particles + if(aStep->GetTrack()->GetDefinition()->GetParticleName()=="e-" + ||aStep->GetTrack()->GetDefinition()->GetParticleName()=="gamma") + { + // if(aStep->GetTrack()->GetKineticEnergy()<10.*eV) + // { + aStep->GetTrack()->SetTrackStatus(fStopAndKill); + // } + } + +} + + + + +void TDCheck::SetParticleVolumeNames(const G4Step* aStep) +{ + // NAMES + p_name = aStep->GetTrack()->GetDefinition()->GetParticleName(); // particle name + v_name = aStep->GetPreStepPoint()->GetPhysicalVolume()->GetLogicalVolume()->GetName(); + pv_name = aStep->GetPreStepPoint()->GetPhysicalVolume()->GetName(); +} + + +void TDCheck::SetPositionMomentum(const G4Step* aStep) +{ + // POSITION, MOMENTUM + position = aStep->GetPreStepPoint()->GetPosition(); // position + momentum = aStep->GetPostStepPoint()->GetMomentumDirection(); // momentum + momentum_direction = aStep->GetPreStepPoint()->GetMomentumDirection(); // momentum + +} + + +void TDCheck::SetTimeEnergy(const G4Step* aStep) +{ + + // ENERGY + kenergy= aStep->GetTrack()->GetDynamicParticle()->GetKineticEnergy(); // position + + tenergy= aStep->GetTrack()->GetDynamicParticle()->GetTotalEnergy(); // position + + // TIME + localtime = (aStep->GetPreStepPoint()->GetLocalTime()+ aStep->GetPreStepPoint()->GetLocalTime())/2.; // time since track creation + globaltime = aStep->GetPreStepPoint()->GetGlobalTime();// time since event creation + proptime = aStep->GetPreStepPoint()->GetProperTime(); // proper time of the particle + time = proptime; + +} + +void TDCheck::Update() +{ + muon.localtime = localtime/ns ; + muon.globaltime= globaltime/ns ; + muon.proptime = proptime/ns ; + + muon.positionx = LEMuSRPrimaryGeneratorAction::GetPGA()->X/cm; // position.x()/cm; + muon.positiony = LEMuSRPrimaryGeneratorAction::GetPGA()->Y/cm; //position.y()/cm; + muon.positionz = position.z()/cm; + + muon.momdirx= LEMuSRPrimaryGeneratorAction::GetPGA()->angle/rad;//momentum_direction.x(); + muon.momdiry= LEMuSRPrimaryGeneratorAction::GetPGA()->radius/cm; //momentum_direction.y(); + muon.momdirz= momentum_direction.z(); + + muon.tenergy = kenergy/keV; + muon.thickness = LEMuSRDetectorConstruction::GetInstance()->cfthk; + + muon.angle=0; + + + muon.index=0; + muon.ienergy= LEMuSRPrimaryGeneratorAction::GetPGA()->energy/keV; + + muon.angle=acos(momentum.z())*180/M_PI; + + ///////////////// + /* + G4cout << "particle name : " << p_name <<" ;\n " + << "position : " << position <<" ;\n " + << "momentum direction: " <GetCurrentRun()->GetRunID()!=old_id) + { + id=id+1; + old_id= G4RunManager::GetRunManager()->GetCurrentRun()->GetRunID(); + } + + if( LEMuSRDetectorConstruction::GetInstance()->cfthk!=thk_old) + { + id=0; + thk_old=LEMuSRDetectorConstruction::GetInstance()->cfthk; + } + muon.id = G4RunManager::GetRunManager()->GetCurrentRun()->GetRunID(); + + if(p_name=="Mu") muon.charge=0; + else if(p_name=="mu+") muon.charge=1; + + +} + + +//--------------------------------------------------------------------------------// +// ROOT + +void TDCheck::BookRoot() +{ + myFile = new TFile("gfoil.root", "RECREATE"); + + tree = new TTree ("tree","Muons parameters"); + + tree->Branch("muon",&muon.ienergy,"Init_Energy/F:kenergy/F:localtime/F:globaltime:propertime/F:positionx/F:positiony:positionz:init_angle:init_radius:momdirz:Angle/F:Plane/I:foil_thickness/F:runID/I:Charge/I"); + +} + + +void TDCheck::FillRoot() +{ + tree->Fill(); +} + +void TDCheck::WriteRoot() +{ + myFile->Write(); + myFile->Close(); + +} diff --git a/geant4/LEMuSR/src/meyer.cc b/geant4/LEMuSR/src/meyer.cc new file mode 100644 index 0000000..bf29433 --- /dev/null +++ b/geant4/LEMuSR/src/meyer.cc @@ -0,0 +1,1013 @@ +/* + fIRST IMPLEMENTATION BY ANLSEM,H. IN FORTRAN + C++ CONVERSION T.K.PARAISO 04-2005 + + !!! IMPORTANT !!! + + Notice: + Tables definition changes between FORTRAN and C++: + 1/ Fortran indices start at 1 and C++ indices start at 0 + 2/ Tables are defined as table[column][row] in Fortran + table[row][column] in c++ + + usefull reference + http://gershwin.ens.fr/vdaniel/Doc-Locale/Langages-Program-Scientific/Fortran/Tutorial/arrays.htm + +*/ + +#include "meyer.h" +#include +#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("testmeyer.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 = "< +#include +#include +#include + +/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + Die Funktion sowie die Parameter sind uebernommen aus: + + M.Gonin, R.Kallenbach, P.Bochsler: 'Charge exchange of hydrogen atoms + in carbon foils at 0.4 - 120 keV', Rev.Sci.Instrum. 65 (3), March 1994 + + +fIRST IMPLEMENTATION BY ANLSEM,H. IN FORTRAN +C++ CONVERSION T.K.PARAISO 04-2005 +c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ + +Yields::Yields(){;} +Yields::~Yields(){;} + +void Yields::GetYields( + double E, // kinetische Energie in keV + double masse,// in keV / c**2 + double yvector[3])// pointer to yields table +{ + + // YIELDS FUNCTIONS PRAMETERS + double a_zero,a_minus; + double k_Fermi,k_zero,k_minus; + double zwo_k_Fermi; + double k_Fermi_Quad,k_zero_Quad,k_minus_Quad; + double vc_minus,vc_plus,v_Bohr,v_rel; + + + // YIELDS FUNCTIONS PARAMETERs VALUES + a_zero = 0.953 ; + a_minus = 0.029 ; + k_Fermi = 1.178 ;// ! [v_Bohr] + k_Fermi_Quad = k_Fermi * k_Fermi ; + zwo_k_Fermi = 2. * k_Fermi ; + k_zero = 0.991*k_Fermi ; //! [v_Bohr] + k_zero_Quad = k_zero * k_zero ; + k_minus = 0.989*k_Fermi ; // [v_Bohr] + k_minus_Quad = k_minus * k_minus ; + vc_minus = 0.284 ; + vc_plus = 0.193 ; // [v_Bohr] + v_Bohr = 7.2974E-3 ; // [c] + + + + // std::cout<< "E = "<< E < ABORT!"< exp(-vc_minus/v_rel)) Yield_minus=exp(-vc_minus/v_rel); + if(Yield_plus > exp(-vc_plus/v_rel)) Yield_plus=exp(-vc_plus/v_rel); + + Yield_zero = 1. - (Yield_minus + Yield_plus); + + yvector[0]=Yield_plus; + yvector[1]=Yield_zero; + yvector[2]=Yield_minus; + + // std::cout<<"Y+ : " << Yield_plus << std::endl; + // std::cout<<"Y0 : " << Yield_zero << std::endl; + + + +} + diff --git a/geant4/LEMuSR/stepping.sh b/geant4/LEMuSR/stepping.sh new file mode 100644 index 0000000..0d3b33a --- /dev/null +++ b/geant4/LEMuSR/stepping.sh @@ -0,0 +1,11 @@ +export ASYM_USE_LEMU=1 + +unset LEMU_TEST_CFOIL +unset LEMU_TEST_FIELD +unset LEMU_TEST_FOCAL_LENGTH +unset LEMU_TEST_ASYM + + +rm ~/geant4/tmp/Linux-g++/LEMuSR/exe/* +rm ~/geant4/tmp/Linux-g++/LEMuSR/LEMuSRDetectorConstruction.* +rm ~/geant4/tmp/Linux-g++/LEMuSR/LEMuSRPrimaryGeneratorAction.* diff --git a/geant4/LEMuSR/td.sh b/geant4/LEMuSR/td.sh new file mode 100644 index 0000000..7283dcb --- /dev/null +++ b/geant4/LEMuSR/td.sh @@ -0,0 +1,11 @@ +export ASYM_USE_LEMU=1 + +export LEMU_TEST_CFOIL=1 +unset LEMU_TEST_FIELD +unset LEMU_TEST_FOCAL_LENGTH +unset LEMU_TEST_ASYM + + +rm ~/geant4/tmp/Linux-g++/LEMuSR/exe/* +rm ~/geant4/tmp/Linux-g++/LEMuSR/LEMuSRDetectorConstruction.* +rm ~/geant4/tmp/Linux-g++/LEMuSR/LEMuSRPrimaryGeneratorAction.*