34 #include "Math/GenVector/VectorUtil.h"
39 LogDebug(
"SoftConversionProducer") <<
" SoftConversionProducer CTOR " <<
"\n";
120 int nTracksOI = (int) outInTrkHandle->size();
122 for(
int itrk=0; itrk<nTracksOI; itrk++){
126 trackClusterMap.push_back(make_pair(tRef,cRef));
129 int nTracksIO = (int) inOutTrkHandle->size();
131 for(
int itrk=0; itrk<nTracksIO; itrk++){
135 trackClusterMap.push_back(make_pair(tRef,cRef));
146 TrackClusterMap::iterator iter1 = trackClusterMap.begin();
147 TrackClusterMap::iterator iter2 = trackClusterMap.begin();
148 TrackClusterMap::iterator iter_end = trackClusterMap.end();
153 for( ; iter1 != iter_end; iter1++) {
157 for(iter2 = iter1+1; iter2 != iter_end; iter2++) {
160 if(trk1 == trk2)
continue;
176 double dEta =
std::abs(cls1->position().Eta() - cls2->position().Eta());
178 double dPhi =
std::abs(ROOT::Math::VectorUtil::DeltaPhi(cls1->position(),cls2->position()));
181 std::vector<reco::TransientTrack> toBeFitted;
182 toBeFitted.push_back(tsk1);
183 toBeFitted.push_back(tsk2);
196 if(theConversionVertex.
isValid()){
202 std::vector<reco::CaloClusterPtr> clusterRefs;
203 clusterRefs.push_back(cls1);
204 clusterRefs.push_back(cls2);
206 std::vector<reco::TrackRef> trkRefs;
207 trkRefs.push_back(trk1);
208 trkRefs.push_back(trk2);
210 std::vector<math::XYZVector> trackPin;
211 std::vector<math::XYZVector> trackPout;
212 trackPin.push_back( trk1->innerMomentum());
213 trackPin.push_back( trk2->innerMomentum());
214 trackPout.push_back( trk1->outerMomentum());
215 trackPout.push_back( trk2->outerMomentum());
221 trkPositionAtEcal.clear();
225 double dummy = -9999.;
226 std::vector<math::XYZPoint> dummyVec;
227 reco::Conversion newCandidate(scRefs, trkRefs, trkPositionAtEcal, theConversionVertex, clusterRefs, minAppDist,dummyVec, trackPin, trackPout, dummy );
232 if(
NotAlreadyIn(newCandidate,outputColl)) outputColl->push_back(newCandidate);
241 trkPositionAtEcal.clear();
262 const std::auto_ptr<reco::ConversionCollection>& outputColl)
const {
264 if(outputColl->size() == 0)
return true;
266 reco::ConversionCollection::const_iterator it = outputColl->begin();
267 reco::ConversionCollection::const_iterator it_end = outputColl->end();
268 for( ; it != it_end; it++){
virtual float distance() const
virtual void beginRun(edm::Run &r, edm::EventSetup const &es)
T getParameter(std::string const &) const
virtual bool calculate(const TrajectoryStateOnSurface &sta, const TrajectoryStateOnSurface &stb)
ConversionTrackPairFinder * theTrackPairFinder_
double clustersMaxDeltaPhi_
std::string inOutTrackClusterAssociationCollection_
edm::InputTag clusterEndcapCollection_
edm::ESHandle< MagneticField > theMF_
static HepMC::IO_HEPEVT conv
ConversionTrackEcalImpactPoint * theEcalImpactPositionFinder_
void push_back(Ptr< T > const &iPtr)
bool isValid() const
Tells whether the vertex is valid.
std::string softConversionCollection_
ConversionVertexFinder * theVertexFinder_
std::vector< Conversion > ConversionCollection
collectin of Conversion objects
double clustersMaxDeltaEta_
std::string outInTrackClusterAssociationCollection_
TrajectoryStateOnSurface innermostMeasurementState() const
std::vector< edm::RefToBase< reco::Track > > tracks() const
vector of track to base references
std::vector< math::XYZPoint > find(const std::vector< reco::TransientTrack > &tracks, const edm::Handle< edm::View< reco::CaloCluster > > &bcHandle)
T mag() const
The vector magnitude. Equivalent to sqrt(vec.mag2())
double dPhi(double phi1, double phi2)
~SoftConversionProducer()
TransientVertex run(std::vector< reco::TransientTrack > pair)
OrphanHandle< PROD > put(std::auto_ptr< PROD > product)
Put a new product.
edm::InputTag clusterBarrelCollection_
GlobalVector momentum() const
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
GlobalPoint position() const
virtual void produce(edm::Event &evt, const edm::EventSetup &es)
FreeTrajectoryState initialFreeState() const
std::string conversionOITrackProducer_
const GlobalTrajectoryParameters & globalParameters() const
bool NotAlreadyIn(const reco::Conversion &thisConv, const std::auto_ptr< reco::ConversionCollection > &outputColl) const
SoftConversionProducer(const edm::ParameterSet &ps)
std::vector< std::pair< reco::TrackRef, reco::CaloClusterPtr > > TrackClusterMap
std::string conversionIOTrackProducer_
bool trackQualityCut(const reco::TrackRef &trk)
virtual void endRun(edm::Run &, edm::EventSetup const &)