MdcTrackListBase Class Reference

#include <MdcTrackListBase.h>

Inheritance diagram for MdcTrackListBase:

MdcTrackList MdcTrackListCsmc List of all members.

Public Member Functions

 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 *)
virtual int createFromSegs (MdcSegList *, const MdcHitMap *, const MdcDetector *, TrkContext &, double bunchTime)=0
int arbitrateHits ()
void dropMultiHotInLayer (const MdcTrack *tk)
void remove (MdcTrack *atrack)
void setD0Cut (double d0Cut)
void setZ0Cut (double z0Cut)
void setPtCut (double ptCut)

Static Public Attributes

static double m_d0Cut = -999.
static double m_z0Cut = -999.
static double m_ptCut = -999.

Protected Attributes

MdcTrackParams tkParam

Private Member Functions

MdcTrackListBaseoperator= (const MdcTrackListBase &)
 MdcTrackListBase (const MdcTrackListBase &)
void transferTrack ()

Detailed Description

Definition at line 33 of file MdcTrackListBase.h.


Constructor & Destructor Documentation

MdcTrackListBase::MdcTrackListBase ( const MdcTrackParams tkPar  ) 

Definition at line 63 of file MdcTrackListBase.cxx.

References tkParam.

00063                                                               {
00064   //*************************************************************************
00065   tkParam = tkPar;
00066   return;
00067 }

MdcTrackListBase::~MdcTrackListBase (  )  [virtual]

Definition at line 70 of file MdcTrackListBase.cxx.

00070 {}

MdcTrackListBase::MdcTrackListBase ( const MdcTrackListBase  )  [private]


Member Function Documentation

int MdcTrackListBase::arbitrateHits (  ) 

Definition at line 104 of file MdcTrackListBase.cxx.

References TrkHitList::begin(), TrkHitList::end(), TrkRecoTrk::fitResult(), for, MdcMap< K, V >::get(), TrkRecoTrk::hits(), genRecEmupikp::i, TrkRecoTrk::id(), MdcTrackParams::lPrint, MdcTrackParams::lRemoveInActive, nTrack(), MdcMap< K, V >::put(), q, TrkHitList::removeHit(), tkParam, and MdcTrack::track().

