8#include "tpcclibConfig.h"
22static char *info[] = {
23 "Delete specified image matrix (frames and plane) in ECAT 6.3 file.",
24 "Note! Missing matrices usually prevent the usage of the image in most software.",
26 "Usage: @P [Options] imgfile frame plane outputfile ",
32 " @P a2345dy1.img 20 10 a2345dy1_partial.img ",
34 "See also: e63mreg, esplit, imgdelfr, lmlist, eframe, efixplnr, imgadd",
36 "Keywords: ECAT, matrixlist, cropping, software testing",
55int main(
int argc,
char **argv)
57 int ai, help=0, version=0, verbose=1;
60 char ecatfile[FILENAME_MAX], outfile[FILENAME_MAX];
68 if(argc==1) {
tpcPrintUsage(argv[0], info, stderr);
return(1);}
69 ecatfile[0]=outfile[0]=(char)0;
72 for(ai=1; ai<argc; ai++)
if(*argv[ai]==
'-') {
75 fprintf(stderr,
"Error: invalid option '%s'.\n", argv[ai]);
80 if(help==2) {
tpcHtmlUsage(argv[0], info,
"");
return(0);}
85 if(ai<argc) {
strlcpy(ecatfile, argv[ai++], FILENAME_MAX);}
88 fprintf(stderr,
"Error: invalid frame number.\n");
return(1);}
92 fprintf(stderr,
"Error: invalid plane number.\n");
return(1);}
94 if(ai<argc) {
strlcpy(outfile, argv[ai++], FILENAME_MAX);}
96 fprintf(stderr,
"Error: extra argument '%s'.\n", argv[ai]);
102 fprintf(stderr,
"Error: missing command-line argument; try %s --help\n", argv[0]);
107 if(strcasecmp(ecatfile, outfile)==0) {
108 fprintf(stderr,
"Error: same name for input and output file.\n");
114 printf(
"ecatfile := %s\n", ecatfile);
115 printf(
"outputfile := %s\n", outfile);
116 printf(
"frame := %d\n", frame);
117 printf(
"plane := %d\n", plane);
124 if(verbose>1) {fprintf(stdout,
"reading %s\n", ecatfile); fflush(stdout);}
128 if((fp=fopen(ecatfile,
"rb")) == NULL) {
129 fprintf(stderr,
"Error: cannot read file %s\n", ecatfile);
134 if(verbose>2) {fprintf(stdout,
"reading main header\n"); fflush(stdout);}
137 fprintf(stderr,
"Error: cannot read main header.\n");
138 if(verbose>1) printf(
" ret := %d\n", ret);
139 fclose(fp);
return(2);
145 fprintf(stderr,
"Error: cannot read matrix list.\n");
146 if(verbose>1) printf(
" ret := %d\n", ret);
147 fclose(fp);
return(2);
150 fprintf(stderr,
"Error: matrix list is empty.\n");
151 fclose(fp);
return(2);
155 fprintf(stderr,
"Warning: matrix list fails testing (%d).\n", ret);
165 int delNr=0, planeNr=0, frameNr=0;
167 for(
int m=0; m<mlist63.
matrixNr; m++) {
169 if(matval63.
plane==plane && matval63.
frame==frame) {
174 if(matval63.
plane>planeNr) planeNr=matval63.
plane;
175 if(matval63.
frame>frameNr) frameNr=matval63.
frame;
178 fprintf(stderr,
"Error: specified matrix was not found.\n");
180 fclose(fp);
return(3);
183 fprintf(stderr,
"Error: no matrices left after deleting this matrix.\n");
185 fclose(fp);
return(4);
202 fprintf(stderr,
"Error: cannot write ECAT file.\n");
213 fprintf(stderr,
"Error: cannot write ECAT matrix.\n");
216 if(verbose>3) printf(
" m=%d blkNr=%d nxtblk=%d\n", m, blkNr, nxtblk);
222 fprintf(stderr,
"Error: cannot find matrix block %lld.\n", bi);
226 fprintf(stderr,
"Error: cannot read matrix block %lld.\n", bi);
230 fseeko(fp2, (
long long)(nxtblk-1)*
MatBLKSIZE, SEEK_SET);
231 if(ftello(fp2)!=(
long long)(nxtblk-1)*
MatBLKSIZE) {
232 fprintf(stderr,
"Error: cannot find matrix block %d for write.\n", nxtblk);
236 fprintf(stderr,
"Error: cannot write matrix block %d.\n", nxtblk);
244 fclose(fp); fclose(fp2);
247 if(verbose>0) fprintf(stdout,
"done.\n");
int atoi_with_check(const char *int_as_string, int *result_value)
int ecat63Matenter(FILE *fp, int matnum, int blkNr)
int ecat63ReadMatlist(FILE *fp, MATRIXLIST *ml, int verbose)
void ecat63InitMatlist(MATRIXLIST *mlist)
void ecat63EmptyMatlist(MATRIXLIST *mlist)
void ecat63PrintMatlist(MATRIXLIST *ml)
int ecat63CheckMatlist(MATRIXLIST *ml)
void mat_numdoc(int matnum, Matval *matval)
int ecat63ReadMainheader(FILE *fp, ECAT63_mainheader *h)
FILE * ecat63Create(const char *fname, ECAT63_mainheader *h)
Header file for libtpcimgio.
Header file for libtpcmisc.
int tpcProcessStdOptions(const char *s, int *print_usage, int *print_version, int *verbose_level)
size_t strlcpy(char *dst, const char *src, size_t dstsize)
int tpcHtmlUsage(const char *program, char *text[], const char *path)
void tpcPrintBuild(const char *program, FILE *fp)
void tpcPrintUsage(const char *program, char *text[], FILE *fp)