235 lines
7.5 KiB
C++
Executable File
235 lines
7.5 KiB
C++
Executable File
//
|
|
// ********************************************************************
|
|
// * License and Disclaimer *
|
|
// * *
|
|
// * The Geant4 software is copyright of the Copyright Holders of *
|
|
// * the Geant4 Collaboration. It is provided under the terms and *
|
|
// * conditions of the Geant4 Software License, included in the file *
|
|
// * LICENSE and available at http://cern.ch/geant4/license . These *
|
|
// * include a list of copyright holders. *
|
|
// * *
|
|
// * Neither the authors of this software system, nor their employing *
|
|
// * institutes,nor the agencies providing financial support for this *
|
|
// * work make any representation or warranty, express or implied, *
|
|
// * regarding this software system or assume any liability for its *
|
|
// * use. Please see the license in the file LICENSE and URL above *
|
|
// * for the full disclaimer and the limitation of liability. *
|
|
// * *
|
|
// * This code implementation is the result of the scientific and *
|
|
// * technical work of the GEANT4 collaboration. *
|
|
// * By using, copying, modifying or distributing the software (or *
|
|
// * any work based on the software) you agree to acknowledge its *
|
|
// * use in resulting scientific publications, and indicate your *
|
|
// * acceptance of all terms of the Geant4 Software license. *
|
|
// ********************************************************************
|
|
//
|
|
// Contact: Mathieu Karamitros (kara (AT) cenbg . in2p3 . fr)
|
|
//
|
|
// WARNING : This class is released as a prototype.
|
|
// It might strongly evolve or even disapear in the next releases.
|
|
//
|
|
// ----------------------------------------------------------------------
|
|
// GEANT 4 class implementation file
|
|
//
|
|
// 21 Oct 2009 first implementation by A. Mantero and M.Karamitros
|
|
// Based on prototype of A.Mantero
|
|
// **********************************************************************
|
|
//
|
|
|
|
|
|
#ifndef G4MoleculeDefinition_h
|
|
#define G4MoleculeDefinition_h 1
|
|
|
|
#include "globals.hh"
|
|
#include "G4ParticleDefinition.hh"
|
|
#include "G4ios.hh"
|
|
#include "G4ElectronOccupancy.hh"
|
|
#include "G4MolecularDecayTable.hh"
|
|
#include "G4MolecularDecayChannel.hh"
|
|
#include "G4MoleculeID.hh"
|
|
|
|
// ######################################################################
|
|
// ### Molecule ###
|
|
// ######################################################################
|
|
|
|
class G4MolecularDecayChannel;
|
|
class G4MolecularDecayTable;
|
|
class G4MolecularConfiguration;
|
|
|
|
class G4MoleculeDefinition : public G4ParticleDefinition
|
|
{
|
|
// Class Description
|
|
// This is the base class for all molecules
|
|
// All molecules created are objects of this class.
|
|
|
|
public: //With Description
|
|
G4MoleculeDefinition(const G4String& name,
|
|
G4double mass,
|
|
G4int electronsNumber,
|
|
G4int electronicLevels,
|
|
G4double diffCoeff,
|
|
G4int atomsNumber = -1,
|
|
G4double radius = -1,
|
|
G4double lifetime = -1,
|
|
G4String aType = "",
|
|
G4MoleculeID ID = G4MoleculeID::Create()
|
|
);
|
|
|
|
virtual ~G4MoleculeDefinition();
|
|
|
|
// Set the electronic configuration at ground level
|
|
void SetLevelOccupation(G4int, G4int eNb=2);
|
|
// set the occupation(0(def), 1 or 2) of the level specified
|
|
//(levels numbering starts from 0)
|
|
|
|
//methods to set/get diffusion properties
|
|
inline void SetDiffusionCoefficient(G4double);
|
|
inline G4double GetDiffusionCoefficient() const;
|
|
|
|
inline void SetAtomsNumber(G4int);
|
|
inline G4int GetAtomsNumber() const;
|
|
|
|
inline void SetVanDerVaalsRadius(G4double);
|
|
inline G4double GetVanDerVaalsRadius() const;
|
|
|
|
//°°°°°°°°°°°°°°°°°°°°°°°°
|
|
// Build the decay table
|
|
void AddExcitedState(const G4String&) ;
|
|
const G4String& GetExcitedState(const G4ElectronOccupancy*) const;
|
|
void AddDecayChannel(const G4String&, const G4MolecularDecayChannel*) ;
|
|
void AddeConfToExcitedState(const G4String&,const G4ElectronOccupancy&, double decayTime = 0.);
|
|
|
|
//°°°°°°°°°°°°°°°°°°°°°°°°
|
|
// "Get" methods related to decay
|
|
const std::vector<const G4MolecularDecayChannel*>* GetDecayChannels(const G4ElectronOccupancy*) const;
|
|
const std::vector<const G4MolecularDecayChannel*>* GetDecayChannels(const G4String&) const;
|
|
|
|
//°°°°°°°°°°°°°°°°°°°°°°°°
|
|
// General "Get" methods
|
|
inline const G4ElectronOccupancy* GetGroundStateElectronOccupancy() const;
|
|
inline const G4String& GetName() const;
|
|
inline G4double GetMass() const;
|
|
inline const G4String& GetType() const;
|
|
inline G4int GetNbElectrons() const;
|
|
inline G4int GetNbMolecularShells() const;
|
|
inline const G4MolecularDecayTable* GetDecayTable() const ;
|
|
inline G4MolecularDecayTable* GetDecayTable() ;
|
|
inline G4double GetDecayTime() const;
|
|
|
|
protected :
|
|
G4MoleculeDefinition();
|
|
G4MoleculeDefinition(const G4MoleculeDefinition&);
|
|
|
|
private :
|
|
const G4MoleculeDefinition & operator=(const G4MoleculeDefinition &right);
|
|
|
|
private:
|
|
G4double fMass;
|
|
G4String fType;
|
|
|
|
G4int fNbOfElectrons;
|
|
G4int fNbOfMolecularShells;
|
|
|
|
// Diffusion Coefficient in one medium only
|
|
// Note : For the time being, we will consider only one diffusion
|
|
// coefficient for the all simulation => diffusion in one medium only
|
|
// If the user needs to use the diffusion in different medium,
|
|
// he should contact the developpers/mainteners of this package
|
|
G4double fDiffusionCoefficient;
|
|
|
|
G4int fAtomsNb;
|
|
G4double fVanDerVaalsRadius;
|
|
|
|
G4ElectronOccupancy* fElectronOccupancy;
|
|
G4MolecularDecayTable* fDecayTable;
|
|
};
|
|
|
|
|
|
inline void G4MoleculeDefinition::SetDiffusionCoefficient(G4double value)
|
|
{
|
|
fDiffusionCoefficient = value;
|
|
}
|
|
|
|
inline G4double G4MoleculeDefinition::GetDiffusionCoefficient() const
|
|
{
|
|
return fDiffusionCoefficient;
|
|
}
|
|
|
|
inline G4double G4MoleculeDefinition::GetDecayTime() const
|
|
{
|
|
return GetPDGLifeTime();
|
|
}
|
|
|
|
inline void G4MoleculeDefinition::SetAtomsNumber(G4int val)
|
|
{
|
|
fAtomsNb = val;
|
|
}
|
|
|
|
inline G4int G4MoleculeDefinition::GetAtomsNumber() const
|
|
{
|
|
return fAtomsNb;
|
|
}
|
|
|
|
inline void G4MoleculeDefinition::SetVanDerVaalsRadius(G4double val)
|
|
{
|
|
fVanDerVaalsRadius = val;
|
|
}
|
|
|
|
inline G4double G4MoleculeDefinition::GetVanDerVaalsRadius() const
|
|
{
|
|
return fVanDerVaalsRadius;
|
|
}
|
|
|
|
inline const G4ElectronOccupancy* G4MoleculeDefinition::GetGroundStateElectronOccupancy() const
|
|
{
|
|
return fElectronOccupancy;
|
|
}
|
|
|
|
inline const G4String& G4MoleculeDefinition::GetName() const
|
|
{
|
|
|
|
return GetParticleName();
|
|
}
|
|
|
|
inline G4double G4MoleculeDefinition::GetMass() const
|
|
{
|
|
return fMass;
|
|
}
|
|
|
|
inline const G4String& G4MoleculeDefinition::GetType() const
|
|
{
|
|
|
|
return GetParticleSubType();
|
|
}
|
|
|
|
inline G4int G4MoleculeDefinition::GetNbElectrons() const
|
|
{
|
|
|
|
return fNbOfElectrons;
|
|
}
|
|
|
|
inline G4int G4MoleculeDefinition::GetNbMolecularShells() const
|
|
{
|
|
|
|
return fNbOfMolecularShells;
|
|
}
|
|
|
|
inline const G4MolecularDecayTable* G4MoleculeDefinition::GetDecayTable() const
|
|
{
|
|
return fDecayTable;
|
|
}
|
|
|
|
inline G4MolecularDecayTable* G4MoleculeDefinition::GetDecayTable()
|
|
{
|
|
return fDecayTable;
|
|
}
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|