BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
MdcTrackListCsmc Class Reference

#include <MdcTrackListCsmc.h>

Inheritance diagram for MdcTrackListCsmc:

Public Member Functions

 MdcTrackListCsmc (const MdcTrackParams &tkPar)
 ~MdcTrackListCsmc ()
int createFromSegs (MdcSegList *segs, const MdcHitMap *, const MdcDetector *, TrkContext &, double trackT0)
int finish3d (TrkRecoTrk &trk)
void remove (MdcTrack *atrack)
 MdcTrackListCsmc (const MdcTrackParams &tkPar)
 ~MdcTrackListCsmc ()
int createFromSegs (MdcSegList *segs, const MdcHitMap *, const MdcDetector *, TrkContext &, double trackT0)
int finish3d (TrkRecoTrk &trk)
void remove (MdcTrack *atrack)
 MdcTrackListCsmc (const MdcTrackParams &tkPar)
 ~MdcTrackListCsmc ()
int createFromSegs (MdcSegList *segs, const MdcHitMap *, const MdcDetector *, TrkContext &, double trackT0)
int finish3d (TrkRecoTrk &trk)
void remove (MdcTrack *atrack)
Public Member Functions inherited from MdcTrackListBase
 MdcTrackListBase (const MdcTrackParams &tkPar)
virtual ~MdcTrackListBase ()
int nTrack () const
void setPlot (int plotFlag)
void newParams (const MdcTrackParams &tkPar)
void plot () const
void store (RecMdcTrackCol *, RecMdcHitCol *)
int arbitrateHits ()
void dropMultiHotInLayer (const MdcTrack *tk)
void remove (MdcTrack *atrack)
void setD0Cut (double d0Cut)
void setZ0Cut (double z0Cut)
void setPtCut (double ptCut)
void setNoInner (bool noInnerFlag)
 MdcTrackListBase (const MdcTrackParams &tkPar)
virtual ~MdcTrackListBase ()
int nTrack () const
void setPlot (int plotFlag)
void newParams (const MdcTrackParams &tkPar)
void plot () const
void store (RecMdcTrackCol *, RecMdcHitCol *)
int arbitrateHits ()
void dropMultiHotInLayer (const MdcTrack *tk)
void remove (MdcTrack *atrack)
void setD0Cut (double d0Cut)
void setZ0Cut (double z0Cut)
void setPtCut (double ptCut)
void setNoInner (bool noInnerFlag)
 MdcTrackListBase (const MdcTrackParams &tkPar)
virtual ~MdcTrackListBase ()
int nTrack () const
void setPlot (int plotFlag)
void newParams (const MdcTrackParams &tkPar)
void plot () const
void store (RecMdcTrackCol *, RecMdcHitCol *)
int arbitrateHits ()
void dropMultiHotInLayer (const MdcTrack *tk)
void remove (MdcTrack *atrack)
void setD0Cut (double d0Cut)
void setZ0Cut (double z0Cut)
void setPtCut (double ptCut)
void setNoInner (bool noInnerFlag)

Additional Inherited Members

Static Public Attributes inherited from MdcTrackListBase
static double m_d0Cut = -999.
static double m_z0Cut = -999.
static double m_ptCut = -999.
Protected Attributes inherited from MdcTrackListBase
MdcTrackParams tkParam
bool m_noInner

Detailed Description

Constructor & Destructor Documentation

◆ MdcTrackListCsmc() [1/3]

MdcTrackListCsmc::MdcTrackListCsmc ( const MdcTrackParams & tkPar)

Definition at line 32 of file MdcTrackListCsmc.cxx.

32 : MdcTrackListBase( tkPar ) {
33 // *************************************************************************
34 return;
35}
MdcTrackListBase(const MdcTrackParams &tkPar)

◆ ~MdcTrackListCsmc() [1/3]

MdcTrackListCsmc::~MdcTrackListCsmc ( )

Definition at line 38 of file MdcTrackListCsmc.cxx.

38{}

◆ MdcTrackListCsmc() [2/3]

MdcTrackListCsmc::MdcTrackListCsmc ( const MdcTrackParams & tkPar)

◆ ~MdcTrackListCsmc() [2/3]

MdcTrackListCsmc::~MdcTrackListCsmc ( )

◆ MdcTrackListCsmc() [3/3]

MdcTrackListCsmc::MdcTrackListCsmc ( const MdcTrackParams & tkPar)

◆ ~MdcTrackListCsmc() [3/3]

MdcTrackListCsmc::~MdcTrackListCsmc ( )

Member Function Documentation

◆ createFromSegs() [1/3]

int MdcTrackListCsmc::createFromSegs ( MdcSegList * segs,
const MdcHitMap * ,
const MdcDetector * gm,
TrkContext & context,
double trackT0 )
virtual

Implements MdcTrackListBase.

Definition at line 42 of file MdcTrackListCsmc.cxx.

