CMS 3D CMS Logo

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

#include <PhotonConversionTrajectorySeedProducerFromSingleLegAlgo.h>

Public Member Functions

void analyze (const edm::Event &event, const edm::EventSetup &setup)
 
void clear ()
 
IdealHelixParametersgetIdealHelixParameters ()
 
TrajectorySeedCollectiongetTrajectorySeedCollection ()
 
TrajectorySeedCollectiongetTrajectorySeedCollectionOfSourceTracks ()
 
void init ()
 
 PhotonConversionTrajectorySeedProducerFromSingleLegAlgo (const edm::ParameterSet &, edm::ConsumesCollector &&iC)
 
 ~PhotonConversionTrajectorySeedProducerFromSingleLegAlgo ()
 

Private Types

typedef Regions::const_iterator IR
 
typedef std::vector
< TrackingRegion * > 
Regions
 

Private Member Functions

bool inspectTrack (const reco::Track *track, const TrackingRegion &region, math::XYZPoint &primaryVertexPoint)
 
void loopOnPriVtx (const reco::Track &tk, const std::vector< reco::Vertex > &selectedPriVtxCompatibleWithTrack)
 
void loopOnTracks ()
 
bool rejectTrack (const reco::Track &track)
 
bool selectPriVtxCompatibleWithTrack (const reco::Track &tk, std::vector< reco::Vertex > &selectedPriVtxCompatibleWithTrack)
 

Private Attributes

bool _applyTkVtxConstraint
 
edm::InputTag _beamSpotInputTag
 
const edm::ParameterSet _conf
 
size_t _countSeedTracks
 
IdealHelixParameters _IdealHelixParameters
 
double _maxDZSigmas
 
size_t _maxNumSelVtx
 
edm::InputTag _primaryVtxInputTag
 
double _vtxMinDoF
 
edm::ParameterSet creatorPSet
 
edm::ParameterSet hitsfactoryPSet
 
const MagneticFieldmagField
 
const edm::EventSetupmyEsetup
 
const edm::EventmyEvent
 
PrintRecoObjects po
 
reco::Vertex primaryVertex
 
edm::Handle< reco::BeamSpotrecoBeamSpotHandle
 
edm::ParameterSet regfactoryPSet
 
Regions regions
 
TrajectorySeedCollectionseedCollection
 
TrajectorySeedCollectionseedCollectionOfSourceTracks
 
std::stringstream ss
 
const reco::BeamSpottheBeamSpot
 
ClusterChecker theClusterCheck
 
CombinedHitPairGeneratorForPhotonConversiontheHitsGenerator
 
GlobalTrackingRegionProducerFromBeamSpottheRegionProducer
 
SeedForPhotonConversion1LegtheSeedCreator
 
bool theSilentOnClusterCheck
 
edm::EDGetTokenT< reco::BeamSpottoken_bs
 
edm::EDGetTokenT
< reco::TrackCollection
token_refitter
 
edm::EDGetTokenT
< reco::VertexCollection
token_vertex
 
edm::Handle
< reco::TrackCollection
trackCollectionH
 
edm::Handle
< TrajTrackAssociationCollection
trajTrackAssociations
 
reco::VertexCollection vertexCollection
 
edm::Handle
< reco::VertexCollection
vertexHandle
 

Detailed Description

Definition at line 33 of file PhotonConversionTrajectorySeedProducerFromSingleLegAlgo.h.

Member Typedef Documentation

typedef Regions::const_iterator PhotonConversionTrajectorySeedProducerFromSingleLegAlgo::IR
private

Constructor & Destructor Documentation

PhotonConversionTrajectorySeedProducerFromSingleLegAlgo::PhotonConversionTrajectorySeedProducerFromSingleLegAlgo ( const edm::ParameterSet conf,
edm::ConsumesCollector &&  iC 
)

Definition at line 16 of file PhotonConversionTrajectorySeedProducerFromSingleLegAlgo.cc.

References _beamSpotInputTag, _conf, _primaryVtxInputTag, edm::ParameterSet::getParameter(), init(), regfactoryPSet, theRegionProducer, token_bs, token_refitter, and token_vertex.

