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()
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)
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 = ""
def startTiming(self): self.Timer = qt.QTime() self.Timer.start()
def delay(msecs=500): # delay application dieTime = qt.QTime().currentTime().addMSecs(msecs) while qt.QTime().currentTime() < dieTime: qt.QCoreApplication.processEvents(qt.QEventLoop.AllEvents, 100)