Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

MdcTrackListBase Class Reference

#include <MdcTrackListBase.h>

Inheritance diagram for MdcTrackListBase:

MdcTrackList MdcTrackList MdcTrackListCsmc MdcTrackListCsmc List of all members.

Public Member Functions

int arbitrateHits ()
int arbitrateHits ()
virtual int createFromSegs (MdcSegList *, const MdcHitMap *, const MdcDetector *, TrkContext &, double bunchTime)=0
virtual int createFromSegs (MdcSegList *, const MdcHitMap *, const MdcDetector *, TrkContext &, double bunchTime)=0
void dropMultiHotInLayer (const MdcTrack *tk)
void dropMultiHotInLayer (const MdcTrack *tk)
 MdcTrackListBase (const MdcTrackParams &tkPar)
 MdcTrackListBase (const MdcTrackParams &tkPar)
void newParams (const MdcTrackParams &tkPar)
void newParams (const MdcTrackParams &tkPar)
int nTrack () const
int nTrack () const
void plot () const
void plot () const
void remove (MdcTrack *atrack)
void remove (MdcTrack *atrack)
void setD0Cut (double d0Cut)
void setD0Cut (double d0Cut)
void setPlot (int plotFlag)
void setPlot (int plotFlag)
void setPtCut (double ptCut)
void setPtCut (double ptCut)
void setZ0Cut (double z0Cut)
void setZ0Cut (double z0Cut)
void store (RecMdcTrackCol *, RecMdcHitCol *)
void store (RecMdcTrackCol *, RecMdcHitCol *)
virtual ~MdcTrackListBase ()
virtual ~MdcTrackListBase ()

Static Public Attributes

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

Protected Attributes

MdcTrackParams tkParam

Private Member Functions

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

Constructor & Destructor Documentation

MdcTrackListBase::MdcTrackListBase const MdcTrackParams tkPar  ) 
 

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

MdcTrackListBase::~MdcTrackListBase  )  [virtual]
 

00070 {}

MdcTrackListBase::MdcTrackListBase const MdcTrackListBase  )  [private]
 

MdcTrackListBase::MdcTrackListBase const MdcTrackParams tkPar  ) 
 

virtual MdcTrackListBase::~MdcTrackListBase  )  [virtual]
 

MdcTrackListBase::MdcTrackListBase const MdcTrackListBase  )  [private]
 


Member Function Documentation

int MdcTrackListBase::arbitrateHits  ) 
 

