G4DNAMolecularDecayDisplacer Class Reference

#include <G4DNAMolecularDecayDisplacer.hh>

Inheritance diagram for G4DNAMolecularDecayDisplacer:

G4VMolecularDecayDisplacer

Public Member Functions

 G4DNAMolecularDecayDisplacer ()
virtual ~G4DNAMolecularDecayDisplacer ()
virtual std::vector< G4ThreeVectorGetProductsDisplacement (const G4MolecularDecayChannel *) const
virtual G4ThreeVector GetMotherMoleculeDisplacement (const G4MolecularDecayChannel *) const
G4ThreeVector radialDistributionOfElectron () const

Static Public Attributes

static G4DLLIMPORT const DisplacementType Ionisation_DissociationDecay = G4VMolecularDecayDisplacer::AddDisplacement()
static G4DLLIMPORT const DisplacementType A1B1_DissociationDecay = G4VMolecularDecayDisplacer::AddDisplacement()
static G4DLLIMPORT const DisplacementType B1A1_DissociationDecay = G4VMolecularDecayDisplacer::AddDisplacement()
static G4DLLIMPORT const DisplacementType AutoIonisation = G4VMolecularDecayDisplacer::AddDisplacement()
static G4DLLEXPORT const DisplacementType DissociativeAttachment = G4VMolecularDecayDisplacer::AddDisplacement()

Detailed Description

Definition at line 45 of file G4DNAMolecularDecayDisplacer.hh.


Constructor & Destructor Documentation

G4DNAMolecularDecayDisplacer::G4DNAMolecularDecayDisplacer (  ) 

Definition at line 60 of file G4DNAMolecularDecayDisplacer.cc.

00060                                                            :
00061     G4VMolecularDecayDisplacer()
00062 {;}

G4DNAMolecularDecayDisplacer::~G4DNAMolecularDecayDisplacer (  )  [virtual]

Definition at line 64 of file G4DNAMolecularDecayDisplacer.cc.

00065 {;}


Member Function Documentation

G4ThreeVector G4DNAMolecularDecayDisplacer::GetMotherMoleculeDisplacement ( const G4MolecularDecayChannel  )  const [virtual]

Implements G4VMolecularDecayDisplacer.

Definition at line 67 of file G4DNAMolecularDecayDisplacer.cc.

References A1B1_DissociationDecay, AutoIonisation, B1A1_DissociationDecay, DissociativeAttachment, and Ionisation_DissociationDecay.

00068 {
00069     G4int decayType = theDecayChannel -> GetDisplacementType();
00070 
00071     G4double RMSMotherMoleculeDisplacement=0;
00072 
00073     if(decayType == Ionisation_DissociationDecay)
00074     {
00075         RMSMotherMoleculeDisplacement =  2.0 * nanometer ;
00076     }
00077     else if(decayType == A1B1_DissociationDecay)
00078     {
00079         RMSMotherMoleculeDisplacement = 0. * nanometer ;
00080     }
00081     else if(decayType == B1A1_DissociationDecay)
00082     {
00083         RMSMotherMoleculeDisplacement = 0. * nanometer ;
00084     }
00085     else if(decayType == AutoIonisation)
00086     {
00087         RMSMotherMoleculeDisplacement = 2.0 * nanometer ;
00088     }
00089     else if(decayType == DissociativeAttachment)
00090     {
00091         RMSMotherMoleculeDisplacement = 0. * nanometer ;
00092     }
00093 
00094     if(RMSMotherMoleculeDisplacement==0)
00095     {
00096         return G4ThreeVector(0,0,0);
00097     }
00098     G4ThreeVector RandDirection = radialDistributionOfProducts(RMSMotherMoleculeDisplacement);
00099 
00100     return RandDirection;
00101 }

vector< G4ThreeVector > G4DNAMolecularDecayDisplacer::GetProductsDisplacement ( const G4MolecularDecayChannel  )  const [virtual]

Implements G4VMolecularDecayDisplacer.

