GDCM memo
Find Scu
PatID>>StudyInstansUID>>SeriesInstanceUID>>SOPInstanceUID
患者番号からSOPInstanceUIDを抽出
ushort port = 11112;
string aetcalled = "DCM4CHEE";
string aetcalling = "any";
string host = "192.168.0.1";
//Patient Number
string patId="123";
//Study Level
gdcm.PresentationContextGenerator generator = new PresentationContextGenerator();
gdcm.KeyValuePairArrayType theTagPair = new KeyValuePairArrayType();
theTagPair.Add(new KeyValuePairType(new gdcm.Tag(0x0010, 0x0020), patId));
theTagPair.Add(new KeyValuePairType(new gdcm.Tag(0x0010, 0x0010), "*")); //Name
theTagPair.Add(new KeyValuePairType(new gdcm.Tag(0x0010, 0x0030), "*")); //Birthday
theTagPair.Add(new KeyValuePairType(new gdcm.Tag(0x0010, 0x0040), "*")); //Sex
theTagPair.Add(new KeyValuePairType(new gdcm.Tag(0x0020, 0x000D), "*")); //StudyInstanceUID
theTagPair.Add(new KeyValuePairType(new gdcm.Tag(0x0008, 0x0050), "*")); //AccessionNumber
var query = gdcm.CompositeNetworkFunctions.ConstructQuery(gdcm.ERootType.ePatientRootType,
gdcm.EQueryLevel.eStudy, theTagPair);
var ret = new DataSetArrayType();
bool b = gdcm.CompositeNetworkFunctions.CFind(host, port, query, ret, aetcalling, aetcalled);
List studyInsUidList = new List();
for (int i = 0; i < ret.Count; i++)
{
var ds = ret[i];
Console.WriteLine("StudyInsUid:" + ds.GetDataElement(new gdcm.Tag(0x0020, 0x000D)).GetValue().toString());
studyInsUidList.Add(ds.GetDataElement(new gdcm.Tag(0x0020, 0x000D)).GetValue().toString());
}
//Series Level
string studyInsUid = studyInsUidList[0].Trim(); //Select First Series
theTagPair = new KeyValuePairArrayType();
theTagPair.Add(new KeyValuePairType(new gdcm.Tag(0x0020, 0x000D), studyInsUid)); //StudyInstanceUID
theTagPair.Add(new KeyValuePairType(new gdcm.Tag(0x0020, 0x000E), "*")); //SeriesInstanceUID
theTagPair.Add(new KeyValuePairType(new gdcm.Tag(0x0008, 0x0060), "*")); //Modality
theTagPair.Add(new KeyValuePairType(new gdcm.Tag(0x0020, 0x0011), "*")); //SeriesNumber
query = gdcm.CompositeNetworkFunctions.ConstructQuery(gdcm.ERootType.eStudyRootType,
gdcm.EQueryLevel.eSeries, theTagPair);
ret = new DataSetArrayType();
gdcm.CompositeNetworkFunctions.CFind(host, port, query, ret, aetcalling, aetcalled);
List seriesInsUidList = new List();
for (int i = 0; i < ret.Count; i++)
{
var ds = ret[i];
Console.WriteLine("SeriesInsUid:" + ds.GetDataElement(new gdcm.Tag(0x0020, 0x000E)).GetValue().toString());
seriesInsUidList.Add(ds.GetDataElement(new gdcm.Tag(0x0020, 0x000E)).GetValue().toString());
}
//Image Level
string seriesInsUid = seriesInsUidList[0].Trim(); //Select First Series
theTagPair = new KeyValuePairArrayType();
theTagPair.Add(new KeyValuePairType(new gdcm.Tag(0x0020, 0x000E), seriesInsUid)); //SeriesInstanceUID
theTagPair.Add(new KeyValuePairType(new gdcm.Tag(0x0020, 0x0013), "*")); //InstanceNumber
theTagPair.Add(new KeyValuePairType(new gdcm.Tag(0x0008, 0x0018), "*")); //SOPInstanceUID
query = gdcm.CompositeNetworkFunctions.ConstructQuery(gdcm.ERootType.eStudyRootType,
gdcm.EQueryLevel.eImage, theTagPair);
ret = new DataSetArrayType();
gdcm.CompositeNetworkFunctions.CFind(host, port, query, ret, aetcalling, aetcalled);
for (int i = 0; i < ret.Count; i++)
{
var ds = ret[i];
Console.WriteLine("SopInsUid:" + ds.GetDataElement(new gdcm.Tag(0x0008, 0x0018)).GetValue().toString());
}