G4EmDNAPhysicsChemistry.cc

Go to the documentation of this file.
00001 //
00002 // ********************************************************************
00003 // * License and Disclaimer                                           *
00004 // *                                                                  *
00005 // * The  Geant4 software  is  copyright of the Copyright Holders  of *
00006 // * the Geant4 Collaboration.  It is provided  under  the terms  and *
00007 // * conditions of the Geant4 Software License,  included in the file *
00008 // * LICENSE and available at  http://cern.ch/geant4/license .  These *
00009 // * include a list of copyright holders.                             *
00010 // *                                                                  *
00011 // * Neither the authors of this software system, nor their employing *
00012 // * institutes,nor the agencies providing financial support for this *
00013 // * work  make  any representation or  warranty, express or implied, *
00014 // * regarding  this  software system or assume any liability for its *
00015 // * use.  Please see the license in the file  LICENSE  and URL above *
00016 // * for the full disclaimer and the limitation of liability.         *
00017 // *                                                                  *
00018 // * This  code  implementation is the result of  the  scientific and *
00019 // * technical work of the GEANT4 collaboration.                      *
00020 // * By using,  copying,  modifying or  distributing the software (or *
00021 // * any work based  on the software)  you  agree  to acknowledge its *
00022 // * use  in  resulting  scientific  publications,  and indicate your *
00023 // * acceptance of all terms of the Geant4 Software license.          *
00024 // ********************************************************************
00025 //
00026 #include "G4EmDNAPhysicsChemistry.hh"
00027 
00028 #include "G4PhysicalConstants.hh"
00029 #include "G4SystemOfUnits.hh"
00030 
00031 #include "G4DNAMolecularDecayDisplacer.hh"
00032 #include "G4DNAChemistryManager.hh"
00033 #include "G4DNAWaterExcitationStructure.hh"
00034 #include "G4ProcessManager.hh"
00035 
00036 #include "G4DNAGenericIonsManager.hh"
00037 
00038 // *** Processes and models for Geant4-DNA
00039 
00040 #include "G4DNAElastic.hh"
00041 #include "G4DNAChampionElasticModel.hh"
00042 #include "G4DNAScreenedRutherfordElasticModel.hh"
00043 #include "G4DNAElectronSolvatation.hh"
00044 
00045 #include "G4DNAExcitation.hh"
00046 #include "G4DNAAttachment.hh"
00047 #include "G4DNAVibExcitation.hh"
00048 #include "G4DNAIonisation.hh"
00049 #include "G4DNAChargeDecrease.hh"
00050 #include "G4DNAChargeIncrease.hh"
00051 
00052 #include "G4DNAMolecularDecay.hh"
00053 #include "G4DNABrownianTransportation.hh"
00054 #include "G4DNAMolecularReactionTable.hh"
00055 #include "G4DNAMolecularStepByStepModel.hh"
00056 #include "G4VDNAReactionModel.hh"
00057 
00058 // particles
00059 
00060 #include "G4Electron.hh"
00061 #include "G4Proton.hh"
00062 #include "G4GenericIon.hh"
00063 
00064 #include "G4H2O.hh"
00065 #include "G4H2.hh"
00066 #include "G4Hydrogen.hh"
00067 #include "G4OH.hh"
00068 #include "G4H3O.hh"
00069 #include "G4Electron_aq.hh"
00070 #include "G4H2O2.hh"
00071 
00072 // Warning : the following is needed in order to use EM Physics builders
00073 // e+
00074 #include "G4Positron.hh"
00075 #include "G4eMultipleScattering.hh"
00076 #include "G4UrbanMscModel95.hh"
00077 #include "G4eIonisation.hh"
00078 #include "G4eBremsstrahlung.hh"
00079 #include "G4eplusAnnihilation.hh"
00080 // gamma
00081 #include "G4Gamma.hh"
00082 #include "G4PhotoElectricEffect.hh"
00083 #include "G4LivermorePhotoElectricModel.hh"
00084 #include "G4ComptonScattering.hh"
00085 #include "G4LivermoreComptonModel.hh"
00086 #include "G4GammaConversion.hh"
00087 #include "G4LivermoreGammaConversionModel.hh"
00088 #include "G4RayleighScattering.hh"
00089 #include "G4LivermoreRayleighModel.hh"
00090 // end of warning
00091 
00092 #include "G4LossTableManager.hh"
00093 #include "G4UAtomicDeexcitation.hh"
00094 #include "G4PhysicsListHelper.hh"
00095 #include "G4BuilderType.hh"
00096 
00097 // factory
00098 #include "G4PhysicsConstructorFactory.hh"
00099 //
00100 G4_DECLARE_PHYSCONSTR_FACTORY(G4EmDNAPhysicsChemistry);
00101 
00102 using namespace std;
00103 
00104 G4EmDNAPhysicsChemistry::G4EmDNAPhysicsChemistry(G4int ver)
00105     : G4VPhysicsConstructor("G4EmDNAPhysicsChemistry"), verbose(ver)
00106 {
00107     SetPhysicsType(bElectromagnetic);
00108 }
00109 
00110 G4EmDNAPhysicsChemistry::~G4EmDNAPhysicsChemistry()
00111 {
00118     G4DNAChemistryManager::DeleteInstance();
00119 }
00120 
00121 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
00122 
00123 void G4EmDNAPhysicsChemistry::ConstructParticle()
00124 {
00125     // bosons
00126     G4Gamma::Gamma();
00127 
00128     // leptons
00129     G4Electron::Electron();
00130     G4Positron::Positron();
00131 
00132     // baryons
00133     G4Proton::Proton();
00134 
00135     G4GenericIon::GenericIonDefinition();
00136 
00137     G4DNAGenericIonsManager * genericIonsManager;
00138     genericIonsManager=G4DNAGenericIonsManager::Instance();
00139     genericIonsManager->GetIon("alpha++");
00140     genericIonsManager->GetIon("alpha+");
00141     genericIonsManager->GetIon("helium");
00142     genericIonsManager->GetIon("hydrogen");
00143 }
00144 void G4EmDNAPhysicsChemistry::ConstructMolecules()
00145 {
00146     //-----------------------------------
00147     // Create the definition
00148     G4H2O::Definition();
00149     G4Hydrogen::Definition();
00150     G4H3O::Definition();
00151     G4OH::Definition();
00152     G4Electron_aq::Definition();
00153     G4H2O2::Definition();
00154     G4H2::Definition();
00155 
00156     ConstructDecayChannels() ;
00157 }
00158 
00159 void G4EmDNAPhysicsChemistry::ConstructDecayChannels()
00160 {
00161     //-----------------------------------
00162     //Create the dynamic objects
00163     G4Molecule * H3O = new G4Molecule(G4H3O::Definition());
00164     H3O -> RemoveElectron(4,1);
00165 
00166     G4Molecule * OH = new G4Molecule(G4OH::Definition());
00167     G4Molecule * e_aq = new G4Molecule(G4Electron_aq::Definition());
00168 
00169     G4Molecule * H = new G4Molecule(G4Hydrogen::Definition());
00170     G4Molecule * H2 = new G4Molecule(G4H2::Definition());
00171 
00172     G4Molecule* OHm = new G4Molecule(G4OH::Definition());
00173     OHm->AddElectron(3);
00174     OHm->SetMass(17.0079*g/Avogadro * c_squared);
00175     OHm->SetDiffusionCoefficient(5.0e-9*(m2/s));
00176 
00177     //-------------------------------------
00178     //Define the decay channels
00179     G4MoleculeDefinition* water = G4H2O::Definition();
00180     G4MolecularDecayChannel* decCh1;
00181     G4MolecularDecayChannel* decCh2;
00182 
00183     G4ElectronOccupancy* occ = new G4ElectronOccupancy(*(water->GetGroundStateElectronOccupancy()));
00184 
00186     //            EXCITATIONS                               //
00188     G4DNAWaterExcitationStructure waterExcitation;
00189     //--------------------------------------------------------
00190     //---------------Excitation on the fifth layer------------
00191 
00192     decCh1 = new G4MolecularDecayChannel("A^1B_1_Relaxation");
00193     decCh2 = new G4MolecularDecayChannel("A^1B_1_DissociativeDecay");
00194     //Decay 1 : OH + H
00195     decCh1->SetEnergy(waterExcitation.ExcitationEnergy(0));
00196     decCh1->SetProbability(0.35);
00197     decCh1 -> SetDisplacementType(G4DNAMolecularDecayDisplacer::NoDisplacement);
00198 
00199     decCh2->AddProduct(OH);
00200     decCh2->AddProduct(H);
00201     decCh2->SetProbability(0.65);
00202     decCh2 -> SetDisplacementType(G4DNAMolecularDecayDisplacer::A1B1_DissociationDecay);
00203 
00204     water->AddExcitedState("A^1B_1");
00205     water->AddDecayChannel("A^1B_1",decCh1);
00206     water->AddDecayChannel("A^1B_1",decCh2);
00207 
00208     occ->RemoveElectron(4,1); // this is the transition form ground state to
00209     occ->AddElectron(5,1);  // the first unoccupied orbital: A^1B_1
00210 
00211     water->AddeConfToExcitedState("A^1B_1", *occ);
00212 
00213     //--------------------------------------------------------
00214     //---------------Excitation on the fourth layer-----------
00215     decCh1 = new G4MolecularDecayChannel("B^1A_1_Relaxation_Channel");
00216     decCh2 = new G4MolecularDecayChannel("B^1A_1_DissociativeDecay");
00217     G4MolecularDecayChannel* decCh3 = new G4MolecularDecayChannel("B^1A_1_AutoIonisation_Channel");
00218 
00219     water->AddExcitedState("B^1A_1");
00220 
00221     //Decay 1 : energy
00222     decCh1->SetEnergy(waterExcitation.ExcitationEnergy(1));
00223     decCh1->SetProbability(0.3);
00224 
00225     //Decay 2 : 2OH + H_2
00226     decCh2->AddProduct(H2);
00227     decCh2->AddProduct(OH);
00228     decCh2->AddProduct(OH);
00229     decCh2->SetProbability(0.15);
00230     decCh2->SetDisplacementType(G4DNAMolecularDecayDisplacer::B1A1_DissociationDecay);
00231 
00232     //Decay 3 : OH + H_3Op + e_aq
00233     decCh3->AddProduct(OH);
00234     decCh3->AddProduct(H3O);
00235     decCh3->AddProduct(e_aq);
00236     decCh3->SetProbability(0.55);
00237     decCh3->SetDisplacementType(G4DNAMolecularDecayDisplacer::AutoIonisation);
00238 
00239     *occ = *(water->GetGroundStateElectronOccupancy());
00240     occ->RemoveElectron(3); // this is the transition form ground state to
00241     occ->AddElectron(5,1);  // the first unoccupied orbital: B^1A_1
00242 
00243     water->AddeConfToExcitedState("B^1A_1", *occ);
00244     water->AddDecayChannel("B^1A_1",decCh1);
00245     water->AddDecayChannel("B^1A_1",decCh2);
00246     water->AddDecayChannel("B^1A_1",decCh3);
00247 
00248     //-------------------------------------------------------
00249     //-------------------Excitation of 3rd layer-----------------
00250     decCh1 = new G4MolecularDecayChannel("Excitation3rdLayer_AutoIonisation_Channel");
00251     decCh2 = new G4MolecularDecayChannel("Excitation3rdLayer_Relaxation_Channel");
00252 
00253     water->AddExcitedState("Excitation3rdLayer");
00254 
00255     //Decay channel 1 : : OH + H_3Op + e_aq
00256     decCh1->AddProduct(OH);
00257     decCh1->AddProduct(H3O);
00258     decCh1->AddProduct(e_aq);
00259 
00260     decCh1->SetProbability(0.5);
00261     decCh1->SetDisplacementType(G4DNAMolecularDecayDisplacer::AutoIonisation);
00262 
00263     //Decay channel 2 : energy
00264     decCh2->SetEnergy(waterExcitation.ExcitationEnergy(2));
00265     decCh2->SetProbability(0.5);
00266 
00267     //Electronic configuration of this decay
00268     *occ = *(water->GetGroundStateElectronOccupancy());
00269     occ->RemoveElectron(2,1);
00270     occ->AddElectron(5,1);
00271 
00272     //Configure the water molecule
00273     water->AddeConfToExcitedState("Excitation3rdLayer", *occ);
00274     water->AddDecayChannel("Excitation3rdLayer",decCh1);
00275     water->AddDecayChannel("Excitation3rdLayer",decCh2);
00276 
00277     //-------------------------------------------------------
00278     //-------------------Excitation of 2nd layer-----------------
00279     decCh1 = new G4MolecularDecayChannel("Excitation2ndLayer_AutoIonisation_Channel");
00280     decCh2 = new G4MolecularDecayChannel("Excitation2ndLayer_Relaxation_Channel");
00281 
00282     water->AddExcitedState("Excitation2ndLayer");
00283 
00284     //Decay Channel 1 : : OH + H_3Op + e_aq
00285     decCh1->AddProduct(OH);
00286     decCh1->AddProduct(H3O);
00287     decCh1->AddProduct(e_aq);
00288 
00289     decCh1->SetProbability(0.5);
00290     decCh1->SetDisplacementType(G4DNAMolecularDecayDisplacer::AutoIonisation);
00291 
00292     //Decay channel 2 : energy
00293     decCh2->SetEnergy(waterExcitation.ExcitationEnergy(3));
00294     decCh2->SetProbability(0.5);
00295 
00296     *occ = *(water->GetGroundStateElectronOccupancy());
00297     occ->RemoveElectron(1,1);
00298     occ->AddElectron(5,1);
00299 
00300     water->AddeConfToExcitedState("Excitation2ndLayer", *occ);
00301     water->AddDecayChannel("Excitation2ndLayer",decCh1);
00302     water->AddDecayChannel("Excitation2ndLayer",decCh2);
00303 
00304     //-------------------------------------------------------
00305     //-------------------Excitation of 1st layer-----------------
00306     decCh1 = new G4MolecularDecayChannel("Excitation1stLayer_AutoIonisation_Channel");
00307     decCh2 = new G4MolecularDecayChannel("Excitation1stLayer_Relaxation_Channel");
00308 
00309     *occ = *(water->GetGroundStateElectronOccupancy());
00310     occ->RemoveElectron(0,1);
00311     occ->AddElectron(5,1);
00312 
00313     water->AddExcitedState("Excitation1stLayer");
00314     water->AddeConfToExcitedState("Excitation1stLayer", *occ);
00315 
00316     //Decay Channel 1 : : OH + H_3Op + e_aq
00317     decCh1->AddProduct(OH);
00318     decCh1->AddProduct(H3O);
00319     decCh1->AddProduct(e_aq);
00320     decCh1->SetProbability(0.5);
00321     decCh1->SetDisplacementType(G4DNAMolecularDecayDisplacer::AutoIonisation);
00322 
00323     //Decay channel 2 : energy
00324     decCh2->SetEnergy(waterExcitation.ExcitationEnergy(4));
00325     decCh2->SetProbability(0.5);
00326     water->AddDecayChannel("Excitation1stLayer",decCh1);
00327     water->AddDecayChannel("Excitation1stLayer",decCh2);
00328 
00330     //                  IONISATION                         //
00332     //--------------------------------------------------------
00333     //------------------- Ionisation -------------------------
00334     water->AddExcitedState("Ionisation");
00335 
00336     decCh1 = new G4MolecularDecayChannel("Ionisation_Channel");
00337 
00338     //Decay Channel 1 : : OH + H_3Op
00339     decCh1->AddProduct(H3O);
00340     decCh1->AddProduct(OH);
00341     decCh1->SetProbability(1);
00342     decCh1->SetDisplacementType(G4DNAMolecularDecayDisplacer::Ionisation_DissociationDecay);
00343 
00344     *occ = *(water->GetGroundStateElectronOccupancy());
00345     occ->RemoveElectron(4,1); // this is a ionized h2O with a hole in its last orbital
00346     water->AddeConfToExcitedState("Ionisation", *occ);
00347 
00348     *occ = *(water->GetGroundStateElectronOccupancy());
00349     occ->RemoveElectron(3,1);
00350     water->AddeConfToExcitedState("Ionisation", *occ);
00351 
00352     *occ = *(water->GetGroundStateElectronOccupancy());
00353     occ->RemoveElectron(2,1);
00354     water->AddeConfToExcitedState("Ionisation", *occ);
00355 
00356     *occ = *(water->GetGroundStateElectronOccupancy());
00357     occ->RemoveElectron(1,1);
00358     water->AddeConfToExcitedState("Ionisation", *occ);
00359 
00360     *occ = *(water->GetGroundStateElectronOccupancy());
00361     occ->RemoveElectron(0,1);
00362     water->AddeConfToExcitedState("Ionisation", *occ);
00363     water->AddDecayChannel("Ionisation",decCh1);
00364     // to this electronic configuration should be associated a decay time of 10e-15 s should the process do it on the dynamic object? the dyn object.
00365 
00367     //            Dissociative Attachment                   //
00369     decCh1 = new G4MolecularDecayChannel("DissociativeAttachment");
00370 
00371     //Decay 1 : 2OH + H_2
00372     decCh1->AddProduct(H2);
00373     decCh1->AddProduct(OHm);
00374     decCh1->AddProduct(OH);
00375     decCh1->SetProbability(1);
00376     //decCh1->SetDisplacementType(G4DNAMolecularDecayDisplacer::DissociativeAttachment);
00377 
00378     *occ = *(water->GetGroundStateElectronOccupancy());
00379     occ->AddElectron(5,1); // H_2O^-
00380     water->AddExcitedState("DissociativeAttachment");
00381     water->AddeConfToExcitedState("DissociativeAttachment", *occ);
00382     water->AddDecayChannel("DissociativeAttachment",decCh1);
00383 
00384     delete occ;
00385 }
00386 
00387 void G4EmDNAPhysicsChemistry::ConstructReactionTable()
00388 {
00389     G4DNAMolecularReactionTable* theReactionTable = G4DNAMolecularReactionTable::GetReactionTable();
00390 
00391     G4Molecule* OHm = new G4Molecule(G4OH::Definition());
00392     OHm->AddElectron(3);
00393     OHm->SetMass(17.0079*g/Avogadro * c_squared);
00394     OHm->SetDiffusionCoefficient(5.0e-9*(m2/s));
00395     G4Molecule* OH = new G4Molecule(G4OH::Definition());
00396     G4Molecule* e_aq = new G4Molecule(G4Electron_aq::Definition());
00397     G4Molecule* H = new G4Molecule(G4Hydrogen::Definition());
00398     G4Molecule* H3Op = new G4Molecule(G4H3O::Definition());
00399     G4Molecule* H2O2 = new G4Molecule(G4H2O2::Definition());
00400     H3Op->RemoveElectron(4,1);
00401 
00402     G4Molecule* H2 = new G4Molecule(G4H2::Definition());
00403 
00404     //------------------------------------------------------------------
00405     //e_aq + e_aq + 2H2O -> H2 + 2OH-
00406     G4DNAMolecularReactionData* reactionData = new G4DNAMolecularReactionData(0.5e10*(1e-3*m3/(mole*s)), e_aq,e_aq);
00407     reactionData -> AddProduct(OHm);
00408     reactionData -> AddProduct(OHm);
00409     reactionData -> AddProduct(H2);
00410     theReactionTable -> SetReaction(reactionData);
00411     //------------------------------------------------------------------
00412     //e_aq + *OH -> OH-
00413     reactionData = new G4DNAMolecularReactionData(2.95e10*(1e-3*m3/(mole*s)), e_aq, OH);
00414     reactionData->AddProduct(OHm);
00415     theReactionTable -> SetReaction(reactionData);
00416     //------------------------------------------------------------------
00417     //e_aq + H* + H2O -> H2 + OH-
00418     reactionData = new G4DNAMolecularReactionData(2.65e10*(1e-3*m3/(mole*s)), e_aq, H);
00419     reactionData->AddProduct(OHm);
00420     reactionData->AddProduct(H2);
00421     theReactionTable -> SetReaction(reactionData);
00422     //------------------------------------------------------------------
00423     //e_aq + H3O+ -> H* + H2O
00424     reactionData = new G4DNAMolecularReactionData(2.11e10*(1e-3*m3/(mole*s)), e_aq, H3Op);
00425     reactionData->AddProduct(H);
00426     theReactionTable -> SetReaction(reactionData);
00427     //------------------------------------------------------------------
00428     //e_aq + H2O2 -> OH- + *OH
00429     reactionData = new G4DNAMolecularReactionData(1.41e10*(1e-3*m3/(mole*s)), e_aq, H2O2);
00430     reactionData->AddProduct(OHm);
00431     reactionData->AddProduct(OH);
00432     theReactionTable -> SetReaction(reactionData);
00433     //------------------------------------------------------------------
00434     //*OH + *OH -> H2O2
00435     reactionData = new G4DNAMolecularReactionData(0.44e10*(1e-3*m3/(mole*s)), OH, OH);
00436     reactionData->AddProduct(H2O2);
00437     theReactionTable -> SetReaction(reactionData);
00438     //------------------------------------------------------------------
00439     //*OH + *H -> H2O
00440     theReactionTable -> SetReaction(1.44e10*(1e-3*m3/(mole*s)), OH, H);
00441     //------------------------------------------------------------------
00442     //*H + *H -> H2
00443     reactionData = new G4DNAMolecularReactionData(1.20e10*(1e-3*m3/(mole*s)), H, H);
00444     reactionData->AddProduct(H2);
00445     theReactionTable -> SetReaction(reactionData);
00446     //------------------------------------------------------------------
00447     //H3O+ + OH- -> 2H2O
00448     theReactionTable -> SetReaction(1.43e11*(1e-3*m3/(mole*s)), H3Op, OHm);
00449     //------------------------------------------------------------------
00450     //OH + H2 -> H + H2O
00451     reactionData = new G4DNAMolecularReactionData(4.17e7*(1e-3*m3/(mole*s)), OH, H2);
00452     reactionData->AddProduct(H);
00453     theReactionTable -> SetReaction(reactionData);
00454     //------------------------------------------------------------------
00455 }
00456 
00457 void G4EmDNAPhysicsChemistry::ConstructProcess()
00458 {
00459 
00460     ConstructMolecules();
00461     // Is placed outside ConstructParticles to avoid
00462     // the transportation process to be added to the molecules
00463 
00464     G4PhysicsListHelper* ph = G4PhysicsListHelper::GetPhysicsListHelper();
00465 
00466     theParticleIterator->reset();
00467     while( (*theParticleIterator)() )
00468     {
00469         G4ParticleDefinition* particle = theParticleIterator->value();
00470         G4String particleName = particle->GetParticleName();
00471         G4String particleType = particle->GetParticleType();
00472         G4ProcessManager* pmanager = particle->GetProcessManager();
00473 
00474         if (particleName == "e-") {
00475 
00476             // *** Elastic scattering (two alternative models available) ***
00477 
00478             G4DNAElastic* theDNAElasticProcess = new G4DNAElastic("e-_G4DNAElastic");
00479             G4DNAChampionElasticModel * championElasticModel = new G4DNAChampionElasticModel();
00480             championElasticModel->SetKillBelowThreshold(0.*eV);
00481             theDNAElasticProcess->SetModel(championElasticModel);
00482 
00483             // or alternative model
00484             //theDNAElasticProcess->SetModel(new G4DNAScreenedRutherfordElasticModel());
00485 
00486             ph->RegisterProcess(theDNAElasticProcess, particle);
00487 
00488             // *** Excitation ***
00489             ph->RegisterProcess(new G4DNAExcitation("e-_G4DNAExcitation"), particle);
00490 
00491             // *** Ionisation ***
00492             ph->RegisterProcess(new G4DNAIonisation("e-_G4DNAIonisation"), particle);
00493 
00494             // *** Vibrational excitation ***
00495             G4DNAVibExcitation* vibExcitation = new G4DNAVibExcitation("e-_G4DNAVibExcitation");
00496             G4DNASancheExcitationModel* sancheExcitationMod = new G4DNASancheExcitationModel;
00497             vibExcitation -> SetModel(sancheExcitationMod);
00498             sancheExcitationMod->ExtendLowEnergyLimit(0.025*eV);
00499             ph->RegisterProcess(vibExcitation, particle);
00500 
00501             // *** Attachment ***
00502             ph->RegisterProcess(new G4DNAAttachment("e-_G4DNAAttachment"), particle);
00503 
00504             // *** Electron Solvatation ***
00505             ph->RegisterProcess(new G4DNAElectronSolvatation("e-_G4DNAElectronSolvatation"), particle);
00506         } else if ( particleName == "proton" ) {
00507             ph->RegisterProcess(new G4DNAExcitation("proton_G4DNAExcitation"), particle);
00508             ph->RegisterProcess(new G4DNAIonisation("proton_G4DNAIonisation"), particle);
00509             ph->RegisterProcess(new G4DNAChargeDecrease("proton_G4DNAChargeDecrease"), particle);
00510 
00511         } else if ( particleName == "hydrogen" ) {
00512             ph->RegisterProcess(new G4DNAExcitation("hydrogen_G4DNAExcitation"), particle);
00513             ph->RegisterProcess(new G4DNAIonisation("hydrogen_G4DNAIonisation"), particle);
00514             ph->RegisterProcess(new G4DNAChargeIncrease("hydrogen_G4DNAChargeIncrease"), particle);
00515 
00516         } else if ( particleName == "alpha" ) {
00517             ph->RegisterProcess(new G4DNAExcitation("alpha_G4DNAExcitation"), particle);
00518             ph->RegisterProcess(new G4DNAIonisation("alpha_G4DNAIonisation"), particle);
00519             ph->RegisterProcess(new G4DNAChargeDecrease("alpha_G4DNAChargeDecrease"), particle);
00520 
00521         } else if ( particleName == "alpha+" ) {
00522             ph->RegisterProcess(new G4DNAExcitation("alpha+_G4DNAExcitation"), particle);
00523             ph->RegisterProcess(new G4DNAIonisation("alpha+_G4DNAIonisation"), particle);
00524             ph->RegisterProcess(new G4DNAChargeDecrease("alpha+_G4DNAChargeDecrease"), particle);
00525             ph->RegisterProcess(new G4DNAChargeIncrease("alpha+_G4DNAChargeIncrease"), particle);
00526 
00527         } else if ( particleName == "helium" ) {
00528             ph->RegisterProcess(new G4DNAExcitation("helium_G4DNAExcitation"), particle);
00529             ph->RegisterProcess(new G4DNAIonisation("helium_G4DNAIonisation"), particle);
00530             ph->RegisterProcess(new G4DNAChargeIncrease("helium_G4DNAChargeIncrease"), particle);
00531 
00532         }
00533             // Extension to HZE proposed by Z. Francis
00534 
00535         else if ( particleName == "carbon" ) {
00536           ph->RegisterProcess(new G4DNAIonisation("carbon_G4DNAIonisation"), particle);
00537 
00538         } else if ( particleName == "nitrogen" ) {
00539           ph->RegisterProcess(new G4DNAIonisation("nitrogen_G4DNAIonisation"), particle);
00540 
00541         } else if ( particleName == "oxygen" ) {
00542           ph->RegisterProcess(new G4DNAIonisation("oxygen_G4DNAIonisation"), particle);
00543 
00544         } else if ( particleName == "iron" ) {
00545           ph->RegisterProcess(new G4DNAIonisation("iron_G4DNAIonisation"), particle);
00546 
00547         }
00548 
00549         // Warning : the following particles and processes are needed by EM Physics builders
00550         // They are taken from the default Livermore Physics list
00551         // These particles are currently not handled by Geant4-DNA
00552 
00553         // e+
00554 
00555         else if (particleName == "e+") {
00556 
00557             // Identical to G4EmStandardPhysics_option3
00558 
00559             G4eMultipleScattering* msc = new G4eMultipleScattering();
00560             msc->AddEmModel(0, new G4UrbanMscModel95());
00561             msc->SetStepLimitType(fUseDistanceToBoundary);
00562             G4eIonisation* eIoni = new G4eIonisation();
00563             eIoni->SetStepFunction(0.2, 100*um);
00564 
00565             ph->RegisterProcess(msc, particle);
00566             ph->RegisterProcess(eIoni, particle);
00567             ph->RegisterProcess(new G4eBremsstrahlung(), particle);
00568             ph->RegisterProcess(new G4eplusAnnihilation(), particle);
00569 
00570         }else if (particleName == "gamma") {
00571             G4double LivermoreHighEnergyLimit = GeV;
00572 
00573             G4PhotoElectricEffect* thePhotoElectricEffect = new G4PhotoElectricEffect();
00574             G4LivermorePhotoElectricModel* theLivermorePhotoElectricModel =
00575                     new G4LivermorePhotoElectricModel();
00576             theLivermorePhotoElectricModel->SetHighEnergyLimit(LivermoreHighEnergyLimit);
00577             thePhotoElectricEffect->AddEmModel(0, theLivermorePhotoElectricModel);
00578             ph->RegisterProcess(thePhotoElectricEffect, particle);
00579 
00580             G4ComptonScattering* theComptonScattering = new G4ComptonScattering();
00581             G4LivermoreComptonModel* theLivermoreComptonModel =
00582                     new G4LivermoreComptonModel();
00583             theLivermoreComptonModel->SetHighEnergyLimit(LivermoreHighEnergyLimit);
00584             theComptonScattering->AddEmModel(0, theLivermoreComptonModel);
00585             ph->RegisterProcess(theComptonScattering, particle);
00586 
00587             G4GammaConversion* theGammaConversion = new G4GammaConversion();
00588             G4LivermoreGammaConversionModel* theLivermoreGammaConversionModel =
00589                     new G4LivermoreGammaConversionModel();
00590             theLivermoreGammaConversionModel->SetHighEnergyLimit(LivermoreHighEnergyLimit);
00591             theGammaConversion->AddEmModel(0, theLivermoreGammaConversionModel);
00592             ph->RegisterProcess(theGammaConversion, particle);
00593 
00594             G4RayleighScattering* theRayleigh = new G4RayleighScattering();
00595             G4LivermoreRayleighModel* theRayleighModel = new G4LivermoreRayleighModel();
00596             theRayleighModel->SetHighEnergyLimit(LivermoreHighEnergyLimit);
00597             theRayleigh->AddEmModel(0, theRayleighModel);
00598             ph->RegisterProcess(theRayleigh, particle);
00599 
00600         }
00601         else if(particleType == "Molecule" && particleName != "H_{2}O")
00602         {
00603             if  (pmanager==0)
00604             {
00605                 particle->SetProcessManager(new G4ProcessManager(particle));
00606             }
00607 
00608             G4DNABrownianTransportation* brown = new G4DNABrownianTransportation();
00609             ph->RegisterProcess(brown, particle);
00610         }
00611         else if (particleName == "H_{2}O")
00612         {
00613             if  (pmanager==0)
00614             {
00615                 particle->SetProcessManager(new G4ProcessManager(particle));
00616             }
00617 
00618             G4DNAMolecularDecay* decayProcess = new G4DNAMolecularDecay("H2O_DNAMolecularDecay");
00619             decayProcess -> SetDecayDisplacer(particle, new G4DNAMolecularDecayDisplacer);
00620             decayProcess -> SetVerboseLevel(1);
00621             ph->RegisterProcess(decayProcess, particle);
00622 
00623         }
00624 
00625 
00626         // Warning : end of particles and processes are needed by EM Physics builders
00627 
00628     }
00629 
00630     // Deexcitation
00631     //
00632     G4VAtomDeexcitation* de = new G4UAtomicDeexcitation();
00633     G4LossTableManager::Instance()->SetAtomDeexcitation(de);
00634     de->SetFluo(true);
00635 
00636     // Chemistry
00637     ConstructReactionTable();
00638 
00646     G4DNAChemistryManager::Instance()->SetChemistryActivation(true);
00647 }

Generated on Mon May 27 17:48:08 2013 for Geant4 by  doxygen 1.4.7