~ubuntu-branches/ubuntu/utopic/mricron/utopic

« back to all changes in this revision

Viewing changes to dcm2nii/dicomtypes.pas

  • Committer: Bazaar Package Importer
  • Author(s): Michael Hanke
  • Date: 2011-04-14 15:51:33 UTC
  • mfrom: (1.1.3 upstream)
  • Revision ID: james.westby@ubuntu.com-20110414155133-sd2umdatjqjlkhzt
Tags: 0.20110413.1~dfsg.1-1
* New upstream version. FSL BET related patches are no obsolete
  and have been removed. Mricron now performs autodetection of FSL.
  Additionally it supports a system-wide configuration file at
  /etc/mricron/mricron.ini
* Patch for older lazarus versions no longer applies to the lazarus
  version in unstable. Moved this patch into backport patch series files.

Show diffs side-by-side

added added

removed removed

Lines of Context:
42
42
   ProtocolName,AcqTime,ImgTime,PatientName,PatientID,StudyDate,StudyTime,modality,serietag: String;
43
43
    end;//DICOMdata record *)
44
44
    kDICOMStr = String[32];
45
 
        DICOMdata = record
46
 
   XYZdim: array [1..4] of integer;
47
 
   XYZori: array [1..3] of integer;
48
 
   XYZmm: array [1..3] of double;
49
 
   Orient: array [1..6] of double;
50
 
   SiemensDICOMDTI,Float,file4D,JPEGLossyCpt,JPEGLosslessCpt: boolean;
51
 
   PatientPosX,PatientPosY,PatientPosZ,AngulationAP,AngulationFH,AngulationRL: double;
52
 
   TE, TR,IntenScale,IntenIntercept,location{,DTIv1,DTIv2,DTIv3}: single;
53
 
   {Bval,}SlicesPer3DVol,SiemensInterleaved {0=no,1=yes,2=not defined},SiemensSlices,SiemensMosaicX,SiemensMosaicY,
54
 
   nOrder,nDTIdir,AcquNum,ImageNum,SeriesNum,ImageStart,little_endian,Allocbits_per_pixel,SamplesPerPixel,
55
 
   CSAImageHeaderInfoPos,CSAImageHeaderInfoSz,ManufacturerID,PlanarConfig, ImplementationVersion,
56
 
   CompressOffset,CompresssZ: integer;
57
 
   DateTime: TDateTime;
58
 
   PatientPos,PatientName,ProtocolName,StudyDate,StudyTime,PhilipsSliceOrient,PhaseEncoding: kDICOMStr;
59
 
   Filename: string[255];
60
 
   DTI: TDTIRA;
 
45
   DICOMdata = record
 
46
             XYZdim: array [1..4] of integer;
 
47
             XYZori: array [1..3] of integer;
 
48
             XYZmm: array [1..3] of double;
 
49
             Orient: array [1..6] of double;
 
50
             SiemensDICOMDTICSA,SiemensDICOMDTI,Float,file4D,JPEGLossyCpt,JPEGLosslessCpt: boolean;
 
51
             PatientPosX,PatientPosY,PatientPosZ,AngulationAP,AngulationFH,AngulationRL: double;
 
52
             TE, TR,IntenScale,IntenIntercept,location{,DTIv1,DTIv2,DTIv3}: single;
 
53
             {Bval,}SlicesPer3DVol,SiemensInterleaved {0=no,1=yes,2=not defined},SiemensSlices,SiemensMosaicX,SiemensMosaicY,
 
54
             nOrder,nDTIdir,AcquNum,ImageNum,SeriesNum,ImageStart,little_endian,Allocbits_per_pixel,SamplesPerPixel,
 
55
             CSAImageHeaderInfoPos,CSAImageHeaderInfoSz,ManufacturerID,PlanarConfig, //ImplementationVersion,
 
56
             Vers0018_1020,
 
57
             CompressOffset,CompresssZ: integer;
 
58
             DateTime: TDateTime;
 
59
             PatientGender,PatientDoB,PatientPos,PatientName,ProtocolName,StudyDate,StudyTime,PhilipsSliceOrient,PhaseEncoding: kDICOMStr;
 