00104                                 {
00105   //*************************************************************************
00106   // Look at all hits used in two or more tracks.  Assign hits to the track
00107   // that gives the lower residual.  If, however, many hits are shared by
00108   // a pair of tracks, assign them all to one or the other.
00109   // Refit any tracks that have had hits dropped.
00110   // The implementation is very clumsy, since the arrays were originally
00111   // indexed by id # => there is an unneeded layer of indexing.
00112 
00113   // return # of tracks deleted
00114 
00115   if (8 == tkParam.lPrint){
00116     std::cout << "=======Print before arbitrateHits=======" << std::endl;
00117   }
00118 
00119   int nDeleted = 0;
00120   std::vector<MdcTrack*> trksToKill;
00121   trksToKill.reserve(4);
00122 
00123   MdcMap<long,long> idMap;
00124 
00125   //usedInTrackNum records how many shared hits track has with each other track
00126   int* usedInTrackNum = new int [nTrack()];
00127   // to navigate from track id # to track pointer:
00128   MdcTrack** trkXRef = new MdcTrack* [nTrack()];
00129   //refitTrack flags track id #s of tracks to be refit
00130   int *refitTrack = new int [nTrack()];
00131   for (int i = 0; i < nTrack(); i++) {
00132     refitTrack[i] = 0;
00133   }
00134 
00135   // Fill xref table
00136   int itrack;
00137   for (itrack = 0; itrack < nTrack(); itrack++) {
00138     MdcTrack *atrack = (*this)[itrack];
00139     if (atrack == 0) continue;  // I don't think it can be, but . . .
00140     idMap.put(atrack->track().id(), itrack);
00141     trkXRef[itrack] = atrack;
00142   }
00143   // Loop through the tracks
00144   for (itrack = 0; itrack < nTrack(); itrack++) {
00145 
00146     if (8 == tkParam.lPrint) std::cout<<"arbitrate track No."<<itrack<<  std::endl;
00147     MdcTrack *atrack = (*this)[itrack];
00148     if (atrack == 0) continue;
00149     TrkRecoTrk& aRecoTrk = atrack->track();
00150     int lRefit = 0;
00151     int trackOld = -1;
00152     const TrkFit* tkFit = aRecoTrk.fitResult();
00153     assert (tkFit != 0);
00154     TrkHitList* hitList = aRecoTrk.hits();
00155     assert (hitList != 0);
00156 restart:
00157     for (int ii = 0; ii < nTrack(); ii++) usedInTrackNum[ii] = 0;
00158 
00159     // Loop through hits on track, counting # used in other tracks
00160     int nPrev = 0;
00161     int nHitDeleted = 0;
00162     int maxGapLength = 0;//yzhang 2011-07-29 # of max continuous no hits layer for a track, Gap defined as missing layer >=2 
00163     int nGapGE2= 0;//yzhang 2011-07-29 # of no hits gap for a track 
00164     int nGapGE3= 0;//yzhang 2011-07-29 # of no hits gap for a track 
00165     int nHitInLayer[43];//yzhang 2010-09-20 for bad tracking testing
00166     int nDeleteInLayer[43];//yzhang 2010-09-20 
00167     for(int i=0;i<43;i++){
00168       nHitInLayer[i]=0;
00169       nDeleteInLayer[i]=0;
00170     }
00171     if(8 == tkParam.lPrint) std::cout<< "--arbitrate--"<<std::endl;
00172     for (TrkHitList::hot_iterator ihit(hitList->begin()); ihit != hitList->end(); ++ihit){
00173       int nUsed = ihit->hit()->nUsedHits();
00174       if (8 == tkParam.lPrint){
00175         std::cout<<"nUsed="<<nUsed<<":";
00176         ihit->hit()->printAll(std::cout);
00177       }
00178       if (8 == tkParam.lPrint) {
00179         double deltaChi = -999;
00180         ihit->getFitStuff(deltaChi);
00181         std::cout<< "deltaChi="<<deltaChi<<std::endl;
00182       }
00183       int layer = ihit->layerNumber();
00184       nHitInLayer[layer]++;
00185 
00186       if (!ihit->isActive()) {
00187         //-----------------------------------
00188         //yzhang delete not ACT hit 2010-05-14 
00189         //-----------------------------------
00190         if(tkParam.lRemoveInActive ) {//2010-05-16 
00191           nDeleteInLayer[layer]++;
00192           if (8 == tkParam.lPrint) {
00193             std::cout<< "=remove above inactive "<<std::endl;
00194           }
00195           TrkFundHit* hit = const_cast<TrkFundHit*> (ihit->hit());
00196           hitList->removeHit(hit);
00197           if(ihit == hitList->end()) break;
00198           --ihit;//be careful of the iterator, yzhang
00199         }
00200         continue;   // active hits only yzhang 2009-11-03 delete
00201       }
00202       if (nUsed > 1) {
00203         bool wasUsed = false;
00204         std::pair<TrkFundHit::hot_iterator,TrkFundHit::hot_iterator> q =
00205           ihit->hit()->getUsedHits();
00206         for (TrkFundHit::hot_iterator i = q.first; i != q.second; ++i) {
00207           if ( !i->isActive() ) continue; //yzhang 2009-11-03 delete
00208           TrkRecoTrk * recoTrk=i->parentTrack();
00209           int id = recoTrk->id();
00210           if (id == aRecoTrk.id()) continue; //skip same track
00211           long index = 0;
00212           idMap.get(id, index);
00213           assert(index >= 0);
00214           usedInTrackNum[index]++;
00215           if (8 == tkParam.lPrint){
00216             std::cout<<" track "<<itrack<<"&" <<index
00217               << " shared hits "<<usedInTrackNum[index]<<":";
00218             ihit->printAll(std::cout);
00219           }
00220           wasUsed = true;
00221         }
00222         if (wasUsed) nPrev++;
00223       }// end nUsed > 1
00224     } // end loop over hits
00225 
00226     int testGap = 0;
00227     //std::cout<< __FILE__ << "   " << itrack<< "   "<<std::endl;
00228     for (int i=0;i<43;i++){
00229       //std::cout<< __FILE__ << "   " << i<< " nHitInLayer  "<<nHitInLayer[i]<<" nDeleteInLayer "<<nDeleteInLayer[i]<<std::endl;
00230       if (8 == tkParam.lPrint) {
00231         std::cout<<i<<" nHitInLayer  "<<nHitInLayer[i]
00232           <<" nDeleteInLayer "<<nDeleteInLayer[i]<<std::endl;
00233       }
00234       //1.only hit in layer deleted; 2.no hits in layer; 3.got hits in layer;
00235       if(nHitInLayer[i]>0 && (nHitInLayer[i]-nDeleteInLayer[i])==0) {
00236         //only hit in layer i has been deleted
00237         nHitDeleted++;
00238         if (8 == tkParam.lPrint) { 
00239           cout << "rec hits have been deleted in this layer"<<std::endl; 
00240         }
00241         testGap++;
00242         //std::cout<< __FILE__ << "   " << __LINE__ << " testGap3  "<<testGap<<std::endl;
00243       }else if(nHitInLayer[i]==0){
00244         //no hits in this layer i
00245         testGap++;
00246         //std::cout<< __FILE__ << "   " << __LINE__ << " testGap3  "<<testGap<<std::endl;
00247       }else{
00248         //std::cout<< __FILE__ << "   " << __LINE__ << " testGap3  "<<testGap<<std::endl;
00249         //got hit in layer i
00250         if(testGap>=2){
00251           nGapGE2++;
00252           if(testGap>=3){ nGapGE3++; }
00253           if(testGap>maxGapLength) maxGapLength=testGap;
00254           //std::cout<< __FILE__ << "   " << __LINE__ << " maxGapLength  "<<maxGapLength<<std::endl;
00255         }
00256         testGap=0;
00257       }//end for layer 43
00258     }
00259 
00260     bool toBeDeleted = false;
00261 
00262     if(tkParam.lPrint>1) std::cout<< "arbitrateHits tkNo:"<<itrack<<" nGapGE2=  "<<nGapGE2 << " nGapGE3=  "<<nGapGE3 << " maxGapLength=  "<<maxGapLength<<std::endl;
00263     //yzhang add nHitDeleted cut 2010-09-13 
00264     // remove track if # not Active 
00265     if (nHitDeleted >= tkParam.nHitDeleted) {
00266       if (tkParam.lPrint>1) {
00267         cout << "arbitrateHits: nHitDeleted "<<nHitDeleted<<" >= "<<tkParam.nHitDeleted
00268           <<" Killing tkNo " << itrack << endl;
00269       }
00270       toBeDeleted = true;
00271     }
00272 
00273     //yzhang add nGap cut 2011-07-29 
00274     // remove track with gaps and big gap
00275     if (nGapGE2 >= tkParam.nGapGE2) {
00276       if (tkParam.lPrint>1) {
00277         cout << "arbitrateHits: nGapGE2 "<<nGapGE2<<" >= "<<tkParam.nGapGE2 <<" Killing tkNo " << itrack << endl;
00278       }
00279       toBeDeleted = true;
00280     } 
00281     if (nGapGE3 >= tkParam.nGapGE3) {
00282       if (tkParam.lPrint>1) {
00283         cout << "arbitrateHits: nGapGE3 "<<nGapGE3<<" >= "<<tkParam.nGapGE3 <<" Killing tkNo " << itrack << endl;
00284       }
00285       toBeDeleted = true;
00286     } 
00287     if (maxGapLength >= tkParam.maxGapLength) {
00288       if (tkParam.lPrint>1) {
00289         cout << "arbitrateHits: maxGapLength "<<maxGapLength<<" >= "<<tkParam.maxGapLength<<" Killing tkNo " << itrack << endl;
00290       }
00291       toBeDeleted = true;
00292     } 
00293 
00294     if(toBeDeleted){
00295       nDeleted++;
00296       delete &(atrack->track());    // Delete the RecoTrk inside atrack
00297       atrack->setTrack(0);
00298       trksToKill.push_back(atrack);
00299       continue;
00300     } 
00301 
00302     //*******
00303     // How many hits are shared with a single track?
00304     int nMost = 0;
00305     int trackMost = 0;
00306     for (int ii = 0; ii < nTrack(); ii++) {
00307       if (8 == tkParam.lPrint){
00308         std::cout<<"tk:"<<itrack<<"&"<<ii
00309           <<" shared "<<usedInTrackNum[ii]<<" hits "<<  std::endl;
00310       }
00311       if (usedInTrackNum[ii] > nMost) {
00312         nMost = usedInTrackNum[ii];
00313         trackMost = ii;  //index of track w/ most hits in common w/ current trk
00314       }
00315     }
00316 
00317     // A little precaution against infinite loops:
00318     if (trackMost == trackOld) {
00319       std::cout << "ErrMsg(error) MdcTrackListBase:"
00320         << "Something ghastly happened in MdcTrackListBase::arbitrateHits"
00321         << std::endl;
00322       return 0;
00323     }
00324     trackOld = trackMost;
00325 
00326 
00327     //******
00328     // Decide whether to handle hits individually or in group
00329     double groupDiff = 0.0;   // relative quality of grouped hits for the two
00330     // tracks; > 0. => current track worse
00331     int nFound = 0;    // # of grouped hits located so far
00332     TrkHitOnTrk **theseHits = 0;  // grouped hits as seen in current track
00333     TrkHitOnTrk **thoseHits = 0;  // grouped hits as seen in the other track
00334     int lGroupHits = 0;
00335 
00336     if (nMost >= tkParam.nOverlap) {
00337       if (8 == tkParam.lPrint){
00338         std::cout<<"track "<<trackMost<<" shared "<<nMost<<" hits > Cut nOverlap "
00339           <<tkParam.nOverlap<<", group hits!"<<std::endl;
00340       }
00341       lGroupHits = 1;
00342       theseHits = new TrkHitOnTrk*[nMost];
00343       thoseHits = new TrkHitOnTrk*[nMost];
00344     }
00345 
00346     //*********
00347     // Go back through hits on this track, looking up the overlap of each
00348     // if grouping hits, only deal with hits shared with trackMost on this pass
00349     // otherwise, deal with all shared hits as encountered
00350     if(8 == tkParam.lPrint) std::cout<<"Go back through hits, looking up overlap hits"<< std::endl;
00351     if (nMost > 0) {
00352       if (8 == tkParam.lPrint) std::cout<<" nHits= "<< hitList->nHit()<< std::endl;
00353       for (TrkHitList::hot_iterator ihit(hitList->begin()); ihit != hitList->end(); ++ihit) {
00354         int nUsed = ihit->hit()->nUsedHits();
00355 
00356         if (8 == tkParam.lPrint){
00357           std::cout<< "--hit go back, nUsed="<<nUsed<<":";
00358           ihit->hit()->printAll(std::cout);
00359         }
00360 
00361         // only shared hits 
00362         if (nUsed < 2) { continue; }
00363 
00364         // active hits only
00365         if (!ihit->isActive()) {
00366           if (8 == tkParam.lPrint){ std::cout<<"act=0 continue"<<std::endl; }
00367           continue;   
00368         }
00369 
00370         //*** look at all overlaps for this hit
00371         std::pair<TrkFundHit::hot_iterator,TrkFundHit::hot_iterator> q = ihit->hit()->getUsedHits();
00372         while (q.first!=q.second) { // nUsed > 0
00373           int dropThisHit = 0;
00374           TrkHitOnTrk *otherHot = const_cast<TrkHitOnTrk*>((--q.second).get());
00375           TrkRecoTrk *otherTrack = otherHot->parentTrack();
00376 
00377           if (!otherHot->isActive()) continue;
00378 
00379           // Again, skip "overlap" of track with itself
00380           if ( &aRecoTrk == otherTrack) continue;
00381           int otherId = otherTrack->id();
00382           long otherIndex = -1;
00383           idMap.get(otherId, otherIndex); assert(otherIndex >= 0);
00384 
00385           // if grouping hits, only look at hits shared with trackMost
00386           if (lGroupHits && otherIndex != trackMost) continue;
00387 
00388           if (lGroupHits) {
00389             if (8 == tkParam.lPrint) {
00390               std::cout<<"group hits "<<  std::endl;
00391             }
00392             // Calculate contribution of group to each chisq/dof
00393             //        groupDiff += fabs(ihit->resid(0)) -
00394             //          fabs(otherHot->resid(0));
00395             // Hack to handle tracks with 5 active hits:
00396             int aDof = tkFit->nActive() - 5;
00397             assert (otherTrack->fitResult() != 0);
00398             int otherDof = otherTrack->fitResult()->nActive() - 5;
00399             if (aDof <= 0) {groupDiff = 999;}
00400             else if (otherDof <= 0) {groupDiff = -999;}
00401             else {
00402               groupDiff += ihit->resid(0) * ihit->resid(0) * ihit->weight() /
00403                 aDof -
00404                 otherHot->resid(0) * otherHot->resid(0) * otherHot->weight() /
00405                 otherDof;
00406             }
00407             theseHits[nFound] = const_cast<TrkHitOnTrk*>(ihit.get());
00408             thoseHits[nFound] = otherHot;
00409             nFound++;
00410             dropThisHit = 1;
00411           } else {   // handle hits individually
00412 
00413             if (8 == tkParam.lPrint) {
00414               std::cout<<"handle hits individually"<<  std::endl;
00415             }
00416             nFound++;
00417             if (fabs(ihit->resid(0)) > fabs(otherHot->resid(0)) ) {
00418               // turn off (inactivate) hit on this track
00419               lRefit = 1;
00420               //              ihit->hit()->setUnusedHit(ihit.get());
00421               //Should I be setting inactive, or deleting the hit???????
00422               const_cast<TrkHitOnTrk*>(ihit.get())->setActivity(0);
00423               dropThisHit = 1;
00424               if (8 == tkParam.lPrint) {
00425                 std::cout<<"dorp hit ";
00426                 const_cast<TrkHitOnTrk*>(ihit.get())->print(std::cout);
00427               }
00428               break;      // found other hit, so quit loop
00429             } else {
00430               // inactivate hit on other track
00431               refitTrack[otherIndex] = 1;
00432               //              otherHot->hit()->setUnusedHit(otherHot);
00433               otherHot->setActivity(0);
00434               if (8 == tkParam.lPrint) {
00435                 std::cout<<"inactive hit on other track";
00436                 const_cast<TrkHitOnTrk*>(ihit.get())->print(std::cout);
00437               }
00438               break;      // found other hit, so quit loop
00439             }
00440           } // end grouped/individual treatment
00441 
00442           if (dropThisHit == 1) break; // don't look for other matches since
00443           // this hit is now turned off
00444         } // end loop over nUsed
00445 
00446         // Quit if we've found all of the shared hits on this track
00447         if (lGroupHits && nFound == nMost  ||  nFound == nPrev) {
00448           if (8 == tkParam.lPrint) {
00449             std::cout<<"we've found all of the shared hits on this track,Quit"<<std::endl;
00450           }
00451           break;
00452         }
00453 
00454       }  // end loop over hits
00455 
00456       // Decide which track grouped hits belong with and inactivate accordingly
00457       if (lGroupHits) {
00458         if (8 == tkParam.lPrint) {
00459           cout << "nGroup: " << nMost << "  groupDiff: " << groupDiff << endl;
00460           cout << "Track: " << aRecoTrk.id() << "  nHit: "
00461             << hitList->nHit() << "  nActive: "
00462             << tkFit->nActive() << " chisq/dof: " <<
00463             tkFit->chisq()/(tkFit->nActive() - 5) << endl;
00464           TrkRecoTrk& othTrack = trkXRef[trackMost]->track();
00465           cout << "Track: "<< othTrack.id() << "  nHit: " <<
00466             othTrack.hits()->nHit() << "  nActive: " <<
00467             othTrack.fitResult()->nActive() << " chisq/dof: " <<
00468             othTrack.fitResult()->chisq() /
00469             (othTrack.fitResult()->nActive() - 5) << endl;
00470         }
00471 
00472         if (groupDiff > 0.0) {
00473           // inactivate hits on this track
00474           lRefit = 1;
00475           for (int ii = 0; ii < nMost; ii++) {
00476             TrkHitOnTrk *alink = theseHits[ii];
00477             TrkFundHit* hit = const_cast<TrkFundHit*> (alink->hit());
00478             hitList->removeHit(hit);//yzhang 2011-02-12 
00479             //alink->setActivity(0);
00480           }
00481           if (8 == tkParam.lPrint) std::cout<<"inactive hits on this track, No."<<aRecoTrk.id()<<  std::endl;
00482         } else {
00483           // inactivate hits on other track
00484           refitTrack[trackMost] = 1;
00485           for (int ii = 0; ii < nMost; ii++) {
00486             TrkHitOnTrk *alink = thoseHits[ii];
00487             TrkFundHit* hit = const_cast<TrkFundHit*> (alink->hit());
00488             hitList->removeHit(hit);//yzhang 2011-02-12 
00489             //alink->setActivity(0);
00490           }
00491           if (8 == tkParam.lPrint) std::cout<<"inactive hits on other track "<<   std::endl;
00492         }
00493         delete [] theseHits;
00494         delete [] thoseHits;
00495 
00496       } // end if lGroupHits
00497 
00498     } // end if nMost > 0
00499 
00500     //*********
00501     // Refit this track, if any hits have been dropped
00502     TrkErrCode fitResult;
00503     long index = -1;
00504     idMap.get(aRecoTrk.id(), index); assert (index >= 0);
00505 
00506     if (lRefit || refitTrack[index] == 1) {
00507       if (8 == tkParam.lPrint) {
00508         std::cout<<"after group ,refit track"<<aRecoTrk.id()<<  std::endl;
00509       }
00510       fitResult = hitList->fit();
00511       aRecoTrk.status()->addHistory(
00512           TrkErrCode(fitResult.success()?TrkErrCode::succeed:TrkErrCode::fail,14,"Arbitrated"), "MdcTrkRecon");
00513       if (fitResult.failure() && (8 == tkParam.lPrint )) {
00514         fitResult.print(std::cerr);
00515       }
00516 
00517 
00518       double chisqperDOF;
00519       bool badFit = true;
00520       if (fitResult.success()) {
00521         badFit = false;
00522         int nDOF = tkFit->nActive() - 5;
00523         if (nDOF > 5){
00524           chisqperDOF = tkFit->chisq() / nDOF;
00525         }else{
00526           chisqperDOF = tkFit->chisq();
00527         }
00528 
00529         if (chisqperDOF > tkParam.maxChisq) badFit = true;
00530         if (tkFit->nActive() < tkParam.minHits) badFit = true;
00531         double tem2 = (float) hitList->nHit() - tkFit->nActive();
00532         if (tkParam.lUseQualCuts) {
00533           if (tem2 >= tkParam.maxNmissTrack) badFit = true;
00534           if (tem2 /float(hitList->nHit()) > tkParam.maxNmissNorm){
00535             badFit = true;
00536           }
00537         }
00538         if(8== tkParam.lPrint) std::cout<<"fit quality:"<<
00539           " chisqperDof "<<chisqperDOF<<"?>"<<tkParam.maxChisq<<
00540             " nActive "<<tkFit->nActive()<<"?<"<<tkParam.minHits<<
00541             " nHit "<<hitList->nHit()<<" nhit-act "<<tem2<<"?>= nMiss "<<tkParam.maxNmissTrack<<
00542             " hit-act/nhit "<<tem2/float(hitList->nHit())<<"?> MissNorm "<<tkParam.maxNmissNorm
00543             <<  std::endl;
00544 
00545 
00546       }
00547       if (8 == tkParam.lPrint)  {
00548         cout << "Refitting track " << aRecoTrk.id() << " success = "
00549           << fitResult.success() << "\n";
00550       }
00551       // If the track no longer passes cuts, delete it
00552       if (fitResult.failure() || badFit ) {
00553         nDeleted++;
00554         //  Don't change the track list while we're iterating through it!
00555         //      remove(atrack);
00556         //int id = aRecoTrk.id();
00557         if (8 == tkParam.lPrint) {
00558           cout << "fitResult.failure? "<<fitResult.failure()
00559             <<" badFit? "<<badFit <<" Killing tkNo " << itrack << endl;
00560         }
00561         delete &(atrack->track());    // Delete the RecoTrk inside atrack
00562         atrack->setTrack(0);
00563         trksToKill.push_back(atrack);
00564         continue;
00565       }
00566     } // end if lRefit
00567 
00568     if (lGroupHits) goto restart;
00569 
00570   } // end loop over tracks
00571   if (8 == tkParam.lPrint) std::cout<<"end of loop over tracks"<<  std::endl;
00572 
00573   // Remove dead track husks
00574   for (int itk = 0; itk < (int)trksToKill.size(); itk++) {
00575     remove(trksToKill[itk]);
00576     if (8 == tkParam.lPrint) std::cout<<"remode dead track No."<<itk<<  std::endl;
00577   }
00578   if (8 == tkParam.lPrint) std::cout<<"---end of arbitrateHits"<<  std::endl;
00579 
00580   delete [] usedInTrackNum;
00581   delete [] refitTrack;
00582   delete [] trkXRef;
00583   return nDeleted;
00584 }

