virtual void SetUp() override
        {
            TestBase::SetUp();
            Logger::getInstance();

            projectionResolution = Vec2ui(2048, 2048);
            Vec3ui volumeResolution;
            if(framework->on64bitArchitecture())
            {
                volumeResolution = Vec3ui(2000, 2000, 100);
            }
            else
            {
                volumeResolution = Vec3ui(2000, 2000, 100);
            }
            volumeOptions = new VolumeParameterSet(volumeResolution);
            subVolumeCount = 4;

            volume = new FloatVolume(volumeOptions->getResolution(), 1.0f, subVolumeCount);

            Vec3f sourcePosition(-1000.0f, -1000.0f, -100.0f);
            Vec3f detectorPosition(-1000.0f, -1000.0f, 100.0f);
            Vec3f horizontalPitch(1.0f, 0.0f, 0.0f);
            Vec3f verticalPitch(0.0f, 1.0f, 0.0f);
            ScannerGeometry* initialScannerGeometry = new ParallelScannerGeometry ( projectionResolution );
            initialScannerGeometry->set(sourcePosition,
                                       detectorPosition,
                                       horizontalPitch,
                                       verticalPitch);
            satRotator->setBaseScannerGeometry(initialScannerGeometry);
            geometricSetup = new GeometricSetup(initialScannerGeometry->clone(), volume);

            accumulatedVolume = new GPUMappedVolume(framework->getOpenCLStack(), volume);
            residual = new GPUMapped<Image>(framework->getOpenCLStack(), projectionResolution);
            rayLengthImage = new GPUMapped<Image>(framework->getOpenCLStack(), projectionResolution);
            computeRayLength = new ComputeRayLengthKernel(framework, geometricSetup, rayLengthImage);
            backProjectKernel = new ParallelBeamsBackProjectionKernel(framework,
                                                                      geometricSetup,
                                                                      accumulatedVolume,
                                                                      nullptr,
                                                                      1.0f,
                                                                      1,
                                                                      false);
            backProjectKernel->SetInput(residual, computeRayLength->getOutput());
        }
/// Update detector position according to data file
void LoadILLReflectometry::placeDetector() {
  g_log.debug("Move the detector bank \n");
  m_detectorDistance = sampleDetectorDistance();
  m_detectorAngle = detectorAngle();
  g_log.debug() << "Sample-detector distance: " << m_detectorDistance << "m.\n";
  const auto detectorRotationAngle = detectorRotation();
  const std::string componentName = "detector";
  const RotationPlane rotPlane = [this]() {
    if (m_instrument != Supported::Figaro)
      return RotationPlane::horizontal;
    else
      return RotationPlane::vertical;
  }();
  const auto newpos =
      detectorPosition(rotPlane, m_detectorDistance, detectorRotationAngle);
  m_loader.moveComponent(m_localWorkspace, componentName, newpos);
  // apply a local rotation to stay perpendicular to the beam
  const auto rotation = detectorFaceRotation(rotPlane, detectorRotationAngle);
  m_loader.rotateComponent(m_localWorkspace, componentName, rotation);
}