FEDRA emulsion software from the OPERA Collaboration
tagtra.cpp File Reference
#include <string.h>
#include <iostream>
#include <TEnv.h>
#include "EdbLog.h"
#include "EdbScanProc.h"
#include "EdbScanTracking.h"
#include "EdbMosaicIO.h"
Include dependency graph for tagtra.cpp:

Functions

int GetPattern (EdbPattern &pat, EdbID id, int side)
 
int main (int argc, char *argv[])
 
void print_help_message ()
 
void set_default (TEnv &cenv)
 
void TrackSetTag (EdbID idset, TEnv &env, EdbScanProc &sproc)
 

Function Documentation

◆ GetPattern()

int GetPattern ( EdbPattern pat,
EdbID  id,
int  side 
)
122 {
123  int n=0;
124  EdbMosaicIO mio;
125  TString file;
126  file.Form("p%3.3d/%d.%d.%d.%d.tag.root",
127  id.ePlate, id.eBrick, id.ePlate, id.eMajor, id.eMinor);
128  TFile f( file.Data() );
129  EdbPattern *p = (EdbPattern*)(f.Get( Form("gpat%d_%d_0",id.ePlate, side) ) );
130  if(p) {
131  n = p->N();
132  //p->SetSegmentsW(1.); //TODO set correct weights peak weights in mostag
133  pat.AddPattern(*p);
134  delete p;
135  }
136  // p->SetScanID(id); p->SetSide(side);
137  printf( "read %d segments from %s\n",n, file.Data() );
138  return n;
139 }
FILE * f
Definition: RecDispMC.C:150
Definition: EdbMosaicIO.h:15
Definition: EdbPattern.h:280
Int_t AddPattern(EdbPattern &p)
Definition: EdbPattern.cxx:1563
p
Definition: testBGReduction_AllMethods.C:8
TFile * file
Definition: write_pvr.C:3

◆ main()

int main ( int  argc,
char *  argv[] 
)
64 {
65  if (argc < 2) { print_help_message(); return 0; }
66 
67  TEnv cenv("trackenv");
69  gEDBDEBUGLEVEL = cenv.GetValue("tagtra.EdbDebugLevel" , 1);
70  const char *env = cenv.GetValue("tagtra.env" , "tagtra.rootrc");
71  const char *outdir = cenv.GetValue("tagtra.outdir" , "..");
72 
73  bool do_set = false;
74  bool do_pred = false;
75  Int_t pred_plate = 0, to_plate=0;
76  Int_t brick=0, plate=0, major=0, minor=0;
77 
78  for(int i=1; i<argc; i++ ) {
79  char *key = argv[i];
80 
81  if(!strncmp(key,"-set=",5))
82  {
83  if(strlen(key)>5) sscanf(key+5,"%d.%d.%d.%d",&brick,&plate,&major,&minor);
84  do_set=true;
85  }
86  else if(!strncmp(key,"-o=",3))
87  {
88  if(strlen(key)>3) outdir=key+3;
89  }
90  else if(!strncmp(key,"-v=",3))
91  {
92  if(strlen(key)>3) gEDBDEBUGLEVEL = atoi(key+3);
93  }
94  }
95 
96  if(!do_set) { print_help_message(); return 0; }
97 
98  cenv.SetValue("tagtra.env" , env);
99  cenv.ReadFile( cenv.GetValue("tagtra.env" , "tagtra.rootrc") ,kEnvLocal);
100  cenv.SetValue("tagtra.outdir" , outdir);
101  cenv.WriteFile("tagtra.save.rootrc");
102 
103  if(do_set) {
106  printf("\n----------------------------------------------------------------------------\n");
107  printf("tracking set %d.%d.%d.%d\n", brick,plate, major,minor);
108  printf("----------------------------------------------------------------------------\n\n");
109 
110  EdbID id(brick,plate,major,minor);
112  ss->Brick().SetID(brick);
113  TrackSetTag(id,cenv,sproc);
114  }
115  cenv.WriteFile("tagtra.save.rootrc");
116 
117  return 1;
118 }
BRICK brick
Definition: RecDispMC.C:103
Definition: EdbID.h:7
Definition: EdbScanProc.h:12
TString eProcDirClient
Definition: EdbScanProc.h:14
EdbScanSet * ReadScanSet(EdbID id)
Definition: EdbScanProc.cxx:1521
Definition: EdbScanSet.h:11
EdbScanProc * sproc
Definition: comptonmap.cpp:29
TEnv cenv("emrec")
bool do_set
Definition: emrec.cpp:36
const char * outdir
Definition: emrec.cpp:37
gEDBDEBUGLEVEL
Definition: energy.C:7
ss
Definition: energy.C:62
Int_t plate
Definition: merge_Energy_SytematicSources_Electron.C:1
UInt_t id
Definition: tlg2pattern.C:118
void set_default(TEnv &cenv)
Definition: tagtra.cpp:28
void print_help_message()
Definition: tagtra.cpp:15
void TrackSetTag(EdbID idset, TEnv &env, EdbScanProc &sproc)
Definition: tagtra.cpp:143

