#include <RecoParticleFlow/PFTracking/interface/ConvBremSeedProducer.h>
Definition at line 41 of file ConvBremSeedProducer.h.
typedef GeometricSearchDet::DetWithState ConvBremSeedProducer::DetWithState [private] |
Definition at line 48 of file ConvBremSeedProducer.h.
Definition at line 47 of file ConvBremSeedProducer.h.
typedef SiStripMatchedRecHit2DCollection::range ConvBremSeedProducer::MatRange [private] |
Definition at line 46 of file ConvBremSeedProducer.h.
typedef SiPixelRecHitCollection::const_iterator ConvBremSeedProducer::PiIter [private] |
Definition at line 45 of file ConvBremSeedProducer.h.
typedef SiPixelRecHitCollection::range ConvBremSeedProducer::PiRange [private] |
Definition at line 43 of file ConvBremSeedProducer.h.
typedef SiStripRecHit2DCollection::const_iterator ConvBremSeedProducer::StIter [private] |
Definition at line 44 of file ConvBremSeedProducer.h.
typedef SiStripRecHit2DCollection::range ConvBremSeedProducer::StRange [private] |
Definition at line 42 of file ConvBremSeedProducer.h.
ConvBremSeedProducer::ConvBremSeedProducer | ( | const edm::ParameterSet & | iConfig | ) | [explicit] |
Definition at line 51 of file ConvBremSeedProducer.cc.
00051 : 00052 conf_(iConfig), 00053 fieldMap_(0), 00054 layerMap_(56, static_cast<const DetLayer*>(0)), 00055 negLayerOffset_(27) 00056 { 00057 produces<ConvBremSeedCollection>(); 00058 }
ConvBremSeedProducer::~ConvBremSeedProducer | ( | ) |
void ConvBremSeedProducer::beginJob | ( | const edm::EventSetup & | iSetup | ) | [private, virtual] |
Reimplemented from edm::EDProducer.
Definition at line 386 of file ConvBremSeedProducer.cc.
References alongMomentum, B_, conf_, fieldMap_, geometry_, geomSearchTracker_, edm::EventSetup::get(), edm::ParameterSet::getParameter(), hitBuilder_, MagneticField::inTesla(), kfUpdator_, volumeBasedMagneticField_1103l_cfi::magfield, magfield_, edm::ESHandle< T >::product(), propagator_, track, tracker_, and transformer_.
00387 { 00388 ESHandle<GeometricSearchTracker> track; 00389 iSetup.get<TrackerRecoGeometryRecord>().get( track ); 00390 geomSearchTracker_ = track.product(); 00391 00392 ESHandle<TrackerInteractionGeometry> theTrackerInteractionGeometry; 00393 iSetup.get<TrackerInteractionGeometryRecord>().get(theTrackerInteractionGeometry ); 00394 geometry_=theTrackerInteractionGeometry.product(); 00395 00396 ESHandle<TrackerGeometry> tracker; 00397 iSetup.get<TrackerDigiGeometryRecord>().get(tracker); 00398 tracker_=tracker.product(); 00399 00400 ESHandle<MagneticField> magfield; 00401 iSetup.get<IdealMagneticFieldRecord>().get(magfield); 00402 magfield_=magfield.product(); 00403 B_=magfield_->inTesla(GlobalPoint(0,0,0)); 00404 00405 ESHandle<MagneticFieldMap> fieldMap; 00406 iSetup.get<MagneticFieldMapRecord>().get(fieldMap); 00407 fieldMap_ =fieldMap.product(); 00408 00409 00410 00411 ESHandle<TransientTrackingRecHitBuilder> hitBuilder; 00412 iSetup.get<TransientRecHitRecord>().get(conf_.getParameter<string>("TTRHBuilder"),hitBuilder); 00413 hitBuilder_= hitBuilder.product(); 00414 00415 propagator_ = new PropagatorWithMaterial(alongMomentum,0.0005,&(*magfield) ); 00416 kfUpdator_ = new KFUpdator(); 00417 transformer_ = new TrajectoryStateTransform(); 00418 }
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().
00528 { 00529 if (zpos > 0 || !layer.forward() ) return layerMap_[layer.layerNumber()]; 00530 else return layerMap_[layer.layerNumber()+negLayerOffset_]; 00531 }
Reimplemented from edm::EDProducer.
Definition at line 421 of file ConvBremSeedProducer.cc.
References kfUpdator_, propagator_, and transformer_.
00421 { 00422 delete propagator_; 00423 delete kfUpdator_; 00424 delete transformer_; 00425 }
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, funct::pow(), BaseParticlePropagator::propagateToEcalEntrance(), funct::sqrt(), TwoPi, and RawParticle::vertex().
Referenced by produce().
00610 { 00611 00612 bpg.propagateToEcalEntrance(false); 00613 float dr=1000; 00614 float de=1000; 00615 float df=1000; 00616 int ibest=-1; 00617 00618 if(bpg.getSuccess()!=0){ 00619 00620 for (uint i =0; i<pfc.size();i++ ){ 00621 float tmp_ep=pfc[i].energy()/bpg.momentum().e(); 00622 float tmp_phi=fabs(pfc[i].position().phi()-bpg.vertex().phi()); 00623 if (tmp_phi>TMath::TwoPi()) tmp_phi-= TMath::TwoPi(); 00624 float tmp_eta=fabs(pfc[i].position().eta()-bpg.vertex().eta()); 00625 float tmp_dr=sqrt(pow(tmp_phi,2)+pow(tmp_eta,2)); 00626 bool isBet=(tmp_dr<dr); 00627 if (sec) isBet=(tmp_phi<df); 00628 if ((isBet)&&(tmp_ep>minep)&&(tmp_ep<10)){ 00629 dr=tmp_dr; 00630 de=tmp_eta; 00631 df=tmp_phi; 00632 ibest=i; 00633 } 00634 } 00635 bool isBad=(dr>0.1); 00636 if (sec) isBad= ((df>0.25) || (de>0.5)); 00637 00638 if (isBad) ibest=-1; 00639 00640 } 00641 return ibest; 00642 }
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(), muonGeometry::disk, geometry_, geomSearchTracker_, i, BoundDisk::innerRadius(), layerMap_, LogDebug, BoundDisk::outerRadius(), GeometricSearchTracker::posForwardLayers(), GloballyPositioned< T >::position(), and Cylinder::radius().
Referenced by produce().
00429 { 00430 00431 00432 // These are the BoundSurface&, the BoundDisk* and the BoundCylinder* for that layer 00433 // const BoundSurface& theSurface = layer.surface(); 00434 // BoundDisk* theDisk = layer.disk(); // non zero for endcaps 00435 // BoundCylinder* theCylinder = layer.cylinder(); // non zero for barrel 00436 // int theLayer = layer.layerNumber(); // 1->3 PixB, 4->5 PixD, 00437 // // 6->9 TIB, 10->12 TID, 00438 // // 13->18 TOB, 19->27 TEC 00439 00442 00443 std::vector< BarrelDetLayer*> barrelLayers = 00444 geomSearchTracker_->barrelLayers(); 00445 LogDebug("FastTracker") << "Barrel DetLayer dump: "; 00446 for (std::vector< BarrelDetLayer*>::const_iterator bl=barrelLayers.begin(); 00447 bl != barrelLayers.end(); ++bl) { 00448 LogDebug("FastTracker")<< "radius " << (**bl).specificSurface().radius(); 00449 } 00450 00451 std::vector< ForwardDetLayer*> posForwardLayers = 00452 geomSearchTracker_->posForwardLayers(); 00453 LogDebug("FastTracker") << "Positive Forward DetLayer dump: "; 00454 for (std::vector< ForwardDetLayer*>::const_iterator fl=posForwardLayers.begin(); 00455 fl != posForwardLayers.end(); ++fl) { 00456 LogDebug("FastTracker") << "Z pos " 00457 << (**fl).surface().position().z() 00458 << " radii " 00459 << (**fl).specificSurface().innerRadius() 00460 << ", " 00461 << (**fl).specificSurface().outerRadius(); 00462 } 00463 00464 const float rTolerance = 1.5; 00465 const float zTolerance = 3.; 00466 00467 LogDebug("FastTracker")<< "Dump of TrackerInteractionGeometry cylinders:"; 00468 for( std::list<TrackerLayer>::const_iterator i=geometry_->cylinderBegin(); 00469 i!=geometry_->cylinderEnd(); ++i) { 00470 const BoundCylinder* cyl = i->cylinder(); 00471 const BoundDisk* disk = i->disk(); 00472 00473 LogDebug("FastTracker") << "Famos Layer no " << i->layerNumber() 00474 << " is sensitive? " << i->sensitive() 00475 << " pos " << i->surface().position(); 00476 if (!i->sensitive()) continue; 00477 00478 if (cyl != 0) { 00479 00480 LogDebug("FastTracker") << " cylinder radius " << cyl->radius(); 00481 bool found = false; 00482 00483 for (std::vector< BarrelDetLayer*>::const_iterator 00484 bl=barrelLayers.begin(); bl != barrelLayers.end(); ++bl) { 00485 00486 if (fabs( cyl->radius() - (**bl).specificSurface().radius()) < rTolerance) { 00487 00488 layerMap_[i->layerNumber()] = *bl; 00489 found = true; 00490 LogDebug("FastTracker")<< "Corresponding DetLayer found with radius " 00491 << (**bl).specificSurface().radius(); 00492 00493 break; 00494 } 00495 } 00496 if (!found) { 00497 LogError("FastTracker") << "FAILED to find a corresponding DetLayer!"; 00498 } 00499 } 00500 else { 00501 LogDebug("FastTracker") << " disk radii " << disk->innerRadius() 00502 << ", " << disk->outerRadius(); 00503 00504 bool found = false; 00505 00506 for (std::vector< ForwardDetLayer*>::const_iterator fl=posForwardLayers.begin(); 00507 fl != posForwardLayers.end(); ++fl) { 00508 if (fabs( disk->position().z() - (**fl).surface().position().z()) < zTolerance) { 00509 layerMap_[i->layerNumber()] = *fl; 00510 found = true; 00511 LogDebug("FastTracker") << "Corresponding DetLayer found with Z pos " 00512 << (**fl).surface().position().z() 00513 << " and radii " 00514 << (**fl).specificSurface().innerRadius() 00515 << ", " 00516 << (**fl).specificSurface().outerRadius(); 00517 break; 00518 } 00519 } 00520 if (!found) { 00521 LogError("FastTracker") << "FAILED to find a corresponding DetLayer!"; 00522 } 00523 } 00524 } 00525 00526 }
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().
00547 { 00548 trackingRecHit_iterator ib=tkv.begin(); 00549 trackingRecHit_iterator ie=tkv.end(); 00550 bool istaken=false; 00551 // for (;ib!=ie-2;++ib){ 00552 for (;ib!=ie;++ib){ 00553 if (istaken) continue; 00554 if (!((*ib)->isValid())) continue; 00555 00556 istaken = (*ib)->sharesInput(h,TrackingRecHit::all); 00557 } 00558 return istaken; 00559 }
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(), GeometricSearchDet::surface(), Surface::tangentPlane(), RawParticle::X(), RawParticle::Y(), and RawParticle::Z().
Referenced by produce().
00537 { 00538 00539 GlobalPoint pos( pp.X(), pp.Y(), pp.Z()); 00540 GlobalVector mom( pp.Px(), pp.Py(), pp.Pz()); 00541 00542 ReferenceCountingPointer<TangentPlane> plane = layer->surface().tangentPlane(pos); 00543 00544 return TrajectoryStateOnSurface 00545 (GlobalTrajectoryParameters( pos, mom, TrackCharge( pp.charge()), field), *plane); 00546 }
void ConvBremSeedProducer::produce | ( | edm::Event & | iEvent, | |
const edm::EventSetup & | iSetup | |||
) | [private, virtual] |
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_, TransientTrackingRecHitBuilder::build(), GlobalTrajectoryParameters::charge(), edm::OwnVector< T, P >::clear(), clone(), GeometricSearchDet::compatibleDets(), conf_, TrackerInteractionGeometry::cylinderBegin(), TrackerInteractionGeometry::cylinderEnd(), detLayer(), edm::EventID::event(), fieldMap_, first, geometry_, edm::Event::getByLabel(), BaseParticlePropagator::getMagneticField(), edm::ParameterSet::getParameter(), BaseParticlePropagator::getSuccess(), GoodCluster(), gp1, hitBuilder_, i, i1, i2, i3, edm::Event::id(), TrackerGeometry::idToDet(), initializeLayerMap(), isGsfTrack(), TrajectoryStateOnSurface::isValid(), it1, it3, kfUpdator_, LogDebug, magfield_, makeTrajectoryState(), GlobalTrajectoryParameters::momentum(), output(), p, FreeTrajectoryState::parameters(), PV3DBase< T, PVType, FrameType >::perp(), TrajectoryStateTransform::persistentState(), GeomDetEnumerators::PixelBarrel, GeomDetEnumerators::PixelEndcap, GlobalTrajectoryParameters::position(), edm::Handle< T >::product(), PropagatorWithMaterial::propagate(), BaseParticlePropagator::propagate(), propagator_, edm::OwnVector< T, P >::push_back(), edm::Event::put(), python::SiStripOnlineP5_cfg::rphirecHits, edm::EventID::run(), RawParticle::setCharge(), ParticlePropagator::setPropagationConditions(), sharedHits(), edm::AssociationMap< Tag >::size(), funct::sqrt(), state, FastHelix::stateAtVertex(), python::SiStripOnlineP5_cfg::stereorecHits, DetLayer::subDetector(), GeomDet::surface(), pyDBSRunClass::temp, tmp, tracker_, transformer_, KFUpdator::update(), PV3DBase< T, PVType, FrameType >::x(), PV3DBase< T, PVType, FrameType >::y(), PV3DBase< T, PVType, FrameType >::z(), and RawParticle::Z().
00070 { 00071 00072 LogDebug("ConvBremSeedProducerProducer")<<"START event: "<<iEvent.id().event() 00073 <<" in run "<<iEvent.id().run(); 00074 00075 float pfmass= 0.0005; 00076 00078 00080 Handle<PFClusterCollection> PfC; 00081 iEvent.getByLabel(conf_.getParameter<InputTag>("PFClusters") ,PfC); 00082 const PFClusterCollection& PPP= *(PfC.product()); 00083 00085 Handle<SiPixelRecHitCollection> pixelHits; 00086 iEvent.getByLabel(conf_.getParameter<InputTag>("pixelRecHits") , pixelHits); 00087 00089 Handle<SiStripRecHit2DCollection> rphirecHits; 00090 iEvent.getByLabel(conf_.getParameter<InputTag>("rphirecHits"),rphirecHits); 00091 Handle<SiStripRecHit2DCollection> stereorecHits; 00092 iEvent.getByLabel(conf_.getParameter<InputTag>("stereorecHits"), stereorecHits); 00093 Handle<SiStripMatchedRecHit2DCollection> matchedrecHits; 00094 iEvent.getByLabel(conf_.getParameter<InputTag>("matchedrecHits"), matchedrecHits); 00095 00096 //GSFPFRECTRACKS 00097 Handle<GsfPFRecTrackCollection> thePfRecTrackCollection; 00098 iEvent.getByLabel(conf_.getParameter<InputTag>("PFRecTrackLabel"), 00099 thePfRecTrackCollection); 00100 const GsfPFRecTrackCollection PfRTkColl = *(thePfRecTrackCollection.product()); 00101 00102 00104 std::auto_ptr<ConvBremSeedCollection> output(new ConvBremSeedCollection); 00105 00106 00108 vector<pair< TrajectorySeed , pair<GlobalVector,float> > > unclean; 00109 //TRIPLET OF MODULES TO BE USED FOR SEEDING 00110 vector< vector< long int > > tripl; 00111 //LAYER MAP 00112 initializeLayerMap(); 00113 00114 00115 00117 00118 for(uint ipft=0;ipft<PfRTkColl.size();ipft++){ 00119 GsfPFRecTrackRef pft(thePfRecTrackCollection,ipft); 00120 LogDebug("ConvBremSeedProducerProducer")<<"NEW GsfPFRecTRACK "; 00121 float eta_br=0; 00122 unclean.clear(); 00123 tripl.clear(); 00124 vector<int> gc; 00125 TrackingRecHitRefVector gsfRecHits=pft->gsfTrackRef()->extra()->recHits(); 00126 float pfoutenergy=sqrt((pfmass*pfmass)+pft->gsfTrackRef()->outerMomentum().Mag2()); 00127 XYZTLorentzVector mom =XYZTLorentzVector(pft->gsfTrackRef()->outerMomentum().x(), 00128 pft->gsfTrackRef()->outerMomentum().y(), 00129 pft->gsfTrackRef()->outerMomentum().z(), 00130 pfoutenergy); 00131 XYZTLorentzVector pos = XYZTLorentzVector(pft->gsfTrackRef()->outerPosition().x(), 00132 pft->gsfTrackRef()->outerPosition().y(), 00133 pft->gsfTrackRef()->outerPosition().z(), 00134 0.); 00135 BaseParticlePropagator theOutParticle=BaseParticlePropagator( RawParticle(mom,pos), 00136 0,0,B_.z()); 00137 theOutParticle.setCharge(pft->gsfTrackRef()->charge()); 00138 00140 gc.push_back(GoodCluster(theOutParticle,PPP,0.5)); 00141 00142 00143 vector<PFBrem> brem =(*pft).PFRecBrem(); 00144 vector<PFBrem>::iterator ib=brem.begin(); 00145 vector<PFBrem>::iterator ib_end=brem.end(); 00146 LogDebug("ConvBremSeedProducerProducer")<<"NUMBER OF BREMS "<<brem.size(); 00147 00149 for (;ib!=ib_end;++ib){ 00150 00151 XYZTLorentzVector mom=pft->trajectoryPoint(ib->indTrajPoint()).momentum(); 00152 XYZTLorentzVector pos= 00153 XYZTLorentzVector( 00154 pft->trajectoryPoint(ib->indTrajPoint()).position().x(), 00155 pft->trajectoryPoint(ib->indTrajPoint()).position().y(), 00156 pft->trajectoryPoint(ib->indTrajPoint()).position().z(), 00157 0); 00158 00160 if (pos.Rho()>80) continue; 00161 if ((pos.Rho()>5)&&(fabs(ib->SigmaDeltaP()/ib->DeltaP())>3)) continue; 00162 if (fabs(ib->DeltaP())<3) continue; 00163 eta_br=mom.eta(); 00164 vector< vector< long int > >Idd; 00165 00166 00167 00168 BaseParticlePropagator p( RawParticle(mom,pos), 00169 0,0,B_.z()); 00170 p.setCharge(0); 00171 gc.push_back(GoodCluster(p,PPP,0.2)); 00172 00173 ParticlePropagator PP(p,fieldMap_); 00174 00176 list<TrackerLayer>::const_iterator cyliter= geometry_->cylinderBegin(); 00177 for ( ; cyliter != geometry_->cylinderEnd() ; ++cyliter ) { 00178 00180 if (!(cyliter->sensitive())) continue; 00181 PP.setPropagationConditions(*cyliter); 00182 PP.propagate(); 00183 if (PP.getSuccess()==0) continue; 00184 00186 LocalMagneticField mf(PP.getMagneticField()); 00187 AnalyticalPropagator alongProp(&mf, anyDirection); 00188 InsideBoundsMeasurementEstimator est; 00189 const DetLayer* tkLayer = detLayer(*cyliter,PP.Z()); 00190 if (&(*tkLayer)==0) continue; 00191 TrajectoryStateOnSurface trajState = makeTrajectoryState( tkLayer, PP, &mf); 00192 00193 std::vector<DetWithState> compat 00194 = tkLayer->compatibleDets( trajState, alongProp, est); 00195 vector <long int> temp; 00196 if (compat.size()==0) continue; 00197 00198 for (std::vector<DetWithState>::const_iterator i=compat.begin(); i!=compat.end(); i++) { 00199 00200 long int detid=i->first->geographicalId().rawId(); 00201 00202 if ((tkLayer->subDetector()!=GeomDetEnumerators::PixelBarrel)&& 00203 (tkLayer->subDetector()!=GeomDetEnumerators::PixelEndcap)){ 00204 00205 00206 StRange Range = (rphirecHits.product())-> 00207 get((detid)); 00208 MatRange MRange =(matchedrecHits.product())-> 00209 get((detid)); 00210 00211 00212 long int DetID=(Range.second!=Range.first)? detid:0; 00213 00214 if (MRange.second!=MRange.first) { 00215 long int pii=(*MRange.first).monoHit()->geographicalId().rawId(); 00216 StRange CRange = (rphirecHits.product())-> 00217 get((pii)); 00218 00219 DetID=(CRange.second!=CRange.first)? pii:0; 00220 00221 } 00222 00223 temp.push_back(DetID); 00224 00225 } 00226 else{ 00227 SiPixelRecHitCollection::range Range = (pixelHits.product())-> 00228 get((detid)); 00229 long int DetID=(Range.second!=Range.first)? detid:0; 00230 temp.push_back(DetID); 00231 00232 00233 } 00234 } 00235 00236 Idd.push_back(temp); 00237 00238 }//END TRACKER LAYER LOOP 00239 if(Idd.size()<2)continue; 00240 00242 for (uint i=0;i<Idd.size()-2;i++){ 00243 for (uint i1=0;i1<Idd[i].size();i1++){ 00244 for (uint i2=0;i2<Idd[i+1].size();i2++){ 00245 for (uint i3=0;i3<Idd[i+2].size();i3++){ 00246 if ((Idd[i][i1]!=0) &&(Idd[i+1][i2]!=0) &&(Idd[i+2][i3]!=0) ){ 00247 vector<long int >tmp; 00248 tmp.push_back(Idd[i][i1]); tmp.push_back(Idd[i+1][i2]); tmp.push_back(Idd[i+2][i3]); 00249 00250 bool newTrip=true; 00251 for (uint iv=0;iv<tripl.size();iv++){ 00252 if((tripl[iv][0]==tmp[0])&&(tripl[iv][1]==tmp[1])&&(tripl[iv][2]==tmp[2])) newTrip=false; 00253 00254 } 00255 if (newTrip){ 00256 00257 tripl.push_back(tmp); 00258 } 00259 } 00260 } 00261 } 00262 } 00263 } 00264 }//END BREM LOOP 00265 00266 float sineta_brem =sinh(eta_br); 00267 00268 00269 //OUTPUT COLLECTION 00270 00271 TransientTrackingRecHit::ConstRecHitContainer glob_hits; 00272 OwnVector<TrackingRecHit> loc_hits; 00273 for (uint i=0;i<tripl.size();i++){ 00274 StRange Range1 = (rphirecHits.product())->get(tripl[i][0]); 00275 StRange Range2 = (rphirecHits.product())->get(tripl[i][1]); 00276 StRange Range3 = (rphirecHits.product())->get(tripl[i][2]); 00277 00278 for (StIter it1=Range1.first;it1!=Range1.second;++it1){ 00279 GlobalPoint gp1=tracker_->idToDet(tripl[i][0])->surface(). 00280 toGlobal(it1->localPosition()); 00281 00282 bool tak1=isGsfTrack(gsfRecHits,&(*it1)); 00283 00284 for (StIter it2=Range2.first;it2!=Range2.second;++it2){ 00285 GlobalPoint gp2=tracker_->idToDet(tripl[i][1])->surface(). 00286 toGlobal(it2->localPosition()); 00287 bool tak2=isGsfTrack(gsfRecHits,&(*it2)); 00288 00289 for (StIter it3=Range3.first;it3!=Range3.second;++it3){ 00290 // ips++; 00291 GlobalPoint gp3=tracker_->idToDet(tripl[i][2])->surface(). 00292 toGlobal(it3->localPosition()); 00293 bool tak3=isGsfTrack(gsfRecHits,&(*it3)); 00294 00295 00296 FastHelix helix(gp3, gp2, gp1,iSetup); 00297 GlobalVector gv=helix.stateAtVertex().parameters().momentum(); 00298 GlobalVector gv_corr(gv.x(),gv.y(),gv.perp()*sineta_brem); 00299 float ene= sqrt(gv_corr.mag2()+(pfmass*pfmass)); 00300 00301 GlobalPoint gp=helix.stateAtVertex().parameters().position(); 00302 float ch=helix.stateAtVertex().parameters().charge(); 00303 00304 00305 00306 00307 XYZTLorentzVector mom = XYZTLorentzVector(gv.x(),gv.y(),gv_corr.z(),ene); 00308 XYZTLorentzVector pos = XYZTLorentzVector(gp.x(),gp.y(),gp.z(),0.); 00309 BaseParticlePropagator theOutParticle(RawParticle(mom,pos),0,0,B_.z()); 00310 theOutParticle.setCharge(ch); 00311 int bgc=GoodCluster(theOutParticle,PPP,0.3,true); 00312 00313 if (gv.perp()<0.5) continue; 00314 00315 if (tak1+tak2+tak3>2) continue; 00316 00317 if (bgc==-1) continue; 00318 bool clTak=false; 00319 for (uint igcc=0; igcc<gc.size(); igcc++){ 00320 if (clTak) continue; 00321 if (bgc==gc[igcc]) clTak=true; 00322 } 00323 if (clTak) continue; 00324 00325 00326 00327 00328 GlobalTrajectoryParameters Gtp(gp1, 00329 gv,int(ch), 00330 &(*magfield_)); 00331 glob_hits.clear(); loc_hits.clear(); 00332 glob_hits.push_back(hitBuilder_->build(it1->clone())); 00333 glob_hits.push_back(hitBuilder_->build(it2->clone())); 00334 glob_hits.push_back(hitBuilder_->build(it3->clone())); 00335 00337 00338 FreeTrajectoryState CSeed(Gtp, 00339 CurvilinearTrajectoryError(AlgebraicSymMatrix55(AlgebraicMatrixID()))); 00340 TrajectoryStateOnSurface updatedState; 00341 00342 for (int ih=0;ih<3;ih++){ 00343 00344 TrajectoryStateOnSurface state = (ih==0)? 00345 propagator_->propagate(CSeed, 00346 tracker_->idToDet(tripl[i][ih])->surface()): 00347 propagator_->propagate(updatedState, 00348 tracker_->idToDet(tripl[i][ih])->surface()); 00349 00350 if (!state.isValid()){ 00351 ih=3; 00352 continue;} 00353 00354 updatedState = kfUpdator_->update(state, *glob_hits[ih]); 00355 loc_hits.push_back(glob_hits[ih]->hit()->clone()); 00356 if (ih==2){ 00357 PTrajectoryStateOnDet *PTraj= 00358 transformer_->persistentState(updatedState,tripl[i][2]); 00359 // output->push_back(Trajectoryseed(*PTraj,loc_hits,alongMomentum)); 00360 unclean.push_back(make_pair(TrajectorySeed(*PTraj,loc_hits,alongMomentum), 00361 make_pair(gv_corr,ch))); 00362 } 00363 // } 00364 00365 } 00366 } 00367 } 00368 } 00369 } 00370 vector<bool> inPhot = sharedHits(unclean); 00371 for (uint iu=0; iu<unclean.size();iu++){ 00372 00373 if (inPhot[iu]) 00374 output->push_back(ConvBremSeed(unclean[iu].first,pft)); 00375 00376 } 00377 00378 } //END GSF TRACK COLLECTION LOOP 00379 LogDebug("ConvBremSeedProducerProducer")<<"END"; 00380 iEvent.put(output); 00381 00382 }
std::vector<bool> ConvBremSeedProducer::sharedHits | ( | std::vector< std::pair< TrajectorySeed, std::pair< GlobalVector, float > > > | ) | [private] |
Referenced by produce().
math::XYZVector ConvBremSeedProducer::B_ [private] |
B field.
Definition at line 86 of file ConvBremSeedProducer.h.
Referenced by beginJob(), and produce().
edm::ParameterSet ConvBremSeedProducer::conf_ [private] |
const MagneticFieldMap* ConvBremSeedProducer::fieldMap_ [private] |
const TrackerInteractionGeometry* ConvBremSeedProducer::geometry_ [private] |
Definition at line 75 of file ConvBremSeedProducer.h.
Referenced by beginJob(), initializeLayerMap(), and produce().
const GeometricSearchTracker* ConvBremSeedProducer::geomSearchTracker_ [private] |
Definition at line 74 of file ConvBremSeedProducer.h.
Referenced by beginJob(), and initializeLayerMap().
const TransientTrackingRecHitBuilder* ConvBremSeedProducer::hitBuilder_ [private] |
const KFUpdator* ConvBremSeedProducer::kfUpdator_ [private] |
Definition at line 80 of file ConvBremSeedProducer.h.
Referenced by beginJob(), endJob(), 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] |
int ConvBremSeedProducer::negLayerOffset_ [private] |
const PropagatorWithMaterial* ConvBremSeedProducer::propagator_ [private] |
Definition at line 79 of file ConvBremSeedProducer.h.
Referenced by beginJob(), endJob(), and produce().
std::vector<const DetLayer*> ConvBremSeedProducer::theLayerMap [private] |
Definition at line 59 of file ConvBremSeedProducer.h.
const TrackerGeometry* ConvBremSeedProducer::tracker_ [private] |
const TrajectoryStateTransform* ConvBremSeedProducer::transformer_ [private] |
Definition at line 82 of file ConvBremSeedProducer.h.
Referenced by beginJob(), endJob(), and produce().