CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Public Member Functions | Protected Member Functions | Protected Attributes | Private Member Functions
cms::CkfTrackCandidateMakerBase Class Reference

#include <CkfTrackCandidateMakerBase.h>

Inheritance diagram for cms::CkfTrackCandidateMakerBase:
cms::CkfDebugTrackCandidateMaker cms::CkfTrackCandidateMaker cms::CkfTrajectoryMaker

Public Member Functions

virtual void beginRunBase (edm::Run &, edm::EventSetup const &es)
 
 CkfTrackCandidateMakerBase (const edm::ParameterSet &conf)
 
virtual void produceBase (edm::Event &e, const edm::EventSetup &es)
 
virtual ~CkfTrackCandidateMakerBase ()
 

Protected Member Functions

virtual void countSeedsDebugger ()
 
virtual void deleteAssocDebugger ()
 
virtual
TrajectorySeedCollection::const_iterator 
lastSeed (TrajectorySeedCollection const &theSeedColl)
 
virtual void printHitsDebugger (edm::Event &e)
 

Protected Attributes

bool cleanTrajectoryAfterInOut
 
edm::ParameterSet conf_
 
bool doSeedingRegionRebuilding
 
edm::ESHandle
< GeometricSearchTracker
theGeomSearchTracker
 
TransientInitialStateEstimatortheInitialState
 
edm::ESHandle< MagneticFieldtheMagField
 
unsigned int theMaxNSeeds
 
const NavigationSchooltheNavigationSchool
 
std::string theNavigationSchoolName
 
RedundantSeedCleanertheSeedCleaner
 
edm::InputTag theSeedLabel
 
bool theTrackCandidateOutput
 
const TrajectoryBuildertheTrajectoryBuilder
 
std::string theTrajectoryBuilderName
 
const TrajectoryCleanertheTrajectoryCleaner
 
std::string theTrajectoryCleanerName
 
bool theTrajectoryOutput
 
bool useSplitting
 

Private Member Functions

void setEventSetup (const edm::EventSetup &es)
 Initialize EventSetup objects at each event. More...
 

Detailed Description

Definition at line 27 of file CkfTrackCandidateMakerBase.h.

Constructor & Destructor Documentation

cms::CkfTrackCandidateMakerBase::CkfTrackCandidateMakerBase ( const edm::ParameterSet conf)
explicit

Definition at line 43 of file CkfTrackCandidateMakerBase.cc.

References edm::ParameterSet::getParameter(), and theSeedLabel.

43  :
44 
45  conf_(conf),
47  theTrajectoryOutput(false),
48  useSplitting(conf.getParameter<bool>("useHitsSplitting")),
49  doSeedingRegionRebuilding(conf.getParameter<bool>("doSeedingRegionRebuilding")),
50  cleanTrajectoryAfterInOut(conf.getParameter<bool>("cleanTrajectoryAfterInOut")),
51  theMaxNSeeds(conf.getParameter<unsigned int>("maxNSeeds")),
52  theTrajectoryBuilderName(conf.getParameter<std::string>("TrajectoryBuilder")),
54  theTrajectoryCleanerName(conf.getParameter<std::string>("TrajectoryCleaner")),
56  theInitialState(0),
57  theNavigationSchoolName(conf.getParameter<std::string>("NavigationSchool")),
60  {
61  //produces<TrackCandidateCollection>();
62  // old configuration totally descoped.
63  // if (!conf.exists("src"))
64  // theSeedLabel = InputTag(conf_.getParameter<std::string>("SeedProducer"),conf_.getParameter<std::string>("SeedLabel"));
65  // else
67  }
T getParameter(std::string const &) const
const TrajectoryBuilder * theTrajectoryBuilder
const TrajectoryCleaner * theTrajectoryCleaner
const NavigationSchool * theNavigationSchool
TransientInitialStateEstimator * theInitialState
cms::CkfTrackCandidateMakerBase::~CkfTrackCandidateMakerBase ( )
virtual

Definition at line 71 of file CkfTrackCandidateMakerBase.cc.

References theInitialState, and theSeedCleaner.

