246
258
Uint32 img=0, i, f, bytes, t;
247
259
Uint8 *pdata = NULL;
248
double rescale_slope=1., rescale_intercept=0.;
249
double window_center=0., window_width=0.;
250
float quantify_slope=1., quantify_intercept=0.;
253
264
/* handle window center/width */
254
265
if (MDC_FORCE_CONTRAST == MDC_YES) {
255
266
/* apply user specified values */
256
window_center = (double)mdc_cw_center;
257
window_width = (double)mdc_cw_width;
267
wc = (double)mdc_cw_center;
268
ww = (double)mdc_cw_width;
259
270
/* apply file specified values */
260
window_center = (double)dicom->cw_center;
261
window_width = (double)dicom->cw_width;
271
wc = (double)dicom->cw_center;
272
ww = (double)dicom->cw_width;
264
275
/* handle rescale slope and intercept */
265
276
if (MDC_FORCE_RESCALE == MDC_YES) {
266
/* overide with user specified values */
267
dicom->si_slope = mdc_si_slope;
268
dicom->si_intercept = mdc_si_intercept;
271
if ((window_center != 0.) && (window_width != 0.0)) {
272
/* slope/intercept used for contrast remap */
273
if (MDC_DICOM_CONTRAST == MDC_YES) {
274
rescale_slope = dicom->si_slope;
275
rescale_intercept = dicom->si_intercept;
277
/* slope/intercept unused */
278
rescale_slope = 1.; rescale_intercept = 0.;
277
/* apply user specified values */
278
rs = (double)mdc_si_slope;
279
ri = (double)mdc_si_intercept;
281
/* slope/intercept used for quantitation */
282
quantify_slope = dicom->si_slope;
283
quantify_intercept = dicom->si_intercept;
281
/* apply file specified values */
282
rs = (double)dicom->si_slope;
283
ri = (double)dicom->si_intercept;
286
/* prevent division by zero */
287
if (rs == 0.) rs = 1.;
286
289
for (img=0, i=0; i<number; i++) {
287
290
pimg = &image[i];
288
291
for (f=0; f<image[i].frames; f++) {
1048
1063
mdc_dicom_write_element(fi->ofp,0x0008,0x0018,len,(Uint8 *)mdcbufr);
1050
1065
/* date settings, make sure it is conform */
1051
if (fi->study_date_year == 0) {
1052
pdata = NULL; bytes=0;
1066
if (fi->mod != NULL) {
1067
pdata = fi->mod->gn_info.study_date; len = strlen(pdata);
1068
mdc_dicom_write_element(fi->ofp,0x0008,0x0020,len,(Uint8 *)pdata);
1069
pdata = fi->mod->gn_info.series_date; len = strlen(pdata);
1070
mdc_dicom_write_element(fi->ofp,0x0008,0x0021,len,(Uint8 *)pdata);
1071
pdata = fi->mod->gn_info.acquisition_date; len = strlen(pdata);
1072
mdc_dicom_write_element(fi->ofp,0x0008,0x0022,len,(Uint8 *)pdata);
1073
pdata = fi->mod->gn_info.image_date; len = strlen(pdata);
1074
mdc_dicom_write_element(fi->ofp,0x0008,0x0023,len,(Uint8 *)pdata);
1054
sprintf(mdcbufr,"%04d%02d%02d",fi->study_date_year
1055
,fi->study_date_month
1056
,fi->study_date_day);
1057
pdata = mdcbufr; bytes = strlen(mdcbufr);
1076
if (fi->study_date_year == 0) {
1077
pdata = NULL; bytes=0;
1079
sprintf(mdcbufr,"%04d%02d%02d",fi->study_date_year
1080
,fi->study_date_month
1081
,fi->study_date_day);
1082
pdata = mdcbufr; bytes = strlen(mdcbufr);
1084
mdc_dicom_write_element(fi->ofp,0x0008,0x0020,bytes,(Uint8 *)pdata);
1085
mdc_dicom_write_element(fi->ofp,0x0008,0x0021,bytes,(Uint8 *)pdata);
1086
mdc_dicom_write_element(fi->ofp,0x0008,0x0022,bytes,(Uint8 *)pdata);
1087
mdc_dicom_write_element(fi->ofp,0x0008,0x0023,bytes,(Uint8 *)pdata);
1059
mdc_dicom_write_element(fi->ofp,0x0008,0x0020,bytes,(Uint8 *)pdata);
1060
mdc_dicom_write_element(fi->ofp,0x0008,0x0021,bytes,(Uint8 *)pdata);
1061
mdc_dicom_write_element(fi->ofp,0x0008,0x0022,bytes,(Uint8 *)pdata);
1062
mdc_dicom_write_element(fi->ofp,0x0008,0x0023,bytes,(Uint8 *)pdata);
1064
1089
/* time settings, can be full of zero's ... */
1065
sprintf(mdcbufr,"%02d%02d%02d",fi->study_time_hour
1066
,fi->study_time_minute
1067
,fi->study_time_second);
1068
len = strlen(mdcbufr);
1069
mdc_dicom_write_element(fi->ofp,0x0008,0x0030,len,(Uint8 *)mdcbufr);
1070
mdc_dicom_write_element(fi->ofp,0x0008,0x0031,len,(Uint8 *)mdcbufr);
1071
if (fi->image[0].sdata != NULL) {
1072
sprintf(mdcbufr,"%02d%02d%02d",fi->image[0].sdata->start_time_hour
1073
,fi->image[0].sdata->start_time_minute
1074
,fi->image[0].sdata->start_time_second);
1075
len = strlen(mdcbufr);
1076
mdc_dicom_write_element(fi->ofp,0x0008,0x0032,len,(Uint8 *)mdcbufr);
1090
if (fi->mod != NULL) {
1091
pdata = fi->mod->gn_info.study_time; len = strlen(pdata);
1092
mdc_dicom_write_element(fi->ofp,0x0008,0x0030,len,(Uint8 *)pdata);
1093
pdata = fi->mod->gn_info.series_time; len = strlen(pdata);
1094
mdc_dicom_write_element(fi->ofp,0x0008,0x0031,len,(Uint8 *)pdata);
1095
pdata = fi->mod->gn_info.acquisition_time; len = strlen(pdata);
1096
mdc_dicom_write_element(fi->ofp,0x0008,0x0032,len,(Uint8 *)pdata);
1097
pdata = fi->mod->gn_info.image_time; len = strlen(pdata);
1098
mdc_dicom_write_element(fi->ofp,0x0008,0x0033,len,(Uint8 *)pdata);
1078
mdc_dicom_write_element(fi->ofp,0x0008,0x0032,len,(Uint8 *)mdcbufr);
1100
sprintf(mdcbufr,"%02d%02d%02d",fi->study_time_hour
1101
,fi->study_time_minute
1102
,fi->study_time_second);
1103
len = strlen(mdcbufr);
1104
mdc_dicom_write_element(fi->ofp,0x0008,0x0030,len,(Uint8 *)mdcbufr);
1105
mdc_dicom_write_element(fi->ofp,0x0008,0x0031,len,(Uint8 *)mdcbufr);
1106
if (fi->image[0].sdata != NULL) {
1107
sprintf(mdcbufr,"%02d%02d%02d",fi->image[0].sdata->start_time_hour
1108
,fi->image[0].sdata->start_time_minute
1109
,fi->image[0].sdata->start_time_second);
1110
len = strlen(mdcbufr);
1111
mdc_dicom_write_element(fi->ofp,0x0008,0x0032,len,(Uint8 *)mdcbufr);
1113
mdc_dicom_write_element(fi->ofp,0x0008,0x0032,len,(Uint8 *)mdcbufr);
1115
sprintf(mdcbufr,"%02d%02d%02d",fi->study_time_hour
1116
,fi->study_time_minute
1117
,fi->study_time_second);
1118
len = strlen(mdcbufr);
1119
mdc_dicom_write_element(fi->ofp,0x0008,0x0033,len,(Uint8 *)mdcbufr);
1080
sprintf(mdcbufr,"%02d%02d%02d",fi->study_time_hour
1081
,fi->study_time_minute
1082
,fi->study_time_second);
1083
len = strlen(mdcbufr);
1084
mdc_dicom_write_element(fi->ofp,0x0008,0x0033,len,(Uint8 *)mdcbufr);
1086
1122
len = strlen(mdc_dummy1);
1087
1123
mdc_dicom_write_element(fi->ofp,0x0008,0x0050,len,(Uint8 *)mdc_dummy1);
1529
1563
mdc_dicom_write_element(fi->ofp,0x0018,0x0031,len,(Uint8 *)mdcbufr);
1530
1564
strcpy(mdcbufr,"0.0"); len = strlen(mdcbufr);
1531
1565
mdc_dicom_write_element(fi->ofp,0x0018,0x1071,len,(Uint8 *)mdcbufr);
1532
/* strcpy(mdcbufr,"000000"); len = strlen(mdcbufr); start time
1533
mdc_dicom_write_element(fi->ofp,0x0018,0x1072,len,(Uint8 *)mdcbufr); */
1566
sprintf(mdcbufr,"%02d%02d%02d",fi->dose_time_hour
1567
,fi->dose_time_minute
1568
,fi->dose_time_second);
1569
len = strlen(mdcbufr);
1570
mdc_dicom_write_element(fi->ofp,0x0018,0x1072,len,(Uint8 *)mdcbufr);
1534
1571
sprintf(mdcbufr,"%g",fi->injected_dose); len = strlen(mdcbufr);
1535
1572
mdc_dicom_write_element(fi->ofp,0x0018,0x1074,len,(Uint8 *)mdcbufr);
1536
1573
sprintf(mdcbufr,"%g",fi->isotope_halflife); len = strlen(mdcbufr);