43 {
44 // *************************************************************************
45 // Forms tracks out of list of superlayer segments
46 int nTracks = 0;
47 // Create empty list of stereo segs (to save time)
48 MdcSegGrouperSt stereoSegs( gm, tkParam.lPrint );
49 // *** Create r-phi track
50
51 // Create list of axial segments, treated as on straight tracks
52 MdcSegGrouperCsmc straightSegs( gm, tkParam.lPrint );
53 straightSegs.fillWithSegs( segs );
54 // std::cout<< "after straight fill " << std::endl;
55 // segs->plot();//yzhang debug
56 MdcSeg* seed;
57 int goodOnly = 1;
58 MdcTrack* trialTrack = 0;
59 while ( 1 )
60 {
61 seed = segs->getSeed( 0, goodOnly );
62 if ( seed == 0 && goodOnly == 1 )
63 {
64 segs->resetSeed( gm );
65 goodOnly = 0;
66 continue;
67 }
68 else if ( seed == 0 && goodOnly == 0 ) { break; }
69 delete trialTrack;
70 trialTrack = 0;
71 int success =
72 straightSegs.combineSegs( trialTrack, seed, context, t0, tkParam.maxSegChisqO );
73 if ( !success )
74 {
75 // std::cout<< " MdcTrackListCsmc::combineSegs not successed!" << std::endl;
76 continue;
77 }
78
79 if ( tkParam.lPrint > 1 ) { trialTrack->track().printAll( cout ); }
80 // *** End r-phi track-finding
81
82 // *** Add stereo to taste
83 stereoSegs.fillWithSegs( segs, trialTrack );
84
85 success = stereoSegs.combineSegs( trialTrack, 0, context, t0, tkParam.maxSegChisqO );
86 if ( success )
87 {
88 // Finish 3-d track;
89 success = finish3d( trialTrack->track() );
90 // success = finish3d(trialTrack->track()); // GSciolla: try to repeat
91 }
92 if ( !success )
93 {
94 // std::cout<< " MdcTrackListCsmc::finish3d not successed!" << std::endl;
95 continue;
96 }
97
98 if ( tkParam.lPrint > 1 ) { trialTrack->track().printAll( cout ); }
99
100 nTracks++;
101 append( trialTrack ); // Add to list of Tracks
102 trialTrack = 0;
103
104 } // end while(1)
105 delete trialTrack;
106
107 // cout << " Number of Tracks found= " << nTracks ;
108 // cout << " " << endl;
109 return nTracks;
110}
MdcSeg * getSeed(int iview, int goodOnly)
void resetSeed(const MdcDetector *gm)
int finish3d(TrkRecoTrk &trk)
virtual void printAll(std::ostream &) const
char * append(const char *str, EvtCyclic3::Index i)

◆ createFromSegs() [2/3]

int MdcTrackListCsmc::createFromSegs ( MdcSegList * segs,
const MdcHitMap * ,
const MdcDetector * ,
TrkContext & ,
double trackT0 )
virtual

Implements MdcTrackListBase.

◆ createFromSegs() [3/3]

int MdcTrackListCsmc::createFromSegs ( MdcSegList * segs,
const MdcHitMap * ,
const MdcDetector * ,
TrkContext & ,
double trackT0 )
virtual

Implements MdcTrackListBase.

◆ finish3d() [1/3]

int MdcTrackListCsmc::finish3d ( TrkRecoTrk & trk)

Definition at line 113 of file MdcTrackListCsmc.cxx.

