File indexing completed on 2026-05-23 07:42:00
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 #ifdef USE_INFERENCE
0030 # ifndef PAR04INFEERENCESETUP_HH
0031 # define PAR04INFEERENCESETUP_HH
0032
0033 # include "CLHEP/Units/SystemOfUnits.h" // for mm
0034
0035 # include "G4ThreeVector.hh" // for G4ThreeVector
0036
0037 # include <G4String.hh> // for G4String
0038 # include <G4SystemOfUnits.hh> // for mm
0039 # include <G4Types.hh> // for G4int, G4double, G4bool, G4f...
0040 # include <memory> // for unique_ptr
0041 # include <vector> // for vector
0042 class Par04DetectorConstruction;
0043 class Par04InferenceInterface;
0044 class Par04InferenceMessenger;
0045
0046
0047
0048
0049
0050
0051
0052
0053
0054
0055
0056
0057
0058
0059
0060
0061 class Par04InferenceSetup
0062 {
0063 public:
0064 Par04InferenceSetup();
0065 ~Par04InferenceSetup();
0066
0067
0068
0069
0070 G4bool IfTrigger(G4double aEnergy);
0071
0072
0073
0074 inline void SetMeshSize(const G4ThreeVector& aSize) { fMeshSize = aSize; };
0075
0076
0077
0078 inline G4ThreeVector GetMeshSize() const { return fMeshSize; };
0079
0080
0081
0082 inline void SetMeshNumber(const G4ThreeVector& aSize) { fMeshNumber = aSize; };
0083
0084
0085
0086 inline G4ThreeVector GetMeshNumber() const { return fMeshNumber; };
0087
0088 inline void SetSizeConditionVector(G4int aNumber) { fSizeConditionVector = aNumber; };
0089
0090 inline G4int GetSizeConditionVector() const { return fSizeConditionVector; };
0091
0092 inline void SetSizeLatentVector(G4int aNumber) { fSizeLatentVector = aNumber; };
0093
0094 inline G4int GetSizeLatentVector() const { return fSizeLatentVector; };
0095
0096 inline void SetModelPathName(G4String aName) { fModelPathName = aName; };
0097
0098 inline G4String GetModelPathName() const { return fModelPathName; };
0099
0100 inline void SetModelType(G4String aName) { fModelType = aName; };
0101
0102 inline G4String GetModelType() const { return fModelType; };
0103
0104 inline void SetProfileFlag(G4int aNumber) { fProfileFlag = aNumber; };
0105
0106 inline G4int GetProfileFlag() const { return fProfileFlag; };
0107
0108 inline void SetOptimizationFlag(G4int aNumber) { fOptimizationFlag = aNumber; };
0109
0110 inline G4int GetOptimizationFlag() const { return fOptimizationFlag; };
0111
0112 inline G4String GetInferenceLibrary() const { return fInferenceLibrary; };
0113
0114
0115 void SetInferenceLibrary(G4String aName);
0116
0117 void CheckInferenceLibrary();
0118
0119 inline void SetMeshNbOfCells(G4ThreeVector aNb) { fMeshNumber = aNb; };
0120
0121
0122 inline void SetMeshNbOfCells(G4int aIndex, G4double aNb) { fMeshNumber[aIndex] = aNb; };
0123
0124 inline G4ThreeVector GetMeshNbOfCells() const { return fMeshNumber; };
0125
0126 inline void SetMeshSizeOfCells(G4ThreeVector aNb) { fMeshSize = aNb; };
0127
0128
0129 inline void SetMeshSizeOfCells(G4int aIndex, G4double aNb) { fMeshSize[aIndex] = aNb; };
0130
0131 inline G4ThreeVector GetMeshSizeOfCells() const { return fMeshSize; };
0132
0133
0134 inline void SetCudaFlag(G4int aNumber) { fCudaFlag = aNumber; };
0135 inline G4int GetCudaFlag() const { return fCudaFlag; };
0136
0137
0138 inline void SetCudaDeviceId(G4String aNumber) { fCudaDeviceId = aNumber; };
0139 inline G4String GetCudaDeviceId() const { return fCudaDeviceId; };
0140 inline void SetCudaGpuMemLimit(G4String aNumber) { fCudaGpuMemLimit = aNumber; };
0141 inline G4String GetCudaGpuMemLimit() const { return fCudaGpuMemLimit; };
0142 inline void SetCudaArenaExtendedStrategy(G4String aNumber)
0143 {
0144 fCudaArenaExtendedStrategy = aNumber;
0145 };
0146 inline G4String GetCudaArenaExtendedStrategy() const { return fCudaArenaExtendedStrategy; };
0147 inline void SetCudaCudnnConvAlgoSearch(G4String aNumber)
0148 {
0149 fCudaCudnnConvAlgoSearch = aNumber;
0150 };
0151 inline G4String GetCudaCudnnConvAlgoSearch() const { return fCudaCudnnConvAlgoSearch; };
0152 inline void SetCudaDoCopyInDefaultStream(G4String aNumber)
0153 {
0154 fCudaDoCopyInDefaultStream = aNumber;
0155 };
0156 inline G4String GetCudaDoCopyInDefaultStream() const { return fCudaDoCopyInDefaultStream; };
0157 inline void SetCudaCudnnConvUseMaxWorkspace(G4String aNumber)
0158 {
0159 fCudaCudnnConvUseMaxWorkspace = aNumber;
0160 };
0161 inline G4String GetCudaCudnnConvUseMaxWorkspace() const
0162 {
0163 return fCudaCudnnConvUseMaxWorkspace;
0164 };
0165
0166
0167
0168
0169
0170 void GetEnergies(std::vector<G4double>& aEnergies, G4double aParticleEnergy,
0171 G4float aTheta, G4float aPhi);
0172
0173
0174
0175
0176
0177
0178
0179
0180
0181 void GetPositions(std::vector<G4ThreeVector>& aDepositsPositions,
0182 G4ThreeVector aParticlePosition, G4ThreeVector aParticleDirection);
0183
0184 private:
0185
0186
0187
0188
0189 G4ThreeVector fMeshSize = G4ThreeVector(2.325 * CLHEP::mm, 1, 3.4 * CLHEP::mm);
0190
0191
0192
0193 G4ThreeVector fMeshNumber = G4ThreeVector(18, 50, 45);
0194
0195 std::unique_ptr<Par04InferenceInterface> fInferenceInterface;
0196
0197 Par04InferenceMessenger* fInferenceMessenger;
0198
0199 float fMaxEnergy = 1024000.0;
0200
0201 float fMaxAngle = 90.0;
0202
0203 G4String fInferenceLibrary = "ONNX";
0204
0205 G4int fSizeLatentVector = 10;
0206
0207 G4int fSizeConditionVector = 4;
0208
0209 G4String fModelPathName = "MLModels/Generator.onnx";
0210
0211 G4String fModelType = "VAE";
0212
0213
0214 G4bool fProfileFlag = false;
0215
0216 G4bool fOptimizationFlag = false;
0217
0218 G4String fModelSavePath = "MLModels/Optimized-Generator.onnx";
0219
0220 G4String fProfilingOutputSavePath = "opt.json";
0221
0222 G4int fIntraOpNumThreads = 1;
0223
0224
0225 G4bool fCudaFlag = false;
0226
0227
0228 G4String fCudaDeviceId = "0";
0229 G4String fCudaGpuMemLimit = "2147483648";
0230 G4String fCudaArenaExtendedStrategy = "kSameAsRequested";
0231 G4String fCudaCudnnConvAlgoSearch = "DEFAULT";
0232 G4String fCudaDoCopyInDefaultStream = "1";
0233 G4String fCudaCudnnConvUseMaxWorkspace = "1";
0234 std::vector<const char*> cuda_keys{
0235 "device_id",
0236 "gpu_mem_limit",
0237 "arena_extend_strategy",
0238 "cudnn_conv_algo_search",
0239 "do_copy_in_default_stream",
0240 "cudnn_conv_use_max_workspace",
0241 };
0242 std::vector<const char*> cuda_values{
0243 fCudaDeviceId.c_str(),
0244 fCudaGpuMemLimit.c_str(),
0245 fCudaArenaExtendedStrategy.c_str(),
0246 fCudaCudnnConvAlgoSearch.c_str(),
0247 fCudaDoCopyInDefaultStream.c_str(),
0248 fCudaCudnnConvUseMaxWorkspace.c_str(),
0249 };
0250 };
0251
0252 # endif
0253 #endif