71  {
72  delete theInitialState;
73  if (theSeedCleaner) delete theSeedCleaner;
74  }
TransientInitialStateEstimator * theInitialState

Member Function Documentation

void cms::CkfTrackCandidateMakerBase::beginRunBase ( edm::Run r,
edm::EventSetup const &  es 
)
virtual

Definition at line 76 of file CkfTrackCandidateMakerBase.cc.

References conf_, edm::hlt::Exception, edm::ParameterSet::getParameter(), and theSeedCleaner.

Referenced by cms::CkfDebugTrackCandidateMaker::beginRun(), cms::CkfTrackCandidateMaker::beginRun(), and cms::CkfTrajectoryMaker::beginRun().

77  {
78  std::string cleaner = conf_.getParameter<std::string>("RedundantSeedCleaner");
79  if (cleaner == "SeedCleanerByHitPosition") {
81  } else if (cleaner == "SeedCleanerBySharedInput") {
83  } else if (cleaner == "CachingSeedCleanerByHitPosition") {
85  } else if (cleaner == "CachingSeedCleanerBySharedInput") {
87  } else if (cleaner == "none") {
88  theSeedCleaner = 0;
89  } else {
90  throw cms::Exception("RedundantSeedCleaner not found", cleaner);
91  }
92  }
T getParameter(std::string const &) const
virtual void cms::CkfTrackCandidateMakerBase::countSeedsDebugger ( )
inlineprotectedvirtual

Reimplemented in cms::CkfDebugTrackCandidateMaker.

Definition at line 71 of file CkfTrackCandidateMakerBase.h.

Referenced by produceBase().

71 {;}
virtual void cms::CkfTrackCandidateMakerBase::deleteAssocDebugger ( )
inlineprotectedvirtual

Reimplemented in cms::CkfDebugTrackCandidateMaker.

Definition at line 72 of file CkfTrackCandidateMakerBase.h.

Referenced by produceBase().

72 {;}
virtual TrajectorySeedCollection::const_iterator cms::CkfTrackCandidateMakerBase::lastSeed ( TrajectorySeedCollection const &  theSeedColl)
inlineprotectedvirtual

Definition at line 69 of file CkfTrackCandidateMakerBase.h.

69 {return theSeedColl.end();}
virtual void cms::CkfTrackCandidateMakerBase::printHitsDebugger ( edm::Event e)
inlineprotectedvirtual

Reimplemented in cms::CkfDebugTrackCandidateMaker.

Definition at line 70 of file CkfTrackCandidateMakerBase.h.

Referenced by produceBase().

70 {;}
void cms::CkfTrackCandidateMakerBase::produceBase ( edm::Event e,
const edm::EventSetup es 
)
virtual

Definition at line 125 of file CkfTrackCandidateMakerBase.cc.

References RedundantSeedCleaner::add(), TrajectoryCleaner::clean(), cleanTrajectoryAfterInOut, countSeedsDebugger(), deleteAssocDebugger(), RedundantSeedCleaner::done(), doSeedingRegionRebuilding, PrintoutHelper::dumpCandidates(), edm::EventSetup::get(), edm::Event::getByLabel(), RedundantSeedCleaner::good(), RedundantSeedCleaner::init(), TransientInitialStateEstimator::innerState(), TrajectoryStateOnSurface::isValid(), Trajectory::isValid(), j, LogDebug, LogTrace, convertSQLitetoXML_cfg::output, TrajectoryStateTransform::persistentState(), printHitsDebugger(), edm::OwnVector< T, P >::push_back(), edm::Event::put(), TrajectoryBuilder::rebuildSeedingRegion(), PrintoutHelper::regressionTest(), edm::OwnVector< T, P >::reserve(), TrajectoryBuilder::setEvent(), setEventSetup(), evf::utils::state, theInitialState, theMaxNSeeds, theNavigationSchool, theSeedCleaner, theSeedLabel, theTrackCandidateOutput, theTrajectoryBuilder, theTrajectoryCleaner, theTrajectoryOutput, patCandidatesForDimuonsSequences_cff::tracker, TrajectoryBuilder::trajectories(), and useSplitting.

