Geant4 Cross Reference |
1 // 1 // 2 // ******************************************* 2 // ******************************************************************** 3 // * License and Disclaimer 3 // * License and Disclaimer * 4 // * 4 // * * 5 // * The Geant4 software is copyright of th 5 // * The Geant4 software is copyright of the Copyright Holders of * 6 // * the Geant4 Collaboration. It is provided 6 // * the Geant4 Collaboration. It is provided under the terms and * 7 // * conditions of the Geant4 Software License 7 // * conditions of the Geant4 Software License, included in the file * 8 // * LICENSE and available at http://cern.ch/ 8 // * LICENSE and available at http://cern.ch/geant4/license . These * 9 // * include a list of copyright holders. 9 // * include a list of copyright holders. * 10 // * 10 // * * 11 // * Neither the authors of this software syst 11 // * Neither the authors of this software system, nor their employing * 12 // * institutes,nor the agencies providing fin 12 // * institutes,nor the agencies providing financial support for this * 13 // * work make any representation or warran 13 // * work make any representation or warranty, express or implied, * 14 // * regarding this software system or assum 14 // * regarding this software system or assume any liability for its * 15 // * use. Please see the license in the file 15 // * use. Please see the license in the file LICENSE and URL above * 16 // * for the full disclaimer and the limitatio 16 // * for the full disclaimer and the limitation of liability. * 17 // * 17 // * * 18 // * This code implementation is the result 18 // * This code implementation is the result of the scientific and * 19 // * technical work of the GEANT4 collaboratio 19 // * technical work of the GEANT4 collaboration. * 20 // * By using, copying, modifying or distri 20 // * By using, copying, modifying or distributing the software (or * 21 // * any work based on the software) you ag 21 // * any work based on the software) you agree to acknowledge its * 22 // * use in resulting scientific publicati 22 // * use in resulting scientific publications, and indicate your * 23 // * acceptance of all terms of the Geant4 Sof 23 // * acceptance of all terms of the Geant4 Software license. * 24 // ******************************************* 24 // ******************************************************************** 25 // 25 // 26 // Created on 2016/04/08 26 // Created on 2016/04/08 27 // 27 // 28 // Authors: D. Sakata, S. Incerti 28 // Authors: D. Sakata, S. Incerti 29 // 29 // 30 // This class perform transmission term of vol 30 // This class perform transmission term of volume plasmon excitation, 31 // based on Quinn Model, see Phys. Rev. vol 12 31 // based on Quinn Model, see Phys. Rev. vol 126, number 4 (1962) 32 32 33 #include "G4DNAQuinnPlasmonExcitationModel.hh" 33 #include "G4DNAQuinnPlasmonExcitationModel.hh" 34 #include "G4SystemOfUnits.hh" 34 #include "G4SystemOfUnits.hh" 35 #include "G4RandomDirection.hh" 35 #include "G4RandomDirection.hh" 36 36 37 //....oooOO0OOooo........oooOO0OOooo........oo 37 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 38 38 39 using namespace std; 39 using namespace std; 40 40 41 //....oooOO0OOooo........oooOO0OOooo........oo 41 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 42 42 43 G4DNAQuinnPlasmonExcitationModel::G4DNAQuinnPl 43 G4DNAQuinnPlasmonExcitationModel::G4DNAQuinnPlasmonExcitationModel 44 (const G4ParticleDefin 44 (const G4ParticleDefinition*, 45 const G4String& nam): 45 const G4String& nam): 46 G4VEmModel(nam) 46 G4VEmModel(nam) 47 { 47 { 48 fpMaterialDensity = nullptr; 48 fpMaterialDensity = nullptr; 49 fLowEnergyLimit = 10 * eV; 49 fLowEnergyLimit = 10 * eV; 50 fHighEnergyLimit = 1.0 * GeV; 50 fHighEnergyLimit = 1.0 * GeV; 51 51 52 for(int & i : nValenceElectron) i=0; 52 for(int & i : nValenceElectron) i=0; 53 53 54 verboseLevel = 0; 54 verboseLevel = 0; 55 55 56 if (verboseLevel > 0) 56 if (verboseLevel > 0) 57 { 57 { 58 G4cout << "Quinn plasmon excitation model 58 G4cout << "Quinn plasmon excitation model is constructed " << G4endl; 59 } 59 } 60 fParticleChangeForGamma = nullptr; 60 fParticleChangeForGamma = nullptr; 61 statCode = false; 61 statCode = false; 62 } 62 } 63 63 64 //....oooOO0OOooo........oooOO0OOooo........oo 64 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 65 65 66 G4DNAQuinnPlasmonExcitationModel::~G4DNAQuinnP 66 G4DNAQuinnPlasmonExcitationModel::~G4DNAQuinnPlasmonExcitationModel() 67 = default; 67 = default; 68 68 69 //....oooOO0OOooo........oooOO0OOooo........oo 69 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 70 70 71 void G4DNAQuinnPlasmonExcitationModel::Initial 71 void G4DNAQuinnPlasmonExcitationModel::Initialise 72 (const G4ParticleDefin 72 (const G4ParticleDefinition* particle, 73 const G4DataVector& / 73 const G4DataVector& /*cuts*/) 74 { 74 { 75 for(int & i : nValenceElectron) i=0; 75 for(int & i : nValenceElectron) i=0; 76 76 77 if (verboseLevel > 3) 77 if (verboseLevel > 3) 78 { 78 { 79 G4cout << 79 G4cout << 80 "Calling G4DNAQuinnPlasmonExcitatio 80 "Calling G4DNAQuinnPlasmonExcitationModel::Initialise()" 81 << G4endl; 81 << G4endl; 82 } 82 } 83 83 84 if(particle == G4Electron::ElectronDefinitio 84 if(particle == G4Electron::ElectronDefinition()) 85 { 85 { 86 fLowEnergyLimit = 10 * eV; 86 fLowEnergyLimit = 10 * eV; 87 fHighEnergyLimit = 1.0 * GeV; 87 fHighEnergyLimit = 1.0 * GeV; 88 } 88 } 89 else 89 else 90 { 90 { 91 G4Exception("G4DNAQuinnPlasmonExcitationMo 91 G4Exception("G4DNAQuinnPlasmonExcitationModel::Initialise","em0001", 92 FatalException,"Not defined for other part 92 FatalException,"Not defined for other particles than electrons."); 93 return; 93 return; 94 } 94 } 95 95 96 // Get Number of valence electrons 96 // Get Number of valence electrons 97 G4ProductionCutsTable* theCoupleTable = 97 G4ProductionCutsTable* theCoupleTable = 98 G4ProductionCutsTable::GetProductionCuts 98 G4ProductionCutsTable::GetProductionCutsTable(); 99 99 100 auto numOfCouples = (G4int)theCoupleTable-> 100 auto numOfCouples = (G4int)theCoupleTable->GetTableSize(); 101 101 102 for(G4int i=0;i<numOfCouples;i++){ 102 for(G4int i=0;i<numOfCouples;i++){ 103 103 104 const G4MaterialCutsCouple* couple = 104 const G4MaterialCutsCouple* couple = 105 theCoupleTable->GetMaterialCutsCoupl 105 theCoupleTable->GetMaterialCutsCouple(i); 106 106 107 const G4Material* material = couple->GetMa 107 const G4Material* material = couple->GetMaterial(); 108 108 109 const G4ElementVector* theElementVector =m 109 const G4ElementVector* theElementVector =material->GetElementVector(); 110 110 111 std::size_t nelm = material->GetNumberOfEl 111 std::size_t nelm = material->GetNumberOfElements(); 112 if (nelm==1) // Protection: only for singl 112 if (nelm==1) // Protection: only for single element 113 { 113 { 114 G4int z = G4lrint((*theElementVector)[0] 114 G4int z = G4lrint((*theElementVector)[0]->GetZ()); 115 if(z<=100) 115 if(z<=100) 116 { 116 { 117 nValenceElectron[z] = GetNValenceElec 117 nValenceElectron[z] = GetNValenceElectron(z); 118 } 118 } 119 else 119 else 120 { 120 { 121 G4Exception("G4DNAQuinnPlasmonExcitati 121 G4Exception("G4DNAQuinnPlasmonExcitationModel::Initialise","em0002", 122 FatalException,"The model is not app 122 FatalException,"The model is not applied for z>100"); 123 } 123 } 124 } 124 } 125 //for(G4int j=0;j<nelm;j++){ 125 //for(G4int j=0;j<nelm;j++){ 126 // G4int z=G4lrint((*theElementVector)[ 126 // G4int z=G4lrint((*theElementVector)[j]->GetZ()); 127 // if(z<=100){nValenceElectron[z] = Ge 127 // if(z<=100){nValenceElectron[z] = GetNValenceElectron(z);} 128 //} 128 //} 129 } 129 } 130 130 131 if( verboseLevel>0 ) 131 if( verboseLevel>0 ) 132 { 132 { 133 G4cout << "Quinn plasmon excitation model 133 G4cout << "Quinn plasmon excitation model is initialized " << G4endl 134 << "Energy range: " 134 << "Energy range: " 135 << LowEnergyLimit() / eV << " eV - " 135 << LowEnergyLimit() / eV << " eV - " 136 << HighEnergyLimit() / keV << " keV for " 136 << HighEnergyLimit() / keV << " keV for " 137 << particle->GetParticleName() 137 << particle->GetParticleName() 138 << G4endl; 138 << G4endl; 139 } 139 } 140 140 141 if (isInitialised){return;} 141 if (isInitialised){return;} 142 fParticleChangeForGamma = GetParticleChangeF 142 fParticleChangeForGamma = GetParticleChangeForGamma(); 143 isInitialised = true; 143 isInitialised = true; 144 } 144 } 145 145 146 //....oooOO0OOooo........oooOO0OOooo........oo 146 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 147 147 148 G4double G4DNAQuinnPlasmonExcitationModel::Cro 148 G4double G4DNAQuinnPlasmonExcitationModel::CrossSectionPerVolume 149 (const G4Material* ma 149 (const G4Material* material, 150 const G4ParticleDefi 150 const G4ParticleDefinition* particleDefinition, 151 G4double ekin, 151 G4double ekin, 152 G4double, 152 G4double, 153 G4double) 153 G4double) 154 { 154 { 155 if (verboseLevel > 3) 155 if (verboseLevel > 3) 156 { 156 { 157 G4cout << 157 G4cout << 158 "Calling CrossSectionPerVolume() of G 158 "Calling CrossSectionPerVolume() of G4DNAQuinnPlasmonExcitationModel" 159 << G4endl; 159 << G4endl; 160 } 160 } 161 161 162 // Protection: only for single element 162 // Protection: only for single element 163 if(material->GetNumberOfElements()>1) return 163 if(material->GetNumberOfElements()>1) return 0.; 164 G4double z = material->GetZ(); 164 G4double z = material->GetZ(); 165 165 166 // Protection: only for Gold 166 // Protection: only for Gold 167 if (z!=79){return 0.;} 167 if (z!=79){return 0.;} 168 168 169 169 170 G4double sigma = 0; 170 G4double sigma = 0; 171 G4double atomicNDensity = material->GetAtomi 171 G4double atomicNDensity = material->GetAtomicNumDensityVector()[0]; 172 172 173 if(atomicNDensity!= 0.0) 173 if(atomicNDensity!= 0.0) 174 { 174 { 175 if (ekin >= fLowEnergyLimit && ekin < fHig 175 if (ekin >= fLowEnergyLimit && ekin < fHighEnergyLimit) 176 { 176 { 177 sigma = GetCrossSection(material,particl 177 sigma = GetCrossSection(material,particleDefinition,ekin); 178 } 178 } 179 179 180 if (verboseLevel > 2) 180 if (verboseLevel > 2) 181 { 181 { 182 G4cout<<"_______________________________ 182 G4cout<<"__________________________________" << G4endl; 183 G4cout<<"=== G4DNAQuinnPlasmonExcitation 183 G4cout<<"=== G4DNAQuinnPlasmonExcitationModel - XS INFO START"<<G4endl; 184 G4cout<<"=== Kinetic energy (eV)=" << ek 184 G4cout<<"=== Kinetic energy (eV)=" << ekin/eV << " particle : " 185 <<particleDefinition->GetParticleN 185 <<particleDefinition->GetParticleName() << G4endl; 186 G4cout<<"=== Cross section per atom for 186 G4cout<<"=== Cross section per atom for Z="<<z<<" is (cm^2)" 187 <<sigma/cm/cm << G4endl; 187 <<sigma/cm/cm << G4endl; 188 G4cout<<"=== Cross section per atom for 188 G4cout<<"=== Cross section per atom for Z="<<z<<" is (cm^-1)=" 189 <<sigma*atomicNDensity/(1./cm) << 189 <<sigma*atomicNDensity/(1./cm) << G4endl; 190 G4cout<<"=== G4DNAQuinnPlasmonExcitation 190 G4cout<<"=== G4DNAQuinnPlasmonExcitationModel - XS INFO END" << G4endl; 191 } 191 } 192 } 192 } 193 193 194 return sigma*atomicNDensity; 194 return sigma*atomicNDensity; 195 } 195 } 196 196 197 //....oooOO0OOooo........oooOO0OOooo........oo 197 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 198 198 199 void G4DNAQuinnPlasmonExcitationModel::SampleS 199 void G4DNAQuinnPlasmonExcitationModel::SampleSecondaries 200 (std::vector<G4Dynami 200 (std::vector<G4DynamicParticle*>* /*fvect*/, 201 const G4MaterialCuts 201 const G4MaterialCutsCouple* couple, 202 const G4DynamicParti 202 const G4DynamicParticle* aDynamicParticle, 203 G4double,G4double) 203 G4double,G4double) 204 { 204 { 205 205 206 if (verboseLevel > 3) 206 if (verboseLevel > 3) 207 { 207 { 208 G4cout << 208 G4cout << 209 "Calling SampleSecondaries() of G4D 209 "Calling SampleSecondaries() of G4DNAQuinnPlasmonExcitationModel" 210 << G4endl; 210 << G4endl; 211 } 211 } 212 212 213 const G4Material *material = couple->GetMate 213 const G4Material *material = couple->GetMaterial(); 214 214 215 G4ParticleDefinition* particle = aDynamicPar 215 G4ParticleDefinition* particle = aDynamicParticle->GetDefinition(); 216 216 217 G4double k = aDynamicPar 217 G4double k = aDynamicParticle->GetKineticEnergy(); 218 218 219 if(particle == G4Electron::ElectronDefinitio 219 if(particle == G4Electron::ElectronDefinition()) 220 { 220 { 221 G4double e = 1.; 221 G4double e = 1.; 222 G4int z = material->GetZ(); 222 G4int z = material->GetZ(); 223 G4int Nve = 0; 223 G4int Nve = 0; 224 224 225 //TODO: have to be change to realistic!! 225 //TODO: have to be change to realistic!! 226 if(z<100) Nve = nValenceElectron[z]; 226 if(z<100) Nve = nValenceElectron[z]; 227 227 228 G4double A = material->GetA()/g/mole 228 G4double A = material->GetA()/g/mole; 229 G4double Dens = material->GetDensity()/ 229 G4double Dens = material->GetDensity()/g*cm*cm*cm; 230 G4double veDens = Dens*CLHEP::Avogadro*Nv 230 G4double veDens = Dens*CLHEP::Avogadro*Nve/A; 231 231 232 G4double omega_p = std::sqrt(veDens*std::p 232 G4double omega_p = std::sqrt(veDens*std::pow(e,2)/ 233 (CLHEP::epsilon0/(1./cm) 233 (CLHEP::epsilon0/(1./cm)*CLHEP::electron_mass_c2 234 /(CLHEP::c_squared/cm/cm 234 /(CLHEP::c_squared/cm/cm))); 235 235 236 G4double excitationEnergy = CLHEP::hbar_ 236 G4double excitationEnergy = CLHEP::hbar_Planck*omega_p; 237 G4double newEnergy = k - excitati 237 G4double newEnergy = k - excitationEnergy; 238 238 239 239 240 if (newEnergy > 0) 240 if (newEnergy > 0) 241 { 241 { 242 fParticleChangeForGamma-> 242 fParticleChangeForGamma-> 243 ProposeMomentumDirection(aDynamicP 243 ProposeMomentumDirection(aDynamicParticle->GetMomentumDirection()); 244 244 245 fParticleChangeForGamma->ProposeLocalEne 245 fParticleChangeForGamma->ProposeLocalEnergyDeposit(excitationEnergy); 246 246 247 if(!statCode) 247 if(!statCode) 248 { 248 { 249 fParticleChangeForGamma->SetPropose 249 fParticleChangeForGamma->SetProposedKineticEnergy(newEnergy); 250 } 250 } 251 else 251 else 252 { 252 { 253 fParticleChangeForGamma->SetPropose 253 fParticleChangeForGamma->SetProposedKineticEnergy(k); 254 254 255 } 255 } 256 } 256 } 257 } 257 } 258 } 258 } 259 259 260 //....oooOO0OOooo........oooOO0OOooo........oo 260 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 261 261 262 G4double G4DNAQuinnPlasmonExcitationModel::Get 262 G4double G4DNAQuinnPlasmonExcitationModel::GetCrossSection 263 (const G4Material* ma 263 (const G4Material* material, 264 const G4ParticleDefi 264 const G4ParticleDefinition* particle, 265 G4double kineticEner 265 G4double kineticEnergy) 266 { 266 { 267 G4double value=0; 267 G4double value=0; 268 268 269 if(particle == G4Electron::ElectronDefinitio 269 if(particle == G4Electron::ElectronDefinition()) 270 { 270 { 271 G4double e = 1.; 271 G4double e = 1.; 272 G4int z = material->GetZ(); 272 G4int z = material->GetZ(); 273 G4int Nve = 0; 273 G4int Nve = 0; 274 if(z<100) Nve = nValenceElectron[z]; 274 if(z<100) Nve = nValenceElectron[z]; 275 G4double A = material->GetA()/g/mol 275 G4double A = material->GetA()/g/mole; 276 G4double Dens = material->GetDensity() 276 G4double Dens = material->GetDensity()/g*cm*cm*cm; 277 G4double veDens = Dens*CLHEP::Avogadro*N 277 G4double veDens = Dens*CLHEP::Avogadro*Nve/A; 278 278 279 G4double omega_p = std::sqrt(veDens*std:: 279 G4double omega_p = std::sqrt(veDens*std::pow(e,2) 280 /(CLHEP::epsilon0/(1./ 280 /(CLHEP::epsilon0/(1./cm)*CLHEP::electron_mass_c2/ 281 (CLHEP::c_squared/cm/c 281 (CLHEP::c_squared/cm/cm))); 282 282 283 G4double fEnergy = std::pow(CLHEP::h_Plan 283 G4double fEnergy = std::pow(CLHEP::h_Planck,2)/(8*CLHEP::electron_mass_c2)* 284 std::pow(3*veDens/CLHE 284 std::pow(3*veDens/CLHEP::pi,2./3.)/e 285 *(CLHEP::c_squared/cm/ 285 *(CLHEP::c_squared/cm/cm); 286 286 287 G4double p0 = sqrt(2*CLHEP::electron 287 G4double p0 = sqrt(2*CLHEP::electron_mass_c2 288 /(CLHEP::c_squared/cm/ 288 /(CLHEP::c_squared/cm/cm)*fEnergy); 289 289 290 G4double p = sqrt(2*CLHEP::electron 290 G4double p = sqrt(2*CLHEP::electron_mass_c2 291 /(CLHEP::c_squared/cm/ 291 /(CLHEP::c_squared/cm/cm)*kineticEnergy); 292 292 293 G4double mfp = 2*CLHEP::Bohr_radius/c 293 G4double mfp = 2*CLHEP::Bohr_radius/cm*kineticEnergy 294 /(CLHEP::hbar_Planck*o 294 /(CLHEP::hbar_Planck*omega_p)/ 295 (G4Log((std::pow(std:: 295 (G4Log((std::pow(std::pow(p0,2) 296 +2*CLHEP::electron_mas 296 +2*CLHEP::electron_mass_c2/ 297 (CLHEP::c_squared/cm/c 297 (CLHEP::c_squared/cm/cm)*omega_p 298 *CLHEP::hbar_Planck,1. 298 *CLHEP::hbar_Planck,1./2.)-p0) 299 /(p-std::pow(std::pow( 299 /(p-std::pow(std::pow(p,2)-2*CLHEP::electron_mass_c2/ 300 (CLHEP::c_squared/cm/c 300 (CLHEP::c_squared/cm/cm)*omega_p 301 *CLHEP::hbar_Planck,1. 301 *CLHEP::hbar_Planck,1./2.)))); 302 302 303 G4double excitationEnergy = CLHEP::hbar 303 G4double excitationEnergy = CLHEP::hbar_Planck*omega_p; 304 304 305 if((0<mfp)&&(0<veDens)&&(excitationEnergy 305 if((0<mfp)&&(0<veDens)&&(excitationEnergy<kineticEnergy)){ 306 value = 1./(veDens*mfp); 306 value = 1./(veDens*mfp); 307 } 307 } 308 } 308 } 309 return value*cm*cm; 309 return value*cm*cm; 310 } 310 } 311 311 312 //....oooOO0OOooo........oooOO0OOooo........oo 312 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 313 313 314 G4int G4DNAQuinnPlasmonExcitationModel::GetNVa 314 G4int G4DNAQuinnPlasmonExcitationModel::GetNValenceElectron(G4int z) 315 { 315 { 316 316 317 G4int Nve=0; 317 G4int Nve=0; 318 318 319 // Current limitation to gold 319 // Current limitation to gold 320 if (z!=79){return 0.;} 320 if (z!=79){return 0.;} 321 321 322 if (verboseLevel > 3) 322 if (verboseLevel > 3) 323 { 323 { 324 G4cout << 324 G4cout << 325 "Calling GetNValenceElectron() of G 325 "Calling GetNValenceElectron() of G4DNAQuinnPlasmonExcitationModel" 326 << G4endl; 326 << G4endl; 327 } 327 } 328 328 329 const char *datadir=nullptr; 329 const char *datadir=nullptr; 330 330 331 if(datadir == nullptr) 331 if(datadir == nullptr) 332 { 332 { 333 datadir = G4FindDataDir("G4LEDATA"); 333 datadir = G4FindDataDir("G4LEDATA"); 334 if(datadir == nullptr) 334 if(datadir == nullptr) 335 { 335 { 336 G4Exception("G4DNAQuinnPlasmonExcitatio 336 G4Exception("G4DNAQuinnPlasmonExcitationModel::GetNValenceElectron()" 337 ,"em0002",FatalException, 337 ,"em0002",FatalException, 338 "Enviroment variable G4LEDA 338 "Enviroment variable G4LEDATA not defined"); 339 return 0; 339 return 0; 340 } 340 } 341 } 341 } 342 342 343 std::ostringstream targetfile; 343 std::ostringstream targetfile; 344 targetfile.str(""); 344 targetfile.str(""); 345 targetfile.clear(stringstream::goodbit); 345 targetfile.clear(stringstream::goodbit); 346 targetfile << datadir <<"/dna/atomicstate_Z" 346 targetfile << datadir <<"/dna/atomicstate_Z"<< z <<".dat"; 347 std::ifstream fin(targetfile.str().c_str()); 347 std::ifstream fin(targetfile.str().c_str()); 348 348 349 if(!fin) 349 if(!fin) 350 { 350 { 351 G4cout<< " Error : "<< targetfile.str() << 351 G4cout<< " Error : "<< targetfile.str() <<" is not found "<<endl; 352 G4Exception("G4DNAQuinnPlasmonExcitationMo 352 G4Exception("G4DNAQuinnPlasmonExcitationModel::GetNValenceElectron()" 353 ,"em0003",FatalException, 353 ,"em0003",FatalException, 354 "There is no target file"); 354 "There is no target file"); 355 return 0; 355 return 0; 356 } 356 } 357 357 358 string buff0,buff1,buff2,buff3,buff4,buff5,b 358 string buff0,buff1,buff2,buff3,buff4,buff5,buff6; 359 fin >> buff0 >>buff1>>buff2>>buff3>>buff4>>b 359 fin >> buff0 >>buff1>>buff2>>buff3>>buff4>>buff5>>buff6; 360 360 361 while(true){ 361 while(true){ 362 fin >> buff0 >>buff1>>buff2>>buff3>>buff4> 362 fin >> buff0 >>buff1>>buff2>>buff3>>buff4>>buff5>>buff6; 363 if(!fin.eof()) 363 if(!fin.eof()) 364 { 364 { 365 Nve = stoi(buff3); 365 Nve = stoi(buff3); 366 } 366 } 367 else 367 else 368 { 368 { 369 break; 369 break; 370 } 370 } 371 } 371 } 372 return Nve; 372 return Nve; 373 } 373 } 374 374 375 375