def test_main(rec=False, verb=False, throw=True): # Set STIR verbosity to off original_verb = pet.get_verbosity() pet.set_verbosity(1) time.sleep(0.5) sys.stderr.write("Testing NiftyPET projector...") time.sleep(0.5) # Get image image = get_image() # Get AM try: acq_model = pet.AcquisitionModelUsingNiftyPET() except: return 1, 1 acq_model.set_cuda_verbosity(verb) data_path = examples_data_path('PET') # raw_data_path = pet.existing_filepath(os.path.join(data_path, 'mMR'), 'mMR_template_span11.hs') raw_data_path = os.path.join(data_path, 'mMR') template_acq_data = pet.AcquisitionData( os.path.join(raw_data_path, 'mMR_template_span11.hs')) acq_model.set_up(template_acq_data, image) # Test operator adjointness if verb: print('testing adjointness') if not is_operator_adjoint(acq_model, num_tests=1, verbose=True): raise AssertionError('NiftyPet AcquisitionModel is not adjoint') # Generate test data simulated_acq_data = acq_model.forward(image) simulated_acq_data_w_noise = add_noise(simulated_acq_data, 10) obj_fun = pet.make_Poisson_loglikelihood(template_acq_data) obj_fun.set_acquisition_model(acq_model) recon = pet.OSMAPOSLReconstructor() recon.set_objective_function(obj_fun) recon.set_num_subsets(1) recon.set_num_subiterations(1) recon.set_input(simulated_acq_data_w_noise) if verb: print('setting up, please wait...') initial_estimate = image.get_uniform_copy() recon.set_up(initial_estimate) if verb: print('reconstructing...') recon.set_current_estimate(initial_estimate) recon.process() reconstructed_im = recon.get_output() if not reconstructed_im: raise AssertionError() # Reset original verbose-ness pet.set_verbosity(original_verb) return 0, 1
path_NAC = working_folder + '/recon/NAC/' path_sino = working_folder + '/sino/' path_rando = working_folder + '/rando/' if not os.path.exists(path_NAC): os.makedirs(path_NAC, mode=0o770) print('Create Folder: {}'.format(path_NAC)) #%% Settings for reconstruction # set acq_model acq_model = Pet.AcquisitionModelUsingRayTracingMatrix() acq_model.set_num_tangential_LORs(5) # set recon, OSEM recon = Pet.OSMAPOSLReconstructor() num_subsets = 7 num_subiterations = 4 recon.set_num_subsets(num_subsets) recon.set_num_subiterations(num_subiterations) # definitions for detector sensitivity modelling asm_norm = Pet.AcquisitionSensitivityModel(norm_file) acq_model.set_acquisition_sensitivity(asm_norm) #%% redirect STIR messages to some files # you can check these if things go wrong msg_red = Pet.MessageRedirector('info.txt', 'warn.txt') #%% List of sino and rand list_sino = [