19  hitsfactoryPSet(conf.getParameter<edm::ParameterSet>("OrderedHitsFactoryPSet")),
20  creatorPSet(conf.getParameter<edm::ParameterSet>("SeedCreatorPSet")),
21  regfactoryPSet(conf.getParameter<edm::ParameterSet>("RegionFactoryPSet")),
22  theClusterCheck(conf.getParameter<edm::ParameterSet>("ClusterCheckPSet"), std::move(iC)),
23  theSilentOnClusterCheck(conf.getParameter<edm::ParameterSet>("ClusterCheckPSet").getUntrackedParameter<bool>("silentClusterCheck",false)),
24  _vtxMinDoF(conf.getParameter<double>("vtxMinDoF")),
25  _maxDZSigmas(conf.getParameter<double>("maxDZSigmas")),
26  _maxNumSelVtx(conf.getParameter<uint32_t>("maxNumSelVtx")),
27  _applyTkVtxConstraint(conf.getParameter<bool>("applyTkVtxConstraint")),
29  _primaryVtxInputTag(conf.getParameter<edm::InputTag>("primaryVerticesTag")),
30  _beamSpotInputTag(conf.getParameter<edm::InputTag>("beamSpotInputTag"))
31 {
36  init();
37 }
EDGetTokenT< ProductType > consumes(edm::InputTag const &tag)
T getParameter(std::string const &) const
T getUntrackedParameter(std::string const &, T const &) const
std::vector< Track > TrackCollection
collection of Tracks
Definition: TrackFwd.h:10
std::vector< Vertex > VertexCollection
collection of Vertex objects
Definition: VertexFwd.h:9
PhotonConversionTrajectorySeedProducerFromSingleLegAlgo::~PhotonConversionTrajectorySeedProducerFromSingleLegAlgo ( )

Definition at line 39 of file PhotonConversionTrajectorySeedProducerFromSingleLegAlgo.cc.

References NULL, and theRegionProducer.

39  {
41  delete theRegionProducer;
42 }
#define NULL
Definition: scimark2.h:8

Member Function Documentation

void PhotonConversionTrajectorySeedProducerFromSingleLegAlgo::analyze ( const edm::Event event,
const edm::EventSetup setup 
)

Definition at line 59 of file PhotonConversionTrajectorySeedProducerFromSingleLegAlgo.cc.

References _IdealHelixParameters, _primaryVtxInputTag, CombinedHitPairGeneratorForPhotonConversion::clearLayerCache(), event(), edm::EventSetup::get(), MagneticField::inTesla(), edm::HandleBase::isValid(), loopOnTracks(), magField, myEsetup, myEvent, po, PrintRecoObjects::print(), edm::ESHandle< class >::product(), recoBeamSpotHandle, GlobalTrackingRegionProducerFromBeamSpot::regions(), regions, reco::return(), seedCollection, seedCollectionOfSourceTracks, IdealHelixParameters::setMagnField(), HcalObjRepresent::setup(), ss, theClusterCheck, theHitsGenerator, theRegionProducer, theSilentOnClusterCheck, token_bs, token_vertex, ClusterChecker::tooManyClusters(), unlikely, vertexHandle, and PV3DBase< T, PVType, FrameType >::z().

Referenced by PhotonConversionTrajectorySeedProducerFromSingleLeg::produce().

