CMS 3D CMS Logo

List of all members | Public Member Functions | Private Member Functions | Private Attributes
ConvertedPhotonProducer Class Reference
Inheritance diagram for ConvertedPhotonProducer:
edm::stream::EDProducer<>

Public Member Functions

void beginRun (edm::Run const &, const edm::EventSetup &es) final
 
 ConvertedPhotonProducer (const edm::ParameterSet &ps)
 
void produce (edm::Event &evt, const edm::EventSetup &es) override
 
- Public Member Functions inherited from edm::stream::EDProducer<>
 EDProducer ()=default
 
 EDProducer (const EDProducer &)=delete
 
bool hasAbilityToProduceInBeginLumis () const final
 
bool hasAbilityToProduceInBeginProcessBlocks () const final
 
bool hasAbilityToProduceInBeginRuns () const final
 
bool hasAbilityToProduceInEndLumis () const final
 
bool hasAbilityToProduceInEndProcessBlocks () const final
 
bool hasAbilityToProduceInEndRuns () const final
 
const EDProduceroperator= (const EDProducer &)=delete
 

Private Member Functions

void buildCollections (edm::EventSetup const &es, const edm::Handle< edm::View< reco::CaloCluster >> &scHandle, const edm::Handle< edm::View< reco::CaloCluster >> &bcHandle, ElectronHcalHelper const &hcalHelper, const edm::Handle< reco::TrackCollection > &trkHandle, std::map< std::vector< reco::TransientTrack >, reco::CaloClusterPtr, CompareTwoTracksVectors > &allPairs, reco::ConversionCollection &outputConvPhotonCollection)
 
float calculateMinApproachDistance (const reco::TrackRef &track1, const reco::TrackRef &track2)
 
void cleanCollections (const edm::Handle< edm::View< reco::CaloCluster >> &scHandle, const edm::OrphanHandle< reco::ConversionCollection > &conversionHandle, reco::ConversionCollection &outputCollection)
 
void getCircleCenter (const reco::TrackRef &tk, double r, double &x0, double &y0)
 
std::vector< reco::ConversionRefsolveAmbiguity (const edm::OrphanHandle< reco::ConversionCollection > &conversionHandle, reco::CaloClusterPtr const &sc)
 
math::XYZPointF toFConverterP (const math::XYZPoint &val)
 
math::XYZVectorF toFConverterV (const math::XYZVector &val)
 

Private Attributes

std::string algoName_
 
edm::EDGetTokenT< edm::View< reco::CaloCluster > > bcBarrelCollection_
 
edm::EDGetTokenT< edm::View< reco::CaloCluster > > bcEndcapCollection_
 
edm::ESGetToken< CaloGeometry, CaloGeometryRecordcaloGeomToken_
 
edm::EDPutTokenT< reco::ConversionCollectioncleanedConvertedPhotonCollectionPutToken_
 
edm::EDGetTokenT< reco::TrackCollectionconversionIOTrackProducer_
 
edm::EDGetTokenT< reco::TrackCollectionconversionOITrackProducer_
 
edm::EDPutTokenT< reco::ConversionCollectionconvertedPhotonCollectionPutToken_
 
bool cutsFromDB
 
double deltaCotCut_
 
double dRForConversionRecovery_
 
edm::EDGetTokenT< reco::TrackCollectiongeneralTrackProducer_
 
edm::EDGetTokenT< HBHERecHitCollectionhbheRecHits_
 
HcalPFCuts const * hcalCuts = nullptr
 
edm::ESGetToken< HcalPFCuts, HcalPFCutsRcdhcalCutsToken_
 
std::unique_ptr< ElectronHcalHelperhcalHelper_
 
double hOverEConeSize_
 
edm::EDGetTokenT< reco::TrackCaloClusterPtrAssociationinOutTrackSCAssociationCollection_
 
ConversionLikelihoodCalculator likelihoodCalc_
 
std::string likelihoodWeights_
 
MagneticField const * magneticField_
 
double maxHOverE_
 
int maxNumOfCandidates_
 
edm::ESGetToken< MagneticField, IdealMagneticFieldRecordmFToken_
 
double minApproachDisCut_
 
double minSCEt_
 
edm::EDGetTokenT< reco::TrackCaloClusterPtrAssociationoutInTrackSCAssociationCollection_
 
bool recoverOneTrackCase_
 
bool risolveAmbiguity_
 
edm::EDGetTokenT< edm::View< reco::CaloCluster > > scHybridBarrelProducer_
 
edm::EDGetTokenT< edm::View< reco::CaloCluster > > scIslandEndcapProducer_
 
ConversionTrackPairFinder trackPairFinder_
 
TransientTrackBuilder const * transientTrackBuilder_
 
edm::ESGetToken< TransientTrackBuilder, TransientTrackRecordtransientTrackToken_
 
ConversionVertexFinder vertexFinder_
 

Additional Inherited Members

- Public Types inherited from edm::stream::EDProducer<>
using CacheTypes = CacheContexts< T... >
 
using GlobalCache = typename CacheTypes::GlobalCache
 
using HasAbility = AbilityChecker< T... >
 
using InputProcessBlockCache = typename CacheTypes::InputProcessBlockCache
 
using LuminosityBlockCache = typename CacheTypes::LuminosityBlockCache
 
using LuminosityBlockContext = LuminosityBlockContextT< LuminosityBlockCache, RunCache, GlobalCache >
 
using LuminosityBlockSummaryCache = typename CacheTypes::LuminosityBlockSummaryCache
 
using RunCache = typename CacheTypes::RunCache
 
using RunContext = RunContextT< RunCache, GlobalCache >
 
using RunSummaryCache = typename CacheTypes::RunSummaryCache
 

Detailed Description

Author
Nancy Marinelli, U. of Notre Dame, US

Definition at line 47 of file ConvertedPhotonProducer.cc.

Constructor & Destructor Documentation

◆ ConvertedPhotonProducer()

ConvertedPhotonProducer::ConvertedPhotonProducer ( const edm::ParameterSet ps)

Definition at line 129 of file ConvertedPhotonProducer.cc.

References AlCaHLTBitMon_QueryRunRegistry::string.