60
             Filename: string[255];        
 
61
             DTI: TDTIRA;
61
62
   Order: TOrder; //4D datasets
62
63
   //OrderSlope,OrderIntercept: TOrderScaling; //4D datasets
63
64
   end;//DICOMdata record
219
220
function GetCSAImageHeaderInfo (lFilename: string; lStart,lLength: integer; var lMosaicSlices,lMosaicX,lMosaicY: integer; var lv1,lv2,lv3: double): boolean;
220
221
procedure AplhaNumericStrDICOM (var lStr: kDICOMStr);
221
222
procedure PartialAcquisitionError;
 
223
function DICOMstr (i: integer; var lDICOMra: TDICOMrap;lOutname:string): string; overload;
 
224
function DICOMstr (i: integer; var lDICOMra: TDICOMrap): string; overload;
222
225
 
223
226
implementation
224
227
 
225
228
uses dicom,sysutils,define_types,dialogsx;
226
229
 
 
230
function YearsOld (lDICOM: DICOMdata): single;
 
231
var
 
232
   dob: TDateTime;
 
233
   lnoon:string;
 
234
begin
 
235
     result := 0;
 
236
     if length (lDICOM.PatientDoB) < 8 then
 
237
        exit; //YYYYMMDD
 
238
     try
 
239
       lnoon := '120000';
 
240
     dob := StudyDateTime (lDICOM.PatientDoB, lnoon);
 
241
       result := (lDICOM.DateTime-dob)/365.2425;
 
242
     except
 
243
           result := 0;
 
244
     end;
 
245
end;
 
246
function DICOMstr (i: integer; var lDICOMra: TDICOMrap;lOutname: string): string;  overload;
 
247
var
 
248
   lS: string;
 
249
begin
 
250
     if lOutname <> '' then
 
251
        lS := kTab+'SuggestedOutput:'+lOutname
 
252
     else
 
253
         lS := '';
 
254
 
 
255
     result := lDICOMra^[i].Filename
 
256
       +kTab+'SeriesNum:'+kTab+inttostr(lDICOMra^[i].SeriesNum)
 
257
       +kTab+'AcquNum:'+inttostr(lDICOMra^[i].AcquNum)
 
258
       +kTab+'ImageNum:'+inttostr(lDICOMra^[i].ImageNum)
 
259
       +kTab+'Name:'+lDICOMra^[i].PatientName
 
260
       +kTab+'DoB:'+lDICOMra^[i].PatientDoB
 
261
       +kTab+'Gender:'+lDICOMra^[i].PatientGender
 
262
       +kTab+'DateTime:'+DateTimeToStr(lDICOMra^[i].DateTime)
 
263
       +kTab+'Age(Years):'+floattostr(YearsOld(lDICOMra^[i]))
 
264
       +lS ;
 
265
 
 
266
end;  
 
267
 
 
268
function DICOMstr (i: integer; var lDICOMra: TDICOMrap): string; overload;
 
269
begin
 
270
    result := DICOMstr (i, lDICOMra,'')
 
271
end;
 
272
 
227
273
procedure PartialAcquisitionError;
228
274
begin
229
275
     Msg('*  Potential partial acquisition or improper segmentation of files');
603
649
                Orient[lI] := 0;
604
650
           DateTime := BogusDateTime;
605
651
       ManufacturerID := 0;
606
 
       ImplementationVersion := 0;
 
652
       //ImplementationVersion := 0;
 
653
       Vers0018_1020 := 0;
607
654
       AngulationFH := 0;
608
655
       AngulationRL := 0;
609
656
       AngulationAP := 0;
623
670
       DTI[lDICOMdata.nDTIdir].v3 := 0; *)
624
671
       end;
625
672
       SiemensDICOMDTI := true;
 
673
       SiemensDICOMDTICSA := false;
626
674
       file4D := false;
627
675
       PatientName := 'NO NAME';
 
676
       PatientDoB := 'NO DOB';
 
677
       PatientGender := 'NA';
628
678
       //PatientID := 'NO ID';
629
679
       StudyDate := '';
630
680
       StudyTime := '';