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
ConvBremSeedProducer Class Reference

#include <ConvBremSeedProducer.h>

Inheritance diagram for ConvBremSeedProducer:
edm::EDProducer edm::ProducerBase edm::ProductRegistryHelper

Public Member Functions

 ConvBremSeedProducer (const edm::ParameterSet &)
 
 ~ConvBremSeedProducer ()
 
- Public Member Functions inherited from edm::EDProducer
 EDProducer ()
 
virtual ~EDProducer ()
 
- Public Member Functions inherited from edm::ProducerBase
 ProducerBase ()
 
void registerProducts (ProducerBase *, ProductRegistry *, ModuleDescription const &)
 
boost::function< void(const
BranchDescription &)> 
registrationCallback () const
 used by the fwk to register list of products More...
 
virtual ~ProducerBase ()
 

Private Types

typedef
GeometricSearchDet::DetWithState 
DetWithState
 
typedef
SiStripMatchedRecHit2DCollection::const_iterator 
MatDetMatch
 
typedef
SiStripMatchedRecHit2DCollection::DetSet 
MatDetSet
 
typedef
SiPixelRecHitCollection::const_iterator 
PiDetMatch
 
typedef
SiPixelRecHitCollection::DetSet 
PiDetSet
 
typedef
SiStripRecHit2DCollection::const_iterator 
StDetMatch
 
typedef
SiStripRecHit2DCollection::DetSet 
StDetSet
 

Private Member Functions

virtual void beginRun (edm::Run &, const edm::EventSetup &)
 
const DetLayerdetLayer (const TrackerLayer &layer, float zpos) const
 
virtual void endRun ()
 
int GoodCluster (BaseParticlePropagator bpg, const reco::PFClusterCollection &pfc, float minep, bool sec=false)
 
void initializeLayerMap ()
 
bool isGsfTrack (TrackingRecHitRefVector, const TrackingRecHit *)
 
TrajectoryStateOnSurface makeTrajectoryState (const DetLayer *layer, const ParticlePropagator &pp, const MagneticField *field) const
 
virtual void produce (edm::Event &, const edm::EventSetup &)
 
std::vector< bool > sharedHits (std::vector< std::pair< TrajectorySeed, std::pair< GlobalVector, float > > >)
 

Private Attributes

math::XYZVector B_
 B field. More...
 
edm::ParameterSet conf_
 
const MagneticFieldMapfieldMap_
 
const TrackerInteractionGeometrygeometry_
 
const GeometricSearchTrackergeomSearchTracker_
 
const
TransientTrackingRecHitBuilder
hitBuilder_
 
const KFUpdatorkfUpdator_
 
std::vector< const DetLayer * > layerMap_
 
const MagneticFieldmagfield_
 
int negLayerOffset_
 
const PropagatorWithMaterialpropagator_
 
std::vector< const DetLayer * > theLayerMap
 
const TrackerGeometrytracker_
 
const TrajectoryStateTransformtransformer_
 

Additional Inherited Members

- Public Types inherited from edm::EDProducer
typedef EDProducer ModuleType
 
typedef WorkerT< EDProducerWorkerType
 
- Public Types inherited from edm::ProducerBase
typedef
ProductRegistryHelper::TypeLabelList 
TypeLabelList
 
- Static Public Member Functions inherited from edm::EDProducer
static const std::string & baseType ()
 
static void fillDescriptions (ConfigurationDescriptions &descriptions)
 
- Protected Member Functions inherited from edm::EDProducer
CurrentProcessingContext const * currentContext () const
 
- Protected Member Functions inherited from edm::ProducerBase
template<class TProducer , class TMethod >
void callWhenNewProductsRegistered (TProducer *iProd, TMethod iMethod)
 

Detailed Description

Definition at line 41 of file ConvBremSeedProducer.h.

Member Typedef Documentation

Definition at line 48 of file ConvBremSeedProducer.h.

Definition at line 44 of file ConvBremSeedProducer.h.

Definition at line 47 of file ConvBremSeedProducer.h.

Definition at line 43 of file ConvBremSeedProducer.h.

Definition at line 46 of file ConvBremSeedProducer.h.

Definition at line 42 of file ConvBremSeedProducer.h.

Definition at line 45 of file ConvBremSeedProducer.h.

Constructor & Destructor Documentation

ConvBremSeedProducer::ConvBremSeedProducer ( const edm::ParameterSet iConfig)
explicit

Definition at line 51 of file ConvBremSeedProducer.cc.

51  :
52  conf_(iConfig),
53  fieldMap_(0),
54  layerMap_(56, static_cast<const DetLayer*>(0)),
55  negLayerOffset_(27)
56 {
57  produces<ConvBremSeedCollection>();
58 }
edm::ParameterSet conf_
const MagneticFieldMap * fieldMap_
std::vector< const DetLayer * > layerMap_
ConvBremSeedProducer::~ConvBremSeedProducer ( )

Definition at line 61 of file ConvBremSeedProducer.cc.

62 {
63 
64 
65 }

Member Function Documentation

void ConvBremSeedProducer::beginRun ( edm::Run run,
const edm::EventSetup iSetup 
)
privatevirtual

Reimplemented from edm::EDProducer.

Definition at line 387 of file ConvBremSeedProducer.cc.

References alongMomentum, B_, conf_, fieldMap_, geometry_, geomSearchTracker_, edm::EventSetup::get(), edm::ParameterSet::getParameter(), hitBuilder_, MagneticField::inTesla(), kfUpdator_, autoMagneticFieldProducer_cfi::magfield, magfield_, edm::ESHandle< class >::product(), propagator_, patCandidatesForDimuonsSequences_cff::tracker, tracker_, and transformer_.

