def METHOD_NAME(self, volume_engine, g4_world_log_vol):
    self.volume_engine = volume_engine
    # read image
    self.image = itk.imread(gate.check_filename_type(self.user_info.image))
    size_pix = np.array(itk.size(self.image)).astype(int)
    spacing = np.array(self.image.GetSpacing())
    size_mm = size_pix * spacing
    # shorter coding
    name = self.user_info.name
    hsize_mm = size_mm / 2.0
    hspacing = spacing / 2.0
    # build the bounding box volume
    self.g4_solid = g4.G4Box(name, hsize_mm[0], hsize_mm[1], hsize_mm[2])
    def_mat = volume_engine.find_or_build_material(self.user_info.material)
    self.g4_logical_volume = g4.G4LogicalVolume(self.g4_solid, def_mat, name)
    # param Y
    self.g4_solid_y = g4.G4Box(name + "_Y", hsize_mm[0], hspacing[1], hsize_mm[2])
    self.g4_logical_y = g4.G4LogicalVolume(
        self.g4_solid_y, def_mat, name + "_log_Y"
    )
    self.g4_physical_y = g4.G4PVReplica(
        name + "_Y",
        self.g4_logical_y,
        self.g4_logical_volume,
        g4.EAxis.kYAxis,
        size_pix[1],  # nReplicas
        spacing[1],  # width
        0.0,
    )  # offset
    # param X
    self.g4_solid_x = g4.G4Box(name + "_X", hspacing[0], hspacing[1], hsize_mm[2])
    self.g4_logical_x = g4.G4LogicalVolume(
        self.g4_solid_x, def_mat, name + "_log_X"
    )
    self.g4_physical_x = g4.G4PVReplica(
        name + "_X",
        self.g4_logical_x,
        self.g4_logical_y,
        g4.EAxis.kXAxis,
        size_pix[0],
        spacing[0],
        0.0,
    )
    # param Z
    self.g4_solid_z = g4.G4Box(name + "_Z", hspacing[0], hspacing[1], hspacing[2])
    self.g4_logical_z = g4.G4LogicalVolume(
        self.g4_solid_z, def_mat, name + "_log_Z"
    )
    self.initialize_image_parameterisation()
    self.g4_physical_z = g4.G4PVParameterised(
        name + "_Z",
        self.g4_logical_z,
        self.g4_logical_x,
        g4.EAxis.kZAxis,  # g4.EAxis.kUndefined, ## FIXME ?
        size_pix[2],
        self.g4_voxel_param,
        False,
    )  # overlaps checking
    # find the mother's logical volume
    vol = self.user_info
    mother_logical = self.get_mother_logical_volume()
    # consider the 3D transform -> helpers_transform.
    transform = gate.get_vol_g4_transform(vol)
    self.g4_physical_volume = g4.G4PVPlacement(
        transform,
        self.g4_logical_volume,  # logical volume
        vol.name,  # volume name
        mother_logical,  # mother volume or None if World
        False,  # no boolean operation
        0,  # copy number
        True,
    )  # overlaps checking
    # construct region
    # not clear -> should we create region for all other LV ?
    # (seg fault if region for g4_logical_z)
    self.add_region(self.g4_logical_volume)