Problem disabling chemistry on a specific volume

Geant4 Version: 11.4.0
Operating System: Ubuntu 24.04.3 LTS
Compiler/Version: gcc 13.3.0
CMake Version: 3.28.3


Dear Gate users,

I’m trying to work with the Geant4-DNA example molcounters (basic). The model is the following : a cell with its nucleus and mitochondria. I added a vesicle with in its inside a cluster of nanoparticles. I moved the source into this cluster. If my nanoparticles cluster is full of G4_WATER I have no problem, but now I want to fix a new material. Since Geant4-DNA, if I understand properly, works only on water, I think a solution is to define a specific region for the cluster for which the chemistry is not activated, only the standard physics. I tried the following which is not working. If someone has an idea how to help me, many thanks!

DetectorConstruction.cc - function that construct the nanoparticles cluster :


void DetectorConstruction::ConstructNanoCluster(G4LogicalVolume* lvVesicle)
{
    const G4double nanoClusterRadius = 100 * nm;
    fNanoClusterRadius = nanoClusterRadius;

    auto solidNanoCluster = new G4Orb("NanoCluster", nanoClusterRadius);
    auto lvNanoCluster = new G4LogicalVolume(
        solidNanoCluster,
        fAGuIX,
        "NanoCluster"
    );

    auto nanoClusterVisAtt = new G4VisAttributes(G4Colour(1.0, 1.0, 0.0, 0.2));
    nanoClusterVisAtt->SetForceSolid(true);
    lvNanoCluster->SetVisAttributes(nanoClusterVisAtt);

    // Tirage aléatoire dans la vésicule
    double u = G4UniformRand();
    double v = G4UniformRand();
    double theta = std::acos(2.0*v - 1.0);
    double phi = 2.0 * CLHEP::pi * u;

    G4double margin = 2 * nm;
    double r = fVesicleRadius - nanoClusterRadius - margin;

    G4ThreeVector localPos(
        r * std::sin(theta) * std::cos(phi),
        r * std::sin(theta) * std::sin(phi),
        r * std::cos(theta)
    );

    fNanoClusterPV = new G4PVPlacement(
        nullptr,
        localPos,
        lvNanoCluster,
        "NanoCluster",
        lvVesicle,
        false,
        0,
        true
    );

    fNanoClusterLocalPosition = localPos;

    // ---- CREATION DE LA REGION SANS CHIMIE ----
    auto nanoClusterRegion = new G4Region("NanoClusterRegion");
    lvNanoCluster->SetRegion(nanoClusterRegion);
    nanoClusterRegion->AddRootLogicalVolume(lvNanoCluster);

}

And PhysicsList.cc - function ConstructProcess :

void PhysicsList::ConstructProcess()
{
    AddTransportation();

    if (fEmDNAPhysicsList) {
        fEmDNAPhysicsList->ConstructProcess();
    }

    if (fEmDNAChemistryList) {
        fEmDNAChemistryList->ConstructProcess();
    }
}

Regards,

Sarah

Dear,

This may not be simple! if you want to isolate a specific volume for chemistry. You will need to define what happens to species at the border of the the volume.

Yes… I tried something else. In my new material I added 10% of water. The simulation works fine, but I have the following warning message :

*** G4Exception : MATERIAL_NOT_DEFINE_USING_ATOM_COUNT
issued by : G4DNAMolecularMaterial::GetDensityTableFor
The material AGuIX_withWater is not defined as a molecular material.
Meaning: The elements should be added to the material using atom count rather than mass fraction (cf. G4Material)
If you want to use DNA processes on liquid water, you should better use the NistManager to create the water material.
Since this message is displayed, it means that the DNA models will not be called.Please note that this message will only appear once even if you are using other methods of G4DNAMolecularMaterial.

*** This is just a warning message. ***

I would like to understand properly what happens in the volume with this material. If the DNA models are not called, why do I see some ROS produced in it ?

#include "Materials.hh"
#include "G4Element.hh"
#include "G4NistManager.hh"
#include "G4SystemOfUnits.hh"
using namespace CLHEP;

G4Material* Materials::CreateAGuIX()
{
    // Création des éléments
    G4Element* elBismuth    = new G4Element("Bismuth",   "Bi", 83, 208.98*g/mole);
    G4Element* elGadolinium = new G4Element("Gadolinium","Gd", 64, 157.25*g/mole);
    G4Element* elSilicon    = new G4Element("Silicon",   "Si", 14, 28.09*g/mole);
    G4Element* elCarbon     = new G4Element("Carbon",    "C",  6, 12.01*g/mole);
    G4Element* elNitrogen   = new G4Element("Nitrogen",  "N",  7, 14.01*g/mole);
    G4Element* elOxygen     = new G4Element("Oxygen",    "O",  8, 16.00*g/mole);
    G4Element* elHydrogen   = new G4Element("Hydrogen",  "H",  1, 1.008*g/mole);

    G4double fractionWater = 0.10; // 10% en masse
    G4double density = 1.45*g/cm3;

    // Fractions initiales
    G4double fBi = 0.091;
    G4double fGd = 0.049;
    G4double fSi = 0.10;
    G4double fC  = 0.25;
    G4double fN  = 0.08;
    G4double fO  = 0.23;
    G4double fH  = 0.20;

    // Normalisation pour exclure la fraction d'eau
    G4double remaining = 1.0 - fractionWater;
    fBi *= remaining;
    fGd *= remaining;
    fSi *= remaining;
    fC  *= remaining;
    fN  *= remaining;
    fO  *= remaining;
    fH  *= remaining;

    // Création du matériau
    G4Material* AGuIX = new G4Material("AGuIX_withWater", density, 8);
    AGuIX->AddElement(elBismuth,    fBi);
    AGuIX->AddElement(elGadolinium, fGd);
    AGuIX->AddElement(elSilicon,    fSi);
    AGuIX->AddElement(elCarbon,     fC);
    AGuIX->AddElement(elNitrogen,   fN);
    AGuIX->AddElement(elOxygen,     fO);
    AGuIX->AddElement(elHydrogen,   fH);

    // Ajout de l'eau
    G4Material* water = G4NistManager::Instance()->FindOrBuildMaterial("G4_WATER");
    AGuIX->AddMaterial(water, fractionWater);


    return AGuIX;
}

The message is clear. The chemistry model works only with water defined in NistManager.

G4NistManager::Instance()->FindOrBuildMaterial("G4_WATER");

Sometimes the DNA physics models found this material, and make chemical species, but the chemistry module is not done for mixed materials