Referenced by cms::CkfDebugTrackCandidateMaker::produce(), cms::CkfTrackCandidateMaker::produce(), and cms::CkfTrajectoryMaker::produce().

126  {
127  // getting objects from the EventSetup
128  setEventSetup( es );
129 
130  // set the correct navigation
132 
133  // propagator
134  edm::ESHandle<Propagator> thePropagator;
135  es.get<TrackingComponentsRecord>().get("AnyDirectionAnalyticalPropagator",
136  thePropagator);
137 
138  // method for Debugging
140 
141  // Step A: set Event for the TrajectoryBuilder
143 
144  // Step B: Retrieve seeds
145 
147  e.getByLabel(theSeedLabel, collseed);
148 
149  // Step C: Create empty output collection
150  std::auto_ptr<TrackCandidateCollection> output(new TrackCandidateCollection);
151  std::auto_ptr<std::vector<Trajectory> > outputT (new std::vector<Trajectory>());
152 
153  if ( (*collseed).size()>theMaxNSeeds ) {
154  LogError("TooManySeeds")<<"Exceeded maximum numeber of seeds! theMaxNSeeds="<<theMaxNSeeds<<" nSeed="<<(*collseed).size();
156  if (theTrajectoryOutput){e.put(outputT);}
157  return;
158  }
159 
160  // Step D: Invoke the building algorithm
161  if ((*collseed).size()>0){
162 
163  vector<Trajectory> rawResult;
164  rawResult.reserve(collseed->size() * 4);
165 
166  if (theSeedCleaner) theSeedCleaner->init( &rawResult );
167 
168  // method for debugging
170 
171  vector<Trajectory> theTmpTrajectories;
172 
173  // Loop over seeds
174  size_t collseed_size = collseed->size();
175  for (size_t j = 0; j < collseed_size; j++){
176 
177  // Check if seed hits already used by another track
178  if (theSeedCleaner && !theSeedCleaner->good( &((*collseed)[j])) ) {
179  LogDebug("CkfTrackCandidateMakerBase")<<" Seed cleaning kills seed "<<j;
180  continue;
181  }
182 
183  // Build trajectory from seed outwards
184  theTmpTrajectories.clear();
185  theTrajectoryBuilder->trajectories( (*collseed)[j], theTmpTrajectories );
186 
187 
188  LogDebug("CkfPattern") << "======== In-out trajectory building found " << theTmpTrajectories.size()
189  << " trajectories from seed " << j << " ========"<<endl
190  <<PrintoutHelper::dumpCandidates(theTmpTrajectories);
191 
193 
194  // Select the best trajectory from this seed (declare others invalid)
195  theTrajectoryCleaner->clean(theTmpTrajectories);
196 
197  LogDebug("CkfPattern") << "======== In-out trajectory cleaning gave the following valid trajectories from seed "
198  << j << " ========"<<endl
199  << PrintoutHelper::dumpCandidates(theTmpTrajectories);
200  }
201 
202  // Optionally continue building trajectory back through
203  // seed and if possible further inwards.
205  theTrajectoryBuilder->rebuildSeedingRegion((*collseed)[j],theTmpTrajectories);
206 
207  LogDebug("CkfPattern") << "======== Out-in trajectory building found " << theTmpTrajectories.size()
208  << " valid/invalid trajectories from seed " << j << " ========"<<endl
209  <<PrintoutHelper::dumpCandidates(theTmpTrajectories);
210  }
211 
212  // Select the best trajectory from this seed (after seed region rebuilding, can be more than one)
213  theTrajectoryCleaner->clean(theTmpTrajectories);
214 
215  LogDebug("CkfPattern") << "======== Trajectory cleaning gave the following valid trajectories from seed "
216  << j << " ========"<<endl
217  <<PrintoutHelper::dumpCandidates(theTmpTrajectories);
218 
219  for(vector<Trajectory>::iterator it=theTmpTrajectories.begin();
220  it!=theTmpTrajectories.end(); it++){
221  if( it->isValid() ) {
222  it->setSeedRef(collseed->refAt(j));
223  // Store trajectory
224  rawResult.push_back(*it);
225  // Tell seed cleaner which hits this trajectory used.
226  //TO BE FIXED: this cut should be configurable via cfi file
227  if (theSeedCleaner && it->foundHits()>3) theSeedCleaner->add( & (*it) );
228  //if (theSeedCleaner ) theSeedCleaner->add( & (*it) );
229  }
230  }
231 
232  theTmpTrajectories.clear();
233 
234  LogDebug("CkfPattern") << "rawResult trajectories found so far = " << rawResult.size();
235  }
236  // end of loop over seeds
237 
239 
240  // Step E: Clean the results to avoid duplicate tracks
241  // Rejected ones just flagged as invalid.
242  theTrajectoryCleaner->clean(rawResult);
243 
244  LogDebug("CkfPattern") << "======== Final cleaning of entire event found " << rawResult.size()
245  << " valid/invalid trajectories ======="<<endl
246  <<PrintoutHelper::dumpCandidates(rawResult);
247 
248  LogDebug("CkfPattern") << "removing invalid trajectories.";
249 
250  vector<Trajectory> & unsmoothedResult(rawResult);
251  unsmoothedResult.erase(std::remove_if(unsmoothedResult.begin(),unsmoothedResult.end(),
252  std::not1(std::mem_fun_ref(&Trajectory::isValid))),
253  unsmoothedResult.end());
254 
255 
256  // for (vector<Trajectory>::const_iterator itraw = rawResult.begin();
257  // itraw != rawResult.end(); itraw++) {
258  //if((*itraw).isValid()) unsmoothedResult.push_back( *itraw);
259  //}
260 
261  //analyseCleanedTrajectories(unsmoothedResult);
262 
264  // Step F: Convert to TrackCandidates
265  output->reserve(unsmoothedResult.size());
266  for (vector<Trajectory>::const_iterator it = unsmoothedResult.begin();
267  it != unsmoothedResult.end(); it++) {
268 
270  //it->recHitsV(thits);
271  LogDebug("CkfPattern") << "retrieving "<<(useSplitting?"splitted":"un-splitted")<<" hits from trajectory";
272  it->recHitsV(thits,useSplitting);
274  recHits.reserve(thits.size());
275  LogDebug("CkfPattern") << "cloning hits into new collection.";
276  for (Trajectory::RecHitContainer::const_iterator hitIt = thits.begin();
277  hitIt != thits.end(); hitIt++) {
278  recHits.push_back( (**hitIt).hit()->clone());
279  }
280 
281  LogDebug("CkfPattern") << "getting initial state.";
282  const bool doBackFit = !doSeedingRegionRebuilding;
283  std::pair<TrajectoryStateOnSurface, const GeomDet*> initState =
284  theInitialState->innerState( *it , doBackFit);
285 
286  // temporary protection againt invalid initial states
287  if (! initState.first.isValid() || initState.second == 0) {
288  //cout << "invalid innerState, will not make TrackCandidate" << endl;
289  continue;
290  }
291 
293  if(useSplitting && (initState.second != thits.front()->det()) && thits.front()->det() ){
294  LogDebug("CkfPattern") << "propagating to hit front in case of splitting.";
295  TrajectoryStateOnSurface propagated = thePropagator->propagate(initState.first,thits.front()->det()->surface());
296  if (!propagated.isValid()) continue;
297  state = TrajectoryStateTransform().persistentState(propagated,
298  thits.front()->det()->geographicalId().rawId());
299  }
300 
301  if(!state) state = TrajectoryStateTransform().persistentState( initState.first,
302  initState.second->geographicalId().rawId());
303 
304  LogDebug("CkfPattern") << "pushing a TrackCandidate.";
305  output->push_back(TrackCandidate(recHits,it->seed(),*state,it->seedRef() ) );
306 
307  delete state;
308  }
309  }//output trackcandidates
310 
312  es.get<TrackerDigiGeometryRecord>().get(tracker);
313  LogTrace("CkfPattern|TrackingRegressionTest") << "========== CkfTrackCandidateMaker Info =========="
314  << "number of Seed: " << collseed->size()<<endl
315  <<PrintoutHelper::regressionTest(*tracker,unsmoothedResult);
316 
317 
318 
319  if (theTrajectoryOutput){ outputT->swap(unsmoothedResult);}
320 
321  }// end of ((*collseed).size()>0)
322 
323  // method for debugging
325 
326  // Step G: write output to file
328  if (theTrajectoryOutput){e.put(outputT);}
329  }
#define LogDebug(id)
static std::string dumpCandidates(collection &candidates)
virtual void rebuildSeedingRegion(const TrajectorySeed &, TrajectoryContainer &result) const
const TrajectoryBuilder * theTrajectoryBuilder
std::vector< TrackCandidate > TrackCandidateCollection
virtual void printHitsDebugger(edm::Event &e)
virtual void done()=0
Tells the cleaner that the seeds are finished, and so it can clear any cache it has.
virtual void add(const Trajectory *traj)=0
Informs the cleaner that a new trajectory has been made, in case the cleaner keeps a local collection...
virtual bool good(const TrajectorySeed *seed)=0
Returns true if the seed is not overlapping with another trajectory.
static std::string regressionTest(const TrackerGeometry &tracker, std::vector< Trajectory > &unsmoothedResult)
void push_back(D *&d)
Definition: OwnVector.h:288
const TrajectoryCleaner * theTrajectoryCleaner
const NavigationSchool * theNavigationSchool
OrphanHandle< PROD > put(std::auto_ptr< PROD > product)
Put a new product.
Definition: Event.h:84
virtual void clean(TrajectoryContainer &) const
int j
Definition: DBlmapReader.cc:9
PTrajectoryStateOnDet * persistentState(const TrajectoryStateOnSurface &ts, unsigned int detid) const
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
Definition: Event.h:359
#define LogTrace(id)
virtual TrajectoryContainer trajectories(const TrajectorySeed &) const =0
bool isValid() const
Definition: Trajectory.h:225
ConstRecHitContainer RecHitContainer
Definition: Trajectory.h:44
const T & get() const
Definition: EventSetup.h:55
TransientInitialStateEstimator * theInitialState
char state
Definition: procUtils.cc:75
void setEventSetup(const edm::EventSetup &es)
Initialize EventSetup objects at each event.
virtual void setEvent(const edm::Event &event) const =0
std::pair< TrajectoryStateOnSurface, const GeomDet * > innerState(const Trajectory &traj, bool doBackFit=true) const
virtual void init(const std::vector< Trajectory > *vect)=0
Provides the cleaner a pointer to the vector where trajectories are stored, in case it does not want ...
void reserve(size_t)
Definition: OwnVector.h:282
void cms::CkfTrackCandidateMakerBase::setEventSetup ( const edm::EventSetup es)
private

