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 
41 
42 using namespace std;
43 
44 
46  : fOutputFileName_( pset.getUntrackedParameter<string>("HistOutFile",std::string("TestConversions.root")) ),
47  fOutputFile_(0)
48 {
49 
50 
51 }
52 
53 
54 
56 
57 
59 
60 }
61 
62 
64 {
65 
66 
67  nEvt_=0;
68 
70 
71  fOutputFile_ = new TFile( fOutputFileName_.c_str(), "RECREATE" ) ;
72 
74  h_MCPizE_ = new TH1F("MCPizE","MC piz energy",100,0.,200.);
75  h_MCPizPhi_ = new TH1F("MCPizPhi","MC piz phi",40,-3.14, 3.14);
76  h_MCPizEta_ = new TH1F("MCPizEta","MC piz eta",40,-3., 3.);
77  h_MCPizUnEta_ = new TH1F("MCPizUnEta","MC un piz eta",40,-3., 3.);
78  h_MCPiz1ConEta_ = new TH1F("MCPiz1ConEta","MC con piz eta: at least one converted photon",40,-3., 3.);
79  h_MCPiz2ConEta_ = new TH1F("MCPiz2ConEta","MC con piz eta: two converted photons",40,-3., 3.);
80  h_MCPizMass1_= new TH1F("MCPizMass1","Piz mass unconverted ",100, 0., 200);
81  h_MCPizMass2_= new TH1F("MCPizMass2","Piz mass converted ",100, 0., 200);
82 
83  // All Photons from Pizeros
84  h_MCPhoE_ = new TH1F("MCPhoE","MC photon energy",100,0.,200.);
85  h_MCPhoPhi_ = new TH1F("MCPhoPhi","MC photon phi",40,-3.14, 3.14);
86  h_MCPhoEta_ = new TH1F("MCPhoEta","MC photon eta",40,-3., 3.);
87 
88  // Converted photons
89  h_MCConvPhoE_ = new TH1F("MCConvPhoE","MC converted photon energy",100,0.,200.);
90  h_MCConvPhoPhi_ = new TH1F("MCConvPhoPhi","MC converted photon phi",40,-3.14, 3.14);
91  h_MCConvPhoEta_ = new TH1F("MCConvPhoEta","MC converted photon eta",40,-3., 3.);
92  h_MCConvPhoR_ = new TH1F("MCConvPhoR","MC converted photon R",120,0.,120.);
93  // Electrons from converted photons
94  h_MCEleE_ = new TH1F("MCEleE","MC ele energy",100,0.,200.);
95  h_MCElePhi_ = new TH1F("MCElePhi","MC ele phi",40,-3.14, 3.14);
96  h_MCEleEta_ = new TH1F("MCEleEta","MC ele eta",40,-3., 3.);
97  h_BremFrac_ = new TH1F("bremFrac","brem frac ", 50, 0., 1.);
98  h_BremEnergy_ = new TH1F("bremE","Brem energy",100,0.,200.);
99 
100 
101  h_EleEvsPhoE_ = new TH2F ("eleEvsPhoE","eleEvsPhoE",100,0.,200.,100,0.,200.);
102 
103 
104  return ;
105 }
106 
107 
108 float MCPizeroAnalyzer::etaTransformation( float EtaParticle , float Zvertex) {
109 
110 //---Definitions
111  const float PI = 3.1415927;
112  //UNUSED const float TWOPI = 2.0*PI;
113 
114 //---Definitions for ECAL
115  const float R_ECAL = 136.5;
116  const float Z_Endcap = 328.0;
117  const float etaBarrelEndcap = 1.479;
118 
119 //---ETA correction
120 
121  float Theta = 0.0 ;
122  float ZEcal = R_ECAL*sinh(EtaParticle)+Zvertex;
123 
124  if(ZEcal != 0.0) Theta = atan(R_ECAL/ZEcal);
125  if(Theta<0.0) Theta = Theta+PI ;
126  float ETA = - log(tan(0.5*Theta));
127 
128  if( fabs(ETA) > etaBarrelEndcap )
129  {
130  float Zend = Z_Endcap ;
131  if(EtaParticle<0.0 ) Zend = -Zend ;
132  float Zlen = Zend - Zvertex ;
133  float RR = Zlen/sinh(EtaParticle);
134  Theta = atan(RR/Zend);
135  if(Theta<0.0) Theta = Theta+PI ;
136  ETA = - log(tan(0.5*Theta));
137  }
138 //---Return the result
139  return ETA;
140 //---end
141 }
142 
144 {
145 //---Definitions
146  const float PI = 3.1415927;
147  const float TWOPI = 2.0*PI;
148 
149 
150  if(phi > PI) {phi = phi - TWOPI;}
151  if(phi < -PI) {phi = phi + TWOPI;}
152 
153  // cout << " Float_t PHInormalization out " << PHI << endl;
154  return phi;
155 
156 }
157 
158 
159 
160 
161 
163 {
164 
165 
166  using namespace edm;
167  //UNUSED const float etaPhiDistance=0.01;
168  // Fiducial region
169  //UNUSED const float TRK_BARL =0.9;
170  //UNUSED const float BARL = 1.4442; // DAQ TDR p.290
171  //UNUSED const float END_LO = 1.566;
172  //UNUSED const float END_HI = 2.5;
173  // Electron mass
174  //UNUSED const Float_t mElec= 0.000511;
175 
176 
177  nEvt_++;
178  LogInfo("MCPizeroAnalyzer") << "MCPizeroAnalyzer Analyzing event number: " << e.id() << " Global Counter " << nEvt_ <<"\n";
179  // LogDebug("MCPizeroAnalyzer") << "MCPizeroAnalyzer Analyzing event number: " << e.id() << " Global Counter " << nEvt_ <<"\n";
180  std::cout << "MCPizeroAnalyzer Analyzing event number: " << e.id() << " Global Counter " << nEvt_ <<"\n";
181 
183  std::cout << " MCPizeroAnalyzer Looking for MC truth " << "\n";
184 
185  //get simtrack info
186  std::vector<SimTrack> theSimTracks;
187  std::vector<SimVertex> theSimVertices;
188 
191  e.getByLabel("g4SimHits",SimTk);
192  e.getByLabel("g4SimHits",SimVtx);
193 
194  theSimTracks.insert(theSimTracks.end(),SimTk->begin(),SimTk->end());
195  theSimVertices.insert(theSimVertices.end(),SimVtx->begin(),SimVtx->end());
196  std::cout << " MCPizeroAnalyzer This Event has " << theSimTracks.size() << " sim tracks " << std::endl;
197  std::cout << " MCPizeroAnalyzer This Event has " << theSimVertices.size() << " sim vertices " << std::endl;
198  if ( ! theSimTracks.size() ) std::cout << " Event number " << e.id() << " has NO sim tracks " << std::endl;
199 
200 
201  std::vector<PizeroMCTruth> MCPizeroeros=thePizeroMCTruthFinder_->find (theSimTracks, theSimVertices);
202  std::cout << " MCPizeroAnalyzer MCPizeroeros size " << MCPizeroeros.size() << std::endl;
203 
204  for ( std::vector<PizeroMCTruth>::const_iterator iPiz=MCPizeroeros.begin(); iPiz !=MCPizeroeros.end(); ++iPiz ){
205 
206  h_MCPizE_->Fill ( (*iPiz).fourMomentum().e() );
207  h_MCPizEta_->Fill ( (*iPiz).fourMomentum().pseudoRapidity() );
208  h_MCPizPhi_->Fill ( (*iPiz).fourMomentum().phi() );
209 
210  std::vector<PhotonMCTruth> mcPhotons=(*iPiz).photons();
211  std::cout << " MCPizeroAnalyzer mcPhotons size " << mcPhotons.size() << std::endl;
212 
213  float px = mcPhotons[0].fourMomentum().x() + mcPhotons[1].fourMomentum().x();
214  float py = mcPhotons[0].fourMomentum().y() + mcPhotons[1].fourMomentum().y();
215  float pz = mcPhotons[0].fourMomentum().z() + mcPhotons[1].fourMomentum().z();
216  float e = mcPhotons[0].fourMomentum().e() + mcPhotons[1].fourMomentum().e();
217  float invM = sqrt( e*e - px*px -py*py - pz*pz)*1000;
218  h_MCPizMass1_ ->Fill (invM);
219 
220  int converted=0;
221  for ( std::vector<PhotonMCTruth>::const_iterator iPho=mcPhotons.begin(); iPho !=mcPhotons.end(); ++iPho ){
222  h_MCPhoE_->Fill ( (*iPho).fourMomentum().e() );
223  h_MCPhoEta_->Fill ( (*iPho).fourMomentum().pseudoRapidity() );
224  h_MCPhoPhi_->Fill ( (*iPho).fourMomentum().phi() );
225  if ( (*iPho).isAConversion() ) {
226 
227  converted++;
228 
229  h_MCConvPhoE_->Fill ( (*iPho).fourMomentum().e() );
230  h_MCConvPhoEta_->Fill ( (*iPho).fourMomentum().pseudoRapidity() );
231  h_MCConvPhoPhi_->Fill ( (*iPho).fourMomentum().phi() );
232  h_MCConvPhoR_->Fill ( (*iPho).vertex().perp() );
233 
234  std::vector<ElectronMCTruth> mcElectrons=(*iPho).electrons();
235  std::cout << " MCPizeroAnalyzer mcElectrons size " << mcElectrons.size() << std::endl;
236 
237  for ( std::vector<ElectronMCTruth>::const_iterator iEl=mcElectrons.begin(); iEl !=mcElectrons.end(); ++iEl ){
238 
239  if ( (*iEl).fourMomentum().e() < 30 ) continue;
240  h_MCEleE_->Fill ( (*iEl).fourMomentum().e() );
241  h_MCEleEta_->Fill ( (*iEl).fourMomentum().pseudoRapidity() );
242  h_MCElePhi_->Fill ( (*iEl).fourMomentum().phi() );
243 
244 
245  h_EleEvsPhoE_->Fill ( (*iPho).fourMomentum().e(), (*iEl).fourMomentum().e() );
246 
247  float totBrem=0;
248  for ( unsigned int iBrem=0; iBrem < (*iEl).bremVertices().size(); ++iBrem )
249  totBrem += (*iEl).bremMomentum()[iBrem].e();
250 
251  h_BremFrac_->Fill( totBrem/(*iEl).fourMomentum().e() );
252  h_BremEnergy_->Fill ( totBrem );
253  }
254 
255  }
256 
257  }
258 
259 
260  if ( converted > 0 ) {
261  h_MCPiz1ConEta_->Fill ( (*iPiz).fourMomentum().pseudoRapidity() );
262  if ( converted==2) h_MCPiz2ConEta_->Fill ( (*iPiz).fourMomentum().pseudoRapidity() );
263  } else {
264  h_MCPizUnEta_->Fill ( (*iPiz).fourMomentum().pseudoRapidity() );
265  }
266 
267 
268 
269  }
270 
271 
272 
273 
274 }
275 
276 
277 
278 
280 {
281 
282 
283 
284 
285  fOutputFile_->Write() ;
286  fOutputFile_->Close() ;
287 
288  edm::LogInfo("MCPizeroAnalyzer") << "Analyzed " << nEvt_ << "\n";
289  std::cout << "MCPizeroAnalyzer::endJob Analyzed " << nEvt_ << " events " << "\n";
290 
291  return ;
292 }
293 
float phiNormalization(float &a)
MCPizeroAnalyzer(const edm::ParameterSet &)
float etaTransformation(float a, float b)
#define ETA
T sqrt(T t)
Definition: SSEVec.h:18
Tan< T >::type tan(const T &t)
Definition: Tan.h:22
#define TWOPI
EgammaCoreTools.
Definition: DQMSourcePi0.cc:40
#define PI
Definition: QcdUeDQM.h:36
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
Definition: Event.h:416
std::string fOutputFileName_
std::vector< PizeroMCTruth > find(const std::vector< SimTrack > &simTracks, const std::vector< SimVertex > &simVertices)
virtual void analyze(const edm::Event &, const edm::EventSetup &)
virtual ~MCPizeroAnalyzer()
PizeroMCTruthFinder * thePizeroMCTruthFinder_
static const float etaBarrelEndcap
static const float Z_Endcap
return(e1-e2)*(e1-e2)+dp *dp
edm::EventID id() const
Definition: EventBase.h:60
HLT enums.
virtual void endJob()
static const float R_ECAL
virtual void beginJob()