2015年9月2日水曜日

GDCM memo

Move Scu

1) Study >> Series move
2) Study >> image move

1) Study からSeriesを抽出。series単位で move

  1. var scp = new gdcm.ServiceClassUser();
  2. ushort port = 11112;
  3. ushort portScp = 104;
  4. string aetcalled = "DCM4CHEE";
  5. string aetcalling = "any";
  6. string host = "192.168.0.100";
  7. //
  8. string patId = "12345";
  9. //sendmove
  10. var scu = new gdcm.ServiceClassUser();
  11. //scu.SetHostname("192.168.17.13"); scu.SetAETitle("any");
  12. scu.SetHostname(host);
  13. scu.SetAETitle(aetcalling);//
  14. scu.SetPort(port);
  15. scu.SetTimeout(1d);
  16. scu.SetCalledAETitle(aetcalled);
  17. // InitializeConnection
  18. if (!scu.InitializeConnection())
  19. { Console.WriteLine("Err :Init"); return; }
  20. var generator = new PresentationContextGenerator();
  21. var retDatasets = new DataSetArrayType();
  22. // Find SCU
  23. var theTagPair = new gdcm.KeyValuePairArrayType();
  24. theTagPair.Add(new gdcm.KeyValuePairType(new gdcm.Tag(0x0010, 0x0020), patId));
  25. theTagPair.Add(new gdcm.KeyValuePairType(new gdcm.Tag(0x0020, 0x000D), "*")); //StudyInstanceUID
  26. var findquery = gdcm.CompositeNetworkFunctions.ConstructQuery(gdcm.ERootType.eStudyRootType, gdcm.EQueryLevel.eStudy, theTagPair);
  27. if (!generator.GenerateFromUID(findquery.GetAbstractSyntaxUID()))
  28. { Console.WriteLine("Err :VerificationSOPClass"); return; }
  29. scu.SetPresentationContexts(generator.GetPresentationContexts());
  30. string studyInstanceUid = string.Empty;
  31. string seriesInstanceUid = string.Empty;
  32. if (!scu.StartAssociation())
  33. { Console.WriteLine("Err :StartAssociation"); return; }
  34. if (scu.SendFind(findquery, retDatasets))
  35. {
  36. if (retDatasets.Count > 0)
  37. {
  38. foreach (gdcm.DataSet d in retDatasets)
  39. Console.WriteLine("StudyInstanceUID :" + d.GetDataElement(new gdcm.Tag(0x0020, 0x000D)).toString());
  40. // Find Last StudyInstancUID to SeriesInstanceUID
  41. theTagPair = new KeyValuePairArrayType();
  42. studyInstanceUid=retDatasets[retDatasets.Count - 1].GetDataElement(new gdcm.Tag(0x0020, 0x000D)).GetValue().toString();
  43. Console.WriteLine(studyInstanceUid);
  44. theTagPair.Add(new gdcm.KeyValuePairType(new gdcm.Tag(0x0020, 0x000D), studyInstanceUid));
  45. theTagPair.Add(new gdcm.KeyValuePairType(new gdcm.Tag(0x0020, 0x000E), "*"));
  46. findquery = gdcm.CompositeNetworkFunctions.ConstructQuery(gdcm.ERootType.eStudyRootType, gdcm.EQueryLevel.eSeries, theTagPair);
  47. if (!generator.GenerateFromUID(findquery.GetAbstractSyntaxUID()))
  48. { Console.WriteLine("Err :VerificationSOPClass"); return; }
  49. scu.SetPresentationContexts(generator.GetPresentationContexts());
  50. retDatasets=new DataSetArrayType();
  51. if (scu.SendFind(findquery, retDatasets))
  52. {
  53. Console.WriteLine(retDatasets.Count);
  54. if (retDatasets.Count > 0)
  55. {
  56. foreach (gdcm.DataSet d in retDatasets)
  57. Console.WriteLine("SeriesInstanceUID :" + d.GetDataElement(new gdcm.Tag(0x0020, 0x000D)).toString());
  58. }
  59. }
  60. }
  61. }
  62. if (!scu.StopAssociation())
  63. { Console.WriteLine("Err :scu StopAssociation"); return; }
  64. //
  65. if (retDatasets.Count == 0)
  66. return;
  67. var moveds = new gdcm.DataSet();
  68. // Last SeriesInstanceUID
  69. moveds.Insert(retDatasets[0].GetDataElement(new gdcm.Tag(0x0020, 0x000D)));
  70. moveds.Insert(retDatasets[0].GetDataElement(new gdcm.Tag(0x0020, 0x000E)));
  71. //
  72. var movequery = gdcm.CompositeNetworkFunctions.ConstructQuery(gdcm.ERootType.eStudyRootType, gdcm.EQueryLevel.eImage, moveds, true);
  73. //
  74. if (!generator.GenerateFromUID(movequery.GetAbstractSyntaxUID()))
  75. { Console.WriteLine("Err :VerificationSOPClass"); return; }
  76. scu.SetPresentationContexts(generator.GetPresentationContexts());
  77. scu.SetPortSCP(portScp); //PortSCU
  78. if (!scu.StartAssociation())
  79. { Console.WriteLine("Err :scu StartAssociation"); return; }
  80. var data = new gdcm.DataSetArrayType();
  81. if (!scu.SendMove(movequery, data))
  82. Console.WriteLine("Err : SendMove");
  83. if (!scu.StopAssociation())
  84. { Console.WriteLine("Err :scu StopAssociation"); return; }
  85. foreach (gdcm.DataSet d in data)
  86. {
  87. // represent Photmetric Interpretation
  88. if(d.FindDataElement(new gdcm.Tag(0x0028,0004)))
  89. Console.WriteLine(d.GetDataElement(new gdcm.Tag(0x0028,0004)).GetValue().toString());
  90.  
  91. }
  92. Console.WriteLine("...End");

