cleaned up read_clusters
This commit is contained in:
parent
8471ba22fb
commit
03043e0bc3
@ -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)
|
||||||
|
@ -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
|
Reference in New Issue
Block a user