Definition at line 105 of file G4DNAMolecularDecayDisplacer.cc.

References A1B1_DissociationDecay, AutoIonisation, B1A1_DissociationDecay, G4Electron_aq::Definition(), G4H2::Definition(), G4Hydrogen::Definition(), G4OH::Definition(), G4H3O::Definition(), DissociativeAttachment, G4VMolecularDecayDisplacer::fVerbose, G4cout, G4endl, G4UniformRand, G4Molecule::GetDefinition(), G4MolecularDecayChannel::GetProduct(), Ionisation_DissociationDecay, and radialDistributionOfElectron().

00106 {
00107     G4int nbProducts = theDecayChannel -> GetNbProducts();
00108     vector<G4ThreeVector> theProductDisplacementVector (nbProducts);
00109 
00110     typedef map<const G4MoleculeDefinition*,G4double> RMSmap ;
00111     RMSmap theRMSmap;
00112 
00113     G4int decayType = theDecayChannel -> GetDisplacementType();
00114 
00115     if(decayType == Ionisation_DissociationDecay)
00116     {
00117         if(fVerbose)
00118             G4cout<<"Ionisation_DissociationDecay"<<G4endl;
00119         G4double RdmValue = G4UniformRand();
00120 
00121         if(RdmValue< 0.5)
00122         {
00123             // H3O
00124             theRMSmap[G4H3O::Definition()] = 0.* nanometer;
00125             // OH
00126             theRMSmap[G4OH::Definition()] = 0.8* nanometer;
00127         }
00128         else
00129         {
00130             // H3O
00131             theRMSmap[G4H3O::Definition()] = 0.8* nanometer;
00132             // OH
00133             theRMSmap[G4OH::Definition()] = 0.* nanometer;
00134         }
00135 
00136         for(int i = 0; i < nbProducts ; i++)
00137         {
00138             G4double theRMSDisplacement;
00139             const G4Molecule* product = theDecayChannel->GetProduct(i);
00140             theRMSDisplacement = theRMSmap[product->GetDefinition()];
00141 
00142             if(theRMSDisplacement==0)
00143             {
00144                 theProductDisplacementVector[i] = G4ThreeVector();
00145             }
00146             else
00147             {
00148                 G4ThreeVector RandDirection = radialDistributionOfProducts(theRMSDisplacement);
00149                 theProductDisplacementVector[i] = RandDirection;
00150             }
00151         }
00152     }
00153     else if(decayType == A1B1_DissociationDecay)
00154     {
00155         if(fVerbose)
00156             G4cout<<"A1B1_DissociationDecay"<<G4endl;
00157         G4double theRMSDisplacement = 2.4 * nanometer;
00158         G4ThreeVector RandDirection = radialDistributionOfProducts(theRMSDisplacement);
00159 
00160         for(G4int i =0 ; i < nbProducts ; i++)
00161         {
00162             const G4Molecule* product = theDecayChannel->GetProduct(i);
00163             if(product->GetDefinition()== G4OH::Definition())
00164             {
00165                 theProductDisplacementVector[i] = -1./18.*RandDirection;
00166             }
00167             else if(product->GetDefinition() == G4Hydrogen::Definition())
00168             {
00169                 theProductDisplacementVector[i] = +17./18.*RandDirection;
00170             }
00171         }
00172     }
00173     else if(decayType == B1A1_DissociationDecay)
00174     {
00175         if(fVerbose)
00176             G4cout<<"B1A1_DissociationDecay"<<G4endl;
00177         G4double theRMSDisplacement = 0.8 * nanometer;
00178         G4ThreeVector RandDirection = radialDistributionOfProducts(theRMSDisplacement);
00179 
00180         G4int NbOfOH = 0;
00181         for(G4int i =0 ; i < nbProducts ; i++)
00182         {
00183             const G4Molecule* product = theDecayChannel->GetProduct(i);
00184             if(product->GetDefinition() == G4H2::Definition())
00185             {
00186                 theProductDisplacementVector[i] = -2./18.*RandDirection;
00187             }
00188             else if(product->GetDefinition() == G4OH::Definition())
00189             {
00190                 G4ThreeVector OxygenDisplacement = +16./18.*RandDirection;
00191                 G4double OHRMSDisplacement = 1.1 * nanometer;
00192 
00193                 G4ThreeVector OHDisplacement = radialDistributionOfProducts(OHRMSDisplacement) ;
00194 
00195                 if(NbOfOH==0)
00196                 {
00197                     OHDisplacement = 1./2.*OHDisplacement;
00198                 }
00199                 else
00200                 {
00201                     OHDisplacement = -1./2.*OHDisplacement;
00202                 }
00203 
00204                 theProductDisplacementVector[i]  = OHDisplacement + OxygenDisplacement;
00205 
00206                 NbOfOH ++;
00207             }
00208         }
00209     }
00210     else if(decayType == AutoIonisation)
00211     {
00212         if(fVerbose)
00213             G4cout<<"AutoIonisation"<<G4endl;
00214         G4double RdmValue = G4UniformRand();
00215 
00216         if(RdmValue< 0.5)
00217         {
00218             // H3O
00219             theRMSmap[G4H3O::Definition()] = 0.* nanometer;
00220             // OH
00221             theRMSmap[G4OH::Definition()] = 0.8* nanometer;
00222         }
00223         else
00224         {
00225             // H3O
00226             theRMSmap[G4H3O::Definition()] = 0.8* nanometer;
00227             // OH
00228             theRMSmap[G4OH::Definition()] = 0.* nanometer;
00229         }
00230 
00231         for(G4int i =0 ; i < nbProducts ; i++)
00232         {
00233             G4double theRMSDisplacement;
00234             const G4Molecule* product = theDecayChannel->GetProduct(i);
00235             theRMSDisplacement = theRMSmap[product->GetDefinition()];
00236 
00237             if(theRMSDisplacement==0)
00238             {
00239                 theProductDisplacementVector[i] = G4ThreeVector();
00240             }
00241             else
00242             {
00243                 G4ThreeVector RandDirection = radialDistributionOfProducts(theRMSDisplacement);
00244                 theProductDisplacementVector[i] = RandDirection;
00245             }
00246             if(product->GetDefinition() == G4Electron_aq::Definition())
00247             {
00248                 theProductDisplacementVector[i]=radialDistributionOfElectron();
00249             }
00250         }
00251     }
00252     else if(decayType == DissociativeAttachment)
00253     {
00254         if(fVerbose)
00255             G4cout<<"DissociativeAttachment"<<G4endl;
00256         G4double theRMSDisplacement = 0.8 * nanometer;
00257         G4ThreeVector RandDirection = radialDistributionOfProducts(theRMSDisplacement);
00258 
00259         G4int NbOfOH = 0;
00260         for(G4int i =0 ; i < nbProducts ; i++)
00261         {
00262             const G4Molecule* product = theDecayChannel->GetProduct(i);
00263             if(product->GetDefinition() == G4H2::Definition())
00264             {
00265                 theProductDisplacementVector[i] = -2./18.*RandDirection;
00266             }
00267             else if(product->GetDefinition() == G4OH::Definition())
00268             {
00269                 G4ThreeVector OxygenDisplacement = +16./18.*RandDirection;
00270                 G4double OHRMSDisplacement = 1.1 * nanometer;
00271 
00272                 G4ThreeVector OHDisplacement = radialDistributionOfProducts(OHRMSDisplacement) ;
00273 
00274                 if(NbOfOH==0)
00275                 {
00276                     OHDisplacement = 1./2.*OHDisplacement;
00277                 }
00278                 else
00279                 {
00280                     OHDisplacement = -1./2.*OHDisplacement;
00281                 }
00282 
00283                 theProductDisplacementVector[i]  = OHDisplacement + OxygenDisplacement;
00284 
00285                 NbOfOH ++;
00286             }
00287         }
00288     }
00289 
00290     return theProductDisplacementVector;
00291 }

