CMS 3D CMS Logo

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

#include <SeedFilter.h>

Classes

struct  Tokens
 

Public Member Functions

 SeedFilter (const edm::ParameterSet &conf, const Tokens &tokens, edm::ConsumesCollector &iC)
 
void seeds (edm::Event &, const edm::EventSetup &, const reco::SuperClusterRef &, TrajectorySeedCollection *)
 
 ~SeedFilter ()
 

Private Attributes

edm::EDGetTokenT< reco::BeamSpotbeamSpotTag_
 
SeedGeneratorFromRegionHitscombinatorialSeedGenerator
 
double deltaEta_
 
double deltaPhi_
 
double deta_
 
double dphi_
 
double dr_
 
double halflength_
 
RectangularEtaPhiTrackingRegion::UseMeasurementTracker hitsfactoryMode_
 
edm::EDGetTokenT
< MeasurementTrackerEvent
measurementTrackerToken_
 
double originradius_
 
double pt_
 
double ptmin_
 
edm::ESHandle< MagneticFieldtheMagField
 
bool useZvertex_
 
edm::EDGetTokenT< std::vector
< reco::Vertex > > 
vertexSrc_
 
double vertexz_
 

Detailed Description

originally Matteo Sani's SubSeedGenerator

Definition at line 32 of file SeedFilter.h.

Constructor & Destructor Documentation

SeedFilter::SeedFilter ( const edm::ParameterSet conf,
const Tokens tokens,
edm::ConsumesCollector iC 
)

Definition at line 35 of file SeedFilter.cc.

References edm::ConsumesCollector::consumes(), SurfaceDeformationFactory::create(), Exception, reco::get(), edm::ParameterSet::getParameter(), edm::ParameterSet::getUntrackedParameter(), RectangularEtaPhiTrackingRegion::intToUseMeasurementTracker(), RectangularEtaPhiTrackingRegion::kNever, MeasurementTrackerEventProducer_cfi::MeasurementTrackerEvent, AlCaHLTBitMon_QueryRunRegistry::string, tmp, SeedFilter::Tokens::token_bs, and SeedFilter::Tokens::token_vtx.

38  {
39  edm::LogInfo("EtaPhiRegionSeedFactory") << "Enter the EtaPhiRegionSeedFactory";
40  edm::ParameterSet regionPSet = conf.getParameter<edm::ParameterSet>("RegionPSet");
41 
42  ptmin_ = regionPSet.getParameter<double>("ptMin");
43  originradius_ = regionPSet.getParameter<double>("originRadius");
44  halflength_ = regionPSet.getParameter<double>("originHalfLength");
45  deltaEta_ = regionPSet.getParameter<double>("deltaEtaRegion");
46  deltaPhi_ = regionPSet.getParameter<double>("deltaPhiRegion");
47  useZvertex_ = regionPSet.getParameter<bool>("useZInVertex");
48  vertexSrc_ = tokens.token_vtx;
49 
50  // setup orderedhits setup (in order to tell seed generator to use pairs/triplets, which layers)
51  edm::ParameterSet hitsfactoryPSet = conf.getParameter<edm::ParameterSet>("OrderedHitsFactoryPSet");
52  std::string hitsfactoryName = hitsfactoryPSet.getParameter<std::string>("ComponentName");
53 
54  // HIT FACTORY MODE (JRV)
55  // -1 = look for existing hit collections for both pixels and strips
56  // 0 = look for pixel hit collections and build strip hits on demand (regional unpacking)
57  // 1 = build both pixel and strip hits on demand (regional unpacking)
58  //
59  // FIXME: when next time altering the configuration of this class,
60  // please consider changing the type of useOnDemandTracker to a
61  // string corresponding to the UseMeasurementTracker enumeration
62  int tmp = hitsfactoryPSet.getUntrackedParameter<int>("useOnDemandTracker");
63  if(tmp < -1 || tmp > 1)
64  throw cms::Exception("Configuration") << "SeedFilter: useOnDemandTracker must be -1, 0, or 1; got " << tmp;
66 
67  // get orderd hits generator from factory
68  OrderedHitsGenerator* hitsGenerator = OrderedHitsGeneratorFactory::get()->create(hitsfactoryName, hitsfactoryPSet, iC);
69 
70  // start seed generator
71  edm::ParameterSet seedCreatorPSet = conf.getParameter<edm::ParameterSet>("SeedCreatorPSet");
72  std::string seedCreatorType = seedCreatorPSet.getParameter<std::string>("ComponentName");
73 
75  SeedCreatorFactory::get()->create(seedCreatorType, seedCreatorPSet)
76  );
77  beamSpotTag_ = tokens.token_bs; ;
80  }
81  }
EDGetTokenT< ProductType > consumes(edm::InputTag const &tag)
T getParameter(std::string const &) const
T getUntrackedParameter(std::string const &, T const &) const
edm::EDGetTokenT< reco::BeamSpot > beamSpotTag_
Definition: SeedFilter.h:62
double deltaPhi_
Definition: SeedFilter.h:53
edm::EDGetTokenT< std::vector< reco::Vertex > > vertexSrc_
Definition: SeedFilter.h:56
double deltaEta_
Definition: SeedFilter.h:53
double originradius_
Definition: SeedFilter.h:53
double ptmin_
Definition: SeedFilter.h:53
bool useZvertex_
Definition: SeedFilter.h:54
SeedGeneratorFromRegionHits * combinatorialSeedGenerator
Definition: SeedFilter.h:48
edm::EDGetTokenT< MeasurementTrackerEvent > measurementTrackerToken_
Definition: SeedFilter.h:64
double halflength_
Definition: SeedFilter.h:53
std::vector< std::vector< double > > tmp
Definition: MVATrainer.cc:100
static UseMeasurementTracker intToUseMeasurementTracker(int value)
SurfaceDeformation * create(int type, const std::vector< double > &params)
T get(const Candidate &c)
Definition: component.h:55
RectangularEtaPhiTrackingRegion::UseMeasurementTracker hitsfactoryMode_
Definition: SeedFilter.h:60
SeedFilter::~SeedFilter ( )

