Geant4 Cross Reference |
1 /* 1 2 # <<BEGIN-copyright>> 3 # <<END-copyright>> 4 */ 5 6 #include <iostream> 7 #include <cmath> 8 9 #include "GIDI_settings.hh" 10 11 using namespace GIDI; 12 13 /* 14 ============================================== 15 */ 16 GIDI_settings_particle::GIDI_settings_particle 17 18 initialize( PoPId, transporting, energyMod 19 } 20 /* 21 ============================================== 22 */ 23 GIDI_settings_particle::GIDI_settings_particle 24 25 initialize( particle.mPoPId, particle.mTra 26 setGroup( particle.mGroup ); 27 for( std::vector<GIDI_settings_processedFl 28 mProcessedFluxes.push_back( *iter ); 29 } 30 } 31 /* 32 ============================================== 33 */ 34 int GIDI_settings_particle::initialize( int Po 35 36 mPoPId = PoPId; 37 mTransporting = transporting; 38 int energyMode_ = ( energyMode & GIDI_se 39 + ( energyMode & GIDI_se 40 // + ( energyMode & GIDI_se 41 ; 42 43 if( energyMode_ != energyMode ) throw 1; 44 mEnergyMode = energyMode; 45 46 mGroupX = NULL; 47 setGroup( mGroup ); 48 return( 0 ); 49 } 50 /* 51 ============================================== 52 */ 53 void GIDI_settings_particle::setGroup( GIDI_se 54 55 nfu_status status_nf; 56 57 mGroup = group; 58 59 if( mGroupX != NULL ) ptwX_free( mGroupX ) 60 mGroupX = NULL; 61 if( mGroup.size( ) > 0 ) { 62 if( ( mGroupX = ptwX_create( (int) mGr 63 } 64 } 65 /* 66 ============================================== 67 */ 68 GIDI_settings_particle::~GIDI_settings_particl 69 70 if( mGroupX != NULL ) ptwX_free( mGroupX ) 71 } 72 /* 73 ============================================== 74 */ 75 int GIDI_settings_particle::addFlux( statusMes 76 77 double temperature = flux.getTemperature( 78 std::vector<GIDI_settings_processedFlux>:: 79 80 for( iter = mProcessedFluxes.begin( ); ite 81 if( temperature <= iter->getTemperatur 82 } 83 // BRB need to check if temperature is the sam 84 mProcessedFluxes.insert( iter, GIDI_settin 85 return( 0 ); 86 } 87 /* 88 ============================================== 89 */ 90 GIDI_settings_processedFlux const *GIDI_settin 91 92 double priorTemperature, lastTemperature; 93 std::vector<GIDI_settings_processedFlux>:: 94 95 if( mProcessedFluxes.size( ) == 0 ) return 96 97 priorTemperature = mProcessedFluxes[0].get 98 //TK adds next line 99 lastTemperature = mProcessedFluxes[0].get 100 for( iter = mProcessedFluxes.begin( ); ite 101 lastTemperature = iter->getTemperature 102 if( lastTemperature > temperature ) br 103 //TK add next line 104 priorTemperature = iter->getTemperatur 105 } 106 if( iter == mProcessedFluxes.end( ) ) { 107 --iter; } 108 else { 109 //if( fabs( lastTemperature - temperat 110 //TK modified above line 111 if( std::fabs( lastTemperature - tempe 112 } 113 return( &(*iter) ); 114 } 115 /* 116 ============================================== 117 */ 118 ptwXPoints *GIDI_settings_particle::groupFunct 119 120 if( mGroupX == NULL ) return( NULL ); 121 GIDI_settings_processedFlux const *process 122 if( processedFlux == NULL ) return( NULL ) 123 return( processedFlux->groupFunction( smr, 124 } 125 126 /* ---- GIDI_settings_processedFlux ---- */ 127 /* 128 ============================================== 129 */ 130 GIDI_settings_processedFlux::GIDI_settings_pro 131 132 nfu_status status_nf; 133 ptwXYPoints *fluxXY = NULL; 134 ptwXPoints *groupedFluxX; 135 GIDI_settings_flux_order const *fluxOrder; 136 double const *energies, *fluxes; 137 138 for( int order = 0; order < (int) flux.siz 139 fluxOrder = flux[order]; 140 energies = fluxOrder->getEnergies( ); 141 fluxes = fluxOrder->getFluxes( ); 142 if( ( fluxXY = ptwXY_createFrom_Xs_Ys( 143 fluxOrder->size( ), energies, flux 144 mFluxXY.push_back( fluxXY ); 145 if( ( groupedFluxX = ptwXY_groupOneFun 146 mGroupedFlux.push_back( groupedFluxX ) 147 } 148 return; 149 150 err: 151 throw 1; 152 } 153 /* 154 ============================================== 155 */ 156 GIDI_settings_processedFlux::GIDI_settings_pro 157 158 nfu_status status_nf; 159 ptwXYPoints *fluxXY; 160 ptwXPoints *fluxX; 161 162 for( int order = 0; order < (int) mFlux.si 163 if( ( fluxXY = ptwXY_clone( flux.mFlux 164 mFluxXY.push_back( fluxXY ); 165 if( ( fluxX = ptwX_clone( flux.mGroupe 166 mGroupedFlux.push_back( fluxX ); 167 } 168 return; 169 170 err: 171 for( std::vector<ptwXYPoints *>::iterator 172 for( std::vector<ptwXPoints *>::iterator i 173 throw 1; 174 } 175 /* 176 ============================================== 177 */ 178 GIDI_settings_processedFlux& GIDI_settings_pro 179 if ( this != &flux ) { 180 // Clean-up existing things 181 for( std::vector<ptwXYPoints *>::iterator 182 for( std::vector<ptwXPoints *>::iterator i 183 // Now assign 184 mFlux = flux.mFlux; 185 nfu_status status_nf; 186 ptwXYPoints *fluxXY; 187 ptwXPoints *fluxX; 188 for( int order = 0; order < (int) mFlux.si 189 if( ( fluxXY = ptwXY_clone( flux.mFlux 190 mFluxXY.push_back( fluxXY ); 191 if( ( fluxX = ptwX_clone( flux.mGroupe 192 mGroupedFlux.push_back( fluxX ); 193 } 194 } 195 return *this; 196 197 err: 198 for( std::vector<ptwXYPoints *>::iterator 199 for( std::vector<ptwXPoints *>::iterator i 200 throw 1; 201 } 202 /* 203 ============================================== 204 */ 205 GIDI_settings_processedFlux::~GIDI_settings_pr 206 207 for( std::vector<ptwXYPoints *>::iterator 208 for( std::vector<ptwXPoints *>::iterator i 209 } 210 /* 211 ============================================== 212 */ 213 ptwXPoints *GIDI_settings_processedFlux::group 214 215 nfu_status status_nf; 216 ptwXYPoints *fluxXY; 217 ptwXPoints *groupedX; 218 219 if( groupX == NULL ) return( NULL ); 220 if( order < 0 ) order = 0; 221 if( order >= (int) mFluxXY.size( ) ) order 222 223 fluxXY = ptwXY_xSlice( mFluxXY[order], ptw 224 // if( fluxXY == NULL ) smr_setReportError2 225 226 groupedX = ptwXY_groupTwoFunctions( ptwXY1 227 ptwXY_free( fluxXY ); 228 // if( groupedX == NULL ) smr_setReportErro 229 return( groupedX ); 230 } 231