G4ThreeVector G4DNAMolecularDecayDisplacer::radialDistributionOfElectron (  )  const

Definition at line 345 of file G4DNAMolecularDecayDisplacer.cc.

References G4UniformRand, and G4INCL::Math::pi.

Referenced by GetProductsDisplacement().

00346 {
00347 
00348     G4double sigma = 1./2.;
00349     G4double expectationValue = 1. ;
00350 
00351     G4double XValueForfMax = 1./2.;
00352     G4double fMaxValue = 4. * XValueForfMax *
00353             exp(-2. * XValueForfMax);
00354 
00355     G4double R(-1.);
00356 
00357     do
00358     {
00359         G4double aRandomfValue = fMaxValue*G4UniformRand();
00360 
00361         G4double sign;
00362         if(G4UniformRand() > 0.5)
00363         {
00364             sign = +1;
00365         }
00366         else
00367         {
00368             sign = -1;
00369         }
00370 
00371         R = (expectationValue * G4UniformRand() )+ sign*3*sigma* G4UniformRand();
00372         G4double f = 4* R * exp(- 2. * R);
00373 
00374         if(aRandomfValue < f)
00375         {
00376             break;
00377         }
00378     }
00379     while(1);
00380 
00381     G4double Rnano = R *10* nanometer;
00382 
00383     G4double costheta = (2*G4UniformRand()-1);
00384     G4double theta = acos (costheta);
00385     G4double phi = 2*pi*G4UniformRand();
00386 
00387     G4double xDirection = Rnano*cos(phi)* sin(theta);
00388     G4double yDirection = Rnano*sin(theta)*sin(phi);
00389     G4double zDirection = Rnano*costheta;
00390     G4ThreeVector RandDirection(xDirection, yDirection, zDirection);
00391 
00392     return RandDirection;
00393 }