130  : conversionOITrackProducer_{consumes(config.getParameter<std::string>("conversionOITrackProducer"))},
131  conversionIOTrackProducer_{consumes(config.getParameter<std::string>("conversionIOTrackProducer"))},
132  outInTrackSCAssociationCollection_{consumes({config.getParameter<std::string>("conversionOITrackProducer"),
133  config.getParameter<std::string>("outInTrackSCAssociation")})},
134  inOutTrackSCAssociationCollection_{consumes({config.getParameter<std::string>("conversionIOTrackProducer"),
135  config.getParameter<std::string>("inOutTrackSCAssociation")})},
136 
137  generalTrackProducer_{consumes(config.getParameter<edm::InputTag>("generalTracksSrc"))},
139  produces<reco::ConversionCollection>(config.getParameter<std::string>("convertedPhotonCollection"))},
141  produces<reco::ConversionCollection>(config.getParameter<std::string>("cleanedConvertedPhotonCollection"))},
142 
143  bcBarrelCollection_{consumes(config.getParameter<edm::InputTag>("bcBarrelCollection"))},
144  bcEndcapCollection_{consumes(config.getParameter<edm::InputTag>("bcEndcapCollection"))},
145  scHybridBarrelProducer_{consumes(config.getParameter<edm::InputTag>("scHybridBarrelProducer"))},
146  scIslandEndcapProducer_{consumes(config.getParameter<edm::InputTag>("scIslandEndcapProducer"))},
147  hbheRecHits_{consumes(config.getParameter<edm::InputTag>("hbheRecHits"))},
149  mFToken_{esConsumes<MagneticField, IdealMagneticFieldRecord, edm::Transition::BeginRun>()},
150  transientTrackToken_{esConsumes<TransientTrackBuilder, TransientTrackRecord, edm::Transition::BeginRun>(
151  edm::ESInputTag("", "TransientTrackBuilder"))},
153  algoName_{config.getParameter<std::string>("AlgorithmName")},
154 
155  hOverEConeSize_{config.getParameter<double>("hOverEConeSize")},
156  maxHOverE_{config.getParameter<double>("maxHOverE")},
157  minSCEt_{config.getParameter<double>("minSCEt")},
158  recoverOneTrackCase_{config.getParameter<bool>("recoverOneTrackCase")},
159  dRForConversionRecovery_{config.getParameter<double>("dRForConversionRecovery")},
160  deltaCotCut_{config.getParameter<double>("deltaCotCut")},
161  minApproachDisCut_{config.getParameter<double>("minApproachDisCut")},
162 
163  maxNumOfCandidates_{config.getParameter<int>("maxNumOfCandidates")},
164  risolveAmbiguity_{config.getParameter<bool>("risolveConversionAmbiguity")},
165  likelihoodWeights_{config.getParameter<std::string>("MVA_weights_location")} {
166  // instantiate the Track Pair Finder algorithm
168 
169  cutsFromDB = config.getParameter<bool>("usePFThresholdsFromDB");
170  if (cutsFromDB) {
171  hcalCutsToken_ = esConsumes<HcalPFCuts, HcalPFCutsRcd, edm::Transition::BeginRun>(edm::ESInputTag("", "withTopo"));
172  }
173 
176  if (cfgCone.hOverEConeSize > 0) {
177  cfgCone.onlyBehindCluster = false;
178  cfgCone.checkHcalStatus = false;
179 
180  cfgCone.hbheRecHits = hbheRecHits_;
181 
182  cfgCone.eThresHB = config.getParameter<EgammaHcalIsolation::arrayHB>("recHitEThresholdHB");
183  cfgCone.maxSeverityHB = config.getParameter<int>("maxHcalRecHitSeverity");
184  cfgCone.eThresHE = config.getParameter<EgammaHcalIsolation::arrayHE>("recHitEThresholdHE");
185  cfgCone.maxSeverityHE = cfgCone.maxSeverityHB;
186  }
187 
188  hcalHelper_ = std::make_unique<ElectronHcalHelper>(cfgCone, consumesCollector());
189 }
edm::EDPutTokenT< reco::ConversionCollection > cleanedConvertedPhotonCollectionPutToken_
edm::ESGetToken< HcalPFCuts, HcalPFCutsRcd > hcalCutsToken_
edm::EDGetTokenT< reco::TrackCaloClusterPtrAssociation > outInTrackSCAssociationCollection_
ESGetTokenH3DDVariant esConsumes(std::string const &Record, edm::ConsumesCollector &)
Definition: DeDxTools.cc:283
edm::EDGetTokenT< edm::View< reco::CaloCluster > > bcEndcapCollection_
edm::EDPutTokenT< reco::ConversionCollection > convertedPhotonCollectionPutToken_
edm::EDGetTokenT< reco::TrackCollection > conversionIOTrackProducer_
edm::EDGetTokenT< edm::View< reco::CaloCluster > > scIslandEndcapProducer_
edm::ESGetToken< CaloGeometry, CaloGeometryRecord > caloGeomToken_
Definition: config.py:1
std::unique_ptr< ElectronHcalHelper > hcalHelper_
edm::EDGetTokenT< HBHERecHitCollection > hbheRecHits_
edm::EDGetTokenT< HBHERecHitCollection > hbheRecHits
edm::EDGetTokenT< reco::TrackCollection > generalTrackProducer_
edm::ESGetToken< TransientTrackBuilder, TransientTrackRecord > transientTrackToken_
edm::EDGetTokenT< reco::TrackCollection > conversionOITrackProducer_
edm::EDGetTokenT< reco::TrackCaloClusterPtrAssociation > inOutTrackSCAssociationCollection_
void setWeightsFile(const char *weightsFile)
ConversionLikelihoodCalculator likelihoodCalc_
edm::EDGetTokenT< edm::View< reco::CaloCluster > > bcBarrelCollection_
edm::EDGetTokenT< edm::View< reco::CaloCluster > > scHybridBarrelProducer_
ConversionVertexFinder vertexFinder_
EgammaHcalIsolation::arrayHB eThresHB
EgammaHcalIsolation::arrayHE eThresHE
std::array< double, 4 > arrayHB
edm::ESGetToken< MagneticField, IdealMagneticFieldRecord > mFToken_
std::array< double, 7 > arrayHE

Member Function Documentation

◆ beginRun()

void ConvertedPhotonProducer::beginRun ( edm::Run const &  r,
const edm::EventSetup es 
)
final

Definition at line 191 of file ConvertedPhotonProducer.cc.

References cutsFromDB, edm::EventSetup::getData(), hcalCuts, hcalCutsToken_, magneticField_, mFToken_, transientTrackBuilder_, and transientTrackToken_.

191  {
192  magneticField_ = &theEventSetup.getData(mFToken_);
193 
194  // Transform Track into TransientTrack (needed by the Vertex fitter)
195  transientTrackBuilder_ = &theEventSetup.getData(transientTrackToken_);
196 
197  if (cutsFromDB) {
198  hcalCuts = &theEventSetup.getData(hcalCutsToken_);
199  }
200 }
edm::ESGetToken< HcalPFCuts, HcalPFCutsRcd > hcalCutsToken_
MagneticField const * magneticField_
edm::ESGetToken< TransientTrackBuilder, TransientTrackRecord > transientTrackToken_
TransientTrackBuilder const * transientTrackBuilder_
edm::ESGetToken< MagneticField, IdealMagneticFieldRecord > mFToken_

◆ buildCollections()

