23#include "MdcxReco/MdcxFindTracks.h"
24#include "MdcxReco/MdcxParameters.h"
25#include "MdcxReco/Mdcxprobab.h"
26#include "MdcxReco/MdcxHit.h"
27#include "MdcGeom/Constants.h"
29#include "AIDA/IHistogram1D.h"
30#include "AIDA/IHistogram2D.h"
31#include "GaudiKernel/NTuple.h"
34#define prt(n) <<setw(8)<<GET_NAME(n)<<" "<<setw(8)<<n<<endl
52extern AIDA::IHistogram1D*
g_trkld;
53extern AIDA::IHistogram1D*
g_trkle;
125 static int nfound = 0;
126 static float sumprob = 0.0;
128 MdcxHel thel(0., 0., 0., 0., 0.);
130 int nSeg = segList.length();
131 for (
int i = 0; i < nSeg ; i++) { segList[i]->SetUsedOnHel(0); }
133 double xp, yp, xl1, yl1, rl1, xl2, yl2, rl2;
134 double d0g, phi0g, omegag, z0g, tanlg;
135 double d0g_sl, phi0g_sl, omegag_sl, z0g_sl, tanlg_sl;
136 double zintAU, zintAV, zintAU_sl, zintAV_sl = 9999.;
137 double rl1_sl, rl2_sl;
139 double sinPhi0g_sl, cosPhi0g_sl, xp_sl, yp_sl;
140 double phiAx, phiStU, phiStV, xl1_sl, yl1_sl, xl2_sl, yl2_sl, xl1_0, yl1_0, xl2_0, yl2_0;
141 double sx1, sy1, sx2, sy2;
143 double fltAx, ztest, fltL_sl, ztest_sl;
144 int floop, trkCount= 0;
153 if(4 ==
m_debug) std::cout <<
" Test combo: ("<< axlay<<
","<<stUlay<<
","<<stVlay <<
")"<< std::endl;
161 for (
int iAx = 0; iAx < nSeg; iAx++) {
162 bool b_useGood_stU =
true;
163 bool b_useGood_stV =
true;
164 if ((segList[iAx]->GetUsedOnHel() != 0) || (segList[iAx]->Fail() != 0)
165 || (segList[iAx]->
SuperLayer(0) != axlay) || (segList[iAx]->Origin() != -1) )
continue;
168 std::cout<<
"---------1.Ax seg------ No."<<iAx<< std::endl;
169 segList[iAx]->printSegAll();
173 omegag = segList[iAx]->Omega();
175 if (4 ==
m_debug) std::cout<<
"SKIP by maxTrkOmega "<<fabs(omegag) << std::endl;
178 if(4 ==
m_debug) std::cout <<
" iAx omegag = " << omegag << std::endl;
184 d0g_sl = segList[iAx]->D0_sl_approx();
185 phi0g_sl = segList[iAx]->Phi0_sl_approx();
189 sinPhi0g_sl = -
sin(phi0g_sl);
190 cosPhi0g_sl =
cos(phi0g_sl);
191 xp_sl = segList[iAx]->Xref() + sinPhi0g_sl*d0g_sl;
192 yp_sl = segList[iAx]->Yref() + cosPhi0g_sl*d0g_sl;
193 d0g_sl = yp_sl*cosPhi0g_sl + xp_sl*sinPhi0g_sl;
194 fltL_sl = segList[iAx]->Xref()*cosPhi0g_sl - segList[iAx]->Yref()*sinPhi0g_sl;
196 std::cout <<
"--Ax :" prt(d0g_sl)
prt(phi0g_sl)
prt(omegag_sl)
prt(sinPhi0g_sl)
prt(xp_sl)
prt(yp_sl)
prt(fltL_sl) << std::endl;
201 omegag = ohel.
Omega();
208 phiAx = atan2(y0g-yc, x0g-xc);
209 fltAx =
dlen(-2, phi0g,-1, segList[iAx]->Phi0(), omegag);
212 std::cout <<
"--Ax :"<<
" ohel ";
221 for (
int iStU = -1;
true; ) {
222 if(!b_useGood_stU && (iStU >= (nSeg-1)))
break;
223 if(b_useGood_stU && (iStU >= (nSeg-1))){
225 b_useGood_stU =
false;
228 if ((segList[iAx]->GetUsedOnHel() != 0)
229 || (segList[iStU]->GetUsedOnHel() != 0)
230 || (segList[iStU]->Fail() != 0)
232 || (segList[iStU]->Origin() != -1)
234 || (b_useGood_stU && (segList[iStU]->Nhits()< 4))
238 std::cout <<
" Test combo: AUV "<< axlay<<
","<<stUlay<<
","<<stVlay << std::endl;
239 std::cout<<
"---------2.St U seg ------No."<<iStU<< std::endl;
240 segList[iStU]->printSeg();
241 std::cout<<
" omega of seg iStU = "<<segList[iStU]->Omega()<<std::endl;
246 double dPhiAU = fabs(hitsAx[0]->phiMid() - hitsStU[0]->phiMid());
249 if (dPhiAU > max_dPhiAU){
250 cout <<
"SKIP by dPhiAU " <<dPhiAU <<
" > "<< max_dPhiAU << endl;
252 cout <<
"KEEP by dPhiAU " <<dPhiAU<<
" <= " << max_dPhiAU << endl;
254 std::cout <<
" phi mid Ax "<<hitsAx[0]->phiMid()
255 <<
" StU "<<hitsStU[0]->phiMid() << std::endl;
256 std::cout<< std::endl;
260 if (dPhiAU > max_dPhiAU){
continue; }
263 xl1_0 = segList[iStU]->Xline_bbrrf();
264 yl1_0 = segList[iStU]->Yline_bbrrf();
265 sx1 = segList[iStU]->Xline_slope();
266 sy1 = segList[iStU]->Yline_slope();
270 xl1 = xl1_0 + sx1*zintAU;
271 yl1 = yl1_0 + sy1*zintAU;
272 rl1 = sqrt(xl1*xl1 + yl1*yl1);
273 phiStU = atan2(yl1-yc, xl1-xc);
280 zintAU_sl =
findz_sl(iAx, iStU, segList);
281 xl1_sl = xl1_0 + sx1*zintAU_sl;
282 yl1_sl = yl1_0 + sy1*zintAU_sl;
283 rl1_sl = sqrt(xl1_sl*xl1_sl + yl1_sl*yl1_sl);
301 for (
int iStV = -1;
true; ) {
302 if(!b_useGood_stV && (iStV >= (nSeg-1))) {
303 if (4 ==
m_debug) std::cout << iStV <<
" no segments in V slayer "<< std::endl;
306 if(b_useGood_stV && (iStV >= (nSeg-1))){
308 b_useGood_stV =
false;
311 if ((segList[iStV]->GetUsedOnHel()!=0)
312 || (segList[iStU]->GetUsedOnHel()!=0)
313 || (segList[iAx]->GetUsedOnHel()!=0)
314 || (segList[iStV]->Fail() != 0)
316 || (segList[iStV]->Origin() != -1)
318 || (b_useGood_stV && (segList[iStV]->Nhits()< 4))
322 std::cout <<
" Test combo: AUV "<< axlay<<
","<<stUlay<<
","<<stVlay << std::endl;
323 std::cout<<
"---------3.St V seg ------No."<<iStV<< std::endl;
324 segList[iStV]->printSeg();
325 std::cout<<
" omega of seg iStV = "<<segList[iStV]->Omega()<<std::endl;
330 double dPhiAV = fabs(hitsAx[0]->phiMid() - hitsStV[0]->phiMid());
334 if (dPhiAV > max_dPhiAV){
335 cout <<
"SKIP by dPhiAV " <<dPhiAV <<
" > "<< max_dPhiAV << endl;
337 cout <<
"KEEP by dPhiAV " <<dPhiAV<<
" <= " << max_dPhiAV << endl;
339 std::cout <<
" phi mid Ax "<<hitsAx[0]->phiMid()
340 <<
" StV "<<hitsStV[0]->phiMid() << std::endl;
341 std::cout<< std::endl;
344 if (dPhiAV > max_dPhiAV) {
continue; }
348 xl2_0 = segList[iStV]->Xline_bbrrf();
349 yl2_0 = segList[iStV]->Yline_bbrrf();
350 sx2 = segList[iStV]->Xline_slope();
351 sy2 = segList[iStV]->Yline_slope();
354 xl2 = xl2_0 + sx2*zintAV;
355 yl2 = yl2_0 + sy2*zintAV;
356 rl2 = sqrt(xl2*xl2 + yl2*yl2);
358 segList[iAx]->printSeg();
359 segList[iStV]->printSeg();
360 cout <<
"zintAV " << zintAV << endl;
362 phiStV = atan2(yl2-yc, xl2-xc);
368 zintAV_sl =
findz_sl(iAx, iStV, segList);
369 xl2_sl = xl2_0 + sx2*zintAV_sl;
370 yl2_sl = yl2_0 + sy2*zintAV_sl;
371 rl2_sl = sqrt(xl2_sl*xl2_sl + yl2_sl*yl2_sl);
388 segList[iAx]->printSeg();
389 segList[iStU]->printSeg();
390 segList[iStV]->printSeg();
394 double first_prob = 0.0;
396 hitlist.append(hitsAx);
397 hitlist.append(hitsStU);
398 hitlist.append(hitsStV);
399 if(
g_trkllmk)
for (
int i=0; i<hitlist.length(); i++ ){
g_trkllmk->fill(hitlist[i]->Layer()); }
407 if(4 ==
m_debug) std::cout<<
"---------4.Ax circle fit------"<< std::endl;
409 if(4 ==
m_debug) std::cout<<
"SKIP by omegag==0 "<<std::endl;
425 if(4 ==
m_debug) cout<<
"dlen calc. slay U "<<segList[iStU]->SuperLayer()<<
" slay V "<<segList[iStV]->SuperLayer()<<endl;
429 cout
prt(fltLenUV)
prt(phiStU)
prt(phiStV)
prt(omegag)<< std::endl;
435 tanlg = (zintAV - zintAU)/fltLenUV;
436 if(4 ==
m_debug) cout<<
"dlen calc. slay A "<<segList[iAx]->SuperLayer()<<
" slay U "<<segList[iStU]->SuperLayer()<<endl;
454 z0g = zintAU - fltLenAU*tanlg;
462 ztest = z0g + fltAx*tanlg;
463 if (4 ==
m_debug) std::cout
prt(ztest)
prt(fltAx)<<std::endl;
467 MdcxHel ghel(segList[iAx]->D0(), segList[iAx]->Phi0(), segList[iAx]->Omega(),
468 ztest, tanlg, 0.0, 11111, 0, segList[iAx]->Xref(), segList[iAx]->Yref());
471 first_prob = firstfit.
Prob();
473 std::cout<<
" after first fit: "<<std::endl;
479 first_prob = nextfit.
Prob();
484 if (4 ==
m_debug) cout <<
" prob after helix fitting = " << first_prob << endl;
494 if (4 ==
m_debug) std::cout<<
"---------4.2 straight line fit------"<< std::endl;
495 if (4 ==
m_debug) cout <<
" zintAU_sl " << zintAU_sl <<
" zintAV_sl " << zintAV_sl << endl;
497 if (4 ==
m_debug) cout <<
" helix fit good , exit straight line fit." << endl;
506 double dx = xl2_sl - xl1_sl;
507 double dy = yl2_sl - yl1_sl;
508 double dl = sqrt(dx*dx + dy*dy);
509 tanlg_sl = (zintAV_sl - zintAU_sl)/dl;
510 dx = xl1_sl + d0g_sl*
sin(phi0g_sl);
511 dy = yl1_sl - d0g_sl*
cos(phi0g_sl);
512 dl = sqrt(dx*dx + dy*dy);
513 z0g_sl = zintAU_sl - dl*tanlg_sl;
521 ztest_sl = z0g_sl + fltL_sl*tanlg_sl;
525 MdcxHel ghel(segList[iAx]->D0_sl_approx(), segList[iAx]->Phi0_sl_approx(), omegag_sl,
526 ztest_sl, tanlg_sl, 0.0, 11111, 0, segList[iAx]->Xref(), segList[iAx]->Yref());
529 first_prob = firstfit.
Prob();
533 std::cout <<
"first_prob "<<first_prob << std::endl;
539 first_prob = nextfit.
Prob();
542 cout <<
" three seg sl nextfit" << endl;
555 if(4 ==
m_debug)std::cout<<
"---------5. try add seg to helix------"<< std::endl;
557 if(4 ==
m_debug) std::cout<<
"prob"<<first_prob<<
" "
558 <<
probmin<<
" fit NOT good, exit add segs "<< std::endl;
561 float bchisq = fithel.
Chisq()*helixFitSigma*helixFitSigma;
562 int bndof = fithel.
Nhits() - 5;
565 segList[iAx]->SetUsedOnHel(trkCount);
566 segList[iStU]->SetUsedOnHel(trkCount);
567 segList[iStV]->SetUsedOnHel(trkCount);
570 cout <<
"in add seg to trail helix, klm seg:" << endl;
571 segList[iAx]->printSeg();
572 segList[iStU]->printSeg();
573 segList[iStV]->printSeg();
579 for (
int iSeg = 0; iSeg < nSeg; iSeg++) {
581 ||(segList[iSeg]->GetUsedOnHel() != 0)
582 || (segList[iSeg]->Fail() != 0)
583 || (segList[iSeg]->Origin() != -1))
continue;
585 std::cout<< endl<<
"== add seg "<< iSeg<<
" ";
586 segList[iSeg]->printSeg();
590 float phiAxSeg = segList[iAx]->XHitList()[0]->phiMid();
591 float phiAddSeg = segList[iSeg]->XHitList()[0]->phiMid();
592 double phiKNSegDiff = fabs(phiAxSeg - phiAddSeg);
618 if(4 ==
m_debug) std::cout<<
" SKIP by phi diff,same "<< t_same <<
" Ax "<<
619 phiAxSeg<<
" iSeg "<<phiAddSeg<<
" diff "<<phiKNSegDiff << std::endl;
622 if(4 ==
m_debug) std::cout<<
" phi diff OK, Ax "<<
623 phiAxSeg<<
" added "<<phiAddSeg<<
" diff="<<phiKNSegDiff << std::endl;
627 xp = segList[iSeg]->Xref() - segList[iSeg]->SinPhi0()*segList[iSeg]->D0();
628 yp = segList[iSeg]->Yref() + segList[iSeg]->CosPhi0()*segList[iSeg]->D0();
630 double proca = fithel.
Doca( hitsSegAdd[0]->wx(), hitsSegAdd[0]->wy(),
631 hitsSegAdd[0]->wz(), xp, yp );
657 newhel.
Grow(fithel, hitsSegAdd);
658 if (newhel.
Nhits() != hitlist.length()) {
666 cout <<
" prob " << newhel.
Prob() <<
"<"<<
probmin<<
", ReFit" << endl;
671 cout<<
" refit prob "<<newhel.
Prob()<<
"<"<<
probmin<<
" Fail? "<<newhel.
Fail()<< endl;
678 segList[iSeg]->SetUsedOnHel(trkCount);
679 bchisq = fithel.
Chisq()*helixFitSigma*helixFitSigma;
680 bndof = fithel.
Nhits() - 5;
682 if (tprob > bprob) bprob = tprob;
684 cout <<
" segment ADDED, prob=" << newhel.
Prob() << endl;
688 if(4 ==
m_debug)std::cout<<
" fit FAILED"<<std::endl;
691 segList[iSeg]->SetUsedOnHel(trkCount);
692 if (4 ==
m_debug) cout <<
" segment ADDED, but no new hits" << endl;
697 if (((fithel.
Prob() < 0.90) && (fithel.
Nhits() == 12)) || (fithel.
Fail() != 0)) {
698 for (
int i = 0; i < nSeg; i++) {
if (segList[i]->GetUsedOnHel() == trkCount) segList[i]->SetUsedOnHel(0); }
704 std::cout<<
"Track after add segs" << std::endl;
709 if(4 ==
m_debug) std::cout<<
"---------6. flip------"<< std::endl;
714 int notduplicate = 1;
716 if (4 ==
m_debug)std::cout<<
"---------7. test saved track------"<< std::endl;
722 while (hitlist[kkl]) {
723 if (hitlist[kkl] == junk[kkj]) overl++;
728 if (4 ==
m_debug) cout <<
"overlap with track # " << kki <<
" is "
729 << junk.length() <<
" hitList " << hitlist.length() <<
" overlap " << overl << endl;
730 if ( (hitlist.length()/4.) <= overl) notduplicate = 0;
740 if(4 ==
m_debug) std::cout<<
"---------8. test worth saving?------"<< std::endl;
745 <<
" finehel Prob>0.001 "<<finehel->
Prob()
746 <<
" nhits "<<finehel->
Nhits() <<
">=15? "
749 <<
" Fail==0? "<< finehel->
Fail()
756 ) && (finehel->
Fail() == 0) ) {
758 sumprob += finehel->
Prob();
764 if ((finehel->
Prob() > 0.05) || nodrop ) {
767 for (
int iHit=0; iHit<finehel->
Nhits(); iHit++){
773 float ratdrop = float(drophel->
Nhits()) / float(finehel->
Nhits());
774 if (4 ==
m_debug) cout <<
"APPEND track " << trkCount <<
", drops "
776 <<
" helixnhit "<<finehel->
Nhits()<<
" drophit "<<drophel->
Nhits()
777 <<
" hits, drop rate="<<ratdrop <<
">?"<<0.5
778 <<
" prob "<<drophel->
Prob() <<
" >?"<<finehel->
Prob()
779 <<
" fail==0? "<<drophel->
Fail()
781 if ((drophel->
Prob() > finehel->
Prob()) &&
782 (ratdrop > 0.50) && (drophel->
Fail() == 0)) {
783 if (4 ==
m_debug) cout <<
"append drop helix " << endl;
788 if (4 ==
m_debug) cout <<
"append fine helix " << endl;
797 if ((4 ==
m_debug) && (nwl > -1)) {
799 cout << endl <<
"found track " << trkCount<<std::endl;
805 for (
int i = 0; i < nSeg; i++) {
806 if (segList[i]->GetUsedOnHel() == trkCount) segList[i]->SetUsedOnHel(0);
816 if(4==
m_debug) cout<<
"end of this combo"<<endl;
818 if(4==
m_debug) cout <<
" In MdcxFindTracks, found " << trkCount <<
" good tracks" << endl;
822 o<<
"ngood:"<<
ngood<<endl;
823 o<<
"npure:"<<
npure<<endl;
824 o<<
"nbad:"<<
nbad<<endl;
825 o<<
"nfail:"<<
nfail<<endl;
834 o <<
"|MdcxFindTracks| parameters" << endl;
835 o <<
"probmin:" <<
probmin << endl;
836 o <<
"curvmax:" <<
curvmax << endl;
850 double Ap = -
sin(segList[iAx]->Phi0_sl_approx());
851 double Bp =
cos(segList[iAx]->Phi0_sl_approx());
852 double xp = segList[iAx]->Xref() + Ap*segList[iAx]->D0_sl_approx();
853 double yp = segList[iAx]->Yref() + Bp*segList[iAx]->D0_sl_approx();
854 double xl = segList[iStU]->Xref() - segList[iStU]->SinPhi0()*segList[iStU]->D0();
855 double yl = segList[iStU]->Yref() + segList[iStU]->CosPhi0()*segList[iStU]->D0();
858 double Cl = hitsStU[0]->wz();
859 double ndotl = Bp*hitsStU[0]->wy() + Ap*hitsStU[0]->wx();
864 double zint = (ndotl != 0.0) ? ((Bp*(yp-yl)+Ap*(xp-xl))*Cl/ndotl) : -1000.;
870 double zint = -1000.0;
871 double r = 1.0/fabs(segList[iAx]->Omega());
872 double xl_0 = segList[iStU]->Xref() - segList[iStU]->SinPhi0()*segList[iStU]->D0();
873 double yl_0 = segList[iStU]->Yref() + segList[iStU]->CosPhi0()*segList[iStU]->D0();
874 double sx = segList[iStU]->Xline_slope();
875 double sy = segList[iStU]->Yline_slope();
876 double cx = xl_0 - segList[iAx]->Xc();
877 double cy = yl_0 - segList[iAx]->Yc();
878 double a = sx*sx + sy*sy;
879 double b = 2.0*(sx*cx + sy*cy);
882 double fac = 4.0 * a * (cx*cx + cy*cy - r*r);
885 double sfac = sqrt(bsq - fac);
886 double z1 = -(b - sfac)/ta;
887 double z2 = -(b + sfac)/ta;
888 zint = (fabs(z1) < fabs(z2)) ? z1 : z2;
897 if((slay1==2 || slay1==3 || slay1 == 4 || slay1 == 9 || slay1 ==10) ){
899 }
else if((slay2 >= slay1)) {
927 while(nwhitlist[kkk]) {
928 double pull = nwhitlist[kkk]->pull(mdcxHel);
929 int layer = nwhitlist[kkk]->Layer();
932 float t_doca = mdcxHel.
Doca(*(nwhitlist[kkk]));
933 float t_e = nwhitlist[kkk]->e(t_doca);
946 nwhitlist.remove(kkk);
952 if(
m_debug==4) cout<<
" MdcxFindTracks::drophits drop "<<nremove<<
" hits "
953 <<
" nhits of drop helix = "<<nwhitlist.length()<<endl;
962 int kkk = 0;
while(hitlist[kkk]){hitlist[kkk]->SetConstErr(0); kkk++;}
966 while(hitlist[kkk]) {
967 float doca = newhel.
Doca(*hitlist[kkk]);
970 float dd = hitlist[kkk]->d(newhel);
971 float tt = hitlist[kkk]->tcor(zh, tof);
973 cout <<
"MdcxFindTracks::resout ("
974 << hitlist[kkk]->Layer() <<
","
975 << hitlist[kkk]->WireNo() <<
") dt "
977 << fabs(dd)-fabs(doca) <<
" doca "
978 << fabs(doca) << endl;
983 while(hitlist[kkk]){hitlist[kkk]->SetConstErr(1); kkk++;}
988 double omegag = ihel.
Omega();
989 double phi0g = ihel.
Phi0();
990 double phi0s = phi0g;
993 double d0g = yp*
cos(phi0g) - xp*
sin(phi0g);
996 double xc =
sin(phi0g)/omegag;
997 double yc = -
cos(phi0g)/omegag;
998 double t1 = -xc - xp;
1000 double phinew = atan2(t1, t2);
1003 double xh = xc -
sin(phinew)/omegag;
1004 double yh = yc +
cos(phinew)/omegag;
1005 double x0 = xh + xp;
1006 double y0 = yh + yp;
1007 d0g = sqrt(x0*x0 + y0*y0);
1009 double sd0 = x0*
sin(phi0g) - y0*
cos(phi0g);
1010 if (sd0 > 0.0) d0g = -d0g;
1011 lng =
dlen(-2, phi0g, -1, phi0s, omegag);
1016 double tanlg = ihel.
Tanl();
1017 double z0g = ihel.
Z0() - lng*tanlg;
1019 double t0g = ihel.
T0();
1020 int codeg = ihel.
Code();
1021 MdcxHel ohel(d0g, phi0g, omegag, z0g, tanlg, t0g, codeg);
1039 int trackId = -9999;
1040 for (
int i =0; i<seg1->
Nhits(); i++){
1041 int tkid = seg1->
XHitList()[i]->getDigi()->getTrackIndex();
1042 if(tkid>=1000) tkid -=1000;
1043 if((trackId == -9999)){
1044 if(tkid>=0) trackId = tkid;
1046 if(tkid!=trackId)
return false;
1049 for (
int i =0; i<seg2->
Nhits(); i++){
1050 int tkid = seg2->
XHitList()[i]->getDigi()->getTrackIndex();
1051 if(tkid>=1000) tkid -=1000;
1052 if((trackId == -9999)){
1055 if(tkid!=trackId)
return false;
NTuple::Item< long > g_eventNo
double sin(const BesAngle a)
double cos(const BesAngle a)
AIDA::IHistogram1D * g_dPhiAV
NTuple::Item< double > m_addSegAddPhiLay
AIDA::IHistogram1D * g_trklappend2
NTuple::Item< double > m_addSegSeedPhi0
NTuple::Item< double > m_segCombDLenUV
AIDA::IHistogram1D * g_trklappend1
NTuple::Item< long > m_addSegSlayer
NTuple::Item< long > m_addSegSame
AIDA::IHistogram1D * g_trklproca
NTuple::Item< long > m_segDropHitsWire
NTuple::Item< double > m_addSegSeedSl
NTuple::Tuple * m_xtupleAddSeg1
NTuple::Item< double > m_addSegLen
NTuple::Item< double > m_segDropHitsDoca
NTuple::Item< double > m_segDropHitsSigma
NTuple::Item< double > m_addSegSeedPhiLay
NTuple::Item< double > m_segCombSlV
NTuple::Item< long > m_segDropHitsLayer
NTuple::Item< double > m_addSegSeedD0
AIDA::IHistogram1D * g_trklappend3
AIDA::IHistogram1D * g_trklhelix
NTuple::Item< double > m_segDropHitsMcTkId
AIDA::IHistogram1D * g_trkllmk
NTuple::Item< double > m_segCombPhiA
NTuple::Item< double > m_segCombSlA
NTuple::Item< double > m_segCombDLenAU
AIDA::IHistogram1D * g_trklgood
NTuple::Item< double > m_segCombSlU
NTuple::Item< double > m_segCombPhiU
AIDA::IHistogram1D * g_dPhiAU
NTuple::Item< double > m_segCombSameUV
NTuple::Item< double > m_addSegAddPhi
NTuple::Item< double > m_addSegSeedPhi
NTuple::Item< double > m_segCombPhiV
NTuple::Item< double > m_addSegAddPhi0
NTuple::Tuple * m_xtupleSegComb
NTuple::Item< double > m_addSegAddSl
NTuple::Item< double > m_segCombOmega
NTuple::Item< double > m_addSegAddD0
NTuple::Item< long > m_segDropHitsEvtNo
NTuple::Item< double > m_segCombSameAU
NTuple::Item< double > m_segDropHitsPull
AIDA::IHistogram1D * g_trklfirstProb
NTuple::Tuple * m_xtupleAddSeg2
AIDA::IHistogram1D * g_omegag
NTuple::Item< long > m_addSegEvtNo
NTuple::Item< double > m_segDropHitsDrift
NTuple::Tuple * m_xtupleDropHits
NTuple::Item< double > m_addSegPoca
float Mdcxprobab(int &ndof, float &chisq)
unsigned SuperLayer(const AList< TMLink > &list)
returns super layer pattern.
NTuple::Item< double > m_addSegAddPhiLay
AIDA::IHistogram1D * g_trkldrop1
AIDA::IHistogram1D * g_trklappend2
NTuple::Item< double > m_addSegSeedPhi0
NTuple::Item< double > m_segCombDLenUV
AIDA::IHistogram1D * g_trklappend1
NTuple::Item< long > m_addSegSlayer
AIDA::IHistogram2D * g_dPhiAU
NTuple::Item< long > m_addSegSame
AIDA::IHistogram1D * g_trklproca
NTuple::Item< long > m_segDropHitsWire
NTuple::Item< double > m_addSegSeedSl
NTuple::Tuple * m_xtupleAddSeg1
NTuple::Item< double > m_addSegAddLen
NTuple::Item< double > m_addSegLen
AIDA::IHistogram1D * g_trkle
AIDA::IHistogram1D * g_trkld
AIDA::IHistogram1D * g_trkltemp
NTuple::Item< double > m_segDropHitsDoca
NTuple::Item< double > m_segDropHitsSigma
AIDA::IHistogram2D * g_trklel
NTuple::Item< double > m_addSegSeedPhiLay
NTuple::Item< double > m_addSegSeedLen
NTuple::Item< double > m_segCombSlV
NTuple::Item< long > m_segDropHitsLayer
NTuple::Item< double > m_addSegSeedD0
AIDA::IHistogram2D * g_dropHitsSigma
AIDA::IHistogram1D * g_trklappend3
AIDA::IHistogram1D * g_trklhelix
NTuple::Item< double > m_segDropHitsMcTkId
AIDA::IHistogram1D * g_trkllmk
AIDA::IHistogram2D * g_trkldl
NTuple::Item< double > m_segCombPhiA
NTuple::Item< double > m_segCombSlA
NTuple::Item< double > m_segCombDLenAU
AIDA::IHistogram1D * g_trklgood
AIDA::IHistogram1D * g_trkllayer
NTuple::Item< double > m_segCombSlU
NTuple::Item< double > m_segCombPhiU
AIDA::IHistogram2D * g_dPhiAV
NTuple::Item< double > m_segCombSameUV
NTuple::Item< double > m_addSegAddPhi
NTuple::Item< double > m_addSegSeedPhi
AIDA::IHistogram1D * g_trkldrop2
NTuple::Item< double > m_segCombPhiV
NTuple::Item< double > m_addSegAddPhi0
NTuple::Tuple * m_xtupleSegComb
NTuple::Item< double > m_addSegAddSl
NTuple::Item< double > m_segCombOmega
NTuple::Item< double > m_addSegAddD0
NTuple::Item< long > m_segDropHitsEvtNo
NTuple::Item< double > m_segCombSameAU
NTuple::Item< double > m_segDropHitsPull
AIDA::IHistogram1D * g_trklfirstProb
NTuple::Tuple * m_xtupleAddSeg2
AIDA::IHistogram1D * g_omegag
AIDA::IHistogram1D * g_trkldoca
NTuple::Item< long > m_addSegEvtNo
NTuple::Item< double > m_segDropHitsDrift
NTuple::Tuple * m_xtupleDropHits
NTuple::Item< double > m_addSegPoca
AIDA::IHistogram1D * g_trklcircle
NTuple::Item< double > m_segCombPoca
static const double twoPi
static const int nSuperLayer
static const double epsilon
virtual ~MdcxFindTracks()
MdcxFittedHel drophits(MdcxFittedHel *f)
void process(const HepAList< MdcxSeg > &f)
double findz_sl(int i1, int i2, const HepAList< MdcxSeg > &slclus)
double findz_cyl(int i1, int i2, const HepAList< MdcxSeg > &slclus)
bool testFromSameTrack(MdcxSeg *seg1, MdcxSeg *seg2)
void resout(MdcxFittedHel *f)
double dlen(int slay1, double p1, int slay2, double p2, double om)
void print(std::ostream &o)
HepAList< MdcxFittedHel > MdcxTrklist
MdcxHel TakeToOrigin(MdcxHel &)
void printpar(std::ostream &o)
int Layer(int hitno=0) const
const HepAList< MdcxHit > & XHitList() const
int Fail(float Probmin=0.0) const
MdcxFittedHel & Grow(const MdcxFittedHel &, const HepAList< MdcxHit > &)
double Doca(double WX, double WY, double WZ, double X, double Y, double Z=0.0)
static const double maxMdcZLen
static const double maxDlen
static const double maxTrkOmega
Track attribute.
static const float maxDp12[nSegCombo]
static const int layerSet2AddSeg[nSegCombo][11]
static const float maxDp13[nSegCombo]
static double maxRcsInAddSeg
static const int nSegCombo
relative to MdcxFindTracks
static float dropHitsSigma[43]
static const int findTrkGroup[nSegCombo][3]
– relative to MdcxFindTracks
static double helixFitSigma