389 {
391  iSetup.get<TrackerRecoGeometryRecord>().get( track );
392  geomSearchTracker_ = track.product();
393 
394  ESHandle<TrackerInteractionGeometry> theTrackerInteractionGeometry;
395  iSetup.get<TrackerInteractionGeometryRecord>().get(theTrackerInteractionGeometry );
396  geometry_=theTrackerInteractionGeometry.product();
397 
399  iSetup.get<TrackerDigiGeometryRecord>().get(tracker);
400  tracker_=tracker.product();
401 
403  iSetup.get<IdealMagneticFieldRecord>().get(magfield);
404  magfield_=magfield.product();
405  B_=magfield_->inTesla(GlobalPoint(0,0,0));
406 
408  iSetup.get<MagneticFieldMapRecord>().get(fieldMap);
409  fieldMap_ =fieldMap.product();
410 
411 
412 
414  iSetup.get<TransientRecHitRecord>().get(conf_.getParameter<string>("TTRHBuilder"),hitBuilder);
415  hitBuilder_= hitBuilder.product();
416 
417  propagator_ = new PropagatorWithMaterial(alongMomentum,0.0005,&(*magfield) );
418  kfUpdator_ = new KFUpdator();
420 }
const MagneticField * magfield_
T getParameter(std::string const &) const
const GeometricSearchTracker * geomSearchTracker_
const TransientTrackingRecHitBuilder * hitBuilder_
virtual GlobalVector inTesla(const GlobalPoint &gp) const =0
Field value ad specified global point, in Tesla.
const TrajectoryStateTransform * transformer_
edm::ParameterSet conf_
Global3DPoint GlobalPoint
Definition: GlobalPoint.h:10
const PropagatorWithMaterial * propagator_
const KFUpdator * kfUpdator_
const TrackerInteractionGeometry * geometry_
const MagneticFieldMap * fieldMap_
math::XYZVector B_
B field.
const T & get() const
Definition: EventSetup.h:55
T const * product() const
Definition: ESHandle.h:62
const TrackerGeometry * tracker_
const DetLayer * ConvBremSeedProducer::detLayer ( const TrackerLayer layer,
float  zpos 
) const
private

Definition at line 529 of file ConvBremSeedProducer.cc.

References TrackerLayer::forward(), layerMap_, TrackerLayer::layerNumber(), and negLayerOffset_.

Referenced by produce().

530 {
531  if (zpos > 0 || !layer.forward() ) return layerMap_[layer.layerNumber()];
532  else return layerMap_[layer.layerNumber()+negLayerOffset_];
533 }
unsigned int layerNumber() const
Returns the layer number.
Definition: TrackerLayer.h:82
bool forward() const
Is the layer forward ?
Definition: TrackerLayer.h:70
std::vector< const DetLayer * > layerMap_
void ConvBremSeedProducer::endRun ( void  )
privatevirtual

Definition at line 423 of file ConvBremSeedProducer.cc.

References kfUpdator_, propagator_, and transformer_.

423  {
424  delete propagator_;
425  delete kfUpdator_;
426  delete transformer_;
427 }
const TrajectoryStateTransform * transformer_
const PropagatorWithMaterial * propagator_
const KFUpdator * kfUpdator_
int ConvBremSeedProducer::GoodCluster ( BaseParticlePropagator  bpg,
const reco::PFClusterCollection pfc,
float  minep,
bool  sec = false 
)
private

Definition at line 612 of file ConvBremSeedProducer.cc.

References eta(), BaseParticlePropagator::getSuccess(), i, RawParticle::momentum(), phi, position, funct::pow(), BaseParticlePropagator::propagateToEcalEntrance(), mathSSE::sqrt(), TwoPi, and RawParticle::vertex().

Referenced by produce().

612  {
613 
614  bpg.propagateToEcalEntrance(false);
615  float dr=1000;
616  float de=1000;
617  float df=1000;
618  int ibest=-1;
619 
620  if(bpg.getSuccess()!=0){
621 
622  for (unsigned int i =0; i<pfc.size();i++ ){
623  float tmp_ep=pfc[i].energy()/bpg.momentum().e();
624  float tmp_phi=fabs(pfc[i].position().phi()-bpg.vertex().phi());
625  if (tmp_phi>TMath::TwoPi()) tmp_phi-= TMath::TwoPi();
626  float tmp_eta=fabs(pfc[i].position().eta()-bpg.vertex().eta());
627  float tmp_dr=sqrt(pow(tmp_phi,2)+pow(tmp_eta,2));
628  bool isBet=(tmp_dr<dr);
629  if (sec) isBet=(tmp_phi<df);
630  if ((isBet)&&(tmp_ep>minep)&&(tmp_ep<10)){
631  dr=tmp_dr;
632  de=tmp_eta;
633  df=tmp_phi;
634  ibest=i;
635  }
636  }
637  bool isBad=(dr>0.1);
638  if (sec) isBad= ((df>0.25) || (de>0.5));
639 
640  if (isBad) ibest=-1;
641 
642  }
643  return ibest;
644 }
const double TwoPi
int i
Definition: DBlmapReader.cc:9
int getSuccess() const
Has propagation been performed and was barrel or endcap reached ?
T eta() const
static int position[TOTALCHAMBERS][3]
Definition: ReadPGInfo.cc:509
const XYZTLorentzVector & momentum() const
the momentum fourvector
Definition: RawParticle.h:285
T sqrt(T t)
Definition: SSEVec.h:28
bool propagateToEcalEntrance(bool first=true)
const XYZTLorentzVector & vertex() const
the vertex fourvector
Definition: RawParticle.h:284
Power< A, B >::type pow(const A &a, const B &b)
Definition: Power.h:40
Definition: DDAxes.h:10
void ConvBremSeedProducer::initializeLayerMap ( )
private