virtual int MdcTrackListBase::createFromSegs ( MdcSegList ,
const MdcHitMap ,
const MdcDetector ,
TrkContext ,
double  bunchTime 
) [pure virtual]

Implemented in MdcTrackList, and MdcTrackListCsmc.

void MdcTrackListBase::dropMultiHotInLayer ( const MdcTrack tk  ) 

Reimplemented in MdcTrackList.

void MdcTrackListBase::newParams ( const MdcTrackParams tkPar  ) 

Definition at line 588 of file MdcTrackListBase.cxx.

References tkParam.

00588                                                        {
00589   //**************************************************************************
00590   tkParam = tkPar;
00591 }

int MdcTrackListBase::nTrack (  )  const [inline]

Definition at line 39 of file MdcTrackListBase.h.

Referenced by arbitrateHits(), plot(), and store().

00039 {return length();}

MdcTrackListBase& MdcTrackListBase::operator= ( const MdcTrackListBase  )  [private]

void MdcTrackListBase::plot (  )  const

Definition at line 92 of file MdcTrackListBase.cxx.

References nTrack().

00092                              {
00093   //*************************************************************************
00094   std::cout<< "nTrack   "<<nTrack() << std::endl;//yzhang debug
00095   for (int itrack = 0; itrack < nTrack(); itrack++) {
00096     MdcTrack *atrack = (*this)[itrack];
00097     if (atrack == NULL) continue;
00098     atrack->track().printAll(cout);
00099   }
00100 }

