CMS 3D CMS Logo

List of all members | Public Member Functions | Private Member Functions | Private Attributes
PiZeroAnalyzer Class Reference

EgammaCoreTools. More...

#include <PiZeroAnalyzer.h>

Inheritance diagram for PiZeroAnalyzer:
DQMEDAnalyzer edm::one::EDProducer< edm::EndRunProducer, edm::one::WatchRuns, edm::EndLuminosityBlockProducer, edm::one::WatchLuminosityBlocks, edm::Accumulator > edm::one::EDProducerBase edm::ProducerBase edm::EDConsumerBase edm::ProductRegistryHelper

Public Member Functions

void analyze (const edm::Event &, const edm::EventSetup &) override
 
void bookHistograms (DQMStore::IBooker &, edm::Run const &, edm::EventSetup const &) override
 
 PiZeroAnalyzer (const edm::ParameterSet &)
 
 ~PiZeroAnalyzer () override
 
- Public Member Functions inherited from DQMEDAnalyzer
void accumulate (edm::Event const &event, edm::EventSetup const &setup) final
 
virtual void analyze (edm::Event const &, edm::EventSetup const &)
 
void beginLuminosityBlock (edm::LuminosityBlock const &lumi, edm::EventSetup const &setup) final
 
void beginRun (edm::Run const &run, edm::EventSetup const &setup) final
 
virtual void dqmBeginLuminosityBlock (edm::LuminosityBlock const &, edm::EventSetup const &)
 
virtual void dqmBeginRun (edm::Run const &, edm::EventSetup const &)
 
 DQMEDAnalyzer ()
 
virtual void dqmEndLuminosityBlock (edm::LuminosityBlock const &, edm::EventSetup const &)
 
virtual void dqmEndRun (edm::Run const &, edm::EventSetup const &)
 
void endLuminosityBlock (edm::LuminosityBlock const &, edm::EventSetup const &) final
 
void endLuminosityBlockProduce (edm::LuminosityBlock &lumi, edm::EventSetup const &setup) final
 
void endRun (edm::Run const &, edm::EventSetup const &) final
 
void endRunProduce (edm::Run &run, edm::EventSetup const &setup) final
 
virtual bool getCanSaveByLumi ()
 
- Public Member Functions inherited from edm::one::EDProducer< edm::EndRunProducer, edm::one::WatchRuns, edm::EndLuminosityBlockProducer, edm::one::WatchLuminosityBlocks, edm::Accumulator >
 EDProducer ()=default
 
SerialTaskQueueglobalLuminosityBlocksQueue () final
 
SerialTaskQueueglobalRunsQueue () final
 
bool hasAbilityToProduceInBeginLumis () const final
 
bool hasAbilityToProduceInBeginRuns () const final
 
bool hasAbilityToProduceInEndLumis () const final
 
bool hasAbilityToProduceInEndRuns () const final
 
bool wantsGlobalLuminosityBlocks () const final
 
bool wantsGlobalRuns () const final
 
- Public Member Functions inherited from edm::one::EDProducerBase
 EDProducerBase ()
 
ModuleDescription const & moduleDescription () const
 
bool wantsStreamLuminosityBlocks () const
 
bool wantsStreamRuns () const
 
 ~EDProducerBase () override
 
- Public Member Functions inherited from edm::ProducerBase
void callWhenNewProductsRegistered (std::function< void(BranchDescription const &)> const &func)
 
std::vector< edm::ProductResolverIndex > const & indiciesForPutProducts (BranchType iBranchType) const
 
 ProducerBase ()
 
std::vector< edm::ProductResolverIndex > const & putTokenIndexToProductResolverIndex () const
 
void registerProducts (ProducerBase *, ProductRegistry *, ModuleDescription const &)
 
std::function< void(BranchDescription const &)> registrationCallback () const
 used by the fwk to register list of products More...
 
void resolvePutIndicies (BranchType iBranchType, ModuleToResolverIndicies const &iIndicies, std::string const &moduleLabel)
 
 ~ProducerBase () noexcept(false) override
 
- Public Member Functions inherited from edm::EDConsumerBase
std::vector< ConsumesInfoconsumesInfo () const
 
void convertCurrentProcessAlias (std::string const &processName)
 Convert "@currentProcess" in InputTag process names to the actual current process name. More...
 
 EDConsumerBase ()
 
 EDConsumerBase (EDConsumerBase const &)=delete
 
 EDConsumerBase (EDConsumerBase &&)=default
 
ESProxyIndex const * esGetTokenIndices (edm::Transition iTrans) const
 
ProductResolverIndexAndSkipBit indexFrom (EDGetToken, BranchType, TypeID const &) const
 