Initialize EventSetup objects at each event.

Definition at line 94 of file CkfTrackCandidateMakerBase.cc.

References conf_, edm::EventSetup::get(), edm::ParameterSet::getParameter(), edm::ESHandle< class >::product(), TransientInitialStateEstimator::setEventSetup(), theGeomSearchTracker, theInitialState, theMagField, theNavigationSchool, theNavigationSchoolName, theTrajectoryBuilder, theTrajectoryBuilderName, theTrajectoryCleaner, and theTrajectoryCleanerName.

Referenced by produceBase().

94  {
95 
96  //services
99 
100  if (!theInitialState){
101  // constructor uses the EventSetup, it must be in the setEventSetup were it has a proper value.
102  // get nested parameter set for the TransientInitialStateEstimator
103  ParameterSet tise_params = conf_.getParameter<ParameterSet>("TransientInitialStateEstimatorParameters") ;
104  theInitialState = new TransientInitialStateEstimator( es,tise_params);
105  }
106 
108 
109  edm::ESHandle<TrajectoryCleaner> trajectoryCleanerH;
110  es.get<TrajectoryCleaner::Record>().get(theTrajectoryCleanerName, trajectoryCleanerH);
111  theTrajectoryCleaner= trajectoryCleanerH.product();
112 
113  edm::ESHandle<NavigationSchool> navigationSchoolH;
114  es.get<NavigationSchoolRecord>().get(theNavigationSchoolName, navigationSchoolH);
115  theNavigationSchool = navigationSchoolH.product();
116 
117  // set the TrajectoryBuilder
118  edm::ESHandle<TrajectoryBuilder> theTrajectoryBuilderHandle;
119  es.get<CkfComponentsRecord>().get(theTrajectoryBuilderName,theTrajectoryBuilderHandle);
120  theTrajectoryBuilder = theTrajectoryBuilderHandle.product();
121 
122  }
T getParameter(std::string const &) const
void setEventSetup(const edm::EventSetup &es)
Call this at each event until this object will come from the EventSetup as it should.
const TrajectoryBuilder * theTrajectoryBuilder
edm::ESHandle< GeometricSearchTracker > theGeomSearchTracker
const TrajectoryCleaner * theTrajectoryCleaner
const NavigationSchool * theNavigationSchool
const T & get() const
Definition: EventSetup.h:55
T const * product() const
Definition: ESHandle.h:62
TransientInitialStateEstimator * theInitialState
edm::ESHandle< MagneticField > theMagField

