#!/usr/bin/python #Parse arguments import argparse, sys argParse = argparse.ArgumentParser(description='Convert ECAT PET image to decay corrected well counts/mL/sec:') argParse.add_argument('pet',help='Nifti ECAT count image',nargs=1,type=str) argParse.add_argument('info',help='Yi Su style info file',nargs=1,type=str) argParse.add_argument('pie',help='Pie calibration factor',nargs=1,type=float) argParse.add_argument('out',help='Root for outputed files',nargs=1,type=str) args = argParse.parse_args() #Load in libraries we will need import numpy as np, nibabel as nib, nagini #Load in PET image pet = nib.load(args.pet[0]); petData = nagini.reshape4d(pet.get_data()) #Load in info file info = nagini.loadInfo(args.info[0]) #Loop through frames for fIdx in range(petData.shape[1]): #Convert to decay corrected well counts petData[:,fIdx] *= 60.0 * args.pie[0] / info[fIdx,2] * info[fIdx,3] #Write out result well = nib.Nifti1Image(petData.reshape(pet.shape),pet.affine,header=pet.header) well.to_filename(args.out[0]+'.nii.gz')
import scipy.ndimage.filters as filt, scipy.spatial as spat from tqdm import tqdm #Ignore invalid and overflow warnings np.seterr(invalid='ignore', over='ignore') ######################### ###Data Pre-Processing### ######################### print('Loading images...') #Load in the dta file dta = nagini.loadDta(args.dta[0]) #Load in the info file info = nagini.loadInfo(args.info[0]) #Load image headers pet = nagini.loadHeader(args.pet[0]) roi = nagini.loadHeader(args.roi[0]) cbf = nagini.loadHeader(args.cbf[0]) cbv = nagini.loadHeader(args.cbv[0]) #Check to make sure dimensions match if pet.shape[3] != info.shape[0] or pet.shape[0:3] != roi.shape[ 0:3] or pet.shape[0:3] != cbf.shape[0:3] or pet.shape[ 0:3] != cbv.shape[0:3]: print 'ERROR: Data dimensions do not match. Please check...' sys.exit() #Brain mask logic