◆ print_help_message()

void print_help_message ( )
16 {
17  cout<< "\nUsage: \n\t tagtra -set=ID [ -o=DATA_DIRECTORY -v=DEBUG] \n\n";
18  cout<< "\t\t ID - id of the dataset formed as BRICK.PLATE.MAJOR.MINOR \n";
19  cout<< "\t\t DEBUG - verbosity level: 0-print nothing, 1-errors only, 2-normal, 3-print all messages\n";
20  cout<< "\t\t -o - the data directory\n";
21  cout<< "\nExample: \n";
22  cout<< "\t tagtra -id=4554.10.1.0 -o=/scratch/BRICKS \n";
23  cout<< "\n If the data location directory if not explicitly defined\n";
24  cout<< " the current directory will be assumed to be the brick directory \n";
25  cout<<endl;
26 }

◆ set_default()

void set_default ( TEnv &  cenv)
29 {
30  // default parameters for tracking
31  cenv.SetValue("fedra.track.TrZmap", "4000 0 200000 4000 0 200000 30" );
32  cenv.SetValue("fedra.track.npass" , 1 );
33  cenv.SetValue("fedra.track.minPlate" ,-999 );
34  cenv.SetValue("fedra.track.maxPlate" , 999 );
35  cenv.SetValue("fedra.track.refPlate" , 999 );
36  cenv.SetValue("fedra.track.nsegmin" , 2 );
37  cenv.SetValue("fedra.track.ngapmax" , 4 );
38  cenv.SetValue("fedra.track.DZGapMax" , 5000. );
39  cenv.SetValue("fedra.track.DRmax" , 100. );
40  cenv.SetValue("fedra.track.DTmax" , 0.07 );
41 
42  cenv.SetValue("fedra.track.Sigma0" , "50 50 0.005 0.005");
43  cenv.SetValue("fedra.track.PulsRamp0" , "0.1 0.1");
44  cenv.SetValue("fedra.track.PulsRamp04" , "0.1 0.1");
45  cenv.SetValue("fedra.track.Degrad" , 4 );
46 
47  cenv.SetValue("fedra.track.probmin" , 0.001 );
48  cenv.SetValue("fedra.track.momentum" , 2 );
49  cenv.SetValue("fedra.track.mass" , 0.14 );
50  cenv.SetValue("fedra.track.do_use_mcs", 0 );
51  cenv.SetValue("fedra.track.RadX0" , 5810.);
52 
53  cenv.SetValue("fedra.track.do_shtag" , false );
54  cenv.SetValue("fedra.track.do_misalign" , false );
55  cenv.SetValue("fedra.track.misalign_offset", 5000.);
56  cenv.SetValue("fedra.track.do_comb" , 0 );
57  cenv.SetValue("fedra.track.NsegMin" , 2 );
58  cenv.SetValue("tagtra.outdir" , "..");
59  cenv.SetValue("tagtra.env" , "tagtra.rootrc");
60  cenv.SetValue("tagtra.EdbDebugLevel" , 1);
61 }

◆ TrackSetTag()