Member Data Documentation

bool cms::CkfTrackCandidateMakerBase::cleanTrajectoryAfterInOut
protected

Definition at line 46 of file CkfTrackCandidateMakerBase.h.

Referenced by produceBase().

edm::ParameterSet cms::CkfTrackCandidateMakerBase::conf_
protected

Definition at line 40 of file CkfTrackCandidateMakerBase.h.

Referenced by beginRunBase(), and setEventSetup().

bool cms::CkfTrackCandidateMakerBase::doSeedingRegionRebuilding
protected

Definition at line 45 of file CkfTrackCandidateMakerBase.h.

Referenced by produceBase().

edm::ESHandle<GeometricSearchTracker> cms::CkfTrackCandidateMakerBase::theGeomSearchTracker
protected

Definition at line 59 of file CkfTrackCandidateMakerBase.h.

Referenced by setEventSetup().

TransientInitialStateEstimator* cms::CkfTrackCandidateMakerBase::theInitialState
protected
edm::ESHandle<MagneticField> cms::CkfTrackCandidateMakerBase::theMagField
protected

Definition at line 58 of file CkfTrackCandidateMakerBase.h.

Referenced by setEventSetup().

unsigned int cms::CkfTrackCandidateMakerBase::theMaxNSeeds
protected

Definition at line 48 of file CkfTrackCandidateMakerBase.h.