113 {
114 // ************************************************************************
115 int success = 0;
116 int nParamFit = 0;
117
118 TrkErrCode fitResult;
119
120 // ------------------------
121 // 4 param fit (line)
122 // ------------------------
123 nParamFit = 4;
124 TrkLineMaker makeFit;
125 makeFit.changeFit( trk );
126 makeFit.setFlipAndDrop( trk, true, true );
127 // setCosmic(&trk); // set hot to cosmics OBSOLETE! REMOVE!
128 fitResult = trk.hits()->fit();
129 makeFit.setFlipAndDrop( trk, false, false );
130
131 // ---------------------------------------------------------------
132 // Are there some TDC that can be replaced with later measurements? ( beginning)
133 // ---------------------------------------------------------------
134 // Note to Sciolla: multiple hits commented out for now OK! I will put it back later...
135 /* if( _flags.useMultipleHits ) {
136 int NHITS = trk.nHit();
137
138 if (fitResult.success()) {
139 int ifirst = 0;
140 for (int ihot = 0; ihot < NHITS ; ihot++) {
141
142 MdcHitOnTrack* ahot = (MdcHitOnTrack*)trk.hitAList()[ihot];
143 double firstTime = ahot->mdcHit()->rawTime(0);
144
145 // Get the list of times for this Digi
146 const MdcDigi* tmpDigi = ahot->mdcHit()->digi() ;
147// int nTDChits = tmpDigi->getTdcTimeAList()->length() ;
148 int nTDChits = tmpDigi->tmdcits() ;
149
150 double newTime=0. ;
151
152 for( int il = 1; il<nTDChits ; il++){
153
154 // get the time corresponding to this doca ---> distance to time
155 newTime = tmpDigi->TdcTime(il);
156 double newDrift = ahot->layer()->timeToDistance(newTime);
157
158 double tmp_doca = ahot->dcaToWire();
159 double new_diff = fabs(fabs(tmp_doca)-fabs(newDrift));
160 double tmp_drift = ahot->drift();
161 double tmp_drift2 =
162 ahot->layer()->timeToDistance(tmpDigi->TdcTime(0));
163 double old_diff = fabs(fabs(tmp_doca)-fabs(tmp_drift2));
164
165 if( ((old_diff-new_diff)>0.1) // new time better then old of at least 1 mm
166 && (new_diff<=0.8) ) { // and newresid < 2 mm
167 // if(_flags.debug) {
168 if(1) {
169
170 if(ifirst==0) {
171 ifirst = 1 ;
172 cout <<" nHits | time1 |fittim | time2 | doca(mm) | drift1 "
173 <<" drift1(rec) | drift2 | layer | wire | isActive"
174 << " | chi2 | nactive" << endl;
175 }
176
177 int isAct = 1 ;
178 if (!ahot->isActive()) {
179 isAct = 0 ;
180 // cout<< " >> " ;
181 // cout << "This hit is not active " << endl ;
182 }
183
184 cout << " " << nTDChits
185 << " " << tmpDigi->TdcTime(0)
186 << " " << ahot->fitTime()
187 << " " << newTime
188 << " " << tmp_doca*10
189 << " " << tmp_drift*10
190 << " " << tmp_drift2*10
191 << " " << newDrift*10
192 << " " << ahot->layer()->layNum()
193 << " " << ahot->wire()
194 << " " << isAct
195 << " " << trk.chisq()
196 << " " << trk.nActive()
197 << endl;
198
199 cout << " old/new diff (mm) = " << old_diff*10
200 << " | " << new_diff*10
201 << endl ;
202 }
203
204 ahot->setTimeIndex(il) ;
205 // cout << "new rawtime ="
206 // << ahot->mdcHit()->rawTime(0)<< endl ; // check the new value
207
208
209 // store results in ntuple to see improvements ... before ...
210 HepTuple* tupleMultHits = _manager->ntuple("multiHits");
211
212 tupleMultHits->column("ch2Dof1", trk.chisq()/(trk.nActive() - 4));
213 tupleMultHits->column("nActiv1", trk.nActive());
214 tupleMultHits->column("resid1",ahot->resid());
215 tupleMultHits->column("doca1",ahot->resid()+ahot->drift());
216 tupleMultHits->column("time1", ahot->fitTime() );
217 tupleMultHits->column("rawtime1", ahot->mdcHit()->rawTime(il) );
218
219 // - make the hit active and usable
220 ahot->setActivity(true);
221
222 // now refit the track ...
223 fitResult = trk.fit();
224
225 // store results in ntuple to see improvements ... after ...
226 tupleMultHits->column("ch2Dof2", trk.chisq()/(trk.nActive() - 4));
227 tupleMultHits->column("nActiv2", trk.nActive());
228 tupleMultHits->column("resid2",ahot->resid());
229 tupleMultHits->column("doca2",ahot->resid()+ahot->drift());
230 tupleMultHits->column("time2", ahot->fitTime() );
231 tupleMultHits->column("rawtime2", ahot->mdcHit()->rawTime(il) );
232 tupleMultHits->dumpData();
233 }
234 }
235 }
236 }
237 } // Are there some TDC that can be replaced with later measurements? (end)
238 */
239
240 const TrkFit* tkFit = trk.fitResult();
241 double chisqperDOF = 0.;
242 if ( fitResult.success() )
243 {
244 int nDOF = tkFit->nActive() - nParamFit;
245 if ( nDOF > nParamFit ) chisqperDOF = tkFit->chisq() / nDOF;
246 else chisqperDOF = tkFit->chisq();
247 int goodMatch = 1;
248 if ( chisqperDOF > tkParam.maxChisq ) goodMatch = 0;
249 if ( tkFit->nActive() < tkParam.minHits ) goodMatch = 0;
250
251 if ( goodMatch ) success = 1;
252 }
253
254 return success;
255}
virtual double chisq() const =0
virtual int nActive() const =0
TrkErrCode fit()
const TrkFit * fitResult() const
bool setFlipAndDrop(TrkRecoTrk &, bool allowFlips, bool allowDrops) const
virtual void changeFit(TrkRecoTrk &theTrack) const

Referenced by createFromSegs().

◆ finish3d() [2/3]

int MdcTrackListCsmc::finish3d ( TrkRecoTrk & trk)

◆ finish3d() [3/3]

int MdcTrackListCsmc::finish3d ( TrkRecoTrk & trk)

◆ remove() [1/3]

void MdcTrackListCsmc::remove ( MdcTrack * atrack)

◆ remove() [2/3]

void MdcTrackListCsmc::remove ( MdcTrack * atrack)

◆ remove() [3/3]

void MdcTrackListCsmc::remove ( MdcTrack * atrack)

The documentation for this class was generated from the following files: