CMS 3D CMS Logo

EopTreeWriter.cc
Go to the documentation of this file.
1 // -*- C++ -*-
2 //
3 // Package: EopTreeWriter
4 // Class: EopTreeWriter
5 //
13 //
14 // Original Author: Holger Enderle
15 // Created: Thu Dec 4 11:22:48 CET 2008
16 // $Id: EopTreeWriter.cc,v 1.2 2011/11/30 07:45:28 mussgill Exp $
17 //
18 //
19 
20 // framework include files
28 
30 
31 // user include files
34 #include <TMath.h>
35 #include <TH1.h>
36 #include "TTree.h"
37 
40 
45 
50 
53 
60 
62 
63 //
64 // class decleration
65 //
66 
67 class EopTreeWriter : public edm::one::EDAnalyzer<edm::one::SharedResources> {
68 public:
69  explicit EopTreeWriter(const edm::ParameterSet&);
70  ~EopTreeWriter() override;
71 
72 private:
73  void beginJob() override;
74  void analyze(const edm::Event&, const edm::EventSetup&) override;
75  void endJob() override;
76 
77  double getDistInCM(double eta1, double phi1, double eta2, double phi2);
78 
79  // ----------member data ---------------------------
82 
84  TTree* tree_;
88 };
89 
90 //
91 // constants, enums and typedefs
92 //
93 
94 //
95 // static data member definitions
96 //
97 
98 //
99 // constructors and destructor
100 //
102  : src_(iConfig.getParameter<edm::InputTag>("src")), geometryToken_(esConsumes()) {
103  usesResource(TFileService::kSharedResource);
104  //now do what ever initialization is needed
105 
106  // TrackAssociator parameters
107  edm::ParameterSet parameters = iConfig.getParameter<edm::ParameterSet>("TrackAssociatorParameters");
110 
111  tree_ = fs_->make<TTree>("EopTree", "EopTree");
113  tree_->Branch("EopVariables", &treeMemPtr_); // address of pointer!
114 }
115 
117  // do anything here that needs to be done at destruction time
118  // (e.g. close files, deallocate resources etc.)
119 }
120 
121 //
122 // member functions
123 //
124 
125 // ------------ method called to for each event ------------
127  using namespace edm;
128 
129  // get geometry
130  const CaloGeometry* geo = &iSetup.getData(geometryToken_);
131  // const CaloSubdetectorGeometry* towerGeometry =
132  // geo->getSubdetectorGeometry(DetId::Calo, CaloTowerDetId::SubdetId);
133 
134  // temporary collection of EB+EE recHits
135  std::unique_ptr<EcalRecHitCollection> tmpEcalRecHitCollection(new EcalRecHitCollection);
136  std::vector<edm::InputTag> ecalLabels_;
137 
139  bool ecalInAlca = iEvent.getByLabel(edm::InputTag("IsoProd", "IsoTrackEcalRecHitCollection"), tmpEc);
140  bool ecalInReco = iEvent.getByLabel(edm::InputTag("ecalRecHit", "EcalRecHitsEB"), tmpEc) &&
141  iEvent.getByLabel(edm::InputTag("ecalRecHit", "EcalRecHitsEE"), tmpEc);
142  if (ecalInAlca)
143  ecalLabels_.push_back(edm::InputTag("IsoProd", "IsoTrackEcalRecHitCollection"));
144  else if (ecalInReco) {
145  ecalLabels_.push_back(edm::InputTag("ecalRecHit", "EcalRecHitsEB"));
146  ecalLabels_.push_back(edm::InputTag("ecalRecHit", "EcalRecHitsEE"));
147  } else
148  throw cms::Exception("MissingProduct", "can not find EcalRecHits");
149 
150  std::vector<edm::InputTag>::const_iterator i;
151  for (i = ecalLabels_.begin(); i != ecalLabels_.end(); i++) {
153  iEvent.getByLabel(*i, ec);
154  for (EcalRecHitCollection::const_iterator recHit = (*ec).begin(); recHit != (*ec).end(); ++recHit) {
155  tmpEcalRecHitCollection->push_back(*recHit);
156  }
157  }
158 
160  iEvent.getByLabel(src_, tracks);
161 
164  bool pixelInAlca = iEvent.getByLabel(edm::InputTag("IsoProd", "HcalIsolatedTrackCollection"), tmpPix);
165  if (pixelInAlca)
166  iEvent.getByLabel(edm::InputTag("IsoProd", "HcalIsolatedTrackCollection"), isoPixelTracks);
167 
168  Double_t trackemc1;
169  Double_t trackemc3;
170  Double_t trackemc5;
171  Double_t trackhac1;
172  Double_t trackhac3;
173  Double_t trackhac5;
174  Double_t maxPNearby;
175  Double_t dist;
176  Double_t EnergyIn;
177  Double_t EnergyOut;
178 
179  parameters_.useMuon = false;
180 
181  if (pixelInAlca)
182  if (isoPixelTracks->empty())
183  return;
184 
185  for (reco::TrackCollection::const_iterator track = tracks->begin(); track != tracks->end(); ++track) {
186  bool noChargedTracks = true;
187 
188  if (track->p() < 9.)
189  continue;
190 
193  iEvent,
194  iSetup,
196  parameters_);
197 
198  trackemc1 = info.nXnEnergy(TrackDetMatchInfo::EcalRecHits, 0);
199  trackemc3 = info.nXnEnergy(TrackDetMatchInfo::EcalRecHits, 1);
200  trackemc5 = info.nXnEnergy(TrackDetMatchInfo::EcalRecHits, 2);
201  trackhac1 = info.nXnEnergy(TrackDetMatchInfo::HcalRecHits, 0);
202  trackhac3 = info.nXnEnergy(TrackDetMatchInfo::HcalRecHits, 1);
203  trackhac5 = info.nXnEnergy(TrackDetMatchInfo::HcalRecHits, 2);
204 
205  if (trackhac3 < 5.)
206  continue;
207 
208  double etaecal = info.trkGlobPosAtEcal.eta();
209  double phiecal = info.trkGlobPosAtEcal.phi();
210 
211  maxPNearby = -10;
212  dist = 50;
213  for (reco::TrackCollection::const_iterator track1 = tracks->begin(); track1 != tracks->end(); track1++) {
214  if (track == track1)
215  continue;
217  double etaecal1 = info1.trkGlobPosAtEcal.eta();
218  double phiecal1 = info1.trkGlobPosAtEcal.phi();
219 
220  if (etaecal1 == 0 && phiecal1 == 0)
221  continue;
222 
223  double ecDist = getDistInCM(etaecal, phiecal, etaecal1, phiecal1);
224 
225  if (ecDist < 40.) {
226  //calculate maximum P and sum P near seed track
227  if (track1->p() > maxPNearby) {
228  maxPNearby = track1->p();
229  dist = ecDist;
230  }
231 
232  //apply loose isolation criteria
233  if (track1->p() > 5.) {
234  noChargedTracks = false;
235  break;
236  }
237  }
238  }
239  EnergyIn = 0;
240  EnergyOut = 0;
241  if (noChargedTracks) {
242  for (std::vector<EcalRecHit>::const_iterator ehit = tmpEcalRecHitCollection->begin();
243  ehit != tmpEcalRecHitCollection->end();
244  ehit++) {
246  // R-scheme of ECAL CLUSTERIZATION
247  const GlobalPoint& posH = geo->getPosition((*ehit).detid());
248  double phihit = posH.phi();
249  double etahit = posH.eta();
250 
251  double dHitCM = getDistInCM(etaecal, phiecal, etahit, phihit);
252 
253  if (dHitCM < 9.0) {
254  EnergyIn += ehit->energy();
255  }
256  if (dHitCM > 15.0 && dHitCM < 35.0) {
257  EnergyOut += ehit->energy();
258  }
259  }
260 
261  treeMemPtr_->fillVariables(track->charge(),
262  track->innerOk(),
263  track->outerRadius(),
264  track->numberOfValidHits(),
265  track->numberOfLostHits(),
266  track->chi2(),
267  track->normalizedChi2(),
268  track->p(),
269  track->pt(),
270  track->ptError(),
271  track->theta(),
272  track->eta(),
273  track->phi(),
274  trackemc1,
275  trackemc3,
276  trackemc5,
277  trackhac1,
278  trackhac3,
279  trackhac5,
280  maxPNearby,
281  dist,
282  EnergyIn,
283  EnergyOut);
284 
285  tree_->Fill();
286  }
287  }
288 }
289 
290 // ------------ method called once each job just before starting event loop ------------
292 
293 // ------------ method called once each job just after ending the event loop ------------
295  delete treeMemPtr_;
296  treeMemPtr_ = nullptr;
297 }
298 
299 double EopTreeWriter::getDistInCM(double eta1, double phi1, double eta2, double phi2) {
300  double deltaPhi = phi1 - phi2;
301  while (deltaPhi > TMath::Pi())
302  deltaPhi -= 2 * TMath::Pi();
303  while (deltaPhi <= -TMath::Pi())
304  deltaPhi += 2 * TMath::Pi();
305  double dR;
306  // double Rec;
307  double theta1 = 2 * atan(exp(-eta1));
308  double theta2 = 2 * atan(exp(-eta2));
309  double cotantheta1;
310  if (cos(theta1) == 0)
311  cotantheta1 = 0;
312  else
313  cotantheta1 = 1 / tan(theta1);
314  double cotantheta2;
315  if (cos(theta2) == 0)
316  cotantheta2 = 0;
317  else
318  cotantheta2 = 1 / tan(theta2);
319  // if (fabs(eta1)<1.479) Rec=129; //radius of ECAL barrel
320  // else Rec=317; //distance from IP to ECAL endcap
321  //|vect| times tg of acos(scalar product)
322  // dR=fabs((Rec/sin(theta1))*tan(acos(sin(theta1)*sin(theta2)*(sin(phi1)*sin(phi2)+cos(phi1)*cos(phi2))+cos(theta1)*cos(theta2))));
323  if (fabs(eta1) < 1.479)
324  dR = 129 * sqrt((cotantheta1 - cotantheta2) * (cotantheta1 - cotantheta2) + deltaPhi * deltaPhi);
325  else
326  dR = 317 *
327  sqrt(tan(theta1) * tan(theta1) + tan(theta2) * tan(theta2) - 2 * tan(theta1) * tan(theta2) * cos(deltaPhi));
328  return dR;
329 }
330 
331 //define this as a plug-in
EopVariables
container to hold data to be written into TTree
Definition: EopVariables.h:8
BeamSpotPI::parameters
parameters
Definition: BeamSpotPayloadInspectorHelper.h:29
Handle.h
PDWG_EXOHSCP_cff.tracks
tracks
Definition: PDWG_EXOHSCP_cff.py:28
CaloJet.h
EopTreeWriter::endJob
void endJob() override
Definition: EopTreeWriter.cc:294
EDAnalyzer.h
mps_fire.i
i
Definition: mps_fire.py:428
EopVariables.h
edm::SortedCollection< EcalRecHit >::const_iterator
std::vector< EcalRecHit >::const_iterator const_iterator
Definition: SortedCollection.h:80
HLT_FULL_cff.track
track
Definition: HLT_FULL_cff.py:11713
MessageLogger.h
SteppingHelixPropagator.h
EopTreeWriter::getDistInCM
double getDistInCM(double eta1, double phi1, double eta2, double phi2)
Definition: EopTreeWriter.cc:299
EopTreeWriter::trackAssociator_
TrackDetectorAssociator trackAssociator_
Definition: EopTreeWriter.cc:86
DTRecHitCollection.h
EopTreeWriter::beginJob
void beginJob() override
Definition: EopTreeWriter.cc:291
TrackDetectorAssociator.h
CaloGeometry::getPosition
GlobalPoint getPosition(const DetId &id) const
Get the position of a given detector id.
Definition: CaloGeometry.cc:50
edm
HLT enums.
Definition: AlignableModifier.h:19
TrackDetectorAssociator::useDefaultPropagator
void useDefaultPropagator()
use the default propagator
Definition: TrackDetectorAssociator.cc:81
HLT_FULL_cff.InputTag
InputTag
Definition: HLT_FULL_cff.py:89287
edm::SortedCollection< EcalRecHit >
edm::EDConsumerBase::consumesCollector
ConsumesCollector consumesCollector()
Use a ConsumesCollector to gather consumes information from helper functions.
Definition: EDConsumerBase.cc:46
info
static const TGPicture * info(bool iBackgroundIsBlack)
Definition: FWCollectionSummaryWidget.cc:153
TrackAssociatorParameters::useMuon
bool useMuon
Definition: TrackAssociatorParameters.h:83
edm::one::EDAnalyzer
Definition: EDAnalyzer.h:30
IsolatedPixelTrackCandidate.h
EopTreeWriter::treeMemPtr_
EopVariables * treeMemPtr_
Definition: EopTreeWriter.cc:85
edm::Handle
Definition: AssociativeIterator.h:50
EopTreeWriter::geometryToken_
edm::ESGetToken< CaloGeometry, CaloGeometryRecord > geometryToken_
Definition: EopTreeWriter.cc:81
rpcPointValidation_cfi.recHit
recHit
Definition: rpcPointValidation_cfi.py:7
EcalRecHitCollections.h
EopTreeWriter::fs_
edm::Service< TFileService > fs_
Definition: EopTreeWriter.cc:83
TFileDirectory.h
TrackDetMatchInfo::EcalRecHits
Definition: TrackDetMatchInfo.h:15
MakerMacros.h
CaloGeometry
Definition: CaloGeometry.h:21
funct::cos
Cos< T >::type cos(const T &t)
Definition: Cos.h:22
Track.h
TrackFwd.h
DEFINE_FWK_MODULE
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
SiPixelRawToDigiRegional_cfi.deltaPhi
deltaPhi
Definition: SiPixelRawToDigiRegional_cfi.py:9
Service.h
mathSSE::sqrt
T sqrt(T t)
Definition: SSEVec.h:19
HLT_FULL_cff.eta2
eta2
Definition: HLT_FULL_cff.py:9542
CaloTowerDefs.h
EopTreeWriter::parameters_
TrackAssociatorParameters parameters_
Definition: EopTreeWriter.cc:87
Point3DBase< float, GlobalTag >
TrackAssociatorParameters::loadParameters
void loadParameters(const edm::ParameterSet &, edm::ConsumesCollector &)
Definition: TrackAssociatorParameters.cc:18
CaloGeometryRecord.h
TFileService.h
HLT_FULL_cff.eta1
eta1
Definition: HLT_FULL_cff.py:9541
EopTreeWriter::src_
edm::InputTag src_
Definition: EopTreeWriter.cc:80
edm::ParameterSet
Definition: ParameterSet.h:47
GenEventInfoProduct.h
Event.h
TrackDetectorAssociator::getFreeTrajectoryState
static FreeTrajectoryState getFreeTrajectoryState(const MagneticField *, const reco::Track &)
get FreeTrajectoryState from different track representations
Definition: TrackDetectorAssociator.cc:553
TrackDetectorAssociator
Definition: TrackDetectorAssociator.h:44
PV3DBase::eta
T eta() const
Definition: PV3DBase.h:73
funct::tan
Tan< T >::type tan(const T &t)
Definition: Tan.h:22
edm::Service< TFileService >
iEvent
int iEvent
Definition: GenABIO.cc:224
edm::EventSetup
Definition: EventSetup.h:57
edm::ESGetToken< CaloGeometry, CaloGeometryRecord >
TrackDetMatchInfo::trkGlobPosAtEcal
math::XYZPoint trkGlobPosAtEcal
Track position at different parts of the calorimeter.
Definition: TrackDetMatchInfo.h:38
edm::EventSetup::getData
bool getData(T &iHolder) const
Definition: EventSetup.h:120
EopVariables::fillVariables
void fillVariables(Int_t charge, Int_t innerOk, Double_t outerRadius, Int_t numberOfValidHits, Int_t numberOfLostHits, Double_t chi2, Double_t normalizedChi2, Double_t p, Double_t pt, Double_t ptError, Double_t theta, Double_t eta, Double_t phi, Double_t emc1, Double_t emc3, Double_t emc5, Double_t hac1, Double_t hac3, Double_t hac5, Double_t maxPNearby, Double_t dist, Double_t EnergyIn, Double_t EnergyOut)
fill variables into tree
Definition: EopVariables.h:22
EopTreeWriter::EopTreeWriter
EopTreeWriter(const edm::ParameterSet &)
Definition: EopTreeWriter.cc:101
TrackDetMatchInfo
Definition: TrackDetMatchInfo.h:13
Frameworkfwd.h
EopTreeWriter
Definition: EopTreeWriter.cc:67
Exception
Definition: hltDiff.cc:246
CaloGeometry.h
TFileService::kSharedResource
static const std::string kSharedResource
Definition: TFileService.h:76
EventSetup.h
edm::ParameterSet::getParameter
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
HcalRecHitCollections.h
TrackDetMatchInfo::HcalRecHits
Definition: TrackDetMatchInfo.h:15
TrackAssociatorParameters::bFieldToken
edm::ESGetToken< MagneticField, IdealMagneticFieldRecord > bFieldToken
Definition: TrackAssociatorParameters.h:130
Pi
const double Pi
Definition: CosmicMuonParameters.h:18
EopTreeWriter::~EopTreeWriter
~EopTreeWriter() override
Definition: EopTreeWriter.cc:116
TrackDetectorAssociator::associate
TrackDetMatchInfo associate(const edm::Event &, const edm::EventSetup &, const FreeTrajectoryState &, const AssociatorParameters &)
Definition: TrackDetectorAssociator.cc:110
HGC3DClusterGenMatchSelector_cfi.dR
dR
Definition: HGC3DClusterGenMatchSelector_cfi.py:7
ParameterSet.h
RecoCaloTowerCandidate.h
JetChargeProducer_cfi.exp
exp
Definition: JetChargeProducer_cfi.py:6
PropagationExceptions.h
edm::Event
Definition: Event.h:73
TrackAssociatorParameters.h
IsolatedPixelTrackCandidateFwd.h
edm::InputTag
Definition: InputTag.h:15
edm::ConsumesCollector
Definition: ConsumesCollector.h:45
PV3DBase::phi
Geom::Phi< T > phi() const
Definition: PV3DBase.h:66
EopTreeWriter::analyze
void analyze(const edm::Event &, const edm::EventSetup &) override
Definition: EopTreeWriter.cc:126
EopTreeWriter::tree_
TTree * tree_
Definition: EopTreeWriter.cc:84
TFileService::make
T * make(const Args &... args) const
make new ROOT object
Definition: TFileService.h:64
TrackAssociatorParameters
Definition: TrackAssociatorParameters.h:43