void ConvertedPhotonProducer::buildCollections ( edm::EventSetup const &  es,
const edm::Handle< edm::View< reco::CaloCluster >> &  scHandle,
const edm::Handle< edm::View< reco::CaloCluster >> &  bcHandle,
ElectronHcalHelper const &  hcalHelper,
const edm::Handle< reco::TrackCollection > &  trkHandle,
std::map< std::vector< reco::TransientTrack >, reco::CaloClusterPtr, CompareTwoTracksVectors > &  allPairs,
reco::ConversionCollection outputConvPhotonCollection 
)
private

Definition at line 333 of file ConvertedPhotonProducer.cc.

References reco::Conversion::algoByName(), algoName_, TransientTrackBuilder::build(), ConversionLikelihoodCalculator::calculateLikelihood(), calculateMinApproachDistance(), edm::PtrVectorBase::clear(), deltaCotCut_, HLT_2023v12_cff::dEta, HLT_2023v12_cff::dPhi, dRForConversionRecovery_, MillePedeFileConverter_cfg::e, mps_fire::end, ConversionTrackEcalImpactPoint::find(), hcalCuts, ElectronHcalHelper::hcalESum(), edm::Ref< C, T, F >::isNonnull(), reco::Vertex::isValid(), likelihoodCalc_, magneticField_, ConversionTrackEcalImpactPoint::matchingBC(), maxHOverE_, metname, minApproachDisCut_, minSCEt_, edm::PtrVector< T >::push_back(), recoverOneTrackCase_, ConversionVertexFinder::run(), reco::Conversion::setMVAout(), mathSSE::sqrt(), AlCaHLTBitMon_QueryRunRegistry::string, funct::tan(), toFConverterP(), toFConverterV(), transientTrackBuilder_, vertexFinder_, and L1BJetProducer_cff::vtx.

Referenced by produce().

