CMS 3D CMS Logo

MuonSelector.h
Go to the documentation of this file.
1 #ifndef RecoAlgos_MuonSelector_h
2 #define RecoAlgos_MuonSelector_h
3 
27 
28 namespace helper {
30  public:
32 
34 
35  //------------------------------------------------------------------
40  //------------------------------------------------------------------
41  inline bool cloneClusters() {return cloneClusters_ ; }
42  inline void setCloneClusters(bool w) { cloneClusters_ = w; }
43 
44  //------------------------------------------------------------------
46  //------------------------------------------------------------------
48 
49  //------------------------------------------------------------------
51  //------------------------------------------------------------------
52  inline size_t size() const { return selMuons_->size(); }
53 
54 
55  //------------------------------------------------------------------
59  //------------------------------------------------------------------
60  template<typename I>
61  void cloneAndStore( const I & begin, const I & end, edm::Event & evt ) ;
62 
63  private:
64  //--- Collections to store:
65  std::unique_ptr<reco::MuonCollection> selMuons_;
66  std::unique_ptr<reco::TrackCollection> selTracks_;
67  std::unique_ptr<reco::TrackExtraCollection> selTracksExtras_;
68  std::unique_ptr<TrackingRecHitCollection> selTracksHits_;
69  std::unique_ptr<reco::TrackCollection> selGlobalMuonTracks_;
70  std::unique_ptr<reco::TrackExtraCollection> selGlobalMuonTracksExtras_;
71  std::unique_ptr<TrackingRecHitCollection> selGlobalMuonTracksHits_;
72  std::unique_ptr<reco::TrackCollection> selStandAloneTracks_;
73  std::unique_ptr<reco::TrackExtraCollection> selStandAloneTracksExtras_;
74  std::unique_ptr<TrackingRecHitCollection> selStandAloneTracksHits_;
75  std::unique_ptr< edmNew::DetSetVector<SiStripCluster> > selStripClusters_;
76  std::unique_ptr< edmNew::DetSetVector<SiPixelCluster> > selPixelClusters_;
77 
82 
86 
90 
94 
95  //--- Indices into collections handled with RefProd
97 
98  //--- Switches
100 
101  //--- Methods
102  //------------------------------------------------------------------
104  //------------------------------------------------------------------
105  void processMuon( const reco::Muon & mu );
106 
107  bool clusterRefsOK(const reco::Track &track) const;
108  };
109  // (end of struct MuonCollectionStoreManager)
110 
111  template<typename I>
112  void
114  {
115  using namespace reco;
116  rHits_ = evt.template getRefBeforePut<TrackingRecHitCollection>("TrackerOnly");
117  rGBHits_ = evt.template getRefBeforePut<TrackingRecHitCollection>("GlobalMuon");
118  rSAHits_ = evt.template getRefBeforePut<TrackingRecHitCollection>("StandAlone");
119  rTrackExtras_ = evt.template getRefBeforePut<TrackExtraCollection>("TrackerOnly");
120  rGBTrackExtras_ = evt.template getRefBeforePut<TrackExtraCollection>("GlobalMuon");
121  rSATrackExtras_ = evt.template getRefBeforePut<TrackExtraCollection>("StandAlone");
122  rTracks_ = evt.template getRefBeforePut<TrackCollection>("TrackerOnly");
123  rGBTracks_ = evt.template getRefBeforePut<TrackCollection>("GlobalMuon");
124  rSATracks_ = evt.template getRefBeforePut<TrackCollection>("StandAlone");
125  rMuons_ = evt.template getRefBeforePut<MuonCollection>("SelectedMuons");
126  //--- New: save clusters too
128  = evt.template getRefBeforePut<edmNew::DetSetVector<SiStripCluster> >();
129 
131  = evt.template getRefBeforePut<edmNew::DetSetVector<SiPixelCluster> >();
132 
133  id_=0; igbd_=0; isad_=0;
134  idx_ = 0; igbdx_=0; isadx_=0;
135  hidx_=0; higbdx_=0; hisadx_=0;
137 
138  for( I i = begin; i != end; ++ i ) {
139  const Muon & mu = * * i;
140  //--- Clone this track, and store references aside
141  processMuon( mu );
142  }
143  //--- Clone the clusters and fixup refs
145  *selStripClusters_, rStripClusters);
146  }
147 
148  //----------------------------------------------------------------------
150  public:
152  std::string alias( cfg.getParameter<std::string>( "@module_label" ) );
153 
154 
155  produces<reco::MuonCollection>("SelectedMuons").setBranchAlias( alias + "SelectedMuons" );
156  produces<reco::TrackCollection>("TrackerOnly").setBranchAlias( alias + "TrackerOnlyTracks" );
157  produces<reco::TrackExtraCollection>("TrackerOnly").setBranchAlias( alias + "TrackerOnlyExtras" );
158  produces<TrackingRecHitCollection>("TrackerOnly").setBranchAlias( alias + "TrackerOnlyHits" );
159  //--- New: save clusters too
160  produces< edmNew::DetSetVector<SiPixelCluster> >().setBranchAlias( alias + "PixelClusters" );
161  produces< edmNew::DetSetVector<SiStripCluster> >().setBranchAlias( alias + "StripClusters" );
162  produces<reco::TrackCollection>("GlobalMuon").setBranchAlias( alias + "GlobalMuonTracks" );
163  produces<reco::TrackExtraCollection>("GlobalMuon").setBranchAlias( alias + "GlobalMuonExtras" );
164  produces<TrackingRecHitCollection>("GlobalMuon").setBranchAlias( alias + "GlobalMuonHits" );
165  produces<reco::TrackCollection>("StandAlone").setBranchAlias( alias + "StandAloneTracks" );
166  produces<reco::TrackExtraCollection>("StandAlone").setBranchAlias( alias + "StandAloneExtras" );
167  produces<TrackingRecHitCollection>("StandAlone").setBranchAlias( alias + "StandAloneHits" );
168 
169  }
170  }; // (end of class MuonSelectorBase)
171 
172 
173  template<>
177  };
178 
179 }
180 
181 #endif
T getParameter(std::string const &) const
reco::TrackExtraRefProd rSATrackExtras_
Definition: MuonSelector.h:88
std::unique_ptr< reco::MuonCollection > selMuons_
Definition: MuonSelector.h:65
Definition: helper.py:1
const double w
Definition: UKUtility.cc:23
MuonSelectorBase(const edm::ParameterSet &cfg)
Definition: MuonSelector.h:151
std::unique_ptr< reco::TrackExtraCollection > selTracksExtras_
Definition: MuonSelector.h:67
MuonCollectionStoreManager(const edm::Handle< reco::MuonCollection > &)
Definition: MuonSelector.cc:18
std::unique_ptr< reco::TrackCollection > selStandAloneTracks_
Definition: MuonSelector.h:72
std::vector< Muon > MuonCollection
collection of Muon objects
Definition: MuonFwd.h:9
bool cloneClusters_
Clone clusters, or not? Default: true.
Definition: MuonSelector.h:99
reco::TrackExtraRefProd rTrackExtras_
Definition: MuonSelector.h:80
std::unique_ptr< edmNew::DetSetVector< SiStripCluster > > selStripClusters_
Definition: MuonSelector.h:75
edm::OrphanHandle< reco::MuonCollection > put(edm::Event &evt)
Put tracks, track extras and hits+clusters into the event.
TrackingRecHitRefProd rSAHits_
Definition: MuonSelector.h:89
Definition: Muon.py:1
void processMuon(const reco::Muon &mu)
Process a single muon.
Definition: MuonSelector.cc:49
const std::complex< double > I
Definition: I.h:8
TrackingRecHitRefProd rHits_
Definition: MuonSelector.h:81
const int mu
Definition: Constants.h:22
#define end
Definition: vmac.h:39
std::unique_ptr< edmNew::DetSetVector< SiPixelCluster > > selPixelClusters_
Definition: MuonSelector.h:76
void cloneAndStore(const I &begin, const I &end, edm::Event &evt)
Method to clone tracks, track extras and their hits and clusters. typename I = this is an interator o...
Definition: MuonSelector.h:113
std::unique_ptr< reco::TrackCollection > selTracks_
Definition: MuonSelector.h:66
std::unique_ptr< TrackingRecHitCollection > selGlobalMuonTracksHits_
Definition: MuonSelector.h:71
TrackingRecHitRefProd rGBHits_
Definition: MuonSelector.h:85
reco::TrackExtraRefProd rGBTrackExtras_
Definition: MuonSelector.h:84
std::unique_ptr< TrackingRecHitCollection > selTracksHits_
Definition: MuonSelector.h:68
size_t size() const
Get the size.
Definition: MuonSelector.h:52
std::unique_ptr< TrackingRecHitCollection > selStandAloneTracksHits_
Definition: MuonSelector.h:74
void clear()
clear records
std::unique_ptr< reco::TrackCollection > selGlobalMuonTracks_
Definition: MuonSelector.h:69
fixed size matrix
std::unique_ptr< reco::TrackExtraCollection > selGlobalMuonTracksExtras_
Definition: MuonSelector.h:70
#define begin
Definition: vmac.h:32
reco::MuonCollection collection
Definition: MuonSelector.h:31
std::unique_ptr< reco::TrackExtraCollection > selStandAloneTracksExtras_
Definition: MuonSelector.h:73
void processAllClusters(edmNew::DetSetVector< SiPixelCluster > &pixelDsvToFill, edm::RefProd< edmNew::DetSetVector< SiPixelCluster > > refPixelClusters, edmNew::DetSetVector< SiStripCluster > &stripDsvToFill, edm::RefProd< edmNew::DetSetVector< SiStripCluster > > refStripClusters)
bool clusterRefsOK(const reco::Track &track) const
Check if all references to silicon strip/pixel clusters are available.