CMS 3D CMS Logo

MCPizeroAnalyzer.cc
Go to the documentation of this file.
1 #include <iostream>
2 //
7 //
13 //
18 //
20 //
27 //
30 
31 //
32 #include "TFile.h"
33 #include "TH1.h"
34 #include "TH2.h"
35 #include "TTree.h"
36 #include "TVector3.h"
37 #include "TProfile.h"
38 //
39 
40 using namespace std;
41 
43  : fOutputFileName_(pset.getUntrackedParameter<string>("HistOutFile", std::string("TestConversions.root"))),
44  fOutputFile_(nullptr) {}
45 
47 
49  nEvt_ = 0;
50 
52 
53  fOutputFile_ = new TFile(fOutputFileName_.c_str(), "RECREATE");
54 
56  h_MCPizE_ = new TH1F("MCPizE", "MC piz energy", 100, 0., 200.);
57  h_MCPizPhi_ = new TH1F("MCPizPhi", "MC piz phi", 40, -3.14, 3.14);
58  h_MCPizEta_ = new TH1F("MCPizEta", "MC piz eta", 40, -3., 3.);
59  h_MCPizUnEta_ = new TH1F("MCPizUnEta", "MC un piz eta", 40, -3., 3.);
60  h_MCPiz1ConEta_ = new TH1F("MCPiz1ConEta", "MC con piz eta: at least one converted photon", 40, -3., 3.);
61  h_MCPiz2ConEta_ = new TH1F("MCPiz2ConEta", "MC con piz eta: two converted photons", 40, -3., 3.);
62  h_MCPizMass1_ = new TH1F("MCPizMass1", "Piz mass unconverted ", 100, 0., 200);
63  h_MCPizMass2_ = new TH1F("MCPizMass2", "Piz mass converted ", 100, 0., 200);
64 
65  // All Photons from Pizeros
66  h_MCPhoE_ = new TH1F("MCPhoE", "MC photon energy", 100, 0., 200.);
67  h_MCPhoPhi_ = new TH1F("MCPhoPhi", "MC photon phi", 40, -3.14, 3.14);
68  h_MCPhoEta_ = new TH1F("MCPhoEta", "MC photon eta", 40, -3., 3.);
69 
70  // Converted photons
71  h_MCConvPhoE_ = new TH1F("MCConvPhoE", "MC converted photon energy", 100, 0., 200.);
72  h_MCConvPhoPhi_ = new TH1F("MCConvPhoPhi", "MC converted photon phi", 40, -3.14, 3.14);
73  h_MCConvPhoEta_ = new TH1F("MCConvPhoEta", "MC converted photon eta", 40, -3., 3.);
74  h_MCConvPhoR_ = new TH1F("MCConvPhoR", "MC converted photon R", 120, 0., 120.);
75  // Electrons from converted photons
76  h_MCEleE_ = new TH1F("MCEleE", "MC ele energy", 100, 0., 200.);
77  h_MCElePhi_ = new TH1F("MCElePhi", "MC ele phi", 40, -3.14, 3.14);
78  h_MCEleEta_ = new TH1F("MCEleEta", "MC ele eta", 40, -3., 3.);
79  h_BremFrac_ = new TH1F("bremFrac", "brem frac ", 50, 0., 1.);
80  h_BremEnergy_ = new TH1F("bremE", "Brem energy", 100, 0., 200.);
81 
82  h_EleEvsPhoE_ = new TH2F("eleEvsPhoE", "eleEvsPhoE", 100, 0., 200., 100, 0., 200.);
83 
84  return;
85 }
86 
87 float MCPizeroAnalyzer::etaTransformation(float EtaParticle, float Zvertex) {
88  //---Definitions
89  const float PI = 3.1415927;
90  //UNUSED const float TWOPI = 2.0*PI;
91 
92  //---Definitions for ECAL
93  const float R_ECAL = 136.5;
94  const float Z_Endcap = 328.0;
95  const float etaBarrelEndcap = 1.479;
96 
97  //---ETA correction
98 
99  float Theta = 0.0;
100  float ZEcal = R_ECAL * sinh(EtaParticle) + Zvertex;
101 
102  if (ZEcal != 0.0)
103  Theta = atan(R_ECAL / ZEcal);
104  if (Theta < 0.0)
105  Theta = Theta + PI;
106  float ETA = -log(tan(0.5 * Theta));
107 
108  if (fabs(ETA) > etaBarrelEndcap) {
109  float Zend = Z_Endcap;
110  if (EtaParticle < 0.0)
111  Zend = -Zend;
112  float Zlen = Zend - Zvertex;
113  float RR = Zlen / sinh(EtaParticle);
114  Theta = atan(RR / Zend);
115  if (Theta < 0.0)
116  Theta = Theta + PI;
117  ETA = -log(tan(0.5 * Theta));
118  }
119  //---Return the result
120  return ETA;
121  //---end
122 }
123 
125  //---Definitions
126  const float PI = 3.1415927;
127  const float TWOPI = 2.0 * PI;
128 
129  if (phi > PI) {
130  phi = phi - TWOPI;
131  }
132  if (phi < -PI) {
133  phi = phi + TWOPI;
134  }
135 
136  // cout << " Float_t PHInormalization out " << PHI << endl;
137  return phi;
138 }
139 
141  using namespace edm;
142  //UNUSED const float etaPhiDistance=0.01;
143  // Fiducial region
144  //UNUSED const float TRK_BARL =0.9;
145  //UNUSED const float BARL = 1.4442; // DAQ TDR p.290
146  //UNUSED const float END_LO = 1.566;
147  //UNUSED const float END_HI = 2.5;
148  // Electron mass
149  //UNUSED const Float_t mElec= 0.000511;
150 
151  nEvt_++;
152  LogInfo("MCPizeroAnalyzer") << "MCPizeroAnalyzer Analyzing event number: " << e.id() << " Global Counter " << nEvt_
153  << "\n";
154  // LogDebug("MCPizeroAnalyzer") << "MCPizeroAnalyzer Analyzing event number: " << e.id() << " Global Counter " << nEvt_ <<"\n";
155  std::cout << "MCPizeroAnalyzer Analyzing event number: " << e.id() << " Global Counter " << nEvt_ << "\n";
156 
158  std::cout << " MCPizeroAnalyzer Looking for MC truth "
159  << "\n";
160 
161  //get simtrack info
162  std::vector<SimTrack> theSimTracks;
163  std::vector<SimVertex> theSimVertices;
164 
167  e.getByLabel("g4SimHits", SimTk);
168  e.getByLabel("g4SimHits", SimVtx);
169 
170  theSimTracks.insert(theSimTracks.end(), SimTk->begin(), SimTk->end());
171  theSimVertices.insert(theSimVertices.end(), SimVtx->begin(), SimVtx->end());
172  std::cout << " MCPizeroAnalyzer This Event has " << theSimTracks.size() << " sim tracks " << std::endl;
173  std::cout << " MCPizeroAnalyzer This Event has " << theSimVertices.size() << " sim vertices " << std::endl;
174  if (theSimTracks.empty())
175  std::cout << " Event number " << e.id() << " has NO sim tracks " << std::endl;
176 
177  std::vector<PizeroMCTruth> MCPizeroeros = thePizeroMCTruthFinder_->find(theSimTracks, theSimVertices);
178  std::cout << " MCPizeroAnalyzer MCPizeroeros size " << MCPizeroeros.size() << std::endl;
179 
180  for (std::vector<PizeroMCTruth>::const_iterator iPiz = MCPizeroeros.begin(); iPiz != MCPizeroeros.end(); ++iPiz) {
181  h_MCPizE_->Fill((*iPiz).fourMomentum().e());
182  h_MCPizEta_->Fill((*iPiz).fourMomentum().pseudoRapidity());
183  h_MCPizPhi_->Fill((*iPiz).fourMomentum().phi());
184 
185  std::vector<PhotonMCTruth> mcPhotons = (*iPiz).photons();
186  std::cout << " MCPizeroAnalyzer mcPhotons size " << mcPhotons.size() << std::endl;
187 
188  float px = mcPhotons[0].fourMomentum().x() + mcPhotons[1].fourMomentum().x();
189  float py = mcPhotons[0].fourMomentum().y() + mcPhotons[1].fourMomentum().y();
190  float pz = mcPhotons[0].fourMomentum().z() + mcPhotons[1].fourMomentum().z();
191  float e = mcPhotons[0].fourMomentum().e() + mcPhotons[1].fourMomentum().e();
192  float invM = sqrt(e * e - px * px - py * py - pz * pz) * 1000;
193  h_MCPizMass1_->Fill(invM);
194 
195  int converted = 0;
196  for (std::vector<PhotonMCTruth>::const_iterator iPho = mcPhotons.begin(); iPho != mcPhotons.end(); ++iPho) {
197  h_MCPhoE_->Fill((*iPho).fourMomentum().e());
198  h_MCPhoEta_->Fill((*iPho).fourMomentum().pseudoRapidity());
199  h_MCPhoPhi_->Fill((*iPho).fourMomentum().phi());
200  if ((*iPho).isAConversion()) {
201  converted++;
202 
203  h_MCConvPhoE_->Fill((*iPho).fourMomentum().e());
204  h_MCConvPhoEta_->Fill((*iPho).fourMomentum().pseudoRapidity());
205  h_MCConvPhoPhi_->Fill((*iPho).fourMomentum().phi());
206  h_MCConvPhoR_->Fill((*iPho).vertex().perp());
207 
208  std::vector<ElectronMCTruth> mcElectrons = (*iPho).electrons();
209  std::cout << " MCPizeroAnalyzer mcElectrons size " << mcElectrons.size() << std::endl;
210 
211  for (std::vector<ElectronMCTruth>::const_iterator iEl = mcElectrons.begin(); iEl != mcElectrons.end(); ++iEl) {
212  if ((*iEl).fourMomentum().e() < 30)
213  continue;
214  h_MCEleE_->Fill((*iEl).fourMomentum().e());
215  h_MCEleEta_->Fill((*iEl).fourMomentum().pseudoRapidity());
216  h_MCElePhi_->Fill((*iEl).fourMomentum().phi());
217 
218  h_EleEvsPhoE_->Fill((*iPho).fourMomentum().e(), (*iEl).fourMomentum().e());
219 
220  float totBrem = 0;
221  for (unsigned int iBrem = 0; iBrem < (*iEl).bremVertices().size(); ++iBrem)
222  totBrem += (*iEl).bremMomentum()[iBrem].e();
223 
224  h_BremFrac_->Fill(totBrem / (*iEl).fourMomentum().e());
225  h_BremEnergy_->Fill(totBrem);
226  }
227  }
228  }
229 
230  if (converted > 0) {
231  h_MCPiz1ConEta_->Fill((*iPiz).fourMomentum().pseudoRapidity());
232  if (converted == 2)
233  h_MCPiz2ConEta_->Fill((*iPiz).fourMomentum().pseudoRapidity());
234  } else {
235  h_MCPizUnEta_->Fill((*iPiz).fourMomentum().pseudoRapidity());
236  }
237  }
238 }
239 
241  fOutputFile_->Write();
242  fOutputFile_->Close();
243 
244  edm::LogInfo("MCPizeroAnalyzer") << "Analyzed " << nEvt_ << "\n";
245  std::cout << "MCPizeroAnalyzer::endJob Analyzed " << nEvt_ << " events "
246  << "\n";
247 
248  return;
249 }
PI
Definition: PayloadInspector.h:20
Handle.h
MessageLogger.h
MCPizeroAnalyzer::etaTransformation
float etaTransformation(float a, float b)
Definition: MCPizeroAnalyzer.cc:87
MCPizeroAnalyzer::h_MCEleEta_
TH1F * h_MCEleEta_
Definition: MCPizeroAnalyzer.h:62
PizeroMCTruthFinder.h
MCPizeroAnalyzer::h_MCPizPhi_
TH1F * h_MCPizPhi_
Definition: MCPizeroAnalyzer.h:57
ESHandle.h
PI
#define PI
Definition: QcdUeDQM.h:37
multPhiCorr_741_25nsDY_cfi.py
py
Definition: multPhiCorr_741_25nsDY_cfi.py:12
edm
HLT enums.
Definition: AlignableModifier.h:19
CrossingFrame.h
gather_cfg.cout
cout
Definition: gather_cfg.py:144
MCPizeroAnalyzer::nEvt_
int nEvt_
Definition: MCPizeroAnalyzer.h:40
MCPizeroAnalyzer::h_MCConvPhoR_
TH1F * h_MCConvPhoR_
Definition: MCPizeroAnalyzer.h:75
MCPizeroAnalyzer::h_MCConvPhoPhi_
TH1F * h_MCConvPhoPhi_
Definition: MCPizeroAnalyzer.h:74
MCPizeroAnalyzer::thePizeroMCTruthFinder_
PizeroMCTruthFinder * thePizeroMCTruthFinder_
Definition: MCPizeroAnalyzer.h:35
MCPizeroAnalyzer::h_MCEleE_
TH1F * h_MCEleE_
Definition: MCPizeroAnalyzer.h:61
edm::LogInfo
Log< level::Info, false > LogInfo
Definition: MessageLogger.h:125
MCPizeroAnalyzer::h_MCPizMass1_
TH1F * h_MCPizMass1_
Definition: MCPizeroAnalyzer.h:58
edm::Handle
Definition: AssociativeIterator.h:50
MCPizeroAnalyzer::h_MCPizEta_
TH1F * h_MCPizEta_
Definition: MCPizeroAnalyzer.h:53
PizeroMCTruthFinder
Definition: PizeroMCTruthFinder.h:15
MakerMacros.h
TrackingVertexContainer.h
ElectronMCTruth.h
MixCollection.h
MCPizeroAnalyzer::fOutputFile_
TFile * fOutputFile_
Definition: MCPizeroAnalyzer.h:38
mathSSE::sqrt
T sqrt(T t)
Definition: SSEVec.h:19
SimVertex.h
MCPizeroAnalyzer::~MCPizeroAnalyzer
~MCPizeroAnalyzer() override
Definition: MCPizeroAnalyzer.cc:46
IdealMagneticFieldRecord.h
MCPizeroAnalyzer::h_MCPiz2ConEta_
TH1F * h_MCPiz2ConEta_
Definition: MCPizeroAnalyzer.h:56
MCPizeroAnalyzer.h
MCPizeroAnalyzer::h_BremFrac_
TH1F * h_BremFrac_
Definition: MCPizeroAnalyzer.h:64
MCPizeroAnalyzer::fOutputFileName_
std::string fOutputFileName_
Definition: MCPizeroAnalyzer.h:37
MCPizeroAnalyzer::h_MCElePhi_
TH1F * h_MCElePhi_
Definition: MCPizeroAnalyzer.h:63
MCPizeroAnalyzer::endJob
void endJob() override
Definition: MCPizeroAnalyzer.cc:240
AlCaHLTBitMon_QueryRunRegistry.string
string
Definition: AlCaHLTBitMon_QueryRunRegistry.py:256
PizeroMCTruth.h
edm::ParameterSet
Definition: ParameterSet.h:47
Event.h
PVValHelper::phi
Definition: PVValidationHelpers.h:68
TWOPI
#define TWOPI
Definition: DQMSourcePi0.cc:36
MCPizeroAnalyzer::h_MCPizMass2_
TH1F * h_MCPizMass2_
Definition: MCPizeroAnalyzer.h:59
funct::tan
Tan< T >::type tan(const T &t)
Definition: Tan.h:22
MCPizeroAnalyzer::h_MCPhoEta_
TH1F * h_MCPhoEta_
Definition: MCPizeroAnalyzer.h:70
MCPizeroAnalyzer::h_MCPizE_
TH1F * h_MCPizE_
Definition: MCPizeroAnalyzer.h:52
MagneticField.h
edm::EventSetup
Definition: EventSetup.h:57
MCPizeroAnalyzer::analyze
void analyze(const edm::Event &, const edm::EventSetup &) override
Definition: MCPizeroAnalyzer.cc:140
MCPizeroAnalyzer::h_MCPhoPhi_
TH1F * h_MCPhoPhi_
Definition: MCPizeroAnalyzer.h:71
fileCollector2.converted
converted
Definition: fileCollector2.py:211
PizeroMCTruthFinder::find
std::vector< PizeroMCTruth > find(const std::vector< SimTrack > &simTracks, const std::vector< SimVertex > &simVertices)
Definition: PizeroMCTruthFinder.cc:18
DDAxes::phi
MCPizeroAnalyzer::h_BremEnergy_
TH1F * h_BremEnergy_
Definition: MCPizeroAnalyzer.h:65
multPhiCorr_741_25nsDY_cfi.px
px
Definition: multPhiCorr_741_25nsDY_cfi.py:10
MCPizeroAnalyzer::h_EleEvsPhoE_
TH2F * h_EleEvsPhoE_
Definition: MCPizeroAnalyzer.h:67
std
Definition: JetResolutionObject.h:76
MCPizeroAnalyzer::phiNormalization
float phiNormalization(float &a)
Definition: MCPizeroAnalyzer.cc:124
TrackingParticleFwd.h
MCPizeroAnalyzer::MCPizeroAnalyzer
MCPizeroAnalyzer(const edm::ParameterSet &)
Definition: MCPizeroAnalyzer.cc:42
ETA
#define ETA
Definition: GenericBenchmark.cc:28
EventSetup.h
MCPizeroAnalyzer::h_MCConvPhoE_
TH1F * h_MCConvPhoE_
Definition: MCPizeroAnalyzer.h:72
Exception.h
dqm-mbProfile.log
log
Definition: dqm-mbProfile.py:17
SimTrack.h
MCPizeroAnalyzer::h_MCConvPhoEta_
TH1F * h_MCConvPhoEta_
Definition: MCPizeroAnalyzer.h:73
MCPizeroAnalyzer::h_MCPiz1ConEta_
TH1F * h_MCPiz1ConEta_
Definition: MCPizeroAnalyzer.h:55
HepMCProduct.h
MCPizeroAnalyzer::beginJob
void beginJob() override
Definition: MCPizeroAnalyzer.cc:48
ZEcal
static constexpr float ZEcal
Definition: L1TkEmParticleProducer.cc:40
edm::Event
Definition: Event.h:73
SimTrackContainer.h
MCPizeroAnalyzer::h_MCPizUnEta_
TH1F * h_MCPizUnEta_
Definition: MCPizeroAnalyzer.h:54
Z_Endcap
static constexpr float Z_Endcap
Definition: ECALPositionCalculator.cc:11
SimVertexContainer.h
R_ECAL
static constexpr float R_ECAL
Definition: ECALPositionCalculator.cc:10
muonDTDigis_cfi.pset
pset
Definition: muonDTDigis_cfi.py:27
MCPizeroAnalyzer::h_MCPhoE_
TH1F * h_MCPhoE_
Definition: MCPizeroAnalyzer.h:69
MillePedeFileConverter_cfg.e
e
Definition: MillePedeFileConverter_cfg.py:37
etaBarrelEndcap
static constexpr float etaBarrelEndcap
Definition: ECALPositionCalculator.cc:12