cleaned up read_clusters

This commit is contained in:
froejdh_e 2023-10-27 11:32:21 +02:00
parent 8471ba22fb
commit 03043e0bc3
2 changed files with 9 additions and 12 deletions

View File

@ -2,30 +2,28 @@
#include <assert.h> #include <assert.h>
size_t read_clusters(FILE *fp, size_t n_clusters, Cluster *buf, uint32_t *n_left) { size_t read_clusters(FILE *fp, size_t n_clusters, Cluster *buf, uint32_t *n_left) {
int iframe = 0; int32_t iframe = 0; // frame number needs to be 4 bytes!
uint32_t nph = *n_left; uint32_t nph = *n_left; // number of clusters in frame needs to be 4 bytes!
size_t nph_read = 0; size_t nph_read = 0;
uint32_t nn = *n_left; uint32_t nn = *n_left;
size_t nr = 0;
// read photons left from previous frame
// if there are photons left from previous frame read them first
if (nph) { if (nph) {
if (nph > n_clusters) { if (nph > n_clusters) {
// if we have more photons left in the frame then photons to read we // if we have more photons left in the frame then photons to read we
// read directly // read directly the requested number
nn = n_clusters; nn = n_clusters;
} else { } else {
nn = nph; nn = nph;
} }
nr += fread((void *)(buf + nph_read), sizeof(Cluster), nn, fp); nph_read += fread((void *)(buf + nph_read), sizeof(Cluster), nn, fp);
nph_read += nn; *n_left = nph - nn; //write back the number of photons left
*n_left = nph - nn;
} }
if (nph_read < n_clusters) { if (nph_read < n_clusters) {
// keep on reading frames and photons until reaching n_clusters // keep on reading frames and photons until reaching n_clusters
while (fread(&iframe, sizeof(iframe), 1, fp)) { while (fread(&iframe, sizeof(iframe), 1, fp)) {
// read number of clusters in frame // read number of clusters in frame
if (fread(&nph, sizeof(nph), 1, fp)) { if (fread(&nph, sizeof(nph), 1, fp)) {
if (nph > (n_clusters - nph_read)) if (nph > (n_clusters - nph_read))
@ -33,8 +31,7 @@ size_t read_clusters(FILE *fp, size_t n_clusters, Cluster *buf, uint32_t *n_left
else else
nn = nph; nn = nph;
nr += fread((void *)(buf + nph_read), sizeof(Cluster), nn, fp); nph_read += fread((void *)(buf + nph_read), sizeof(Cluster), nn, fp);
nph_read += nn;
*n_left = nph - nn; *n_left = nph - nn;
} }
if (nph_read >= n_clusters) if (nph_read >= n_clusters)

View File

@ -7,6 +7,6 @@ import sys
# fname= (data_path/'beam_En700eV_-40deg_300V_10us_d0_f0_100.clust').as_posix() # fname= (data_path/'beam_En700eV_-40deg_300V_10us_d0_f0_100.clust').as_posix()
# r = ClusterFileReader(fname) # r = ClusterFileReader(fname)
# clusters = r.read(10) # clusters = r.read(10)
# result = clusterize(clusters) # result = clusterize(3, clusters)
# assert sys.getrefcount(clusters) == 2 #Over counts by one due to call by reference # assert sys.getrefcount(clusters) == 2 #Over counts by one due to call by reference
# assert sys.getrefcount(result) == 2 # assert sys.getrefcount(result) == 2