Definition at line 83 of file SeedFilter.cc.

83  {
85 }
SeedGeneratorFromRegionHits * combinatorialSeedGenerator
Definition: SeedFilter.h:48

Member Function Documentation

void SeedFilter::seeds ( edm::Event e,
const edm::EventSetup setup,
const reco::SuperClusterRef scRef,
TrajectorySeedCollection output 
)

Definition at line 87 of file SeedFilter.cc.

References funct::abs(), TrackingRecHit::all, relval_parameters_module::energy, FTSFromVertexToPointFactory::get(), edm::EventSetup::get(), edm::Event::getByToken(), i, j, LogDebug, HLT_25ns14e33_v1_cff::measurementTracker, MeasurementTrackerEventProducer_cfi::MeasurementTrackerEvent, FreeTrajectoryState::momentum(), edm::Handle< T >::product(), alignCSCRings::r, TrackingRecHit::recHits(), TrackingRecHit::sharesInput(), mathSSE::sqrt(), and HLT_25ns14e33_v1_cff::vertices.

87  {
88 
90  std::auto_ptr<TrajectorySeedCollection> seedColl(new TrajectorySeedCollection());
91 
92  GlobalPoint vtxPos;
93  double deltaZVertex;
94 
95  //edm::Handle<reco::BeamSpot> recoBeamSpotHandle;
96  //e.getByType(recoBeamSpotHandle);
97 
98  // gets its position
99  //const reco::BeamSpot::Point& BSPosition = recoBeamSpotHandle->position();
100  //vtxPos = GlobalPoint(BSPosition.x(), BSPosition.y(), BSPosition.z());
101  //double sigmaZ = recoBeamSpotHandle->sigmaZ();
102  //double sigmaZ0Error = recoBeamSpotHandle->sigmaZ0Error();
103  //double sq=sqrt(sigmaZ*sigmaZ+sigmaZ0Error*sigmaZ0Error);
104  //deltaZVertex = 3*sq; //halflength_;
105 
106  // get the primary vertex (if any)
109  if (e.getByToken(vertexSrc_, h_vertices)) {
110  vertices = *(h_vertices.product());
111  } else {
112  LogDebug("SeedFilter") << "SeedFilter::seeds"
113  << "No vertex collection found: using beam-spot";
114  }
115 
116  if (!vertices.empty() && useZvertex_) {
117  vtxPos = GlobalPoint(vertices.front().x(), vertices.front().y(), vertices.front().z());
118  deltaZVertex = halflength_;
119 
120  } else {
121  edm::Handle<reco::BeamSpot> recoBeamSpotHandle;
122  //e.getByType(recoBeamSpotHandle);
123  e.getByToken(beamSpotTag_,recoBeamSpotHandle);
124  // gets its position
125  const reco::BeamSpot::Point& BSPosition = recoBeamSpotHandle->position();
126  double sigmaZ = recoBeamSpotHandle->sigmaZ();
127  double sigmaZ0Error = recoBeamSpotHandle->sigmaZ0Error();
128  double sq=sqrt(sigmaZ*sigmaZ+sigmaZ0Error*sigmaZ0Error);
129  vtxPos = GlobalPoint(BSPosition.x(), BSPosition.y(), BSPosition.z());
130  deltaZVertex = 3*sq;
131  }
132 
137  measurementTracker = hmte.product();
138  }
139 
140  //seeds selection
141  float energy = scRef->energy();
142 
143  const GlobalPoint clusterPos(scRef->position().x(), scRef->position().y(), scRef->position().z());
144 
145  //===============================================
146  // EtaPhiRegion and seeds for electron hypothesis
147  //===============================================
148 
149  TrackCharge aCharge = -1 ;
150  FreeTrajectoryState fts = FTSFromVertexToPointFactory::get(*theMagField, clusterPos, vtxPos, energy, aCharge);
151 
152  RectangularEtaPhiTrackingRegion etaphiRegionMinus(fts.momentum(),
153  vtxPos,
154  ptmin_,
156  deltaZVertex,
157  // deltaEta_,
158  // deltaPhi_,-1);
162  true, /*default in header*/
164  );
165  combinatorialSeedGenerator->run(*seedColl, etaphiRegionMinus, e, setup);
166 
167  for (unsigned int i = 0; i<seedColl->size(); ++i)
168  output->push_back((*seedColl)[i]);
169 
170  seedColl->clear();
171 
172  //===============================================
173  // EtaPhiRegion and seeds for positron hypothesis
174  //===============================================
175 
176  TrackCharge aChargep = 1 ;
177  fts = FTSFromVertexToPointFactory::get(*theMagField, clusterPos, vtxPos, energy, aChargep);
178 
179  RectangularEtaPhiTrackingRegion etaphiRegionPlus(fts.momentum(),
180  vtxPos,
181  ptmin_,
183  deltaZVertex,
184  // deltaEta_,
185  // deltaPhi_,-1);
189  ,true, /*default in header*/
191  );
192 
193  combinatorialSeedGenerator->run(*seedColl, etaphiRegionPlus, e, setup);
194 
195  for (unsigned int i = 0; i<seedColl->size(); ++i){
196  TrajectorySeed::range r = (*seedColl)[i].recHits();
197  // first Hit
198  TrajectorySeed::const_iterator it = r.first;
199  const TrackingRecHit* a1 = &(*it);
200  // now second Hit
201  it++;
202  const TrackingRecHit* a2 = &(*it);
203  // check if the seed is already in the collection
204  bool isInCollection = false;
205  for(unsigned int j=0; j<output->size(); ++j) {
206  TrajectorySeed::range r = (*seedColl)[i].recHits();
207  // first Hit
208  TrajectorySeed::const_iterator it = r.first;
209  const TrackingRecHit* b1 = &(*it);
210  // now second Hit
211  it++;
212  const TrackingRecHit* b2 = &(*it);
213  if ((b1->sharesInput(a1, TrackingRecHit::all)) && (b2->sharesInput(a2, TrackingRecHit::all))) {
214  isInCollection = true;
215  break;
216  }
217  }
218  if (!isInCollection)
219  output->push_back((*seedColl)[i]);
220  }
221 
222  seedColl->clear();
223 }
#define LogDebug(id)
int i
Definition: DBlmapReader.cc:9
static FreeTrajectoryState get(MagneticField const &magField, GlobalPoint const &xmeas, GlobalPoint const &xvert, float momentum, TrackCharge charge)
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:464
Global3DPoint GlobalPoint
Definition: GlobalPoint.h:10
edm::EDGetTokenT< reco::BeamSpot > beamSpotTag_
Definition: SeedFilter.h:62
virtual bool sharesInput(const TrackingRecHit *other, SharedInputType what) const
std::vector< Vertex > VertexCollection
collection of Vertex objects
Definition: VertexFwd.h:9
math::XYZPoint Point
point in the space
Definition: BeamSpot.h:29
double deltaPhi_
Definition: SeedFilter.h:53
edm::EDGetTokenT< std::vector< reco::Vertex > > vertexSrc_
Definition: SeedFilter.h:56
edm::ESHandle< MagneticField > theMagField
Definition: SeedFilter.h:58
int TrackCharge
Definition: TrackCharge.h:4
std::vector< TrajectorySeed > TrajectorySeedCollection
recHitContainer::const_iterator const_iterator
T sqrt(T t)
Definition: SSEVec.h:48
double deltaEta_
Definition: SeedFilter.h:53
virtual std::vector< const TrackingRecHit * > recHits() const =0
Access to component RecHits (if any)
double originradius_
Definition: SeedFilter.h:53
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
int j
Definition: DBlmapReader.cc:9
std::pair< const_iterator, const_iterator > range
double ptmin_
Definition: SeedFilter.h:53
bool useZvertex_
Definition: SeedFilter.h:54
GlobalVector momentum() const
SeedGeneratorFromRegionHits * combinatorialSeedGenerator
Definition: SeedFilter.h:48
T const * product() const
Definition: Handle.h:81
const T & get() const
Definition: EventSetup.h:56
edm::EDGetTokenT< MeasurementTrackerEvent > measurementTrackerToken_
Definition: SeedFilter.h:64
void run(TrajectorySeedCollection &seedCollection, const TrackingRegion &region, const edm::Event &ev, const edm::EventSetup &es)
double halflength_
Definition: SeedFilter.h:53
bool isUninitialized() const
Definition: EDGetToken.h:73
TkTrackingRegionsMargin< float > Margin
RectangularEtaPhiTrackingRegion::UseMeasurementTracker hitsfactoryMode_
Definition: SeedFilter.h:60