ATTENTION: HARD CODED LOGIC! If Famos layer numbering changes this logic needs to be adapted to the new numbering!

Definition at line 430 of file ConvBremSeedProducer.cc.

References GeometricSearchTracker::barrelLayers(), TrackerInteractionGeometry::cylinderBegin(), TrackerInteractionGeometry::cylinderEnd(), newFWLiteAna::found, geometry_, geomSearchTracker_, i, BoundDisk::innerRadius(), layerMap_, LogDebug, BoundDisk::outerRadius(), GeometricSearchTracker::posForwardLayers(), GloballyPositioned< T >::position(), Cylinder::radius(), and PV3DBase< T, PVType, FrameType >::z().

Referenced by produce().

431 {
432 
433 
434  // These are the BoundSurface&, the BoundDisk* and the BoundCylinder* for that layer
435  // const BoundSurface& theSurface = layer.surface();
436  // BoundDisk* theDisk = layer.disk(); // non zero for endcaps
437  // BoundCylinder* theCylinder = layer.cylinder(); // non zero for barrel
438  // int theLayer = layer.layerNumber(); // 1->3 PixB, 4->5 PixD,
439  // // 6->9 TIB, 10->12 TID,
440  // // 13->18 TOB, 19->27 TEC
441 
444 
445  std::vector< BarrelDetLayer*> barrelLayers =
447  LogDebug("FastTracker") << "Barrel DetLayer dump: ";
448  for (std::vector< BarrelDetLayer*>::const_iterator bl=barrelLayers.begin();
449  bl != barrelLayers.end(); ++bl) {
450  LogDebug("FastTracker")<< "radius " << (**bl).specificSurface().radius();
451  }
452 
453  std::vector< ForwardDetLayer*> posForwardLayers =
455  LogDebug("FastTracker") << "Positive Forward DetLayer dump: ";
456  for (std::vector< ForwardDetLayer*>::const_iterator fl=posForwardLayers.begin();
457  fl != posForwardLayers.end(); ++fl) {
458  LogDebug("FastTracker") << "Z pos "
459  << (**fl).surface().position().z()
460  << " radii "
461  << (**fl).specificSurface().innerRadius()
462  << ", "
463  << (**fl).specificSurface().outerRadius();
464  }
465 
466  const float rTolerance = 1.5;
467  const float zTolerance = 3.;
468 
469  LogDebug("FastTracker")<< "Dump of TrackerInteractionGeometry cylinders:";
470  for( std::list<TrackerLayer>::const_iterator i=geometry_->cylinderBegin();
471  i!=geometry_->cylinderEnd(); ++i) {
472  const BoundCylinder* cyl = i->cylinder();
473  const BoundDisk* disk = i->disk();
474 
475  LogDebug("FastTracker") << "Famos Layer no " << i->layerNumber()
476  << " is sensitive? " << i->sensitive()
477  << " pos " << i->surface().position();
478  if (!i->sensitive()) continue;
479 
480  if (cyl != 0) {
481 
482  LogDebug("FastTracker") << " cylinder radius " << cyl->radius();
483  bool found = false;
484 
485  for (std::vector< BarrelDetLayer*>::const_iterator
486  bl=barrelLayers.begin(); bl != barrelLayers.end(); ++bl) {
487 
488  if (fabs( cyl->radius() - (**bl).specificSurface().radius()) < rTolerance) {
489 
490  layerMap_[i->layerNumber()] = *bl;
491  found = true;
492  LogDebug("FastTracker")<< "Corresponding DetLayer found with radius "
493  << (**bl).specificSurface().radius();
494 
495  break;
496  }
497  }
498  if (!found) {
499  LogError("FastTracker") << "FAILED to find a corresponding DetLayer!";
500  }
501  }
502  else {
503  LogDebug("FastTracker") << " disk radii " << disk->innerRadius()
504  << ", " << disk->outerRadius();
505 
506  bool found = false;
507 
508  for (std::vector< ForwardDetLayer*>::const_iterator fl=posForwardLayers.begin();
509  fl != posForwardLayers.end(); ++fl) {
510  if (fabs( disk->position().z() - (**fl).surface().position().z()) < zTolerance) {
511  layerMap_[i->layerNumber()] = *fl;
512  found = true;
513  LogDebug("FastTracker") << "Corresponding DetLayer found with Z pos "
514  << (**fl).surface().position().z()
515  << " and radii "
516  << (**fl).specificSurface().innerRadius()
517  << ", "
518  << (**fl).specificSurface().outerRadius();
519  break;
520  }
521  }
522  if (!found) {
523  LogError("FastTracker") << "FAILED to find a corresponding DetLayer!";
524  }
525  }
526  }
527 
528 }
#define LogDebug(id)
const GeometricSearchTracker * geomSearchTracker_
int i
Definition: DBlmapReader.cc:9
std::list< TrackerLayer >::const_iterator cylinderEnd() const
Returns the last pointer in the cylinder list.
const TrackerInteractionGeometry * geometry_
std::vector< BarrelDetLayer * > const & barrelLayers() const
Scalar radius() const
Radius of the cylinder.
Definition: Cylinder.h:55
T z() const
Definition: PV3DBase.h:58
std::vector< const DetLayer * > layerMap_
std::vector< ForwardDetLayer * > const & posForwardLayers() const
std::list< TrackerLayer >::const_iterator cylinderBegin() const
Returns the first pointer in the cylinder list.
float outerRadius() const
The outer radius of the disk.
Definition: BoundDisk.cc:10
float innerRadius() const
The inner radius of the disk.
Definition: BoundDisk.cc:6
const PositionType & position() const
bool ConvBremSeedProducer::isGsfTrack ( TrackingRecHitRefVector  tkv,
const TrackingRecHit h 
)
private