342 {
343  // instantiate the algorithm for finding the position of the track extrapolation at the Ecal front face
344  ConversionTrackEcalImpactPoint theEcalImpactPositionFinder(magneticField_);
345 
347 
348  std::vector<reco::TransientTrack> t_generalTrk;
350  t_generalTrk = transientTrackBuilder_->build(generalTrkHandle);
351 
352  // Loop over SC in the barrel and reconstruct converted photons
354  for (auto const& aClus : scHandle->ptrs()) {
355  // preselection based in Et and H/E cut
356  if (aClus->energy() / cosh(aClus->eta()) <= minSCEt_)
357  continue;
358  const reco::CaloCluster* pClus = &(*aClus);
359  auto const* sc = dynamic_cast<const reco::SuperCluster*>(pClus);
360  double HoE = hcalHelper.hcalESum(*sc, 0, hcalCuts) / sc->energy();
361  if (HoE >= maxHOverE_)
362  continue;
364 
365  std::vector<edm::Ref<reco::TrackCollection>> trackPairRef;
366  std::vector<math::XYZPointF> trackInnPos;
367  std::vector<math::XYZVectorF> trackPin;
368  std::vector<math::XYZVectorF> trackPout;
369  float minAppDist = -99;
370 
371  //LogDebug("ConvertedPhotonProducer") << "ConvertedPhotonProducer SC energy " << aClus->energy() << " eta " << aClus->eta() << " phi " << aClus->phi() << "\n";
372 
374  const reco::Particle::Point vtx(0, 0, 0);
375 
376  math::XYZVector direction = aClus->position() - vtx;
377  math::XYZVector momentum = direction.unit() * aClus->energy();
378  const reco::Particle::LorentzVector p4(momentum.x(), momentum.y(), momentum.z(), aClus->energy());
379 
380  if (!allPairs.empty()) {
381  for (auto iPair = allPairs.begin(); iPair != allPairs.end(); ++iPair) {
382  scPtrVec.clear();
383 
384  reco::Vertex theConversionVertex;
385  reco::CaloClusterPtr caloPtr = iPair->second;
386  if (!(aClus == caloPtr))
387  continue;
388 
389  scPtrVec.push_back(aClus);
390 
391  std::vector<math::XYZPointF> trkPositionAtEcal = theEcalImpactPositionFinder.find(iPair->first, bcHandle);
392  std::vector<reco::CaloClusterPtr> matchingBC = theEcalImpactPositionFinder.matchingBC();
393 
394  minAppDist = -99;
395  const std::string metname = "ConvertedPhotons|ConvertedPhotonProducer";
396  if ((iPair->first).size() > 1) {
397  try {
398  vertexFinder_.run(iPair->first, theConversionVertex);
399 
400  } catch (cms::Exception& e) {
401  //std::cout << " cms::Exception caught in ConvertedPhotonProducer::produce" << "\n" ;
402  edm::LogWarning(metname) << "cms::Exception caught in ConvertedPhotonProducer::produce\n"
403  << e.explainSelf();
404  }
405 
406  // Old TwoTrackMinimumDistance md;
407  // Old md.calculate ( (iPair->first)[0].initialFreeState(), (iPair->first)[1].initialFreeState() );
408  // Old minAppDist = md.distance();
409 
410  /*
411  for ( unsigned int i=0; i< matchingBC.size(); ++i) {
412  if ( matchingBC[i].isNull() ) std::cout << " This ref to BC is null: skipping " << "\n";
413  else
414  std::cout << " BC energy " << matchingBC[i]->energy() << "\n";
415  }
416  */
417 
419  trackPairRef.clear();
420  trackInnPos.clear();
421  trackPin.clear();
422  trackPout.clear();
423 
424  for (std::vector<reco::TransientTrack>::const_iterator iTk = (iPair->first).begin();
425  iTk != (iPair->first).end();
426  ++iTk) {
427  //LogDebug("ConvertedPhotonProducer") << " ConvertedPhotonProducer Transient Tracks in the pair charge " << iTk->charge() << " Num of RecHits " << iTk->recHitsSize() << " inner momentum " << iTk->track().innerMomentum() << "\n";
428 
429  auto const* ttt = dynamic_cast<const reco::TrackTransientTrack*>(iTk->basicTransientTrack());
430  reco::TrackRef myTkRef = ttt->persistentTrackRef();
431 
432  //LogDebug("ConvertedPhotonProducer") << " ConvertedPhotonProducer Ref to Rec Tracks in the pair charge " << myTkRef->charge() << " Num of RecHits " << myTkRef->recHitsSize() << " inner momentum " << myTkRef->innerMomentum() << "\n";
433  if (myTkRef->extra().isNonnull()) {
434  trackInnPos.push_back(toFConverterP(myTkRef->innerPosition()));
435  trackPin.push_back(toFConverterV(myTkRef->innerMomentum()));
436  trackPout.push_back(toFConverterV(myTkRef->outerMomentum()));
437  }
438  trackPairRef.push_back(myTkRef);
439  }
440 
441  // std::cout << " ConvertedPhotonProducer trackPin size " << trackPin.size() << std::endl;
442  //LogDebug("ConvertedPhotonProducer") << " ConvertedPhotonProducer SC energy " << aClus->energy() << "\n";
443  //LogDebug("ConvertedPhotonProducer") << " ConvertedPhotonProducer photon p4 " << p4 << "\n";
444  //LogDebug("ConvertedPhotonProducer") << " ConvertedPhotonProducer vtx " << vtx.x() << " " << vtx.y() << " " << vtx.z() << "\n";
445  if (theConversionVertex.isValid()) {
446  //LogDebug("ConvertedPhotonProducer") << " ConvertedPhotonProducer theConversionVertex " << theConversionVertex.position().x() << " " << theConversionVertex.position().y() << " " << theConversionVertex.position().z() << "\n";
447  }
448  //LogDebug("ConvertedPhotonProducer") << " ConvertedPhotonProducer trackPairRef " << trackPairRef.size() << "\n";
449 
450  minAppDist = calculateMinApproachDistance(trackPairRef[0], trackPairRef[1]);
451 
452  double like = -999.;
453  reco::Conversion newCandidate(scPtrVec,
454  trackPairRef,
455  trkPositionAtEcal,
456  theConversionVertex,
457  matchingBC,
458  minAppDist,
459  trackInnPos,
460  trackPin,
461  trackPout,
462  like,
463  algo);
464  like = likelihoodCalc_.calculateLikelihood(newCandidate);
465  // std::cout << "like = " << like << std::endl;
466  newCandidate.setMVAout(like);
467  outputConvPhotonCollection.push_back(newCandidate);
468 
469  //LogDebug("ConvertedPhotonProducer") << " ConvertedPhotonProducer Put the ConvertedPhotonCollection a candidate in the Barrel " << "\n";
470 
471  } else {
472  // std::cout << " ConvertedPhotonProducer case with only one track found " << "\n";
473 
474  //std::cout << " ConvertedPhotonProducer recovering one track " << "\n";
475  trackPairRef.clear();
476  trackInnPos.clear();
477  trackPin.clear();
478  trackPout.clear();
479  std::vector<reco::TransientTrack>::const_iterator iTk = (iPair->first).begin();
480  //std::cout << " ConvertedPhotonProducer Transient Tracks in the pair charge " << iTk->charge() << " Num of RecHits " << iTk->recHitsSize() << " inner momentum " << iTk->track().innerMomentum() << " pt " << sqrt(iTk->track().innerMomentum().perp2()) << "\n";
481  auto const* ttt = dynamic_cast<const reco::TrackTransientTrack*>(iTk->basicTransientTrack());
482  reco::TrackRef myTk = ttt->persistentTrackRef();
483  if (myTk->extra().isNonnull()) {
484  trackInnPos.push_back(toFConverterP(myTk->innerPosition()));
485  trackPin.push_back(toFConverterV(myTk->innerMomentum()));
486  trackPout.push_back(toFConverterV(myTk->outerMomentum()));
487  }
488  trackPairRef.push_back(myTk);
489  //std::cout << " Provenance " << myTk->algoName() << std::endl;
490 
491  if (recoverOneTrackCase_) {
492  float theta1 = myTk->innerMomentum().Theta();
493  float dCot = 999.;
494  float dCotTheta = -999.;
495  reco::TrackRef goodRef;
496  for (auto const& tran : t_generalTrk) {
497  auto const* ttt = dynamic_cast<const reco::TrackTransientTrack*>(tran.basicTransientTrack());
498  reco::TrackRef trRef = ttt->persistentTrackRef();
499  if (trRef->charge() * myTk->charge() > 0)
500  continue;
501  float dEta = trRef->eta() - myTk->eta();
502  float dPhi = trRef->phi() - myTk->phi();
504  continue;
505  float theta2 = trRef->innerMomentum().Theta();
506  dCotTheta = 1. / tan(theta1) - 1. / tan(theta2);
507  // std::cout << " ConvertedPhotonProducer recovering general transient track charge " << trRef->charge() << " momentum " << trRef->innerMomentum() << " dcotTheta " << fabs(dCotTheta) << std::endl;
508  if (fabs(dCotTheta) < dCot) {
509  dCot = fabs(dCotTheta);
510  goodRef = trRef;
511  }
512  }
513 
514  if (goodRef.isNonnull()) {
515  minAppDist = calculateMinApproachDistance(myTk, goodRef);
516 
517  // std::cout << " ConvertedPhotonProducer chosen dCotTheta " << fabs(dCotTheta) << std::endl;
518  if (fabs(dCotTheta) < deltaCotCut_ && minAppDist > minApproachDisCut_) {
519  trackInnPos.push_back(toFConverterP(goodRef->innerPosition()));
520  trackPin.push_back(toFConverterV(goodRef->innerMomentum()));
521  trackPout.push_back(toFConverterV(goodRef->outerMomentum()));
522  trackPairRef.push_back(goodRef);
523  // std::cout << " ConvertedPhotonProducer adding opposite charge track from generalTrackCollection charge " << goodRef ->charge() << " pt " << sqrt(goodRef->innerMomentum().perp2()) << " trackPairRef size " << trackPairRef.size() << std::endl;
524  //std::cout << " Track Provenenance " << goodRef->algoName() << std::endl;
525 
526  try {
527  vertexFinder_.run(iPair->first, theConversionVertex);
528 
529  } catch (cms::Exception& e) {
530  //std::cout << " cms::Exception caught in ConvertedPhotonProducer::produce" << "\n" ;
531  edm::LogWarning(metname) << "cms::Exception caught in ConvertedPhotonProducer::produce\n"
532  << e.explainSelf();
533  }
534  }
535  }
536 
537  } // bool On/Off one track case recovery using generalTracks
538  const double like = -999.;
539  outputConvPhotonCollection.emplace_back(scPtrVec,
540  trackPairRef,
541  trkPositionAtEcal,
542  theConversionVertex,
543  matchingBC,
544  minAppDist,
545  trackInnPos,
546  trackPin,
547  trackPout,
548  like,
549  algo);
550  auto& newCandidate = outputConvPhotonCollection.back();
551  newCandidate.setMVAout(likelihoodCalc_.calculateLikelihood(newCandidate));
552 
553  } // case with only on track: looking in general tracks
554  }
555  }
556  }
557 }
TransientVertex run(const std::vector< reco::TransientTrack > &pair)
const std::string metname
void push_back(Ptr< T > const &iPtr)
Definition: PtrVector.h:152
static ConversionAlgorithm algoByName(const std::string &name)
Definition: Conversion.cc:139
bool isNonnull() const
Checks for non-null.
Definition: Ref.h:238
MagneticField const * magneticField_
reco::TransientTrack build(const reco::Track *p) const
math::XYZVectorF toFConverterV(const math::XYZVector &val)
T sqrt(T t)
Definition: SSEVec.h:19
Tan< T >::type tan(const T &t)
Definition: Tan.h:22
math::XYZPoint Point
point in the space
Definition: Particle.h:25
float calculateMinApproachDistance(const reco::TrackRef &track1, const reco::TrackRef &track2)
ConversionLikelihoodCalculator likelihoodCalc_
double calculateLikelihood(reco::ConversionRef conversion)
double energy() const
cluster energy
Definition: CaloCluster.h:148
XYZVectorD XYZVector
spatial vector with cartesian internal representation
Definition: Vector3D.h:31
ConversionVertexFinder vertexFinder_
TransientTrackBuilder const * transientTrackBuilder_
void clear()
Clear the PtrVector.
Definition: PtrVectorBase.h:81
math::XYZPointF toFConverterP(const math::XYZPoint &val)
Log< level::Warning, false > LogWarning
math::XYZTLorentzVector LorentzVector
Lorentz vector.
Definition: Particle.h:21
bool isValid() const
Tells whether the vertex is valid.
Definition: Vertex.h:72

