57 std::vector<double> dImagePositionPatient =
Read1Data(
theDataset, DCM_ImagePositionPatient,3);
68 fMinX = dImagePositionPatient[0];
69 fMaxX = dImagePositionPatient[0]+dColumns[0]*dPixelSpacing[0];
71 fMinY = dImagePositionPatient[1];
72 fMaxY = dImagePositionPatient[1]+dRows[0]*dPixelSpacing[1];
74 fMinZ = dImagePositionPatient[2]-dSliceThickness[0]/2.;
75 fMaxZ = dImagePositionPatient[2]+dSliceThickness[0]/2.;
89 std::vector<double> dImageOrientationPatient =
91 fOrientationRows = G4ThreeVector(dImageOrientationPatient[0],dImageOrientationPatient[1],
92 dImageOrientationPatient[2]);
93 fOrientationColumns = G4ThreeVector(dImageOrientationPatient[3],dImageOrientationPatient[4],
94 dImageOrientationPatient[5]);
100 G4Exception(
"DicomVFileImage::ReadData",
103 "OrientationRows must be (1,0,0) and OrientationColumns (0,1,0), please contact GAMOS authors");
109 if( dRescaleSlope.size() == 1 ) {
115 if( dRescaleIntercept.size() == 1 ) {
129 OFCondition result = EC_Normal;
131 DcmElement* element = NULL;
132 result =
theDataset->findAndGetElement(DCM_PixelData, element);
133 if (result.bad() || element == NULL) {
134 G4Exception(
"ReadData",
135 "findAndGetElement(DCM_PixelData, ",
137 (
"Element PixelData not found: " +
G4String(result.text())).c_str());
139 DcmPixelData *dpix = NULL;
140 dpix = OFstatic_cast(DcmPixelData*, element);
144 DcmPixelSequence *dseq = NULL;
145 E_TransferSyntax xferSyntax = EXS_Unknown;
146 const DcmRepresentationParameter *rep = NULL;
148 dpix->getOriginalRepresentationKey(xferSyntax, rep);
150 result = dpix->getEncapsulatedRepresentation(xferSyntax, rep, dseq);
151 if ( result == EC_Normal )
153 G4Exception(
"DicomVFileImage::ReadData()",
156 "Compressed pixel data is not supported");
159 <<
" DicomVFileImage::ReadData: result == EC_Normal Reading compressed data " << std::endl;
160 DcmPixelItem* pixitem = NULL;
162 for(
int ii = 1; ii < 2; ii++ ) {
163 OFCondition cond = dseq->getItem(pixitem, ii);
164 if( !cond.good())
break;
165 G4cout << ii <<
" PIX LENGTH " << pixitem->getLength() << G4endl;
167 if (pixitem == NULL) {
168 G4Exception(
"ReadData",
171 "No DcmPixelItem in DcmPixelSequence");
173 Uint8* pixData = NULL;
176 Uint32 length = pixitem->getLength();
178 G4Exception(
"ReadData",
179 "pixitem->getLength()",
185 <<
" DicomVFileImage::ReadData: number of pixels " << length << G4endl;
187 result = pixitem->getUint8Array(pixData);
190 Uint8* pixData = NULL;
191 if(! (element->getUint8Array(pixData)).good() ) {
192 G4Exception(
"ReadData",
193 "getUint8Array pixData, ",
195 (
"PixelData not found: " +
G4String(result.text())).c_str());
203 Uint16* pixData = NULL;
204 if(! (element->getUint16Array(pixData)).good() ) {
205 G4Exception(
"ReadData",
206 "getUint16Array pixData, ",
208 (
"PixelData not found: " +
G4String(result.text())).c_str());
216 Uint32* pixData = NULL;
217 if(! (element->getUint32Array(pixData)).good() ) {
218 G4Exception(
"ReadData",
219 "getUint32Array pixData, ",
221 (
"PixelData not found: " +
G4String(result.text())).c_str());