Definition at line 549 of file ConvBremSeedProducer.cc.

References TrackingRecHit::all, edm::RefVector< C, T, F >::begin(), and edm::RefVector< C, T, F >::end().

Referenced by produce().

549  {
551  trackingRecHit_iterator ie=tkv.end();
552  bool istaken=false;
553  // for (;ib!=ie-2;++ib){
554  for (;ib!=ie;++ib){
555  if (istaken) continue;
556  if (!((*ib)->isValid())) continue;
557 
558  istaken = (*ib)->sharesInput(h,TrackingRecHit::all);
559  }
560  return istaken;
561 }
const_iterator end() const
Termination of iteration.
Definition: RefVector.h:243
const_iterator begin() const
Initialize an iterator over the RefVector.
Definition: RefVector.h:238
TrajectoryStateOnSurface ConvBremSeedProducer::makeTrajectoryState ( const DetLayer layer,
const ParticlePropagator pp,
const MagneticField field 
) const
private

Definition at line 536 of file ConvBremSeedProducer.cc.

References RawParticle::charge(), pos, GeometricSearchDet::surface(), Surface::tangentPlane(), RawParticle::X(), RawParticle::Y(), and RawParticle::Z().

Referenced by produce().

539 {
540 
541  GlobalPoint pos( pp.X(), pp.Y(), pp.Z());
542  GlobalVector mom( pp.Px(), pp.Py(), pp.Pz());
543 
545 
547  (GlobalTrajectoryParameters( pos, mom, TrackCharge( pp.charge()), field), *plane);
548 }
virtual const BoundSurface & surface() const =0
The surface of the GeometricSearchDet.
int TrackCharge
Definition: TrackCharge.h:4
double Y() const
y of vertex
Definition: RawParticle.h:274
double Z() const
z of vertex
Definition: RawParticle.h:275
double charge() const
get the MEASURED charge
Definition: RawParticle.h:281
virtual ReferenceCountingPointer< TangentPlane > tangentPlane(const GlobalPoint &) const =0
double X() const
x of vertex
Definition: RawParticle.h:273
void ConvBremSeedProducer::produce ( edm::Event iEvent,
const edm::EventSetup iSetup 
)
privatevirtual

INPUT COLLECTIONS

PF CLUSTERS

PIXEL

STRIP

OUTPUT COLLECTION

INITIALIZE

LOOP OVER GSF TRACK COLLECTION

FIND THE CLUSTER ASSOCIATED TO THE GSF TRACK

LOOP OVER BREM PHOTONS

BREM SELECTION

LOOP OVER TRACKER LAYER

TRACKER LAYER SELECTION

FIND COMPATIBLE MODULES

MODULE TRIPLETS SELECTION

SEED CREATION

Implements edm::EDProducer.

Definition at line 69 of file ConvBremSeedProducer.cc.

References alongMomentum, anyDirection, B_, edmNew::DetSet< T >::begin(), TransientTrackingRecHitBuilder::build(), GlobalTrajectoryParameters::charge(), edm::OwnVector< T, P >::clear(), clone(), GeometricSearchDet::compatibleDets(), conf_, TrackerInteractionGeometry::cylinderBegin(), TrackerInteractionGeometry::cylinderEnd(), cond::rpcobgas::detid, detLayer(), edmNew::DetSet< T >::end(), edm::EventID::event(), fieldMap_, spr::find(), first, geometry_, edm::Event::getByLabel(), BaseParticlePropagator::getMagneticField(), edm::ParameterSet::getParameter(), BaseParticlePropagator::getSuccess(), GoodCluster(), hitBuilder_, i, edm::EventBase::id(), TrackerGeometry::idToDet(), initializeLayerMap(), isGsfTrack(), TrajectoryStateOnSurface::isValid(), kfUpdator_, LogDebug, magfield_, makeTrajectoryState(), GlobalTrajectoryParameters::momentum(), convertSQLitetoXML_cfg::output, L1TEmulatorMonitor_cff::p, FreeTrajectoryState::parameters(), PV3DBase< T, PVType, FrameType >::perp(), TrajectoryStateTransform::persistentState(), GeomDetEnumerators::PixelBarrel, GeomDetEnumerators::PixelEndcap, pos, GlobalTrajectoryParameters::position(), position, edm::Handle< T >::product(), PropagatorWithMaterial::propagate(), BaseParticlePropagator::propagate(), propagator_, edm::OwnVector< T, P >::push_back(), edm::Event::put(), edm::EventID::run(), RawParticle::setCharge(), ParticlePropagator::setPropagationConditions(), sharedHits(), mathSSE::sqrt(), evf::utils::state, FastHelix::stateAtVertex(), DetLayer::subDetector(), GeomDet::surface(), cond::rpcobtemp::temp, tmp, tracker_, transformer_, KFUpdator::update(), PV3DBase< T, PVType, FrameType >::x(), PV3DBase< T, PVType, FrameType >::y(), PV3DBase< T, PVType, FrameType >::z(), and RawParticle::Z().