59  {
60 
61  myEsetup = &setup;
62  myEvent = &event;
63 
64  if(seedCollection!=0)
65  delete seedCollection;
66 
69 
72 
73  size_t clustsOrZero = theClusterCheck.tooManyClusters(event);
74  if (clustsOrZero){
76  edm::LogError("TooManyClusters") << "Found too many clusters (" << clustsOrZero << "), bailing out.\n";
77  return ;
78  }
79 
80 
81  edm::ESHandle<MagneticField> handleMagField;
82  setup.get<IdealMagneticFieldRecord>().get(handleMagField);
83  magField = handleMagField.product();
84  if (unlikely(magField->inTesla(GlobalPoint(0.,0.,0.)).z()<0.01)) return;
85 
87 
88 
89  event.getByToken(token_vertex, vertexHandle);
90  if (!vertexHandle.isValid() || vertexHandle->empty()){
91  edm::LogError("PhotonConversionFinderFromTracks") << "Error! Can't get the product primary Vertex Collection "<< _primaryVtxInputTag << "\n";
92  return;
93  }
94 
95  event.getByToken(token_bs,recoBeamSpotHandle);
96 
97 
98  regions = theRegionProducer->regions(event,setup);
99 
100  //Do the analysis
101  loopOnTracks();
102 
103 
104 #ifdef debugTSPFSLA
105  std::stringstream ss;
106  ss.str("");
107  ss << "\n++++++++++++++++++\n";
108  ss << "seed collection size " << seedCollection->size();
109  BOOST_FOREACH(TrajectorySeed tjS,*seedCollection){
110  po.print(ss, tjS);
111  }
112  edm::LogInfo("debugTrajSeedFromSingleLeg") << ss.str();
113  //-------------------------------------------------
114 #endif
115 
116  // clear memory
118  for (IR ir=regions.begin(), irEnd=regions.end(); ir < irEnd; ++ir) delete (*ir);
119 
120 }
void setMagnField(const MagneticField *magnField)
virtual GlobalVector inTesla(const GlobalPoint &gp) const =0
Field value ad specified global point, in Tesla.
#define unlikely(x)
Definition: Likely.h:21
std::vector< TrajectorySeed > TrajectorySeedCollection
T z() const
Definition: PV3DBase.h:64
size_t tooManyClusters(const edm::Event &e) const
void print(std::stringstream &ss, const SiStripCluster &clus)
How EventSelector::AcceptEvent() decides whether to accept an event for output otherwise it is excluding the probing of A single or multiple positive and the trigger will pass if any such matching triggers are PASS or EXCEPTION[A criterion thatmatches no triggers at all is detected and causes a throw.] A single negative with an expectation of appropriate bit checking in the decision and the trigger will pass if any such matching triggers are FAIL or EXCEPTION A wildcarded negative criterion that matches more than one trigger in the trigger but the state exists so we define the behavior If all triggers are the negative crieriion will lead to accepting the event(this again matches the behavior of"!*"before the partial wildcard feature was incorporated).The per-event"cost"of each negative criterion with multiple relevant triggers is about the same as!*was in the past
bool isValid() const
Definition: HandleBase.h:76
const T & get() const
Definition: EventSetup.h:55
T const * product() const
Definition: ESHandle.h:62
return(e1-e2)*(e1-e2)+dp *dp
virtual std::vector< TrackingRegion * > regions(const edm::Event &ev, const edm::EventSetup &) const
void setup(std::vector< TH2F > &depth, std::string name, std::string units="")
void PhotonConversionTrajectorySeedProducerFromSingleLegAlgo::clear ( void  )
IdealHelixParameters* PhotonConversionTrajectorySeedProducerFromSingleLegAlgo::getIdealHelixParameters ( )
inline
TrajectorySeedCollection* PhotonConversionTrajectorySeedProducerFromSingleLegAlgo::getTrajectorySeedCollection ( )
inline
TrajectorySeedCollection* PhotonConversionTrajectorySeedProducerFromSingleLegAlgo::getTrajectorySeedCollectionOfSourceTracks ( )
inline
void PhotonConversionTrajectorySeedProducerFromSingleLegAlgo::init ( void  )
bool PhotonConversionTrajectorySeedProducerFromSingleLegAlgo::inspectTrack ( const reco::Track track,
const TrackingRegion region,
math::XYZPoint primaryVertexPoint 
)
private

Definition at line 313 of file PhotonConversionTrajectorySeedProducerFromSingleLegAlgo.cc.

References _IdealHelixParameters, funct::abs(), reco::TrackBase::charge(), alignCSCRings::e, f, IdealHelixParameters::GetMomentumAtTangentPoint(), IdealHelixParameters::GetTangentPoint(), edm::isNotFinite(), myEsetup, myEvent, PV3DBase< T, PVType, FrameType >::perp(), ptmin, CombinedHitPairGeneratorForPhotonConversion::run(), seedCollection, IdealHelixParameters::setData(), OrderedSeedingHits::size(), ss, theHitsGenerator, theSeedCreator, reco::TrackBase::thetaError(), and SeedForPhotonConversion1Leg::trajectorySeed().

Referenced by loopOnPriVtx().

