17#include "MdcTrkRecon/MdcSegGrouperAx.h"
18#include "CLHEP/Alist/AList.h"
19#include "MdcData/MdcHit.h"
20#include "MdcGeom/BesAngle.h"
21#include "MdcGeom/MdcDetector.h"
22#include "MdcGeom/MdcSuperLayer.h"
23#include "MdcTrkRecon/GmsList.h"
24#include "MdcTrkRecon/MdcSeg.h"
25#include "MdcTrkRecon/MdcSegInfoAxialO.h"
26#include "MdcTrkRecon/MdcSegList.h"
27#include "MdcTrkRecon/MdcSegUsage.h"
28#include "MdcTrkRecon/MdcTrack.h"
29#include "MdcTrkRecon/mdcWrapAng.h"
30#include "TrkBase/TrkExchangePar.h"
37#include "GaudiKernel/NTuple.h"
67 for (
int j = 0; j <
nPly(); j++ ) {
isValid[j] = 0; }
74 std::cout << std::endl <<
"=====MdcSegGrouperAx::fillWithSegs=====" << std::endl;
77 for (
int isuper = 0; isuper <
_gm->nSuper(); isuper++ )
80 if ( inList->
count() == 0 )
continue;
95 for (
int iseg = 0; iseg < (int)
segList[isuper].length(); iseg++ )
99 segList[isuper].insert( inSeg, iseg );
103 if ( isInserted == 0 )
segList[isuper].append( inSeg );
128 if ( testSeg == 0 )
return 0;
140 double refPhi0 = refInfo->
phi0();
141 double testPhi0 = testInfo->
phi0();
142 double corrPhi0 =
mdcWrapAng( refPhi0, testPhi0 );
146 double refCurv = refInfo->
curv();
147 double testCurv = testInfo->
curv();
196 if ( refSeg->
testCombSegPt() > 0.4 && fabs( corrPhi0 - refPhi0 ) > 0.4 &&
201 std::cout << endl <<
" test " << std::endl;
202 std::cout <<
"seed seg: ";
204 std::cout << std::endl;
205 std::cout <<
"test seg: ";
207 std::cout << std::endl;
208 std::cout <<
" dPhi0 abnormal " << corrPhi0 - refPhi0 << std::endl;
215 std::cout << endl <<
" test " << std::endl;
216 std::cout <<
"seed seg: ";
218 std::cout << std::endl;
219 std::cout <<
"test seg: ";
221 std::cout << std::endl;
222 std::cout <<
" dPhi0 ok " << setprecision( 3 ) << corrPhi0 - refPhi0 << std::endl;
231 if ( fabs( corrPhi0 - refPhi0 ) > phi0Cut )
234 std::cout <<
" SKIP by dPhi0 " << fabs( corrPhi0 - refPhi0 ) <<
">" << phi0Cut
244 std::cout <<
" dphi " << setprecision( 3 ) << fabs( corrPhi0 - refPhi0 );
250 if ( fabs( refCurv - testCurv ) > curvCut )
253 std::cout <<
" SKIP by dCurv" << fabs( refCurv - testCurv ) <<
">" << curvCut
260 std::cout <<
" dCurv " << setprecision( 3 ) << fabs( refCurv - testCurv );
262 if ( 3 ==
_debug ) std::cout <<
" KEEP " << std::endl;
264 cout << resetiosflags( std::ios::floatfield );
283 for ( i = 0; i <
nDeep; i++ )
297 if ( seed != 0 ) seedSlay = seed->
superlayer();
301 thisSlay = thisSlay->next() )
303 bool noGoodYet =
true;
306 if ( thisSlay == seedSlay )
continue;
307 if ( thisSlay->whichView() != 0 )
continue;
312 if (
segList[islay - 1].length() != 0 )
317 std::cout << std::endl
318 <<
"--match axial seg by phi in slayer " << thisSlay->slayNum() <<
"--"
324 for (
int i = 0; i < (int)
segList[islay - 1].length(); i++ )
333 if ( noGoodYet )
firstGood[iply] = i + 1;
335 else if ( invalid > 0 )
339 for (
int j = i; j < (int)
segList[islay - 1].length(); j++ )
isValid[iply][j] =
false;
380 return new MdcTrack(
_gm->nSuper(), par, chisq, context, t0 );
double MdcTrkReconCut_combAxCurv
double MdcTrkReconCut_combAxPhi0
double MdcTrkReconCut_combAxPhi0Cut
double MdcTrkReconCut_combAxCurvCut
NTuple::Item< double > g_combAxMcPt
NTuple::Item< double > g_combAxSlTest
NTuple::Item< double > g_combAxQualitySeed
NTuple::Item< double > g_combAxPatSeed
NTuple::Item< double > g_combAxMcAmbigTest
NTuple::Item< double > g_combAxMcTheta
NTuple::Item< double > g_combAxQualityTest
NTuple::Item< double > g_combAxNhitTest
NTuple::Item< double > g_combAxSigPhi0
NTuple::Item< double > g_combAxdCurv
NTuple::Item< double > g_combAxSigCurv
NTuple::Item< double > g_combAxdPhi0
NTuple::Item< double > g_combAxPatTest
NTuple::Item< double > g_combAxNhitSeed
NTuple::Item< double > g_combAxMc
NTuple::Item< double > g_combAxSlSeed
NTuple::Tuple * g_tupleCombAx
NTuple::Item< double > g_combAxMcAmbigSeed
NTuple::Item< double > g_combAxMcPhi
double mdcWrapAng(double phi1, double phi2)
GmsListLink * next() const
GmsListLink * first() const
unsigned int count() const
virtual MdcTrack * storePar(MdcTrack *, double parms[2], double chisq, TrkContext &, double trackT0)
void resetComb(const MdcSeg *seed)
virtual int incompWithSeg(const MdcSeg *refSeg, const MdcSeg *testSeg)
void fillWithSegs(const MdcSegList *inSegs)
virtual int incompWithGroup(MdcSeg **segGroup, const MdcSeg *testSeg, int iply)
MdcSegGrouperAx(const MdcDetector *gm, int debug)
MdcSegGrouper(const MdcDetector *gm, int nDeep, int debug)
HepAList< MdcSeg > * segList
HepAList< MdcSeg > ** combList
void calcFromOrigin(const MdcSeg *parentSeg)
const GmsList * oneList(int slayIndex) const
const MdcSuperLayer * superlayer() const
double testCombSegTheta() const
double testCombSegAmbig() const
double testCombSeg(const MdcSeg *) const
MdcSegInfo * info() const
unsigned int quality() const
double testCombSegPt() const
void setInfo(MdcSegInfo *ptr)
int whichView(void) const