This repository has been archived on 2025-04-15. You can view files and clone it, but cannot push or open issues or pull requests.
python_cluster_reader/src/cluster_reader.c
2023-05-24 11:42:28 +02:00

46 lines
1.3 KiB
C

#include "cluster_reader.h"
int read_clusters(FILE* fp, int64_t n_clusters, Cluster* buf, int *n_left){
printf("Item size: %lu n_clusters: %lld, n_left: %d\n", sizeof(Cluster), n_clusters,*n_left);
int iframe=0, nph=*n_left;
size_t n_read=0, nph_read=0, nn=*n_left, nr=0;
//n_left=n_clusters;
//read photons left from previous frame
if (nph) {
if (nph>n_clusters-nph_read)
nn=n_clusters-nph_read;
else
nn=nph;
//printf("* %d %d %d %d\n",iframe,nph,nn,n_left);
nr += fread((void*)(buf+nph_read), sizeof(Cluster), nn, fp);
n_read+=nr/sizeof(Cluster);
nph_read+=nn;
*n_left=nph-nn;
}
if (nph_read<n_clusters) {
//keep on reading frames and photons until reaching n_clusters
while (fread(&iframe, sizeof(iframe), 1, fp)) {
if (fread(&nph, sizeof(nph), 1, fp) ) {
if (nph>n_clusters-nph_read)
nn=n_clusters-nph_read;
else
nn=nph;
//printf("%d %d %d %d\n",iframe,nph,nr,n_left);
nr += fread((void*)(buf+nph_read), sizeof(Cluster), nn, fp);
//printf("%d %d %d %d\n",iframe,nph,nr,n_left);
n_read+=nr;
nph_read+=nn;
*n_left=nph-nn;
}
if (nph_read>=n_clusters)
break;
}
}
// size_t n_read = fread(buf, sizeof(Cluster), n_clusters, fp);
printf("Read: %zu items %zu left %d\n", nph_read, n_read,*n_left);
return nph_read;
}