message: ENH: Added attenuated Joseph forward and back projector in rtkadjointoperatortest.
diff: #include "rtkConstantImageSource.h"
  #include "rtkJosephBackProjectionImageFilter.h"
  #include "rtkJosephForwardProjectionImageFilter.h"
  +#include "rtkJosephBackAttenuatedProjectionImageFilter.h"
  +#include "rtkJosephForwardAttenuatedProjectionImageFilter.h"
  #ifdef RTK_USE_CUDA
  #include "rtkCudaForwardProjectionImageFilter.h"
  #include "rtkCudaRayCastBackProjectionImageFilter.h"
  @@ -49,6 +51,7 @@ int main(int, char** )
  typedef rtk::ConstantImageSource< OutputImageType > ConstantImageSourceType;
  ConstantImageSourceType::Pointer constantVolumeSource = ConstantImageSourceType::New();
  ConstantImageSourceType::Pointer constantProjectionsSource = ConstantImageSourceType::New();
  + ConstantImageSourceType::Pointer constantAttenuationSource = ConstantImageSourceType::New();
  // Image meta data
  RandomImageSourceType::PointType origin;
  @@ -86,6 +89,11 @@ int main(int, char** )
  constantVolumeSource->SetSize( size );
  constantVolumeSource->SetConstant( 0. );
  + constantAttenuationSource->SetOrigin( origin );
  + constantAttenuationSource->SetSpacing( spacing );
  + constantAttenuationSource->SetSize( size );
  + constantAttenuationSource->SetConstant( 0.0154 );
  +
  // Projections metadata
  origin[0] = -255.;
  origin[1] = -255.;
  @@ -161,6 +169,30 @@ int main(int, char** )
  CheckScalarProducts<OutputImageType, OutputImageType>(randomVolumeSource->GetOutput(), bp->GetOutput(), randomProjectionsSource->GetOutput(), fw->GetOutput());
  std::cout << "\n\nTest PASSED! " << std::endl;
  + std::cout << "\n\n****** Attenuated Joseph Forward projector ******" << std::endl;
  +
  + typedef rtk::JosephForwardAttenuatedProjectionImageFilter<OutputImageType, OutputImageType> JosephForwardAttenuatedProjectorType;
  + JosephForwardAttenuatedProjectorType::Pointer attfw = JosephForwardAttenuatedProjectorType::New();
  + attfw->SetInput(0, constantProjectionsSource->GetOutput());
  + attfw->SetInput(1, randomVolumeSource->GetOutput());
  + attfw->SetInput(2, constantAttenuationSource->GetOutput());
  + attfw->SetGeometry( geometry );
  + TRY_AND_EXIT_ON_ITK_EXCEPTION( attfw->Update() );
  +
  + std::cout << "\n\n****** Attenuated Joseph Back projector ******" << std::endl;
  +
  + typedef rtk::JosephBackAttenuatedProjectionImageFilter<OutputImageType, OutputImageType> JosephBackAttenuatedProjectorType;
  + JosephBackAttenuatedProjectorType::Pointer attbp = JosephBackAttenuatedProjectorType::New();
  + attbp->SetInput(0, constantVolumeSource->GetOutput());
  + attbp->SetInput(1, randomProjectionsSource->GetOutput());
  + attbp->SetInput(2, constantAttenuationSource->GetOutput());
  + attbp->SetGeometry( geometry.GetPointer() );
  +
  + TRY_AND_EXIT_ON_ITK_EXCEPTION( attbp->Update() );
  +
  + CheckScalarProducts<OutputImageType, OutputImageType>(randomVolumeSource->GetOutput(), attbp->GetOutput(), randomProjectionsSource->GetOutput(), attfw->GetOutput());
  + std::cout << "\n\nTest PASSED! " << std::endl;
  +
  #ifdef USE_CUDA
  std::cout << "\n\n****** Cuda Ray Cast Forward projector ******" << std::endl;
  