File indexing completed on 2026-04-10 07:50:27
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040
0041
0042
0043
0044
0045
0046
0047
0048
0049
0050
0051
0052
0053
0054
0055
0056
0057
0058
0059
0060
0061
0062
0063
0064
0065
0066
0067
0068
0069
0070
0071
0072
0073
0074
0075
0076
0077
0078
0079
0080
0081
0082
0083
0084
0085
0086
0087
0088 #include <iostream>
0089 #include "ssys.h"
0090 #include "spath.h"
0091 #include "NP.hh"
0092 #include "U4Engine.h"
0093 #include "G4Types.hh"
0094 #include "U4UniformRand.h"
0095
0096 #include "Randomize.hh"
0097
0098 const char* FOLD = spath::Resolve("$TMP/U4EngineTest" );
0099
0100 void dump(int idx, double u)
0101 {
0102 std::cout
0103 << std::setw(5) << idx
0104 << " : "
0105 << std::fixed << std::setw(10) << std::setprecision(4) << u
0106 << std::endl
0107 ;
0108 }
0109
0110 void dump(const char* label, int n)
0111 {
0112 std::cout << " label " << label << std::endl ;
0113 for(int i=0 ; i < n ; i++) dump(i, G4UniformRand() ) ;
0114 }
0115
0116 void test_SaveState_RestoreState(int argc, char** argv)
0117 {
0118 int mode = argc > 1 ? std::atoi(argv[1]) : 0 ;
0119 int N = 10 ;
0120 bool show = false ;
0121
0122 if( mode == 0 )
0123 {
0124 NP* states = NP::Make<unsigned long>(10, 2*17+4 ) ;
0125 std::cout << " mode:0 saving engine states " << std::endl ;
0126 U4Engine::SaveState(FOLD, "s0.conf") ;
0127 U4Engine::SaveState( states, 0 );
0128 if(show) U4Engine::ShowState();
0129 dump("s0.conf", N );
0130
0131 U4Engine::SaveState(FOLD, "s1.conf") ;
0132 U4Engine::SaveState( states, 1 );
0133 if(show) U4Engine::ShowState();
0134 dump("s1.conf", N);
0135
0136 U4Engine::SaveState(FOLD, "s2.conf") ;
0137 U4Engine::SaveState( states, 2 );
0138 if(show) U4Engine::ShowState();
0139 dump("s2.conf", N);
0140
0141 states->save(FOLD, "states.npy");
0142 }
0143 else if( mode == 1 )
0144 {
0145 std::cout << " mode:1 restore engine state from file " << std::endl ;
0146 U4Engine::RestoreState(FOLD, "s2.conf") ;
0147 if(show) U4Engine::ShowState();
0148 dump("U4Engine::RestoreState(FOLD, \"s2.conf\")", N );
0149 }
0150 else if( mode == 2 )
0151 {
0152 std::cout << " mode:2 restore engine state from array " << std::endl ;
0153 NP* states = NP::Load(FOLD, "states.npy");
0154 std::cout << " states " << states->sstr() << std::endl;
0155 U4Engine::RestoreState( states, 2 );
0156 if(show) U4Engine::ShowState();
0157 dump("U4Engine::RestoreState(states, 2)", N );
0158 }
0159
0160 std::cout << U4Engine::Desc() << std::endl ;
0161 }
0162
0163
0164 void test_Desc()
0165 {
0166 std::cout << U4Engine::DescState() << std::endl ;
0167 std::cout << U4Engine::DescStateArray() << std::endl ;
0168 }
0169
0170 void test_U4UniformRand()
0171 {
0172
0173 NP* states = NP::Make<unsigned long>(10, 2*17+4 ) ;
0174
0175 U4Engine::SaveState( states, 0 );
0176 NP* u0 = U4UniformRand::Get(100);
0177
0178 U4Engine::RestoreState( states, 0 );
0179 NP* u1 = U4UniformRand::Get(100);
0180
0181 U4Engine::RestoreState( states, 0 );
0182 NP* u2 = U4UniformRand::Get(100);
0183
0184 std::cout << "u0 " << u0->repr<double>() << std::endl;
0185 std::cout << "u1 " << u1->repr<double>() << std::endl;
0186 std::cout << "u2 " << u2->repr<double>() << std::endl;
0187
0188 u0->save(FOLD, "test_U4UniformRand", "u0.npy");
0189 u1->save(FOLD, "test_U4UniformRand", "u1.npy");
0190 u2->save(FOLD, "test_U4UniformRand", "u2.npy");
0191 }
0192
0193
0194 int main(int argc, char** argv)
0195 {
0196
0197
0198
0199
0200
0201 test_U4UniformRand();
0202
0203 return 0 ;
0204 }