list-particles.c
Go to the documentation of this file.
1 #include <stdlib.h>
2 #include <stdio.h>
3 
4 #include <math.h>
5 
6 #include "corsika-tape.h"
7 #include "corsika-particle.h"
8 
9 
10 #define SKIP 4 /* bytes to skip at beginning of file */
11 
12 char trash[SKIP];
13 
14 
15 int
16 main(int argc, char** argv)
17 {
18  FILE* tape;
19  struct {
20  char skip1[SKIP];
21  block bl;
22  char skip2[SKIP];
23  } tb;
24  int i, j;
25  RWORD desc, A, Z;
26 
27  if ((tape = fopen(argv[1], "r")) == NULL) {
28  fprintf(stderr, "Cannot open file %s. Aborting...\n", argv[1]);
29  exit(1);
30  }
31 
32  while (fread(&tb, sizeof(tb), 1, tape) == 1) {
33  for (i = 0; i < SUB_BLOCKS_IN_BLOCK; ++i) {
34  if (is_control(tb.bl[i].rh.id)) {
35  printf("%4.4s\n", tb.bl[i].rh.id);
36  } else {
37  for (j = 0; j < PARTICLES_IN_SUB_BLOCK; ++j) {
38  desc = tb.bl[i].pd.particle[j].description;
39  printf("%8g: ", desc);
40  if (is_particle_r(desc)) {
41  printf("%-10s", particle[(int)desc/1000].name);
42  } else if (is_nucleus_r(desc)) {
43  A = (int)desc / 100000;
44  Z = (int)desc / 1000 - 100*A;
45  printf("N, Z=%g, A=%g", Z, A);
46  } else {
47  printf("OTHER: %g\n", desc);
48  }
49  if (desc != 0) {
50  printf(", Distance %7.2g (m)", sqrt(tb.bl[i].pd.particle[j].x*tb.bl[i].pd.particle[j].x + tb.bl[i].pd.particle[j].y * tb.bl[i].pd.particle[j].y) / 100.0);
51 #ifdef THINNING
52  printf(", Weight: %g", tb.bl[i].pd.particle[j].weight);
53 #endif
54  printf("\n");
55  }
56  }
57  }
58  }
59  }
60 
61  return 0;
62 }
#define SKIP
#define is_nucleus_r(p)
Definition: corsika-tape.h:239
char trash[4]
int exit
Definition: dump1090.h:237
#define is_particle_r(p)
Definition: corsika-tape.h:238
int main(int argc, char *argv[])
Definition: DBSync.cc:58
#define RWORD
Definition: corsika-tape.h:15
#define is_control(r)
Definition: corsika-tape.h:233
#define SUB_BLOCKS_IN_BLOCK
Definition: corsika-tape.h:25
#define PARTICLES_IN_SUB_BLOCK
Definition: corsika-tape.h:26
struct particle_info particle[80]

, generated on Tue Sep 26 2023.