313  {
314 
315  _IdealHelixParameters.setData(track,primaryVertexPoint);
316 
319  //this case means a null results on the _IdealHelixParameters side
320  return false;
321  }
322 
323  float rMin=3.; //cm
324  if(_IdealHelixParameters.GetTangentPoint().rho()<rMin){
325  //this case means a track that has the tangent point nearby the primary vertex
326  // if the track is primary, this number tends to be the primary vertex itself
327  //Rejecting all the potential photon conversions having a "vertex" inside the beampipe
328  //We should not miss too much, seen that the conversions at the beam pipe are the better reconstructed
329  return false;
330  }
331 
332  float ptmin = 0.5;
333  float originRBound = 3;
334  float originZBound = 3.;
335 
336  GlobalPoint originPos;
340  );
341  float cotTheta;
344  }else{
346  cotTheta=99999.f;
347  else
348  cotTheta=-99999.f;
349  }
350  GlobalVector originBounds(originRBound,originRBound,originZBound);
351 
352  GlobalPoint pvtxPoint(primaryVertexPoint.x(),
353  primaryVertexPoint.y(),
354  primaryVertexPoint.z()
355  );
356  ConversionRegion convRegion(originPos, pvtxPoint, cotTheta, track->thetaError(), -1*track->charge());
357 
358 #ifdef debugTSPFSLA
359  ss << "\nConversion Point " << originPos << " " << originPos.perp() << "\n";
360 #endif
361 
362  const OrderedSeedingHits & hitss = theHitsGenerator->run(convRegion, region, *myEvent, *myEsetup);
363 
364  unsigned int nHitss = hitss.size();
365 
366  if(nHitss==0)
367  return false;
368 
369 #ifdef debugTSPFSLA
370  ss << "\n nHitss " << nHitss << "\n";
371 #endif
372 
373  if (seedCollection->empty()) seedCollection->reserve(nHitss); // don't do multiple reserves in the case of multiple regions: it would make things even worse
374  // as it will cause N re-allocations instead of the normal log(N)/log(2)
375  for (unsigned int iHits = 0; iHits < nHitss; ++iHits) {
376 
377 #ifdef debugTSPFSLA
378  ss << "\n iHits " << iHits << "\n";
379 #endif
380  const SeedingHitSet & hits = hitss[iHits];
381  //if (!theComparitor || theComparitor->compatible( hits, es) ) {
382  //try{
383  theSeedCreator->trajectorySeed(*seedCollection,hits, originPos, originBounds, ptmin, *myEsetup,convRegion.cotTheta(),ss);
384  //}catch(cms::Exception& er){
385  // edm::LogError("SeedingConversion") << " Problem in the Single Leg Seed creator " <<er.what()<<std::endl;
386  //}catch(std::exception& er){
387  // edm::LogError("SeedingConversion") << " Problem in the Single Leg Seed creator " << er.what()<<std::endl;
388  //}
389  }
390  return true;
391 }
void setData(const reco::Track *track, const math::XYZVector &refPoint=math::XYZVector(0, 0, 0))
T perp() const
Definition: PV3DBase.h:72
Global3DPoint GlobalPoint
Definition: GlobalPoint.h:10
virtual unsigned int size() const =0
const TrajectorySeed * trajectorySeed(TrajectorySeedCollection &seedCollection, const SeedingHitSet &hits, const GlobalPoint &vertex, const GlobalVector &vertexBounds, float ptmin, const edm::EventSetup &es, float cotTheta, std::stringstream &ss)
math::XYZVector GetMomentumAtTangentPoint() const
const OrderedHitPairs & run(const ConversionRegion &convRegion, const TrackingRegion &region, const edm::Event &ev, const edm::EventSetup &es)
bool isNotFinite(T x)
Definition: isFinite.h:10
math::XYZVector GetTangentPoint() const
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
double f[11][100]
double ptmin
Definition: HydjetWrapper.h:85
int charge() const
track electric charge
Definition: TrackBase.h:111
double thetaError() const
error on theta
Definition: TrackBase.h:199
void PhotonConversionTrajectorySeedProducerFromSingleLegAlgo::loopOnPriVtx ( const reco::Track tk,
const std::vector< reco::Vertex > &  selectedPriVtxCompatibleWithTrack 
)
private

Definition at line 220 of file PhotonConversionTrajectorySeedProducerFromSingleLegAlgo.cc.

References _countSeedTracks, inspectTrack(), reco::Vertex::position(), TrackingRegion::print(), regions, and ss.

Referenced by loopOnTracks().