◆ calculateMinApproachDistance()

float ConvertedPhotonProducer::calculateMinApproachDistance ( const reco::TrackRef track1,
const reco::TrackRef track2 
)
private

Definition at line 631 of file ConvertedPhotonProducer.cc.

References getCircleCenter(), MagneticField::inTesla(), magneticField_, mathSSE::sqrt(), testProducerWithPsetDescEmpty_cfi::x1, testProducerWithPsetDescEmpty_cfi::x2, testProducerWithPsetDescEmpty_cfi::y1, testProducerWithPsetDescEmpty_cfi::y2, and PV3DBase< T, PVType, FrameType >::z().

Referenced by buildCollections().

632  {
633  double x1, x2, y1, y2;
634  double xx_1 = track1->innerPosition().x(), yy_1 = track1->innerPosition().y(), zz_1 = track1->innerPosition().z();
635  double xx_2 = track2->innerPosition().x(), yy_2 = track2->innerPosition().y(), zz_2 = track2->innerPosition().z();
636  double radius1 =
637  track1->innerMomentum().Rho() / (.3 * (magneticField_->inTesla(GlobalPoint(xx_1, yy_1, zz_1)).z())) * 100;
638  double radius2 =
639  track2->innerMomentum().Rho() / (.3 * (magneticField_->inTesla(GlobalPoint(xx_2, yy_2, zz_2)).z())) * 100;
640  getCircleCenter(track1, radius1, x1, y1);
641  getCircleCenter(track2, radius2, x2, y2);
642 
643  return std::sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2)) - radius1 - radius2;
644 }
T z() const
Definition: PV3DBase.h:61
virtual GlobalVector inTesla(const GlobalPoint &gp) const =0
Field value ad specified global point, in Tesla.
Global3DPoint GlobalPoint
Definition: GlobalPoint.h:10
MagneticField const * magneticField_
T sqrt(T t)
Definition: SSEVec.h:19
void getCircleCenter(const reco::TrackRef &tk, double r, double &x0, double &y0)

◆ cleanCollections()

void ConvertedPhotonProducer::cleanCollections ( const edm::Handle< edm::View< reco::CaloCluster >> &  scHandle,
const edm::OrphanHandle< reco::ConversionCollection > &  conversionHandle,
reco::ConversionCollection outputCollection 
)
private

Definition at line 559 of file ConvertedPhotonProducer.cc.

References reco::Conversion::clone(), clone(), printConversionInfo::conversionHandle, edm::Ref< C, T, F >::id(), edm::Ref< C, T, F >::key(), minSCEt_, risolveAmbiguity_, and solveAmbiguity().

Referenced by produce().

561  {
562  reco::Conversion* newCandidate = nullptr;
563  for (auto const& aClus : scHandle->ptrs()) {
564  // SC energy preselection
565  if (aClus->energy() / cosh(aClus->eta()) <= minSCEt_)
566  continue;
567 
568  if (conversionHandle.isValid()) {
569  if (risolveAmbiguity_) {
570  std::vector<reco::ConversionRef> bestRef = solveAmbiguity(conversionHandle, aClus);
571 
572  for (std::vector<reco::ConversionRef>::iterator iRef = bestRef.begin(); iRef != bestRef.end(); iRef++) {
573  if (iRef->isNonnull()) {
574  newCandidate = (*iRef)->clone();
575  outputConversionCollection.push_back(*newCandidate);
576  delete newCandidate;
577  }
578  }
579 
580  } else {
581  for (unsigned int icp = 0; icp < conversionHandle->size(); icp++) {
583  if (!(aClus.id() == cpRef->caloCluster()[0].id() && aClus.key() == cpRef->caloCluster()[0].key()))
584  continue;
585  if (!cpRef->isConverted())
586  continue;
587  if (cpRef->nTracks() < 2)
588  continue;
589  newCandidate = (&(*cpRef))->clone();
590  outputConversionCollection.push_back(*newCandidate);
591  delete newCandidate;
592  }
593 
594  } // solve or not the ambiguity of many conversion candidates
595  }
596  }
597 }
Conversion * clone() const
returns a clone of the candidate
Definition: Conversion.cc:148
std::vector< reco::ConversionRef > solveAmbiguity(const edm::OrphanHandle< reco::ConversionCollection > &conversionHandle, reco::CaloClusterPtr const &sc)
TEveGeoShape * clone(const TEveElement *element, TEveElement *parent)
Definition: eve_macros.cc:135

◆ getCircleCenter()

void ConvertedPhotonProducer::getCircleCenter ( const reco::TrackRef tk,
double  r,
double &  x0,
double &  y0 
)
private

Definition at line 646 of file ConvertedPhotonProducer.cc.

References ALCARECOTkAlJpsiMuMu_cff::charge, funct::cos(), phi, alignCSCRings::r, funct::sin(), testProducerWithPsetDescEmpty_cfi::x1, and testProducerWithPsetDescEmpty_cfi::y1.

Referenced by calculateMinApproachDistance().

646  {
647  double x1, y1, phi;
648  x1 = tk->innerPosition().x(); //inner position and inner momentum need track Extra!
649  y1 = tk->innerPosition().y();
650  phi = tk->innerMomentum().phi();
651  const int charge = tk->charge();
652  x0 = x1 + r * sin(phi) * charge;
653  y0 = y1 - r * cos(phi) * charge;
654 }
Sin< T >::type sin(const T &t)
Definition: Sin.h:22
Cos< T >::type cos(const T &t)
Definition: Cos.h:22

◆ produce()

void ConvertedPhotonProducer::produce ( edm::Event evt,
const edm::EventSetup es 
)
override

Definition at line 202 of file ConvertedPhotonProducer.cc.