70 {
71 
72  LogDebug("ConvBremSeedProducerProducer")<<"START event: "<<iEvent.id().event()
73  <<" in run "<<iEvent.id().run();
74 
75  float pfmass= 0.0005;
76 
78 
81  iEvent.getByLabel(conf_.getParameter<InputTag>("PFClusters") ,PfC);
82  const PFClusterCollection& PPP= *(PfC.product());
83 
86  iEvent.getByLabel(conf_.getParameter<InputTag>("pixelRecHits") , pixelHits);
87 
90  iEvent.getByLabel(conf_.getParameter<InputTag>("rphirecHits"),rphirecHits);
92  iEvent.getByLabel(conf_.getParameter<InputTag>("stereorecHits"), stereorecHits);
94  iEvent.getByLabel(conf_.getParameter<InputTag>("matchedrecHits"), matchedrecHits);
95 
96  //GSFPFRECTRACKS
97  Handle<GsfPFRecTrackCollection> thePfRecTrackCollection;
98  iEvent.getByLabel(conf_.getParameter<InputTag>("PFRecTrackLabel"),
99  thePfRecTrackCollection);
100  const GsfPFRecTrackCollection PfRTkColl = *(thePfRecTrackCollection.product());
101 
102 
104  std::auto_ptr<ConvBremSeedCollection> output(new ConvBremSeedCollection);
105 
106 
108  vector<pair< TrajectorySeed , pair<GlobalVector,float> > > unclean;
109  //TRIPLET OF MODULES TO BE USED FOR SEEDING
110  vector< vector< long int > > tripl;
111  //LAYER MAP
113 
114 
115 
117 
118  for(unsigned int ipft=0;ipft<PfRTkColl.size();ipft++){
119  GsfPFRecTrackRef pft(thePfRecTrackCollection,ipft);
120  LogDebug("ConvBremSeedProducerProducer")<<"NEW GsfPFRecTRACK ";
121  float eta_br=0;
122  unclean.clear();
123  tripl.clear();
124  vector<int> gc;
125  TrackingRecHitRefVector gsfRecHits=pft->gsfTrackRef()->extra()->recHits();
126  float pfoutenergy=sqrt((pfmass*pfmass)+pft->gsfTrackRef()->outerMomentum().Mag2());
127  XYZTLorentzVector mom =XYZTLorentzVector(pft->gsfTrackRef()->outerMomentum().x(),
128  pft->gsfTrackRef()->outerMomentum().y(),
129  pft->gsfTrackRef()->outerMomentum().z(),
130  pfoutenergy);
131  XYZTLorentzVector pos = XYZTLorentzVector(pft->gsfTrackRef()->outerPosition().x(),
132  pft->gsfTrackRef()->outerPosition().y(),
133  pft->gsfTrackRef()->outerPosition().z(),
134  0.);
136  0,0,B_.z());
137  theOutParticle.setCharge(pft->gsfTrackRef()->charge());
138 
140  gc.push_back(GoodCluster(theOutParticle,PPP,0.5));
141 
142 
143  vector<PFBrem> brem =(*pft).PFRecBrem();
144  vector<PFBrem>::iterator ib=brem.begin();
145  vector<PFBrem>::iterator ib_end=brem.end();
146  LogDebug("ConvBremSeedProducerProducer")<<"NUMBER OF BREMS "<<brem.size();
147 
149  for (;ib!=ib_end;++ib){
150 
151  XYZTLorentzVector mom=pft->trajectoryPoint(ib->indTrajPoint()).momentum();
152  XYZTLorentzVector pos=
154  pft->trajectoryPoint(ib->indTrajPoint()).position().x(),
155  pft->trajectoryPoint(ib->indTrajPoint()).position().y(),
156  pft->trajectoryPoint(ib->indTrajPoint()).position().z(),
157  0);
158 
160  if (pos.Rho()>80) continue;
161  if ((pos.Rho()>5)&&(fabs(ib->SigmaDeltaP()/ib->DeltaP())>3)) continue;
162  if (fabs(ib->DeltaP())<3) continue;
163  eta_br=mom.eta();
164  vector< vector< long int > >Idd;
165 
166 
167 
169  0,0,B_.z());
170  p.setCharge(0);
171  gc.push_back(GoodCluster(p,PPP,0.2));
172 
174 
176  list<TrackerLayer>::const_iterator cyliter= geometry_->cylinderBegin();
177  for ( ; cyliter != geometry_->cylinderEnd() ; ++cyliter ) {
178 
180  if (!(cyliter->sensitive())) continue;
181  PP.setPropagationConditions(*cyliter);
182  PP.propagate();
183  if (PP.getSuccess()==0) continue;
184 
186  LocalMagneticField mf(PP.getMagneticField());
187  AnalyticalPropagator alongProp(&mf, anyDirection);
189  const DetLayer* tkLayer = detLayer(*cyliter,PP.Z());
190  if (&(*tkLayer)==0) continue;
191  TrajectoryStateOnSurface trajState = makeTrajectoryState( tkLayer, PP, &mf);
192 
193  std::vector<DetWithState> compat
194  = tkLayer->compatibleDets( trajState, alongProp, est);
195  vector <long int> temp;
196  if (compat.size()==0) continue;
197 
198  for (std::vector<DetWithState>::const_iterator i=compat.begin(); i!=compat.end(); i++) {
199 
200  long int detid=i->first->geographicalId().rawId();
201 
202  if ((tkLayer->subDetector()!=GeomDetEnumerators::PixelBarrel)&&
204 
205 
206  StDetMatch DetMatch = (rphirecHits.product())->find((detid));
207  MatDetMatch MDetMatch =(matchedrecHits.product())->find((detid));
208 
209 
210  long int DetID=(DetMatch != rphirecHits->end())? detid:0;
211 
212  if ((MDetMatch != matchedrecHits->end()) && !MDetMatch->empty()) {
213  long int pii = MDetMatch->begin()->monoHit()->geographicalId().rawId();
214  StDetMatch CDetMatch = (rphirecHits.product())->find((pii));
215  DetID=(CDetMatch != rphirecHits->end())? pii:0;
216 
217  }
218 
219  temp.push_back(DetID);
220 
221  }
222  else{
223  PiDetMatch DetMatch = (pixelHits.product())->find((detid));
224  long int DetID=(DetMatch != pixelHits->end())? detid:0;
225  temp.push_back(DetID);
226 
227 
228  }
229  }
230 
231  Idd.push_back(temp);
232 
233  }//END TRACKER LAYER LOOP
234  if(Idd.size()<2)continue;
235 
237  for (unsigned int i=0;i<Idd.size()-2;i++){
238  for (unsigned int i1=0;i1<Idd[i].size();i1++){
239  for (unsigned int i2=0;i2<Idd[i+1].size();i2++){
240  for (unsigned int i3=0;i3<Idd[i+2].size();i3++){
241  if ((Idd[i][i1]!=0) &&(Idd[i+1][i2]!=0) &&(Idd[i+2][i3]!=0) ){
242  vector<long int >tmp;
243  tmp.push_back(Idd[i][i1]); tmp.push_back(Idd[i+1][i2]); tmp.push_back(Idd[i+2][i3]);
244 
245  bool newTrip=true;
246  for (unsigned int iv=0;iv<tripl.size();iv++){
247  if((tripl[iv][0]==tmp[0])&&(tripl[iv][1]==tmp[1])&&(tripl[iv][2]==tmp[2])) newTrip=false;
248 
249  }
250  if (newTrip){
251 
252  tripl.push_back(tmp);
253  }
254  }
255  }
256  }
257  }
258  }
259  }//END BREM LOOP
260 
261  float sineta_brem =sinh(eta_br);
262 
263 
264  //OUTPUT COLLECTION
265 
267  OwnVector<TrackingRecHit> loc_hits;
268  for (unsigned int i=0;i<tripl.size();i++){
269  StDetMatch DetMatch1 = (rphirecHits.product())->find(tripl[i][0]);
270  StDetMatch DetMatch2 = (rphirecHits.product())->find(tripl[i][1]);
271  StDetMatch DetMatch3 = (rphirecHits.product())->find(tripl[i][2]);
272  if ((DetMatch1 == rphirecHits->end()) ||
273  (DetMatch2 == rphirecHits->end()) ||
274  (DetMatch3 == rphirecHits->end()) ) continue;
275  StDetSet DetSet1 = *DetMatch1;
276  StDetSet DetSet2 = *DetMatch2;
277  StDetSet DetSet3 = *DetMatch3;
278 
279  for (StDetSet::const_iterator it1=DetSet1.begin();it1!=DetSet1.end();++it1){
280  GlobalPoint gp1=tracker_->idToDet(tripl[i][0])->surface().
281  toGlobal(it1->localPosition());
282 
283  bool tak1=isGsfTrack(gsfRecHits,&(*it1));
284 
285  for (StDetSet::const_iterator it2=DetSet2.begin();it2!=DetSet2.end();++it2){
286  GlobalPoint gp2=tracker_->idToDet(tripl[i][1])->surface().
287  toGlobal(it2->localPosition());
288  bool tak2=isGsfTrack(gsfRecHits,&(*it2));
289 
290  for (StDetSet::const_iterator it3=DetSet3.begin();it3!=DetSet3.end();++it3){
291  // ips++;
292  GlobalPoint gp3=tracker_->idToDet(tripl[i][2])->surface().
293  toGlobal(it3->localPosition());
294  bool tak3=isGsfTrack(gsfRecHits,&(*it3));
295 
296 
297  FastHelix helix(gp3, gp2, gp1,iSetup);
298  GlobalVector gv=helix.stateAtVertex().parameters().momentum();
299  GlobalVector gv_corr(gv.x(),gv.y(),gv.perp()*sineta_brem);
300  float ene= sqrt(gv_corr.mag2()+(pfmass*pfmass));
301 
302  GlobalPoint gp=helix.stateAtVertex().parameters().position();
303  float ch=helix.stateAtVertex().parameters().charge();
304 
305 
306 
307 
308  XYZTLorentzVector mom = XYZTLorentzVector(gv.x(),gv.y(),gv_corr.z(),ene);
309  XYZTLorentzVector pos = XYZTLorentzVector(gp.x(),gp.y(),gp.z(),0.);
310  BaseParticlePropagator theOutParticle(RawParticle(mom,pos),0,0,B_.z());
311  theOutParticle.setCharge(ch);
312  int bgc=GoodCluster(theOutParticle,PPP,0.3,true);
313 
314  if (gv.perp()<0.5) continue;
315 
316  if (tak1+tak2+tak3>2) continue;
317 
318  if (bgc==-1) continue;
319  bool clTak=false;
320  for (unsigned int igcc=0; igcc<gc.size(); igcc++){
321  if (clTak) continue;
322  if (bgc==gc[igcc]) clTak=true;
323  }
324  if (clTak) continue;
325 
326 
327 
328 
330  gv,int(ch),
331  &(*magfield_));
332  glob_hits.clear(); loc_hits.clear();
333  glob_hits.push_back(hitBuilder_->build(it1->clone()));
334  glob_hits.push_back(hitBuilder_->build(it2->clone()));
335  glob_hits.push_back(hitBuilder_->build(it3->clone()));
336 
338 
339  FreeTrajectoryState CSeed(Gtp,
341  TrajectoryStateOnSurface updatedState;
342 
343  for (int ih=0;ih<3;ih++){
344 
346  propagator_->propagate(CSeed,
347  tracker_->idToDet(tripl[i][ih])->surface()):
348  propagator_->propagate(updatedState,
349  tracker_->idToDet(tripl[i][ih])->surface());
350 
351  if (!state.isValid()){
352  ih=3;
353  continue;}
354 
355  updatedState = kfUpdator_->update(state, *glob_hits[ih]);
356  loc_hits.push_back(glob_hits[ih]->hit()->clone());
357  if (ih==2){
358  PTrajectoryStateOnDet *PTraj=
359  transformer_->persistentState(updatedState,tripl[i][2]);
360  // output->push_back(Trajectoryseed(*PTraj,loc_hits,alongMomentum));
361  unclean.push_back(make_pair(TrajectorySeed(*PTraj,loc_hits,alongMomentum),
362  make_pair(gv_corr,ch)));
363  }
364  // }
365 
366  }
367  }
368  }
369  }
370  }
371  vector<bool> inPhot = sharedHits(unclean);
372  for (unsigned int iu=0; iu<unclean.size();iu++){
373 
374  if (inPhot[iu])
375  output->push_back(ConvBremSeed(unclean[iu].first,pft));
376 
377  }
378 
379  } //END GSF TRACK COLLECTION LOOP
380  LogDebug("ConvBremSeedProducerProducer")<<"END";
381  iEvent.put(output);
382 
383 }
#define LogDebug(id)
RunNumber_t run() const
Definition: EventID.h:42
const MagneticField * magfield_
void setCharge(float q)
set the MEASURED charge
Definition: RawParticle.cc:138
T getParameter(std::string const &) const
EventNumber_t event() const
Definition: EventID.h:44
int i
Definition: DBlmapReader.cc:9
std::vector< bool > sharedHits(std::vector< std::pair< TrajectorySeed, std::pair< GlobalVector, float > > >)
const TransientTrackingRecHitBuilder * hitBuilder_
T perp() const
Definition: PV3DBase.h:66
SiStripMatchedRecHit2DCollection::const_iterator MatDetMatch
ROOT::Math::SMatrixIdentity AlgebraicMatrixID
const TrajectoryStateTransform * transformer_
edm::ParameterSet conf_
const PropagatorWithMaterial * propagator_
T y() const
Definition: PV3DBase.h:57
virtual SubDetector subDetector() const =0
The type of detector (PixelBarrel, PixelEndcap, TIB, TOB, TID, TEC, CSC, DT, RPCBarrel, RPCEndcap)
std::list< TrackerLayer >::const_iterator cylinderEnd() const
Returns the last pointer in the cylinder list.
TrajectoryStateOnSurface makeTrajectoryState(const DetLayer *layer, const ParticlePropagator &pp, const MagneticField *field) const
ROOT::Math::SMatrix< double, 5, 5, ROOT::Math::MatRepSym< double, 5 > > AlgebraicSymMatrix55
data_type const * const_iterator
Definition: DetSetNew.h:25
std::vector< ConvBremSeed > ConvBremSeedCollection
collectin of ConvBremSeed objects
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
Definition: FindCaloHit.cc:7
virtual std::vector< DetWithState > compatibleDets(const TrajectoryStateOnSurface &startingState, const Propagator &prop, const MeasurementEstimator &est) const
static int position[TOTALCHAMBERS][3]
Definition: ReadPGInfo.cc:509
SiPixelRecHitCollection::const_iterator PiDetMatch
const KFUpdator * kfUpdator_
const TrackerInteractionGeometry * geometry_
const MagneticFieldMap * fieldMap_
XYZTLorentzVectorD XYZTLorentzVector
Lorentz vector with cylindrical internal representation using pseudorapidity.
Definition: LorentzVector.h:30
void push_back(D *&d)
Definition: OwnVector.h:290
math::XYZVector B_
B field.
std::vector< GsfPFRecTrack > GsfPFRecTrackCollection
collection of GsfPFRecTrack objects
OrphanHandle< PROD > put(std::auto_ptr< PROD > product)
Put a new product.
Definition: Event.h:84
T sqrt(T t)
Definition: SSEVec.h:28
virtual RecHitPointer build(const TrackingRecHit *p) const =0
build a tracking rechit from an existing rechit
T z() const
Definition: PV3DBase.h:58
void clear()
Definition: OwnVector.h:399
PTrajectoryStateOnDet * persistentState(const TrajectoryStateOnSurface &ts, unsigned int detid) const
bool first
Definition: L1TdeRCT.cc:79
virtual const GeomDet * idToDet(DetId) const
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
Definition: Event.h:355
SiStripRecHit2DCollection::DetSet StDetSet
virtual TrajectoryStateOnSurface propagate(const TrajectoryStateOnSurface &tsos, const Plane &plane) const
std::vector< ConstRecHitPointer > ConstRecHitContainer
const DetLayer * detLayer(const TrackerLayer &layer, float zpos) const
T * clone(const T *tp)
Definition: Ptr.h:42
int GoodCluster(BaseParticlePropagator bpg, const reco::PFClusterCollection &pfc, float minep, bool sec=false)
std::list< TrackerLayer >::const_iterator cylinderBegin() const
Returns the first pointer in the cylinder list.
T const * product() const
Definition: Handle.h:74
char state
Definition: procUtils.cc:75
std::vector< std::vector< double > > tmp
Definition: MVATrainer.cc:100
edm::EventID id() const
Definition: EventBase.h:56
TrajectoryStateOnSurface update(const TrajectoryStateOnSurface &, const TransientTrackingRecHit &) const
Definition: KFUpdator.cc:10
SiStripRecHit2DCollection::const_iterator StDetMatch
std::vector< PFCluster > PFClusterCollection
collection of PFCluster objects
Definition: PFClusterFwd.h:9
bool isGsfTrack(TrackingRecHitRefVector, const TrackingRecHit *)
const TrackerGeometry * tracker_
T x() const
Definition: PV3DBase.h:56
virtual const BoundPlane & surface() const
The nominal surface of the GeomDet.
Definition: GeomDet.h:37
math::XYZTLorentzVector XYZTLorentzVector
Definition: RawParticle.h:15
vector< bool > ConvBremSeedProducer::sharedHits ( std::vector< std::pair< TrajectorySeed, std::pair< GlobalVector, float > > >  unclean)
private

