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");
73  write_lnkdef();
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 
146  write_par_files();
147 
148  return tracks->GetEntries();
149 }
TTree * t
Definition: check_shower.C:4
static int MakeTracksTree(EdbPVRec *ali=0, const char *file="linked_tracks.root")
Definition: EdbDataSet.cxx:2511
Definition: EdbSegP.h:18
void SetPID(int pid)
Definition: EdbSegP.h:126
Float_t TX() const
Definition: EdbSegP.h:172
void SetTrack(int trid)
Definition: EdbSegP.h:128
Float_t X() const
Definition: EdbSegP.h:170
Float_t Z() const
Definition: EdbSegP.h:150
void SetZ(float z)
Definition: EdbSegP.h:122
Float_t Y() const
Definition: EdbSegP.h:171
void SetPlate(int plateid)
Definition: EdbSegP.h:139
Float_t TY() const
Definition: EdbSegP.h:173
Definition: EdbPattern.h:118
string filename
Definition: emthickness.cpp:34
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 * tracks
Definition: check_tr.C:19
#define NULL
Definition: nidaqmx.h:84
EdbSegP * s
Definition: tlg2pattern.C:32

◆ 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]