Ejemplo n.º 1
0
    def inputVolumeSelected(self):
        self.inputTypeLabel.text = 'unspecified'
        self.halfLifeLineEdit.text = float('inf')
        self.activityLineEdit.text = 1
        self.activityTimeEdit.time = qt.QTime(0, 0)
        self.residualActivityLineEdit.text = 0
        self.residualactivityTimeEdit.time = qt.QTime(0, 0)
        self.scanTimeEdit.time = qt.QTime(0, 0)
        self.weightLineEdit.text = 1000.0
        self.inputVolumeSUVNormalizationLabel.text = 1.0

        inputVolume = self.inputSelector.currentNode()
        if not inputVolume: return
        dicomInstanceUIDs = inputVolume.GetAttribute('DICOM.instanceUIDs')
        rwvmInstanceUID = inputVolume.GetAttribute('DICOM.RWV.instanceUID')
        if dicomInstanceUIDs:
            self.inputTypeLabel.text = "DICOM volume"
            sourceFileName = slicer.dicomDatabase.fileForInstance(
                dicomInstanceUIDs.split(" ")[0])
            d = pydicom.read_file(sourceFileName) if sourceFileName else None
            if d and d.Modality == 'PT':
                self.inputTypeLabel.text = "PET DICOM volume"
                self.halfLifeLineEdit.text = d.RadiopharmaceuticalInformationSequence[
                    0].RadionuclideHalfLife
                self.activityLineEdit.text = self._doseInMicroCi(
                    d.RadiopharmaceuticalInformationSequence[0].
                    RadionuclideTotalDose, d.Units)
                self.activityTimeEdit.time = self._getTime(
                    d.RadiopharmaceuticalInformationSequence[0].
                    RadiopharmaceuticalStartTime)
                self.residualactivityTimeEdit.time = self.activityTimeEdit.time
                self.scanTimeEdit.time = self._getTime(d.SeriesTime)
                self.weightLineEdit.text = d.PatientWeight * 1000.0
                if inputVolume.GetVoxelValueUnits(
                ) and inputVolume.GetVoxelValueUnits().GetCodeValue(
                ) == '{SUVbw}g/ml':  # calculate SUV normalization factor based on PET DICOM
                    self.inputTypeLabel.text = "SUVbw normalized PET DICOM volume"
                    halfLife = d.RadiopharmaceuticalInformationSequence[
                        0].RadionuclideHalfLife
                    injectedDose = self._doseInMicroCi(
                        d.RadiopharmaceuticalInformationSequence[0].
                        RadionuclideTotalDose, d.Units)
                    weight = d.PatientWeight
                    decayTime = 0.001*(\
                      self._getTime(d.SeriesTime).msecsSinceStartOfDay()-\
                      self._getTime(d.RadiopharmaceuticalInformationSequence[0].RadiopharmaceuticalStartTime).msecsSinceStartOfDay())
                    decayedDose = injectedDose * pow(2.0,
                                                     -decayTime / halfLife)
                    Ci2BqFactor = 37000000000.0
                    decayedDose = decayedDose * Ci2BqFactor * 1e-9  # convert to kBq/mL
                    SUVNormalizationFactor = weight / decayedDose
                    self.inputVolumeSUVNormalizationLabel.text = SUVNormalizationFactor
                elif rwvmInstanceUID:  # load SUV normalization factor from RWVM file
                    self.inputTypeLabel.text = "SUV normalized PET DICOM volume"
                    sourceFileName = slicer.dicomDatabase.fileForInstance(
                        rwvmInstanceUID)
                    d = pydicom.read_file(sourceFileName)
                    self.inputVolumeSUVNormalizationLabel.text = d.ReferencedImageRealWorldValueMappingSequence[
                        0].RealWorldValueMappingSequence[0].RealWorldValueSlope
        self.updateNormalizationFactor()
Ejemplo n.º 2
0
 def _getTime(self, time):
     dot = time.find('.') if time.find('.') >= 0 else len(time)
     hours = int(time[:dot - 4])
     minutes = int(time[dot - 4:dot - 2])
     seconds = int(round(float(time[dot - 2:dot])))
     mseconds = int(round(float(time[dot:-1]) *
                          1000.0)) if dot < len(time) else 0
     return qt.QTime(hours, minutes, seconds, mseconds)
Ejemplo n.º 3
0
 def updateOutputFolder(self):
   if os.path.exists(self.generatedOutputDirectory):
     return
   if self.patientWatchBox.getInformation("PatientID") != '' :
     if self.outputDir and not os.path.exists(self.outputDir):
       self.logic.createDirectory(self.outputDir)
     finalDirectory = self.patientWatchBox.getInformation("PatientID") + \
                      str(qt.QDate().currentDate()) + "-" + qt.QTime().currentTime().toString().replace(":", "")
     self.generatedOutputDirectory = os.path.join(self.outputDir, finalDirectory, "Planning")
   else:
     self.generatedOutputDirectory = ""
Ejemplo n.º 4
0
 def startTiming(self):
     self.Timer = qt.QTime()
     self.Timer.start()
Ejemplo n.º 5
0
def delay(msecs=500):
    # delay application
    dieTime = qt.QTime().currentTime().addMSecs(msecs)
    while qt.QTime().currentTime() < dieTime:
        qt.QCoreApplication.processEvents(qt.QEventLoop.AllEvents, 100)