Field Documentation

const DisplacementType G4DNAMolecularDecayDisplacer::A1B1_DissociationDecay = G4VMolecularDecayDisplacer::AddDisplacement() [static]

Definition at line 63 of file G4DNAMolecularDecayDisplacer.hh.

Referenced by G4EmDNAPhysicsChemistry::ConstructDecayChannels(), GetMotherMoleculeDisplacement(), and GetProductsDisplacement().

const DisplacementType G4DNAMolecularDecayDisplacer::AutoIonisation = G4VMolecularDecayDisplacer::AddDisplacement() [static]

Definition at line 65 of file G4DNAMolecularDecayDisplacer.hh.

Referenced by G4EmDNAPhysicsChemistry::ConstructDecayChannels(), GetMotherMoleculeDisplacement(), and GetProductsDisplacement().

const DisplacementType G4DNAMolecularDecayDisplacer::B1A1_DissociationDecay = G4VMolecularDecayDisplacer::AddDisplacement() [static]

Definition at line 64 of file G4DNAMolecularDecayDisplacer.hh.

Referenced by G4EmDNAPhysicsChemistry::ConstructDecayChannels(), GetMotherMoleculeDisplacement(), and GetProductsDisplacement().

const DisplacementType G4DNAMolecularDecayDisplacer::DissociativeAttachment = G4VMolecularDecayDisplacer::AddDisplacement() [static]

Definition at line 66 of file G4DNAMolecularDecayDisplacer.hh.

Referenced by GetMotherMoleculeDisplacement(), and GetProductsDisplacement().

const DisplacementType G4DNAMolecularDecayDisplacer::Ionisation_DissociationDecay = G4VMolecularDecayDisplacer::AddDisplacement() [static]

Definition at line 62 of file G4DNAMolecularDecayDisplacer.hh.

Referenced by G4EmDNAPhysicsChemistry::ConstructDecayChannels(), GetMotherMoleculeDisplacement(), and GetProductsDisplacement().


The documentation for this class was generated from the following files:
Generated on Mon May 27 17:51:48 2013 for Geant4 by  doxygen 1.4.7