2)  Study から imageごとに move

  1. var scp = new gdcm.ServiceClassUser();
  2. ushort port = 11112;
  3. ushort portScp = 104;
  4. string aetcalled = "DCM4CHEE";
  5. string aetcalling = "any";
  6. string host = "192.168.0.100";
  7. //
  8. string patId = "12345";
  9. //sendmove
  10. var scu = new gdcm.ServiceClassUser();
  11. //scu.SetHostname("192.168.17.13"); scu.SetAETitle("any");
  12. scu.SetHostname(host);
  13. scu.SetAETitle(aetcalling);//
  14. scu.SetPort(port);
  15. scu.SetTimeout(1d);
  16. scu.SetCalledAETitle(aetcalled);
  17. // InitializeConnection
  18. if (!scu.InitializeConnection())
  19. { Console.WriteLine("Err :Init"); return; }
  20. var generator = new PresentationContextGenerator();
  21. var retDatasets = new DataSetArrayType();
  22. // Find SCU
  23. var theTagPair = new gdcm.KeyValuePairArrayType();
  24. theTagPair.Add(new KeyValuePairType(new gdcm.Tag(0x0010, 0x0020), patId));
  25. theTagPair.Add(new KeyValuePairType(new gdcm.Tag(0x0008, 0x0018), "*"));//SOPInstanceUID
  26. var findquery = gdcm.CompositeNetworkFunctions.ConstructQuery(gdcm.ERootType.eStudyRootType, gdcm.EQueryLevel.eImage, theTagPair);
  27. if (!generator.GenerateFromUID(findquery.GetAbstractSyntaxUID()))
  28. { Console.WriteLine("Err :VerificationSOPClass"); return; }
  29. scu.SetPresentationContexts(generator.GetPresentationContexts());
  30. if (!scu.StartAssociation())
  31. { Console.WriteLine("Err :StartAssociation"); return; }
  32. if (!scu.SendFind(findquery, retDatasets))
  33. { Console.WriteLine("Err :SendFind"); return; }
  34. if (!scu.StopAssociation())
  35. { Console.WriteLine("Err :scu StopAssociation"); return; }
  36. //
  37. if (retDatasets.Count == 0)
  38. return;
  39.  
  40. var moveds = new gdcm.DataSet();
  41. moveds.Insert(retDatasets[0].GetDataElement(new gdcm.Tag(0x0010, 0x0020)));
  42. moveds.Insert(retDatasets[0].GetDataElement(new gdcm.Tag(0x0020, 0x000D)));
  43. moveds.Insert(retDatasets[0].GetDataElement(new gdcm.Tag(0x0020, 0x000E)));
  44. //
  45. var movequery = gdcm.CompositeNetworkFunctions.ConstructQuery(gdcm.ERootType.eStudyRootType, gdcm.EQueryLevel.eImage, moveds, true);
  46. //
  47. if (!generator.GenerateFromUID(movequery.GetAbstractSyntaxUID()))
  48. { Console.WriteLine("Err :VerificationSOPClass"); return; }
  49. scu.SetPresentationContexts(generator.GetPresentationContexts());
  50. scu.SetPortSCP(portScp);
  51.  
  52. if (!scu.StartAssociation())
  53. { Console.WriteLine("Err :scu StartAssociation"); return; }
  54. for (int i = 0; i < retDatasets.Count; i++)
  55. {
  56. var queryds = movequery.GetQueryDataSet();
  57.  
  58. var instanceuid = retDatasets[i].GetDataElement(new gdcm.Tag(0x0008, 0x0018));
  59. Console.WriteLine(instanceuid.toString());
  60. queryds.Replace(instanceuid);
  61. var data = new gdcm.DataSetArrayType();
  62. if (!scu.SendMove(movequery, data))
  63. { Console.WriteLine("Err : SendMove"); break; }
  64. var d = data[0];
  65. // represent Photmetric Interpretation
  66. if (d.FindDataElement(new gdcm.Tag(0x0028, 0004)))
  67. Console.WriteLine(d.GetDataElement(new gdcm.Tag(0x0028, 0004)).GetValue().toString());
  68.  
  69.  
  70. }
  71. if (!scu.StopAssociation())
  72. { Console.WriteLine("Err :scu StopAssociation"); return; }
  73. Console.WriteLine("End");

0 件のコメント :

コメントを投稿