Definition at line 562 of file ConvBremSeedProducer.cc.

References TrackingRecHit::all, i, and edm::second().

Referenced by produce().

563  {
564 
565  vector<bool> goodseed;
566  goodseed.clear();
567  if (unclean.size()<2){
568  for (unsigned int i=0;i<unclean.size();i++)
569  goodseed.push_back(true);
570  }else{
571 
572  for (unsigned int i=0;i<unclean.size();i++)
573  goodseed.push_back(true);
574 
575  for (unsigned int iu=0; iu<unclean.size()-1;iu++){
576  if (!goodseed[iu]) continue;
577  for (unsigned int iu2=iu+1; iu2<unclean.size();iu2++){
578  if (!goodseed[iu]) continue;
579  if (!goodseed[iu2]) continue;
580  // if (unclean[iu].second.second *unclean[iu2].second.second >0)continue;
581 
582  TrajectorySeed::const_iterator sh = unclean[iu].first.recHits().first;
583  TrajectorySeed::const_iterator sh_end = unclean[iu].first.recHits().second;
584 
585  unsigned int shar =0;
586  for (;sh!=sh_end;++sh){
587 
588  TrajectorySeed::const_iterator sh2 = unclean[iu2].first.recHits().first;
589  TrajectorySeed::const_iterator sh2_end = unclean[iu2].first.recHits().second;
590  for (;sh2!=sh2_end;++sh2){
591 
592  if ((*sh).sharesInput(&(*sh2),TrackingRecHit::all))
593 
594  shar++;
595 
596  }
597  }
598  if (shar>=2){
599  if (unclean[iu].second.first.perp()<unclean[iu2].second.first.perp()) goodseed[iu]=false;
600  else goodseed[iu2]=false;
601  }
602 
603  }
604 
605  }
606  }
607  return goodseed;
608 }
int i
Definition: DBlmapReader.cc:9
U second(std::pair< T, U > const &p)
recHitContainer::const_iterator const_iterator

