GDCM memo
Move Scu
1) Study >> Series move
2) Study >> image move
1) Study からSeriesを抽出。series単位で move
2) Study >> image move
1) Study からSeriesを抽出。series単位で move
- var scp = new gdcm.ServiceClassUser();
- ushort port = 11112;
- ushort portScp = 104;
- string aetcalled = "DCM4CHEE";
- string aetcalling = "any";
- string host = "192.168.0.100";
- //
- string patId = "12345";
- //sendmove
- var scu = new gdcm.ServiceClassUser();
- //scu.SetHostname("192.168.17.13"); scu.SetAETitle("any");
- scu.SetHostname(host);
- scu.SetAETitle(aetcalling);//
- scu.SetPort(port);
- scu.SetTimeout(1d);
- scu.SetCalledAETitle(aetcalled);
- // InitializeConnection
- if (!scu.InitializeConnection())
- { Console.WriteLine("Err :Init"); return; }
- var generator = new PresentationContextGenerator();
- var retDatasets = new DataSetArrayType();
- // Find SCU
- var theTagPair = new gdcm.KeyValuePairArrayType();
- theTagPair.Add(new gdcm.KeyValuePairType(new gdcm.Tag(0x0010, 0x0020), patId));
- theTagPair.Add(new gdcm.KeyValuePairType(new gdcm.Tag(0x0020, 0x000D), "*")); //StudyInstanceUID
- var findquery = gdcm.CompositeNetworkFunctions.ConstructQuery(gdcm.ERootType.eStudyRootType, gdcm.EQueryLevel.eStudy, theTagPair);
- if (!generator.GenerateFromUID(findquery.GetAbstractSyntaxUID()))
- { Console.WriteLine("Err :VerificationSOPClass"); return; }
- scu.SetPresentationContexts(generator.GetPresentationContexts());
- string studyInstanceUid = string.Empty;
- string seriesInstanceUid = string.Empty;
- if (!scu.StartAssociation())
- { Console.WriteLine("Err :StartAssociation"); return; }
- if (scu.SendFind(findquery, retDatasets))
- {
- if (retDatasets.Count > 0)
- {
- foreach (gdcm.DataSet d in retDatasets)
- Console.WriteLine("StudyInstanceUID :" + d.GetDataElement(new gdcm.Tag(0x0020, 0x000D)).toString());
- // Find Last StudyInstancUID to SeriesInstanceUID
- theTagPair = new KeyValuePairArrayType();
- studyInstanceUid=retDatasets[retDatasets.Count - 1].GetDataElement(new gdcm.Tag(0x0020, 0x000D)).GetValue().toString();
- Console.WriteLine(studyInstanceUid);
- theTagPair.Add(new gdcm.KeyValuePairType(new gdcm.Tag(0x0020, 0x000D), studyInstanceUid));
- theTagPair.Add(new gdcm.KeyValuePairType(new gdcm.Tag(0x0020, 0x000E), "*"));
- findquery = gdcm.CompositeNetworkFunctions.ConstructQuery(gdcm.ERootType.eStudyRootType, gdcm.EQueryLevel.eSeries, theTagPair);
- if (!generator.GenerateFromUID(findquery.GetAbstractSyntaxUID()))
- { Console.WriteLine("Err :VerificationSOPClass"); return; }
- scu.SetPresentationContexts(generator.GetPresentationContexts());
- retDatasets=new DataSetArrayType();
- if (scu.SendFind(findquery, retDatasets))
- {
- Console.WriteLine(retDatasets.Count);
- if (retDatasets.Count > 0)
- {
- foreach (gdcm.DataSet d in retDatasets)
- Console.WriteLine("SeriesInstanceUID :" + d.GetDataElement(new gdcm.Tag(0x0020, 0x000D)).toString());
- }
- }
- }
- }
- if (!scu.StopAssociation())
- { Console.WriteLine("Err :scu StopAssociation"); return; }
- //
- if (retDatasets.Count == 0)
- return;
- var moveds = new gdcm.DataSet();
- // Last SeriesInstanceUID
- moveds.Insert(retDatasets[0].GetDataElement(new gdcm.Tag(0x0020, 0x000D)));
- moveds.Insert(retDatasets[0].GetDataElement(new gdcm.Tag(0x0020, 0x000E)));
- //
- var movequery = gdcm.CompositeNetworkFunctions.ConstructQuery(gdcm.ERootType.eStudyRootType, gdcm.EQueryLevel.eImage, moveds, true);
- //
- if (!generator.GenerateFromUID(movequery.GetAbstractSyntaxUID()))
- { Console.WriteLine("Err :VerificationSOPClass"); return; }
- scu.SetPresentationContexts(generator.GetPresentationContexts());
- scu.SetPortSCP(portScp); //PortSCU
- if (!scu.StartAssociation())
- { Console.WriteLine("Err :scu StartAssociation"); return; }
- var data = new gdcm.DataSetArrayType();
- if (!scu.SendMove(movequery, data))
- Console.WriteLine("Err : SendMove");
- if (!scu.StopAssociation())
- { Console.WriteLine("Err :scu StopAssociation"); return; }
- foreach (gdcm.DataSet d in data)
- {
- // represent Photmetric Interpretation
- if(d.FindDataElement(new gdcm.Tag(0x0028,0004)))
- Console.WriteLine(d.GetDataElement(new gdcm.Tag(0x0028,0004)).GetValue().toString());
- }
- Console.WriteLine("...End");
2) Study から imageごとに move
- var scp = new gdcm.ServiceClassUser();
- ushort port = 11112;
- ushort portScp = 104;
- string aetcalled = "DCM4CHEE";
- string aetcalling = "any";
- string host = "192.168.0.100";
- //
- string patId = "12345";
- //sendmove
- var scu = new gdcm.ServiceClassUser();
- //scu.SetHostname("192.168.17.13"); scu.SetAETitle("any");
- scu.SetHostname(host);
- scu.SetAETitle(aetcalling);//
- scu.SetPort(port);
- scu.SetTimeout(1d);
- scu.SetCalledAETitle(aetcalled);
- // InitializeConnection
- if (!scu.InitializeConnection())
- { Console.WriteLine("Err :Init"); return; }
- var generator = new PresentationContextGenerator();
- var retDatasets = new DataSetArrayType();
- // Find SCU
- var theTagPair = new gdcm.KeyValuePairArrayType();
- theTagPair.Add(new KeyValuePairType(new gdcm.Tag(0x0010, 0x0020), patId));
- theTagPair.Add(new KeyValuePairType(new gdcm.Tag(0x0008, 0x0018), "*"));//SOPInstanceUID
- var findquery = gdcm.CompositeNetworkFunctions.ConstructQuery(gdcm.ERootType.eStudyRootType, gdcm.EQueryLevel.eImage, theTagPair);
- if (!generator.GenerateFromUID(findquery.GetAbstractSyntaxUID()))
- { Console.WriteLine("Err :VerificationSOPClass"); return; }
- scu.SetPresentationContexts(generator.GetPresentationContexts());
- if (!scu.StartAssociation())
- { Console.WriteLine("Err :StartAssociation"); return; }
- if (!scu.SendFind(findquery, retDatasets))
- { Console.WriteLine("Err :SendFind"); return; }
- if (!scu.StopAssociation())
- { Console.WriteLine("Err :scu StopAssociation"); return; }
- //
- if (retDatasets.Count == 0)
- return;
- var moveds = new gdcm.DataSet();
- moveds.Insert(retDatasets[0].GetDataElement(new gdcm.Tag(0x0010, 0x0020)));
- moveds.Insert(retDatasets[0].GetDataElement(new gdcm.Tag(0x0020, 0x000D)));
- moveds.Insert(retDatasets[0].GetDataElement(new gdcm.Tag(0x0020, 0x000E)));
- //
- var movequery = gdcm.CompositeNetworkFunctions.ConstructQuery(gdcm.ERootType.eStudyRootType, gdcm.EQueryLevel.eImage, moveds, true);
- //
- if (!generator.GenerateFromUID(movequery.GetAbstractSyntaxUID()))
- { Console.WriteLine("Err :VerificationSOPClass"); return; }
- scu.SetPresentationContexts(generator.GetPresentationContexts());
- scu.SetPortSCP(portScp);
- if (!scu.StartAssociation())
- { Console.WriteLine("Err :scu StartAssociation"); return; }
- for (int i = 0; i < retDatasets.Count; i++)
- {
- var queryds = movequery.GetQueryDataSet();
- var instanceuid = retDatasets[i].GetDataElement(new gdcm.Tag(0x0008, 0x0018));
- Console.WriteLine(instanceuid.toString());
- queryds.Replace(instanceuid);
- var data = new gdcm.DataSetArrayType();
- if (!scu.SendMove(movequery, data))
- { Console.WriteLine("Err : SendMove"); break; }
- var d = data[0];
- // represent Photmetric Interpretation
- if (d.FindDataElement(new gdcm.Tag(0x0028, 0004)))
- Console.WriteLine(d.GetDataElement(new gdcm.Tag(0x0028, 0004)).GetValue().toString());
- }
- if (!scu.StopAssociation())
- { Console.WriteLine("Err :scu StopAssociation"); return; }
- Console.WriteLine("End");
0 件のコメント :
コメントを投稿