FEDRA emulsion software from the OPERA Collaboration
m2track.cpp File Reference
#include <EdbPattern.h>
#include <EdbDataSet.h>
#include <EdbPVRec.h>
Include dependency graph for m2track.cpp:

Functions

int m2track (char *filename)
 
int main (int argc, char *argv[])
 
void write_defaultpar (void)
 
void write_lnkdef (void)
 
void write_lnklst (void)
 
void write_par_files (void)
 
int z_not_set (int pos)
 

Variables

int npid = 0
 
int pid [1000]
 
int plid [100]
 
double zlayer [100]
 

Function Documentation

◆ m2track()

int m2track ( char *  filename)
63 {
64 int i,j,k;
65
66 FILE *fp = fopen(filename,"rt");
67 if(NULL==fp) {
68 printf("File %s error!\n", filename);
69 return 0;
70 }
71
72 printf("write lnk.def\n");
74
75 printf("write default.par\n");
77
78 char buf[256];
79 TObjArray *tracks = new TObjArray();
80 for(i=0;i<100;i++) zlayer[i]=1.1E10;
81
82 printf("reanding m-file : %s\n", filename);
83 for(i=0;NULL!=fgets(buf,sizeof(buf),fp);i++){
84 if(buf[0]=='%') {i--; continue;}
85
86 if(i==0) { continue;} // header, comment
87 if(i==1) { sscanf(buf,"%d", &npid); continue;} // header, number of plates
88 if(i==2) { // header, plate numbers.
89 int n=0,nn;
90
91 for(j=npid-1;j>=0;j--){
92 //for(j=0;j<npid;j++){
93 sscanf(buf+n,"%d%n", &plid[j], &nn);
94 plid[j]/=10;
95 plid[j]=58-plid[j];
96 pid[plid[j]]=j;
97 n+=nn;
98 }
99 printf("write lnk.lst\n");
100 write_lnklst();
101 continue;
102 }
103
104 // i>=3 track informations.
105 int itrk, nseg, pos1, pos2;
106 sscanf(buf, "%d %d %d %d", &itrk, &nseg, &pos1, &pos2); // track headers
107
108 EdbTrackP *t = new EdbTrackP();
109 t->SetID(itrk);
110
111 //printf("t %s", buf);
112 EdbSegP *s=0;
113 for(j=0;j<nseg;j++){ // data of segmetns.
114 int pos,isg,ph;
115 double ax,ay,x,y,z;
116 fgets(buf,sizeof(buf),fp);
117 //printf("s %s", buf);
118 sscanf(buf,"%d %d %*d %d %lf %lf %lf %lf %lf",
119 &pos, &isg, &ph, &ax, &ay, &x, &y, &z);
120 pos/=10;
121 pos=58-pos;
122 if(z_not_set(pos)) zlayer[pid[pos]]=z;
123
124 s = new EdbSegP(isg, x,y, ax,ay, ph/10000, 0);
125 s->SetZ(z);
126 s->SetPID(pid[pos]);
127 s->SetPlate(pos);
128 s->SetTrack(itrk);
129 t->AddSegment(s);
130 t->AddSegmentF( new EdbSegP(*((EdbSegP*)(s))) );
131
132 }
133 t->Set(itrk, s->X(), s->Y(), s->TX(), s->TY(), 0, 1);
134 t->SetZ(s->Z());
135 t->SetCounters();
136 //if(nseg!=1) { // ignore nseg==1 tracks.
137 tracks->Add(t);
138 if(tracks->GetEntries()%100 == 0) printf("%d tracks\r", tracks->GetEntries());
139 //}
140 }
141 printf(" %d tracks\n.", tracks->GetEntries());
142
143 printf("write tracks into linked_tracks.root\n");
144 EdbDataProc::MakeTracksTree(*tracks,0,0,"linked_tracks.root");
145
147
148 return tracks->GetEntries();
149}
const char filename[256]
Definition: RecDispNU.C:83
static int MakeTracksTree(EdbPVRec *ali=0, const char *file="linked_tracks.root")
Definition: EdbDataSet.cxx:2506
Definition: EdbSegP.h:21
Definition: EdbPattern.h:113
int plid[100]
Definition: m2track.cpp:11
double zlayer[100]
Definition: m2track.cpp:12
int z_not_set(int pos)
Definition: m2track.cpp:44
void write_lnkdef(void)
Definition: m2track.cpp:15
int pid[1000]
Definition: m2track.cpp:13
void write_defaultpar(void)
Definition: m2track.cpp:31
void write_lnklst(void)
Definition: m2track.cpp:23
void write_par_files(void)
Definition: m2track.cpp:49
int npid
Definition: m2track.cpp:10
TTree * t
Definition: check_shower.C:4
s
Definition: check_shower.C:55
TTree * tracks
Definition: check_tr.C:19
#define NULL
Definition: nidaqmx.h:84

◆ main()

int main ( int  argc,
char *  argv[] 
)
154 {
155 if(argc<2){
156 printf("usage : m2track.exe mxx.all\n");
157 return 1;
158 }
159 m2track(argv[1]);
160 return 1 ;
161}
int m2track(char *filename)
Definition: m2track.cpp:63

◆ write_defaultpar()

void write_defaultpar ( void  )
31 {
32 FILE *fp = fopen("default.par","wt");
33 fprintf(fp, "SIGMA0 0 5 5 .005 .005\n"
34 "DEGRAD 0 5.\n"
35 "BINS 0 4 4 4 4\n"
36 "RAMP0 0 15 15\n"
37 "RAMP04 0 15 15\n"
38 "CHI2MAX 0 4.5\n"
39 "CHI2PMAX 0 4.5\n"
40 "RADX0 0 5810.\n");
41 fclose(fp);
42}
fclose(pFile)

◆ write_lnkdef()

void write_lnkdef ( void  )
15 {
16 FILE *fp = fopen("lnk.def","wt");
17 fprintf(fp, "INPUT_RUNS_LIST lnk.lst\n"
18 "OUTPUT_DATA_DIR ./data/\n"
19 "PARAMETERS_DIR ./par/\n");
20 fclose(fp);
21}

◆ write_lnklst()

void write_lnklst ( void  )
23 {
24 FILE *fp = fopen("lnk.lst","wt");
25 for(int i=0;i<npid; i++){
26 fprintf(fp, "%3d 1 ./data/* 1\n", plid[i]);
27 }
28 fclose(fp);
29}

◆ write_par_files()

void write_par_files ( void  )
49 {
50 int i;
51 printf("make par directry\n");
52 system("mkdir par");
53 printf("write parameters files\n");
54 for(i=0;i<npid;i++){
55 FILE *fp = fopen(Form("par/%02d_001.par", plid[i]),"wt");
56 fprintf(fp,"INCLUDE default.par\n");
57 fprintf(fp,"ZLAYER 0 %.1lf 0. 0.\n", zlayer[i]);
58 fprintf(fp,"AFFXY 0 1 0 0 1 0 0\n");
59 fclose(fp);
60 }
61}

◆ z_not_set()

int z_not_set ( int  pos)
44 {
45 if(zlayer[pid[pos]]>=1E10) return 1;
46 return 0;
47}

Variable Documentation

◆ npid

int npid = 0

◆ pid

int pid[1000]

◆ plid

int plid[100]

◆ zlayer

double zlayer[100]