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)
 
static void prevalidate (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_, HLT_ES_cff::magfield, magfield_, edm::ESHandle< class >::product(), propagator_, patCandidatesForDimuonsSequences_cff::tracker, and tracker_.

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();
419 }
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.
edm::ParameterSet conf_
tuple magfield
Definition: HLT_ES_cff.py:2311
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 527 of file ConvBremSeedProducer.cc.

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

Referenced by produce().

528 {
529  if (zpos > 0 || !layer.forward() ) return layerMap_[layer.layerNumber()];
530  else return layerMap_[layer.layerNumber()+negLayerOffset_];
531 }
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 422 of file ConvBremSeedProducer.cc.

References kfUpdator_, and propagator_.

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

Definition at line 610 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().

610  {
611 
612  bpg.propagateToEcalEntrance(false);
613  float dr=1000;
614  float de=1000;
615  float df=1000;
616  int ibest=-1;
617 
618  if(bpg.getSuccess()!=0){
619 
620  for (unsigned int i =0; i<pfc.size();i++ ){
621  float tmp_ep=pfc[i].energy()/bpg.momentum().e();
622  float tmp_phi=fabs(pfc[i].position().phi()-bpg.vertex().phi());
623  if (tmp_phi>TMath::TwoPi()) tmp_phi-= TMath::TwoPi();
624  float tmp_eta=fabs(pfc[i].position().eta()-bpg.vertex().eta());
625  float tmp_dr=sqrt(pow(tmp_phi,2)+pow(tmp_eta,2));
626  bool isBet=(tmp_dr<dr);
627  if (sec) isBet=(tmp_phi<df);
628  if ((isBet)&&(tmp_ep>minep)&&(tmp_ep<10)){
629  dr=tmp_dr;
630  de=tmp_eta;
631  df=tmp_phi;
632  ibest=i;
633  }
634  }
635  bool isBad=(dr>0.1);
636  if (sec) isBad= ((df>0.25) || (de>0.5));
637 
638  if (isBad) ibest=-1;
639 
640  }
641  return ibest;
642 }
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
const XYZTLorentzVector & momentum() const
the momentum fourvector
Definition: RawParticle.h:285
T sqrt(T t)
Definition: SSEVec.h:46
bool propagateToEcalEntrance(bool first=true)
const XYZTLorentzVector & vertex() const
the vertex fourvector
Definition: RawParticle.h:284
static int position[264][3]
Definition: ReadPGInfo.cc:509
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 428 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().

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

Definition at line 547 of file ConvBremSeedProducer.cc.

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

Referenced by produce().

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

Definition at line 534 of file ConvBremSeedProducer.cc.

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

Referenced by produce().

537 {
538 
539  GlobalPoint pos( pp.X(), pp.Y(), pp.Z());
540  GlobalVector mom( pp.Px(), pp.Py(), pp.Pz());
541 
543 
545  (GlobalTrajectoryParameters( pos, mom, TrackCharge( pp.charge()), field), *plane);
546 }
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, AlCaHLTBitMon_ParallelJobs::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(), groupFilesInBlocks::temp, tmp, tracker_, 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()->monoId();
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 const & PTraj=
359  trajectoryStateTransform::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:71
SiStripMatchedRecHit2DCollection::const_iterator MatDetMatch
ROOT::Math::SMatrixIdentity AlgebraicMatrixID
edm::ParameterSet conf_
PTrajectoryStateOnDet persistentState(const TrajectoryStateOnSurface &ts, unsigned int detid)
const PropagatorWithMaterial * propagator_
T y() const
Definition: PV3DBase.h:62
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
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:273
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:85
T sqrt(T t)
Definition: SSEVec.h:46
virtual RecHitPointer build(const TrackingRecHit *p) const =0
build a tracking rechit from an existing rechit
T z() const
Definition: PV3DBase.h:63
void clear()
Definition: OwnVector.h:370
bool first
Definition: L1TdeRCT.cc:94
virtual const GeomDet * idToDet(DetId) const
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
Definition: Event.h:356
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
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.
TEveGeoShape * clone(const TEveElement *element, TEveElement *parent)
Definition: eve_macros.cc:135
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
const BoundPlane & surface() const
The nominal surface of the GeomDet.
Definition: GeomDet.h:35
TrajectoryStateOnSurface update(const TrajectoryStateOnSurface &, const TransientTrackingRecHit &) const
Definition: KFUpdator.cc:10
static int position[264][3]
Definition: ReadPGInfo.cc:509
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:61
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 560 of file ConvBremSeedProducer.cc.

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

Referenced by produce().

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