-
Notifications
You must be signed in to change notification settings - Fork 0
/
run_digi_mpi.c
127 lines (122 loc) · 3.16 KB
/
run_digi_mpi.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <mpi.h>
#include <unistd.h>
#define TMPDIR "/home/clusters/rrcmpi/alekseev/igor/tmp"
#define HITINFODIR "/home/clusters/rrcmpi/alekseev/igor/hitcheck"
// argv[1] - the first digi file number
int main(int argc, char *argv[])
{
int serial;
char str[4096];
char clist[1024];
char fname[1024];
char hitinfo[1024];
FILE *flist;
int fnum;
time_t t0, t1;
int irc, iver;
char *suffix;
char *tdir;
char *tcalib;
char *runlist;
char *runnum;
char *ptr;
FILE *rfile;
int i;
int SetVer = 0;
t0 = time(NULL);
// Get our run number
MPI_Init(&argc, &argv);
if (argc < 2) {
printf("Usage %s first_run_number\n", argv[0]);
goto fin;
}
fnum = strtol(argv[1], NULL, 0);
MPI_Comm_rank(MPI_COMM_WORLD, &serial);
fnum += serial;
tdir = getenv("OUT_DIR");
if (!tdir) tdir = "root6n";
// Check if run from list is required and get its number
runlist = getenv("DIGI_LIST");
if (runlist) {
rfile = fopen(runlist, "rt");
if (!rfile) {
fprintf(stderr, "Can not open the list file %s!\n", runlist);
goto fin;
}
for (i=0; i<fnum; i++) {
runnum = fgets(str, sizeof(str), rfile);
if (!runnum) goto fin;
}
fnum = strtol(str, NULL, 10);
}
ptr = getenv("DIGI_VERSION");
if (ptr) SetVer = strtol(ptr, NULL, 10);
// Try possible file names:
iver = 0;
// V3
if (!SetVer || SetVer == 3) {
iver = 3;
sprintf(fname, "digi_v3.0/%3.3dxxx/danss_data_%6.6d_phys.digi", fnum/1000, fnum);
irc = access(fname, R_OK);
if (!irc) goto found;
strcat(fname, ".bz2");
irc = access(fname, R_OK);
if (!irc) goto found;
iver = 3;
sprintf(fname, "digi_rad/%3.3dxxx/danss_data_%6.6d_phys.digi", fnum/1000, fnum);
irc = access(fname, R_OK);
if (!irc) goto found;
strcat(fname, ".bz2");
irc = access(fname, R_OK);
if (!irc) goto found;
}
// V2
if (!SetVer || SetVer == 2) {
iver = 2;
sprintf(fname, "digi_v2.1/%3.3dxxx/danss_data_%6.6d_phys_rawrec.digi", fnum/1000, fnum);
irc = access(fname, R_OK);
if (!irc) goto found;
strcat(fname, ".bz2");
irc = access(fname, R_OK);
if (!irc) goto found;
// No digi file
printf("Run %6.6d not found.\n", fnum);
}
goto fin;
found:
// create the list file
sprintf(clist, "%s/%6.6d.list", TMPDIR, fnum);
flist = fopen(clist, "wt");
if (!flist) {
printf("Can not open list file %s: %m\n", clist);
goto fin;
}
fprintf(flist, "%s\n", fname);
fclose(flist);
// The run itself
if (iver == 3) {
setenv("DANSSRAWREC_HOME", "lib_v3.2", 1);
} else {
setenv("DANSSRAWREC_HOME", "lib_v2.1", 1);
}
tcalib = getenv("TCALIB");
if (!tcalib) tcalib = "tcalib_sorted.txt";
sprintf(hitinfo, "%s/%3.3dxxx/hits_%6.6d.txt.bz2", HITINFODIR, fnum/1000, fnum);
sprintf(str, "./digi_evtbuilder6_v%d -no_hit_tables -file %s -output %s/%3.3dxxx/danss_%6.6d.root "
"-flag 0x40002 -tcalib %s -hitinfo %s -deadlist main_dead.list", iver, clist, tdir, fnum/1000, fnum, tcalib, hitinfo);
// Old flag=0x250002
irc = system(str);
if (irc) printf("Run %d: error %d returned: %m\n", fnum, irc);
// delete list file
unlink(clist);
// time and print
t1 = time(NULL);
printf("Run %d: elapsed time %d s:\n", fnum, t1 - t0);
fin:
MPI_Finalize();
return 0;
}