def test_exec(self): """ Prepare and execute a dry-run test using the Executer. """ logger.info("Test norun TRiP98 execution") logger.debug("Load CtxCube {:s}".format(self.ctx_path)) c = pt.CtxCube() c.read(self.ctx_path) logger.debug("Load VdxCube {:s}".format(self.vdx_path)) v = pt.VdxCube(c) v.read(self.vdx_path) print(v.get_voi_names()) plan = pte.Plan(basename=self.patient_name) self.assertIsNotNone(plan) plan.ddd_dir = "~/TRiP98/base/DATA/DDD/12C/RF3MM/*" plan.spc_dir = "~/TRiP98/base/DATA/SPC/12C/RF3MM/*" plan.sis_path = "~/TRiP98/base/DATA/SIS/12C.sis" plan.hlut_path = "~/TRiP98/base/DATA/HLUT/19990218.hlut" plan.dedx_path = "~/TRiP98/base/DATA/DEDX/20040607.dedx" plan.working_dir = "." # working dir must exist. # add the target voi to the plan plan.voi_target = v.get_voi_by_name('target') plan.rifi = 3.0 plan.bolus = 0.0 plan.offh2o = 1.873 # create a field and add it to the plan field = pte.Field() self.assertIsNotNone(field) field.basename = self.patient_name field.gantry = 10.0 field.couch = 90.0 # degrees field.fwhm = 4.0 # spot size in [mm] field.projectile = 'C' plan.fields.append(field) # flags for what output should be generated plan.want_phys_dose = True plan.want_bio_dose = False plan.want_dlet = True plan.want_rst = False t = pte.Execute(c, v) self.assertIsNotNone(t) t.trip_bin_path = self.trip_path print(self.trip_path) if os.name != 'nt': # skip running fake TRiP98 on Windows as it is not supported there t.execute( plan, False ) # setup and make a dry-run, since TRiP98 is not installed. executer_str = str(t) self.assertGreater(len(executer_str), 1)
def test_exec_parse(self): """ """ logger.info("Test parsing '{:s}'".format(self.exec_path)) plan = pte.Plan() plan.read_exec(self.exec_path) print(plan) for field in plan.fields: print(field)
def new_plan(model): """ Creates a new instance of a plan, and adds it to model. """ logger.debug("new_plan()") if not model.ctx: logger.error("No CT data loaded.") return # setup a new tripexecuter.plan object import pytrip.tripexecuter as pte plan = pte.Plan(basename=model.ctx.basename) # attach this plan to the list of plans in models. model.plans.append(plan) # open a dialog for the user to edit it PlanController.edit_plan(model, plan) model.plans.append(plan)
# Next we load the CT cube: c = pt.CtxCube() c.read(ctx_path) # And load the contours v = pt.VdxCube(c) v.read(vdx_path) # we may print all contours found in the Vdx file, if we want to print(v.get_voi_names()) # Ok, we have the Contours and the CT cube ready. Next we must prepare a plan. # We may choose any basename for the patient. All output files will be named using # this basename. plan = pte.Plan(basename=patient_name) # We need to specify where the kernel files can be found. The location may depend on the ion we # wnat to treat with. This example is for carbon ions: plan.ddd_dir = "/home/bassler/TRiP98/base/DATA/DDD/12C/RF3MM/*" plan.spc_dir = "/home/bassler/TRiP98/base/DATA/SPC/12C/RF3MM/*" plan.sis_path = "/home/bassler/TRiP98/base/DATA/SIS/12C.sis" plan.hlut_path = "/home/bassler/TRiP98/base/DATA/HLUT/19990218.hlut" plan.dedx_path = "/home/bassler/TRiP98/base/DATA/DEDX/20040607.dedx" plan.working_dir = "/home/bassler/test/" # working dir must exist. # Set the plan target to the voi called "CTV" plan.voi_target = v.get_voi_by_name('CTV') # some optional parameters (if not set, they will all be zero by default) plan.rifi = 3.0 # 3 mm ripple filter. (This is only for documentaiton, it will not affect the dose optimization.)
# We need to specify where the kernel files can be found. The location may depend on the ion we # want to treat with. This example sets up a kernel model for C-12 ions with a 3 mm Ripple Filter. mykernel = pte.KernelModel() mykernel.projectile = pte.Projectile("C", a=12) mykernel.ddd_path = trip_path + "/DATA/DDD/12C/RF3MM/*" mykernel.spc_path = trip_path + "/DATA/SPC/12C/RF3MM/*" mykernel.sis_path = trip_path + "/DATA/SIS/19981218.sis" mykernel.rifi_thickness = 3.0 # 3 mm ripple filter. (Only for documentaiton, will not affect dose optimization.) mykernel.rifi_name = "GSI_1D_3mm" # Additional free text for documentation. mykernel.comment = "Carbon-12 ions with 3 mm 1D Ripple Filter" # Ok, we have the Contours, the CT cube and dose kernels ready. Next we must prepare a plan. # We may choose any basename for the patient. All output files will be named using # this basename. plan = pte.Plan(basename=patient_name, default_kernel=mykernel) # Plan specific data: plan.hlut_path = trip_path + "/DATA/HLUT/19990218.hlut" # Hounsfield lookup table location plan.dedx_path = trip_path + "/DATA/DEDX/20000830.dedx" # Stopping power tables plan.working_dir = wdir # Set the plan target to the voi called "CTV" plan.voi_target = v.get_voi_by_name('CTV') # some optional plan specific parameters (if not set, they will all be zero by default) plan.bolus = 0.0 # No bolus is applied here. Set this to some value, if you are to optimize very shallow tumours. plan.offh2o = 1.873 # Some offset mimicing the monitoring ionization chambers and exit window of the beam nozzle. # Next we need to specify at least one field, and add that field to the plan. field = pte.Field(
# We need to specify where the kernel files can be found. The location may depend on the ion we # want to treat with. This example sets up a kernel model for C-12 ions with a 3 mm Ripple Filter. mykernel = pte.KernelModel() mykernel.projectile = pte.Projectile("C", a=12) mykernel.ddd_path = "/home/bassler/TRiP98/base/DATA/DDD/12C/RF3MM/*" mykernel.spc_path = "/home/bassler/TRiP98/base/DATA/SPC/12C/RF3MM/*" mykernel.sis_path = "/home/bassler/TRiP98/base/DATA/SIS/12C.sis" mykernel.rifi_thickness = 3.0 # 3 mm ripple filter. (Only for documentaiton, will not affect dose optimization.) mykernel.rifi_name = "GSI_1D_3mm" # Additional free text for documentation. mykernel.comment = "Carbon-12 ions with 3 mm 1D Ripple Filter" # Ok, we have the Contours, the CT cube and dose kernels ready. Next we must prepare a plan. # We may choose any basename for the patient. All output files will be named using # this basename. plan = pte.Plan(basename=patient_name, kernels=(mykernel, )) # Plan specific data: plan.hlut_path = "/home/bassler/TRiP98/base/DATA/HLUT/19990218.hlut" # Hounsfield lookup table location plan.dedx_path = "/home/bassler/TRiP98/base/DATA/DEDX/20040607.dedx" # Stopping power tables plan.working_dir = "/home/bassler/test/" # working dir must exist. # Set the plan target to the voi called "CTV" plan.voi_target = v.get_voi_by_name('CTV') # some optional plan specific parameters (if not set, they will all be zero by default) plan.bolus = 0.0 # No bolus is applied here. Set this to some value, if you are to optimize very shallow tumours. plan.offh2o = 1.873 # Some offset mimicing the monitoring ionization chambers and exit window of the beam nozzle. # Next we need to specify at least one field, and add that field to the plan. field = pte.Field(