220  {
221 
222  bool foundAtLeastASeedCand=false;
223  BOOST_FOREACH(const reco::Vertex vtx, selectedPriVtxCompatibleWithTrack){
224 
225  math::XYZPoint primaryVertexPoint=math::XYZPoint(vtx.position());
226 
227  for (IR ir=regions.begin(), irEnd=regions.end(); ir < irEnd; ++ir) {
228  const TrackingRegion & region = **ir;
229 
230 #ifdef debugTSPFSLA
231  ss << "[PrintRegion] " << region.print() << std::endl;
232 #endif
233 
234  //This if is just for the _countSeedTracks. otherwise
235  //inspectTrack(&tk,region, primaryVertexPoint);
236  //would be enough
237 
238  if(
239  inspectTrack(&tk,region, primaryVertexPoint)
240  and
241  !foundAtLeastASeedCand
242  ){
243  foundAtLeastASeedCand=true;
244  _countSeedTracks++;
245  }
246 
247  }
248  }
249 }
const Point & position() const
position
Definition: Vertex.h:92
bool inspectTrack(const reco::Track *track, const TrackingRegion &region, math::XYZPoint &primaryVertexPoint)
XYZPointD XYZPoint
point in space with cartesian internal representation
Definition: Point3D.h:12
virtual std::string print() const
void PhotonConversionTrajectorySeedProducerFromSingleLegAlgo::loopOnTracks ( )
private

Definition at line 124 of file PhotonConversionTrajectorySeedProducerFromSingleLegAlgo.cc.

References _applyTkVtxConstraint, _conf, _countSeedTracks, edm::Event::getByToken(), edm::ParameterSet::getParameter(), customizeTrackingMonitorSeedNumber::idx, edm::HandleBase::isValid(), loopOnPriVtx(), myEvent, rejectTrack(), EgammaValidation_Wenu_cff::sel, selectPriVtxCompatibleWithTrack(), ss, token_refitter, trackCollectionH, and vertexHandle.

Referenced by analyze().

124  {
125 
126  //--- Get Tracks
128 
129  if(trackCollectionH.isValid()==0){
130  edm::LogError("MissingInput")<<" could not find track collecion:"<<_conf.getParameter<edm::InputTag>("TrackRefitter");
131  return;
132  }
133  size_t idx=0, sel=0;
135 
136  ss.str("");
137 
138  for( reco::TrackCollection::const_iterator tr = trackCollectionH->begin();
139  tr != trackCollectionH->end(); tr++, idx++) {
140 
141  // #ifdef debugTSPFSLA
142  // ss << "\nStuding track Nb " << idx;
143  // #endif
144 
145  if(rejectTrack(*tr)) continue;
146  std::vector<reco::Vertex> selectedPriVtxCompatibleWithTrack;
148  selectedPriVtxCompatibleWithTrack.push_back(*(vertexHandle->begin())); //Same approach as before
149  }else{
150  if(!selectPriVtxCompatibleWithTrack(*tr,selectedPriVtxCompatibleWithTrack)) continue;
151  }
152 
153  sel++;
154  loopOnPriVtx(*tr,selectedPriVtxCompatibleWithTrack);
155  }
156 #ifdef debugTSPFSLA
157  edm::LogInfo("debugTrajSeedFromSingleLeg") << ss.str();
158  edm::LogInfo("debugTrajSeedFromSingleLeg") << "Inspected " << sel << " tracks over " << idx << " tracks. \t # tracks providing at least one seed " << _countSeedTracks ;
159 #endif
160 }
T getParameter(std::string const &) const
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:434
bool isValid() const
Definition: HandleBase.h:76
void loopOnPriVtx(const reco::Track &tk, const std::vector< reco::Vertex > &selectedPriVtxCompatibleWithTrack)
tuple idx
DEBUGGING if hasattr(process,&quot;trackMonIterativeTracking2012&quot;): print &quot;trackMonIterativeTracking2012 D...
bool selectPriVtxCompatibleWithTrack(const reco::Track &tk, std::vector< reco::Vertex > &selectedPriVtxCompatibleWithTrack)
bool PhotonConversionTrajectorySeedProducerFromSingleLegAlgo::rejectTrack ( const reco::Track track)
private

Definition at line 252 of file PhotonConversionTrajectorySeedProducerFromSingleLegAlgo.cc.

References _IdealHelixParameters, SiPixelRawToDigiRegional_cfi::beamSpot, IdealHelixParameters::GetTangentPoint(), edm::HandleBase::isValid(), recoBeamSpotHandle, and IdealHelixParameters::setData().

