File indexing completed on 2026-04-10 07:50:27
0001
0002
0003 #include <iostream>
0004 #include "G4ThreeVector.hh"
0005 #include "Randomize.hh"
0006 #include "NPX.h"
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 G4ThreeVector GetFacetNormal(G4ThreeVector& smear, const G4ThreeVector& Momentum, const G4ThreeVector& Normal, G4double polish )
0055 {
0056 G4ThreeVector FacetNormal;
0057 G4double Momentum_FacetNormal = 0. ;
0058
0059 if (polish < 1.0)
0060 {
0061 do {
0062 do
0063 {
0064 smear.setX(2.*G4UniformRand()-1.0);
0065 smear.setY(2.*G4UniformRand()-1.0);
0066 smear.setZ(2.*G4UniformRand()-1.0);
0067 }
0068 while (smear.mag()>1.0);
0069
0070 smear = (1.-polish) * smear;
0071
0072 FacetNormal = Normal + smear;
0073
0074 Momentum_FacetNormal = Momentum * FacetNormal ;
0075
0076 }
0077 while (Momentum_FacetNormal >= 0.0);
0078
0079 FacetNormal = FacetNormal.unit();
0080 }
0081 else
0082 {
0083 FacetNormal = Normal;
0084 }
0085 return FacetNormal ;
0086 }
0087
0088
0089 struct FacetNormal_Smear
0090 {
0091 G4ThreeVector FacetNormal ;
0092 G4ThreeVector Smear ;
0093 };
0094
0095 int main()
0096 {
0097 G4double polish = 0.999 ;
0098
0099 G4ThreeVector Momentum(1,-1,0);
0100 G4ThreeVector Normal(0,0,1) ;
0101 G4ThreeVector Meta(polish, 0, 0);
0102
0103 Momentum = Momentum.unit();
0104 Normal = Normal.unit() ;
0105
0106 std::vector<G4ThreeVector> mm(3) ;
0107 mm[0] = Momentum ;
0108 mm[1] = Normal ;
0109 mm[2] = Meta ;
0110
0111 const int N=1000 ;
0112 std::vector<FacetNormal_Smear> nn(N) ;
0113
0114 for(int i=0 ; i < int(nn.size()) ; i++ )
0115 {
0116 FacetNormal_Smear& fns = nn[i] ;
0117 fns.FacetNormal = GetFacetNormal(fns.Smear, Momentum, Normal, polish ) ;
0118 }
0119
0120 NP* a = NPX::ArrayFromVec<double,FacetNormal_Smear>(nn,2,3) ;
0121 a->save("$FOLD/FacetNormal.npy" );
0122
0123 NP* b = NPX::ArrayFromVec<double,G4ThreeVector>(mm) ;
0124 b->save("$FOLD/Meta.npy" );
0125
0126 return 0 ;
0127 }
0128
0129