ctkDICOMApplicationTest1.cpp 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. // Qt includes
  2. #include <QTextStream>
  3. #include <QCoreApplication>
  4. #include <QProcess>
  5. // STD includes
  6. #include <iostream>
  7. #include <cstdlib>
  8. /*
  9. /pieper/ctk/latest/CTK-superbuild/CMakeExternals/Install/bin/dcmqrscp -c /pieper/ctk/latest/CTK-superbuild/CTK-build/Testing/Temporary/dcmqrscp.cfg -d -v
  10. storescu -aec COMMONTK -aet CTK_AE localhost 11112 /data/pieper-face-2005-05-11/1.2.840.113619.2.135.3596.6358736.5118.1115807980.182.UID/000001.SER/000001.IMA
  11. findscu -aet CTK_AE -aec COMMONTK -P -k 0010,0010=\* localhost 11112 patqry.dcm
  12. ./CTK-build/bin/ctkDICOMQuery test.db CTK_AE COMMONTK localhost 11112
  13. ./CTK-build/bin/ctkDICOMRetrieve 1.2.840.113619.2.135.3596.6358736.5118.1115807980.182 /tmp/hoot CTK_AE 11113 CTK_AE localhost 11112 CTK_CLIENT_AE
  14. */
  15. int ctkDICOMApplicationTest1(int argc, char * argv []) {
  16. QCoreApplication app(argc, argv);
  17. QTextStream out(stdout);
  18. if ( argc < 10 )
  19. {
  20. out << "ERROR: invalid arguments. Should be:\n";
  21. out << " ctkDICOMApplicationTest1 <dcmqrscp> <configfile> <dicomData1> <dcmData2> <storescu> <ctkDICOMQuery> <ctkDICOMRetrieve> <retrieveDirectory>\n";
  22. return EXIT_FAILURE;
  23. }
  24. QString dcmqrscp_exe (argv[1]);
  25. QString dcmqrscp_cfg (argv[2]);
  26. QString dicomData1 (argv[3]);
  27. QString dicomData2 (argv[4]);
  28. QString storescu_exe (argv[5]);
  29. QString ctkDICOMQuery_exe (argv[6]);
  30. QString ctkDICOMQuery_db_file (argv[7]);
  31. QString ctkDICOMRetrieve_exe (argv[8]);
  32. QString ctkDICOMRetrieve_directory (argv[9]);
  33. //
  34. // first, start the server process
  35. //
  36. QProcess *dcmqrscp = new QProcess(0);
  37. QStringList dcmqrscp_args;
  38. dcmqrscp_args << "--config" << dcmqrscp_cfg;
  39. dcmqrscp_args << "--debug" << "--verbose";
  40. dcmqrscp_args << "11112";
  41. try
  42. {
  43. out << "starting server" << dcmqrscp_exe << "\n";
  44. out << "with args " << dcmqrscp_args.join(" ") << "\n";
  45. dcmqrscp->start(dcmqrscp_exe, dcmqrscp_args);
  46. dcmqrscp->waitForStarted();
  47. }
  48. catch (std::exception e)
  49. {
  50. out << "ERROR: could not start server" << e.what();
  51. return EXIT_FAILURE;
  52. }
  53. //
  54. // now push some dicom data in using storescp
  55. //
  56. QProcess *storescu = new QProcess(0);
  57. QStringList storescu_args;
  58. storescu_args << "-aec" << "CTK_AE";
  59. storescu_args << "-aet" << "CTK_AE";
  60. storescu_args << "localhost" << "11112";
  61. storescu_args << dicomData1;
  62. storescu_args << dicomData2;
  63. try
  64. {
  65. out << "running client" << storescu_exe << "\n";
  66. out << "with args" << storescu_args.join(" ") << "\n";
  67. storescu->start(storescu_exe, storescu_args);
  68. storescu->waitForFinished();
  69. out << "storescu Finished.\n";
  70. out << "Standard Output:\n";
  71. out << storescu->readAllStandardOutput();
  72. out << "Standard Error:\n";
  73. out << storescu->readAllStandardError();
  74. }
  75. catch (std::exception e)
  76. {
  77. out << "ERROR: could not start client" << e.what();
  78. return EXIT_FAILURE;
  79. }
  80. //
  81. // now query the server to see if the data arrived okay
  82. // - our database file will be updated with metadata from the query
  83. //
  84. QProcess *ctkDICOMQuery = new QProcess(0);
  85. QStringList ctkDICOMQuery_args;
  86. ctkDICOMQuery_args << ctkDICOMQuery_db_file;
  87. ctkDICOMQuery_args << "CTK_AE" << "CTK_AE";
  88. ctkDICOMQuery_args << "localhost" << "11112";
  89. try
  90. {
  91. out << "running client" << ctkDICOMQuery_exe << "\n";
  92. out << "with args" << ctkDICOMQuery_args.join(" ") << "\n";
  93. ctkDICOMQuery->start(ctkDICOMQuery_exe, ctkDICOMQuery_args);
  94. ctkDICOMQuery->waitForFinished();
  95. out << "ctkDICOMQuery Finished.\n";
  96. out << "Standard Output:\n";
  97. out << ctkDICOMQuery->readAllStandardOutput();
  98. out << "Standard Error:\n";
  99. out << ctkDICOMQuery->readAllStandardError();
  100. }
  101. catch (std::exception e)
  102. {
  103. out << "ERROR: could not start client" << e.what();
  104. return EXIT_FAILURE;
  105. }
  106. //
  107. // now do a retrieve into our download directory
  108. //
  109. // this is the study id of the dicom files we load from CTKData
  110. QString studyUID("1.2.840.113619.2.135.3596.6358736.5118.1115807980.182");
  111. QProcess *ctkDICOMRetrieve = new QProcess(0);
  112. QStringList ctkDICOMRetrieve_args;
  113. ctkDICOMRetrieve_args << studyUID;
  114. ctkDICOMRetrieve_args << ctkDICOMRetrieve_directory;
  115. ctkDICOMRetrieve_args << "CTK_AE" << "11113";
  116. ctkDICOMRetrieve_args << "CTK_AE";
  117. ctkDICOMRetrieve_args << "localhost" << "11112" << "CTK_CLIENT_AE";
  118. try
  119. {
  120. out << "running client" << ctkDICOMRetrieve_exe << "\n";
  121. out << "with args" << ctkDICOMRetrieve_args.join(" ") << "\n";
  122. ctkDICOMRetrieve->start(ctkDICOMRetrieve_exe, ctkDICOMRetrieve_args);
  123. ctkDICOMRetrieve->waitForFinished();
  124. out << "ctkDICOMRetrieve Finished.\n";
  125. out << "Standard Output:\n";
  126. out << ctkDICOMRetrieve->readAllStandardOutput();
  127. out << "Standard Error:\n";
  128. out << ctkDICOMRetrieve->readAllStandardError();
  129. }
  130. catch (std::exception e)
  131. {
  132. out << "ERROR: could not start client" << e.what();
  133. return EXIT_FAILURE;
  134. }
  135. //
  136. // clients are finished, not kill server and print output
  137. //
  138. try
  139. {
  140. dcmqrscp->kill();
  141. dcmqrscp->waitForFinished();
  142. out << "dcmqrscp Finished.\n";
  143. out << "Standard Output:\n";
  144. out << dcmqrscp->readAllStandardOutput();
  145. out << "Standard Error:\n";
  146. out << dcmqrscp->readAllStandardError();
  147. }
  148. catch (std::exception e)
  149. {
  150. out << "ERROR: could not start client" << e.what();
  151. return EXIT_FAILURE;
  152. }
  153. return EXIT_SUCCESS;
  154. }