Referenced by loopOnTracks().

252  {
253 
256  beamSpot = math::XYZVector(recoBeamSpotHandle->position());
257 
258  _IdealHelixParameters.setData(&track,beamSpot);
260  //this case means a null results on the _IdealHelixParameters side
261  return true;
262  }
263 
264  float rMin=2.; //cm
265  if(_IdealHelixParameters.GetTangentPoint().rho()<rMin){
266  //this case means a track that has the tangent point nearby the primary vertex
267  // if the track is primary, this number tends to be the primary vertex itself
268  //Rejecting all the potential photon conversions having a "vertex" inside the beampipe
269  //We should not miss too much, seen that the conversions at the beam pipe are the better reconstructed
270  return true;
271  }
272  }
273 
274  //-------------------------------------------------------
275  /*
276  float maxPt2=64.; //Cut on pt^2 Indeed doesn't do almost nothing
277  if(track.momentum().Perp2() > maxPt2)
278  return true;
279  */
280  //-------------------------------------------------------
281  //Cut in the barrel eta region FIXME: to be extended to endcaps
282  /*
283  float maxEta=1.3;
284  if(fabs(track.eta()) > maxEta)
285  return true;
286  */
287  //-------------------------------------------------------
288  //Reject tracks that have a first valid hit in the pixel barrel/endcap layer/disk 1
289  //assume that the hits are aligned along momentum
290  /*
291  const reco::HitPattern& p=track.hitPattern();
292  for (int i=0; i<p.numberOfHits(); i++) {
293  uint32_t hit = p.getHitPattern(i);
294  // if the hit is valid and in pixel barrel, print out the layer
295  if (! p.validHitFilter(hit) ) continue;
296  if( (p.pixelBarrelHitFilter(hit) || p.pixelEndcapHitFilter(hit))
297  &&
298  p.getLayer(hit) == 1
299  )
300  return true;
301  else
302  break; //because the first valid hit is in a different layer
303  }
304  */
305  //-------------------------------------------------------
306 
307 
308  return false;
309 }
void setData(const reco::Track *track, const math::XYZVector &refPoint=math::XYZVector(0, 0, 0))
math::XYZVector GetTangentPoint() const
bool isValid() const
Definition: HandleBase.h:76
XYZVectorD XYZVector
spatial vector with cartesian internal representation
Definition: Vector3D.h:30
bool PhotonConversionTrajectorySeedProducerFromSingleLegAlgo::selectPriVtxCompatibleWithTrack ( const reco::Track tk,
std::vector< reco::Vertex > &  selectedPriVtxCompatibleWithTrack 
)
private

Definition at line 163 of file PhotonConversionTrajectorySeedProducerFromSingleLegAlgo.cc.

References _maxDZSigmas, _maxNumSelVtx, _vtxMinDoF, prof2calltree::count, reco::Vertex::covariance(), reco::TrackBase::covariance(), reco::TrackBase::dz(), reco::TrackBase::dzError(), i, customizeTrackingMonitorSeedNumber::idx, lt_(), reco::Vertex::ndof(), reco::Vertex::position(), reco::TrackBase::pt(), reco::TrackBase::px(), reco::TrackBase::py(), reco::TrackBase::pz(), edm::second(), funct::sqr(), mathSSE::sqrt(), ss, vertexHandle, reco::TrackBase::vx(), reco::TrackBase::vy(), and reco::TrackBase::vz().

Referenced by loopOnTracks().

