18#include "CLHEP/Alist/AList.h"
48#include "GaudiKernel/NTuple.h"
49#include "AIDA/IHistogram1D.h"
68extern NTuple::Array<double>
m_pickZ;
75extern NTuple::Array<double>
m_pickPt;
80#ifdef MDCPATREC_TIMETEST
82#include <Profile/Profiler.h>
118#ifdef MDCPATREC_TIMETEST
119 TAU_PROFILE_TIMER(timer8,
"fill ax seg",
"int ()", TAU_DEFAULT);
120 TAU_PROFILE_START(timer8);
126#ifdef MDCPATREC_TIMETEST
127 TAU_PROFILE_STOP(timer8);
130 bool goodOnly =
true;
131 bool useBad = (segs->
count() < 400);
137 seed = segs->
getSeed(0,goodOnly);
138 if (seed == 0 && goodOnly && useBad) {
143 else if (seed == 0 && (!goodOnly || !useBad)) {
147 if (3 == m_debug)
dumpSeed(seed, goodOnly);
155#ifdef MDCPATREC_TIMETEST
156 TAU_PROFILE_TIMER(timer3,
"combine ax seg",
"int ()", TAU_DEFAULT);
157 TAU_PROFILE_START(timer3);
159 int success = origSegs.
combineSegs(trialTrack, seed, context, bunchTime,
161#ifdef MDCPATREC_TIMETEST
162 TAU_PROFILE_STOP(timer3);
167 cout<<
" ***** Ax.combineSegs success? " << success<<
"\n";
170 if (!success)
continue;
174#ifdef MDCPATREC_TIMETEST
175 TAU_PROFILE_TIMER(timer4,
"circle fitting",
"int ()", TAU_DEFAULT);
176 TAU_PROFILE_START(timer4);
179#ifdef MDCPATREC_TIMETEST
180 TAU_PROFILE_STOP(timer4);
184 cout<<
"finishCircle success? " << success<<
"\n";
188 if (!success)
continue;
211 if (3 <= m_debug) std::cout <<
" *** End r-phi track-finding "<<std::endl;
214#ifdef MDCPATREC_TIMETEST
215 TAU_PROFILE_TIMER(timer5,
"fill st seg",
"int ()", TAU_DEFAULT);
216 TAU_PROFILE_START(timer5);
219#ifdef MDCPATREC_TIMETEST
220 TAU_PROFILE_STOP(timer5);
224 std::cout<<std::endl<<
"----------------------------------------"<< std::endl;
225 std::cout<<
" Segment list after St.fillWithSegs "<< std::endl;
229#ifdef MDCPATREC_TIMETEST
230 TAU_PROFILE_TIMER(timer6,
"combine st seg",
"int ()", TAU_DEFAULT);
231 TAU_PROFILE_START(timer6);
233 success = stereoSegs.
combineSegs(trialTrack, 0, context, bunchTime,
235#ifdef MDCPATREC_TIMETEST
236 TAU_PROFILE_STOP(timer6);
240 cout<<
" ***** St.combineSegs success? " << success<<
"\n";
247#ifdef MDCPATREC_TIMETEST
248 TAU_PROFILE_TIMER(timer7,
"helix fitting",
"int ()", TAU_DEFAULT);
249 TAU_PROFILE_START(timer7);
252#ifdef MDCPATREC_TIMETEST
253 TAU_PROFILE_STOP(timer7);
260 if (!success)
continue;
267 <<
" Killing track by d0 after 3d fit:" <<d0par<<
">"<<
m_d0Cut << endl;}
274 <<
" Killing track by z0:" <<z0par<<
">"<<
m_z0Cut << endl;}
284 if (3 == m_debug) std::cout <<
" ***** End one track-finding *****"<<std::endl;
308 cout <<
"Before pickHits";
309 if (is2d) cout<<
" 2d:";
317 double rEnter, rExit;
319 int wireLow, wireHigh;
320 double phiLow, phiHigh;
328 int firstInputHit = -1;
339 assert (tkStatus != 0);
341 assert (hitList != 0);
343 double d0 = par.
d0();
344 double curv = 0.5 * par.
omega();
345 double sinPhi0 =
sin(par.
phi0());
346 double cosPhi0 =
cos(par.
phi0());
350 double absd0 = fabs(d0);
353 bool willCurl =
false;
354 double rCurl = fabs(d0 + 1./curv);
362 bool reachedLastInput =
false;
363 bool hasCurled =
false;
366 bool isHotOnLayer[43];
368 for(
int ii=0; ii<43; ii++) isHotOnLayer[ii]=
false;
370 isHotOnLayer[ihit->layerNumber()]=
true;
377 layer = ((!lCurl) ? ( (hasCurled) ? gm->
prevLayer(layer) :
385 if (tkStatus->
is2d() && layer->view() != 0)
continue;
391 bool lContinue =
true;
393 if (layer == lastInputLayer) reachedLastInput =
true;
398 rEnter = layer->rOut();
404 rExit = layer->rIn();
405 if (rExit < rMin) rExit = rMin;
406 if (rEnter > rMax) rEnter = rMax;
411 rEnter = layer->rIn();
412 rExit = layer->rOut();
415 if (rExit < rMin)
continue;
434 if (rExit > rMax) rExit = rMax;
438 nCell = layer->nWires();
443 double deltaPhiCellWidth = 0.5 * (cellWidth * M_SQRT2)/layer->rMid();
447 int ierror = trk->
projectToR(rEnter, phiTemp, hasCurled);
448 phiEnter = phiTemp.
posRad();
451 <<
"Error in MdcTrackList::pickHits projection, ierror " <<ierror<< std::endl;
454 ierror = trk->
projectToR(rExit, phiTemp, hasCurled);
455 phiExit = phiTemp.
posRad();
458 <<
"Error in MdcTrackList::pickHits projection, ierror "<<ierror << std::endl;
464 std::cout<< endl<<
"--pickHit of layer "<<layer->layNum()<<
"--"<<std::endl;
465 std::cout<<
" track phiEnter "<< phiEnter.
deg()<<
" phiExit "<<phiExit.
deg()<<
" degree"<< std::endl;
468 std::cout<<
" goodDriftCut "<< goodDriftCut <<
"=sqrt(2)*0.5*"<<cellWidth<<
"+"<<
tkParam.
pickHitMargin<< std::endl;
474 double t_phiHit = -999.;
475 if (curv*Bz <= 0.0) {
489 if((phiHigh>0 && phiLow<0)){
491 }
else if((phiHigh<0 && phiLow>0)){
495 double lowFloat = nCell /
Constants::twoPi * (phiLow - layer->phiOffset()) + 0.5;
496 double highFloat = nCell /
Constants::twoPi * (phiHigh - layer->phiOffset()) + 0.5;
497 wireLow = (lowFloat >= 0.0) ?
int(lowFloat) : int(floor(lowFloat));
498 wireHigh = (highFloat >= 0.0) ?
int(highFloat) : int(floor(highFloat));
501 std::cout <<
" wireLow "<<wireLow <<
" wireHigh "<<wireHigh <<
" phiLow "<<phiLow*180./
Constants::pi <<
" phiHigh "<<phiHigh*180./
Constants::pi << std::endl;
507 if(wireLow>tempN/2. && wireHigh<tempN/2.){
509 tempDiff = wireHigh+tempN - wireLow +1;
512 tempDiff = wireHigh - wireLow +1;
516 if(wireLow>wireHigh) wireLow -= nCell;
518 for (
int thisWire = wireLow; thisWire <= wireHigh; thisWire++) {
520 thisHit = map->
hitWire(layer->layNum(), corrWire);
523 if(thisHit != 0) {cout<<endl<<
"test hit "; thisHit->
print(std::cout);}
524 else std::cout << endl<<
"test hit ("<<layer->layNum()<<
","<<corrWire<<
")"<< std::endl;
529 double driftDist = 0.;
532 double resid = 0., predDrift = 0.;
535 double mcTkId = -9999;
537 delx = -d0 * sinPhi0 - layer->xWire(corrWire);
538 dely = d0 * cosPhi0 - layer->yWire(corrWire);
539 predDrift = cosPhi0 * dely - sinPhi0 * delx +
540 curv * (delx * delx + dely * dely);
541 if(6==
tkParam.
lPrint) cout<<
"No hit. predDrift="<<predDrift<<endl;
553 if (alink == 0 || pickAm) {
554 if ((!tkStatus->
is2d()) && layer->view() != 0){
557 double rw = layer->rMid();
558 double alpha = acos(1 - rw*rw/(2*rc*rc));
560 if(fabs(1 - rw*rw/(2*rc*rc))<1) fltLen = rc *
alpha;
561 z = par.
z0() + fltLen* par.
tanDip();
563 double x = layer->getWire(corrWire)->xWireDC(z);
564 double y = layer->getWire(corrWire)->yWireDC(z);
565 delx = -d0 * sinPhi0 -
x;
566 dely = d0 * cosPhi0 - y;
569 delx = -d0 * sinPhi0 - thisHit->
x();
570 dely = d0 * cosPhi0 - thisHit->
y();
573 predDrift = cosPhi0 * dely - sinPhi0 * delx +
574 curv * (delx * delx + dely * dely);
577 ambig = (predDrift >= 0) ? 1 : -1;
578 if (hasCurled) ambig = -ambig;
579 double entranceAngle=0.;
580 driftDist = thisHit->
driftDist(tof+bunchTime,ambig,entranceAngle,0.,z);
583 resid = ambig * fabs(driftDist) - predDrift;
584 aresid = fabs(resid);
588 ambig = alink->
ambig();
595 double zGuess = par.
z0() + layer->rMid() * par.
tanDip();
596 double phiDCz = layer->getWire(corrWire)->phiDC(zGuess);
597 BesAngle phiDCzMax(phiDCz + deltaPhiCellWidth);
598 BesAngle phiDCzMin(phiDCz - deltaPhiCellWidth);
602 if (thisHit != 0 &&alink==0) {
603 double entranceAngle = 0.;
604 sigma = thisHit->
sigma(driftDist, ambig, entranceAngle, atan(par.
tanDip()), z);
611 if((phiDCzMin-phiExit>0) || (phiDCzMax-phiEnter<0))
m_pickPhizOk[t_iHit] = 0;
614 if((phiDCzMin-phiEnter>0) || (phiDCzMax-phiExit<0))
m_pickPhizOk[t_iHit] = 0;
622 double t_phiLowCut=-999.;
623 double t_phiHighCut= -999.;
624 if(t_phiHit > -998.){
625 t_phiLowCut = (phiEnter-t_phiHit)*rEnter;
626 t_phiHighCut = (phiExit-t_phiHit)*rExit;
639 if((phiDCzMin-phiExit>0) || (phiDCzMax-phiEnter<0)) {
640 if(6==
tkParam.
lPrint){ std::cout<<
" CUT by phiDCz not in phi En Ex range, curv>=0"<<std::endl; }
645 if((phiDCzMin-phiEnter>0) || (phiDCzMax-phiExit<0)) {
646 if(6==
tkParam.
lPrint){ std::cout<<
" CUT by phiDCz not in phi En Ex range, curv<0"<<std::endl; }
653 if (ambig != 0 && fabs(predDrift) > goodDriftCut){
654 if(6==
tkParam.
lPrint){cout<<
" predDrift "<<predDrift<<
">goodDriftCut "<<goodDriftCut<<endl;}
659 if (ambig == 0 && fabs(predDrift) > goodDriftCut){
661 cout<<
" ambig==0 && |predDirft| "<<fabs(predDrift) <<
"> goodDriftCut "<< goodDriftCut<<endl;
662 cout<<
" No good hit, but track near cell-edge " << endl;
672 double entranceAngle = 0.;
673 double sigma = thisHit->
sigma(driftDist, ambig, entranceAngle, atan(par.
tanDip()), z);
682 if (alink == 0 && (aresid <= residCut) ) {
684 cout <<
" (2) New hit found " << endl;
698 if(6==
tkParam.
lPrint) std::cout<<
" thisHit used, setUsability false " << std::endl;
701 double flt = layer->rMid();
703 flt += 0.000001 * (thisHit->
x() + thisHit->
y());
707 std::cout<<
" Append Hot " << std::endl;
713 std::cout<<
"Exist hot found"<<std::endl;
714 }
else if(aresid > residCut){
715 thisHit->
print(std::cout);
716 std::cout<<
" Drop hit. aresid "<<aresid<<
">residCut " <<residCut<<
" nSig "<<aresid/sigma<<
" nSigCut "<<(
tkParam.
maxActiveSigma*factor)<<
" factor "<<factor<<
" maxActiveSigma "<<
tkParam.
maxActiveSigma<<
" tanDip "<<par.
tanDip()<<std::endl;
720 if (!localHistory.member(
const_cast<MdcHitOnTrack*
>(alink))) {
724 if(6==
tkParam.
lPrint) std::cout<<
" nFound="<<nFound<<
" nCand "<<nCand<<std::endl;
725 if (layer == firstInputLayer && firstInputHit < 0) {
726 firstInputHit = nCand;
729 if(6==
tkParam.
lPrint) std::cout <<
"ErrMsg(warning) "<<
"would have inserted identical HOT "
730 "twice in history buffer" << std::endl;
735 else if (ambig == 0 && reachedLastInput) {
740 if (nCand < 8) last = nCand;
741 for (
int i = 0; i < last; i++) {
742 int j = nCand - 1 - i;
743 if (localHistory[j] != 0) {
747 if (i == 2 && nSuccess >= 2) lContinue =
true;
748 if (i == 4 && nSuccess >= 3) lContinue =
true;
749 if (i == 7 && nSuccess >= 5) lContinue =
true;
750 if(6==
tkParam.
lPrint) cout <<i<<
" (3) No hit found; if beyond known good region " << endl;
752 if(6==
tkParam.
lPrint) std::cout<<
" pickHits break by lContinue. i="<<i<<
" nSuccess="<<nSuccess<< std::endl;
757 if(6==
tkParam.
lPrint) cout <<
" (3) No hit found; if beyond known good region " << endl;
763 localHistory.append(0);
768 if (ambig != 0 && reachedLastInput) {
789 if (!lContinue && reachedLastInput) {
796 bool lContinue =
true;
797 for (
int ihit = firstInputHit; ihit >= 0; ihit--) {
798 if (localHistory[ihit] != 0) {
801 const MdcHitOnTrack *mdcHit = localHistory[ihit]->mdcHitOnTrack();
811 std::cout <<
" gap found; delete hits. ";
813 if (!localHistory[ihit]->isUsable()) {
815 cout <<
"about to delete hit for unusable HOT:" << endl;
816 localHistory[ihit]->print(std::cout);
818 hitList->
removeHit(localHistory[ihit]->hit());
821 cout <<
" current contents of localHistory: "
822 <<localHistory.length()<<
"hot" << endl;
830 else if (localHistory[ihit] == 0) {
831 if(6==
tkParam.
lPrint){ cout <<
" localHistory= 0 " << endl; }
835 if (nCand < 8) last = nCand;
836 for (
int i = 0; i < last; i++) {
837 int j = ihit + 1 + i;
838 if (localHistory[j] != 0) nSuccess++;
839 if (i == 2 && nSuccess >= 2) lContinue =
true;
840 if (i == 4 && nSuccess >= 3) lContinue =
true;
842 if (lContinue)
break;
850 if(6==
tkParam.
lPrint){ cout <<
" localHistory= 0 " << endl; }
853 cout <<
"After pickHits found " << nFound <<
" hit(s)"<< endl;
855 std::cout<< std::endl;
874 assert (hitList != 0);
879 fitResult = hitList->
fit();
882 cout <<
"Helix fit failure: " << endl;
883 fitResult.
print(cout);
887 if (!fitResult.
success())
return 0;
889 bool lcurler(fabs(tkFit->
helix(0).
omega()) > 3.4);
890 pickHits(&mdcTrk, map, gm, lcurler);
892 if(3==
tkParam.
lPrint) std::cout<< __FILE__ <<
" " << __LINE__ <<
" nHit after pickHit "<<hitList->
nHit() <<std::endl;
897 fitResult = hitList->
fit();
900 cout <<
"Second helix fit failed: " << endl;
901 fitResult.
print(std::cout);
905 if(3==
tkParam.
lPrint){ cout <<
"Final fit: " << endl << trk << endl; }
908 double chisqperDOF = 0.;
912 chisqperDOF = tkFit->
chisq() / nDOF;
914 chisqperDOF = tkFit->
chisq();
923 std::cout<<
" goodMatch=0; chi2/dof "<<chisqperDOF <<
" >?maxChisq"<<
tkParam.
maxChisq
938 if(3 <= m_debug){std::cout<<
" ***** finishHelix success!"<< std::endl;}
942 if(3 <= m_debug){std::cout<<
" ***** finishHelix failure!"<< std::endl;}
956 std::cout <<
" finishCircle "<< std::endl;
957 trk.
print(std::cout);
964 assert (hitList != 0);
973 cout <<
"First circle fit failed: " << endl;
974 fitResult.
print(std::cout);
982 int nDOF = tkFit->
nActive() - 3;
984 chisqperDOF = tkFit->
chisq() / nDOF;
986 chisqperDOF = tkFit->
chisq();
993 std::cout<<__FILE__<<
" "<<__LINE__
994 <<
" success "<<success
996 <<
" nAct "<<tkFit->
nActive()<<
">=3 "
1000 bool lcurler(fabs(tkFit->
helix(0).
omega()) > 3.4);
1001 pickHits(&mdcTrk, map, gm, lcurler);
1004 std::cout<< __FILE__ <<
" " << __LINE__ <<
" nHit after pickHit "<<hitList->
nHit() <<std::endl;
1009 fitResult = hitList->
fit();
1012 cout <<
"Second circle fit failed: " << endl;
1013 fitResult.
print(std::cout);
1018 cout <<
"Final fit: " << endl << trk << endl;
1024 chisqperDOF = tkFit->
chisq() / nDOF;
1027 chisqperDOF = tkFit->
chisq();
1034 cout <<
"nActive "<<tkFit->
nActive()<<
">= 3"<< endl;
1045 std::cout <<
"ax fill: "<<std::endl;
1052 std::cout << std::endl<<
"Dump seed segment goodOnly="<<goodOnly<<
" ";
1054 std::cout<< std::endl;
1058 if (NULL == trialTrack)
return;
1059 std::cout<<std::endl<<
"-------------------------------------"<<std::endl;
1060 std::cout<<
"Track and hitList after AxCombine "<<std::endl;
1064 cout <<
"(" <<((
MdcHit*)(hotIter->hit()))->layernumber()
1065 <<
","<<((
MdcHit*)(hotIter->hit()))->wirenumber()
1066 <<
":"<<hotIter->isActive()<<
") ";
1069 std::cout << std::endl;
1070 std::cout<<
"-------------------------------------"<<std::endl;
1074 if(NULL == trialTrack)
return;
1087 std::cout<<std::endl<<
"-------------------------------------"<<std::endl;
1088 std::cout <<
"Track and hitList after finishCircle" << std::endl;
1092 cout <<
"(" <<((
MdcHit*)(hotIter->hit()))->layernumber()
1093 <<
","<<((
MdcHit*)(hotIter->hit()))->wirenumber()
1094 <<
":"<<hotIter->isActive()<<
") ";
1098 std::cout<<
"-------------------------------------"<<std::endl;
1106 std::cout <<std::endl<<
" Dump d0() " << par.
d0()<<
"\n";
1111 std::cout <<
"Plot segs after st fillWithSegs " << std::endl;
1117 std::cout<<std::endl<<
"-------------------------------------"<<std::endl;
1118 std::cout<<
"Track and hitList after StCombine "<<std::endl;
1123 int layer = ((
MdcHit*)(hotIter->hit()))->layernumber();
1124 if( (layer%4) ==0 ) {
if( tmplay != layer ) cout<<endl; }
1125 cout <<
"(" <<layer <<
","<<((
MdcHit*)(hotIter->hit()))->wirenumber()
1126 <<
" act:"<<hotIter->isActive() <<
" lr:"<<hotIter->ambig() <<
") ";
1131 std::cout<<
"-------------------------------------"<<std::endl;
1134 std::cout<< std::endl<<
"-------------------------------------"<<std::endl;
1135 std::cout<<
"Track and hitList after finishHelix " << std::endl;
1140 int layer = ((
MdcHit*)(hotIter->hit()))->layernumber();
1141 if( (layer%4) ==0 ) {
if( tmplay != layer ) cout<<endl; }
1142 cout <<
"(" <<layer <<
","<<((
MdcHit*)(hotIter->hit()))->wirenumber()
1143 <<
":"<<hotIter->isActive() <<
") ";
1148 std::cout<<
"-------------------------------------"<<std::endl;
1153 double tdr_wire[43];
1154 for(
int i=0; i<43; i++){tdr[i]=9999.;}
1165 if (
dt < tdr[layer]) {
1167 tdr_wire[layer] = wire;
1172 std::cout<<
" tdr wire ";
1173 for(
int i=0;i<43;i++){
1174 std::cout<<i<<
" "<<tdr[i]<<
" "<<tdr_wire<<
" ";
1176 std::cout<<
" "<< std::endl;
1180 int layer = hotIter->mdcHitOnTrack()->mdcHit()->layernumber();
1181 int wire = hotIter->mdcHitOnTrack()->mdcHit()->wirenumber();
1182 double dt = hotIter->mdcHitOnTrack()->mdcHit()->driftTime(0.,0.);
1184 if ((tdr[layer] <9998.) && (tdr_wire[layer]!=wire)){
1188 std::cout<<__FILE__<<
" inactive "<< layer<<
" "<<wire<<
" dt "<<
dt << std::endl;
double sin(const BesAngle a)
double cos(const BesAngle a)
double abs(const EvtComplex &c)
NTuple::Array< long > m_pickIs2D
NTuple::Array< double > m_pickPt
NTuple::Item< long > m_pickLayer
NTuple::Array< long > m_pickMcTk
AIDA::IHistogram1D * g_fitNAct
AIDA::IHistogram1D * g_pickHitWire
NTuple::Item< long > m_pickNCellWithDigi
NTuple::Array< double > m_pickPhiLowCut
double haveDigiDrift[43][288]
NTuple::Array< double > m_pickDriftCut
NTuple::Array< double > m_pickCurv
NTuple::Array< double > m_pickDrift
NTuple::Array< double > m_pickResid
NTuple::Array< int > m_pickPhizOk
AIDA::IHistogram1D * g_cirTkChi2
NTuple::Array< double > m_pickSigma
AIDA::IHistogram1D * g_3dTkChi2
NTuple::Array< long > m_pickWire
NTuple::Tuple * m_tuplePick
NTuple::Array< double > m_pickDriftTruth
NTuple::Array< double > m_pickZ
NTuple::Array< double > m_pickPredDrift
NTuple::Item< long > m_pickNCell
NTuple::Array< double > m_pickPhiHighCut
NTuple::Item< long > m_pickIs2D
NTuple::Array< double > m_pickPt
NTuple::Item< long > m_pickLayer
NTuple::Array< long > m_pickMcTk
AIDA::IHistogram1D * g_fitNAct
AIDA::IHistogram1D * g_pickHitWire
NTuple::Item< long > m_pickNCellWithDigi
NTuple::Array< double > m_pickPhiLowCut
double haveDigiDrift[43][288]
NTuple::Array< double > m_pickDriftCut
NTuple::Array< double > m_pickCurv
NTuple::Array< double > m_pickDrift
NTuple::Array< double > m_pickResid
NTuple::Array< int > m_pickPhizOk
AIDA::IHistogram1D * g_cirTkChi2
NTuple::Array< double > m_pickSigma
AIDA::IHistogram1D * g_3dTkChi2
NTuple::Array< long > m_pickWire
NTuple::Tuple * m_tuplePick
NTuple::Array< double > m_pickDriftTruth
NTuple::Array< double > m_pickZ
NTuple::Array< double > m_pickPredDrift
NTuple::Item< long > m_pickNCell
NTuple::Array< double > m_pickPhiHighCut
static const double twoPi
static const int maxCell[43]
static const double radToDegrees
static const double epsilon
const MdcLayer * prevLayer(int lay) const
const MdcLayer * lastLayer() const
const MdcLayer * firstLayer() const
const MdcLayer * nextLayer(int lay) const
MdcHit * hitWire(int lay, int wire) const
virtual const MdcHit * mdcHit() const
const MdcLayer * layer() const
const MdcDigi * digi() const
unsigned layernumber() const
unsigned wirenumber() const
void print(std::ostream &o) const
double driftTime(double tof, double z) const
double sigma(double, int, double, double, double) const
double driftDist(double, int, double, double, double) const
const MdcLayer * layer() const
void fillWithSegs(const MdcSegList *inSegs)
void fillWithSegs(const MdcSegList *inSegs, const MdcTrack *axialTrack)
int combineSegs(MdcTrack *&, MdcSeg *seed, TrkContext &, double trackT0, double maxSegChisqO, int combineByFitHits=0)
MdcSeg * getSeed(int iview, int goodOnly)
void resetSeed(const MdcDetector *gm)
MdcSegInfo * info() const
int createFromSegs(MdcSegList *segs, const MdcHitMap *, const MdcDetector *, TrkContext &, double bunchTime)
void dumpHelix(const MdcTrack *)
void dumpCircle(const MdcTrack *)
void dropMultiHotInLayer(const MdcTrack *tk)
MdcTrackList(const MdcTrackParams &tkPar)
int finishHelix(MdcTrack &track, const MdcHitMap *, const MdcDetector *)
int pickHits(MdcTrack *, const MdcHitMap *, const MdcDetector *, bool pickAmb=true)
void dumpAxFill(const MdcTrack *)
void dumpD0(const TrkExchangePar &)
void dumpAxCombine(const MdcTrack *)
void dumpSeed(const MdcSeg *seed, bool goodOnly)
int finishCircle(MdcTrack &track, const MdcHitMap *, const MdcDetector *)
void dumpStCombine(const MdcTrack *)
void setFirstLayer(const MdcLayer *l)
int projectToR(double radius, BesAngle &phiIntersect, int lCurl=0) const
void setHasCurled(bool c=true)
const MdcLayer * firstLayer() const
const MdcLayer * lastLayer() const
void setLastLayer(const MdcLayer *l)
int getTrackIndex() const
virtual BesPointErr positionErr(double fltL) const =0
virtual double pt(double fltL=0.) const =0
virtual double chisq() const =0
void print(std::ostream &ostr) const
virtual void addHistory(const TrkErrCode &status, const char *modulename)
virtual int nActive() const =0
virtual TrkExchangePar helix(double fltL) const =0
const TrkHitOnTrk * getHitOnTrack(const TrkRecoTrk *trk) const
hot_iterator begin() const
TrkHitOnTrk * appendHot(const TrkHitOnTrk *theHot)
const TrkHotList & hotList() const
bool removeHit(const TrkFundHit *theHit)
void setActivity(bool turnOn)
void setUsability(int usability)
hot_iterator begin() const
void print(std::ostream &o) const
void printAll(std::ostream &o) const
virtual void printAll(std::ostream &) const
const BField & bField() const
virtual void print(std::ostream &) const
const TrkFit * fitResult() const
const TrkFitStatus * status() const
bool setFlipAndDrop(TrkRecoTrk &, bool allowFlips, bool allowDrops) const
int mdcWrapWire(int wireIn, int nCell)