int MdcTrackListBase::arbitrateHits  ) 
 

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 nHitInLayer[43];//yzhang 2010-09-20 for bad tracking testing
00163     int nDeleteInLayer[43];//yzhang 2010-09-20 
00164     for(int i=0;i<43;i++){
00165       nHitInLayer[i]=0;
00166       nDeleteInLayer[i]=0;
00167     }
00168     if(8 == tkParam.lPrint) std::cout<< "--arbitrate--"<<std::endl;
00169     for (TrkHitList::hot_iterator ihit(hitList->begin()); ihit != hitList->end(); ++ihit){
00170       int nUsed = ihit->hit()->nUsedHits();
00171       if (8 == tkParam.lPrint){
00172         std::cout<<"nUsed="<<nUsed<<":";
00173         ihit->hit()->printAll(std::cout);
00174       }
00175       if (8 == tkParam.lPrint) {
00176         double deltaChi = -999;
00177         ihit->getFitStuff(deltaChi);
00178         std::cout<< "deltaChi="<<deltaChi<<std::endl;
00179       }
00180       int layer = ihit->layerNumber();
00181       nHitInLayer[layer]++;
00182 
00183       if (!ihit->isActive()) {
00184         //-----------------------------------
00185         //yzhang delete not ACT hit 2010-05-14 
00186         //-----------------------------------
00187         if(tkParam.lRemoveInActive ) {//2010-05-16 
00188           if (8 == tkParam.lPrint) {
00189             std::cout<< "=remove above inactive "<<std::endl;
00190           }
00191           TrkFundHit* hit = const_cast<TrkFundHit*> (ihit->hit());
00192           if(hitList->removeHit(hit)){ hit->setUnusedHit(&(*ihit)); }
00193           if(ihit == hitList->end()) break;
00194           --ihit;//be careful of the iterator, yzhang
00195           nDeleteInLayer[layer]++;
00196         }
00197         continue;   // active hits only yzhang 2009-11-03 delete
00198       }
00199       if (nUsed > 1) {
00200         bool wasUsed = false;
00201         std::pair<TrkFundHit::hot_iterator,TrkFundHit::hot_iterator> q =
00202           ihit->hit()->getUsedHits();
00203         for (TrkFundHit::hot_iterator i = q.first; i != q.second; ++i) {
00204           if ( !i->isActive() ) continue; //yzhang 2009-11-03 delete
00205           TrkRecoTrk * recoTrk=i->parentTrack();
00206           int id = recoTrk->id();
00207           if (id == aRecoTrk.id()) continue; //skip same track
00208           long index = 0;
00209           idMap.get(id, index);
00210           assert(index >= 0);
00211           usedInTrackNum[index]++;
00212           if (8 == tkParam.lPrint){
00213             std::cout<<" track "<<itrack<<"&" <<index
00214               << " shared hits "<<usedInTrackNum[index]<<":";
00215             ihit->printAll(std::cout);
00216           }
00217           wasUsed = true;
00218         }
00219         if (wasUsed) nPrev++;
00220       }// end nUsed > 1
00221     } // end loop over hits
00222 
00223     for (int i=0;i<43;i++){
00224       if (8 == tkParam.lPrint) {
00225         std::cout<<i<<" nHitInLayer  "<<nHitInLayer[i]
00226           <<" nDeleteInLayer "<<nDeleteInLayer[i]<<std::endl;
00227       }
00228       if(nHitInLayer[i]>0 && (nHitInLayer[i]-nDeleteInLayer[i])==0) {
00229         nHitDeleted++;
00230         if (8 == tkParam.lPrint) { 
00231           cout << "rec hits have been deleted in this layer"<<std::endl; 
00232         }
00233       }
00234     }
00235 
00236     if (8 == tkParam.lPrint) { cout << " nHitDeleted = "<<nHitDeleted<<std::endl; }
00237     //yzhang add nHitDeleted cut 2010-09-13 
00238     // remove track if # not Active 
00239     if (nHitDeleted >= tkParam.nHitDeleted) {
00240       if (8 == tkParam.lPrint) {
00241         cout << " nHitDeleted "<<nHitDeleted<<" > "<<tkParam.nHitDeleted
00242           <<" Killing tkNo " << itrack << endl;
00243       }
00244       nDeleted++;
00245       delete &(atrack->track());    // Delete the RecoTrk inside atrack
00246       atrack->setTrack(0);
00247       trksToKill.push_back(atrack);
00248       continue;
00249     } 
00250 
00251     //*******
00252     // How many hits are shared with a single track?
00253     int nMost = 0;
00254     int trackMost = 0;
00255     for (int ii = 0; ii < nTrack(); ii++) {
00256       if (8 == tkParam.lPrint){
00257         std::cout<<"tk:"<<itrack<<"&"<<ii
00258           <<" shared "<<usedInTrackNum[ii]<<" hits "<<  std::endl;
00259       }
00260       if (usedInTrackNum[ii] > nMost) {
00261         nMost = usedInTrackNum[ii];
00262         trackMost = ii;  //index of track w/ most hits in common w/ current trk
00263       }
00264     }
00265 
00266     // A little precaution against infinite loops:
00267     if (trackMost == trackOld) {
00268       std::cout << "ErrMsg(error) MdcTrackListBase:"
00269         << "Something ghastly happened in MdcTrackListBase::arbitrateHits"
00270         << std::endl;
00271       return 0;
00272     }
00273     trackOld = trackMost;
00274 
00275 
00276     //******
00277     // Decide whether to handle hits individually or in group
00278     double groupDiff = 0.0;   // relative quality of grouped hits for the two
00279     // tracks; > 0. => current track worse
00280     int nFound = 0;    // # of grouped hits located so far
00281     TrkHitOnTrk **theseHits = 0;  // grouped hits as seen in current track
00282     TrkHitOnTrk **thoseHits = 0;  // grouped hits as seen in the other track
00283     int lGroupHits = 0;
00284 
00285     if (nMost >= tkParam.nOverlap) {
00286       if (8 == tkParam.lPrint){
00287         std::cout<<"track "<<trackMost<<" shared "<<nMost<<" hits > Cut nOverlap "
00288           <<tkParam.nOverlap<<", group hits!"<<std::endl;
00289       }
00290       lGroupHits = 1;
00291       theseHits = new TrkHitOnTrk*[nMost];
00292       thoseHits = new TrkHitOnTrk*[nMost];
00293     }
00294 
00295     //*********
00296     // Go back through hits on this track, looking up the overlap of each
00297     // if grouping hits, only deal with hits shared with trackMost on this pass
00298     // otherwise, deal with all shared hits as encountered
00299     if(8 == tkParam.lPrint) std::cout<<"Go back through hits, looking up overlap hits"<< std::endl;
00300     if (nMost > 0) {
00301       if (8 == tkParam.lPrint) std::cout<<" nHits= "<< hitList->nHit()<< std::endl;
00302       for (TrkHitList::hot_iterator ihit(hitList->begin()); ihit != hitList->end(); ++ihit) {
00303         int nUsed = ihit->hit()->nUsedHits();
00304 
00305         if (8 == tkParam.lPrint){
00306           std::cout<< "--hit go back, nUsed="<<nUsed<<":";
00307           ihit->hit()->printAll(std::cout);
00308         }
00309 
00310         // only shared hits 
00311         if (nUsed < 2) { continue; }
00312 
00313         // active hits only
00314         if (!ihit->isActive()) {
00315           if (8 == tkParam.lPrint){ std::cout<<"act=0 continue"<<std::endl; }
00316           continue;   
00317         }
00318 
00319         //*** look at all overlaps for this hit
00320         std::pair<TrkFundHit::hot_iterator,TrkFundHit::hot_iterator> q = ihit->hit()->getUsedHits();
00321         while (q.first!=q.second) { // nUsed > 0
00322           int dropThisHit = 0;
00323           TrkHitOnTrk *otherHot = const_cast<TrkHitOnTrk*>((--q.second).get());
00324           TrkRecoTrk *otherTrack = otherHot->parentTrack();
00325 
00326           if (!otherHot->isActive()) continue;
00327 
00328           // Again, skip "overlap" of track with itself
00329           if ( &aRecoTrk == otherTrack) continue;
00330           int otherId = otherTrack->id();
00331           long otherIndex = -1;
00332           idMap.get(otherId, otherIndex); assert(otherIndex >= 0);
00333 
00334           // if grouping hits, only look at hits shared with trackMost
00335           if (lGroupHits && otherIndex != trackMost) continue;
00336 
00337           if (lGroupHits) {
00338             if (8 == tkParam.lPrint) {
00339               std::cout<<"group hits "<<  std::endl;
00340             }
00341             // Calculate contribution of group to each chisq/dof
00342             //        groupDiff += fabs(ihit->resid(0)) -
00343             //          fabs(otherHot->resid(0));
00344             // Hack to handle tracks with 5 active hits:
00345             int aDof = tkFit->nActive() - 5;
00346             assert (otherTrack->fitResult() != 0);
00347             int otherDof = otherTrack->fitResult()->nActive() - 5;
00348             if (aDof <= 0) {groupDiff = 999;}
00349             else if (otherDof <= 0) {groupDiff = -999;}
00350             else {
00351               groupDiff += ihit->resid(0) * ihit->resid(0) * ihit->weight() /
00352                 aDof -
00353                 otherHot->resid(0) * otherHot->resid(0) * otherHot->weight() /
00354                 otherDof;
00355             }
00356             theseHits[nFound] = const_cast<TrkHitOnTrk*>(ihit.get());
00357             thoseHits[nFound] = otherHot;
00358             nFound++;
00359             dropThisHit = 1;
00360           } else {   // handle hits individually
00361 
00362             if (8 == tkParam.lPrint) {
00363               std::cout<<"handle hits individually"<<  std::endl;
00364             }
00365             nFound++;
00366             if (fabs(ihit->resid(0)) > fabs(otherHot->resid(0)) ) {
00367               // turn off (inactivate) hit on this track
00368               lRefit = 1;
00369               //              ihit->hit()->setUnusedHit(ihit.get());
00370               //Should I be setting inactive, or deleting the hit???????
00371               const_cast<TrkHitOnTrk*>(ihit.get())->setActivity(0);
00372               dropThisHit = 1;
00373               if (8 == tkParam.lPrint) {
00374                 std::cout<<"dorp hit ";
00375                 const_cast<TrkHitOnTrk*>(ihit.get())->print(std::cout);
00376               }
00377               break;      // found other hit, so quit loop
00378             } else {
00379               // inactivate hit on other track
00380               refitTrack[otherIndex] = 1;
00381               //              otherHot->hit()->setUnusedHit(otherHot);
00382               otherHot->setActivity(0);
00383               if (8 == tkParam.lPrint) {
00384                 std::cout<<"inactive hit on other track";
00385                 const_cast<TrkHitOnTrk*>(ihit.get())->print(std::cout);
00386               }
00387               break;      // found other hit, so quit loop
00388             }
00389           } // end grouped/individual treatment
00390 
00391           if (dropThisHit == 1) break; // don't look for other matches since
00392           // this hit is now turned off
00393         } // end loop over nUsed
00394 
00395         // Quit if we've found all of the shared hits on this track
00396         if (lGroupHits && nFound == nMost  ||  nFound == nPrev) {
00397           if (8 == tkParam.lPrint) {
00398             std::cout<<"we've found all of the shared hits on this track,Quit"<<std::endl;
00399           }
00400           break;
00401         }
00402 
00403       }  // end loop over hits
00404 
00405       // Decide which track grouped hits belong with and inactivate accordingly
00406       if (lGroupHits) {
00407         if (8 == tkParam.lPrint) {
00408           cout << "nGroup: " << nMost << "  groupDiff: " << groupDiff << endl;
00409           cout << "Track: " << aRecoTrk.id() << "  nHit: "
00410             << hitList->nHit() << "  nActive: "
00411             << tkFit->nActive() << " chisq/dof: " <<
00412             tkFit->chisq()/(tkFit->nActive() - 5) << endl;
00413           TrkRecoTrk& othTrack = trkXRef[trackMost]->track();
00414           cout << "Track: "<< othTrack.id() << "  nHit: " <<
00415             othTrack.hits()->nHit() << "  nActive: " <<
00416             othTrack.fitResult()->nActive() << " chisq/dof: " <<
00417             othTrack.fitResult()->chisq() /
00418             (othTrack.fitResult()->nActive() - 5) << endl;
00419         }
00420 
00421         if (groupDiff > 0.0) {
00422           // inactivate hits on this track
00423           lRefit = 1;
00424           for (int ii = 0; ii < nMost; ii++) {
00425             TrkHitOnTrk *alink = theseHits[ii];
00426             TrkFundHit* hit = const_cast<TrkFundHit*> (alink->hit());
00427             if(hitList->removeHit(hit)){
00428               alink->hit()->setUnusedHit(alink);//yzhang 2009-11-03 open
00429             }
00430             //alink->setActivity(0);
00431           }
00432           if (8 == tkParam.lPrint) std::cout<<"inactive hits on this track, No."<<aRecoTrk.id()<<  std::endl;
00433         } else {
00434           // inactivate hits on other track
00435           refitTrack[trackMost] = 1;
00436           for (int ii = 0; ii < nMost; ii++) {
00437             TrkHitOnTrk *alink = thoseHits[ii];
00438             TrkFundHit* hit = const_cast<TrkFundHit*> (alink->hit());
00439             if(hitList->removeHit(hit)){
00440               alink->hit()->setUnusedHit(alink);//yzhang 2009-11-03 open
00441             }
00442             //alink->setActivity(0);
00443           }
00444           if (8 == tkParam.lPrint) std::cout<<"inactive hits on other track "<<   std::endl;
00445         }
00446         delete [] theseHits;
00447         delete [] thoseHits;
00448 
00449       } // end if lGroupHits
00450 
00451     } // end if nMost > 0
00452 
00453     //*********
00454     // Refit this track, if any hits have been dropped
00455     TrkErrCode fitResult;
00456     long index = -1;
00457     idMap.get(aRecoTrk.id(), index); assert (index >= 0);
00458 
00459     if (lRefit || refitTrack[index] == 1) {
00460       if (8 == tkParam.lPrint) {
00461         std::cout<<"after group ,refit track"<<aRecoTrk.id()<<  std::endl;
00462       }
00463       fitResult = hitList->fit();
00464       aRecoTrk.status()->addHistory(
00465           TrkErrCode(fitResult.success()?TrkErrCode::succeed:TrkErrCode::fail,14,"Arbitrated"), "MdcTrkRecon");
00466       if (fitResult.failure() && (8 == tkParam.lPrint )) {
00467         fitResult.print(std::cerr);
00468       }
00469 
00470 
00471       double chisqperDOF;
00472       bool badFit = true;
00473       if (fitResult.success()) {
00474         badFit = false;
00475         int nDOF = tkFit->nActive() - 5;
00476         if (nDOF > 5){
00477           chisqperDOF = tkFit->chisq() / nDOF;
00478         }else{
00479           chisqperDOF = tkFit->chisq();
00480         }
00481 
00482         if (chisqperDOF > tkParam.maxChisq) badFit = true;
00483         if (tkFit->nActive() < tkParam.minHits) badFit = true;
00484         double tem2 = (float) hitList->nHit() - tkFit->nActive();
00485         if (tkParam.lUseQualCuts) {
00486           if (tem2 >= tkParam.maxNmissTrack) badFit = true;
00487           if (tem2 /float(hitList->nHit()) > tkParam.maxNmissNorm){
00488             badFit = true;
00489           }
00490         }
00491         if(8== tkParam.lPrint) std::cout<<"fit quality:"<<
00492           " chisqperDof "<<chisqperDOF<<"?>"<<tkParam.maxChisq<<
00493             " nActive "<<tkFit->nActive()<<"?<"<<tkParam.minHits<<
00494             " nHit "<<hitList->nHit()<<" nhit-act "<<tem2<<"?>= nMiss "<<tkParam.maxNmissTrack<<
00495             " hit-act/nhit "<<tem2/float(hitList->nHit())<<"?> MissNorm "<<tkParam.maxNmissNorm
00496             <<  std::endl;
00497 
00498 
00499       }
00500       if (8 == tkParam.lPrint)  {
00501         cout << "Refitting track " << aRecoTrk.id() << " success = "
00502           << fitResult.success() << "\n";
00503       }
00504       // If the track no longer passes cuts, delete it
00505       if (fitResult.failure() || badFit ) {
00506         nDeleted++;
00507         //  Don't change the track list while we're iterating through it!
00508         //      remove(atrack);
00509         //int id = aRecoTrk.id();
00510         if (8 == tkParam.lPrint) {
00511           cout << "fitResult.failure? "<<fitResult.failure()
00512             <<" badFit? "<<badFit <<" Killing tkNo " << itrack << endl;
00513         }
00514         delete &(atrack->track());    // Delete the RecoTrk inside atrack
00515         atrack->setTrack(0);
00516         trksToKill.push_back(atrack);
00517         continue;
00518       }
00519     } // end if lRefit
00520 
00521     if (lGroupHits) goto restart;
00522 
00523   } // end loop over tracks
00524   if (8 == tkParam.lPrint) std::cout<<"end of loop over tracks"<<  std::endl;
00525 
00526   // Remove dead track husks
00527   for (int itk = 0; itk < (int)trksToKill.size(); itk++) {
00528     remove(trksToKill[itk]);
00529     if (8 == tkParam.lPrint) std::cout<<"remode dead track No."<<itk<<  std::endl;
00530   }
00531   if (8 == tkParam.lPrint) std::cout<<"---end of arbitrateHits"<<  std::endl;
00532 
00533   delete [] usedInTrackNum;
00534   delete [] refitTrack;
00535   delete [] trkXRef;
00536   return nDeleted;
00537 }

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

