Main Page
Class Categories
Classes
Namespaces
File List
File Members
exper-sw
cosmosw
AugerSW
Offline
source
main
Utilities
CorsikaCReader
list-particles-2.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
#ifdef QUIET
10
# define Q 0
11
#else
12
# define Q 1
13
#endif
14
15
typedef
struct
{
16
RWORD
r
,
m
, e;
17
}
particle_extra
;
18
19
int
main
(
int
argc,
char
**argv) {
20
corsika_file
*tape;
21
sub_block
*sb;
22
particle_data
*pd;
23
particle_extra
pe;
24
int
i, j;
25
RWORD
desc, A, Z;
26
double
w = 0;
27
int
p
= 0;
28
29
struct
{
30
long
n;
31
double
w, rmax;
32
} rb[] = {
33
{0, 0, 10.e2},
34
{0, 0, 31.6e2},
35
{0, 0, 100.e2},
36
{0, 0, 316.e2},
37
{0, 0, 1000.e2},
38
{0, 0, 3160.e2},
39
{0, 0, 10000.e2},
40
{0, 0, 31600.e2},
41
{0, 0, 0.e0}
42
};
43
RWORD
rmin, rmax;
44
45
if
((tape =
corsika_fopen
(argv[1],
"r"
)) == NULL) {
46
fprintf(stderr,
"Cannot open file %s. Aborting...\n"
, argv[1]);
47
exit
(1);
48
}
49
50
while
((sb =
corsika_get
(tape)) != NULL) {
51
if
(
is_control
(sb->
rh
.
id
)) {
52
Q
&& printf(
"%4.4s\n"
, sb->
rh
.
id
);
53
}
else
{
54
for
(i=0; i<
PARTICLES_IN_SUB_BLOCK
; i++) {
55
pd = sb->
pb
.
particle
+ i;
56
desc = pd->
description
;
57
Q
&& printf(
"%8g: "
,desc);
58
if
(
is_particle_r
(desc)) {
59
Q
&& printf(
"%-10s"
,
60
particle
[(
int
)desc/1000].name);
61
}
else
if
(
is_nucleus_r
(desc)) {
62
A = (int)desc / 100000;
63
Z = (int)desc / 1000 - 100*A;
64
Q
&& printf(
"N, Z=%g, A=%g"
, Z, A);
65
}
else
{
66
Q
&& printf(
"OTHER: %g\n"
, desc);
67
}
68
69
if
(desc != 0) {
70
pe.
r
=
sqrt
(pd->
x
* pd->
x
+ pd->
y
* pd->
y
);
71
for
(j=0; ; j++) {
72
if
(pe.
r
< rb[j].rmax || rb[j].rmax == 0.) {
73
rb[j].n++;
74
#ifdef THINNING
75
rb[j].w += pd->weight;
76
#else
77
rb[j].w += 1;
78
#endif
79
break
;
80
}
81
}
82
Q
&& printf(
", Distance %7.2f (m)"
, pe.
r
/ 100.);
83
#ifdef THINNING
84
Q
&& printf(
", Weight: %g"
, pd->weight);
85
#endif
86
Q
&& printf(
"\n"
);
87
88
p++;
89
#ifdef THINNING
90
w += pd->weight;
91
#endif
92
}
93
}
94
}
95
}
96
printf(
"Total particles: %i"
, p);
97
#ifdef THINNING
98
printf(
", weighted: %g, average weight %g"
, w, w/p);
99
#endif
100
printf(
".\n\n"
);
101
102
w = 0;
103
rmin = 0;
104
for
(j=0; ; j++) {
105
rmax = rb[j].rmax;
106
107
printf(
"Bin %2i (r < "
, j);
108
if
(rmax != 0) printf(
"%8.0f"
, rmax / 100.);
109
else
printf(
"infinity"
);
110
printf(
" m): %8e particles, %i hits,\n"
, rb[j].w, rb[j].n);
111
printf(
" avg. weight %g"
,
112
rb[j].n ? rb[j].w / rb[j].n : 0.0) ;
113
114
if
(rmax != 0)
115
printf(
", density %8.3e m^(-2)"
,
116
rb[j].w / (rmax*rmax - rmin*rmin) / 3.14159e-4);
117
118
printf(
".\n"
);
119
120
w += rb[j].w;
121
122
if
(rmax == 0)
break
;
123
rmin = rmax;
124
125
}
126
printf(
"\nSum of all bins: %g\n"
, w);
127
}
corsika-tape.h
particle_data
Definition:
corsika-tape.h:241
particle_data::description
float description
Definition:
corsika-tape.h:242
G4StationSimulatorOG::p
p
Definition:
G4StationConstruction.cc:106
is_nucleus_r
#define is_nucleus_r(p)
Definition:
corsika-tape.h:239
sub_block::rh
run_header rh
Definition:
corsika-tape.h:276
exit
int exit
Definition:
dump1090.h:237
sub_block
Definition:
corsika-tape.h:275
is_particle_r
#define is_particle_r(p)
Definition:
corsika-tape.h:238
particle_extra
Definition:
list-particles-2.c:15
main
int main(int argc, char *argv[])
Definition:
DBSync.cc:58
run_header::id
char id[4]
Definition:
corsika-tape.h:31
sqrt
double sqrt(const size_t x)
Definition:
Tools/InclinedShowers/TankResponse/Tabular/TankResponse.cc:28
sub_block::pb
particle_sub_block pb
Definition:
corsika-tape.h:280
RWORD
#define RWORD
Definition:
corsika-tape.h:15
particle_sub_block::particle
particle_data particle[39]
Definition:
corsika-tape.h:255
corsika-particle.h
particle_data::y
float y
Definition:
corsika-tape.h:247
Q
#define Q
Definition:
list-particles-2.c:12
is_control
#define is_control(r)
Definition:
corsika-tape.h:233
particle_data::x
float x
Definition:
corsika-tape.h:246
corsika_fopen
corsika_file * corsika_fopen(char *name, char *mode)
Definition:
corsika-tape.c:7
PARTICLES_IN_SUB_BLOCK
#define PARTICLES_IN_SUB_BLOCK
Definition:
corsika-tape.h:26
particle
struct particle_info particle[80]
utl::m
constexpr double m
Definition:
AugerUnits.h:121
corsika_get
sub_block * corsika_get(corsika_file *file)
Definition:
corsika-tape.c:29
particle_extra::r
float r
Definition:
list-particles-2.c:16
corsika_file
Definition:
corsika-tape.h:296
, generated on Tue Sep 26 2023.