Geant4 Cross Reference |
1 // 1 2 // ******************************************* 3 // * License and Disclaimer 4 // * 5 // * The Geant4 software is copyright of th 6 // * the Geant4 Collaboration. It is provided 7 // * conditions of the Geant4 Software License 8 // * LICENSE and available at http://cern.ch/ 9 // * include a list of copyright holders. 10 // * 11 // * Neither the authors of this software syst 12 // * institutes,nor the agencies providing fin 13 // * work make any representation or warran 14 // * regarding this software system or assum 15 // * use. Please see the license in the file 16 // * for the full disclaimer and the limitatio 17 // * 18 // * This code implementation is the result 19 // * technical work of the GEANT4 collaboratio 20 // * By using, copying, modifying or distri 21 // * any work based on the software) you ag 22 // * use in resulting scientific publicati 23 // * acceptance of all terms of the Geant4 Sof 24 // ******************************************* 25 // 26 // neutron_hp -- source file 27 // J.P. Wellisch, Nov-1996 28 // A prototype of the low energy neutron trans 29 // 30 // P. Arce, June-2014 Conversion neutron_hp to 31 // 32 #include "G4ParticleHPInterpolator.hh" 33 34 #include "G4Pow.hh" 35 36 G4double G4ParticleHPInterpolator::GetBinInteg 37 38 39 { // inline again later on @@@@ 40 G4double result = 0; 41 if (aScheme == HISTO || aScheme == CHISTO || 42 result = y1 * (x2 - x1); 43 } 44 else if (aScheme == LINLIN || aScheme == CLI 45 result = 0.5 * (y2 + y1) * (x2 - x1); 46 } 47 else if (aScheme == LINLOG || aScheme == CLI 48 if (x1 == 0) 49 result = y1; 50 else if (x2 == 0) 51 result = y2; 52 else { 53 G4double b = (y2 - y1) / (G4Log(x2) - G4 54 G4double a = y1 - b * G4Log(x1); 55 result = (a - b) * (x2 - x1) + b * (x2 * 56 } 57 } 58 else if (aScheme == LOGLIN || aScheme == CLO 59 if (y1 == 0 || y2 == 0) { 60 result = 0; 61 } 62 else { 63 // G4double b = (std::log(y2)-std::log(y 64 // G4double a = std::log(y1) - b*x1; 65 //************************************** 66 // EMendoza: 67 // result = (std::exp(a)/b)*(std::exp(b* 68 //************************************** 69 if (y1 != y2) { 70 result = (x2 - x1) * (y2 - y1) / G4Log 71 } 72 else { 73 result = y2 * (x2 - x1); 74 } 75 //************************************** 76 } 77 } 78 else if (aScheme == LOGLOG || aScheme == CLO 79 if (x1 == 0) 80 result = y1; 81 else if (x2 == 0) 82 result = y2; 83 else if (y1 == 0 || y2 == 0) 84 result = 0; 85 else { 86 G4double b = (G4Log(y2) - G4Log(y1)) / ( 87 G4double a = G4Log(y1) - b * G4Log(x1); 88 ; 89 result = (G4Exp(a) / (b + 1)) 90 * (G4Pow::GetInstance()->powA(x 91 } 92 } 93 else { 94 throw G4HadronicException(__FILE__, __LINE 95 "Unknown interpo 96 } 97 return result; 98 } 99 G4double G4ParticleHPInterpolator::GetWeighted 100 101 102 { // inline again later on @@@@ 103 G4double result = 0; 104 if (aScheme == HISTO || aScheme == CHISTO || 105 result = 0.5 * y1 * (x2 * x2 - x1 * x1); 106 } 107 else if (aScheme == LINLIN || aScheme == CLI 108 // G4double b = (y2-y1)/(x2-x1); 109 // G4double a = y1 - b*x1; 110 // result = 0.5*a*(x2*x2-x1*x1) + ( 111 // Factor out x2-x1 to avoid divide by ze 112 113 result = (y1 * x2 - y2 * x1) * (x2 + x1) / 114 } 115 else if (aScheme == LINLOG || aScheme == CLI 116 if (x1 == 0) 117 result = y1; 118 else if (x2 == 0) 119 result = y2; 120 else { 121 G4double b = (y2 - y1) / (G4Log(x2) - G4 122 G4double a = y1 - b * G4Log(x1); 123 result = (x2 * x2 / 2. * (a - b / 2. + b 124 - (x1 * x1 / 2. * (a - b / 2. + 125 } 126 } 127 else if (aScheme == LOGLIN || aScheme == CLO 128 if (y1 == 0 || y2 == 0) 129 result = 0; 130 else { 131 G4double b = (G4Log(y2) - G4Log(y1)) / ( 132 G4double a = G4Log(y1) - b * x1; 133 result = G4Exp(a) / (b * b) * (G4Exp(b * 134 } 135 } 136 else if (aScheme == LOGLOG || aScheme == CLO 137 if (x1 == 0) 138 result = y1; 139 else if (x2 == 0) 140 result = y2; 141 else if (y1 == 0 || y2 == 0) 142 result = 0; 143 else { 144 G4double b = (G4Log(y2) - G4Log(y1)) / ( 145 G4double a = G4Log(y1) - b * G4Log(x1); 146 ; 147 result = G4Exp(a) / (b + 2.) 148 * (G4Pow::GetInstance()->powA(x 149 } 150 } 151 else { 152 throw G4HadronicException(__FILE__, __LINE 153 "Unknown interpo 154 } 155 return result; 156 } 157