def make_pdf(self): """Method to make the PDF for the spider. :return: None """ output_folder = os.path.join(self.jobdir, 'outputs') pdfs_dir = XnatUtils.makedir(os.path.join(output_folder, 'pdfs')) fpages = list() # Run matlab function for nb_acq in range(1, self.nb_acquisition + 1): pdf_page = os.path.join(output_folder, str(nb_acq), 'VerdictMapAcq%d.pdf' % nb_acq) mat_lines = DEFAULT_PDF_MAKER.format( matlab_code=self.matlab_code, maps_folder=os.path.join(output_folder, str(nb_acq), 'AMICO', self.model), subject=self.xnat_subject, output_folder=pdfs_dir, acq=nb_acq) matlab_script = os.path.join(output_folder, 'run_pdf_page_%d.m' % nb_acq) with open(matlab_script, "w") as f: f.writelines(mat_lines) XnatUtils.run_matlab(matlab_script, verbose=True) # Get all PDFs: pdf_pages = XnatUtils.find_files(pdfs_dir, '.pdf') # Merge all pdfs into one: self.merge_pdf_pages(pdf_pages, pdf_page) fpages.append(pdf_page) if len(fpages) > 1: self.merge_pdf_pages(fpages, self.pdf_final) else: shutil.move(fpages[0], self.pdf_final)
def run(self): """Method running the process for the spider on the inputs data.""" output_folder = XnatUtils.makedir(os.path.join(self.jobdir, 'outputs')) dcm_folder = XnatUtils.makedir(os.path.join(output_folder, 'OsiriX')) pdfs_dir = XnatUtils.makedir(os.path.join(output_folder, 'pdfs')) fpages = list() # Load dicom headers if not os.path.isfile(self.inputs['dcm']): err = "DICOM File %s not found." raise Exception(err % self.inputs['dcm']) for nb_acq in range(1, self.nb_acquisition+1): folder = os.path.join(output_folder, str(nb_acq)) os.makedirs(folder) mat_lines = DEFAULT_VERDICT_TEMPLATE.format( matlab_code=self.matlab_code, input_path=os.path.dirname(self.inputs[nb_acq]), subject=self.xnat_subject, filename=os.path.basename(self.inputs[nb_acq]), output=folder, project=self.xnat_project, camino=self.camino, spams=self.spams, scheme_filename=self.scheme_filename, model=self.model, dicom_file=self.inputs['dcm'], out_dcm=dcm_folder, acq=str(nb_acq), suffix=PSUFFIX, ) matlab_script = os.path.join(output_folder, 'run_verdict_map%d.m' % nb_acq) with open(matlab_script, "w") as f: f.writelines(mat_lines) self.run_matlab(matlab_script, verbose=True) mat_lines = PDF_TEMPLATE.format( matlab_code=self.matlab_code, subject=self.xnat_subject, output=folder, model=self.model, out_pdf=pdfs_dir, acq=str(nb_acq), ) matlab_script = os.path.join(output_folder, 'run_pdf_%d.m' % nb_acq) with open(matlab_script, "w") as f: f.writelines(mat_lines) XnatUtils.run_matlab(matlab_script, verbose=True) pdf_pages = XnatUtils.find_files(pdfs_dir, '.pdf') # Merge all pdfs into one: pdf_page = os.path.join(output_folder, str(nb_acq), 'VerdictMapAcq%d.pdf' % nb_acq) self.merge_pdf_pages(pdf_pages, pdf_page) fpages.append(pdf_page) # Merge PDFs: if len(fpages) > 1: self.merge_pdf_pages(fpages, self.pdf_final) else: shutil.move(fpages[0], self.pdf_final) # Zip the DICOMs output: initdir = os.getcwd() # Zip all the files in the directory zip_name = os.path.join(self.jobdir, 'outputs', 'OsiriX', 'osirix.zip') os.chdir(os.path.join(self.jobdir, 'outputs', 'OsiriX')) os.system('zip -r %s * > /dev/null' % zip_name) # return to the initial directory: os.chdir(initdir) # Gzip nii: XnatUtils.gzip_nii(os.path.join(output_folder, '1', 'AMICO', self.model)) if self.nb_acquisition == 2: XnatUtils.gzip_nii(os.path.join(output_folder, '2', 'AMICO', self.model))