References bcBarrelCollection_, bcEndcapCollection_, TransientTrackBuilder::build(), buildCollections(), cleanCollections(), cleanedConvertedPhotonCollectionPutToken_, printConversionInfo::conversionHandle, conversionIOTrackProducer_, conversionOITrackProducer_, convertedPhotonCollectionPutToken_, edm::Event::emplace(), generalTrackProducer_, edm::Event::getByToken(), edm::Event::getHandle(), hcalHelper_, inOutTrackSCAssociationCollection_, edm::HandleBase::isValid(), eostools::move(), outInTrackSCAssociationCollection_, recoverOneTrackCase_, ConversionTrackPairFinder::run(), scHybridBarrelProducer_, scIslandEndcapProducer_, trackPairFinder_, and transientTrackBuilder_.

202  {
203  //
204  // create empty output collections
205  //
206  // Converted photon candidates
207  reco::ConversionCollection outputConvPhotonCollection;
208  // Converted photon candidates
209  reco::ConversionCollection cleanedConversionCollection;
210 
211  // Get the Super Cluster collection in the Barrel
212  bool validBarrelSCHandle = true;
213  auto scBarrelHandle = theEvent.getHandle(scHybridBarrelProducer_);
214  if (!scBarrelHandle.isValid()) {
215  edm::LogError("ConvertedPhotonProducer") << "Error! Can't get the scHybridBarrelProducer";
216  validBarrelSCHandle = false;
217  }
218 
219  // Get the Super Cluster collection in the Endcap
220  bool validEndcapSCHandle = true;
222  theEvent.getByToken(scIslandEndcapProducer_, scEndcapHandle);
223  if (!scEndcapHandle.isValid()) {
224  edm::LogError("ConvertedPhotonProducer") << "Error! Can't get the scIslandEndcapProducer";
225  validEndcapSCHandle = false;
226  }
227 
229  bool validTrackInputs = true;
230  auto outInTrkHandle = theEvent.getHandle(conversionOITrackProducer_);
231  if (!outInTrkHandle.isValid()) {
232  //std::cout << "Error! Can't get the conversionOITrack " << "\n";
233  edm::LogError("ConvertedPhotonProducer") << "Error! Can't get the conversionOITrack "
234  << "\n";
235  validTrackInputs = false;
236  }
237  // LogDebug("ConvertedPhotonProducer")<< "ConvertedPhotonProducer outInTrack collection size " << (*outInTrkHandle).size() << "\n";
238 
240  auto outInTrkSCAssocHandle = theEvent.getHandle(outInTrackSCAssociationCollection_);
241  if (!outInTrkSCAssocHandle.isValid()) {
242  // std::cout << "Error! Can't get the product " << outInTrackSCAssociationCollection_.c_str() <<"\n";
243  edm::LogError("ConvertedPhotonProducer") << "Error! Can't get the outInTrackSCAssociationCollection)";
244  validTrackInputs = false;
245  }
246 
248  auto inOutTrkHandle = theEvent.getHandle(conversionIOTrackProducer_);
249  if (!inOutTrkHandle.isValid()) {
250  // std::cout << "Error! Can't get the conversionIOTrack " << "\n";
251  edm::LogError("ConvertedPhotonProducer") << "Error! Can't get the conversionIOTrack "
252  << "\n";
253  validTrackInputs = false;
254  }
255  // LogDebug("ConvertedPhotonProducer") << " ConvertedPhotonProducer inOutTrack collection size " << (*inOutTrkHandle).size() << "\n";
256 
258 
259  edm::Handle<reco::TrackCollection> generalTrkHandle;
260  if (recoverOneTrackCase_) {
261  theEvent.getByToken(generalTrackProducer_, generalTrkHandle);
262  if (!generalTrkHandle.isValid()) {
263  //std::cout << "Error! Can't get the genralTracks " << "\n";
264  edm::LogError("ConvertedPhotonProducer") << "Error! Can't get the genralTracks "
265  << "\n";
266  }
267  }
268 
270  auto inOutTrkSCAssocHandle = theEvent.getHandle(inOutTrackSCAssociationCollection_);
271  if (!inOutTrkSCAssocHandle.isValid()) {
272  //std::cout << "Error! Can't get the product " << inOutTrackSCAssociationCollection_.c_str() <<"\n";
273  edm::LogError("ConvertedPhotonProducer") << "Error! Can't get the inOutTrackSCAssociationCollection_.c_str()";
274  validTrackInputs = false;
275  }
276 
277  // Get the basic cluster collection in the Barrel
279  theEvent.getByToken(bcBarrelCollection_, bcBarrelHandle);
280  if (!bcBarrelHandle.isValid()) {
281  edm::LogError("ConvertedPhotonProducer") << "Error! Can't get the bcBarrelCollection";
282  }
283 
284  // Get the basic cluster collection in the Endcap
286  theEvent.getByToken(bcEndcapCollection_, bcEndcapHandle);
287  if (!bcEndcapHandle.isValid()) {
288  edm::LogError("ConvertedPhotonProducer") << "Error! Can't get the bcEndcapCollection";
289  }
290 
291  if (validTrackInputs) {
292  //do the conversion:
293  std::vector<reco::TransientTrack> t_outInTrk = transientTrackBuilder_->build(outInTrkHandle);
294  std::vector<reco::TransientTrack> t_inOutTrk = transientTrackBuilder_->build(inOutTrkHandle);
295 
297  std::map<std::vector<reco::TransientTrack>, reco::CaloClusterPtr, CompareTwoTracksVectors> allPairs;
298  allPairs = trackPairFinder_.run(
299  t_outInTrk, outInTrkHandle, outInTrkSCAssocHandle, t_inOutTrk, inOutTrkHandle, inOutTrkSCAssocHandle);
300  //LogDebug("ConvertedPhotonProducer") << "ConvertedPhotonProducer allPairs.size " << allPairs.size() << "\n";
301 
302  hcalHelper_->beginEvent(theEvent, theEventSetup);
303 
304  buildCollections(theEventSetup,
305  scBarrelHandle,
306  bcBarrelHandle,
307  *hcalHelper_,
308  generalTrkHandle,
309  allPairs,
310  outputConvPhotonCollection);
311  buildCollections(theEventSetup,
312  scEndcapHandle,
313  bcEndcapHandle,
314  *hcalHelper_,
315  generalTrkHandle,
316  allPairs,
317  outputConvPhotonCollection);
318  }
319 
320  // put the product in the event
321  auto const conversionHandle =
322  theEvent.emplace(convertedPhotonCollectionPutToken_, std::move(outputConvPhotonCollection));
323 
324  // Loop over barrel and endcap SC collections and fill the photon collection
325  if (validBarrelSCHandle)
326  cleanCollections(scBarrelHandle, conversionHandle, cleanedConversionCollection);
327  if (validEndcapSCHandle)
328  cleanCollections(scEndcapHandle, conversionHandle, cleanedConversionCollection);
329 
330  theEvent.emplace(cleanedConvertedPhotonCollectionPutToken_, std::move(cleanedConversionCollection));
331 }
edm::EDPutTokenT< reco::ConversionCollection > cleanedConvertedPhotonCollectionPutToken_
edm::EDGetTokenT< reco::TrackCaloClusterPtrAssociation > outInTrackSCAssociationCollection_
edm::EDGetTokenT< edm::View< reco::CaloCluster > > bcEndcapCollection_
edm::EDPutTokenT< reco::ConversionCollection > convertedPhotonCollectionPutToken_
edm::EDGetTokenT< reco::TrackCollection > conversionIOTrackProducer_
edm::EDGetTokenT< edm::View< reco::CaloCluster > > scIslandEndcapProducer_
std::unique_ptr< ElectronHcalHelper > hcalHelper_
edm::Ptr< CaloCluster > CaloClusterPtr
Log< level::Error, false > LogError
std::vector< Conversion > ConversionCollection
collectin of Conversion objects
Definition: ConversionFwd.h:9
reco::TransientTrack build(const reco::Track *p) const
edm::EDGetTokenT< reco::TrackCollection > generalTrackProducer_
void buildCollections(edm::EventSetup const &es, const edm::Handle< edm::View< reco::CaloCluster >> &scHandle, const edm::Handle< edm::View< reco::CaloCluster >> &bcHandle, ElectronHcalHelper const &hcalHelper, const edm::Handle< reco::TrackCollection > &trkHandle, std::map< std::vector< reco::TransientTrack >, reco::CaloClusterPtr, CompareTwoTracksVectors > &allPairs, reco::ConversionCollection &outputConvPhotonCollection)
edm::EDGetTokenT< reco::TrackCollection > conversionOITrackProducer_
edm::EDGetTokenT< reco::TrackCaloClusterPtrAssociation > inOutTrackSCAssociationCollection_
edm::EDGetTokenT< edm::View< reco::CaloCluster > > bcBarrelCollection_
edm::EDGetTokenT< edm::View< reco::CaloCluster > > scHybridBarrelProducer_
void cleanCollections(const edm::Handle< edm::View< reco::CaloCluster >> &scHandle, const edm::OrphanHandle< reco::ConversionCollection > &conversionHandle, reco::ConversionCollection &outputCollection)
bool isValid() const
Definition: HandleBase.h:70
ConversionTrackPairFinder trackPairFinder_
TransientTrackBuilder const * transientTrackBuilder_
std::map< std::vector< reco::TransientTrack >, reco::CaloClusterPtr, CompareTwoTracksVectors > run(const std::vector< reco::TransientTrack > &outIn, const edm::Handle< reco::TrackCollection > &outInTrkHandle, const edm::Handle< reco::TrackCaloClusterPtrAssociation > &outInTrackSCAssH, const std::vector< reco::TransientTrack > &inOut, const edm::Handle< reco::TrackCollection > &inOutTrkHandle, const edm::Handle< reco::TrackCaloClusterPtrAssociation > &inOutTrackSCAssH)
def move(src, dest)
Definition: eostools.py:511

