Questions about geometrical biasing in example GB03

Hi everyone,

I have few questions about example GB03, on geometrical biasing (not sure if I should post this question here or in the biasing section, please let me know if it’s the wrong category…).

In GB03, in the detector construction, if I understood correctly, the biasing process is set up in the detector construction, namely we have

void GB03DetectorConstruction::SetupBiasing()
{
GB03BOptrGeometryBasedBiasing* biasingOperator = new GB03BOptrGeometryBasedBiasing();
biasingOperator->AttachTo(fLayerLogical);
}

This function is then called in

void GB03DetectorConstruction::ConstructSDandField()
{
if(!fConstructedSDandField)
{
fConstructedSDandField = true;
SetupDetectors();
SetupBiasing();
}
}

I have two problems:

  1. I cannot find a single instance where the function ConstructSDandField() is actually called, how this could work?

  2. In my case, I would like to have different splitting in different parts of the detector, as I see, I could do this in two different way:
    2.a) I could create more than one geometrical biasing operator, attaching each one to a different part of the detector; something like:

G4VPhysicalVolume* DetectorConstruction::Construct()
{
ConstructDetector();
biasingOperatorSS = new GeometryBasedBiasing(SplittingFactorSS);
biasingOperatorSS->AttachTo(SS_log);

biasingOperatorICS = new GeometryBasedBiasing(SplittingFactorICS);
biasingOperatorICS->AttachTo(ICS_log);

return physiWorld;
}

(where in the constructor of the GeometryBasedBiasing class I have now to specify the splitting factor, since it could be different for the different parts). Would this work?

2.b) Is it necessary to attach the biasing operator somewhere? Because, otherwise, I could modify the conditions in the SplitOrKill class in order to split the tracks when the particles are crossing different thresholds… Could this work? Or, if it’s necessary to attach the operator somewhere, could I attach it to the logicWorld?

Thanks for the help!