Member Data Documentation

edm::EDGetTokenT<reco::BeamSpot> SeedFilter::beamSpotTag_
private

Definition at line 62 of file SeedFilter.h.

SeedGeneratorFromRegionHits* SeedFilter::combinatorialSeedGenerator
private

Definition at line 48 of file SeedFilter.h.

double SeedFilter::deltaEta_
private

Definition at line 53 of file SeedFilter.h.

double SeedFilter::deltaPhi_
private

Definition at line 53 of file SeedFilter.h.

double SeedFilter::deta_
private

Definition at line 51 of file SeedFilter.h.

double SeedFilter::dphi_
private

Definition at line 51 of file SeedFilter.h.

double SeedFilter::dr_
private

Definition at line 51 of file SeedFilter.h.

double SeedFilter::halflength_
private

Definition at line 53 of file SeedFilter.h.

RectangularEtaPhiTrackingRegion::UseMeasurementTracker SeedFilter::hitsfactoryMode_
private

Definition at line 60 of file SeedFilter.h.

edm::EDGetTokenT<MeasurementTrackerEvent> SeedFilter::measurementTrackerToken_
private

Definition at line 64 of file SeedFilter.h.

double SeedFilter::originradius_
private

Definition at line 53 of file SeedFilter.h.

double SeedFilter::pt_
private

Definition at line 51 of file SeedFilter.h.

double SeedFilter::ptmin_
private

Definition at line 53 of file SeedFilter.h.

edm::ESHandle<MagneticField> SeedFilter::theMagField
private

Definition at line 58 of file SeedFilter.h.

bool SeedFilter::useZvertex_
private

Definition at line 54 of file SeedFilter.h.

edm::EDGetTokenT<std::vector<reco::Vertex> > SeedFilter::vertexSrc_
private

Definition at line 56 of file SeedFilter.h.

double SeedFilter::vertexz_
private

Definition at line 53 of file SeedFilter.h.