711{
712
713
714
715
716 G4PiNuclearCrossSection* piNucCS = new G4PiNuclearCrossSection();
717
718 theParticleIterator->reset();
719 while( (*theParticleIterator)() ){
720 G4ParticleDefinition* particle = theParticleIterator->value();
721 G4ProcessManager* pmanager = particle->GetProcessManager();
722 G4String particleName = particle->GetParticleName();
723
724
725
726 if (particleName == "pi+") {
727
728
729 G4HadronElasticProcess *process = new G4HadronElasticProcess();
730 G4LElastic *model = new G4LElastic();
731 process->RegisterMe(model);
732 pmanager->AddDiscreteProcess(process);
733
734
735
736 G4PionPlusInelasticProcess *inel_process = new
737G4PionPlusInelasticProcess();
738 inel_process->AddDataSet(piNucCS);
739 inel_process->RegisterMe(bertini_model);
740 pmanager->AddDiscreteProcess(inel_process);
741
742
743
744
745
746 } else if (particleName == "pi-") {
747
748
749 G4HadronElasticProcess *process = new G4HadronElasticProcess();
750 G4LElastic *model = new G4LElastic();
751 process->RegisterMe(model);
752 pmanager->AddDiscreteProcess(process);
753
754
755
756 G4PionMinusInelasticProcess *inel_process = new
757G4PionMinusInelasticProcess();
758 inel_process->AddDataSet(piNucCS);
759 inel_process->RegisterMe(bertini_model);
760 pmanager->AddDiscreteProcess(inel_process);
761
762
763
764
765
766 } else if (particleName == "kaon+") {
767
768
769 G4HadronElasticProcess *process = new G4HadronElasticProcess();
770 G4LElastic *model = new G4LElastic();
771 process->RegisterMe(model);
772 pmanager->AddDiscreteProcess(process);
773
774
775
776 G4KaonPlusInelasticProcess* inel_process = new
777G4KaonPlusInelasticProcess();
778 inel_process->RegisterMe(bertini_model);
779 pmanager->AddDiscreteProcess(inel_process);
780
781
782
783
784
785 } else if (particleName == "kaon-") {
786
787
788 G4HadronElasticProcess *process = new G4HadronElasticProcess();
789 G4LElastic *model = new G4LElastic();
790 process->RegisterMe(model);
791 pmanager->AddDiscreteProcess(process);
792
793
794
795 G4KaonMinusInelasticProcess* inel_process = new
796G4KaonMinusInelasticProcess();
797 inel_process->RegisterMe(bertini_model);
798 pmanager->AddDiscreteProcess(inel_process);
799
800
801
802
803
804 } else if (particleName == "kaon0L") {
805
806
807 G4HadronElasticProcess *process = new G4HadronElasticProcess();
808 G4LElastic *model = new G4LElastic();
809 process->RegisterMe(model);
810 pmanager->AddDiscreteProcess(process);
811
812
813
814 G4KaonZeroLInelasticProcess* inel_process = new
815G4KaonZeroLInelasticProcess();
816 inel_process->RegisterMe(bertini_model);
817 pmanager->AddDiscreteProcess(inel_process);
818
819
820
821
822
823 } else if (particleName == "kaon0S") {
824
825
826 G4HadronElasticProcess *process = new G4HadronElasticProcess();
827 G4LElastic *model = new G4LElastic();
828 process->RegisterMe(model);
829 pmanager->AddDiscreteProcess(process);
830
831
832
833 G4KaonZeroSInelasticProcess* inel_process =
834 new G4KaonZeroSInelasticProcess();
835 inel_process->RegisterMe(bertini_model);
836 pmanager->AddDiscreteProcess(inel_process);
837
838
839
840
841
842 } else if (particleName == "proton") {
843
844
845 G4HadronElasticProcess *process = new G4HadronElasticProcess();
846 G4LElastic *model = new G4LElastic();
847 process->RegisterMe(model);
848 pmanager->AddDiscreteProcess(process);
849
850
851
852 G4ProtonInelasticProcess *inel_process = new
853G4ProtonInelasticProcess();
854 inel_process->RegisterMe(bertini_model);
855 pmanager->AddDiscreteProcess(inel_process);
856
857
858
859
860
861 } else if (particleName == "anti_proton") {
862
863
864 G4HadronElasticProcess *process = new G4HadronElasticProcess();
865 G4LElastic *model = new G4LElastic();
866 process->RegisterMe(model);
867 pmanager->AddDiscreteProcess(process);
868
869
870
871 G4AntiProtonInelasticProcess *inel_process =
872 new G4AntiProtonInelasticProcess();
873 G4LEAntiProtonInelastic *inel_model = new G4LEAntiProtonInelastic();
874 inel_process->RegisterMe(inel_model);
875 pmanager->AddDiscreteProcess(inel_process);
876
877
878
879
880
881 } else if (particleName == "neutron") {
882
883
884 if(1){
885 G4cout << "High precision neutron models chosen" << G4endl;
886
887 putenv("G4NEUTRONHPDATA=/afs/ihep.ac.cn/bes3/offline/sw/packages/geant4/4.9.0/slc4_ia32_gcc346/geant4.9.0.p01/data/G4NDL3.11/");
888
889
890 G4HadronElasticProcess* el_process = new G4HadronElasticProcess();
891
892
893 G4NeutronHPElastic* hpel_model = new G4NeutronHPElastic();
894 G4NeutronHPElasticData* el_data = new G4NeutronHPElasticData();
895 el_process->AddDataSet(el_data);
896 el_process->RegisterMe(hpel_model);
897
898
899 G4LElastic* el_model = new G4LElastic();
900 el_model->SetMinEnergy(19.9*MeV);
901 el_process->RegisterMe(el_model);
902
903 pmanager->AddDiscreteProcess(el_process);
904
905
906
907
908 G4NeutronInelasticProcess* inel_process =
909 new G4NeutronInelasticProcess();
910
911
912 G4NeutronHPInelastic* hpinel_model = new G4NeutronHPInelastic();
913 G4NeutronHPInelasticData* hpinel_data = new
914G4NeutronHPInelasticData();
915 inel_process->AddDataSet(hpinel_data);
916 inel_process->RegisterMe(hpinel_model);
917
918
919 G4CascadeInterface* neutron_bertini = new G4CascadeInterface;
920 neutron_bertini->SetMinEnergy(19.9*MeV);
921 inel_process->RegisterMe(neutron_bertini);
922
923 pmanager->AddDiscreteProcess(inel_process);
924
925
926
927
928 G4HadronCaptureProcess* cap_process = new G4HadronCaptureProcess();
929
930
931 G4NeutronHPCapture* hpcap_model = new G4NeutronHPCapture();
932 G4NeutronHPCaptureData* hpcap_data = new G4NeutronHPCaptureData();
933 cap_process->AddDataSet(hpcap_data);
934 cap_process->RegisterMe(hpcap_model);
935
936
937
938 G4LCapture* cap_model = new G4LCapture();
939 cap_model->SetMinEnergy(19.9*MeV);
940 cap_process->RegisterMe(cap_model);
941
942 pmanager->AddDiscreteProcess(cap_process);
943
944
945
946
947
948 G4HadronFissionProcess* fis_process = new G4HadronFissionProcess();
949
950
951 G4NeutronHPFission* hpfis_model = new G4NeutronHPFission();
952 G4NeutronHPFissionData* hpfis_data = new G4NeutronHPFissionData();
953 fis_process->AddDataSet(hpfis_data);
954 fis_process->RegisterMe(hpfis_model);
955
956
957
958 G4LFission* fis_model = new G4LFission();
959 fis_model->SetMinEnergy(19.9*MeV);
960 fis_process->RegisterMe(fis_model);
961
962 pmanager->AddDiscreteProcess(fis_process);
963
964
965
966
967 } else {
968
969
970 G4HadronElasticProcess *process = new G4HadronElasticProcess();
971 G4LElastic *model = new G4LElastic();
972 process->RegisterMe(model);
973 pmanager->AddDiscreteProcess(process);
974
975
976 G4NeutronInelasticProcess *inel_process =
977 new G4NeutronInelasticProcess();
978 inel_process->RegisterMe(bertini_model);
979 pmanager->AddDiscreteProcess(inel_process);
980
981
982 }
983
984
985
986 } else if (particleName == "anti_neutron") {
987
988
989 G4HadronElasticProcess *process = new G4HadronElasticProcess();
990 G4LElastic *model = new G4LElastic();
991 process->RegisterMe(model);
992 pmanager->AddDiscreteProcess(process);
993
994
995
996 G4AntiNeutronInelasticProcess *inel_process =
997 new G4AntiNeutronInelasticProcess();
998 G4LEAntiNeutronInelastic *inel_model = new G4LEAntiNeutronInelastic();
999 inel_process->RegisterMe(inel_model);
1000 pmanager->AddDiscreteProcess(inel_process);
1001
1002
1003
1004
1005
1006 } else if (particleName == "lambda") {
1007
1008
1009 G4HadronElasticProcess *process = new G4HadronElasticProcess();
1010 G4LElastic *model = new G4LElastic();
1011 process->RegisterMe(model);
1012 pmanager->AddDiscreteProcess(process);
1013
1014
1015
1016 G4LambdaInelasticProcess* inel_process = new
1017G4LambdaInelasticProcess();
1018 inel_process->RegisterMe(bertini_model);
1019 pmanager->AddDiscreteProcess(inel_process);
1020
1021
1022
1023
1024
1025 } else if (particleName == "anti_lambda") {
1026
1027
1028 G4HadronElasticProcess *process = new G4HadronElasticProcess();
1029 G4LElastic *model = new G4LElastic();
1030 process->RegisterMe(model);
1031 pmanager->AddDiscreteProcess(process);
1032
1033
1034
1035 G4AntiLambdaInelasticProcess *inel_process =
1036 new G4AntiLambdaInelasticProcess();
1037 G4LEAntiLambdaInelastic *inel_model = new G4LEAntiLambdaInelastic();
1038 inel_process->RegisterMe(inel_model);
1039 pmanager->AddDiscreteProcess(inel_process);
1040
1041
1042
1043
1044
1045 } else if (particleName == "deuteron") {
1046
1047
1048 G4HadronElasticProcess *process = new G4HadronElasticProcess();
1049 G4LElastic *model = new G4LElastic();
1050 process->RegisterMe(model);
1051 pmanager->AddDiscreteProcess(process);
1052
1053
1054
1055 G4DeuteronInelasticProcess *inel_process =
1056 new G4DeuteronInelasticProcess();
1057 G4LEDeuteronInelastic *inel_model = new G4LEDeuteronInelastic();
1058 inel_process->RegisterMe(inel_model);
1059 pmanager->AddDiscreteProcess(inel_process);
1060
1061
1062
1063
1064
1065 } else if (particleName == "triton") {
1066
1067
1068 G4HadronElasticProcess *process = new G4HadronElasticProcess();
1069 G4LElastic *model = new G4LElastic();
1070 process->RegisterMe(model);
1071 pmanager->AddDiscreteProcess(process);
1072
1073
1074
1075 G4TritonInelasticProcess *inel_process =
1076 new G4TritonInelasticProcess();
1077 G4LETritonInelastic *inel_model = new G4LETritonInelastic();
1078 inel_process->RegisterMe(inel_model);
1079 pmanager->AddDiscreteProcess(inel_process);
1080
1081
1082
1083
1084
1085 } else if (particleName == "alpha") {
1086
1087
1088 G4HadronElasticProcess *process = new G4HadronElasticProcess();
1089 G4LElastic *model = new G4LElastic();
1090 process->RegisterMe(model);
1091 pmanager->AddDiscreteProcess(process);
1092
1093
1094
1095 G4AlphaInelasticProcess *inel_process = new G4AlphaInelasticProcess();
1096 G4LEAlphaInelastic *inel_model = new G4LEAlphaInelastic();
1097 inel_process->RegisterMe(inel_model);
1098 pmanager->AddDiscreteProcess(inel_process);
1099
1100
1101 }
1102 }
1103}