/[PAMELA software]/DarthVader/TrackerLevel2/src/ExtTrack.cpp
ViewVC logotype

Contents of /DarthVader/TrackerLevel2/src/ExtTrack.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.7 - (show annotations) (download)
Wed Oct 15 08:45:51 2014 UTC (10 years, 1 month ago) by pam-ts
Branch: MAIN
CVS Tags: v10REDr01, v10RED
Changes since 1.6: +123 -57 lines
*** empty log message ***

1 /**
2 * \file ExtTrack.cpp
3 * \author Elena Vannuccini
4 */
5 #include <ExtTrack.h>
6 #include <iostream>
7 #include <math.h>
8 using namespace std;
9
10 ExtTrack::ExtTrack(int dim){
11
12 //cout << " ExtTrack::ExtTrack("<<dim<<")"<<endl;
13 xgood = NULL;
14 ygood = NULL;
15 multmaxx = NULL;
16 multmaxy = NULL;
17 xm = NULL;
18 ym = NULL;
19 zm = NULL;
20 xma = NULL;
21 yma = NULL;
22 zma = NULL;
23 xmb = NULL;
24 ymb = NULL;
25 zmb = NULL;
26 resx = NULL;
27 resy = NULL;
28 xv = NULL;
29 yv = NULL;
30 zv = NULL;
31 axv = NULL;
32 ayv = NULL;
33 dedx_x = NULL;
34 dedx_y = NULL;
35
36 // xGF = new float[TrkParams::nGF];
37 // yGF = new float[TrkParams::nGF];
38 // init vectors
39 SetDimension(dim);//allocate vectors
40 // init fit variables
41 Reset();
42 // set fit parameters (default)
43 SetZ0(23.5);
44 SetMiniDefault();
45 };
46 //--------------------------------------
47 //
48 //
49 //--------------------------------------
50 ExtTrack::ExtTrack( const ExtTrack& t ){
51 //cout << " ExtTrack::ExtTrack( const ExtTrack& t ) "<<this<<endl;
52
53 // --------------------
54 // initialize pointers
55 // --------------------
56
57 xgood = NULL;
58 ygood = NULL;
59 multmaxx = NULL;
60 multmaxy = NULL;
61 xm = NULL;
62 ym = NULL;
63 zm = NULL;
64 xma = NULL;
65 yma = NULL;
66 zma = NULL;
67 xmb = NULL;
68 ymb = NULL;
69 zmb = NULL;
70 resx = NULL;
71 resy = NULL;
72 xv = NULL;
73 yv = NULL;
74 zv = NULL;
75 axv = NULL;
76 ayv = NULL;
77 dedx_x = NULL;
78 dedx_y = NULL;
79
80 // xGF = new float[TrkParams::nGF];
81 // yGF = new float[TrkParams::nGF];
82
83 SetDimension(t.nplanes);//allocate vectors
84
85 // --------------------
86 // copy values
87 // --------------------
88 zini = t.zini;
89 chi2 = t.chi2;
90 nstep = t.nstep;
91 for(int it1=0;it1<5;it1++){
92 al[it1] = t.al[it1];
93 for(int it2=0;it2<5;it2++)coval[it1][it2] = t.coval[it1][it2];
94 };
95
96
97 for(int ip=0;ip<nplanes;ip++){
98 xgood[ip] = t.xgood[ip];
99 ygood[ip] = t.ygood[ip];
100 multmaxx[ip] = t.multmaxx[ip];
101 multmaxy[ip] = t.multmaxy[ip];
102 xm[ip] = t.xm[ip];
103 ym[ip] = t.ym[ip];
104 zm[ip] = t.zm[ip];
105 xma[ip] = t.xma[ip];
106 yma[ip] = t.yma[ip];
107 zma[ip] = t.zma[ip];
108 xmb[ip] = t.xmb[ip];
109 ymb[ip] = t.ymb[ip];
110 zmb[ip] = t.zmb[ip];
111 resx[ip] = t.resx[ip];
112 resy[ip] = t.resy[ip];
113 xv[ip] = t.xv[ip];
114 yv[ip] = t.yv[ip];
115 zv[ip] = t.zv[ip];
116 axv[ip] = t.axv[ip];
117 ayv[ip] = t.ayv[ip];
118 dedx_x[ip] = t.dedx_x[ip];
119 dedx_y[ip] = t.dedx_y[ip];
120 };
121
122 int ngf = TrkParams::nGF;
123 for(int i=0; i<ngf; i++){
124 xGF[i] = t.xGF[i];
125 yGF[i] = t.yGF[i];
126 }
127
128 };
129 //--------------------------------------
130 //
131 //
132 //--------------------------------------
133 void ExtTrack::Copy( ExtTrack& t ){
134
135 // cout << " ExtTrack::Copy( ExtTrack& t ) "<<endl;
136
137 t.Reset();//reset variables
138 t.Clear("C");//deallocate vectors
139 t.SetDimension(nplanes);//allocate vectors
140
141 t.zini = zini;
142 t.chi2 = chi2;
143 t.nstep = nstep;
144 for(int it1=0;it1<5;it1++){
145 t.al[it1] = al[it1];
146 for(int it2=0;it2<5;it2++)t.coval[it1][it2] = coval[it1][it2];
147 };
148 // cout << "ExtTrack::Copy()........nplanes "<<nplanes<<endl;
149 for(int ip=0;ip<nplanes;ip++){
150 t.xgood[ip] = xgood[ip];
151 t.ygood[ip] = ygood[ip];
152 t.multmaxx[ip] = multmaxx[ip];
153 t.multmaxy[ip] = multmaxy[ip];
154 t.xm[ip] = xm[ip];
155 t.ym[ip] = ym[ip];
156 t.zm[ip] = zm[ip];
157 t.xma[ip] = xma[ip];
158 t.yma[ip] = yma[ip];
159 t.zma[ip] = zma[ip];
160 t.xmb[ip] = xmb[ip];
161 t.ymb[ip] = ymb[ip];
162 t.zmb[ip] = zmb[ip];
163 t.resx[ip] = resx[ip];
164 t.resy[ip] = resy[ip];
165 t.xv[ip] = xv[ip];
166 t.yv[ip] = yv[ip];
167 t.zv[ip] = zv[ip];
168 t.axv[ip] = axv[ip];
169 t.ayv[ip] = ayv[ip];
170 t.dedx_x[ip] = dedx_x[ip];
171 t.dedx_y[ip] = dedx_y[ip];
172 };
173 int ngf = TrkParams::nGF;
174 for(int i=0; i<ngf; i++){
175 t.xGF[i] = xGF[i];
176 t.yGF[i] = yGF[i];
177 }
178
179 };
180 //--------------------------------------
181 //
182 //
183 //--------------------------------------
184 void ExtTrack::Set( TrkTrack& t , int index){
185
186 // cout << "Set("<< &t <<", "<<index<<")"<<endl;
187 if(index < 0 ){ //NON FUNZIONA
188 cout << "Clear(\"C\") "<<endl;
189 Reset();//reset variables
190 Clear("C");//deallocate vectors
191 cout << "SetDimension("<<t.GetNhit()<<")"<<endl;
192 SetDimension(t.GetNhit()); //allocate vectors
193 // }else{
194 // SetDimension(6+index);
195 }
196 // default fit settings (the same as TrkTrack)
197 SetMiniDefault();
198 SetZ0(23.5);
199 //
200 int ipp;
201 if(index<0) ipp = 0;
202 else ipp = index;
203 //
204 // cout << "Assign... nplanes = "<<nplanes<<endl;
205 for(int ip=0;ip<6;ip++){
206
207 if(ipp>=nplanes){
208 cout << "void ExtTrack::Set( TrkTrack& , "<<index<<") -- ipp="<<ipp<<" exceed vector dimention "<<nplanes<<endl;
209 continue;
210 }
211
212 if( t.XGood(ip) || t.YGood(ip) || !(index<0) ){
213
214 // cout << "ipp "<<ipp<<" ip "<<ip<<endl;
215
216
217 xgood[ipp] = t.XGood(ip); //NB!
218 ygood[ipp] = t.YGood(ip); //NB!
219 multmaxx[ipp] = t.multmaxx[ip];
220 multmaxy[ipp] = t.multmaxy[ip];
221 xm[ipp] = t.xm[ip];
222 ym[ipp] = t.ym[ip];
223 zm[ipp] = t.zm[ip];
224
225 float dummy = -100.;
226 xma[ipp] = dummy;
227 yma[ipp] = dummy;
228 zma[ipp] = zm[ipp];
229 xmb[ipp] = dummy;
230 ymb[ipp] = dummy;
231 zmb[ipp] = zm[ipp];
232
233 if( t.XGood(ip) && t.YGood(ip) ){ //double hit
234 xma[ipp] = t.xm[ip];
235 yma[ipp] = t.ym[ip];
236 zma[ipp] = t.zm[ip];
237 xmb[ipp] = t.xm[ip];
238 ymb[ipp] = t.ym[ip];
239 zmb[ipp] = t.zm[ip];
240 } else if (t.XGood(ip) || t.YGood(ip) ){ //single hit
241 TrkParams::Load(5);
242 if( !TrkParams::IsLoaded(5) ){
243 cout << "void ExtTrack::FillMiniStruct(TrkTrack&) ---ERROR--- trk align.param. not loaded "<<endl;
244 return;
245 }
246 double segment = 7.;// 2.;//cm //Elena 10th
247 int is = (int)t.GetSensor(ip); if(ip==5)is=1-is;
248 int ippp = 5-ip;
249 int il = (int)t.GetLadder(ip);
250 // NB: i parametri di allineamento hanno una notazione particolare!!!
251 // sensor = 0 (hybrid side), 1
252 // ladder = 0-2 (increasing x)
253 // plane = 0-5 (from bottom to top!!!)
254 double omega = 0.;
255 double beta = 0.;
256 double gamma = 0.;
257 if(
258 (is < 0 || is > 1 || ip < 0 || ippp > 5 || il < 0 || il > 2) &&
259 true){
260 cout << " void ExtTrack::FillMiniStruct(TrkTrack&) --- WARNING ---trk sensor not defined, cannot read alignment parameters "<<endl;
261 cout << " is ip il = "<<is<<" "<<ippp<<" "<<il<<endl;
262 }else{
263 omega = alignparameters_.omega[is][il][ippp];
264 beta = alignparameters_.beta[is][il][ippp];
265 gamma = alignparameters_.gamma[is][il][ippp];
266 }
267 if( t.XGood(ip) && !t.YGood(ip) ){
268 xma[ipp] = t.xm[ip] - omega * segment;
269 yma[ipp] = t.ym[ip] + segment;
270 zma[ipp] = t.zm[ip] + beta * segment;//not used yet
271 xmb[ipp] = t.xm[ip] + omega * segment;
272 ymb[ipp] = t.ym[ip] - segment;
273 zmb[ipp] = t.zm[ip] - beta * segment;//not used yet
274 }else if( !t.XGood(ip) && t.YGood(ip) ){
275 xma[ipp] = t.xm[ip] + segment;
276 yma[ipp] = t.ym[ip] + omega * segment;
277 zma[ipp] = t.zm[ip] - gamma * segment;//not used yet
278 xmb[ipp] = t.xm[ip] - segment;
279 ymb[ipp] = t.ym[ip] - omega * segment;
280 zmb[ipp] = t.zm[ip] + gamma * segment;//not used yet
281 }
282 }
283
284 // tailx[ipp] = t.tailx[ip];
285 // taily[ipp] = t.taily[ip];
286 resx[ipp] = t.resx[ip];
287 resy[ipp] = t.resy[ip];
288 xv[ipp] = t.xv[ip];
289 yv[ipp] = t.yv[ip];
290 zv[ipp] = t.zv[ip];
291 axv[ipp] = t.axv[ip];
292 ayv[ipp] = t.ayv[ip];
293 dedx_x[ipp] = t.dedx_x[ip];
294 dedx_y[ipp] = t.dedx_y[ip];
295
296 ipp++;
297
298 }
299 };//endl loop on planes
300
301 chi2 = t.chi2;
302 nstep = t.nstep;
303 for(int it1=0;it1<5;it1++){
304 al[it1] = t.al[it1];
305 for(int it2=0;it2<5;it2++)coval[it1][it2] = t.coval[it1][it2];
306 };
307
308 };
309 //--------------------------------------
310 //
311 //
312 //--------------------------------------
313 void ExtTrack::SetMiniDefault(){
314 // cout << " ExtTrack::SetMiniDefault()"<<endl;
315 exttrack_.trackmode = TrkParams::init__mini_trackmode;
316 exttrack_.fact = TrkParams::init__mini_fact;
317 exttrack_.istepmin = TrkParams::init__mini_istepmin;
318 TrkParams::SetDeltaB();
319 TrkParams::SetDLT();
320 }
321 //--------------------------------------
322 //
323 //
324 //--------------------------------------
325 void ExtTrack::SetDimension(int dim){
326
327 //cout << " ExtTrack::SetDimension("<<dim<<")"<<endl;;
328 if(dim<=0){
329 nplanes = 0;
330 if(dim<0)cout << "void ExtTrack::SetDimension("<<dim<<") --- invalid dimension "<<endl;
331 return;
332 }
333
334 // Clear();
335
336 nplanes = dim;
337
338 xgood = new int[nplanes];
339 ygood = new int[nplanes];
340 multmaxx = new int[nplanes];
341 multmaxy = new int[nplanes];
342 xm = new float[nplanes];
343 ym = new float[nplanes];
344 zm = new float[nplanes];
345 xma = new float[nplanes];
346 yma = new float[nplanes];
347 zma = new float[nplanes];
348 xmb = new float[nplanes];
349 ymb = new float[nplanes];
350 zmb = new float[nplanes];
351 resx = new float[nplanes];
352 resy = new float[nplanes];
353 xv = new float[nplanes];
354 yv = new float[nplanes];
355 zv = new float[nplanes];
356 axv = new float[nplanes];
357 ayv = new float[nplanes];
358 dedx_x = new float[nplanes];
359 dedx_y = new float[nplanes];
360
361
362 }
363 //--------------------------------------
364 //
365 //
366 //--------------------------------------
367 bool ExtTrack::SetZ(int ip,float zmeas){
368 if(ip<0 || ip>=nplanes){
369 cout << " ExtTrack::SetZ("<<ip<<",...) ---> exceed vector dimension = "<<nplanes<<endl;
370 return false;
371 }
372 zm[ip] = zmeas;
373 zma[ip] = zmeas;
374 zmb[ip] = zmeas;
375 return true;
376
377 };
378
379 bool ExtTrack::ResetXY(int ip){
380
381 // cout << " ExtTrack::ResetXY("<<ip<<") "<<endl;
382
383 if(ip<0 || ip>=nplanes){
384 cout << " ExtTrack::ResetXY("<<ip<<",...) ---> exceed vector dimension = "<<nplanes<<endl;
385 return false;
386 }
387 xm[ip] = -100.;
388 ym[ip] = -100.;
389 xma[ip] = -100.;
390 yma[ip] = -100.;
391 xmb[ip] = -100.;
392 ymb[ip] = -100.;
393 resx[ip] = 1000.;
394 resy[ip] = 1000.;
395 dedx_x[ip] = 0.;
396 dedx_y[ip] = 0.;
397 xgood[ip] = 0;
398 ygood[ip] = 0;
399 multmaxx[ip] = 0;
400 multmaxy[ip] = 0;
401
402 return true;
403
404 };
405
406 bool ExtTrack::SetXY(int ip,float xmeas, float ymeas, float rx, float ry){
407
408 if(ip<0 || ip>=nplanes){
409 cout << " ExtTrack::SetXY("<<ip<<",...) ---> exceed vector dimension = "<<nplanes<<endl;
410 return false;
411 }
412
413 xm[ip] = xmeas;
414 ym[ip] = ymeas;
415 xma[ip] = xmeas;
416 yma[ip] = ymeas;
417 xmb[ip] = xmeas;
418 ymb[ip] = ymeas;
419 resx[ip] = rx;
420 resy[ip] = ry;
421 // dedx_x[ip] = dedxx;
422 // dedx_y[ip] = dedxy;
423 xgood[ip] = 1;
424 ygood[ip] = 1;
425
426 return true;
427
428 };
429 bool ExtTrack::SetX(int ip,float xa, float xb, float ya, float yb,float res ){
430
431 // cout << " ExtTrack::SetX("<<ip<<",...) -- nplanes"<<nplanes<<endl;
432
433 if(ip<0 || ip>=nplanes){
434 cout << " ExtTrack::SetX("<<ip<<",...) ---> exceed vector dimension = "<<nplanes<<endl;
435 return false;
436 }
437 xm[ip] = -100.;
438 ym[ip] = -100.;
439 xma[ip] = xa;
440 yma[ip] = ya;
441 xmb[ip] = xb;
442 ymb[ip] = yb;
443 resx[ip] = res;
444 resy[ip] = 1000.;
445 xgood[ip] = 1;
446 ygood[ip] = 0;
447 // dedx_x[ip] = dedx;
448 // dedx_y[ip] = 0.;
449 return true;
450 };
451 bool ExtTrack::SetY(int ip,float xa, float xb, float ya, float yb,float res ){
452
453 // cout << " ExtTrack::SetY("<<ip<<",...) -- nplanes"<<nplanes<<endl;
454
455 if(ip<0 || ip>=nplanes){
456 cout << " ExtTrack::SetX("<<ip<<",...) ---> exceed vector dimension = "<<nplanes<<endl;
457 return false;
458 }
459 xm[ip] = -100.;
460 ym[ip] = -100.;
461 xma[ip] = xa;
462 yma[ip] = ya;
463 xmb[ip] = xb;
464 ymb[ip] = yb;
465 resx[ip] = 1000.;
466 resy[ip] = res;
467 xgood[ip] = 0;
468 ygood[ip] = 1;
469 // dedx_x[ip] = 0.;
470 // dedx_y[ip] = dedx;
471 return true;
472 };
473
474 bool ExtTrack::SetXGood(int ip,int icl_piu_uno, int il, int is ){
475
476 // cout << " ExtTrack::SetXGood("<<ip<<",...) -- nplanes"<<nplanes<<endl;
477
478 if(ip<0 || ip>=nplanes){
479 cout << " ExtTrack::SetXGood("<<ip<<",...) ---> exceed vector dimension = "<<nplanes<<endl;
480 return false;
481 }
482 xgood[ip]=(il+1)*100000000+(is+1)*10000000+icl_piu_uno;
483 return true;
484 };
485 bool ExtTrack::SetYGood(int ip,int icl_piu_uno, int il, int is ){
486 if(ip<0 || ip>=nplanes){
487 cout << " ExtTrack::SetYGood("<<ip<<",...) -- nplanes"<<nplanes<<endl;
488 cout << " ExtTrack::SetYGood("<<ip<<",...) ---> exceed vector dimension = "<<nplanes<<endl;
489 return false;
490 }
491 ygood[ip]=(il+1)*100000000+(is+1)*10000000+icl_piu_uno;
492 return true;
493 };
494
495 //--------------------------------------
496 //
497 //
498 //--------------------------------------
499 /**
500 * Clear the track. If option C is specied, deallocate the hit vectors.
501 */
502 void ExtTrack::Clear(Option_t* option){
503
504 Reset();
505
506
507 // cout << " ExtTrack::Clear("<<option<<") "<<this<<endl;
508
509
510 // cout << " xgood "<<xgood<<endl;
511
512 // if(nplanes>0){
513
514 if (option && option[0] == 'C') {
515
516
517 if(xgood) delete [] xgood;
518 if(ygood) delete [] ygood;
519 if(multmaxx) delete [] multmaxx;
520 if(multmaxy) delete [] multmaxy;
521 if(xm) delete [] xm;
522 if(ym) delete [] ym;
523 if(zm) delete [] zm;
524 if(xma) delete [] xma;
525 if(yma) delete [] yma;
526 if(zma) delete [] zma;
527 if(xmb) delete [] xmb;
528 if(ymb) delete [] ymb;
529 if(zmb) delete [] zmb;
530 if(resx) delete [] resx;
531 if(resy) delete [] resy;
532 if(xv) delete [] xv;
533 if(yv) delete [] yv;
534 if(zv) delete [] zv;
535 if(axv) delete [] axv;
536 if(ayv) delete [] ayv;
537 if(dedx_x)delete [] dedx_x;
538 if(dedx_y)delete [] dedx_y;
539 //}
540
541 xgood = NULL;
542 ygood = NULL;
543 multmaxx = NULL;
544 multmaxy = NULL;
545 xm = NULL;
546 ym = NULL;
547 zm = NULL;
548 xma = NULL;
549 yma = NULL;
550 zma = NULL;
551 xmb = NULL;
552 ymb = NULL;
553 zmb = NULL;
554 resx = NULL;
555 resy = NULL;
556 xv = NULL;
557 yv = NULL;
558 zv = NULL;
559 axv = NULL;
560 ayv = NULL;
561 dedx_x = NULL;
562 dedx_y = NULL;
563
564 nplanes = 0;
565
566 }
567
568 };
569
570 void ExtTrack::Delete(){
571 Clear("C");
572 // delete [] xGF;
573 // delete [] yGF;
574 }
575
576 //--------------------------------------
577 //
578 //
579 //--------------------------------------
580
581 // /**
582 // * Set the position measurements
583 // */
584 // void ExtTrack::SetMeasure(Double_t *xmeas, Double_t *ymeas, Double_t *zmeas){
585 // for(int i=0; i<nplanes; i++) xm[i]= (xmeas? *xmeas++ : 0.);
586 // for(int i=0; i<nplanes; i++) ym[i]= (ymeas? *ymeas++ : 0.);
587 // for(int i=0; i<nplanes; i++) zm[i]= (ymeas? *zmeas++ : 0.);
588 // }
589 // /**
590 // * Set the TrkTrack position resolution
591 // */
592 // void ExtTrack::SetResolution(Double_t *rx, Double_t *ry){
593 // for(int i=0; i<nplanes; i++) resx[i]= (rx? *rx++ : 0.);
594 // for(int i=0; i<nplanes; i++) resy[i]= (ry? *ry++ : 0.);
595 // }
596 // /**
597 // * Set the TrkTrack good measurement
598 // */
599 // void ExtTrack::SetGood(int *xg, int *yg){
600
601 // for(int i=0; i<nplanes; i++) xgood[i]=(xg? *xg++ : 0 );
602 // for(int i=0; i<nplanes; i++) ygood[i]=(yg? *yg++ : 0 );
603 // }
604
605 //--------------------------------------
606 //
607 //
608 //--------------------------------------
609 void ExtTrack::Dump(){
610 cout << endl << "========== Track " ;
611 cout << endl << "zini : "<< zini;
612 cout << endl << "al : "; for(int i=0; i<5; i++)cout << al[i] << " ";
613 cout << endl << "chi^2 : "<< chi2;
614 cout << endl << "n.step : "<< nstep;
615 cout << endl << "xgood : "; for(int i=0; i<nplanes; i++)cout << XGood(i) ;
616 cout << endl << "ygood : "; for(int i=0; i<nplanes; i++)cout << YGood(i) ;
617 cout << endl << "xm : "; for(int i=0; i<nplanes; i++)cout << xm[i] << " ";
618 cout << endl << "ym : "; for(int i=0; i<nplanes; i++)cout << ym[i] << " ";
619 cout << endl << "zm : "; for(int i=0; i<nplanes; i++)cout << zm[i] << " ";
620 cout << endl << "xma : "; for(int i=0; i<nplanes; i++)cout << xma[i] << " ";
621 cout << endl << "yma : "; for(int i=0; i<nplanes; i++)cout << yma[i] << " ";
622 cout << endl << "zma : "; for(int i=0; i<nplanes; i++)cout << zma[i] << " ";
623 cout << endl << "xmb : "; for(int i=0; i<nplanes; i++)cout << xmb[i] << " ";
624 cout << endl << "ymb : "; for(int i=0; i<nplanes; i++)cout << ymb[i] << " ";
625 cout << endl << "zmb : "; for(int i=0; i<nplanes; i++)cout << zmb[i] << " ";
626 cout << endl << "xv : "; for(int i=0; i<nplanes; i++)cout << xv[i] << " ";
627 cout << endl << "yv : "; for(int i=0; i<nplanes; i++)cout << yv[i] << " ";
628 cout << endl << "zv : "; for(int i=0; i<nplanes; i++)cout << zv[i] << " ";
629 cout << endl << "resx : "; for(int i=0; i<nplanes; i++)cout << resx[i] << " ";
630 cout << endl << "resy : "; for(int i=0; i<nplanes; i++)cout << resy[i] << " ";
631 cout << endl << "coval : "; for(int i=0; i<5; i++)cout << coval[0][i]<<" ";
632 cout << endl << " "; for(int i=0; i<5; i++)cout << coval[1][i]<<" ";
633 cout << endl << " "; for(int i=0; i<5; i++)cout << coval[2][i]<<" ";
634 cout << endl << " "; for(int i=0; i<5; i++)cout << coval[3][i]<<" ";
635 cout << endl << " "; for(int i=0; i<5; i++)cout << coval[4][i]<<" ";
636 cout << endl << "MDR : "<< (coval[4][4]>0. ? 1./sqrt(coval[4][4]) : 0. ) ;
637 cout << endl << "dedx_x : "; for(int i=0; i<nplanes; i++)cout << dedx_x[i] << " ";
638 cout << endl << "dedx_y : "; for(int i=0; i<nplanes; i++)cout << dedx_y[i] << " ";
639
640 cout << endl << "=================";
641 cout << endl;
642 }
643 /**
644 * Reset the fit parameters
645 */
646 void ExtTrack::ResetFit(){
647
648 // cout << " ExtTrack::ResetFit() "<<endl;
649 for(int i=0; i<5; i++) al[i]=-9999.;
650 chi2=0.;
651 nstep=0;
652
653 for(int i=0; i<5; i++) {
654 for(int j=0; j<5; j++) coval[i][j]=0.;
655 }
656
657 for(int i=0; i<nplanes; i++){
658 xv[i] = 0.;
659 yv[i] = 0.;
660 zv[i] = 0.;
661 axv[i] = 0.;
662 ayv[i] = 0.;
663 }
664
665 int ngf = TrkParams::nGF;
666 for(int i=0; i<ngf; i++){
667 xGF[i] = 0.;
668 yGF[i] = 0.;
669 }
670
671
672 }
673 /**
674 * Reset x/y measured coordinates (NB it does not reset z coordinates)
675 */
676 void ExtTrack::ResetXY(){
677
678 for(int i=0; i<nplanes; i++)ResetXY(i);
679
680
681 }
682 /**
683 * \brief Tracking method. It calls F77 mini routine.
684 *
685 * @see void TrkTrack::Fit(double, int&, int, int)
686 */
687 void ExtTrack::Fit(double pfixed, int& fail, int iprint){
688
689 TrkParams::Load(1);
690 if( !TrkParams::IsLoaded(1) ){
691 cout << "void ExtTrack::Fit(double,int&,int,int) ---ERROR--- m.field not loaded "<<endl;
692 return;
693 }
694
695 float al_ini[] = {0.,0.,0.,0.,0.};
696
697 fail = 0;
698
699 FillMiniStruct(); //fill F77 common
700
701
702 // if fit variables have been reset, evaluate the initial guess
703 if(al[0]==-9999.&&al[1]==-9999.&&al[2]==-9999.&&al[3]==-9999.&&al[4]==-9999.){
704 if(iprint==2)cout << "calling guessext_()"<<endl;
705 guessext_();
706 }
707 // --------------------- free momentum
708 if(pfixed==0.) {
709 exttrack_.pfixed=0.;
710 }
711 // --------------------- fixed momentum
712 if(pfixed!=0.) {
713 al[4]=1./pfixed;
714 exttrack_.pfixed=pfixed;
715 }
716
717 // store temporarily the initial guess
718 for(int i=0; i<5; i++) al_ini[i]=exttrack_.al[i];
719
720 if(iprint==2){
721 cout<<endl<<" init. guess: ";
722 for(int i=0; i<5; i++)cout << al_ini[i]<<" ";
723 cout<<endl;
724 }
725 // ------------------------------------------
726 // call mini routine
727 // ------------------------------------------
728 int istep=0;
729 int ifail=0;
730 if(iprint==2)cout << "calling miniext_("<<istep<<","<<ifail<<", "<<iprint<<")"<<endl;
731 miniext_(&istep,&ifail, &iprint);
732 if(ifail!=0) {
733 if(iprint)cout << "ERROR: ifail= " << ifail << endl;
734 fail = 1;
735 }
736 if(chi2!=chi2){
737 if(iprint)cout << "ERROR: chi2= " << chi2 << endl;
738 ResetFit();
739 fail = 1;
740 }
741 // ------------------------------------------
742
743 SetFromMiniStruct(); //copy content of F77 common into the ExtTrack object
744
745 if(fail){
746 if(iprint)cout << " >>>> fit failed "<<endl;
747 for(int i=0; i<5; i++) al[i]=al_ini[i];
748 }
749 };
750
751 /**
752 * Method to fill minimization-routine common
753 * NB (zini=23.5 is implicitelly set)
754 */
755 void ExtTrack::FillMiniStruct(cMiniExtTrack& track){
756
757 track.nplanes = nplanes;
758 for(int i=0; i<nplanes; i++){
759
760 track.xgood[i] = (double) XGood(i);
761 track.ygood[i] = (double) YGood(i);
762
763 track.xm[i] = (double) xm[i];
764 track.ym[i] = (double) ym[i];
765 track.zm[i] = (double) zm[i];
766
767
768 track.xm_a[i] = (double) xma[i];
769 track.xm_b[i] = (double) xmb[i];
770 track.ym_a[i] = (double) yma[i];
771 track.ym_b[i] = (double) ymb[i];
772 track.zm_a[i] = (double) zma[i];
773 track.zm_b[i] = (double) zmb[i];
774
775 track.resx[i] = (double) resx[i];
776 track.resy[i] = (double) resy[i];
777 }
778
779 for(int i=0; i<5; i++) track.al[i] = (double) al[i];
780
781 track.zini = (double) zini;
782
783
784 }
785 /**
786 * Method to set values from minimization-routine common
787 */
788 void ExtTrack::SetFromMiniStruct(cMiniExtTrack *track){
789
790 for(int i=0; i<5; i++) {
791 al[i] = (float) (track->al[i]);
792 for(int j=0; j<5; j++) coval[i][j] = (float) (track->cov[i][j]);
793 }
794 chi2 = (float) (track->chi2);
795 nstep = (float) (track->nstep);
796 for(int i=0; i<nplanes; i++){
797 xv[i] = (float) (track->xv[i]);
798 yv[i] = (float) (track->yv[i]);
799 zv[i] = (float) (track->zv[i]);
800 xm[i] = (float) (track->xm[i]);
801 ym[i] = (float) (track->ym[i]);
802 zm[i] = (float) (track->zm[i]);
803 xma[i] = (float) (track->xm_a[i]);
804 yma[i] = (float) (track->ym_a[i]);
805 zma[i] = (float) (track->zm_a[i]);
806 xmb[i] = (float) (track->xm_b[i]);
807 ymb[i] = (float) (track->ym_b[i]);
808 zmb[i] = (float) (track->zm_b[i]);
809 axv[i] = (float) (track->axv[i]);
810 ayv[i] = (float) (track->ayv[i]);
811 }
812 zini = (float) (track->zini);
813 }
814 /**
815 * Method to retrieve ID (0,1,...) of x-cluster (if any) associated to this track.
816 * If no cluster is associated, ID=-1.
817 *
818 */
819 int ExtTrack::GetClusterX_ID(int ip){
820 if(ip<0 || ip>=nplanes)return -1;
821 return ((int)fabs(xgood[ip]))%10000000-1;
822 };
823 /**
824 * Method to retrieve ID (0-xxx) of y-cluster (if any) associated to this track.
825 *
826 */
827 int ExtTrack::GetClusterY_ID(int ip){
828 if(ip<0 || ip>=nplanes)return -1;
829 return ((int)fabs(ygood[ip]))%10000000-1;
830 };
831
832 /**
833 * Method to retrieve the dE/dx measured on a tracker view.
834 * @param ip plane (0-5)
835 * @param iv view (0=x 1=y)
836 */
837 Float_t ExtTrack::GetDEDX(int ip, int iv){
838 if(iv==0 && ip>=0 && ip<nplanes)return fabs(dedx_x[ip]);
839 else if(iv==1 && ip>=0 && ip<nplanes)return fabs(dedx_y[ip]);
840 else {
841 cout << "TrkTrack::GetDEDX(int ip, int iv) -- wrong input parameters "<<ip<<iv<<endl;
842 return 0.;
843 }
844 }
845 /**
846 * Method to evaluate the dE/dx measured on a tracker plane.
847 * The two measurements on x- and y-view are averaged.
848 * @param ip plane (0-5)
849 */
850 Float_t ExtTrack::GetDEDX(int ip){
851 if( (Int_t)XGood(ip)+(Int_t)YGood(ip) == 0 ) return 0;
852 return (GetDEDX(ip,0)+GetDEDX(ip,1))/((Int_t)XGood(ip)+(Int_t)YGood(ip));
853 };
854
855 /**
856 * Method to evaluate the dE/dx averaged over all planes.
857 */
858 Float_t ExtTrack::GetDEDX(){
859 Float_t dedx=0;
860 for(Int_t ip=0; ip<nplanes; ip++)dedx+=GetDEDX(ip,0)*XGood(ip)+GetDEDX(ip,1)*YGood(ip);
861 dedx = dedx/(GetNX()+GetNY());
862 return dedx;
863 };
864
865 /**
866 * Method to retrieve the ladder, if assigned
867 */
868 int ExtTrack::GetLadder(int ip){
869 if(XGood(ip))return (int)fabs(xgood[ip]/100000000)-1;
870 if(YGood(ip))return (int)fabs(ygood[ip]/100000000)-1;
871 return -1;
872 };
873 /**
874 * Method to retrieve the sensor, if assigned
875 */
876 int ExtTrack::GetSensor(int ip){
877 if(XGood(ip))return (int)((int)fabs(xgood[ip]/10000000)%10)-1;
878 if(YGood(ip))return (int)((int)fabs(ygood[ip]/10000000)%10)-1;
879 return -1;
880 };
881 /**
882 *
883 */
884 Int_t ExtTrack::GetClusterX_Multiplicity(int ip){
885 if(ip<0 || ip>=nplanes){
886 cout << " ExtTrack::GetClusterX_Multiplicity("<<ip<<",...) ---> exceed vector dimension = "<<nplanes<<endl;
887 return -1;
888 }
889 return (Int_t)(multmaxx[ip]/10000);
890 }
891 /**
892 *
893 */
894
895 Int_t ExtTrack::GetClusterY_Multiplicity(int ip){
896 if(ip<0 || ip>=nplanes){
897 cout << " ExtTrack::GetClusterY_Multiplicity("<<ip<<",...) ---> exceed vector dimension = "<<nplanes<<endl;
898 return -1;
899 }
900 return (Int_t)(multmaxy[ip]/10000);
901 }
902 /**
903 *
904 */
905
906 Int_t ExtTrack::GetClusterX_MaxStrip(int ip){
907 if(ip<0 || ip>=nplanes){
908 cout << " ExtTrack::GetClusterX_MaxStrip("<<ip<<",...) ---> exceed vector dimension = "<<nplanes<<endl;
909 return -1;
910 }
911 return (Int_t)(multmaxx[ip]%10000);
912 }
913 /**
914 *
915 */
916
917 Int_t ExtTrack::GetClusterY_MaxStrip(int ip){
918 if(ip<0 || ip>=nplanes){
919 cout << " ExtTrack::GetClusterY_MaxStrip("<<ip<<",...) ---> exceed vector dimension = "<<nplanes<<endl;
920 return -1;
921 }
922 return (Int_t)(multmaxy[ip]%10000);
923 }
924 Float_t ExtTrack::GetRigidity(){
925 Float_t rig=0;
926 if(chi2>0)rig=1./al[4];
927 if(rig<0) rig=-rig;
928 return rig;
929 };
930 //
931 Float_t ExtTrack::GetDeflection(){
932 Float_t def=0;
933 if(chi2>0)def=al[4];
934 return def;
935 };
936
937
938 //
939 // all that follows: EM porting from TrkLevel2
940 //
941 Bool_t ExtTrack::IsInsideAcceptance(float toll){
942 int ngf = TrkParams::nGF;
943 for(int i=0; i<ngf; i++){
944 //
945 // cout << endl << TrkParams::GF_element[i];
946 if(
947 TrkParams::GF_element[i].CompareTo("S11") &&
948 TrkParams::GF_element[i].CompareTo("S12") &&
949 TrkParams::GF_element[i].CompareTo("S21") &&
950 TrkParams::GF_element[i].CompareTo("S22") &&
951 TrkParams::GF_element[i].CompareTo("T1") &&
952 TrkParams::GF_element[i].CompareTo("CUF") &&
953 TrkParams::GF_element[i].CompareTo("T2") &&
954 TrkParams::GF_element[i].CompareTo("T3") &&
955 TrkParams::GF_element[i].CompareTo("T4") &&
956 TrkParams::GF_element[i].CompareTo("T5") &&
957 TrkParams::GF_element[i].CompareTo("CLF") &&
958 TrkParams::GF_element[i].CompareTo("T6") &&
959 TrkParams::GF_element[i].CompareTo("S31") &&
960 TrkParams::GF_element[i].CompareTo("S32") &&
961 true)continue;
962 // apply condition only within the cavity
963 // cout << " -- "<<xGF[i]<<" "<<yGF[i];
964 if(
965 xGF[i] <= TrkParams::xGF_min[i] + toll ||
966 xGF[i] >= TrkParams::xGF_max[i] - toll ||
967 yGF[i] <= TrkParams::yGF_min[i] + toll ||
968 yGF[i] >= TrkParams::yGF_max[i] - toll ||
969 false){
970
971 return false;
972 }
973 }
974 return true;
975 }
976
977 /**
978 * Returns the reduced chi-square of track x-projection
979 */
980 Float_t ExtTrack::GetChi2X(){
981 float chiq=0;
982 for(int ip=0; ip<nplanes; ip++)if(XGood(ip))chiq+= pow((xv[ip]-xm[ip])/resx[ip],2.);
983 if(GetNX()>3)chiq=chiq/(GetNX()-3);
984 else chiq=0;
985 // if(chiq==0)cout << " Float_t ExtTrack::GetChi2X() -- WARNING -- value not defined "<<chiq<<endl;
986 return chiq;
987 }
988 /**
989 * Returns the reduced chi-square of track y-projection
990 */
991 Float_t ExtTrack::GetChi2Y(){
992 float chiq=0;
993 for(int ip=0; ip<nplanes; ip++)if(YGood(ip))chiq+= pow((yv[ip]-ym[ip])/resy[ip],2.);
994 if(GetNY()>2)chiq=chiq/(GetNY()-2);
995 else chiq=0;
996 // if(chiq==0)cout << " Float_t ExtTrack::GetChi2Y() -- WARNING -- value not defined "<<chiq<<endl;
997 return chiq;
998 }
999
1000 /**
1001 * Returns the track "lever-arm" on the x view, defined as the distance (in planes) between
1002 * the upper and lower x measurements (the maximum value of lever-arm is 6).
1003 */
1004 Int_t ExtTrack::GetLeverArmX(){
1005 int first_plane = -1;
1006 int last_plane = -1;
1007 for(Int_t ip=0; ip<nplanes; ip++){
1008 if( XGood(ip) && first_plane == -1 )first_plane = ip;
1009 if( XGood(ip) && first_plane != -1 )last_plane = ip;
1010 }
1011 if( first_plane == -1 || last_plane == -1){
1012 cout<< "Int_t ExtTrack::GetLeverArmX() -- XGood(ip) always false ??? "<<endl;
1013 return 0;
1014 }
1015 return (last_plane-first_plane+1);
1016 }
1017 /**
1018 * Returns the track "lever-arm" on the y view, defined as the distance (in planes) between
1019 * the upper and lower y measurements (the maximum value of lever-arm is 6).
1020 */
1021 Int_t ExtTrack::GetLeverArmY(){
1022 int first_plane = -1;
1023 int last_plane = -1;
1024 for(Int_t ip=0; ip<nplanes; ip++){
1025 if( YGood(ip) && first_plane == -1 )first_plane = ip;
1026 if( YGood(ip) && first_plane != -1 )last_plane = ip;
1027 }
1028 if( first_plane == -1 || last_plane == -1){
1029 cout<< "Int_t ExtTrack::GetLeverArmY() -- YGood(ip) always false ??? "<<endl;
1030 return 0;
1031 }
1032 return (last_plane-first_plane+1);
1033 }
1034 /**
1035 * Returns the track "lever-arm" on the x+y view, defined as the distance (in planes) between
1036 * the upper and lower x,y (couple) measurements (the maximum value of lever-arm is 6).
1037 */
1038 Int_t ExtTrack::GetLeverArmXY(){
1039 int first_plane = -1;
1040 int last_plane = -1;
1041 for(Int_t ip=0; ip<nplanes; ip++){
1042 if( XGood(ip) && YGood(ip) && first_plane == -1 )first_plane = ip;
1043 if( XGood(ip) && YGood(ip) && first_plane != -1 )last_plane = ip;
1044 }
1045 if( first_plane == -1 || last_plane == -1){
1046 // cout<< "Int_t ExtTrack::GetLeverArmXY() -- XGood(ip)*YGood(ip) always false ??? "<<endl;
1047 return 0;
1048 }
1049 return (last_plane-first_plane+1);
1050 }
1051
1052
1053
1054 ClassImp(ExtTrack);

  ViewVC Help
Powered by ViewVC 1.1.23