Producer for particle flow rechits (PFRecHit) in HCAL. More...
#include <PFRecHitProducerHCAL.h>
Producer for particle flow rechits (PFRecHit) in HCAL.
Definition at line 33 of file PFRecHitProducerHCAL.h.
PFRecHitProducerHCAL::PFRecHitProducerHCAL | ( | const edm::ParameterSet & | iConfig | ) | [explicit] |
Definition at line 41 of file PFRecHitProducerHCAL.cc.
References applyLongShortDPG_, applyPulseDPG_, applyTimeDPG_, ECAL_Compensate_, ECAL_Compensation_, ECAL_Dead_Code_, ECAL_Threshold_, EM_Depth_, edm::ParameterSet::getParameter(), HAD_Depth_, HCAL_Calib_, HCAL_Calib_29, HF_Calib_, HF_Calib_29, inputTagCaloTowers_, inputTagHcalRecHitsHBHE_, inputTagHcalRecHitsHF_, longFibre_Cut, longFibre_Fraction, longShortFibre_Cut, maxLongTiming_Cut, maxShortTiming_Cut, minLongTiming_Cut, minShortTiming_Cut, navigation_HF_, shortFibre_Cut, shortFibre_Fraction, thresh_HF_, weight_HFem_, and weight_HFhad_.
: PFRecHitProducer( iConfig ) { // access to the collections of rechits inputTagHcalRecHitsHBHE_ = iConfig.getParameter<InputTag>("hcalRecHitsHBHE"); inputTagHcalRecHitsHF_ = iConfig.getParameter<InputTag>("hcalRecHitsHF"); inputTagCaloTowers_ = iConfig.getParameter<InputTag>("caloTowers"); thresh_HF_ = iConfig.getParameter<double>("thresh_HF"); navigation_HF_ = iConfig.getParameter<bool>("navigation_HF"); weight_HFem_ = iConfig.getParameter<double>("weight_HFem"); weight_HFhad_ = iConfig.getParameter<double>("weight_HFhad"); HCAL_Calib_ = iConfig.getParameter<bool>("HCAL_Calib"); HF_Calib_ = iConfig.getParameter<bool>("HF_Calib"); HCAL_Calib_29 = iConfig.getParameter<double>("HCAL_Calib_29"); HF_Calib_29 = iConfig.getParameter<double>("HF_Calib_29"); shortFibre_Cut = iConfig.getParameter<double>("ShortFibre_Cut"); longFibre_Fraction = iConfig.getParameter<double>("LongFibre_Fraction"); longFibre_Cut = iConfig.getParameter<double>("LongFibre_Cut"); shortFibre_Fraction = iConfig.getParameter<double>("ShortFibre_Fraction"); applyLongShortDPG_ = iConfig.getParameter<bool>("ApplyLongShortDPG"); longShortFibre_Cut = iConfig.getParameter<double>("LongShortFibre_Cut"); minShortTiming_Cut = iConfig.getParameter<double>("MinShortTiming_Cut"); maxShortTiming_Cut = iConfig.getParameter<double>("MaxShortTiming_Cut"); minLongTiming_Cut = iConfig.getParameter<double>("MinLongTiming_Cut"); maxLongTiming_Cut = iConfig.getParameter<double>("MaxLongTiming_Cut"); applyTimeDPG_ = iConfig.getParameter<bool>("ApplyTimeDPG"); applyPulseDPG_ = iConfig.getParameter<bool>("ApplyPulseDPG"); ECAL_Compensate_ = iConfig.getParameter<bool>("ECAL_Compensate"); ECAL_Threshold_ = iConfig.getParameter<double>("ECAL_Threshold"); ECAL_Compensation_ = iConfig.getParameter<double>("ECAL_Compensation"); ECAL_Dead_Code_ = iConfig.getParameter<unsigned int>("ECAL_Dead_Code"); EM_Depth_ = iConfig.getParameter<double>("EM_Depth"); HAD_Depth_ = iConfig.getParameter<double>("HAD_Depth"); //--ab produces<reco::PFRecHitCollection>("HFHAD").setBranchAlias("HFHADRecHits"); produces<reco::PFRecHitCollection>("HFEM").setBranchAlias("HFEMRecHits"); //--ab }
PFRecHitProducerHCAL::~PFRecHitProducerHCAL | ( | ) |
Definition at line 111 of file PFRecHitProducerHCAL.cc.
{}
reco::PFRecHit * PFRecHitProducerHCAL::createHcalRecHit | ( | const DetId & | detid, |
double | energy, | ||
PFLayer::Layer | layer, | ||
const CaloSubdetectorGeometry * | geom, | ||
unsigned | newDetId = 0 |
||
) | [private] |
Definition at line 1014 of file PFRecHitProducerHCAL.cc.
References cond::rpcobgas::detid, EM_Depth_, CaloCellGeometry::getCorners(), CaloSubdetectorGeometry::getGeometry(), CaloCellGeometry::getPosition(), HAD_Depth_, PFLayer::HF_EM, PFLayer::HF_HAD, position, DetId::rawId(), reco::PFRecHit::setNECorner(), reco::PFRecHit::setNWCorner(), reco::PFRecHit::setSECorner(), reco::PFRecHit::setSWCorner(), PV3DBase< T, PVType, FrameType >::x(), x, PV3DBase< T, PVType, FrameType >::y(), detailsBasic3DVector::y, PV3DBase< T, PVType, FrameType >::z(), and z.
{ const CaloCellGeometry *thisCell = geom->getGeometry(detid); if(!thisCell) { edm::LogError("PFRecHitProducerHCAL") <<"warning detid "<<detid.rawId()<<" not found in layer " <<layer<<endl; return 0; } const GlobalPoint& position = thisCell->getPosition(); double depth_correction = 0.; switch ( layer ) { case PFLayer::HF_EM: depth_correction = position.z() > 0. ? EM_Depth_ : -EM_Depth_; break; case PFLayer::HF_HAD: depth_correction = position.z() > 0. ? HAD_Depth_ : -HAD_Depth_; break; default: break; } unsigned id = detid; if(newDetId) id = newDetId; reco::PFRecHit *rh = new reco::PFRecHit( id, layer, energy, position.x(), position.y(), position.z()+depth_correction, 0,0,0 ); // set the corners const CaloCellGeometry::CornersVec& corners = thisCell->getCorners(); assert( corners.size() == 8 ); rh->setNECorner( corners[0].x(), corners[0].y(), corners[0].z()+depth_correction ); rh->setSECorner( corners[1].x(), corners[1].y(), corners[1].z()+depth_correction ); rh->setSWCorner( corners[2].x(), corners[2].y(), corners[2].z()+depth_correction ); rh->setNWCorner( corners[3].x(), corners[3].y(), corners[3].z()+depth_correction ); return rh; }
void PFRecHitProducerHCAL::createRecHits | ( | std::vector< reco::PFRecHit > & | rechits, |
std::vector< reco::PFRecHit > & | rechitsCleaned, | ||
edm::Event & | , | ||
const edm::EventSetup & | |||
) | [private, virtual] |
gets hcal barrel and endcap rechits, translate them to PFRecHits, which are stored in the rechits vector
Implements PFRecHitProducer.
void PFRecHitProducerHCAL::findRecHitNeighbours | ( | reco::PFRecHit & | rh, |
const std::map< unsigned, unsigned > & | sortedHits, | ||
const CaloSubdetectorTopology & | barrelTopo, | ||
const CaloSubdetectorGeometry & | barrelGeom, | ||
const CaloSubdetectorTopology & | endcapTopo, | ||
const CaloSubdetectorGeometry & | endcapGeom | ||
) | [private] |
find and set the neighbours to a given rechit this works for ecal, hcal, ps
void PFRecHitProducerHCAL::findRecHitNeighboursCT | ( | reco::PFRecHit & | rh, |
const std::map< unsigned, unsigned > & | sortedHits, | ||
const CaloSubdetectorTopology & | topology | ||
) | [private] |
find and set the neighbours to a given rechit this works for hcal CaloTowers. Should be possible to have a single function for all detectors
Definition at line 1194 of file PFRecHitProducerHCAL.cc.
References reco::PFRecHit::add4Neighbour(), reco::PFRecHit::add8Neighbour(), reco::PFRecHit::detId(), CaloSubdetectorTopology::east(), PFLayer::HF_EM, PFLayer::HF_HAD, i, reco::PFRecHit::layer(), CaloSubdetectorTopology::north(), DetId::rawId(), CaloSubdetectorTopology::south(), and CaloSubdetectorTopology::west().
{ //cout<<"------PFRecHitProducerHcaL:findRecHitNeighboursCT navigation value "<<navigation_HF_<<endl; // cout<<"----------- rechit print out"<<endl; // if(( rh.layer() == PFLayer::HF_HAD )||(rh.layer() == PFLayer::HF_EM)) { // cout<<rh<<endl; // } if(navigation_HF_ == false){ if( rh.layer() == PFLayer::HF_HAD ) return; if( rh.layer() == PFLayer::HF_EM ) return; } CaloTowerDetId ctDetId( rh.detId() ); vector<DetId> northids = topology.north(ctDetId); vector<DetId> westids = topology.west(ctDetId); vector<DetId> southids = topology.south(ctDetId); vector<DetId> eastids = topology.east(ctDetId); CaloTowerDetId badId; // all the following detids will be CaloTowerDetId CaloTowerDetId north; CaloTowerDetId northwest; CaloTowerDetId northwest2; CaloTowerDetId west; CaloTowerDetId west2; CaloTowerDetId southwest; CaloTowerDetId southwest2; CaloTowerDetId south; CaloTowerDetId southeast; CaloTowerDetId southeast2; CaloTowerDetId east; CaloTowerDetId east2; CaloTowerDetId northeast; CaloTowerDetId northeast2; // for north and south, there is no ambiguity : 1 or 0 neighbours switch( northids.size() ) { case 0: break; case 1: north = northids[0]; break; default: stringstream err("PFRecHitProducerHCAL::findRecHitNeighboursCT : incorrect number of neighbours north: "); err<<northids.size(); throw( err.str() ); } switch( southids.size() ) { case 0: break; case 1: south = southids[0]; break; default: stringstream err("PFRecHitProducerHCAL::findRecHitNeighboursCT : incorrect number of neighbours south: "); err<<southids.size(); throw( err.str() ); } // for east and west, one must take care // of the pitch change in HCAL endcap. switch( eastids.size() ) { case 0: break; case 1: east = eastids[0]; northeast = getNorth(east, topology); southeast = getSouth(east, topology); break; case 2: // in this case, 0 is more on the north than 1 east = eastids[0]; east2 = eastids[1]; northeast = getNorth(east, topology ); southeast = getSouth(east2, topology); northeast2 = getNorth(northeast, topology ); southeast2 = getSouth(southeast, topology); break; default: stringstream err("PFRecHitProducerHCAL::findRecHitNeighboursCT : incorrect number of neighbours eastids: "); err<<eastids.size(); throw( err.str() ); } switch( westids.size() ) { case 0: break; case 1: west = westids[0]; northwest = getNorth(west, topology); southwest = getSouth(west, topology); break; case 2: // in this case, 0 is more on the north than 1 west = westids[0]; west2 = westids[1]; northwest = getNorth(west, topology ); southwest = getSouth(west2, topology ); northwest2 = getNorth(northwest, topology ); southwest2 = getSouth(southwest, topology ); break; default: stringstream err("PFRecHitProducerHCAL::findRecHitNeighboursCT : incorrect number of neighbours westids: "); err<< westids.size(); throw( err.str() ); } // find and set neighbours IDH i = sortedHits.find( north.rawId() ); if(i != sortedHits.end() ) rh.add4Neighbour( i->second ); i = sortedHits.find( northeast.rawId() ); if(i != sortedHits.end() ) rh.add8Neighbour( i->second ); i = sortedHits.find( northeast2.rawId() ); if(i != sortedHits.end() ) rh.add8Neighbour( i->second ); i = sortedHits.find( south.rawId() ); if(i != sortedHits.end() ) rh.add4Neighbour( i->second ); i = sortedHits.find( southwest.rawId() ); if(i != sortedHits.end() ) rh.add8Neighbour( i->second ); i = sortedHits.find( southwest2.rawId() ); if(i != sortedHits.end() ) rh.add8Neighbour( i->second ); i = sortedHits.find( east.rawId() ); if(i != sortedHits.end() ) rh.add4Neighbour( i->second ); i = sortedHits.find( east2.rawId() ); if(i != sortedHits.end() ) rh.add4Neighbour( i->second ); i = sortedHits.find( southeast.rawId() ); if(i != sortedHits.end() ) rh.add8Neighbour( i->second ); i = sortedHits.find( southeast2.rawId() ); if(i != sortedHits.end() ) rh.add8Neighbour( i->second ); i = sortedHits.find( west.rawId() ); if(i != sortedHits.end() ) rh.add4Neighbour( i->second ); i = sortedHits.find( west2.rawId() ); if(i != sortedHits.end() ) rh.add4Neighbour( i->second ); i = sortedHits.find( northwest.rawId() ); if(i != sortedHits.end() ) rh.add8Neighbour( i->second ); i = sortedHits.find( northwest2.rawId() ); if(i != sortedHits.end() ) rh.add8Neighbour( i->second ); // cout<<"----------- rechit print out"<<endl; // if(( rh.layer() == PFLayer::HF_HAD )||(rh.layer() == PFLayer::HF_EM)) { // cout<<rh<<endl; // } }
DetId PFRecHitProducerHCAL::getNorth | ( | const DetId & | id, |
const CaloSubdetectorTopology & | topology | ||
) | [private] |
Definition at line 1397 of file PFRecHitProducerHCAL.cc.
References CaloSubdetectorTopology::north().
DetId PFRecHitProducerHCAL::getSouth | ( | const DetId & | id, |
const CaloSubdetectorTopology & | topology | ||
) | [private] |
Definition at line 1383 of file PFRecHitProducerHCAL.cc.
References CaloSubdetectorTopology::south().
bool PFRecHitProducerHCAL::applyLongShortDPG_ [private] |
Definition at line 110 of file PFRecHitProducerHCAL.h.
Referenced by PFRecHitProducerHCAL().
bool PFRecHitProducerHCAL::applyPulseDPG_ [private] |
Definition at line 120 of file PFRecHitProducerHCAL.h.
Referenced by PFRecHitProducerHCAL().
bool PFRecHitProducerHCAL::applyTimeDPG_ [private] |
Definition at line 119 of file PFRecHitProducerHCAL.h.
Referenced by PFRecHitProducerHCAL().
bool PFRecHitProducerHCAL::ECAL_Compensate_ [private] |
Definition at line 123 of file PFRecHitProducerHCAL.h.
Referenced by PFRecHitProducerHCAL().
double PFRecHitProducerHCAL::ECAL_Compensation_ [private] |
Definition at line 125 of file PFRecHitProducerHCAL.h.
Referenced by PFRecHitProducerHCAL().
unsigned int PFRecHitProducerHCAL::ECAL_Dead_Code_ [private] |
Definition at line 126 of file PFRecHitProducerHCAL.h.
Referenced by PFRecHitProducerHCAL().
double PFRecHitProducerHCAL::ECAL_Threshold_ [private] |
Definition at line 124 of file PFRecHitProducerHCAL.h.
Referenced by PFRecHitProducerHCAL().
double PFRecHitProducerHCAL::EM_Depth_ [private] |
Definition at line 129 of file PFRecHitProducerHCAL.h.
Referenced by createHcalRecHit(), and PFRecHitProducerHCAL().
double PFRecHitProducerHCAL::HAD_Depth_ [private] |
Definition at line 130 of file PFRecHitProducerHCAL.h.
Referenced by createHcalRecHit(), and PFRecHitProducerHCAL().
bool PFRecHitProducerHCAL::HCAL_Calib_ [private] |
Definition at line 96 of file PFRecHitProducerHCAL.h.
Referenced by PFRecHitProducerHCAL().
float PFRecHitProducerHCAL::HCAL_Calib_29 [private] |
Definition at line 98 of file PFRecHitProducerHCAL.h.
Referenced by PFRecHitProducerHCAL().
bool PFRecHitProducerHCAL::HF_Calib_ [private] |
Definition at line 97 of file PFRecHitProducerHCAL.h.
Referenced by PFRecHitProducerHCAL().
float PFRecHitProducerHCAL::HF_Calib_29 [private] |
Definition at line 99 of file PFRecHitProducerHCAL.h.
Referenced by PFRecHitProducerHCAL().
Definition at line 86 of file PFRecHitProducerHCAL.h.
Referenced by PFRecHitProducerHCAL().
Definition at line 84 of file PFRecHitProducerHCAL.h.
Referenced by PFRecHitProducerHCAL().
Definition at line 85 of file PFRecHitProducerHCAL.h.
Referenced by PFRecHitProducerHCAL().
double PFRecHitProducerHCAL::longFibre_Cut [private] |
Definition at line 106 of file PFRecHitProducerHCAL.h.
Referenced by PFRecHitProducerHCAL().
double PFRecHitProducerHCAL::longFibre_Fraction [private] |
Definition at line 103 of file PFRecHitProducerHCAL.h.
Referenced by PFRecHitProducerHCAL().
double PFRecHitProducerHCAL::longShortFibre_Cut [private] |
Definition at line 113 of file PFRecHitProducerHCAL.h.
Referenced by PFRecHitProducerHCAL().
double PFRecHitProducerHCAL::maxLongTiming_Cut [private] |
Definition at line 117 of file PFRecHitProducerHCAL.h.
Referenced by PFRecHitProducerHCAL().
double PFRecHitProducerHCAL::maxShortTiming_Cut [private] |
Definition at line 115 of file PFRecHitProducerHCAL.h.
Referenced by PFRecHitProducerHCAL().
double PFRecHitProducerHCAL::minLongTiming_Cut [private] |
Definition at line 116 of file PFRecHitProducerHCAL.h.
Referenced by PFRecHitProducerHCAL().
double PFRecHitProducerHCAL::minShortTiming_Cut [private] |
Definition at line 114 of file PFRecHitProducerHCAL.h.
Referenced by PFRecHitProducerHCAL().
bool PFRecHitProducerHCAL::navigation_HF_ [private] |
Definition at line 91 of file PFRecHitProducerHCAL.h.
Referenced by PFRecHitProducerHCAL().
double PFRecHitProducerHCAL::shortFibre_Cut [private] |
Definition at line 102 of file PFRecHitProducerHCAL.h.
Referenced by PFRecHitProducerHCAL().
double PFRecHitProducerHCAL::shortFibre_Fraction [private] |
Definition at line 107 of file PFRecHitProducerHCAL.h.
Referenced by PFRecHitProducerHCAL().
double PFRecHitProducerHCAL::thresh_HF_ [private] |
threshold for HF
Definition at line 89 of file PFRecHitProducerHCAL.h.
Referenced by PFRecHitProducerHCAL().
double PFRecHitProducerHCAL::weight_HFem_ [private] |
Definition at line 92 of file PFRecHitProducerHCAL.h.
Referenced by PFRecHitProducerHCAL().
double PFRecHitProducerHCAL::weight_HFhad_ [private] |
Definition at line 93 of file PFRecHitProducerHCAL.h.
Referenced by PFRecHitProducerHCAL().