Do no reinitialize geometry

G4.11.3
Linux Ubuntu 24.04
gcc 3.13.0
cmake 3.28.0

I wrote some simple detector that a matrix of photocaptor to detect photon. The z position of the plane of the matrix i fixed but the numbre of rows and columns could be changed using UI command “detector” i add through UI command.

Hereafter is the main program

#include <iostream>

#include "G4RunManager.hh"
#include "G4UImanager.hh"
#include "G4VisManager.hh"
#include "G4VisExecutive.hh"
#include "G4UIExecutive.hh"

#include "construction.hh"
#include "physics.hh"
#include "action.hh"

int main(int argc, char** argv)
{
    G4RunManager *runManager = new G4RunManager();

    runManager->SetUserInitialization(new MyDetectorConstruction());
    runManager->SetUserInitialization(new MyPhysicsList());
    runManager->SetUserInitialization(new MyActionInitialization());

    runManager->Initialize();

    G4UIExecutive *ui = 0;

    if(argc == 1)
    {
        ui = new G4UIExecutive(argc,argv);
    }

    G4VisManager *visManager = new G4VisExecutive();
    visManager->Initialize();

    G4UImanager *UImanager = G4UImanager::GetUIpointer();

    if(ui)
    {
        UImanager->ApplyCommand("/control/execute vis.mac");
        ui->SessionStart();
    }
    else
    {
        G4String command = "/control/execute ";
        G4String fileName = argv[1];
        UImanager->ApplyCommand(command+fileName);

    }

    return 0;
}

and the geometry construction.hh and .cc

#ifndef CONSTRUCTION_HH
#define CONSTRUCTION_HH

#include "G4VUserDetectorConstruction.hh"
#include "G4VPhysicalVolume.hh"
#include "G4LogicalVolume.hh"
#include "G4Box.hh"
#include "G4PVPlacement.hh"
#include "G4NistManager.hh"
#include "G4SystemOfUnits.hh"

#include "G4GenericMessenger.hh"

#include "detector.hh"

class MyDetectorConstruction : public G4VUserDetectorConstruction{
    public:
        MyDetectorConstruction();
        ~MyDetectorConstruction();

        virtual G4VPhysicalVolume *Construct();
    private:
        G4LogicalVolume *logicDetector;
        virtual void ConstructSDandField();

        G4int nCols, nRows;

        G4Box *solidWorld,*solidRadiator,*solidDetector;
        G4LogicalVolume *logicWorld,*logicRadiator;
        G4VPhysicalVolume *physWorld,*physRadiator,*physDetector;

        G4GenericMessenger *fMessenger;

        void DefineMaterial();

        G4Material *SiO2,*H2O,*worldMat,*Aerogel;
        G4Element *C;
};
#endif
#include "construction.hh"

MyDetectorConstruction::MyDetectorConstruction()
{

        fMessenger = new G4GenericMessenger(this, "/detector/", "Detector Construction");

        fMessenger->DeclareProperty("nCols",nCols, "Number of columns");
        fMessenger->DeclareProperty("nRows",nRows, "Number of rows");

        nCols = 100;
        nRows = 100;

        DefineMaterial();
}

MyDetectorConstruction::~MyDetectorConstruction()
{}

void MyDetectorConstruction::DefineMaterial()
{
        G4NistManager *nist = G4NistManager::Instance();

        SiO2 = new G4Material("SiO2", 2.201*g/cm3, 2);
        SiO2->AddElement(nist->FindOrBuildElement("Si"),1);
        SiO2->AddElement(nist->FindOrBuildElement("O"),2);

        H2O = new G4Material("H2O", 1.0000*g/cm3, 2);
        H2O->AddElement(nist->FindOrBuildElement("H"),2);
        H2O->AddElement(nist->FindOrBuildElement("O"),1);

        C = nist->FindOrBuildElement("C");

        Aerogel = new G4Material("Aerogel", 0.200*g/cm3, 3);
        Aerogel->AddMaterial(SiO2, 62.5*perCent);
        Aerogel->AddMaterial(H2O, 37.4*perCent);
        Aerogel->AddElement(C, 0.1*perCent);

        worldMat = nist ->FindOrBuildMaterial("G4_AIR");

        G4double energy[2] {1.239841939*eV/0.9, 1.239841939*eV/0.2};
        G4double rindexAerogel[2] {1.1, 1.1};
        G4double rindexWorld[2] {1.0, 1.0};

        G4MaterialPropertiesTable *mptAerogel = new G4MaterialPropertiesTable();
        mptAerogel->AddProperty("RINDEX", energy, rindexAerogel, 2);

        G4MaterialPropertiesTable *mptWorld = new G4MaterialPropertiesTable();
        mptWorld->AddProperty("RINDEX", energy, rindexWorld, 2);

        Aerogel->SetMaterialPropertiesTable(mptAerogel);

        worldMat->SetMaterialPropertiesTable(mptWorld);
}

G4VPhysicalVolume *MyDetectorConstruction::Construct()
{
        G4double xWorld = 0.5*m;
        G4double yWorld = 0.5*m;
        G4double zWorld = 0.5*m;


        solidWorld = new G4Box("solidWorld", xWorld, yWorld, zWorld);
        logicWorld = new G4LogicalVolume(solidWorld, worldMat, "logicWorld");
        physWorld = new G4PVPlacement(0, G4ThreeVector(0., 0., 0.), logicWorld, "physWord", 0, false, 0, true);

        solidRadiator = new G4Box("solidRadiator", 0.4*m, 0.4*m, 0.01*m);
        logicRadiator = new G4LogicalVolume(solidRadiator,Aerogel,"logicalRadiator");
        physRadiator = new G4PVPlacement(0, G4ThreeVector(0., 0., 0.25*m), logicRadiator, "physRadiator", logicWorld, false, 0, true);

        solidDetector = new G4Box("solidDetector", xWorld/nRows, yWorld/nCols, 0.01*m);
        logicDetector = new G4LogicalVolume(solidDetector, worldMat, "logicDetector");

        for(G4int i = 0; i < nRows; i++)
        {
                for(G4int j = 0; j < nCols; j++)
                {
                physDetector = new G4PVPlacement(0,G4ThreeVector(-0.5*m+(i+0.5)*m/nRows,
                                -0.5*m+(j+0.5)*m/nCols, 0.49*m),
                                logicDetector, "physDetector", logicWorld, false,
                                j+i*nCols, true);

                G4double xx =-0.5*m+(i+0.5)*m/nRows;
                G4double yy =-0.5*m+(j+0.5)*m/nCols;
                G4double zz =0.49*m;

                G4cout << "Capteur " << " i = " << i << " j = " << j << "  Capteur Position : " << " x =" << xx << " y = " << yy << " z = " << zz << G4endl;

                }
        }

        return physWorld;
}


void MyDetectorConstruction::ConstructSDandField()
{

        MySensitiveDetector *sensDet = new MySensitiveDetector("SensitiveDetector");

        logicDetector->SetSensitiveDetector(sensDet);
}

I fixed to 100 the initial number of columns and rows. The compilation and execution is OK

i try to change the number of rows abnd columns from 100x100 to 10x10 using the commands
/detector/nCols 10
/detector/nRows 10
/run/reinitializeGeometry

I check using some G4cout in the construct method that the geometry is redefined…but when i run some event i still have the initial geometry with 100x100 matrix

if some expert can help me !!

The problem is probably because you set nCols and nRows to both be 100 inside the constructor after you call the messenger.