void MdcTrackListBase::remove ( MdcTrack atrack  ) 

Reimplemented in MdcTrackListCsmc.

Definition at line 595 of file MdcTrackListBase.cxx.

00595                                            {
00596   //--------------------------------------------------------------------
00597   if (atrack != 0) {
00598     HepAList<MdcTrack>::remove( atrack );
00599     delete atrack;
00600   }
00601 }

void MdcTrackListBase::setD0Cut ( double  d0Cut  )  [inline]

Definition at line 57 of file MdcTrackListBase.h.

References m_d0Cut.

00057 {m_d0Cut = d0Cut;}//yzhang add 

void MdcTrackListBase::setPlot ( int  plotFlag  )  [inline]

Definition at line 40 of file MdcTrackListBase.h.

References MdcTrackParams::lPlot, and tkParam.

00040 { tkParam.lPlot = plotFlag;};

void MdcTrackListBase::setPtCut ( double  ptCut  )  [inline]

Definition at line 59 of file MdcTrackListBase.h.

References m_ptCut.

00059 {m_ptCut = ptCut;}//yzhang add 2009-10-27

void MdcTrackListBase::setZ0Cut ( double  z0Cut  )  [inline]

Definition at line 58 of file MdcTrackListBase.h.

References m_z0Cut.