◆ solveAmbiguity()

std::vector< reco::ConversionRef > ConvertedPhotonProducer::solveAmbiguity ( const edm::OrphanHandle< reco::ConversionCollection > &  conversionHandle,
reco::CaloClusterPtr const &  sc 
)
private

Definition at line 599 of file ConvertedPhotonProducer.cc.

References printConversionInfo::conversionHandle, edm::ProductID::id(), edm::Ptr< T >::id(), edm::Ptr< T >::key(), and maxNumOfCandidates_.

Referenced by cleanCollections().

600  {
601  std::multimap<double, reco::ConversionRef, std::greater<double>> convMap;
602 
603  for (unsigned int icp = 0; icp < conversionHandle->size(); icp++) {
605 
606  //std::cout << " cpRef " << cpRef->nTracks() << " " << cpRef ->caloCluster()[0]->energy() << std::endl;
607  if (!(scRef.id() == cpRef->caloCluster()[0].id() && scRef.key() == cpRef->caloCluster()[0].key()))
608  continue;
609  if (!cpRef->isConverted())
610  continue;
611  double like = cpRef->MVAout();
612  if (cpRef->nTracks() < 2)
613  continue;
614  // std::cout << " Like " << like << std::endl;
615  convMap.emplace(like, cpRef);
616  }
617 
618  // std::cout << " convMap size " << convMap.size() << std::endl;
619 
620  std::vector<reco::ConversionRef> bestRefs;
621  for (auto iMap = convMap.begin(); iMap != convMap.end(); iMap++) {
622  // std::cout << " Like list in the map " << iMap->first << " " << (iMap->second)->EoverP() << std::endl;
623  bestRefs.push_back(iMap->second);
624  if (int(bestRefs.size()) == maxNumOfCandidates_)
625  break;
626  }
627 
628  return bestRefs;
629 }

◆ toFConverterP()

math::XYZPointF ConvertedPhotonProducer::toFConverterP ( const math::XYZPoint val)
inlineprivate

Definition at line 121 of file ConvertedPhotonProducer.cc.

References heppy_batch::val.

Referenced by buildCollections().

121 { return math::XYZPointF(val.x(), val.y(), val.z()); }
ROOT::Math::PositionVector3D< ROOT::Math::Cartesian3D< float > > XYZPointF
point in space with cartesian internal representation
Definition: Point3D.h:10

◆ toFConverterV()

math::XYZVectorF ConvertedPhotonProducer::toFConverterV ( const math::XYZVector val)
inlineprivate

Definition at line 123 of file ConvertedPhotonProducer.cc.

References heppy_batch::val.

Referenced by buildCollections().

123 { return math::XYZVectorF(val.x(), val.y(), val.z()); }
ROOT::Math::DisplacementVector3D< ROOT::Math::Cartesian3D< float > > XYZVectorF
spatial vector with cartesian internal representation
Definition: Vector3D.h:16

Member Data Documentation

◆ algoName_

std::string ConvertedPhotonProducer::algoName_
private

Definition at line 104 of file ConvertedPhotonProducer.cc.

Referenced by buildCollections().

◆ bcBarrelCollection_

edm::EDGetTokenT<edm::View<reco::CaloCluster> > ConvertedPhotonProducer::bcBarrelCollection_
private

Definition at line 89 of file ConvertedPhotonProducer.cc.

Referenced by produce().

◆ bcEndcapCollection_

edm::EDGetTokenT<edm::View<reco::CaloCluster> > ConvertedPhotonProducer::bcEndcapCollection_
private

Definition at line 90 of file ConvertedPhotonProducer.cc.

Referenced by produce().

◆ caloGeomToken_

edm::ESGetToken<CaloGeometry, CaloGeometryRecord> ConvertedPhotonProducer::caloGeomToken_
private

Definition at line 98 of file ConvertedPhotonProducer.cc.

◆ cleanedConvertedPhotonCollectionPutToken_

