- Timestamp:
- Nov 5, 2010, 3:45:55 PM (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/source/processes/electromagnetic/lowenergy/src/G4DNARuddIonisationModel.cc
r1337 r1340 24 24 // ******************************************************************** 25 25 // 26 // $Id: G4DNARuddIonisationModel.cc,v 1. 17 2010/04/07 20:08:31sincerti Exp $27 // GEANT4 tag $Name: geant4-09-04-beta-01$26 // $Id: G4DNARuddIonisationModel.cc,v 1.21 2010/11/04 14:52:17 sincerti Exp $ 27 // GEANT4 tag $Name: emlowen-V09-03-54 $ 28 28 // 29 29 … … 159 159 160 160 lowEnergyLimit[alphaPlusPlus] = lowEnergyLimitForZ2; 161 highEnergyLimit[alphaPlusPlus] = 10. * MeV;161 highEnergyLimit[alphaPlusPlus] = 400. * MeV; 162 162 163 163 // Cross section … … 181 181 182 182 lowEnergyLimit[alphaPlus] = lowEnergyLimitForZ2; 183 highEnergyLimit[alphaPlus] = 10. * MeV;183 highEnergyLimit[alphaPlus] = 400. * MeV; 184 184 185 185 // Cross section … … 202 202 203 203 lowEnergyLimit[helium] = lowEnergyLimitForZ2; 204 highEnergyLimit[helium] = 10. * MeV;204 highEnergyLimit[helium] = 400. * MeV; 205 205 206 206 // Cross section … … 363 363 sigma = table->FindValue(k); 364 364 365 // BEGIN ELECTRON CORRECTION366 // add ONE or TWO electron-water excitation for alpha+ and helium367 368 if ( particleDefinition == instance->GetIon("alpha+")369 ||370 particleDefinition == instance->GetIon("helium")371 )372 {373 374 G4DNACrossSectionDataSet* electronDataset = new G4DNACrossSectionDataSet375 (new G4LogLogInterpolation, eV, (1./3.343e22)*m*m);376 377 electronDataset->LoadData("dna/sigma_ionisation_e_born");378 379 G4double kElectron = k * 0.511/3728;380 381 if ( particleDefinition == instance->GetIon("alpha+") )382 {383 G4double tmp1 = table->FindValue(k) + electronDataset->FindValue(kElectron);384 delete electronDataset;385 if (verboseLevel > 3)386 {387 G4cout << "---> Kinetic energy(eV)=" << k/eV << G4endl;388 G4cout << " - Cross section per water molecule (cm^2)=" << tmp1/cm/cm << G4endl;389 G4cout << " - Cross section per water molecule (cm^-1)=" <<390 tmp1*material->GetAtomicNumDensityVector()[1]/(1./cm) << G4endl;391 }392 return tmp1*material->GetAtomicNumDensityVector()[1];393 }394 395 if ( particleDefinition == instance->GetIon("helium") )396 {397 G4double tmp2 = table->FindValue(k) + 2. * electronDataset->FindValue(kElectron);398 delete electronDataset;399 if (verboseLevel > 3)400 {401 G4cout << "---> Kinetic energy(eV)=" << k/eV << G4endl;402 G4cout << " - Cross section per water molecule (cm^2)=" << tmp2/cm/cm << G4endl;403 G4cout << " - Cross section per water molecule (cm^-1)=" << tmp2*404 material->GetAtomicNumDensityVector()[1]/(1./cm) << G4endl;405 }406 return tmp2*material->GetAtomicNumDensityVector()[1];407 }408 }409 410 // END ELECTRON CORRECTION411 365 } 412 366 } … … 489 443 G4ParticleDefinition* definition = particle->GetDefinition(); 490 444 G4ParticleMomentum primaryDirection = particle->GetMomentumDirection(); 445 /* 491 446 G4double particleMass = definition->GetPDGMass(); 492 447 G4double totalEnergy = k + particleMass; 493 448 G4double pSquare = k*(totalEnergy+particleMass); 494 449 G4double totalMomentum = std::sqrt(pSquare); 450 */ 495 451 496 452 G4int ionizationShell = RandomSelect(k,particleName); … … 511 467 deltaDirection.rotateUz(primaryDirection); 512 468 469 // Ignored for ions on electrons 470 /* 513 471 G4double deltaTotalMomentum = std::sqrt(secondaryKinetic*(secondaryKinetic + 2.*electron_mass_c2 )); 514 472 … … 525 483 526 484 fParticleChangeForGamma->ProposeMomentumDirection(direction.unit()) ; 485 */ 486 fParticleChangeForGamma->ProposeMomentumDirection(primaryDirection); 487 527 488 fParticleChangeForGamma->SetProposedKineticEnergy(k-bindingEnergy-secondaryKinetic); 528 489 fParticleChangeForGamma->ProposeLocalEnergyDeposit(bindingEnergy); … … 575 536 } 576 537 538 577 539 G4double secElecKinetic = 0.; 578 540 … … 616 578 617 579 phi = twopi * G4UniformRand(); 618 cosTheta = std::sqrt(secKinetic / maxSecKinetic); 580 581 //cosTheta = std::sqrt(secKinetic / maxSecKinetic); 582 583 // Restriction below 100 eV from Emfietzoglou (2000) 584 585 if (secKinetic>100*eV) cosTheta = std::sqrt(secKinetic / maxSecKinetic); 586 else cosTheta = (2.*G4UniformRand())-1.; 587 619 588 } 620 589 … … 656 625 G4double alphaConst ; 657 626 658 const G4double Bj[5] = {12.61*eV, 14.73*eV, 18.55*eV, 32.20*eV, 539.7*eV}; 627 // const G4double Bj[5] = {12.61*eV, 14.73*eV, 18.55*eV, 32.20*eV, 539.7*eV}; 628 // The following values are provided by M. dingfelder (priv. comm) 629 const G4double Bj[5] = {12.60*eV, 14.70*eV, 18.40*eV, 32.20*eV, 540*eV}; 659 630 660 631 if (j == 4) … … 681 652 E1 = 0.38; 682 653 A2 = 1.07; 683 B2 = 14.6; 654 // Value provided by M. Dingfelder (priv. comm) 655 B2 = 11.6; 656 // 684 657 C2 = 0.60; 685 658 D2 = 0.04; … … 697 670 698 671 G4double w = wBig / Bj[ionizationLevelIndex]; 672 // Note that the following (j==4) cases are provided by M. Dingfelder (priv. comm) 673 if (j==4) w = wBig / waterStructure.IonisationEnergy(ionizationLevelIndex); 674 699 675 G4double Ry = 13.6*eV; 700 676 … … 713 689 tau = (0.511/3728.) * k ; 714 690 } 715 691 716 692 G4double S = 4.*pi * Bohr_radius*Bohr_radius * n * std::pow((Ry/Bj[ionizationLevelIndex]),2); 693 if (j==4) S = 4.*pi * Bohr_radius*Bohr_radius * n * std::pow((Ry/waterStructure.IonisationEnergy(ionizationLevelIndex)),2); 694 717 695 G4double v2 = tau / Bj[ionizationLevelIndex]; 696 if (j==4) v2 = tau / waterStructure.IonisationEnergy(ionizationLevelIndex); 697 718 698 G4double v = std::sqrt(v2); 719 699 G4double wc = 4.*v2 - 2.*v - (Ry/(4.*Bj[ionizationLevelIndex])); 700 if (j==4) wc = 4.*v2 - 2.*v - (Ry/(4.*waterStructure.IonisationEnergy(ionizationLevelIndex))); 720 701 721 702 G4double L1 = (C1* std::pow(v,(D1))) / (1.+ E1*std::pow(v, (D1+4.))); … … 731 712 * ( (F1+w*F2) / ( std::pow((1.+w),3) * ( 1.+std::exp(alphaConst*(w-wc)/v))) ); 732 713 714 if (j==4) sigma = CorrectionFactor(particleDefinition, k) 715 * Gj[j] * (S/waterStructure.IonisationEnergy(ionizationLevelIndex)) 716 * ( (F1+w*F2) / ( std::pow((1.+w),3) * ( 1.+std::exp(alphaConst*(w-wc)/v))) ); 717 733 718 if ( (particleDefinition == instance->GetIon("hydrogen")) && (ionizationLevelIndex==4)) 734 719 735 sigma = Gj[j] * (S/Bj[ionizationLevelIndex]) 720 // sigma = Gj[j] * (S/Bj[ionizationLevelIndex]) 721 sigma = Gj[j] * (S/waterStructure.IonisationEnergy(ionizationLevelIndex)) 736 722 * ( (F1+w*F2) / ( std::pow((1.+w),3) * ( 1.+std::exp(alphaConst*(w-wc)/v))) ); 737 723 … … 756 742 { 757 743 slaterEffectiveCharge[0]=2.0; 758 slaterEffectiveCharge[1]=1.15; 759 slaterEffectiveCharge[2]=1.15; 744 // The following values are provided by M. Dingfelder (priv. comm) 745 slaterEffectiveCharge[1]=2.0; 746 slaterEffectiveCharge[2]=2.0; 747 // 760 748 sCoefficient[0]=0.7; 761 749 sCoefficient[1]=0.15; … … 780 768 sigma = Gj[j] * (S/Bj[ionizationLevelIndex]) * ( (F1+w*F2) / ( std::pow((1.+w),3) * ( 1.+std::exp(alphaConst*(w-wc)/v))) ); 781 769 770 if (j==4) sigma = Gj[j] * (S/waterStructure.IonisationEnergy(ionizationLevelIndex)) 771 * ( (F1+w*F2) / ( std::pow((1.+w),3) * ( 1.+std::exp(alphaConst*(w-wc)/v))) ); 772 782 773 G4double zEff = particleDefinition->GetPDGCharge() / eplus + particleDefinition->GetLeptonNumber(); 783 774 … … 852 843 853 844 G4double tElectron = 0.511/3728. * t; 854 G4double value = 2. * tElectron * slaterEffectiveChg / (energyTransferred * shellNumber); 845 // The following values are provided by M. Dingfelder (priv. comm) 846 G4double H = 2.*13.60569172 * eV; 847 G4double value = std::sqrt ( 2. * tElectron / H ) / ( energyTransferred / H ) * (slaterEffectiveChg/shellNumber); 855 848 856 849 return value; … … 872 865 { 873 866 G4double value = (std::log10(k/eV)-4.2)/0.5; 874 return((0.8/(1+std::exp(value))) + 0.9); 867 // The following values are provided by M. Dingfelder (priv. comm) 868 return((0.6/(1+std::exp(value))) + 0.9); 875 869 } 876 870 else … … 891 885 G4DNAGenericIonsManager *instance; 892 886 instance = G4DNAGenericIonsManager::Instance(); 893 G4double kElectron(0);894 895 G4DNACrossSectionDataSet * electronDataset = new G4DNACrossSectionDataSet (new G4LogLogInterpolation, eV, (1./3.343e22)*m*m);896 887 897 if ( particle == instance->GetIon("alpha+")->GetParticleName()898 ||899 particle == instance->GetIon("helium")->GetParticleName()900 )901 {902 electronDataset->LoadData("dna/sigma_ionisation_e_born");903 904 kElectron = k * 0.511/3728;905 906 }907 908 // END PART 1/2 OF ELECTRON CORRECTION909 910 888 G4int level = 0; 911 889 … … 931 909 i--; 932 910 valuesBuffer[i] = table->GetComponent(i)->FindValue(k); 933 934 // BEGIN PART 2/2 OF ELECTRON CORRECTION935 // Use only electron partial cross sections936 937 if (particle == instance->GetIon("alpha+")->GetParticleName())938 {valuesBuffer[i]=table->GetComponent(i)->FindValue(k) + electronDataset->GetComponent(i)->FindValue(kElectron); }939 940 if (particle == instance->GetIon("helium")->GetParticleName())941 {valuesBuffer[i]=table->GetComponent(i)->FindValue(k) + 2*electronDataset->GetComponent(i)->FindValue(kElectron); }942 943 // BEGIN PART 2/2 OF ELECTRON CORRECTION944 945 911 value += valuesBuffer[i]; 946 912 } … … 958 924 { 959 925 delete[] valuesBuffer; 960 961 if (electronDataset) delete electronDataset;962 963 926 return i; 964 927 } … … 975 938 } 976 939 977 delete electronDataset;978 979 940 return level; 980 941 }
Note: See TracChangeset
for help on using the changeset viewer.