163  {
164 
165  std::vector< std::pair< double, short> > idx;
166  short count=-1;
167 
168  double cosPhi=tk.px()/tk.pt();
169  double sinPhi=tk.py()/tk.pt();
170  double sphi2=tk.covariance(2,2);
171  double stheta2=tk.covariance(1,1);
172 
173  BOOST_FOREACH(const reco::Vertex& vtx, *vertexHandle){
174  count++;
175  if(vtx.ndof()<= _vtxMinDoF) continue;
176 
177  double _dz= tk.dz(vtx.position());
178  double _dzError=tk.dzError();
179 
180  double cotTheta=tk.pz()/tk.pt();
181  double dx = vtx.position().x();
182  double dy = vtx.position().y();
183  double sx2=vtx.covariance(0,0);
184  double sy2=vtx.covariance(1,1);
185 
186  double sxy2= sqr(cosPhi*cotTheta)*sx2+
187  sqr(sinPhi*cotTheta)*sy2+
188  sqr(cotTheta*(-dx*sinPhi+dy*cosPhi))*sphi2+
189  sqr((1+cotTheta*cotTheta)*(dx*cosPhi+dy*sinPhi))*stheta2;
190 
191  _dzError=sqrt(_dzError*_dzError+vtx.covariance(2,2)+sxy2); //there is a missing component, related to the element (vtx.x*px+vtx.y*py)/pt * pz/pt. since the tk ref point is at the point of closest approach, this scalar product should be almost zero.
192 
193 #ifdef debugTSPFSLA
194  ss << " primary vtx " << vtx.position() << " \tk vz " << tk.vz() << " vx " << tk.vx() << " vy " << tk.vy() << " pz/pt " << tk.pz()/tk.pt() << " \t dz " << _dz << " \t " << _dzError << " sxy2 "<< sxy2<< " \t dz/dzErr " << _dz/_dzError<< std::endl;
195 #endif
196 
197  if(fabs(_dz)/_dzError > _maxDZSigmas) continue;
198 
199  idx.push_back(std::pair<double,short>(fabs(_dz),count));
200  }
201  if(idx.size()==0) {
202 #ifdef debugTSPFSLA
203  ss << "no vertex selected " << std::endl;
204 #endif
205  return false;
206 }
207 
208  std::stable_sort(idx.begin(),idx.end(),lt_);
209  for(size_t i=0;i<_maxNumSelVtx && i<idx.size();++i){
210  selectedPriVtxCompatibleWithTrack.push_back((*vertexHandle)[idx[i].second]);
211 #ifdef debugTSPFSLA
212  ss << "selected vtx dz " << idx[0].first << " position" << idx[0].second << std::endl;
213 #endif
214  }
215 
216  return true;
217 }
int i
Definition: DBlmapReader.cc:9
double covariance(int i, int j) const
(i, j)-th element of error matrix, i, j = 0, ... 2
Definition: Vertex.h:109
double px() const
x coordinate of momentum vector
Definition: TrackBase.h:131
const Point & position() const
position
Definition: Vertex.h:92
CovarianceMatrix covariance() const
return track covariance matrix
Definition: TrackBase.h:180
U second(std::pair< T, U > const &p)
T sqrt(T t)
Definition: SSEVec.h:48
double pt() const
track transverse momentum
Definition: TrackBase.h:129
double ndof() const
Definition: Vertex.h:88
double pz() const
z coordinate of momentum vector
Definition: TrackBase.h:135
double dz() const
dz parameter (= dsz/cos(lambda)). This is the track z0 w.r.t (0,0,0) only if the refPoint is close to...
Definition: TrackBase.h:125
double dzError() const
error on dz
Definition: TrackBase.h:213
double vz() const
z coordinate of the reference point on track
Definition: TrackBase.h:145
tuple idx
DEBUGGING if hasattr(process,&quot;trackMonIterativeTracking2012&quot;): print &quot;trackMonIterativeTracking2012 D...
double vy() const
y coordinate of the reference point on track
Definition: TrackBase.h:143
Square< F >::type sqr(const F &f)
Definition: Square.h:13
bool lt_(std::pair< double, short > a, std::pair< double, short > b)
double py() const
y coordinate of momentum vector
Definition: TrackBase.h:133
double vx() const
x coordinate of the reference point on track
Definition: TrackBase.h:141

Member Data Documentation

bool PhotonConversionTrajectorySeedProducerFromSingleLegAlgo::_applyTkVtxConstraint
private
edm::InputTag PhotonConversionTrajectorySeedProducerFromSingleLegAlgo::_beamSpotInputTag
private
const edm::ParameterSet PhotonConversionTrajectorySeedProducerFromSingleLegAlgo::_conf
private
size_t PhotonConversionTrajectorySeedProducerFromSingleLegAlgo::_countSeedTracks
private
IdealHelixParameters PhotonConversionTrajectorySeedProducerFromSingleLegAlgo::_IdealHelixParameters
private
double PhotonConversionTrajectorySeedProducerFromSingleLegAlgo::_maxDZSigmas
private
size_t PhotonConversionTrajectorySeedProducerFromSingleLegAlgo::_maxNumSelVtx
private
edm::InputTag PhotonConversionTrajectorySeedProducerFromSingleLegAlgo::_primaryVtxInputTag
private
double PhotonConversionTrajectorySeedProducerFromSingleLegAlgo::_vtxMinDoF
private
edm::ParameterSet PhotonConversionTrajectorySeedProducerFromSingleLegAlgo::creatorPSet
private