void itemsMayGet (BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
 
void itemsToGet (BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
 
std::vector< ProductResolverIndexAndSkipBit > const & itemsToGetFrom (BranchType iType) const
 
void labelsForToken (EDGetToken iToken, Labels &oLabels) const
 
void modulesWhoseProductsAreConsumed (std::vector< ModuleDescription const * > &modules, ProductRegistry const &preg, std::map< std::string, ModuleDescription const * > const &labelsToDesc, std::string const &processName) const
 
EDConsumerBase const & operator= (EDConsumerBase const &)=delete
 
EDConsumerBaseoperator= (EDConsumerBase &&)=default
 
bool registeredToConsume (ProductResolverIndex, bool, BranchType) const
 
bool registeredToConsumeMany (TypeID const &, BranchType) const
 
ProductResolverIndexAndSkipBit uncheckedIndexFrom (EDGetToken) const
 
void updateLookup (BranchType iBranchType, ProductResolverIndexHelper const &, bool iPrefetchMayGet)
 
void updateLookup (eventsetup::ESRecordsToProxyIndices const &)
 
virtual ~EDConsumerBase () noexcept(false)
 

Private Member Functions

void makePizero (const edm::EventSetup &es, const edm::Handle< EcalRecHitCollection > eb, const edm::Handle< EcalRecHitCollection > ee)
 

Private Attributes

edm::EDGetTokenT< edm::SortedCollection< EcalRecHit, edm::StrictWeakOrdering< EcalRecHit > > > barrelEcalHits_token_
 
int clusEtaSize_
 
int clusPhiSize_
 
double clusSeedThr_
 parameters needed for pizero finding More...
 
std::stringstream currentFolder_
 
double cutStep_
 
edm::EDGetTokenT< edm::SortedCollection< EcalRecHit, edm::StrictWeakOrdering< EcalRecHit > > > endcapEcalHits_token_
 
std::string fName_
 
MonitorElementhIsoPi0EB_
 
MonitorElementhMinvPi0EB_
 
MonitorElementhPt1Pi0EB_
 
MonitorElementhPt2Pi0EB_
 
MonitorElementhPtPi0EB_
 
double minPhoEtCut_
 
int nEvt_
 
int numberOfSteps_
 
bool ParameterLogWeighted_
 
double ParameterT0_barl_
 
double ParameterW0_
 
double ParameterX0_
 
edm::ParameterSet posCalcParameters_
 
unsigned int prescaleFactor_
 
double seleMinvMaxPi0_
 
double seleMinvMinPi0_
 
double selePi0BeltDeta_
 
double selePi0BeltDR_
 
double selePi0Iso_
 
double selePtGammaOne_
 
double selePtGammaTwo_
 
double selePtPi0_
 
double seleS4S9GammaOne_
 
double seleS4S9GammaTwo_
 
double seleXtalMinEnergy_
 

Additional Inherited Members

- Public Types inherited from DQMEDAnalyzer
typedef dqm::reco::DQMStore DQMStore
 
typedef dqm::reco::MonitorElement MonitorElement
 
- Public Types inherited from edm::one::EDProducerBase
typedef EDProducerBase ModuleType
 
- Public Types inherited from edm::ProducerBase
using ModuleToResolverIndicies = std::unordered_multimap< std::string, std::tuple< edm::TypeID const *, const char *, edm::ProductResolverIndex >>
 
typedef ProductRegistryHelper::TypeLabelList TypeLabelList
 
- Public Types inherited from edm::EDConsumerBase
typedef ProductLabels Labels
 
- Static Public Member Functions inherited from edm::one::EDProducerBase
static const std::string & baseType ()
 
static void fillDescriptions (ConfigurationDescriptions &descriptions)
 
static void prevalidate (ConfigurationDescriptions &descriptions)
 
- Protected Member Functions inherited from edm::ProducerBase
ProducesCollector producesCollector ()
 
- Protected Member Functions inherited from edm::EDConsumerBase
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > consumes (edm::InputTag const &tag)
 
EDGetToken consumes (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken consumes (TypeToGet const &id, edm::InputTag const &tag)
 
ConsumesCollector consumesCollector ()
 Use a ConsumesCollector to gather consumes information from helper functions. More...
 
template<typename ProductType , BranchType B = InEvent>
void consumesMany ()
 
void consumesMany (const TypeToGet &id)
 
template<BranchType B>
void consumesMany (const TypeToGet &id)
 
template<typename ESProduct , typename ESRecord , Transition Tr = Transition::Event>
auto esConsumes ()
 
template<typename ESProduct , typename ESRecord , Transition Tr = Transition::Event>
auto esConsumes (ESInputTag const &tag)
 
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > mayConsume (edm::InputTag const &tag)
 
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 
- Protected Attributes inherited from DQMEDAnalyzer
edm::EDPutTokenT< DQMTokenlumiToken_
 
edm::EDPutTokenT< DQMTokenrunToken_
 

Detailed Description

EgammaCoreTools.

$Id: PiZeroAnalyzer authors: Nancy Marinelli, U. of Notre Dame, US Jamie Antonelli, U. of Notre Dame, US

Definition at line 75 of file PiZeroAnalyzer.h.

Constructor & Destructor Documentation

PiZeroAnalyzer::PiZeroAnalyzer ( const edm::ParameterSet pset)
explicit

Definition at line 20 of file PiZeroAnalyzer.cc.

References edm::ParameterSet::getParameter(), edm::ParameterSet::getUntrackedParameter(), and AlCaHLTBitMon_QueryRunRegistry::string.

20  {
22  prescaleFactor_ = pset.getUntrackedParameter<int>("prescaleFactor", 1);
23 
24  barrelEcalHits_token_ = consumes<edm::SortedCollection<EcalRecHit, edm::StrictWeakOrdering<EcalRecHit> > >(
25  pset.getParameter<edm::InputTag>("barrelEcalHits"));
26  endcapEcalHits_token_ = consumes<edm::SortedCollection<EcalRecHit, edm::StrictWeakOrdering<EcalRecHit> > >(
27  pset.getParameter<edm::InputTag>("endcapEcalHits"));
28 
29  nEvt_ = 0;
30 
31  // parameters for Pizero finding
32  seleXtalMinEnergy_ = pset.getParameter<double>("seleXtalMinEnergy");
33  clusSeedThr_ = pset.getParameter<double>("clusSeedThr");
34  clusEtaSize_ = pset.getParameter<int>("clusEtaSize");
35  clusPhiSize_ = pset.getParameter<int>("clusPhiSize");
36  ParameterLogWeighted_ = pset.getParameter<bool>("ParameterLogWeighted");
37  ParameterX0_ = pset.getParameter<double>("ParameterX0");
38  ParameterT0_barl_ = pset.getParameter<double>("ParameterT0_barl");
39  ParameterW0_ = pset.getParameter<double>("ParameterW0");
40 
41  selePtGammaOne_ = pset.getParameter<double>("selePtGammaOne");
42  selePtGammaTwo_ = pset.getParameter<double>("selePtGammaTwo");
43  seleS4S9GammaOne_ = pset.getParameter<double>("seleS4S9GammaOne");
44  seleS4S9GammaTwo_ = pset.getParameter<double>("seleS4S9GammaTwo");
45  selePtPi0_ = pset.getParameter<double>("selePtPi0");
46  selePi0Iso_ = pset.getParameter<double>("selePi0Iso");
47  selePi0BeltDR_ = pset.getParameter<double>("selePi0BeltDR");
48  selePi0BeltDeta_ = pset.getParameter<double>("selePi0BeltDeta");
49  seleMinvMaxPi0_ = pset.getParameter<double>("seleMinvMaxPi0");
50  seleMinvMinPi0_ = pset.getParameter<double>("seleMinvMinPi0");
51 
52  posCalcParameters_ = pset.getParameter<edm::ParameterSet>("posCalcParameters");
53 }
T getParameter(std::string const &) const
double clusSeedThr_
parameters needed for pizero finding
T getUntrackedParameter(std::string const &, T const &) const
double selePi0BeltDeta_
bool ParameterLogWeighted_
edm::EDGetTokenT< edm::SortedCollection< EcalRecHit, edm::StrictWeakOrdering< EcalRecHit > > > barrelEcalHits_token_
double seleS4S9GammaOne_
double seleS4S9GammaTwo_
edm::ParameterSet posCalcParameters_
double ParameterT0_barl_
double seleMinvMaxPi0_
edm::EDGetTokenT< edm::SortedCollection< EcalRecHit, edm::StrictWeakOrdering< EcalRecHit > > > endcapEcalHits_token_
double selePtGammaOne_
double selePtGammaTwo_
unsigned int prescaleFactor_
std::string fName_
double seleXtalMinEnergy_
double seleMinvMinPi0_
PiZeroAnalyzer::~PiZeroAnalyzer ( )
override

Definition at line 55 of file PiZeroAnalyzer.cc.

55 {}

Member Function Documentation

void PiZeroAnalyzer::analyze ( const edm::Event e,
const edm::EventSetup esup 
)
override

Definition at line 80 of file PiZeroAnalyzer.cc.

References HLT_2018_cff::barrelRecHits, HLT_2018_cff::endcapRecHits, edm::Event::getByToken(), edm::EventBase::id(), and edm::HandleBase::isValid().

80  {
81  using namespace edm;
82 
83  if (nEvt_ % prescaleFactor_)
84  return;
85  nEvt_++;
86  LogInfo("PiZeroAnalyzer") << "PiZeroAnalyzer Analyzing event number: " << e.id() << " Global Counter " << nEvt_
87  << "\n";
88 
89  // Get EcalRecHits
90  bool validEcalRecHits = true;
91  Handle<EcalRecHitCollection> barrelHitHandle;
93  e.getByToken(barrelEcalHits_token_, barrelHitHandle);
94  if (!barrelHitHandle.isValid()) {
95  edm::LogError("PhotonProducer") << "Error! Can't get the product: barrelEcalHits_token_";
96  validEcalRecHits = false;
97  }
98 
99  Handle<EcalRecHitCollection> endcapHitHandle;
100  e.getByToken(endcapEcalHits_token_, endcapHitHandle);
102  if (!endcapHitHandle.isValid()) {
103  edm::LogError("PhotonProducer") << "Error! Can't get the product: endcapEcalHits_token_";
104  validEcalRecHits = false;
105  }
106 
107  if (validEcalRecHits)
108  makePizero(esup, barrelHitHandle, endcapHitHandle);
109 }
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:525
edm::EDGetTokenT< edm::SortedCollection< EcalRecHit, edm::StrictWeakOrdering< EcalRecHit > > > barrelEcalHits_token_
void makePizero(const edm::EventSetup &es, const edm::Handle< EcalRecHitCollection > eb, const edm::Handle< EcalRecHitCollection > ee)
edm::EDGetTokenT< edm::SortedCollection< EcalRecHit, edm::StrictWeakOrdering< EcalRecHit > > > endcapEcalHits_token_
bool isValid() const
Definition: HandleBase.h:70
unsigned int prescaleFactor_
edm::EventID id() const
Definition: EventBase.h:59
HLT enums.
void PiZeroAnalyzer::bookHistograms ( DQMStore::IBooker ibooker,
edm::Run const &  ,
edm::EventSetup const &   
)
overridevirtual

Implements DQMEDAnalyzer.

Definition at line 57 of file PiZeroAnalyzer.cc.

References dqm::dqmstoreimpl::DQMStore::IBooker::book1D(), dqm::impl::MonitorElement::setAxisTitle(), and dqm::dqmstoreimpl::DQMStore::IBooker::setCurrentFolder().

59  {
60  currentFolder_.str("");
61  currentFolder_ << "Egamma/PiZeroAnalyzer/";
62  ibooker.setCurrentFolder(currentFolder_.str());
63 
64  hMinvPi0EB_ = ibooker.book1D("Pi0InvmassEB", "Pi0 Invariant Mass in EB", 100, 0., 0.5);
65  hMinvPi0EB_->setAxisTitle("Inv Mass [GeV] ", 1);
66 
67  hPt1Pi0EB_ = ibooker.book1D("Pt1Pi0EB", "Pt 1st most energetic Pi0 photon in EB", 100, 0., 20.);
68  hPt1Pi0EB_->setAxisTitle("1st photon Pt [GeV] ", 1);
69 
70  hPt2Pi0EB_ = ibooker.book1D("Pt2Pi0EB", "Pt 2nd most energetic Pi0 photon in EB", 100, 0., 20.);
71  hPt2Pi0EB_->setAxisTitle("2nd photon Pt [GeV] ", 1);
72 
73  hPtPi0EB_ = ibooker.book1D("PtPi0EB", "Pi0 Pt in EB", 100, 0., 20.);
74  hPtPi0EB_->setAxisTitle("Pi0 Pt [GeV] ", 1);
75 
76  hIsoPi0EB_ = ibooker.book1D("IsoPi0EB", "Pi0 Iso in EB", 50, 0., 1.);
77  hIsoPi0EB_->setAxisTitle("Pi0 Iso", 1);
78 }
MonitorElement * hIsoPi0EB_
MonitorElement * hPtPi0EB_
MonitorElement * hMinvPi0EB_
std::stringstream currentFolder_
MonitorElement * hPt2Pi0EB_
MonitorElement * hPt1Pi0EB_
virtual void setAxisTitle(const std::string &title, int axis=1)
set x-, y- or z-axis title (axis=1, 2, 3 respectively)
void PiZeroAnalyzer::makePizero ( const edm::EventSetup es,
const edm::Handle< EcalRecHitCollection eb,
const edm::Handle< EcalRecHitCollection ee 
)
private

Definition at line 111 of file PiZeroAnalyzer.cc.

References edm::SortedCollection< T, SORT >::begin(), PositionCalc::Calculate_Location(), funct::cos(), gather_cfg::cout, DetId::Ecal, EcalBarrel, EcalPreshower, edm::SortedCollection< T, SORT >::end(), HCALHighEnergyHPDFilter_cfi::energy, JetChargeProducer_cfi::exp, edm::EventSetup::get(), CaloGeometry::getSubdetectorGeometry(), CaloTopology::getSubdetectorTopology(), CaloSubdetectorTopology::getWindow(), mps_fire::i, triggerObjects_cff::id, EBDetId::ieta(), LEDCalibrationChannels::ieta, EBDetId::iphi(), LEDCalibrationChannels::iphi, dqmiolumiharvest::j, dqmdumpme::k, edm::Handle< T >::product(), funct::sin(), and mathSSE::sqrt().

113  {
114  const EcalRecHitCollection* hitCollection_p = rhEB.product();
115 
116  edm::ESHandle<CaloGeometry> geoHandle;
117  es.get<CaloGeometryRecord>().get(geoHandle);
118 
119  edm::ESHandle<CaloTopology> theCaloTopology;
120  es.get<CaloTopologyRecord>().get(theCaloTopology);
121 
122  const CaloSubdetectorTopology* topology_p;
123  const CaloSubdetectorGeometry* geometry_p = geoHandle->getSubdetectorGeometry(DetId::Ecal, EcalBarrel);
124  const CaloSubdetectorGeometry* geometryES_p = geoHandle->getSubdetectorGeometry(DetId::Ecal, EcalPreshower);
125 
126  // Parameters for the position calculation:
127  PositionCalc posCalculator_ = PositionCalc(posCalcParameters_);
128  //
129  std::map<DetId, EcalRecHit> recHitsEB_map;
130  //
131  std::vector<EcalRecHit> seeds;
132 
133  seeds.clear();
134  //
135  vector<EBDetId> usedXtals;
136  usedXtals.clear();
137  //
139  //
140  static const int MAXCLUS = 2000;
141  int nClus = 0;
142  vector<float> eClus;
143  vector<float> etClus;
144  vector<float> etaClus;
145  vector<float> phiClus;
146  vector<EBDetId> max_hit;
147  vector<vector<EcalRecHit> > RecHitsCluster;
148  vector<float> s4s9Clus;
149 
150  // find cluster seeds in EB
151  for (itb = rhEB->begin(); itb != rhEB->end(); ++itb) {
152  EBDetId id(itb->id());
153  double energy = itb->energy();
154  if (energy > seleXtalMinEnergy_) {
155  std::pair<DetId, EcalRecHit> map_entry(itb->id(), *itb);
156  recHitsEB_map.insert(map_entry);
157  }
158  if (energy > clusSeedThr_)
159  seeds.push_back(*itb);
160  } // Eb rechits
161 
162  sort(seeds.begin(), seeds.end(), [](auto& x, auto& y) { return (x.energy() > y.energy()); });
163  for (std::vector<EcalRecHit>::iterator itseed = seeds.begin(); itseed != seeds.end(); itseed++) {
164  EBDetId seed_id = itseed->id();
165  std::vector<EBDetId>::const_iterator usedIds;
166 
167  bool seedAlreadyUsed = false;
168  for (usedIds = usedXtals.begin(); usedIds != usedXtals.end(); usedIds++) {
169  if (*usedIds == seed_id) {
170  seedAlreadyUsed = true;
171  //cout<< " Seed with energy "<<itseed->energy()<<" was used !"<<endl;
172  break;
173  }
174  }
175  if (seedAlreadyUsed)
176  continue;
177  topology_p = theCaloTopology->getSubdetectorTopology(DetId::Ecal, EcalBarrel);
178  std::vector<DetId> clus_v = topology_p->getWindow(seed_id, clusEtaSize_, clusPhiSize_);
179  //std::vector<DetId> clus_used;
180  std::vector<std::pair<DetId, float> > clus_used;
181 
182  vector<EcalRecHit> RecHitsInWindow;
183 
184  double simple_energy = 0;
185 
186  for (std::vector<DetId>::iterator det = clus_v.begin(); det != clus_v.end(); det++) {
187  // EBDetId EBdet = *det;
188  // cout<<" det "<< EBdet<<" ieta "<<EBdet.ieta()<<" iphi "<<EBdet.iphi()<<endl;
189  bool HitAlreadyUsed = false;
190  for (usedIds = usedXtals.begin(); usedIds != usedXtals.end(); usedIds++) {
191  if (*usedIds == *det) {
192  HitAlreadyUsed = true;
193  break;
194  }
195  }
196  if (HitAlreadyUsed)
197  continue;
198  if (recHitsEB_map.find(*det) != recHitsEB_map.end()) {
199  // cout<<" Used det "<< EBdet<<endl;
200  std::map<DetId, EcalRecHit>::iterator aHit;
201  aHit = recHitsEB_map.find(*det);
202  usedXtals.push_back(*det);
203  RecHitsInWindow.push_back(aHit->second);
204  clus_used.push_back(std::pair<DetId, float>(*det, 1.));
205  simple_energy = simple_energy + aHit->second.energy();
206  }
207  }
208 
209  math::XYZPoint clus_pos = posCalculator_.Calculate_Location(clus_used, hitCollection_p, geometry_p, geometryES_p);
210  float theta_s = 2. * atan(exp(-clus_pos.eta()));
211  float p0x_s = simple_energy * sin(theta_s) * cos(clus_pos.phi());
212  float p0y_s = simple_energy * sin(theta_s) * sin(clus_pos.phi());
213  // float p0z_s = simple_energy * cos(theta_s);
214  float et_s = sqrt(p0x_s * p0x_s + p0y_s * p0y_s);
215 
216  //cout << " Simple Clustering: E,Et,px,py,pz: "<<simple_energy<<" "<<et_s<<" "<<p0x_s<<" "<<p0y_s<<" "<<endl;
217 
218  eClus.push_back(simple_energy);
219  etClus.push_back(et_s);
220  etaClus.push_back(clus_pos.eta());
221  phiClus.push_back(clus_pos.phi());
222  max_hit.push_back(seed_id);
223  RecHitsCluster.push_back(RecHitsInWindow);
224  //Compute S4/S9 variable
225  //We are not sure to have 9 RecHits so need to check eta and phi:
226  float s4s9_[4];
227  for (int i = 0; i < 4; i++)
228  s4s9_[i] = itseed->energy();
229  for (unsigned int j = 0; j < RecHitsInWindow.size(); j++) {
230  //cout << " Simple cluster rh, ieta, iphi : "<<((EBDetId)RecHitsInWindow[j].id()).ieta()<<" "<<((EBDetId)RecHitsInWindow[j].id()).iphi()<<endl;
231  if ((((EBDetId)RecHitsInWindow[j].id()).ieta() == seed_id.ieta() - 1 && seed_id.ieta() != 1) ||
232  (seed_id.ieta() == 1 && (((EBDetId)RecHitsInWindow[j].id()).ieta() == seed_id.ieta() - 2))) {
233  if (((EBDetId)RecHitsInWindow[j].id()).iphi() == seed_id.iphi() - 1 ||
234  ((EBDetId)RecHitsInWindow[j].id()).iphi() - 360 == seed_id.iphi() - 1) {
235  s4s9_[0] += RecHitsInWindow[j].energy();
236  } else {
237  if (((EBDetId)RecHitsInWindow[j].id()).iphi() == seed_id.iphi()) {
238  s4s9_[0] += RecHitsInWindow[j].energy();
239  s4s9_[1] += RecHitsInWindow[j].energy();
240  } else {
241  if (((EBDetId)RecHitsInWindow[j].id()).iphi() == seed_id.iphi() + 1 ||
242  ((EBDetId)RecHitsInWindow[j].id()).iphi() - 360 == seed_id.iphi() + 1) {
243  s4s9_[1] += RecHitsInWindow[j].energy();
244  }
245  }
246  }
247  } else {
248  if (((EBDetId)RecHitsInWindow[j].id()).ieta() == seed_id.ieta()) {
249  if (((EBDetId)RecHitsInWindow[j].id()).iphi() == seed_id.iphi() - 1 ||
250  ((EBDetId)RecHitsInWindow[j].id()).iphi() - 360 == seed_id.iphi() - 1) {
251  s4s9_[0] += RecHitsInWindow[j].energy();
252  s4s9_[3] += RecHitsInWindow[j].energy();
253  } else {
254  if (((EBDetId)RecHitsInWindow[j].id()).iphi() == seed_id.iphi() + 1 ||
255  ((EBDetId)RecHitsInWindow[j].id()).iphi() - 360 == seed_id.iphi() + 1) {
256  s4s9_[1] += RecHitsInWindow[j].energy();
257  s4s9_[2] += RecHitsInWindow[j].energy();
258  }
259  }
260  } else {
261  if ((((EBDetId)RecHitsInWindow[j].id()).ieta() == seed_id.ieta() + 1 && seed_id.ieta() != -1) ||
262  (seed_id.ieta() == -1 && (((EBDetId)RecHitsInWindow[j].id()).ieta() == seed_id.ieta() + 2))) {
263  if (((EBDetId)RecHitsInWindow[j].id()).iphi() == seed_id.iphi() - 1 ||
264  ((EBDetId)RecHitsInWindow[j].id()).iphi() - 360 == seed_id.iphi() - 1) {
265  s4s9_[3] += RecHitsInWindow[j].energy();
266  } else {
267  if (((EBDetId)RecHitsInWindow[j].id()).iphi() == seed_id.iphi()) {
268  s4s9_[2] += RecHitsInWindow[j].energy();
269  s4s9_[3] += RecHitsInWindow[j].energy();
270  } else {
271  if (((EBDetId)RecHitsInWindow[j].id()).iphi() == seed_id.iphi() + 1 ||
272  ((EBDetId)RecHitsInWindow[j].id()).iphi() - 360 == seed_id.iphi() + 1) {
273  s4s9_[2] += RecHitsInWindow[j].energy();
274  }
275  }
276  }
277  } else {
278  cout << " (EBDetId)RecHitsInWindow[j].id()).ieta() " << ((EBDetId)RecHitsInWindow[j].id()).ieta()
279  << " seed_id.ieta() " << seed_id.ieta() << endl;
280  cout << " Problem with S4 calculation " << endl;
281  return;
282  }
283  }
284  }
285  }
286  s4s9Clus.push_back(*max_element(s4s9_, s4s9_ + 4) / simple_energy);
287  // cout<<" s4s9Clus[0] "<<s4s9_[0]/simple_energy<<" s4s9Clus[1] "<<s4s9_[1]/simple_energy<<" s4s9Clus[2] "<<s4s9_[2]/simple_energy<<" s4s9Clus[3] "<<s4s9_[3]/simple_energy<<endl;
288  // cout<<" Max "<<*max_element( s4s9_,s4s9_+4)/simple_energy<<endl;
289  nClus++;
290  if (nClus == MAXCLUS)
291  return;
292  } // End loop over seed clusters
293 
294  // cout<< " Pi0 clusters: "<<nClus<<endl;
295 
296  // Selection, based on Simple clustering
297  //pi0 candidates
298  static const int MAXPI0S = 200;
299  int npi0_s = 0;
300 
301  vector<EBDetId> scXtals;
302  scXtals.clear();
303 
304  if (nClus <= 1)
305  return;
306  for (Int_t i = 0; i < nClus; i++) {
307  for (Int_t j = i + 1; j < nClus; j++) {
308  // cout<<" i "<<i<<" etClus[i] "<<etClus[i]<<" j "<<j<<" etClus[j] "<<etClus[j]<<endl;
309  if (etClus[i] > selePtGammaOne_ && etClus[j] > selePtGammaTwo_ && s4s9Clus[i] > seleS4S9GammaOne_ &&
310  s4s9Clus[j] > seleS4S9GammaTwo_) {
311  float theta_0 = 2. * atan(exp(-etaClus[i]));
312  float theta_1 = 2. * atan(exp(-etaClus[j]));
313 
314  float p0x = eClus[i] * sin(theta_0) * cos(phiClus[i]);
315  float p1x = eClus[j] * sin(theta_1) * cos(phiClus[j]);
316  float p0y = eClus[i] * sin(theta_0) * sin(phiClus[i]);
317  float p1y = eClus[j] * sin(theta_1) * sin(phiClus[j]);
318  float p0z = eClus[i] * cos(theta_0);
319  float p1z = eClus[j] * cos(theta_1);
320 
321  float pt_pi0 = sqrt((p0x + p1x) * (p0x + p1x) + (p0y + p1y) * (p0y + p1y));
322  // cout<<" pt_pi0 "<<pt_pi0<<endl;
323  if (pt_pi0 < selePtPi0_)
324  continue;
325  float m_inv = sqrt((eClus[i] + eClus[j]) * (eClus[i] + eClus[j]) - (p0x + p1x) * (p0x + p1x) -
326  (p0y + p1y) * (p0y + p1y) - (p0z + p1z) * (p0z + p1z));
327  if ((m_inv < seleMinvMaxPi0_) && (m_inv > seleMinvMinPi0_)) {
328  //New Loop on cluster to measure isolation:
329  vector<int> IsoClus;
330  IsoClus.clear();
331  float Iso = 0;
332  TVector3 pi0vect = TVector3((p0x + p1x), (p0y + p1y), (p0z + p1z));
333  for (Int_t k = 0; k < nClus; k++) {
334  if (k == i || k == j)
335  continue;
336  TVector3 Clusvect = TVector3(eClus[k] * sin(2. * atan(exp(-etaClus[k]))) * cos(phiClus[k]),
337  eClus[k] * sin(2. * atan(exp(-etaClus[k]))) * sin(phiClus[k]),
338  eClus[k] * cos(2. * atan(exp(-etaClus[k]))));
339  float dretaclpi0 = fabs(etaClus[k] - pi0vect.Eta());
340  float drclpi0 = Clusvect.DeltaR(pi0vect);
341 
342  if ((drclpi0 < selePi0BeltDR_) && (dretaclpi0 < selePi0BeltDeta_)) {
343  Iso = Iso + etClus[k];
344  IsoClus.push_back(k);
345  }
346  }
347 
348  if (Iso / pt_pi0 < selePi0Iso_) {
349  hMinvPi0EB_->Fill(m_inv);
350  hPt1Pi0EB_->Fill(etClus[i]);
351  hPt2Pi0EB_->Fill(etClus[j]);
352  hPtPi0EB_->Fill(pt_pi0);
353  hIsoPi0EB_->Fill(Iso / pt_pi0);
354 
355  npi0_s++;
356  }
357 
358  if (npi0_s == MAXPI0S)
359  return;
360  }
361  }
362  }
363  }
364 }
const CaloSubdetectorGeometry * getSubdetectorGeometry(const DetId &id) const
access the subdetector geometry for the given subdetector directly
Definition: CaloGeometry.cc:34
double clusSeedThr_
parameters needed for pizero finding
double selePi0BeltDeta_
MonitorElement * hIsoPi0EB_
Sin< T >::type sin(const T &t)
Definition: Sin.h:22
MonitorElement * hPtPi0EB_
MonitorElement * hMinvPi0EB_
std::vector< EcalRecHit >::const_iterator const_iterator
double seleS4S9GammaOne_
double seleS4S9GammaTwo_
edm::ParameterSet posCalcParameters_
int iphi() const
get the crystal iphi
Definition: EBDetId.h:51
void Fill(long long x)
double seleMinvMaxPi0_
T sqrt(T t)
Definition: SSEVec.h:19
Cos< T >::type cos(const T &t)
Definition: Cos.h:22
double selePtGammaOne_
double selePtGammaTwo_
int ieta() const
get the crystal ieta
Definition: EBDetId.h:49
virtual std::vector< DetId > getWindow(const DetId &id, const int &northSouthSize, const int &eastWestSize) const
XYZPointD XYZPoint
point in space with cartesian internal representation
Definition: Point3D.h:12
const CaloSubdetectorTopology * getSubdetectorTopology(const DetId &id) const
access the subdetector Topology for the given subdetector directly
Definition: CaloTopology.cc:17
math::XYZPoint Calculate_Location(const HitsAndFractions &iDetIds, const edm::SortedCollection< HitType > *iRecHits, const CaloSubdetectorGeometry *iSubGeom, const CaloSubdetectorGeometry *iESGeom=0)
Definition: PositionCalc.h:65
T get() const
Definition: EventSetup.h:73
MonitorElement * hPt2Pi0EB_
MonitorElement * hPt1Pi0EB_
double seleXtalMinEnergy_
double seleMinvMinPi0_

Member Data Documentation

edm::EDGetTokenT<edm::SortedCollection<EcalRecHit, edm::StrictWeakOrdering<EcalRecHit> > > PiZeroAnalyzer::barrelEcalHits_token_
private

Definition at line 94 of file PiZeroAnalyzer.h.

int PiZeroAnalyzer::clusEtaSize_
private

Definition at line 103 of file PiZeroAnalyzer.h.

int PiZeroAnalyzer::clusPhiSize_
private

Definition at line 104 of file PiZeroAnalyzer.h.

double PiZeroAnalyzer::clusSeedThr_
private

parameters needed for pizero finding

Definition at line 102 of file PiZeroAnalyzer.h.

std::stringstream PiZeroAnalyzer::currentFolder_
private

Definition at line 124 of file PiZeroAnalyzer.h.

double PiZeroAnalyzer::cutStep_
private

Definition at line 98 of file PiZeroAnalyzer.h.

edm::EDGetTokenT<edm::SortedCollection<EcalRecHit, edm::StrictWeakOrdering<EcalRecHit> > > PiZeroAnalyzer::endcapEcalHits_token_
private

Definition at line 95 of file PiZeroAnalyzer.h.

std::string PiZeroAnalyzer::fName_
private

Definition at line 87 of file PiZeroAnalyzer.h.

MonitorElement* PiZeroAnalyzer::hIsoPi0EB_
private

Definition at line 129 of file PiZeroAnalyzer.h.

MonitorElement* PiZeroAnalyzer::hMinvPi0EB_
private

Definition at line 126 of file PiZeroAnalyzer.h.

MonitorElement* PiZeroAnalyzer::hPt1Pi0EB_
private

Definition at line 127 of file PiZeroAnalyzer.h.

MonitorElement* PiZeroAnalyzer::hPt2Pi0EB_
private

Definition at line 128 of file PiZeroAnalyzer.h.

MonitorElement* PiZeroAnalyzer::hPtPi0EB_
private

Definition at line 130 of file PiZeroAnalyzer.h.

double PiZeroAnalyzer::minPhoEtCut_
private

Definition at line 96 of file PiZeroAnalyzer.h.

int PiZeroAnalyzer::nEvt_
private

Definition at line 90 of file PiZeroAnalyzer.h.

int PiZeroAnalyzer::numberOfSteps_
private

Definition at line 99 of file PiZeroAnalyzer.h.

bool PiZeroAnalyzer::ParameterLogWeighted_
private

Definition at line 108 of file PiZeroAnalyzer.h.

double PiZeroAnalyzer::ParameterT0_barl_
private

Definition at line 110 of file PiZeroAnalyzer.h.

double PiZeroAnalyzer::ParameterW0_
private

Definition at line 111 of file PiZeroAnalyzer.h.

double PiZeroAnalyzer::ParameterX0_
private

Definition at line 109 of file PiZeroAnalyzer.h.

edm::ParameterSet PiZeroAnalyzer::posCalcParameters_
private

Definition at line 92 of file PiZeroAnalyzer.h.

unsigned int PiZeroAnalyzer::prescaleFactor_
private

Definition at line 88 of file PiZeroAnalyzer.h.

double PiZeroAnalyzer::seleMinvMaxPi0_
private

Definition at line 121 of file PiZeroAnalyzer.h.

double PiZeroAnalyzer::seleMinvMinPi0_
private

Definition at line 122 of file PiZeroAnalyzer.h.

double PiZeroAnalyzer::selePi0BeltDeta_
private

Definition at line 119 of file PiZeroAnalyzer.h.

double PiZeroAnalyzer::selePi0BeltDR_
private

Definition at line 118 of file PiZeroAnalyzer.h.

double PiZeroAnalyzer::selePi0Iso_
private

Definition at line 120 of file PiZeroAnalyzer.h.

double PiZeroAnalyzer::selePtGammaOne_
private

Definition at line 113 of file PiZeroAnalyzer.h.

double PiZeroAnalyzer::selePtGammaTwo_
private

Definition at line 114 of file PiZeroAnalyzer.h.

double PiZeroAnalyzer::selePtPi0_
private

Definition at line 115 of file PiZeroAnalyzer.h.

double PiZeroAnalyzer::seleS4S9GammaOne_
private

Definition at line 116 of file PiZeroAnalyzer.h.

double PiZeroAnalyzer::seleS4S9GammaTwo_
private

Definition at line 117 of file PiZeroAnalyzer.h.

double PiZeroAnalyzer::seleXtalMinEnergy_
private

Definition at line 106 of file PiZeroAnalyzer.h.