49 endcapSClusterToken_ =
58 produces<reco::PreshowerClusterCollection>(preshClusterCollectionX_);
59 produces<reco::PreshowerClusterCollection>(preshClusterCollectionY_);
60 produces<reco::SuperClusterCollection>(assocSClusterCollection_);
62 float esStripECut = ps.
getParameter<
double>(
"esStripEnergyCut");
63 esPhiClusterDeltaEta_ = ps.
getParameter<
double>(
"esPhiClusterDeltaEta");
64 esPhiClusterDeltaPhi_ = ps.
getParameter<
double>(
"esPhiClusterDeltaPhi");
88 auto clusters_p1 = std::make_unique<reco::PreshowerClusterCollection>();
89 auto clusters_p2 = std::make_unique<reco::PreshowerClusterCollection>();
91 auto superclusters_p = std::make_unique<reco::SuperClusterCollection>();
94 evt.
getByToken(endcapSClusterToken_, pSuperClusters);
102 LogTrace(
"EcalClusters") <<
"PreshowerPhiClusterProducerInfo: ### Total # of preshower RecHits: " << rechits->
size();
105 std::map<DetId, EcalRecHit> rechits_map;
107 for (it = rechits->
begin(); it != rechits->
end(); it++) {
109 if (it->recoFlag() == 1 || it->recoFlag() == 14 || (it->recoFlag() <= 10 && it->recoFlag() >= 5))
112 rechits_map.insert(std::make_pair(it->id(), *it));
115 std::set<DetId> used_strips;
117 LogTrace(
"EcalClusters") <<
"PreshowerPhiClusterProducerInfo: ### rechits_map of size " << rechits_map.size()
124 reco::SuperClusterCollection::const_iterator it_super;
126 for (it_super = SClusts->begin(); it_super != SClusts->end(); ++it_super) {
133 LogTrace(
"EcalClusters") <<
" superE = " << it_super->energy() <<
" superETA = " << it_super->eta()
134 <<
" superPHI = " << it_super->phi();
147 for (; bc_iter != it_super->clustersEnd(); ++bc_iter) {
149 refPhi = (*bc_iter)->phi();
160 maxDeltaPhi += esPhiClusterDeltaPhi_;
161 minDeltaPhi -= esPhiClusterDeltaPhi_;
164 for (bc_iter = it_super->clustersBegin(); bc_iter != it_super->clustersEnd(); ++bc_iter) {
167 double X = (*bc_iter)->x();
168 double Y = (*bc_iter)->y();
169 double Z = (*bc_iter)->z();
181 if (status_p1->getStatusCode() == 1)
183 if (status_p2->getStatusCode() == 1)
185 }
else if (strip1 ==
ESDetId(0)) {
187 }
else if (strip2 ==
ESDetId(0)) {
195 strip1, &used_strips, &rechits_map, geometry_p, esPhiClusterDeltaEta_, minDeltaPhi, maxDeltaPhi);
197 clusters1.push_back(cl1);
202 strip2, &used_strips, &rechits_map, geometry_p, esPhiClusterDeltaEta_, minDeltaPhi, maxDeltaPhi);
204 clusters2.push_back(cl2);
213 LogTrace(
"EcalClusters") <<
" For SC #" << isc - 1 <<
", containing " << it_super->clustersSize()
214 <<
" basic clusters, PreshowerPhiClusterAlgo made " << clusters1.size()
215 <<
" in X plane and " << clusters2.size() <<
" in Y plane " 216 <<
" preshower clusters ";
219 if (e1 + e2 > 1.0
e-10) {
223 if (condP1 == 1 && condP2 == 1) {
224 deltaE = gamma0_ * (e1 + alpha0_ * e2);
225 }
else if (condP1 == 1 && condP2 == 0) {
226 deltaE = gamma1_ * (e1 + alpha1_ * e2);
227 }
else if (condP1 == 0 && condP2 == 1) {
228 deltaE = gamma2_ * (e1 + alpha2_ * e2);
229 }
else if (condP1 == 0 && condP2 == 0) {
230 deltaE = gamma3_ * (e1 + alpha3_ * e2);
235 float E = it_super->energy() +
deltaE;
237 LogTrace(
"EcalClusters") <<
" Creating corrected SC ";
240 sc.setPreshowerEnergyPlane1(e1 * mip_);
241 sc.setPreshowerEnergyPlane2(e2 * mip_);
242 if (condP1 == 1 && condP2 == 1)
243 sc.setPreshowerPlanesStatus(0);
244 else if (condP1 == 1 && condP2 == 0)
245 sc.setPreshowerPlanesStatus(1);
246 else if (condP1 == 0 && condP2 == 1)
247 sc.setPreshowerPlanesStatus(2);
248 else if (condP1 == 0 && condP2 == 0)
249 sc.setPreshowerPlanesStatus(3);
253 new_SC.push_back(
sc);
255 new_SC.push_back(
sc);
261 clusters_p1->assign(clusters1.begin(), clusters1.end());
262 clusters_p2->assign(clusters2.begin(), clusters2.end());
264 evt.
put(
std::move(clusters_p1), preshClusterCollectionX_);
265 evt.
put(
std::move(clusters_p2), preshClusterCollectionY_);
266 LogTrace(
"EcalClusters") <<
"Preshower clusters added to the event";
269 superclusters_p->assign(new_SC.begin(), new_SC.end());
270 evt.
put(
std::move(superclusters_p), assocSClusterCollection_);
271 LogTrace(
"EcalClusters") <<
"Corrected SClusters added to the event";
291 gamma0_ = (ESGain == 1) ? 0.02 : esEEInterCalib->
getGammaHigh0();
303 gamma3_ = (ESGain == 1) ? 0.02 : esEEInterCalib->
getGammaHigh3();
constexpr double deltaPhi(double phi1, double phi2)
T getParameter(std::string const &) const
const CaloSubdetectorGeometry * getSubdetectorGeometry(const DetId &id) const
access the subdetector geometry for the given subdetector directly
float getConstAEta1() const
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
bool getByToken(EDGetToken token, Handle< PROD > &result) const
void push_back(Ptr< T > const &iPtr)
const self & getMap() const
float getESValueLow() const
Sin< T >::type sin(const T &t)
float getConstAEta2() const
std::vector< EcalRecHit >::const_iterator const_iterator
float getGammaLow2() const
void set(const edm::EventSetup &es)
float getAlphaHigh3() const
float getGammaHigh2() const
float getConstAEta0() const
std::vector< SuperCluster > SuperClusterCollection
collection of SuperCluser objectr
void setBCRef(const CaloClusterPtr &r)
DetIds of component RecHits – now inherited from CaloCluster.
const_iterator find(uint32_t rawId) const
float energy() const
Energy. Note this is taken from the first SimTrack only.
float getConstBEta0() const
std::vector< PreshowerCluster > PreshowerClusterCollection
collection of PreshowerCluster objects
double energy() const
cluster energy
float getConstBEta2() const
float getConstAEta3() const
float getGammaHigh3() const
float theta() const
Momentum polar angle. Note this is taken from the first SimTrack only.
float getConstBEta1() const
float getGammaHigh1() const
const_iterator end() const
void produce(edm::Event &evt, const edm::EventSetup &es) override
~PreshowerPhiClusterProducer() override
T const * product() const
float getAlphaHigh0() const
float getAlphaLow3() const
float getAlphaHigh2() const
float getAlphaLow2() const
std::vector< Item >::const_iterator const_iterator
float getGammaLow1() const
float getAlphaHigh1() const
float getConstBEta3() const
float getGammaHigh0() const
float getAlphaLow1() const
float getESValueHigh() const
PreshowerPhiClusterProducer(const edm::ParameterSet &ps)
*vegas h *****************************************************used in the default bin number in original ***version of VEGAS is ***a higher bin number might help to derive a more precise ***grade subtle point
float getAlphaLow0() const
const_iterator begin() const