Implemented in MdcTrackList, MdcTrackListCsmc, MdcTrackList, and MdcTrackListCsmc.

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

Implemented in MdcTrackList, MdcTrackListCsmc, MdcTrackList, and MdcTrackListCsmc.

void MdcTrackListBase::dropMultiHotInLayer const MdcTrack tk  ) 
 

Reimplemented in MdcTrackList, and MdcTrackList.

void MdcTrackListBase::dropMultiHotInLayer const MdcTrack tk  ) 
 

Reimplemented in MdcTrackList, and MdcTrackList.

void MdcTrackListBase::newParams const MdcTrackParams tkPar  ) 
 

void MdcTrackListBase::newParams const MdcTrackParams tkPar  ) 
 

00541                                                        {
00542   //**************************************************************************
00543   tkParam = tkPar;
00544 }

int MdcTrackListBase::nTrack  )  const [inline]
 

00039 {return length();}

int MdcTrackListBase::nTrack  )  const [inline]
 

00039 {return length();}

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

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

void MdcTrackListBase::plot  )  const
 

void MdcTrackListBase::plot  )  const
 

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, and MdcTrackListCsmc.

void MdcTrackListBase::remove MdcTrack atrack  ) 
 

Reimplemented in MdcTrackListCsmc, and MdcTrackListCsmc.