Member Data Documentation

math::XYZVector ConvBremSeedProducer::B_
private

B field.

Definition at line 86 of file ConvBremSeedProducer.h.

Referenced by beginRun(), and produce().

edm::ParameterSet ConvBremSeedProducer::conf_
private

Definition at line 73 of file ConvBremSeedProducer.h.

Referenced by beginRun(), and produce().

const MagneticFieldMap* ConvBremSeedProducer::fieldMap_
private

Definition at line 78 of file ConvBremSeedProducer.h.

Referenced by beginRun(), and produce().

const TrackerInteractionGeometry* ConvBremSeedProducer::geometry_
private

Definition at line 75 of file ConvBremSeedProducer.h.

Referenced by beginRun(), initializeLayerMap(), and produce().

const GeometricSearchTracker* ConvBremSeedProducer::geomSearchTracker_
private

Definition at line 74 of file ConvBremSeedProducer.h.

Referenced by beginRun(), and initializeLayerMap().

const TransientTrackingRecHitBuilder* ConvBremSeedProducer::hitBuilder_
private

Definition at line 81 of file ConvBremSeedProducer.h.

Referenced by beginRun(), and produce().

const KFUpdator* ConvBremSeedProducer::kfUpdator_
private

Definition at line 80 of file ConvBremSeedProducer.h.

