Can't find metastable 99mTc

Hello dear Geant4 experts,

I write a simulation of 100Mo(p, x)Y, particularly 100Mo(p, 2n)99mTc nuclear reaction on a cyclotron solid target. But there is a problem: Geant4 does not see this isomeric state of 99Tc, it gives me only the ground state 99Tc with half-life of 9.61096e+21 sec, which probably indicates the stability of the nucleus. However, I need exactly the metastable 99mTc. I tried to use:
G4IonTable::GetIonTable()->GetIon(43, 99, 0, G4Ions::G4FloatLevelBase::plus_X), but it didn’t help, the produced isotope is still in ground state.

What would you suggest me to do in order to find the 99mTc?

Many thanks,
Ihor

What physics lists are you using? I imagine that the Activation example will be extremely helpful here.

@jrellin
Currently, I use G4HadronPhysicsQGSP_BERT and also radioactive decay; I also tried all commented options, for instance for G4HadronPhysicsQGSP_BIC no 99Tc was produced, only 100Tc

The constructor of physics list is:

MolybdenumPhysicsListGeneral::MolybdenumPhysicsListGeneral() : G4VModularPhysicsList() {
    G4PhysListUtil::InitialiseParameters();
    G4NuclideTable::GetInstance()->SetMeanLifeThreshold(1 * CLHEP::picosecond);
    G4NuclideTable::GetInstance()->SetLevelTolerance(1.0 * CLHEP::eV);
    G4LossTableManager::Instance();
    G4DeexPrecoParameters* deex = G4NuclearLevelData::GetInstance()->GetParameters();
    deex->SetCorrelatedGamma(false);
    deex->SetStoreAllLevels(true);
    deex->SetIsomerProduction(true);
    // deex->SetInternalConversionFlag(true);
    deex->SetDiscreteExcitationFlag(true);
    deex->SetMaxLifeTime(1 * CLHEP::picosecond);

    // electromagnetic physics
    RegisterPhysics(new G4EmStandardPhysics_option3(1));


    // RegisterPhysics(new G4HadronPhysicsQGSP_BIC(1));
    // hadron inelastic physics
    RegisterPhysics(new G4HadronPhysicsQGSP_BERT(1));
    // RegisterPhysics(new G4HadronPhysicsFTFP_BERT_HP());
    // RegisterPhysics(new G4HadronPhysicsQGSP_BIC_AllHP());
    // RegisterPhysics(new G4HadronInelasticQBBC_ABLA(1));

    // // hadron elastic physics
    // RegisterPhysics(new G4HadronElasticPhysicsHP(1));
    //
    // // ion elastic physics
    // RegisterPhysics(new G4IonElasticPhysics(1));
    //
    //
    // // ion inelastic physics
    // RegisterPhysics(new G4IonPhysicsXS(1));
    //
    //
    // // stopping physics
    // RegisterPhysics(new G4StoppingPhysics(1));


    // gamma-nuclear physics
    // RegisterPhysics(new GammaNuclearPhysics("gamma"));


    // decay physics
    RegisterPhysics(new G4DecayPhysics(1));


    // radioactive decay physics
    RegisterPhysics(new G4RadioactiveDecayPhysics(1));


    // EM physics list
    // electromagnetic_physics_list_ = new G4EmStandardPhysics_option3(1);
    // hadron_physics_list_          = new G4HadronPhysicsQGSP_BIC_AllHP(1);
}

Here, a macro for example Hadr03 and its printout.
In PhysicsList.cc, I used G4HadronPhysicsQGSP_BIC

You can see that 2376 Tc99 [142.684] are produced, for 10000 inelastic collisions
imelnyk.mac.txt (260 Bytes)
imelnyk.out.txt (4.2 KB)

with example rdecay01, you can check that Tc99 [142.684] is metastable
Tc99m.mac.txt (286 Bytes)

@maire1 Thanks a lot :grinning:! I will try and report the results

@maire1 and others, thanks for the advice, I managed to produce 99mTc nucleus following a similar approach as Hadr03 example suggest, but there is an enormous life time retrieved from PDG data. I use:
const G4double half_life = track->GetParticleDefinition()->GetPDGLifeTime();
and get 31197010000000 seconds I guess. What might be wrong there? I attached the output json-format file with produced isotopes within an event of 300,000 protons. My current goal is to calculate the activities of produced isotopes.

Activities.json.txt (9.6 KB)

Thanks for your help!

Ihor

That’s not the “half life,” it’s the exponential lifetime: dN/dt = exp(-t/LifeTime). That’s more useful for the code, and is consistent with how we deal with particle lifetimes. Half life = LifeTime * log(2).

If that’s just the numeric value, it’s probably in nanoseconds (Geant4’s internal time unit). If you want to know the lifetime in seconds, you should print

  G4cout << "lifetime = " << life_time/second << " s" << G4endl;

Doing both conversions at once, I get a half-life of 218,379 seconds, or 2.53 days. That seems wrong; it should be 36,000 seconds (6 hours).

I think there is a math error somewhere, I just can’t see it. 31197010000000 nanoseconds = 31197 seconds = 8.67 hours

ln(2) * 8.67 hrs = 6 hours which is correct.

My fault, Justin. I miscounted the zeroes at the end! I used “311970”, when it should have been 31197, as you say.

@mkelsey and @jrellin thank you for the explanation and advice! Now it works properly and I got 21624.12 seconds, what is corresponds to about 6 hours, of 99mTc half-life.

Sincerely, Ihor

This topic was automatically closed 7 days after the last reply. New replies are no longer allowed.