Definition at line 70 of file PhotonConversionTrajectorySeedProducerFromSingleLegAlgo.h.

Referenced by init().

edm::ParameterSet PhotonConversionTrajectorySeedProducerFromSingleLegAlgo::hitsfactoryPSet
private

Definition at line 70 of file PhotonConversionTrajectorySeedProducerFromSingleLegAlgo.h.

Referenced by init().

const MagneticField* PhotonConversionTrajectorySeedProducerFromSingleLegAlgo::magField
private

Definition at line 94 of file PhotonConversionTrajectorySeedProducerFromSingleLegAlgo.h.

Referenced by analyze().

const edm::EventSetup* PhotonConversionTrajectorySeedProducerFromSingleLegAlgo::myEsetup
private
const edm::Event* PhotonConversionTrajectorySeedProducerFromSingleLegAlgo::myEvent
private
PrintRecoObjects PhotonConversionTrajectorySeedProducerFromSingleLegAlgo::po
private

Definition at line 104 of file PhotonConversionTrajectorySeedProducerFromSingleLegAlgo.h.

Referenced by analyze().

reco::Vertex PhotonConversionTrajectorySeedProducerFromSingleLegAlgo::primaryVertex
private
edm::Handle<reco::BeamSpot> PhotonConversionTrajectorySeedProducerFromSingleLegAlgo::recoBeamSpotHandle
private
edm::ParameterSet PhotonConversionTrajectorySeedProducerFromSingleLegAlgo::regfactoryPSet
private
Regions PhotonConversionTrajectorySeedProducerFromSingleLegAlgo::regions
private
TrajectorySeedCollection* PhotonConversionTrajectorySeedProducerFromSingleLegAlgo::seedCollection
private
TrajectorySeedCollection* PhotonConversionTrajectorySeedProducerFromSingleLegAlgo::seedCollectionOfSourceTracks
private
std::stringstream PhotonConversionTrajectorySeedProducerFromSingleLegAlgo::ss
private
const reco::BeamSpot* PhotonConversionTrajectorySeedProducerFromSingleLegAlgo::theBeamSpot
private
ClusterChecker PhotonConversionTrajectorySeedProducerFromSingleLegAlgo::theClusterCheck
private

Definition at line 72 of file PhotonConversionTrajectorySeedProducerFromSingleLegAlgo.h.

Referenced by analyze().

CombinedHitPairGeneratorForPhotonConversion* PhotonConversionTrajectorySeedProducerFromSingleLegAlgo::theHitsGenerator
private
GlobalTrackingRegionProducerFromBeamSpot* PhotonConversionTrajectorySeedProducerFromSingleLegAlgo::theRegionProducer
private
SeedForPhotonConversion1Leg* PhotonConversionTrajectorySeedProducerFromSingleLegAlgo::theSeedCreator
private
bool PhotonConversionTrajectorySeedProducerFromSingleLegAlgo::theSilentOnClusterCheck
private

Definition at line 73 of file PhotonConversionTrajectorySeedProducerFromSingleLegAlgo.h.

Referenced by analyze().

edm::EDGetTokenT<reco::BeamSpot> PhotonConversionTrajectorySeedProducerFromSingleLegAlgo::token_bs
private
edm::EDGetTokenT<reco::TrackCollection> PhotonConversionTrajectorySeedProducerFromSingleLegAlgo::token_refitter
private
edm::EDGetTokenT<reco::VertexCollection> PhotonConversionTrajectorySeedProducerFromSingleLegAlgo::token_vertex
private
edm::Handle<reco::TrackCollection> PhotonConversionTrajectorySeedProducerFromSingleLegAlgo::trackCollectionH
private
edm::Handle<TrajTrackAssociationCollection> PhotonConversionTrajectorySeedProducerFromSingleLegAlgo::trajTrackAssociations
private
reco::VertexCollection PhotonConversionTrajectorySeedProducerFromSingleLegAlgo::vertexCollection
private
edm::Handle<reco::VertexCollection> PhotonConversionTrajectorySeedProducerFromSingleLegAlgo::vertexHandle
private