Geant4 Cross Reference |
1 // 2 // ******************************************************************** 3 // * License and Disclaimer * 4 // * * 5 // * The Geant4 software is copyright of the Copyright Holders of * 6 // * the Geant4 Collaboration. It is provided under the terms and * 7 // * conditions of the Geant4 Software License, included in the file * 8 // * LICENSE and available at http://cern.ch/geant4/license . These * 9 // * include a list of copyright holders. * 10 // * * 11 // * Neither the authors of this software system, nor their employing * 12 // * institutes,nor the agencies providing financial support for this * 13 // * work make any representation or warranty, express or implied, * 14 // * regarding this software system or assume any liability for its * 15 // * use. Please see the license in the file LICENSE and URL above * 16 // * for the full disclaimer and the limitation of liability. * 17 // * * 18 // * This code implementation is the result of the scientific and * 19 // * technical work of the GEANT4 collaboration. * 20 // * By using, copying, modifying or distributing the software (or * 21 // * any work based on the software) you agree to acknowledge its * 22 // * use in resulting scientific publications, and indicate your * 23 // * acceptance of all terms of the Geant4 Software license. * 24 // ******************************************************************** 25 // 26 // 27 // Geant4 class G4ChemDissociationChannels 28 // 29 // Author H. Tran 16.12.2022 30 // 31 32 #include "G4ChemDissociationChannels.hh" 33 34 #include "G4DNAWaterDissociationDisplacer.hh" 35 #include "G4DNAWaterExcitationStructure.hh" 36 #include "G4Electron_aq.hh" 37 #include "G4H2.hh" 38 #include "G4H2O.hh" 39 #include "G4H2O2.hh" 40 #include "G4H3O.hh" 41 #include "G4Hydrogen.hh" 42 #include "G4MolecularConfiguration.hh" 43 #include "G4MoleculeTable.hh" 44 #include "G4OH.hh" 45 #include "G4PhysicalConstants.hh" 46 #include "G4SystemOfUnits.hh" 47 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 48 void G4ChemDissociationChannels::ConstructMolecule() 49 { 50 // Create the definition 51 G4H2O::Definition(); 52 G4Hydrogen::Definition(); 53 G4H3O::Definition(); 54 G4OH::Definition(); 55 G4Electron_aq::Definition(); 56 G4H2O2::Definition(); 57 G4H2::Definition(); 58 auto G4OHm = new G4MoleculeDefinition("OH",/*mass*/ 17.00734 * g / Avogadro * c_squared, 59 2.8e-9 * (m * m / s), -1, 60 5, 0.958 * angstrom, // radius 61 2 // number of atoms 62 ); 63 64 auto molTable = G4MoleculeTable::Instance(); 65 66 molTable->CreateConfiguration("H3Op", G4H3O::Definition()); 67 G4MolecularConfiguration* OHm = 68 molTable->CreateConfiguration("OHm", // just a tag to store and retrieve 69 // from G4MoleculeTable 70 G4OHm, 71 -1, // charge 72 5.0e-9 * (m2 / s)); 73 OHm->SetMass(17.0079 * g / Avogadro * c_squared); 74 molTable->CreateConfiguration("°OH", G4OH::Definition()); 75 molTable->CreateConfiguration("e_aq", G4Electron_aq::Definition()); 76 molTable->CreateConfiguration("H", G4Hydrogen::Definition()); 77 molTable->CreateConfiguration("H2", G4H2::Definition()); 78 molTable->CreateConfiguration("H2O2", G4H2O2::Definition()); 79 } 80 81 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 82 83 void G4ChemDissociationChannels::ConstructDissociationChannels() 84 { 85 //----------------------------------- 86 // Get the molecular configuration 87 auto molTable = G4MoleculeTable::Instance(); 88 G4MolecularConfiguration* OH = molTable->GetConfiguration("°OH"); 89 G4MolecularConfiguration* OHm = molTable->GetConfiguration("OHm"); 90 G4MolecularConfiguration* e_aq = molTable->GetConfiguration("e_aq"); 91 G4MolecularConfiguration* H2 = molTable->GetConfiguration("H2"); 92 G4MolecularConfiguration* H3O = molTable->GetConfiguration("H3Op"); 93 G4MolecularConfiguration* H = molTable->GetConfiguration("H"); 94 95 //------------------------------------- 96 // Define the decay channels 97 G4MoleculeDefinition* water = G4H2O::Definition(); 98 G4MolecularDissociationChannel* decCh1; 99 G4MolecularDissociationChannel* decCh2; 100 101 auto occ = new G4ElectronOccupancy(*(water->GetGroundStateElectronOccupancy())); 102 103 ////////////////////////////////////////////////////////// 104 // EXCITATIONS // 105 ////////////////////////////////////////////////////////// 106 G4DNAWaterExcitationStructure waterExcitation; 107 //-------------------------------------------------------- 108 //---------------Excitation on the fifth layer------------ 109 110 decCh1 = new G4MolecularDissociationChannel("A^1B_1_Relax"); 111 decCh2 = new G4MolecularDissociationChannel("A^1B_1_DissociDecay"); 112 // Decay 1 : OH + H 113 decCh1->SetEnergy(waterExcitation.ExcitationEnergy(0)); 114 decCh1->SetProbability(0.35); 115 decCh1->SetDisplacementType(G4DNAWaterDissociationDisplacer::NoDisplacement); 116 117 decCh2->AddProduct(OH); 118 decCh2->AddProduct(H); 119 decCh2->SetProbability(0.65); 120 decCh2->SetDisplacementType(G4DNAWaterDissociationDisplacer::A1B1_DissociationDecay); 121 122 // water->AddExcitedState("A^1B_1"); 123 occ->RemoveElectron(4, 1); // this is the transition form ground state to 124 occ->AddElectron(5, 1); // the first unoccupied orbital: A^1B_1 125 126 water->NewConfigurationWithElectronOccupancy("A^1B_1", *occ); 127 water->AddDecayChannel("A^1B_1", decCh1); 128 water->AddDecayChannel("A^1B_1", decCh2); 129 130 //-------------------------------------------------------- 131 //---------------Excitation on the fourth layer----------- 132 decCh1 = new G4MolecularDissociationChannel("B^1A_1_Relax_Channel"); 133 decCh2 = new G4MolecularDissociationChannel("B^1A_1_DissociDecay"); 134 auto decCh3 = new G4MolecularDissociationChannel("B^1A_1_AutoIoni_Channel"); 135 136 // Decay 1 : energy 137 decCh1->SetEnergy(waterExcitation.ExcitationEnergy(1)); 138 decCh1->SetProbability(0.3); 139 140 // Decay 2 : 2OH + H_2 141 decCh2->AddProduct(H2); 142 decCh2->AddProduct(OH); 143 decCh2->AddProduct(OH); 144 decCh2->SetProbability(0.15); 145 decCh2->SetDisplacementType(G4DNAWaterDissociationDisplacer::B1A1_DissociationDecay); 146 147 // Decay 3 : OH + H_3Op + e_aq 148 decCh3->AddProduct(OH); 149 decCh3->AddProduct(H3O); 150 decCh3->AddProduct(e_aq); 151 decCh3->SetProbability(0.55); 152 decCh3->SetDisplacementType(G4DNAWaterDissociationDisplacer::AutoIonisation); 153 154 *occ = *(water->GetGroundStateElectronOccupancy()); 155 occ->RemoveElectron(3); // this is the transition form ground state to 156 occ->AddElectron(5, 1); // the first unoccupied orbital: B^1A_1 157 158 water->NewConfigurationWithElectronOccupancy("B^1A_1", *occ); 159 water->AddDecayChannel("B^1A_1", decCh1); 160 water->AddDecayChannel("B^1A_1", decCh2); 161 water->AddDecayChannel("B^1A_1", decCh3); 162 163 //------------------------------------------------------- 164 //-------------------Excitation of 3rd layer----------------- 165 decCh1 = new G4MolecularDissociationChannel("Exc3rdLayer_AutoIoni_Channel"); 166 decCh2 = new G4MolecularDissociationChannel("Exc3rdLayer_Relax_Channel"); 167 168 // Decay channel 1 : : OH + H_3Op + e_aq 169 decCh1->AddProduct(OH); 170 decCh1->AddProduct(H3O); 171 decCh1->AddProduct(e_aq); 172 173 decCh1->SetProbability(0.5); 174 decCh1->SetDisplacementType(G4DNAWaterDissociationDisplacer::AutoIonisation); 175 176 // Decay channel 2 : energy 177 decCh2->SetEnergy(waterExcitation.ExcitationEnergy(2)); 178 decCh2->SetProbability(0.5); 179 180 // Electronic configuration of this decay 181 *occ = *(water->GetGroundStateElectronOccupancy()); 182 occ->RemoveElectron(2, 1); 183 occ->AddElectron(5, 1); 184 185 // Configure the water molecule 186 water->NewConfigurationWithElectronOccupancy("Exci3rdLayer", *occ); 187 water->AddDecayChannel("Exci3rdLayer", decCh1); 188 water->AddDecayChannel("Exci3rdLayer", decCh2); 189 190 //------------------------------------------------------- 191 //-------------------Excitation of 2nd layer----------------- 192 decCh1 = new G4MolecularDissociationChannel("Exc2ndLayer_AutoIoni_Channel"); 193 decCh2 = new G4MolecularDissociationChannel("Exc2ndLayer_Relax_Channel"); 194 195 // Decay Channel 1 : : OH + H_3Op + e_aq 196 decCh1->AddProduct(OH); 197 decCh1->AddProduct(H3O); 198 decCh1->AddProduct(e_aq); 199 200 decCh1->SetProbability(0.5); 201 decCh1->SetDisplacementType(G4DNAWaterDissociationDisplacer::AutoIonisation); 202 203 // Decay channel 2 : energy 204 decCh2->SetEnergy(waterExcitation.ExcitationEnergy(3)); 205 decCh2->SetProbability(0.5); 206 207 *occ = *(water->GetGroundStateElectronOccupancy()); 208 occ->RemoveElectron(1, 1); 209 occ->AddElectron(5, 1); 210 211 water->NewConfigurationWithElectronOccupancy("Exci2ndLayer", *occ); 212 water->AddDecayChannel("Exci2ndLayer", decCh1); 213 water->AddDecayChannel("Exci2ndLayer", decCh2); 214 215 //------------------------------------------------------- 216 //-------------------Excitation of 1st layer----------------- 217 decCh1 = new G4MolecularDissociationChannel("Exci1stLayer_AutoIoni_Channel"); 218 decCh2 = new G4MolecularDissociationChannel("Exci1stLayer_Relax_Channel"); 219 220 *occ = *(water->GetGroundStateElectronOccupancy()); 221 occ->RemoveElectron(0, 1); 222 occ->AddElectron(5, 1); 223 224 // Decay Channel 1 : : OH + H_3Op + e_aq 225 decCh1->AddProduct(OH); 226 decCh1->AddProduct(H3O); 227 decCh1->AddProduct(e_aq); 228 decCh1->SetProbability(0.5); 229 decCh1->SetDisplacementType(G4DNAWaterDissociationDisplacer::AutoIonisation); 230 231 // Decay channel 2 : energy 232 decCh2->SetEnergy(waterExcitation.ExcitationEnergy(4)); 233 decCh2->SetProbability(0.5); 234 235 water->NewConfigurationWithElectronOccupancy("Exci1stLayer", *occ); 236 water->AddDecayChannel("Exci1stLayer", decCh1); 237 water->AddDecayChannel("Exci1stLayer", decCh2); 238 239 ///////////////////////////////////////////////////////// 240 // IONISATION // 241 ///////////////////////////////////////////////////////// 242 //-------------------------------------------------------- 243 //------------------- Ionisation ------------------------- 244 245 decCh1 = new G4MolecularDissociationChannel("Ioni_Channel"); 246 247 // Decay Channel 1 : : OH + H_3Op 248 decCh1->AddProduct(H3O); 249 decCh1->AddProduct(OH); 250 decCh1->SetProbability(1); 251 decCh1->SetDisplacementType(G4DNAWaterDissociationDisplacer::Ionisation_DissociationDecay); 252 253 *occ = *(water->GetGroundStateElectronOccupancy()); 254 occ->RemoveElectron(4, 1); 255 // this is a ionized h2O with a hole in its last orbital 256 water->NewConfigurationWithElectronOccupancy("Ioni5", *occ); 257 water->AddDecayChannel("Ioni5", decCh1); 258 259 *occ = *(water->GetGroundStateElectronOccupancy()); 260 occ->RemoveElectron(3, 1); 261 water->NewConfigurationWithElectronOccupancy("Ioni4", *occ); 262 water->AddDecayChannel("Ioni4", new G4MolecularDissociationChannel(*decCh1)); 263 264 *occ = *(water->GetGroundStateElectronOccupancy()); 265 occ->RemoveElectron(2, 1); 266 water->NewConfigurationWithElectronOccupancy("Ioni3", *occ); 267 water->AddDecayChannel("Ioni3", new G4MolecularDissociationChannel(*decCh1)); 268 269 *occ = *(water->GetGroundStateElectronOccupancy()); 270 occ->RemoveElectron(1, 1); 271 water->NewConfigurationWithElectronOccupancy("Ioni2", *occ); 272 water->AddDecayChannel("Ioni2", new G4MolecularDissociationChannel(*decCh1)); 273 274 *occ = *(water->GetGroundStateElectronOccupancy()); 275 occ->RemoveElectron(0, 1); 276 water->NewConfigurationWithElectronOccupancy("Ioni1", *occ); 277 water->AddDecayChannel("Ioni1", new G4MolecularDissociationChannel(*decCh1)); 278 279 ////////////////////////////////////////////////////////// 280 // Dissociative Attachment // 281 ////////////////////////////////////////////////////////// 282 decCh1 = new G4MolecularDissociationChannel("DissociAttachment"); 283 284 // Decay 1 : 2OH + H_2 285 decCh1->AddProduct(H2); 286 decCh1->AddProduct(OHm); 287 decCh1->AddProduct(OH); 288 decCh1->SetProbability(1); 289 decCh1->SetDisplacementType(G4DNAWaterDissociationDisplacer::DissociativeAttachment); 290 291 *occ = *(water->GetGroundStateElectronOccupancy()); 292 occ->AddElectron(5, 1); // H_2O^- 293 water->NewConfigurationWithElectronOccupancy("DissociAttachment", *occ); 294 water->AddDecayChannel("DissociAttachment", decCh1); 295 296 ////////////////////////////////////////////////////////// 297 // Electron-hole recombination // 298 ////////////////////////////////////////////////////////// 299 decCh1 = new G4MolecularDissociationChannel("H2Ovib_DissociDecay1"); 300 decCh2 = new G4MolecularDissociationChannel("H2Ovib_DissociDecay2"); 301 decCh3 = new G4MolecularDissociationChannel("H2Ovib_DissociDecay3"); 302 303 // Decay 1 : 2OH + H_2 304 decCh1->AddProduct(H2); 305 decCh1->AddProduct(OH); 306 decCh1->AddProduct(OH); 307 decCh1->SetProbability(0.15); 308 decCh1->SetDisplacementType(G4DNAWaterDissociationDisplacer::B1A1_DissociationDecay); 309 310 // Decay 2 : OH + H 311 decCh2->AddProduct(OH); 312 decCh2->AddProduct(H); 313 decCh2->SetProbability(0.55); 314 decCh2->SetDisplacementType(G4DNAWaterDissociationDisplacer::A1B1_DissociationDecay); 315 316 // Decay 3 : relaxation 317 decCh3->SetProbability(0.30); 318 319 const auto pH2Ovib = G4H2O::Definition()->NewConfiguration("H2Ovib"); 320 water->AddDecayChannel(pH2Ovib, decCh1); 321 water->AddDecayChannel(pH2Ovib, decCh2); 322 water->AddDecayChannel(pH2Ovib, decCh3); 323 324 delete occ; 325 }