Selaa lähdekoodia

Adding inputFunction routine

Eager Beaver 6 vuotta sitten
vanhempi
commit
0601509083
1 muutettua tiedostoa jossa 54 lisäystä ja 5 poistoa
  1. 54 5
      cardiacSPECT/cardiacSPECT.py

+ 54 - 5
cardiacSPECT/cardiacSPECT.py

@@ -273,8 +273,7 @@ class cardiacSPECTWidget(ScriptedLoadableModuleWidget):
             segment="Segment_"+str(j+1)
             #add node for data
             dn = slicer.mrmlScene.AddNode(slicer.vtkMRMLDoubleArrayNode())
-            a = dn.GetArray()
-            a.SetNumberOfTuples(n)
+            dn.SetSize(n)
             dt=0;
             t0=0;
             for i in range(0,n):
@@ -284,9 +283,9 @@ class cardiacSPECTWidget(ScriptedLoadableModuleWidget):
                 dt=2*ft[i]-t0
                 t0+=dt
 
-                a.SetComponent(i, 0, fx)
-                a.SetComponent(i, 1, fy/dt)
-                a.SetComponent(i, 2, 0)
+                dn.SetValue(i, 0, fx)
+                dn.SetValue(i, 1, fy/dt)
+                dn.SetValue(i, 2, 0)
                 print("[{0} at {1:.2f}:{2:.2f}]".format(vol,fx,fy))
 
             cn.AddArray(segment, dn.GetID())
@@ -485,6 +484,56 @@ class cardiacSPECTLogic(ScriptedLoadableModuleLogic):
         i+=1
     return i-1
 
+
+   def calculateInputFunction(self):
+       n=self.frame_data.shape[3]
+
+       dns = slicer.mrmlScene.GetNodesByClassByName('vtkMRMLDoubleArrayNode','Ventricle')
+       if dns.GetNumberOfItems() == 0:
+           dn = slicer.mrmlScene.AddNode(slicer.vtkMRMLDoubleArrayNode())
+           dn.SetName('Ventricle')
+       else:
+           dn = dns.GetItemAsObject(0)
+
+
+
+       dn.SetSize(n)
+
+
+       fNodes=slicer.mrmlScene.GetNodesByClass("vtkMRMLSegmentationNode")
+       if fNodes.GetNumberOfItems() == 0:
+           return
+       fNode=fNodes.GetItemAsObject(0)
+       segNode=slicer.vtkMRMLSegmentationNode.SafeDownCast(fNode)
+       segmentation=segNode.GetSegmentation()
+
+       juse=-1
+       for j in range(0,segmentation.GetNumberOfSegments()):
+           segment=segNode.GetSegmentation().GetNthSegmentID(j)
+           if segment.GetName()=='Ventricle':
+               juse=j
+               break
+
+       if juse<0:
+           print 'Failed to find Ventricle segment'
+           return
+
+       dt=0;
+       t0=0;
+       for i in range(0,n):
+           vol="testVolume"+str(i)
+           fx=ft[i]
+           fy=self.logic.meanROI(vol,juse)
+           dt=2*ft[i]-t0
+           t0+=dt
+
+           dn.SetValue(i, 0, fx)
+           dn.SetValue(i, 1, fy/dt)
+           dn.SetValue(i, 2, 0)
+           print("[{0} at {1:.2f}:{2:.2f}]".format(vol,fx,fy))
+
+
+
 class cardiacSPECTTest(ScriptedLoadableModuleTest):
   """
   This is the test case for your scripted module.