CMS 3D CMS Logo

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

#include <SETMuonSeedProducer.h>

Inheritance diagram for SETMuonSeedProducer:
edm::EDProducer edm::ProducerBase edm::EDConsumerBase edm::ProductRegistryHelper

Public Types

typedef
MuonTransientTrackingRecHit::MuonRecHitContainer 
MuonRecHitContainer
 
typedef std::vector< Trajectory * > TrajectoryContainer
 
- Public Types inherited from edm::EDProducer
typedef EDProducer ModuleType
 
- Public Types inherited from edm::ProducerBase
typedef
ProductRegistryHelper::TypeLabelList 
TypeLabelList
 

Public Member Functions

virtual void produce (edm::Event &, const edm::EventSetup &) override
 
 SETMuonSeedProducer (const edm::ParameterSet &)
 Constructor with Parameter set. More...
 
virtual ~SETMuonSeedProducer ()
 Destructor. More...
 
- Public Member Functions inherited from edm::EDProducer
 EDProducer ()
 
ModuleDescription const & moduleDescription () const
 
virtual ~EDProducer ()
 
- Public Member Functions inherited from edm::ProducerBase
 ProducerBase ()
 
void registerProducts (ProducerBase *, ProductRegistry *, ModuleDescription const &)
 
std::function< void(BranchDescription
const &)> 
registrationCallback () const
 used by the fwk to register list of products More...
 
virtual ~ProducerBase ()
 
- Public Member Functions inherited from edm::EDConsumerBase
 EDConsumerBase ()
 
ProductHolderIndexAndSkipBit indexFrom (EDGetToken, BranchType, TypeID const &) const
 
void itemsMayGet (BranchType, std::vector< ProductHolderIndexAndSkipBit > &) const
 
void itemsToGet (BranchType, std::vector< ProductHolderIndexAndSkipBit > &) const
 
std::vector
< ProductHolderIndexAndSkipBit >
const & 
itemsToGetFromEvent () const
 
void labelsForToken (EDGetToken iToken, Labels &oLabels) const
 
void modulesDependentUpon (const std::string &iProcessName, std::vector< const char * > &oModuleLabels) const
 
bool registeredToConsume (ProductHolderIndex, bool, BranchType) const
 
bool registeredToConsumeMany (TypeID const &, BranchType) const
 
void updateLookup (BranchType iBranchType, ProductHolderIndexHelper const &)
 
virtual ~EDConsumerBase ()
 

Private Member Functions

SETFilterfilter () const
 pre-filter More...
 
void setEvent (const edm::Event &)
 

Private Attributes

bool apply_prePruning
 
edm::EDGetTokenT< reco::BeamSpotbeamspotToken
 
edm::InputTag theBeamSpotTag
 
SETFiltertheFilter
 
SETPatternRecognitionthePatternRecognition
 
SETSeedFinder theSeedFinder
 
MuonServiceProxytheService
 
bool useSegmentsInTrajectory
 

Additional Inherited Members

- Static Public Member Functions inherited from edm::EDProducer
static const std::string & baseType ()
 
static void fillDescriptions (ConfigurationDescriptions &descriptions)
 
static void prevalidate (ConfigurationDescriptions &descriptions)
 
- Protected Member Functions inherited from edm::ProducerBase
void callWhenNewProductsRegistered (std::function< void(BranchDescription const &)> const &func)
 
- Protected Member Functions inherited from edm::EDConsumerBase
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > consumes (edm::InputTag const &tag)
 