Referenced by produceBase().

const NavigationSchool* cms::CkfTrackCandidateMakerBase::theNavigationSchool
protected

Definition at line 62 of file CkfTrackCandidateMakerBase.h.

Referenced by produceBase(), and setEventSetup().

std::string cms::CkfTrackCandidateMakerBase::theNavigationSchoolName
protected

Definition at line 61 of file CkfTrackCandidateMakerBase.h.

Referenced by setEventSetup().

RedundantSeedCleaner* cms::CkfTrackCandidateMakerBase::theSeedCleaner
protected
edm::InputTag cms::CkfTrackCandidateMakerBase::theSeedLabel
protected

Definition at line 66 of file CkfTrackCandidateMakerBase.h.

Referenced by CkfTrackCandidateMakerBase(), and produceBase().

bool cms::CkfTrackCandidateMakerBase::theTrackCandidateOutput
protected
const TrajectoryBuilder* cms::CkfTrackCandidateMakerBase::theTrajectoryBuilder
protected
std::string cms::CkfTrackCandidateMakerBase::theTrajectoryBuilderName
protected

Definition at line 50 of file CkfTrackCandidateMakerBase.h.

Referenced by setEventSetup().

const TrajectoryCleaner* cms::CkfTrackCandidateMakerBase::theTrajectoryCleaner
protected

Definition at line 54 of file CkfTrackCandidateMakerBase.h.

Referenced by produceBase(), and setEventSetup().

std::string cms::CkfTrackCandidateMakerBase::theTrajectoryCleanerName
protected

Definition at line 53 of file CkfTrackCandidateMakerBase.h.

Referenced by setEventSetup().

bool cms::CkfTrackCandidateMakerBase::theTrajectoryOutput
protected
bool cms::CkfTrackCandidateMakerBase::useSplitting
protected

Definition at line 44 of file CkfTrackCandidateMakerBase.h.

Referenced by produceBase().