Referenced by beginRun(), endRun(), and produce().

std::vector<const DetLayer*> ConvBremSeedProducer::layerMap_
private

Definition at line 83 of file ConvBremSeedProducer.h.

Referenced by detLayer(), and initializeLayerMap().

const MagneticField* ConvBremSeedProducer::magfield_
private

Definition at line 77 of file ConvBremSeedProducer.h.

Referenced by beginRun(), and produce().

int ConvBremSeedProducer::negLayerOffset_
private

Definition at line 84 of file ConvBremSeedProducer.h.

Referenced by detLayer().

const PropagatorWithMaterial* ConvBremSeedProducer::propagator_
private

Definition at line 79 of file ConvBremSeedProducer.h.

Referenced by beginRun(), endRun(), and produce().

std::vector<const DetLayer*> ConvBremSeedProducer::theLayerMap
private

Definition at line 59 of file ConvBremSeedProducer.h.

const TrackerGeometry* ConvBremSeedProducer::tracker_
private

Definition at line 76 of file ConvBremSeedProducer.h.

Referenced by beginRun(), and produce().

const TrajectoryStateTransform* ConvBremSeedProducer::transformer_
private

Definition at line 82 of file ConvBremSeedProducer.h.

Referenced by beginRun(), endRun(), and produce().