EDGetToken consumes (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken consumes (TypeToGet const &id, edm::InputTag const &tag)
 
ConsumesCollector consumesCollector ()
 Use a ConsumesCollector to gather consumes information from helper functions. More...
 
template<typename ProductType , BranchType B = InEvent>
void consumesMany ()
 
void consumesMany (const TypeToGet &id)
 
template<BranchType B>
void consumesMany (const TypeToGet &id)
 
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > mayConsume (edm::InputTag const &tag)
 
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 

Detailed Description

I. Bloch, E. James, S. Stoynev

Definition at line 30 of file SETMuonSeedProducer.h.

Member Typedef Documentation

Definition at line 33 of file SETMuonSeedProducer.h.

Definition at line 34 of file SETMuonSeedProducer.h.

Constructor & Destructor Documentation

SETMuonSeedProducer::SETMuonSeedProducer ( const edm::ParameterSet parameterSet)

Constructor with Parameter set.

Definition at line 30 of file SETMuonSeedProducer.cc.

References edm::ParameterSet::addUntrackedParameter(), apply_prePruning, beamspotToken, edm::EDConsumerBase::consumesCollector(), edm::ParameterSet::getParameter(), LogTrace, metname, MuonServiceProxy_cff::MuonServiceProxy, SETPatternRecognition::setServiceProxy(), SETSeedFinder::setServiceProxy(), theBeamSpotTag, theFilter, thePatternRecognition, theSeedFinder, theService, and useSegmentsInTrajectory.

31 : theSeedFinder(parameterSet),
32  theBeamSpotTag(parameterSet.getParameter<edm::InputTag>("beamSpotTag"))
33 {
34 
36  thePatternRecognition = new SETPatternRecognition(parameterSet,iC);
37 
38  const string metname = "Muon|RecoMuon|SETMuonSeedSeed";
39  //std::cout<<" The SET SEED producer started."<<std::endl;
40 
41  ParameterSet serviceParameters = parameterSet.getParameter<ParameterSet>("ServiceParameters");
42  theService = new MuonServiceProxy(serviceParameters);
44  theSeedFinder.setServiceProxy(theService);
45  // Parameter set for the Builder
46  ParameterSet trajectoryBuilderParameters = parameterSet.getParameter<ParameterSet>("SETTrajBuilderParameters");
47 
48  LogTrace(metname) << "constructor called" << endl;
49 
50  apply_prePruning = trajectoryBuilderParameters.getParameter<bool>("Apply_prePruning");
51 
52  useSegmentsInTrajectory = trajectoryBuilderParameters.getParameter<bool>("UseSegmentsInTrajectory");
53 
54  // The inward-outward fitter (starts from seed state)
55  ParameterSet filterPSet = trajectoryBuilderParameters.getParameter<ParameterSet>("FilterParameters");
56  filterPSet.addUntrackedParameter("UseSegmentsInTrajectory", useSegmentsInTrajectory);
57  theFilter = new SETFilter(filterPSet,theService);
58 
59  //----
60 
61 
62  beamspotToken = consumes<reco::BeamSpot>(theBeamSpotTag);
63  produces<TrajectorySeedCollection>();
64 
65 }
void setServiceProxy(MuonServiceProxy *service)
Definition: SETSeedFinder.h:32
SETSeedFinder theSeedFinder
T getParameter(std::string const &) const
edm::EDGetTokenT< reco::BeamSpot > beamspotToken
const std::string metname
edm::InputTag theBeamSpotTag
ConsumesCollector consumesCollector()
Use a ConsumesCollector to gather consumes information from helper functions.
SETPatternRecognition * thePatternRecognition
void setServiceProxy(MuonServiceProxy *service)
#define LogTrace(id)
void addUntrackedParameter(std::string const &name, T const &value)
Definition: ParameterSet.h:206
MuonServiceProxy * theService
SETMuonSeedProducer::~SETMuonSeedProducer ( )
virtual

Destructor.

Definition at line 67 of file SETMuonSeedProducer.cc.

References LogTrace, theFilter, thePatternRecognition, and theService.

67  {
68 
69  LogTrace("Muon|RecoMuon|SETMuonSeedProducer")
70  << "SETMuonSeedProducer destructor called" << endl;
71 
72  if(theFilter) delete theFilter;
73  if (theService) delete theService;
75 
76 }
SETPatternRecognition * thePatternRecognition
#define LogTrace(id)
MuonServiceProxy * theService

Member Function Documentation

SETFilter* SETMuonSeedProducer::filter ( ) const
inlineprivate

pre-filter

Definition at line 51 of file SETMuonSeedProducer.h.

References theFilter.

Referenced by produce().

51 {return theFilter;}
void SETMuonSeedProducer::produce ( edm::Event event,
const edm::EventSetup eventSetup 
)
overridevirtual

Implements edm::EDProducer.

Definition at line 78 of file SETMuonSeedProducer.cc.

References alongMomentum, apply_prePruning, SiPixelRawToDigiRegional_cfi::beamSpot, beamspotToken, SETFilter::buildTrajectoryMeasurements(), debug, dir, MuonPatternRecoDumper::dumpLayer(), SETSeedFinder::fillSeedCandidates(), filter(), SETSeedFinder::findAllValidSets(), SETFilter::fwfit_SET(), edm::HandleBase::isValid(), SETFilter::layers(), SETSeedFinder::limitCombinatorics(), LogTrace, metname, oppositeToMomentum, convertSQLitetoXML_cfg::output, trajectoryStateTransform::persistentState(), SETPatternRecognition::produce(), edm::OwnVector< T, P >::push_back(), SETFilter::reset(), fileCollector::seed, MuonSeedVFinder::setBeamSpot(), setEvent(), SETSeedFinder::sortByLayer(), theFilter, thePatternRecognition, theSeedFinder, theService, SETFilter::transform(), SETFilter::transformLight(), useSegmentsInTrajectory, SETSeedFinder::validSetsPrePruning(), reco::BeamSpot::x0(), reco::BeamSpot::y0(), and reco::BeamSpot::z0().

78  {
79  //std::cout<<" start producing..."<<std::endl;
80  const string metname = "Muon|RecoMuon|SETMuonSeedSeed";
81 
83 
84  //Get the CSC Geometry :
85  theService->update(eventSetup);
86 
87  std::auto_ptr<TrajectorySeedCollection> output(new TrajectorySeedCollection());
88 
90 
91  setEvent(event);
92 
94  edm::Handle<reco::BeamSpot> beamSpotHandle;
95  event.getByToken(beamspotToken, beamSpotHandle);
96  if ( beamSpotHandle.isValid() )
97  {
98  beamSpot = *beamSpotHandle;
99 
100  } else
101  {
102  edm::LogInfo("MuonSeedGenerator")
103  << "No beam spot available from EventSetup \n";
104  }
105 
106  // make it a vector so we can subtract it from position vectors
107  GlobalVector gv(beamSpot.x0(), beamSpot.y0(), beamSpot.z0());
109 
110  bool fwFitFailed = true;
111 
112  std::vector <SeedCandidate> seedCandidates_AllChosen;
113  std::vector< MuonRecHitContainer > MuonRecHitContainer_clusters;
114  //---- this is "clustering"; later a trajectory can not use hits from different clusters
115  thePatternRecognition->produce(event, eventSetup, MuonRecHitContainer_clusters);
116 
117  //std::cout<<"We have formed "<<MuonRecHitContainer_clusters.size()<<" clusters"<<std::endl;
118  //---- for each cluster,
119  for(unsigned int cluster = 0; cluster < MuonRecHitContainer_clusters.size(); ++cluster) {
120  //std::cout<<" This is cluster number : "<<cluster<<std::endl;
121  std::vector <SeedCandidate> seedCandidates_inCluster;
122  //---- group hits in detector layers (if in same layer); the idea is that
123  //---- some hits could not belong to a track simultaneously - these will be in a
124  //---- group; two hits from one and the same group will not go to the same track
125  std::vector< MuonRecHitContainer > MuonRecHitContainer_perLayer = theSeedFinder.sortByLayer(MuonRecHitContainer_clusters[cluster]);
126  //---- Add protection against huge memory consumption
127  //---- Delete busy layers if needed (due to combinatorics)
128  theSeedFinder.limitCombinatorics(MuonRecHitContainer_perLayer);
129  //---- build all possible combinations (valid sets)
130  std::vector <MuonRecHitContainer> allValidSets = theSeedFinder.findAllValidSets(MuonRecHitContainer_perLayer);
131  if(apply_prePruning){
132  //---- remove "wild" segments from the combination
133  theSeedFinder.validSetsPrePruning(allValidSets);
134  }
135 
136  //---- build the appropriate output: seedCandidates_inCluster
137  //---- if too many (?) valid sets in a cluster - skip it
138  if(allValidSets.size()<500){// hardcoded - remove it
139  seedCandidates_inCluster = theSeedFinder.fillSeedCandidates(allValidSets);
140  }
141  //---- find the best valid combinations using simple (no propagation errors) chi2-fit
142  //std::cout<<" Found "<<seedCandidates_inCluster.size()<<" valid sets in the current cluster."<<std::endl;
143  if(!seedCandidates_inCluster.empty()){
144  //---- this is the forward fitter (segments); choose which of the SETs in a cluster to be considered further
145  std::vector < SeedCandidate> bestSets_inCluster;
146  fwFitFailed = !(filter()->fwfit_SET(seedCandidates_inCluster, bestSets_inCluster));
147 
148  //---- has the fit failed? continue to the next cluster instead of returning the empty trajectoryContainer and stop the loop IBL 080903
149  if(fwFitFailed){
150  //std::cout<<" fwfit_SET failed!"<<std::endl;
151  continue;
152  }
153  for(unsigned int iSet = 0; iSet<bestSets_inCluster.size();++iSet){
154  seedCandidates_AllChosen.push_back(bestSets_inCluster[iSet]);
155  }
156  }
157  }
158  //---- loop over all the SETs candidates
159  for(unsigned int iMuon = 0;iMuon<seedCandidates_AllChosen.size();++iMuon){
160  //std::cout<<" chosen iMuon = "<<iMuon<<std::endl;
161  Trajectory::DataContainer finalCandidate;
162  SeedCandidate * aFinalSet = &(seedCandidates_AllChosen[iMuon]);
163  fwFitFailed = !(filter()->buildTrajectoryMeasurements(aFinalSet, finalCandidate));
164  if(fwFitFailed ){
165  //std::cout<<" buildTrajectoryMeasurements failed!"<<std::endl;
166  continue;
167  }
168  //---- are there measurements (or detLayers) used at all?
169  if( filter()->layers().size() )
170  LogTrace(metname) << debug.dumpLayer( filter()->lastDetLayer());
171  else {
172  continue;
173  }
174  //std::cout<<" chambers used - all : "<<filter()->getTotalChamberUsed()<<", DT : "<<filter()->getDTChamberUsed()<<
175  //", CSC : "<<filter()->getCSCChamberUsed()<<", RPC : "<<filter()->getRPCChamberUsed()<<std::endl;
176  //---- ask for some "reasonable" conditions to build a STA muon;
177  //---- (totalChambers >= 2, dtChambers + cscChambers >0)
178  if (filter()->goodState()) {
180  TrajectoryStateOnSurface firstTSOS;
181  bool conversionPassed = false;
183  //---- transforms set of segment measurements to a set of rechit measurements
184  conversionPassed = filter()->transform(finalCandidate, hitContainer, firstTSOS);
185  }
186  else{
187  //---- transforms set of segment measurements to a set of segment measurements
188  conversionPassed = filter()->transformLight(finalCandidate, hitContainer, firstTSOS);
189  }
190  if ( conversionPassed && !finalCandidate.empty() && !hitContainer.empty()) {
191  //---- doesn't work...
192  //output->push_back( theSeedFinder.makeSeed(firstTSOS, hitContainer) );
193 
194  edm::OwnVector<TrackingRecHit> recHitsContainer;
195  for(unsigned int iHit = 0;iHit < hitContainer.size();++iHit){
196  recHitsContainer.push_back(hitContainer.at(iHit)->hit()->clone());
197  }
200  dir = alongMomentum;// why forward (for rechits) later?
201  }
202 
203  PTrajectoryStateOnDet seedTSOS =
204  trajectoryStateTransform::persistentState( firstTSOS, hitContainer.at(0)->geographicalId().rawId());
205  TrajectorySeed seed(seedTSOS,recHitsContainer,dir);
206 
207  //MuonPatternRecoDumper debug;
208  //std::cout<<" firstTSOS (not IP) = "<<debug.dumpTSOS(firstTSOS)<<std::endl;
209  //std::cout<<" hits(from range) = "<<range.second-range.first<<" hits (from size) = "<<hitContainer.size()<<std::endl;
210  //for(unsigned int iRH=0;iRH<hitContainer.size();++iRH){
211  //std::cout<<" RH = "<<iRH+1<<" globPos = "<<hitContainer.at(iRH)->globalPosition()<<std::endl;
212  //}
213  output->push_back(seed);
214  }
215  else{
216  //std::cout<<" Transformation from TrajectoryMeasurements to RecHitContainer faild - skip "<<std::endl;
217  continue;
218  }
219  }else{
220  //std::cout<<" Not enough (as defined) measurements to build trajectory - skip"<<std::endl;
221  continue;
222  }
223  }
224  event.put(output);
225  theFilter->reset();
226 }
SETSeedFinder theSeedFinder
void setBeamSpot(const GlobalVector &gv)
bool transform(Trajectory::DataContainer &measurements_segments, TransientTrackingRecHit::ConstRecHitContainer &hitContainer, TrajectoryStateOnSurface &firstTSOS)
transforms &quot;segment trajectory&quot; to &quot;rechit container&quot;
Definition: SETFilter.cc:167
double z0() const
z coordinate
Definition: BeamSpot.h:68
bool transformLight(Trajectory::DataContainer &measurements_segments, TransientTrackingRecHit::ConstRecHitContainer &hitContainer, TrajectoryStateOnSurface &firstTSOS)
transforms &quot;segment trajectory&quot; to &quot;segment container&quot;
Definition: SETFilter.cc:215
edm::EDGetTokenT< reco::BeamSpot > beamspotToken
std::string dumpLayer(const DetLayer *layer) const
const std::string metname
void reset()
Definition: SETFilter.cc:69
PTrajectoryStateOnDet persistentState(const TrajectoryStateOnSurface &ts, unsigned int detid)
bool buildTrajectoryMeasurements(SeedCandidate *validSegmentsSet, Trajectory::DataContainer &finalCandidate)
from SeedCandidate to DataContainer only
Definition: SETFilter.cc:133
PropagationDirection
std::vector< MuonRecHitContainer > sortByLayer(MuonRecHitContainer &cluster) const
std::vector< const DetLayer * > layers() const
return the layer used for the refit
Definition: SETFilter.h:104
void push_back(D *&d)
Definition: OwnVector.h:274
std::vector< TrajectoryMeasurement > DataContainer
Definition: Trajectory.h:42
bool fwfit_SET(std::vector< SeedCandidate > &validSegmentsSet_in, std::vector< SeedCandidate > &validSegmentsSet_out)
Perform the SET inner-outward fitting.
Definition: SETFilter.cc:98
std::vector< TrajectorySeed > TrajectorySeedCollection
SETPatternRecognition * thePatternRecognition
bool isValid() const
Definition: HandleBase.h:76
#define LogTrace(id)
std::vector< ConstRecHitPointer > ConstRecHitContainer
void limitCombinatorics(std::vector< MuonRecHitContainer > &MuonRecHitContainer_perLayer)
#define debug
Definition: HDRShower.cc:19
void setEvent(const edm::Event &)
std::vector< MuonRecHitContainer > findAllValidSets(const std::vector< MuonRecHitContainer > &MuonRecHitContainer_perLayer)
MuonServiceProxy * theService
virtual void produce(const edm::Event &event, const edm::EventSetup &eSetup, std::vector< MuonRecHitContainer > &result)
void validSetsPrePruning(std::vector< MuonRecHitContainer > &allValidSets)
double y0() const
y coordinate
Definition: BeamSpot.h:66
dbl *** dir
Definition: mlp_gen.cc:35
std::vector< SeedCandidate > fillSeedCandidates(std::vector< MuonRecHitContainer > &allValidSets)
SETFilter * filter() const
pre-filter
double x0() const
x coordinate
Definition: BeamSpot.h:64
void SETMuonSeedProducer::setEvent ( const edm::Event event)
private

