in Chemistry/src/DataModel/OrbitalIntegral/OrbitalIntegralExtensions.cs [91:115]
private static IEnumerable<(HermitianFermionTerm, double)> ToOneBodySpinOrbitalTerms(
this OrbitalIntegral orbitalIntegral,
int nOrbitals,
IndexConvention indexConvention)
{
// One-electron orbital integral symmetries
// ij = ji
var pqSpinOrbitals = orbitalIntegral.EnumerateOrbitalSymmetries().EnumerateSpinOrbitals();
var coefficient = orbitalIntegral.Coefficient;
foreach (var pq in pqSpinOrbitals)
{
var pInt = pq[0].ToInt(indexConvention, nOrbitals);
var qInt = pq[1].ToInt(indexConvention, nOrbitals);
if (pInt == qInt)
{
yield return (new HermitianFermionTerm(new[] { pInt, qInt }.ToLadderSequence()), orbitalIntegral.Coefficient);
}
else if (pInt < qInt)
{
yield return (new HermitianFermionTerm(new[] { pInt, qInt }.ToLadderSequence()), 2.0 * orbitalIntegral.Coefficient);
}
}
}