/* * query the number instances of a series */ int query_series_instances(const std::string& studyinstanceuid, const std::string& seriesinstanceuid, const std::string& server, const std::string& local_aet) { DcmDataset query; DcmElement* e = NULL; e = newDicomElement(DCM_QueryRetrieveLevel); e->putString("IMAGE"); query.insert(e); e = newDicomElement(DCM_StudyInstanceUID); e->putString(studyinstanceuid.c_str()); query.insert(e); e = newDicomElement(DCM_SeriesInstanceUID); e->putString(seriesinstanceuid.c_str()); query.insert(e); e = newDicomElement(DCM_SOPInstanceUID); query.insert(e); e = newDicomElement(DCM_InstanceNumber); query.insert(e); std::cout << "NEW QUERY:" << std::endl; query.print(COUT); NetClient<FindAssociation> a; a.QueryServer(&query, server, local_aet, UID_FINDStudyRootQueryRetrieveInformationModel); DcmStack* result = a.GetResultStack(); std::cout << "query_series_instances = " << result->card() << std::endl; return result->card(); }
/* * query all seriesinstanceuid's and the number series of a study */ int query_study_series(const std::string& studyinstanceuid, const std::string& server, const std::string& local_aet, std::list<std::string>& seriesinstanceuids) { DcmDataset query; DcmElement* e = NULL; e = newDicomElement(DCM_QueryRetrieveLevel); e->putString("SERIES"); query.insert(e); e = newDicomElement(DCM_StudyInstanceUID); e->putString(studyinstanceuid.c_str()); query.insert(e); e = newDicomElement(DCM_SeriesInstanceUID); query.insert(e); e = newDicomElement(DCM_SeriesNumber); query.insert(e); e = newDicomElement(DCM_Modality); query.insert(e); std::cout << "NEW QUERY:" << std::endl; query.print(COUT); NetClient<FindAssociation> a; a.QueryServer(&query, server, local_aet, UID_FINDStudyRootQueryRetrieveInformationModel); DcmStack* result = a.GetResultStack(); DcmDataset* dset; OFString ofstr; seriesinstanceuids.clear(); for(int i = 0; i < result->card(); i++) { dset = (DcmDataset*)result->elem(i); if(dset->findAndGetOFString(DCM_SeriesInstanceUID, ofstr).good()) { seriesinstanceuids.push_back(ofstr.c_str()); } } std::cout << result->card() << " Responses" << std::endl; int count = result->card(); return count; }
void query_series_from_net(const std::string& studyinstanceuid, const std::string& server, const std::string& local_aet, const sigc::slot< void, const Glib::RefPtr< ImagePool::Series >& >& resultslot) { DcmDataset query; DcmElement* e = NULL; e = newDicomElement(DCM_QueryRetrieveLevel); e->putString("SERIES"); query.insert(e); e = newDicomElement(DCM_SpecificCharacterSet); query.insert(e); e = newDicomElement(DCM_StudyInstanceUID); e->putString(studyinstanceuid.c_str()); query.insert(e); e = newDicomElement(DCM_SeriesInstanceUID); query.insert(e); e = newDicomElement(DCM_SeriesNumber); query.insert(e); e = newDicomElement(DCM_Modality); query.insert(e); e = newDicomElement(DCM_SeriesDescription); query.insert(e); e = newDicomElement(DCM_SeriesTime); query.insert(e); e = newDicomElement(DCM_StationName); query.insert(e); e = newDicomElement(DCM_NumberOfSeriesRelatedInstances); query.insert(e); std::cout << "NEW QUERY:" << std::endl; query.print(COUT); NetClient<FindAssociation> a; a.QueryServer(&query, server, local_aet, UID_FINDStudyRootQueryRetrieveInformationModel); DcmStack* result = a.GetResultStack(); for(unsigned int i=0; i<result->card(); i++) { DcmDataset* dset = (DcmDataset*)result->elem(i); dset->print(COUT); resultslot(create_query_series(dset)); } }