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); }