00548                                            {
00549   //--------------------------------------------------------------------
00550   if (atrack != 0) {
00551     HepAList<MdcTrack>::remove( atrack );
00552     delete atrack;
00553   }
00554 }

void MdcTrackListBase::setD0Cut double  d0Cut  )  [inline]
 

00057 {m_d0Cut = d0Cut;}//yzhang add 

void MdcTrackListBase::setD0Cut double  d0Cut  )  [inline]
 

00057 {m_d0Cut = d0Cut;}//yzhang add 

void MdcTrackListBase::setPlot int  plotFlag  )  [inline]
 

00040 { tkParam.lPlot = plotFlag;};

void MdcTrackListBase::setPlot int  plotFlag  )  [inline]
 

00040 { tkParam.lPlot = plotFlag;};

void MdcTrackListBase::setPtCut double  ptCut  )  [inline]
 

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

void MdcTrackListBase::setPtCut double  ptCut  )  [inline]
 

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

void MdcTrackListBase::setZ0Cut double  z0Cut  )  [inline]
 

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

void MdcTrackListBase::setZ0Cut double  z0Cut  )  [inline]
 

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

void MdcTrackListBase::store RecMdcTrackCol ,
RecMdcHitCol
 

void MdcTrackListBase::store RecMdcTrackCol ,
RecMdcHitCol
 

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]
 

void MdcTrackListBase::transferTrack  )  [private]
 

00558                                 {
00559   //**************************************************************************
00560 
00561 }


Member Data Documentation

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

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

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

MdcTrackParams MdcTrackListBase::tkParam [protected]
 


The documentation for this class was generated from the following files:
Generated on Wed Feb 2 16:29:09 2011 for BOSS6.5.5 by  doxygen 1.3.9.1