edm::EDPutTokenT<reco::ConversionCollection> ConvertedPhotonProducer::cleanedConvertedPhotonCollectionPutToken_
private

Definition at line 87 of file ConvertedPhotonProducer.cc.

Referenced by produce().

◆ conversionIOTrackProducer_

edm::EDGetTokenT<reco::TrackCollection> ConvertedPhotonProducer::conversionIOTrackProducer_
private

Definition at line 74 of file ConvertedPhotonProducer.cc.

Referenced by produce().

◆ conversionOITrackProducer_

edm::EDGetTokenT<reco::TrackCollection> ConvertedPhotonProducer::conversionOITrackProducer_
private

Definition at line 73 of file ConvertedPhotonProducer.cc.

Referenced by produce().

◆ convertedPhotonCollectionPutToken_

edm::EDPutTokenT<reco::ConversionCollection> ConvertedPhotonProducer::convertedPhotonCollectionPutToken_
private

Definition at line 86 of file ConvertedPhotonProducer.cc.

Referenced by produce().

◆ cutsFromDB

bool ConvertedPhotonProducer::cutsFromDB
private

Definition at line 82 of file ConvertedPhotonProducer.cc.

Referenced by beginRun().

◆ deltaCotCut_

double ConvertedPhotonProducer::deltaCotCut_
private

Definition at line 111 of file ConvertedPhotonProducer.cc.

Referenced by buildCollections().

◆ dRForConversionRecovery_

double ConvertedPhotonProducer::dRForConversionRecovery_
private

Definition at line 110 of file ConvertedPhotonProducer.cc.

Referenced by buildCollections().

◆ generalTrackProducer_

edm::EDGetTokenT<reco::TrackCollection> ConvertedPhotonProducer::generalTrackProducer_
private

Definition at line 79 of file ConvertedPhotonProducer.cc.

Referenced by produce().

◆ hbheRecHits_

edm::EDGetTokenT<HBHERecHitCollection> ConvertedPhotonProducer::hbheRecHits_
private

Definition at line 93 of file ConvertedPhotonProducer.cc.

◆ hcalCuts

HcalPFCuts const* ConvertedPhotonProducer::hcalCuts = nullptr
private

Definition at line 83 of file ConvertedPhotonProducer.cc.

Referenced by beginRun(), and buildCollections().

◆ hcalCutsToken_

edm::ESGetToken<HcalPFCuts, HcalPFCutsRcd> ConvertedPhotonProducer::hcalCutsToken_
private

Definition at line 81 of file ConvertedPhotonProducer.cc.

Referenced by beginRun().

◆ hcalHelper_

std::unique_ptr<ElectronHcalHelper> ConvertedPhotonProducer::hcalHelper_
private

Definition at line 116 of file ConvertedPhotonProducer.cc.

Referenced by produce().

◆ hOverEConeSize_

double ConvertedPhotonProducer::hOverEConeSize_
private

Definition at line 106 of file ConvertedPhotonProducer.cc.

◆ inOutTrackSCAssociationCollection_

edm::EDGetTokenT<reco::TrackCaloClusterPtrAssociation> ConvertedPhotonProducer::inOutTrackSCAssociationCollection_
private

Definition at line 77 of file ConvertedPhotonProducer.cc.

Referenced by produce().

◆ likelihoodCalc_

ConversionLikelihoodCalculator ConvertedPhotonProducer::likelihoodCalc_
private

Definition at line 118 of file ConvertedPhotonProducer.cc.

Referenced by buildCollections().

◆ likelihoodWeights_

std::string ConvertedPhotonProducer::likelihoodWeights_
private

Definition at line 119 of file ConvertedPhotonProducer.cc.

◆ magneticField_

MagneticField const* ConvertedPhotonProducer::magneticField_
private

◆ maxHOverE_

double ConvertedPhotonProducer::maxHOverE_
private

Definition at line 107 of file ConvertedPhotonProducer.cc.

Referenced by buildCollections().

◆ maxNumOfCandidates_

int ConvertedPhotonProducer::maxNumOfCandidates_
private

Definition at line 113 of file ConvertedPhotonProducer.cc.

Referenced by solveAmbiguity().

◆ mFToken_

edm::ESGetToken<MagneticField, IdealMagneticFieldRecord> ConvertedPhotonProducer::mFToken_
private

Definition at line 99 of file ConvertedPhotonProducer.cc.

Referenced by beginRun().

◆ minApproachDisCut_

double ConvertedPhotonProducer::minApproachDisCut_
private

Definition at line 112 of file ConvertedPhotonProducer.cc.

Referenced by buildCollections().

◆ minSCEt_

double ConvertedPhotonProducer::minSCEt_
private

Definition at line 108 of file ConvertedPhotonProducer.cc.

Referenced by buildCollections(), and cleanCollections().

◆ outInTrackSCAssociationCollection_

edm::EDGetTokenT<reco::TrackCaloClusterPtrAssociation> ConvertedPhotonProducer::outInTrackSCAssociationCollection_
private

Definition at line 76 of file ConvertedPhotonProducer.cc.

Referenced by produce().

◆ recoverOneTrackCase_

bool ConvertedPhotonProducer::recoverOneTrackCase_
private

Definition at line 109 of file ConvertedPhotonProducer.cc.

Referenced by buildCollections(), and produce().

◆ risolveAmbiguity_

bool ConvertedPhotonProducer::risolveAmbiguity_
private

Definition at line 114 of file ConvertedPhotonProducer.cc.

Referenced by cleanCollections().

◆ scHybridBarrelProducer_

edm::EDGetTokenT<edm::View<reco::CaloCluster> > ConvertedPhotonProducer::scHybridBarrelProducer_
private

Definition at line 91 of file ConvertedPhotonProducer.cc.

Referenced by produce().

◆ scIslandEndcapProducer_

edm::EDGetTokenT<edm::View<reco::CaloCluster> > ConvertedPhotonProducer::scIslandEndcapProducer_
private

Definition at line 92 of file ConvertedPhotonProducer.cc.

Referenced by produce().

◆ trackPairFinder_

ConversionTrackPairFinder ConvertedPhotonProducer::trackPairFinder_
private

Definition at line 102 of file ConvertedPhotonProducer.cc.

Referenced by produce().

◆ transientTrackBuilder_

TransientTrackBuilder const* ConvertedPhotonProducer::transientTrackBuilder_
private

Definition at line 96 of file ConvertedPhotonProducer.cc.

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

◆ transientTrackToken_

edm::ESGetToken<TransientTrackBuilder, TransientTrackRecord> ConvertedPhotonProducer::transientTrackToken_
private

Definition at line 100 of file ConvertedPhotonProducer.cc.

Referenced by beginRun().

◆ vertexFinder_

ConversionVertexFinder ConvertedPhotonProducer::vertexFinder_
private

Definition at line 103 of file ConvertedPhotonProducer.cc.

Referenced by buildCollections().