TGeoMixture cannot distinguish isomers?

Hello everyone,

It appears that different isomers of the same element cannot be added to a TGeoMixture. If two isomers of the same element are added to a mixture, their weights are combined under the first isomer added. As far as I can tell, this occurs because the AddElement functions search for the new element in the previously-defined mixture composition in order to prevent duplicate entries, but they apparently don’t distinguish isomers in this comparison (presumably because it is defined by TGeoElement rather than TGeoElementRN?).

Example code:

void IsomerTest(){
	
	TGeoManager *geom = new TGeoManager("","");
	TGeoElementTable *table = gGeoManager->GetElementTable();	
	TGeoMixture *mix = new TGeoMixture("mix", 3, 10);
	
	TGeoElementRN *iso = table->GetElementRN(131,49,1); // In-131m isomer
	mix->AddElement(iso, 0.33);
	
	TGeoElementRN *iso2 = table->GetElementRN(131,49,0);  // In-131 ground state
	mix->AddElement(iso2, 0.33);
	
	TGeoElementRN *iso3 = table->GetElementRN(131,49,2);  // In-131n isomer
	mix->AddElement(iso3, 0.34);
	
	std::cout << "Making material out of " << iso->GetName() << ", " << iso2->GetName() << ", and " << iso3->GetName() << "." << std::endl;
	std::cout << std::endl;
	std::cout << "ISOTOPE INFORMATION:" << std::endl;
	iso->Print();
	iso2->Print();
	iso3->Print();
	std::cout << std::endl;
	std::cout << "MATERIAL COMPOSITION:" << std::endl;
	mix->Print();

}

Output:

Making material out of 49-In-131m, 49-In-131, and 49-In-131n.

ISOTOPE INFORMATION:

49-In-131m   ENDF=491311; A=131; Z=49; Iso=1; Level=0[MeV]; Dmass=-68.199[MeV]; Hlife=0.35[s]
             J/P=1/2-; Abund=0; Htox=0; Itox=0; Stat=0
Decay modes:
BetaMinus            Diso:  -1 BR:   100.000% Qval: 9.18079

49-In-131    ENDF=491310; A=131; Z=49; Iso=0; Level=0[MeV]; Dmass=-68.199[MeV]; Hlife=0.27[s]
             J/P=(9/2+); Abund=0; Htox=0; Itox=0; Stat=0
Decay modes:
BetaMinus            Diso:   0 BR:    92.892% Qval: 9.18079
BetaMinus+NeutronEm  Diso:   0 BR:     2.200% Qval: 3.97185
BetaMinus            Diso:   1 BR:     4.908% Qval: 8.9408

49-In-131n   ENDF=491312; A=131; Z=49; Iso=2; Level=0[MeV]; Dmass=-68.199[MeV]; Hlife=0.32[s]
             J/P=(21/2+); Abund=0; Htox=0; Itox=0; Stat=0
Decay modes:
BetaMinus            Diso:  -2 BR:    99.000% Qval: 9.18079
BetaMinus+NeutronEm  Diso:  -2 BR:     0.028% Qval: 3.97185
IsoTrans             Diso:  -2 BR:     0.972% Qval: 0

MATERIAL COMPOSITION:
Mixture mix    Aeff=131 Zeff=49 rho=10 radlen=1.01 intlen=17.7756 index=0
   Element #0 : 49-In-131m  Z= 49.00 A=131.00 w= 1.000


Is there an easy way to resolve this issue? This behaviour seems to happen throughout decay processes (I first noticed it due to missing isomers within decay chains, this code is just a simple test to verify), so I don’t think it’s just due to how I am constructing the mixture. But perhaps I am missing something.

Thank you very much,

Katy

ROOT Version: 6.14.06 and 6.22.00
Platform: CentOS 7.5
Compiler: GCC

I guess @agheata can help.

Bump @agheata! I have some codes using ROOT’s Bateman decay processes. This is a significant error if the decay processes are not properly treating the isomers.

Hi, looking into that, I’ve been in vacation.

Indeed, new added elements were checked against existing ones and not added if having the same A and Z, instead the weight was added to the existing element. This will be fixed in this PR: Fix for assembling mixtures made of isomere elements. by agheata · Pull Request #8556 · root-project/root · GitHub

Thank you!

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