Counting Auger Electrons

Hello All,

I have created a simulation involving a low energy beam incident on a nano particle. I have written some logic to identify the creation process type for each of the secondary particles generated within the nano particle. (below)

---------- Code -------------------------------------------------------------------------------------------

// IF originating in the NP, get the particle type and print creator process:

const G4ParticleDefinition *part = aTrack->GetDefinition();
G4String partType = part->GetParticleName();
const G4String procName = aTrack->GetCreatorProcess()->GetProcessName();
G4cout << "Particle Type: " << partType << " – "<< "Process Type: " << procName << "Particle Energy: " << aTrack->GetKineticEnergy() << G4endl;

---------- end code --------------------------------------------------------------------------------------------------

My problem is, I would like to know which are created from Auger cascades/ atomic deexcitation events specifically (all I see is photo, compt, eIoni…etc). I am wondering if there is any examples of this being done anywhere? OR, if anyone has any clues for how to accomplish this.

Any help is good help!

Thank you,
Nick

Dear Nick,

you can run the simulation with and without atomic de-excitation and see the difference in the energy spectra of the emitted electrons. The second method is to retrieve the kinetic energy of the emitted electrons and see which energies correspond to an atomic transition. I usually use the first method for nanoparticle studies.

Remember to use the following UI commands:
/process/em/fluo true
/process/em/auger true
/process/em/augerCascade true
/process/em/deexcitationIgnoreCut true
Before the /run/initialize
please look at LoweAtomicDeexcitation < Geant4 < TWiki and at TestEM5.

Thank you Guatelli for the response.

If I were to compare the energies with and without the Auger cascade turned on, I would certainly be able to see the difference in say, a radial dose function… but I would have no way of quantifying the number of Auger electrons produced (which is what I am after).

Interestingly enough, I have also been looking at TestEM5, BUT, I cannot seem to figure out how they track the Auger electrons in that example (I see the logic in the stacking action, but I guess I just don’t understand how it is being called (below), sorry for the large code snippet…

//keep primary particle
if (aTrack->GetParentID() == 0) { return fUrgent; }

if(!fIDdefined) {
fIDdefined = true;
fPhotoGamma = G4PhysicsModelCatalog::GetIndex(“phot_fluo”);
fComptGamma = G4PhysicsModelCatalog::GetIndex(“compt_fluo”);
fPhotoAuger = G4PhysicsModelCatalog::GetIndex(“phot_auger”);
fComptAuger = G4PhysicsModelCatalog::GetIndex(“compt_auger”);
fPixeGamma = G4PhysicsModelCatalog::GetIndex(“gammaPIXE”);
fPixeAuger = G4PhysicsModelCatalog::GetIndex(“e-PIXE”);
fElectronDNAGamma = G4PhysicsModelCatalog::GetIndex(“e-_G4DNAIonisation_fluo”);
fElectronDNAAuger = G4PhysicsModelCatalog::GetIndex(“e-_G4DNAIonisation_auger”);
fProtonDNAGamma = G4PhysicsModelCatalog::GetIndex(“proton_G4DNAIonisation_fluo”);
fProtonDNAAuger = G4PhysicsModelCatalog::GetIndex(“proton_G4DNAIonisation_auger”);
fHydrogenDNAGamma = G4PhysicsModelCatalog::GetIndex(“hydrogen_G4DNAIonisation_fluo”);
fHydrogenDNAAuger = G4PhysicsModelCatalog::GetIndex(“hydrogen_G4DNAIonisation_auger”);
fAlphaDNAGamma = G4PhysicsModelCatalog::GetIndex(“alpha_G4DNAIonisation_fluo”);
fAlphaDNAAuger =G4PhysicsModelCatalog::GetIndex(“alpha_G4DNAIonisation_auger”);
fAlphaPlusDNAGamma = G4PhysicsModelCatalog::GetIndex(“alpha+_G4DNAIonisation_fluo”);
fAlphaPlusDNAAuger = G4PhysicsModelCatalog::GetIndex(“alpha+_G4DNAIonisation_auger”);
fHeliumDNAGamma = G4PhysicsModelCatalog::GetIndex(“helium_G4DNAIonisation_fluo”);
fHeliumDNAAuger = G4PhysicsModelCatalog::GetIndex(“helium_G4DNAIonisation_auger”);
fGenericIonDNAGamma = G4PhysicsModelCatalog::GetIndex(“GenericIon_G4DNAIonisation_fluo”);
fGenericIonDNAAuger = G4PhysicsModelCatalog::GetIndex(“GenericIon_G4DNAIonisation_auger”);
}
G4int idx = aTrack->GetCreatorModelID();

//count secondary particles

Run* run = static_cast<Run*>(
G4RunManager::GetRunManager()->GetNonConstCurrentRun());
run->CountParticles(aTrack->GetDefinition());
/*
G4cout << "###StackingAction: new "
<< aTrack->GetDefinition()->GetParticleName()
<< " E(MeV)= " << aTrack->GetKineticEnergy()
<< " " << aTrack->GetMomentumDirection() << G4endl;
*/
//
//energy spectrum of secondaries
//
G4double energy = aTrack->GetKineticEnergy();
G4double loge = (energy > 0.) ? std::log10(energy/CLHEP::MeV) : -100.;
G4double charge = aTrack->GetDefinition()->GetPDGCharge();

if (charge != 0.) {
analysisManager->FillH1(2,energy);
analysisManager->FillH1(4,loge);
if(idx == fPhotoAuger || idx == fComptAuger) {
analysisManager->FillH1(50,energy);
analysisManager->FillH1(52,loge);
} else if(idx == fPixeAuger) {
analysisManager->FillH1(54,energy);
analysisManager->FillH1(56,loge);
} else if(idx == fElectronDNAAuger ||
idx == fProtonDNAAuger ||
idx == fHydrogenDNAAuger ||
idx == fAlphaDNAAuger ||
idx == fAlphaPlusDNAAuger ||
idx == fHeliumDNAAuger ||
idx == fGenericIonDNAAuger) {
analysisManager->FillH1(58,energy);
analysisManager->FillH1(60,loge);
}
}