Go to the documentation of this file.00001 #ifndef RecoParticleFlow_PFClusterProducer_PFRecHitProducerHO_h_
00002 #define RecoParticleFlow_PFClusterProducer_PFRecHitProducerHO_h_
00003
00004
00005 #include <memory>
00006 #include <vector>
00007
00008
00009 #include "FWCore/Framework/interface/Frameworkfwd.h"
00010 #include "FWCore/Framework/interface/EDProducer.h"
00011
00012 #include "FWCore/Framework/interface/Event.h"
00013 #include "FWCore/Framework/interface/MakerMacros.h"
00014
00015 #include "FWCore/ParameterSet/interface/ParameterSet.h"
00016
00017 #include "Geometry/CaloTopology/interface/CaloDirection.h"
00018
00019 #include "RecoParticleFlow/PFClusterProducer/plugins/PFRecHitProducer.h"
00020 #include "DataFormats/ParticleFlowReco/interface/PFLayer.h"
00021
00022 #include "DataFormats/Math/interface/Vector3D.h"
00030 class CaloSubdetectorTopology;
00031 class CaloSubdetectorGeometry;
00032
00033 class DetId;
00034
00035 class PFRecHitProducerHO : public PFRecHitProducer {
00036
00037 public:
00038 explicit PFRecHitProducerHO(const edm::ParameterSet&);
00039 ~PFRecHitProducerHO();
00040
00041 private:
00042
00043
00044
00045 void createRecHits(std::vector<reco::PFRecHit>& rechits,
00046 std::vector<reco::PFRecHit>& rechitsCleaned,
00047 edm::Event&, const edm::EventSetup&);
00048
00049 reco::PFRecHit* createHORecHit( const DetId& detid,
00050 double energy,
00051 PFLayer::Layer layer,
00052 const CaloSubdetectorGeometry* geom);
00053
00054
00055
00056
00058 bool findHORecHitGeometry ( const DetId& detid,
00059 const CaloSubdetectorGeometry* geom,
00060 math::XYZVector& position,
00061 math::XYZVector& axis );
00062
00064 void
00065 findRecHitNeighboursHO( reco::PFRecHit& rh,
00066 const std::map<unsigned,unsigned >& sortedHits );
00067 void
00068 findRecHitNeighbours( reco::PFRecHit& rh,
00069 const std::map<unsigned,unsigned >& sortedHits,
00070 const CaloSubdetectorTopology& barrelTopo,
00071 const CaloSubdetectorGeometry& barrelGeom);
00072
00076 void hoNeighbArray( const CaloSubdetectorGeometry& barrelGeom,
00077 const CaloSubdetectorTopology& barrelTopo);
00078
00079 DetId move(DetId cell, const CaloDirection& dir ) const;
00080
00081 bool stdsimplemove(DetId& cell,
00082 const CaloDirection& dir,
00083 const CaloSubdetectorTopology& barrelTopo,
00084 const CaloSubdetectorGeometry& barrelGeom) const;
00085
00086 bool stdmove(DetId& cell,
00087 const CaloDirection& dir,
00088 const CaloSubdetectorTopology& barrelTopo,
00089 const CaloSubdetectorGeometry& barrelGeom) const;
00090
00091
00092
00093
00094
00096 std::vector<std::vector<DetId> > neighboursHO_;
00097
00099 bool neighbourmapcalculated_;
00100
00101
00102
00103
00104
00105 edm::InputTag inputTagHORecHits_;
00106
00107
00108 double thresholdR0_;
00109
00110
00111 double thresholdR1_;
00112
00113
00114 int HOMaxAllowedSev_;
00115 };
00116
00117 #endif