Geant4 Cross Reference |
1 // 2 // ******************************************************************** 3 // * License and Disclaimer * 4 // * * 5 // * The Geant4 software is copyright of the Copyright Holders of * 6 // * the Geant4 Collaboration. It is provided under the terms and * 7 // * conditions of the Geant4 Software License, included in the file * 8 // * LICENSE and available at http://cern.ch/geant4/license . These * 9 // * include a list of copyright holders. * 10 // * * 11 // * Neither the authors of this software system, nor their employing * 12 // * institutes,nor the agencies providing financial support for this * 13 // * work make any representation or warranty, express or implied, * 14 // * regarding this software system or assume any liability for its * 15 // * use. Please see the license in the file LICENSE and URL above * 16 // * for the full disclaimer and the limitation of liability. * 17 // * * 18 // * This code implementation is the result of the scientific and * 19 // * technical work of the GEANT4 collaboration. * 20 // * By using, copying, modifying or distributing the software (or * 21 // * any work based on the software) you agree to acknowledge its * 22 // * use in resulting scientific publications, and indicate your * 23 // * acceptance of all terms of the Geant4 Software license. * 24 // ******************************************************************** 25 // 26 #include "DicomVFile.hh" 27 28 #include "dcmtk/dcmdata/dcdeftag.h" 29 #include "dcmtk/dcmdata/dcfilefo.h" 30 #include "dcmtk/dcmdata/dcpixel.h" 31 #include "dcmtk/dcmdata/dcpixseq.h" 32 #include "dcmtk/dcmdata/dcpxitem.h" 33 34 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 35 DicomVFile::DicomVFile(DcmDataset* dset) : theDataset(dset) {} 36 37 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 38 std::vector<G4double> DicomVFile::Read1Data(DcmDataset* dset, DcmTagKey tagKey, G4int nData) 39 { 40 std::vector<G4double> dataV; 41 42 for (int ii = 0; ii < nData; ++ii) { 43 G4double data; 44 Uint16 datai; 45 // see http://support.dcmtk.org/docs/classDcmItem.html for types 46 if (dset->findAndGetFloat64(tagKey, data, ii).good()) { 47 dataV.push_back(data); 48 } 49 else if (dset->findAndGetUint16(tagKey, datai, ii).good()) { 50 dataV.push_back(datai); 51 } 52 else { 53 G4cout << "ERROR (" << std::showbase // show the 0x prefix 54 << std::internal // fill between the prefix and the number 55 << std::setfill('0') << std::hex << std::setw(4) << tagKey.getGroup() << "," 56 << tagKey.getElement() << ") " << std::dec << ii << std::endl; 57 G4Exception("DicomHandler::ReadData", "", JustWarning, 58 (std::to_string(data) + G4String(" Have not read (") 59 + std::to_string(tagKey.getGroup()) + "," + std::to_string(tagKey.getElement()) 60 + ")" + " : " + std::to_string(ii)) 61 .c_str()); 62 } 63 } 64 65 return dataV; 66 } 67 68 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 69 OFString DicomVFile::Read1DataStr(DcmDataset* dset, DcmTagKey tagKey) 70 { 71 // const char* data = ""; 72 OFString data; 73 // see http://support.dcmtk.org/docs/classDcmItem.html for types 74 if (dset->findAndGetOFString(tagKey, data).good()) { 75 } 76 else { 77 G4cout << "ERROR (" << std::showbase // show the 0x prefix 78 << std::internal // fill between the prefix and the number 79 << std::setfill('0') << std::hex << std::setw(4) << tagKey.getGroup() << "," 80 << tagKey.getElement() << ") " << std::dec << std::endl; 81 G4Exception("DicomHandler::ReadData", "", JustWarning, 82 (" Have not read (" + std::to_string(tagKey.getGroup()) + "," 83 + std::to_string(tagKey.getElement()) + ")" + " : ") 84 .c_str()); 85 } 86 87 return data.c_str(); 88 } 89