Definition at line 229 of file SETMuonSeedProducer.cc.

References SETFilter::setEvent(), and theFilter.

Referenced by produce().

229  {
230  theFilter->setEvent(event);
231 }
virtual void setEvent(const edm::Event &event)
Pass the Event to the algo at each event.
Definition: SETFilter.cc:66

Member Data Documentation

bool SETMuonSeedProducer::apply_prePruning
private

Definition at line 61 of file SETMuonSeedProducer.h.

Referenced by produce(), and SETMuonSeedProducer().

edm::EDGetTokenT<reco::BeamSpot> SETMuonSeedProducer::beamspotToken
private

Definition at line 69 of file SETMuonSeedProducer.h.

Referenced by produce(), and SETMuonSeedProducer().

edm::InputTag SETMuonSeedProducer::theBeamSpotTag
private

Definition at line 68 of file SETMuonSeedProducer.h.

Referenced by SETMuonSeedProducer().

SETFilter* SETMuonSeedProducer::theFilter
private
SETPatternRecognition* SETMuonSeedProducer::thePatternRecognition
private

Definition at line 65 of file SETMuonSeedProducer.h.

Referenced by produce(), SETMuonSeedProducer(), and ~SETMuonSeedProducer().

SETSeedFinder SETMuonSeedProducer::theSeedFinder
private

Definition at line 66 of file SETMuonSeedProducer.h.

Referenced by produce(), and SETMuonSeedProducer().

MuonServiceProxy* SETMuonSeedProducer::theService
private

Definition at line 63 of file SETMuonSeedProducer.h.

Referenced by produce(), SETMuonSeedProducer(), and ~SETMuonSeedProducer().

bool SETMuonSeedProducer::useSegmentsInTrajectory
private

Definition at line 62 of file SETMuonSeedProducer.h.

Referenced by produce(), and SETMuonSeedProducer().