00058 {m_z0Cut = z0Cut;}//yzhang add 2010-05-21 

void MdcTrackListBase::store ( RecMdcTrackCol ,
RecMdcHitCol  
)

Definition at line 75 of file MdcTrackListBase.cxx.

References nTrack().

00075                                                                         {
00076   // ***********************************************************************
00077   int trackId = 0;
00078   for (int itrack = 0; itrack < nTrack(); itrack++) {
00079     MdcTrack* track = (*this)[itrack];
00080     //tkStat:  0,PatRec 1,MdcxReco 2,Tsf 3,CurlFinder
00081     int tkStat = 0;
00082     track->storeTrack(trackId, trackList, hitList, tkStat);
00083     ++trackId;
00084   }
00085   HepAListDeleteAll(*this);   // Discard the husks
00086   removeAll(); 
00087   return;
00088 }

void MdcTrackListBase::transferTrack (  )  [private]

Definition at line 605 of file MdcTrackListBase.cxx.

00605                                 {
00606   //**************************************************************************
00607 
00608 }


Member Data Documentation

double MdcTrackListBase::m_d0Cut = -999. [static]

Definition at line 60 of file MdcTrackListBase.h.

Referenced by MdcTrackList::createFromSegs(), MdcTrkRecon::initialize(), and setD0Cut().

double MdcTrackListBase::m_ptCut = -999. [static]

Definition at line 62 of file MdcTrackListBase.h.

Referenced by MdcTrackList::createFromSegs(), MdcTrkRecon::initialize(), and setPtCut().

double MdcTrackListBase::m_z0Cut = -999. [static]

Definition at line 61 of file MdcTrackListBase.h.

Referenced by MdcTrackList::createFromSegs(), MdcTrkRecon::initialize(), and setZ0Cut().

MdcTrackParams MdcTrackListBase::tkParam [protected]

Definition at line 72 of file MdcTrackListBase.h.

Referenced by arbitrateHits(), MdcTrackListCsmc::createFromSegs(), MdcTrackList::createFromSegs(), MdcTrackListCsmc::finish3d(), MdcTrackList::finishCircle(), MdcTrackList::finishHelix(), MdcTrackListBase(), newParams(), MdcTrackList::pickHits(), and setPlot().


Generated on Tue Nov 29 23:20:18 2016 for BOSS_7.0.2 by  doxygen 1.4.7