16#include "MdcGeom/Constants.h"
17#include "MdcGeom/BesAngle.h"
18#include "CLHEP/Alist/AList.h"
19#include "MdcData/MdcRecoHitOnTrack.h"
20#include "MdcRawEvent/MdcDigi.h"
21#include "MdcData/MdcHitMap.h"
22#include "MdcData/MdcHit.h"
23#include "MdcGeom/MdcDetector.h"
24#include "MdcTrkRecon/MdcSeg.h"
25#include "MdcTrkRecon/MdcSegList.h"
26#include "MdcTrkRecon/MdcTrackList.h"
27#include "MdcTrkRecon/mdcWrapWire.h"
28#include "MdcTrkRecon/MdcTrackParams.h"
29#include "MdcTrkRecon/MdcSegGrouperSt.h"
30#include "MdcTrkRecon/MdcSegGrouperAx.h"
31#include "MdcTrkRecon/MdcSegInfo.h"
32#include "MdcTrkRecon/MdcSegInfoAxialO.h"
33#include "MdcTrkRecon/MdcTrack.h"
34#include "MdcTrkRecon/GmsList.h"
35#include "TrkBase/TrkRecoTrk.h"
36#include "TrkBase/TrkHitOnTrk.h"
37#include "TrkBase/TrkHotList.h"
38#include "TrkBase/TrkFit.h"
39#include "TrkBase/TrkFitStatus.h"
40#include "TrkBase/TrkExchangePar.h"
41#include "TrkBase/TrkErrCode.h"
42#include "TrkFitter/TrkHelixMaker.h"
43#include "TrkFitter/TrkCircleMaker.h"
44#include "MdcGeom/Constants.h"
45#include "BField/BField.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>
119#ifdef MDCPATREC_TIMETEST
120 TAU_PROFILE_TIMER(timer8,
"fill ax seg",
"int ()", TAU_DEFAULT);
121 TAU_PROFILE_START(timer8);
127#ifdef MDCPATREC_TIMETEST
128 TAU_PROFILE_STOP(timer8);
131 bool goodOnly =
true;
132 bool useBad = (segs->
count() < 400);
138 seed = segs->
getSeed(0,goodOnly);
139 if (seed == 0 && goodOnly && useBad) {
144 else if (seed == 0 && (!goodOnly || !useBad)) {
148 if (3 == m_debug)
dumpSeed(seed, goodOnly);
156#ifdef MDCPATREC_TIMETEST
157 TAU_PROFILE_TIMER(timer3,
"combine ax seg",
"int ()", TAU_DEFAULT);
158 TAU_PROFILE_START(timer3);
160 int success = origSegs.
combineSegs(trialTrack, seed, context, bunchTime,
162#ifdef MDCPATREC_TIMETEST
163 TAU_PROFILE_STOP(timer3);
168 cout<<
" ***** Ax.combineSegs success? " << success<<
"\n";
171 if (!success)
continue;
175#ifdef MDCPATREC_TIMETEST
176 TAU_PROFILE_TIMER(timer4,
"circle fitting",
"int ()", TAU_DEFAULT);
177 TAU_PROFILE_START(timer4);
180#ifdef MDCPATREC_TIMETEST
181 TAU_PROFILE_STOP(timer4);
185 cout<<
"finishCircle success? " << success<<
"\n";
189 if (!success)
continue;
212 if (3 <= m_debug) std::cout <<
" *** End r-phi track-finding "<<std::endl;
215#ifdef MDCPATREC_TIMETEST
216 TAU_PROFILE_TIMER(timer5,
"fill st seg",
"int ()", TAU_DEFAULT);
217 TAU_PROFILE_START(timer5);
220#ifdef MDCPATREC_TIMETEST
221 TAU_PROFILE_STOP(timer5);
225 std::cout<<std::endl<<
"----------------------------------------"<< std::endl;
226 std::cout<<
" Segment list after St.fillWithSegs "<< std::endl;
230#ifdef MDCPATREC_TIMETEST
231 TAU_PROFILE_TIMER(timer6,
"combine st seg",
"int ()", TAU_DEFAULT);
232 TAU_PROFILE_START(timer6);
234 success = stereoSegs.
combineSegs(trialTrack, 0, context, bunchTime,
236#ifdef MDCPATREC_TIMETEST
237 TAU_PROFILE_STOP(timer6);
241 cout<<
" ***** St.combineSegs success? " << success<<
"\n";
248#ifdef MDCPATREC_TIMETEST
249 TAU_PROFILE_TIMER(timer7,
"helix fitting",
"int ()", TAU_DEFAULT);
250 TAU_PROFILE_START(timer7);
253#ifdef MDCPATREC_TIMETEST
254 TAU_PROFILE_STOP(timer7);
261 if (!success)
continue;
268 <<
" Killing track by d0 after 3d fit:" <<d0par<<
">"<<
m_d0Cut << endl;}
275 <<
" Killing track by z0:" <<z0par<<
">"<<
m_z0Cut << endl;}
285 if (3 == m_debug) std::cout <<
" ***** End one track-finding *****"<<std::endl;
309 cout <<
"Before pickHits";
310 if (is2d) cout<<
" 2d:";
318 double rEnter, rExit;
320 int wireLow, wireHigh;
321 double phiLow, phiHigh;
329 int firstInputHit = -1;
340 assert (tkStatus != 0);
342 assert (hitList != 0);
344 double d0 = par.
d0();
345 double curv = 0.5 * par.
omega();
346 double sinPhi0 =
sin(par.
phi0());
347 double cosPhi0 =
cos(par.
phi0());
351 double absd0 = fabs(d0);
354 bool willCurl =
false;
355 double rCurl = fabs(d0 + 1./curv);
363 bool reachedLastInput =
false;
364 bool hasCurled =
false;
367 bool isHotOnLayer[43];
369 for(
int ii=0; ii<43; ii++) isHotOnLayer[ii]=
false;
371 isHotOnLayer[ihit->layerNumber()]=
true;
378 layer = ((!lCurl) ? ( (hasCurled) ? gm->
prevLayer(layer) :
386 if (tkStatus->
is2d() && layer->view() != 0)
continue;
392 bool lContinue =
true;
394 if (layer == lastInputLayer) reachedLastInput =
true;
399 rEnter = layer->rOut();
405 rExit = layer->rIn();
406 if (rExit < rMin) rExit = rMin;
407 if (rEnter > rMax) rEnter = rMax;
412 rEnter = layer->rIn();
413 rExit = layer->rOut();
416 if (rExit < rMin)
continue;
435 if (rExit > rMax) rExit = rMax;
439 nCell = layer->nWires();
444 double deltaPhiCellWidth = 0.5 * (cellWidth * M_SQRT2)/layer->rMid();
448 int ierror = trk->
projectToR(rEnter, phiTemp, hasCurled);
449 phiEnter = phiTemp.
posRad();
452 <<
"Error in MdcTrackList::pickHits projection, ierror " <<ierror<< std::endl;
455 ierror = trk->
projectToR(rExit, phiTemp, hasCurled);
456 phiExit = phiTemp.
posRad();
459 <<
"Error in MdcTrackList::pickHits projection, ierror "<<ierror << std::endl;
465 std::cout<< endl<<
"--pickHit of layer "<<layer->layNum()<<
"--"<<std::endl;
466 std::cout<<
" track phiEnter "<< phiEnter.
deg()<<
" phiExit "<<phiExit.
deg()<<
" degree"<< std::endl;
469 std::cout<<
" goodDriftCut "<< goodDriftCut <<
"=sqrt(2)*0.5*"<<cellWidth<<
"+"<<
tkParam.
pickHitMargin<< std::endl;
475 double t_phiHit = -999.;
476 if (curv*Bz <= 0.0) {
490 if((phiHigh>0 && phiLow<0)){
492 }
else if((phiHigh<0 && phiLow>0)){
496 double lowFloat = nCell /
Constants::twoPi * (phiLow - layer->phiOffset()) + 0.5;
497 double highFloat = nCell /
Constants::twoPi * (phiHigh - layer->phiOffset()) + 0.5;
498 wireLow = (lowFloat >= 0.0) ?
int(lowFloat) : int(floor(lowFloat));
499 wireHigh = (highFloat >= 0.0) ?
int(highFloat) : int(floor(highFloat));
502 std::cout <<
" wireLow "<<wireLow <<
" wireHigh "<<wireHigh <<
" phiLow "<<phiLow*180./
Constants::pi <<
" phiHigh "<<phiHigh*180./
Constants::pi << std::endl;
508 if(wireLow>tempN/2. && wireHigh<tempN/2.){
510 tempDiff = wireHigh+tempN - wireLow +1;
513 tempDiff = wireHigh - wireLow +1;
517 if(wireLow>wireHigh) wireLow -= nCell;
519 for (
int thisWire = wireLow; thisWire <= wireHigh; thisWire++) {
521 thisHit = map->
hitWire(layer->layNum(), corrWire);
524 if(thisHit != 0) {cout<<endl<<
"test hit "; thisHit->
print(std::cout);}
525 else std::cout << endl<<
"test hit ("<<layer->layNum()<<
","<<corrWire<<
")"<< std::endl;
530 double driftDist = 0.;
533 double resid = 0., predDrift = 0.;
536 double mcTkId = -9999;
538 delx = -d0 * sinPhi0 - layer->xWire(corrWire);
539 dely = d0 * cosPhi0 - layer->yWire(corrWire);
540 predDrift = cosPhi0 * dely - sinPhi0 * delx +
541 curv * (delx * delx + dely * dely);
542 if(6==
tkParam.
lPrint) cout<<
"No hit. predDrift="<<predDrift<<endl;
554 if (alink == 0 || pickAm) {
555 if ((!tkStatus->
is2d()) && layer->view() != 0){
558 double rw = layer->rMid();
559 double alpha = acos(1 - rw*rw/(2*rc*rc));
561 if(fabs(1 - rw*rw/(2*rc*rc))<1) fltLen = rc *
alpha;
562 z = par.
z0() + fltLen* par.
tanDip();
564 double x = layer->getWire(corrWire)->xWireDC(z);
565 double y = layer->getWire(corrWire)->yWireDC(z);
566 delx = -d0 * sinPhi0 -
x;
567 dely = d0 * cosPhi0 - y;
570 delx = -d0 * sinPhi0 - thisHit->
x();
571 dely = d0 * cosPhi0 - thisHit->
y();
574 predDrift = cosPhi0 * dely - sinPhi0 * delx +
575 curv * (delx * delx + dely * dely);
578 ambig = (predDrift >= 0) ? 1 : -1;
579 if (hasCurled) ambig = -ambig;
580 double entranceAngle=0.;
581 driftDist = thisHit->
driftDist(tof+bunchTime,ambig,entranceAngle,0.,z);
584 resid = ambig * fabs(driftDist) - predDrift;
585 aresid = fabs(resid);
589 ambig = alink->
ambig();
596 double zGuess = par.
z0() + layer->rMid() * par.
tanDip();
597 double phiDCz = layer->getWire(corrWire)->phiDC(zGuess);
598 BesAngle phiDCzMax(phiDCz + deltaPhiCellWidth);
599 BesAngle phiDCzMin(phiDCz - deltaPhiCellWidth);
603 if (thisHit != 0 &&alink==0) {
604 double entranceAngle = 0.;
605 sigma = thisHit->
sigma(driftDist, ambig, entranceAngle, atan(par.
tanDip()), z);
612 if((phiDCzMin-phiExit>0) || (phiDCzMax-phiEnter<0))
m_pickPhizOk[t_iHit] = 0;
615 if((phiDCzMin-phiEnter>0) || (phiDCzMax-phiExit<0))
m_pickPhizOk[t_iHit] = 0;
623 double t_phiLowCut=-999.;
624 double t_phiHighCut= -999.;
625 if(t_phiHit > -998.){
626 t_phiLowCut = (phiEnter-t_phiHit)*rEnter;
627 t_phiHighCut = (phiExit-t_phiHit)*rExit;
640 if((phiDCzMin-phiExit>0) || (phiDCzMax-phiEnter<0)) {
641 if(6==
tkParam.
lPrint){ std::cout<<
" CUT by phiDCz not in phi En Ex range, curv>=0"<<std::endl; }
646 if((phiDCzMin-phiEnter>0) || (phiDCzMax-phiExit<0)) {
647 if(6==
tkParam.
lPrint){ std::cout<<
" CUT by phiDCz not in phi En Ex range, curv<0"<<std::endl; }
654 if (ambig != 0 && fabs(predDrift) > goodDriftCut){
655 if(6==
tkParam.
lPrint){cout<<
" predDrift "<<predDrift<<
">goodDriftCut "<<goodDriftCut<<endl;}
660 if (ambig == 0 && fabs(predDrift) > goodDriftCut){
662 cout<<
" ambig==0 && |predDirft| "<<fabs(predDrift) <<
"> goodDriftCut "<< goodDriftCut<<endl;
663 cout<<
" No good hit, but track near cell-edge " << endl;
673 double entranceAngle = 0.;
674 double sigma = thisHit->
sigma(driftDist, ambig, entranceAngle, atan(par.
tanDip()), z);
683 if (alink == 0 && (aresid <= residCut) ) {
685 cout <<
" (2) New hit found " << endl;
699 if(6==
tkParam.
lPrint) std::cout<<
" thisHit used, setUsability false " << std::endl;
702 double flt = layer->rMid();
704 flt += 0.000001 * (thisHit->
x() + thisHit->
y());
708 std::cout<<
" Append Hot " << std::endl;
714 std::cout<<
"Exist hot found"<<std::endl;
715 }
else if(aresid > residCut){
716 thisHit->
print(std::cout);
717 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;
721 if (!localHistory.member(
const_cast<MdcHitOnTrack*
>(alink))) {
725 if(6==
tkParam.
lPrint) std::cout<<
" nFound="<<nFound<<
" nCand "<<nCand<<std::endl;
726 if (layer == firstInputLayer && firstInputHit < 0) {
727 firstInputHit = nCand;
730 if(6==
tkParam.
lPrint) std::cout <<
"ErrMsg(warning) "<<
"would have inserted identical HOT "
731 "twice in history buffer" << std::endl;
736 else if (ambig == 0 && reachedLastInput) {
741 if (nCand < 8) last = nCand;
742 for (
int i = 0; i < last; i++) {
743 int j = nCand - 1 - i;
744 if (localHistory[j] != 0) {
748 if (i == 2 && nSuccess >= 2) lContinue =
true;
749 if (i == 4 && nSuccess >= 3) lContinue =
true;
750 if (i == 7 && nSuccess >= 5) lContinue =
true;
751 if(6==
tkParam.
lPrint) cout <<i<<
" (3) No hit found; if beyond known good region " << endl;
753 if(6==
tkParam.
lPrint) std::cout<<
" pickHits break by lContinue. i="<<i<<
" nSuccess="<<nSuccess<< std::endl;
758 if(6==
tkParam.
lPrint) cout <<
" (3) No hit found; if beyond known good region " << endl;
764 localHistory.append(0);
769 if (ambig != 0 && reachedLastInput) {
790 if (!lContinue && reachedLastInput) {
797 bool lContinue =
true;
798 for (
int ihit = firstInputHit; ihit >= 0; ihit--) {
799 if (localHistory[ihit] != 0) {
802 const MdcHitOnTrack *mdcHit = localHistory[ihit]->mdcHitOnTrack();
812 std::cout <<
" gap found; delete hits. ";
814 if (!localHistory[ihit]->isUsable()) {
816 cout <<
"about to delete hit for unusable HOT:" << endl;
817 localHistory[ihit]->print(std::cout);
819 hitList->
removeHit(localHistory[ihit]->hit());
822 cout <<
" current contents of localHistory: "
823 <<localHistory.length()<<
"hot" << endl;
831 else if (localHistory[ihit] == 0) {
832 if(6==
tkParam.
lPrint){ cout <<
" localHistory= 0 " << endl; }
836 if (nCand < 8) last = nCand;
837 for (
int i = 0; i < last; i++) {
838 int j = ihit + 1 + i;
839 if (localHistory[j] != 0) nSuccess++;
840 if (i == 2 && nSuccess >= 2) lContinue =
true;
841 if (i == 4 && nSuccess >= 3) lContinue =
true;
843 if (lContinue)
break;
851 if(6==
tkParam.
lPrint){ cout <<
" localHistory= 0 " << endl; }
854 cout <<
"After pickHits found " << nFound <<
" hit(s)"<< endl;
856 std::cout<< std::endl;
875 assert (hitList != 0);
880 fitResult = hitList->
fit();
883 cout <<
"Helix fit failure: " << endl;
884 fitResult.
print(cout);
888 if (!fitResult.
success())
return 0;
890 bool lcurler(fabs(tkFit->
helix(0).
omega()) > 3.4);
891 pickHits(&mdcTrk, map, gm, lcurler);
893 if(3==
tkParam.
lPrint) std::cout<< __FILE__ <<
" " << __LINE__ <<
" nHit after pickHit "<<hitList->
nHit() <<std::endl;
898 fitResult = hitList->
fit();
901 cout <<
"Second helix fit failed: " << endl;
902 fitResult.
print(std::cout);
906 if(3==
tkParam.
lPrint){ cout <<
"Final fit: " << endl << trk << endl; }
909 double chisqperDOF = 0.;
913 chisqperDOF = tkFit->
chisq() / nDOF;
915 chisqperDOF = tkFit->
chisq();
924 std::cout<<
" goodMatch=0; chi2/dof "<<chisqperDOF <<
" >?maxChisq"<<
tkParam.
maxChisq
939 if(3 <= m_debug){std::cout<<
" ***** finishHelix success!"<< std::endl;}
943 if(3 <= m_debug){std::cout<<
" ***** finishHelix failure!"<< std::endl;}
957 std::cout <<
" finishCircle "<< std::endl;
958 trk.
print(std::cout);
965 assert (hitList != 0);
974 cout <<
"First circle fit failed: " << endl;
975 fitResult.
print(std::cout);
983 int nDOF = tkFit->
nActive() - 3;
985 chisqperDOF = tkFit->
chisq() / nDOF;
987 chisqperDOF = tkFit->
chisq();
994 std::cout<<__FILE__<<
" "<<__LINE__
995 <<
" success "<<success
997 <<
" nAct "<<tkFit->
nActive()<<
">=3 "
1001 bool lcurler(fabs(tkFit->
helix(0).
omega()) > 3.4);
1002 pickHits(&mdcTrk, map, gm, lcurler);
1005 std::cout<< __FILE__ <<
" " << __LINE__ <<
" nHit after pickHit "<<hitList->
nHit() <<std::endl;
1010 fitResult = hitList->
fit();
1013 cout <<
"Second circle fit failed: " << endl;
1014 fitResult.
print(std::cout);
1019 cout <<
"Final fit: " << endl << trk << endl;
1025 chisqperDOF = tkFit->
chisq() / nDOF;
1028 chisqperDOF = tkFit->
chisq();
1035 cout <<
"nActive "<<tkFit->
nActive()<<
">= 3"<< endl;
1046 std::cout <<
"ax fill: "<<std::endl;
1053 std::cout << std::endl<<
"Dump seed segment goodOnly="<<goodOnly<<
" ";
1055 std::cout<< std::endl;
1059 if (NULL == trialTrack)
return;
1060 std::cout<<std::endl<<
"-------------------------------------"<<std::endl;
1061 std::cout<<
"Track and hitList after AxCombine "<<std::endl;
1065 cout <<
"(" <<((
MdcHit*)(hotIter->hit()))->layernumber()
1066 <<
","<<((
MdcHit*)(hotIter->hit()))->wirenumber()
1067 <<
":"<<hotIter->isActive()<<
") ";
1070 std::cout << std::endl;
1071 std::cout<<
"-------------------------------------"<<std::endl;
1075 if(NULL == trialTrack)
return;
1088 std::cout<<std::endl<<
"-------------------------------------"<<std::endl;
1089 std::cout <<
"Track and hitList after finishCircle" << std::endl;
1093 cout <<
"(" <<((
MdcHit*)(hotIter->hit()))->layernumber()
1094 <<
","<<((
MdcHit*)(hotIter->hit()))->wirenumber()
1095 <<
":"<<hotIter->isActive()<<
") ";
1099 std::cout<<
"-------------------------------------"<<std::endl;
1107 std::cout <<std::endl<<
" Dump d0() " << par.
d0()<<
"\n";
1112 std::cout <<
"Plot segs after st fillWithSegs " << std::endl;
1118 std::cout<<std::endl<<
"-------------------------------------"<<std::endl;
1119 std::cout<<
"Track and hitList after StCombine "<<std::endl;
1124 int layer = ((
MdcHit*)(hotIter->hit()))->layernumber();
1125 if( (layer%4) ==0 ) {
if( tmplay != layer ) cout<<endl; }
1126 cout <<
"(" <<layer <<
","<<((
MdcHit*)(hotIter->hit()))->wirenumber()
1127 <<
" act:"<<hotIter->isActive() <<
" lr:"<<hotIter->ambig() <<
") ";
1132 std::cout<<
"-------------------------------------"<<std::endl;
1135 std::cout<< std::endl<<
"-------------------------------------"<<std::endl;
1136 std::cout<<
"Track and hitList after finishHelix " << std::endl;
1141 int layer = ((
MdcHit*)(hotIter->hit()))->layernumber();
1142 if( (layer%4) ==0 ) {
if( tmplay != layer ) cout<<endl; }
1143 cout <<
"(" <<layer <<
","<<((
MdcHit*)(hotIter->hit()))->wirenumber()
1144 <<
":"<<hotIter->isActive() <<
") ";
1149 std::cout<<
"-------------------------------------"<<std::endl;
1154 double tdr_wire[43];
1155 for(
int i=0; i<43; i++){tdr[i]=9999.;}
1166 if (
dt < tdr[layer]) {
1168 tdr_wire[layer] = wire;
1173 std::cout<<
" tdr wire ";
1174 for(
int i=0;i<43;i++){
1175 std::cout<<i<<
" "<<tdr[i]<<
" "<<tdr_wire<<
" ";
1177 std::cout<<
" "<< std::endl;
1181 int layer = hotIter->mdcHitOnTrack()->mdcHit()->layernumber();
1182 int wire = hotIter->mdcHitOnTrack()->mdcHit()->wirenumber();
1183 double dt = hotIter->mdcHitOnTrack()->mdcHit()->driftTime(0.,0.);
1185 if ((tdr[layer] <9998.) && (tdr_wire[layer]!=wire)){
1189 std::cout<<__FILE__<<
" inactive "<< layer<<
" "<<wire<<
" dt "<<
dt << std::endl;
double sin(const BesAngle a)
double cos(const BesAngle a)
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
int mdcWrapWire(int wireIn, int nCell)
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)
void setNoInner(bool noInnerFlag)
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 print(std::ostream &) const
const BField & bField() const
const TrkFit * fitResult() const
virtual void printAll(std::ostream &) const
const TrkFitStatus * status() const
bool setFlipAndDrop(TrkRecoTrk &, bool allowFlips, bool allowDrops) const