void TrackSetTag ( EdbID  idset,
TEnv &  env,
EdbScanProc sproc 
)
144 {
145 
146  // read scanset object
148  if(!ss) { Log(1,"EdbScanTracking::TrackSetBT", "Error! set for %s do not found",idset.AsString()); return; }
149 
150  int npl = ss->eIDS.GetSize();
151  if(npl<2) { Log(1,"EdbScanTracking::TrackSetBT", "Warning! npl<2 : %d stop tracking!",npl); return; }
152 
153  // create and init tracking object
154  EdbTrackAssembler etra;
155 
156  etra.eCond.SetSigma0( env.GetValue("fedra.track.Sigma0" , "50 50 0.005 0.005") );
157  etra.eCond.SetPulsRamp0( env.GetValue("fedra.track.PulsRamp0" , "0 0") );
158  etra.eCond.SetPulsRamp04( env.GetValue("fedra.track.PulsRamp04" , "0 0") );
159  etra.eCond.SetDegrad( env.GetValue("fedra.track.Degrad" , 0) );
160  etra.SetRadLength( env.GetValue("fedra.track.RadX0" , 5810.) );
161  etra.eDoUseMCS = env.GetValue("fedra.track.do_use_mcs" , 0 );
162 
163  etra.eDTmax = env.GetValue("fedra.track.DTmax" , 0.07 );
164  etra.eDRmax = env.GetValue("fedra.track.DRmax" , 100. );
165  etra.eDZGapMax = env.GetValue("fedra.track.DZGapMax" , 5000. );
166  etra.eProbMin = env.GetValue("fedra.track.probmin" , 0.001 );
167  bool do_erase = env.GetValue("fedra.track.erase" , false );
168  const char *cut = env.GetValue("fedra.readCPcut" , "1" );
169  bool do_shtag = env.GetValue("fedra.track.do_shtag" , false ); // no tracking only shower tag info
170  bool do_misalign = env.GetValue("fedra.track.do_misalign" , 0 );
171  int npass = env.GetValue("fedra.track.npass" , 1 );
172  float misalign_offset = env.GetValue("fedra.track.misalign_offset", 2000. );
173  bool do_local_corr = env.GetValue("fedra.track.do_local_corr" , 0 );
174  bool eDoRealign = env.GetValue("fedra.track.do_realign" , 0 );
175  bool do_comb = env.GetValue("fedra.track.do_comb" , 0 );
176  int nsegmin = env.GetValue("fedra.track.NsegMin" , 2 );
177  float momentum = env.GetValue("fedra.track.momentum" , 2. );
178  etra.SetMomentum (momentum);
179 
180  etra.InitTrZMap( env.GetValue("fedra.track.TrZmap", "2400 0 120000 2000 0 100000 30" ) );
181 
182  EdbAffine2D misalign[60];
183  if(do_misalign) {
184  // 1 2 3 4 5 6 7 8 9
185  int dx[9] = {0,0,1,1,1,0,-1,-1,-1};
186  int dy[9] = {0,1,1,0,-1,-1,-1,0,1};
187  for(int i=0; i<60; i++) {
188  misalign[i].ShiftX( dx[i%9] * misalign_offset );
189  misalign[i].ShiftY( dy[i%9] * misalign_offset );
190  if(gEDBDEBUGLEVEL>1) printf("%d | %d %d\n",i, dx[i%9], dy[i%9]);
191  }
192  }
193 
194  // read segments and use them for tracking
195  int all_volume_segments=0;
196  for(int ipass=0; ipass<npass; ipass++) {
197  if(gEDBDEBUGLEVEL>1) printf("\n\n*************** ipass=%d ************\n",ipass);
198  etra.eCollisionsRate=0;
199  for(int i=0; i<npl; i++) {
200  EdbID *id = ss->GetID(i);
201 
202  EdbPlateP *plate = ss->GetPlate(id->ePlate);
203 
204  EdbPattern p;
205  p.SetScanID(*id);
206 
207  int side =1;
208  all_volume_segments += GetPattern( p, *id, side );
209 
210  p.SetZ(plate->Z());
211  p.SetSegmentsZ();
212  p.SetID(i);
213  p.SetSide(side);
214  p.SetPID(i);
215  p.SetSegmentsPID();
216  p.Transform( plate->GetAffineXY() );
217  p.TransformShr( plate->Shr() );
218  p.TransformA( plate->GetAffineTXTY() );
219  p.SetSegmentsPlate(id->ePlate);
220 
221 
222  if(do_misalign) {
223  p.Transform(&misalign[i]);
224  Log(2,"EdbScanTracking::TrackSetBT","apply misalignment of %f",misalign_offset);
225  }
226 
227  if(i>0) etra.ExtrapolateTracksToZ(p.Z());
228 
229  etra.FillTrZMap();
230  etra.AddPattern(p);
231 
232  //etra.FillXYseg(p);
233  }
234  }
235 
236 
237 
238  int ntr = etra.Tracks().GetEntriesFast();
239 
240  for(int i=0; i<ntr; i++) {
241  EdbTrackP *t = (EdbTrackP *)(etra.Tracks().At(i));
242  if(t->N()<nsegmin) t->SetFlag(-10);
243  }
244 
245  etra.SetSegmentsErrors();
246  etra.FitTracks();
247 
248  int cnt_badtrk=0;
249  int cnt_attached_segments=0;
250  TObjArray selectedTracks(ntr);
251  if(do_comb) {
252  etra.CombTracks(selectedTracks);
253  } else {
254  int cnt=0;
255  for(int i=0; i<ntr; i++) {
256  EdbTrackP *t = (EdbTrackP *)(etra.Tracks().At(i));
257  if(t->Flag()!=-10) {
258  t->SetID(cnt++);
259  t->SetCounters();
260  t->SetSegmentsTrack();
261  t->SetP(momentum);
262  selectedTracks.Add(t);
263  cnt_attached_segments += t->N();
264  } else cnt_badtrk++;
265  }
266  }
267  printf("\n segments all/attached: %d/%d tracks selected/bad = %d/%d \n",
268  all_volume_segments, cnt_attached_segments, selectedTracks.GetEntriesFast(), cnt_badtrk );
269  EdbDataProc::MakeTracksTree( selectedTracks, 0., 0., Form("b%s.trk.root", idset.AsString()) );
270  TFile f( Form("b%s.trk.root", idset.AsString()) ,"UPDATE");
271  env.Write();
272  f.Close();
273 
274  //SaveHist(idset,etra);
275 }
bool Log(int level, const char *location, const char *fmt,...)
Definition: EdbLog.cxx:75
TTree * t
Definition: check_shower.C:4
TCut cut
Definition: check_shower.C:6
Definition: EdbAffine.h:17
void ShiftX(float d)
Definition: EdbAffine.h:64
void ShiftY(float d)
Definition: EdbAffine.h:65
static int MakeTracksTree(EdbPVRec *ali=0, const char *file="linked_tracks.root")
Definition: EdbDataSet.cxx:2511
char * AsString() const
Definition: EdbID.cxx:24
Definition: EdbBrick.h:13
void SetPulsRamp0(float p1, float p2)
Definition: EdbScanCond.h:74
void SetDegrad(float d)
Definition: EdbScanCond.h:71
void SetSigma0(float x, float y, float tx, float ty)
Definition: EdbScanCond.h:62
void SetPulsRamp04(float p1, float p2)
Definition: EdbScanCond.h:75
Definition: EdbScanTracking.h:27
void FillTrZMap()
Definition: EdbScanTracking.cxx:417
TObjArray & Tracks()
Definition: EdbScanTracking.h:91
EdbScanCond eCond
Definition: EdbScanTracking.h:50
void SetMomentum(float p)
Definition: EdbScanTracking.h:66
void SetSegmentsErrors()
Definition: EdbScanTracking.cxx:466
float eDZGapMax
Definition: EdbScanTracking.h:45
void ExtrapolateTracksToZ(float z, int nsegmin=0)
Definition: EdbScanTracking.cxx:390
void InitTrZMap(const char *str)
Definition: EdbScanTracking.cxx:431
int eDoUseMCS
Definition: EdbScanTracking.h:47
void AddPattern(EdbPattern &p)
Definition: EdbScanTracking.cxx:182
float eProbMin
Definition: EdbScanTracking.h:46
void FitTracks()
Definition: EdbScanTracking.cxx:484
void SetRadLength(float x0)
Definition: EdbScanTracking.h:67
float eDRmax
Definition: EdbScanTracking.h:44
float eDTmax
Definition: EdbScanTracking.h:43
void CombTracks(TObjArray &selected)
Definition: EdbScanTracking.cxx:500
int eCollisionsRate
Definition: EdbScanTracking.h:49
Definition: EdbPattern.h:118
EdbID idset
Definition: emrec.cpp:35
int nsegmin
Definition: check_vertex.C:23
float momentum
Definition: check_vertex.C:20
int GetPattern(EdbPattern &pat, EdbID id, int side)
Definition: tagtra.cpp:121