55 delete thePhotonMCTruthFinder_;
72 h_MCPhoE_ = fs->
make<TH1F>(
"MCPhoE",
"MC photon energy",100,0.,100.);
73 h_MCPhoPhi_ = fs->
make<TH1F>(
"MCPhoPhi",
"MC photon phi",40,-3.14, 3.14);
74 h_MCPhoEta_ = fs->
make<TH1F>(
"MCPhoEta",
"MC photon eta",25,0., 2.5);
75 h_MCPhoEta1_ = fs->
make<TH1F>(
"MCPhoEta1",
"MC photon eta",40,-3., 3.);
76 h_MCPhoEta2_ = fs->
make<TH1F>(
"MCPhoEta2",
"MC photon eta",40,-3., 3.);
77 h_MCPhoEta3_ = fs->
make<TH1F>(
"MCPhoEta3",
"MC photon eta",40,-3., 3.);
78 h_MCPhoEta4_ = fs->
make<TH1F>(
"MCPhoEta4",
"MC photon eta",40,-3., 3.);
80 h_MCConvPhoE_ = fs->
make<TH1F>(
"MCConvPhoE",
"MC converted photon energy",100,0.,100.);
81 h_MCConvPhoPhi_ = fs->
make<TH1F>(
"MCConvPhoPhi",
"MC converted photon phi",40,-3.14, 3.14);
82 h_MCConvPhoEta_ = fs->
make<TH1F>(
"MCConvPhoEta",
"MC converted photon eta",25,0., 2.5);
83 h_MCConvPhoR_ = fs->
make<TH1F>(
"MCConvPhoR",
"MC converted photon R",120,0.,120.);
85 h_MCConvPhoREta1_ = fs->
make<TH1F>(
"MCConvPhoREta1",
"MC converted photon R",120,0.,120.);
86 h_MCConvPhoREta2_ = fs->
make<TH1F>(
"MCConvPhoREta2",
"MC converted photon R",120,0.,120.);
87 h_MCConvPhoREta3_ = fs->
make<TH1F>(
"MCConvPhoREta3",
"MC converted photon R",120,0.,120.);
88 h_MCConvPhoREta4_ = fs->
make<TH1F>(
"MCConvPhoREta4",
"MC converted photon R",120,0.,120.);
90 h_convFracEta1_ = fs->
make<TH1F>(
"convFracEta1",
"Integrated(R) fraction of conversion |eta|=0.2",120,0.,120.);
91 h_convFracEta2_ = fs->
make<TH1F>(
"convFracEta2",
"Integrated(R) fraction of conversion |eta|=0.9",120,0.,120.);
92 h_convFracEta3_ = fs->
make<TH1F>(
"convFracEta3",
"Integrated(R) fraction of conversion |eta|=1.5",120,0.,120.);
93 h_convFracEta4_ = fs->
make<TH1F>(
"convFracEta4",
"Integrated(R) fraction of conversion |eta|=2.0",120,0.,120.);
95 h_MCConvPhoTwoTracksE_ = fs->
make<TH1F>(
"MCConvPhoTwoTracksE",
"MC converted photon with 2 tracks energy",100,0.,100.);
96 h_MCConvPhoTwoTracksPhi_ = fs->
make<TH1F>(
"MCConvPhoTwoTracksPhi",
"MC converted photon 2 tracks phi",40,-3.14, 3.14);
97 h_MCConvPhoTwoTracksEta_ = fs->
make<TH1F>(
"MCConvPhoTwoTracksEta",
"MC converted photon 2 tracks eta",40,-3., 3.);
98 h_MCConvPhoTwoTracksR_ = fs->
make<TH1F>(
"MCConvPhoTwoTracksR",
"MC converted photon 2 tracks eta",48,0.,120.);
100 h_MCConvPhoOneTrackE_ = fs->
make<TH1F>(
"MCConvPhoOneTrackE",
"MC converted photon with 1 track energy",100,0.,100.);
101 h_MCConvPhoOneTrackPhi_ = fs->
make<TH1F>(
"MCConvPhoOneTrackPhi",
"MC converted photon 1 track phi",40,-3.14, 3.14);
102 h_MCConvPhoOneTrackEta_ = fs->
make<TH1F>(
"MCConvPhoOneTrackEta",
"MC converted photon 1 track eta",40,-3., 3.);
103 h_MCConvPhoOneTrackR_ = fs->
make<TH1F>(
"MCConvPhoOneTrackR",
"MC converted photon 1 track eta",48,0.,120.);
106 h_MCEleE_ = fs->
make<TH1F>(
"MCEleE",
"MC ele energy",100,0.,200.);
107 h_MCElePhi_ = fs->
make<TH1F>(
"MCElePhi",
"MC ele phi",40,-3.14, 3.14);
108 h_MCEleEta_ = fs->
make<TH1F>(
"MCEleEta",
"MC ele eta",40,-3., 3.);
109 h_BremFrac_ = fs->
make<TH1F>(
"bremFrac",
"brem frac ", 100, 0., 1.);
110 h_BremEnergy_ = fs->
make<TH1F>(
"BremE",
"Brem energy",100,0.,200.);
111 h_EleEvsPhoE_ = fs->
make<TH2F>(
"eleEvsPhoE",
"eleEvsPhoE",100,0.,200.,100,0.,200.);
112 h_bremEvsEleE_ = fs->
make<TH2F>(
"bremEvsEleE",
"bremEvsEleE",100,0.,200.,100,0.,200.);
114 p_BremVsR_ = fs->
make<TProfile>(
"BremVsR",
" Mean Brem Energy vs R ", 48, 0., 120.);
115 p_BremVsEta_ = fs->
make<TProfile>(
"BremVsEta",
" Mean Brem Energy vs Eta ", 50, -2.5, 2.5);
117 p_BremVsConvR_ = fs->
make<TProfile>(
"BremVsConvR",
" Mean Brem Fraction vs conversion R ", 48, 0., 120.);
118 p_BremVsConvEta_ = fs->
make<TProfile>(
"BremVsConvEta",
" Mean Brem Fraction vs converion Eta ", 50, -2.5, 2.5);
120 h_bremFracVsConvR_ = fs->
make<TH2F>(
"bremFracVsConvR",
"brem Fraction vs conversion R",60,0.,120.,100,0.,1.);
129 const float PI = 3.1415927;
133 const float R_ECAL = 136.5;
140 float ZEcal = R_ECAL*sinh(EtaParticle)+Zvertex;
142 if(ZEcal != 0.0) Theta = atan(R_ECAL/ZEcal);
143 if(Theta<0.0) Theta = Theta+
PI ;
146 if( fabs(ETA) > etaBarrelEndcap )
149 if(EtaParticle<0.0 ) Zend = -Zend ;
150 float Zlen = Zend - Zvertex ;
151 float RR = Zlen/sinh(EtaParticle);
152 Theta = atan(RR/Zend);
153 if(Theta<0.0) Theta = Theta+
PI ;
154 ETA = -
log(
tan(0.5*Theta));
164 const float PI = 3.1415927;
168 if(phi > PI) {phi = phi -
TWOPI;}
169 if(phi < -PI) {phi = phi +
TWOPI;}
196 LogInfo(
"mcEleAnalyzer") <<
"MCPhotonAnalyzer Analyzing event number: " << e.
id() <<
" Global Counter " << nEvt_ <<
"\n";
198 std::cout <<
"MCPhotonAnalyzer Analyzing event number: " << e.
id() <<
" Global Counter " << nEvt_ <<
"\n";
203 std::cout <<
" MCPhotonAnalyzer Looking for MC truth " <<
"\n";
206 std::vector<SimTrack> theSimTracks;
207 std::vector<SimVertex> theSimVertices;
214 theSimTracks.insert(theSimTracks.end(),SimTk->begin(),SimTk->end());
215 theSimVertices.insert(theSimVertices.end(),SimVtx->begin(),SimVtx->end());
216 std::cout <<
" MCPhotonAnalyzer This Event has " << theSimTracks.size() <<
" sim tracks " << std::endl;
217 std::cout <<
" MCPhotonAnalyzer This Event has " << theSimVertices.size() <<
" sim vertices " << std::endl;
218 if ( ! theSimTracks.size() )
std::cout <<
" Event number " << e.
id() <<
" has NO sim tracks " << std::endl;
221 std::vector<PhotonMCTruth> mcPhotons=thePhotonMCTruthFinder_->find (theSimTracks, theSimVertices);
222 std::cout <<
" MCPhotonAnalyzer mcPhotons size " << mcPhotons.size() << std::endl;
226 for ( std::vector<PhotonMCTruth>::const_iterator iPho=mcPhotons.begin(); iPho !=mcPhotons.end(); ++iPho ){
228 if ( (*iPho).fourMomentum().e() < 35 )
continue;
230 h_MCPhoE_->Fill ( (*iPho).fourMomentum().e() );
232 float Theta= (*iPho).fourMomentum().theta();
233 float correta = -
log(
tan(0.5*Theta));
234 correta = etaTransformation( correta, (*iPho).primaryVertex().z() );
236 h_MCPhoEta_->Fill ( fabs(correta)-0.001 );
237 h_MCPhoPhi_->Fill ( (*iPho).fourMomentum().phi() );
251 if ( fabs(correta ) <= 0.3 && fabs(correta ) >0.2 )
252 h_MCPhoEta1_->Fill ( correta );
253 if ( fabs(correta ) <= 1.00 && fabs( correta ) >0.9 )
254 h_MCPhoEta2_->Fill ( correta );
255 if ( fabs( correta ) <= 1.6 && fabs(correta ) >1.5 )
256 h_MCPhoEta3_->Fill ( correta );
257 if ( fabs(correta ) <= 2. && fabs(correta ) >1.9 )
258 h_MCPhoEta4_->Fill ( correta );
263 if ( (*iPho).isAConversion() ) {
267 h_MCConvPhoE_->Fill ( (*iPho).fourMomentum().e() );
270 h_MCConvPhoEta_->Fill ( fabs(correta)-0.001 );
271 h_MCConvPhoPhi_->Fill ( (*iPho).fourMomentum().phi() );
272 h_MCConvPhoR_->Fill ( (*iPho).vertex().perp() );
286 if ( fabs(correta ) <= 0.3 && fabs(correta ) >0.2 )
287 h_MCConvPhoREta1_->Fill ( (*iPho).vertex().perp() );
288 if ( fabs(correta ) <= 1. && fabs( correta ) >0.9 )
289 h_MCConvPhoREta2_->Fill ( (*iPho).vertex().perp() );
290 if ( fabs( correta ) <= 1.6 && fabs(correta ) >1.5 )
291 h_MCConvPhoREta3_->Fill ( (*iPho).vertex().perp() );
292 if ( fabs(correta ) <= 2 && fabs(correta ) >1.9 )
293 h_MCConvPhoREta4_->Fill ( (*iPho).vertex().perp() );
328 Double_t nTotEta1 = h_MCPhoEta1_->GetEntries();
329 Double_t nTotEta2 = h_MCPhoEta2_->GetEntries();
330 Double_t nTotEta3 = h_MCPhoEta3_->GetEntries();
331 Double_t nTotEta4 = h_MCPhoEta4_->GetEntries();
333 for (
int i=1;
i<=120; ++
i) {
334 e1 = (
int)h_MCConvPhoREta1_->GetBinContent(
i);
335 e2 = (
int)h_MCConvPhoREta2_->GetBinContent(
i);
336 e3 = (
int)h_MCConvPhoREta3_->GetBinContent(
i);
337 e4 = (
int)h_MCConvPhoREta4_->GetBinContent(
i);
342 h_convFracEta1_->SetBinContent(
i,s1*100/nTotEta1);
343 h_convFracEta2_->SetBinContent(
i,s2*100/nTotEta2);
344 h_convFracEta3_->SetBinContent(
i,s3*100/nTotEta3);
345 h_convFracEta4_->SetBinContent(
i,s4*100/nTotEta4);
355 edm::LogInfo(
"MCPhotonAnalyzer") <<
"Analyzed " << nEvt_ <<
"\n";
356 std::cout <<
"MCPhotonAnalyzer::endJob Analyzed " << nEvt_ <<
" events " <<
"\n";
float etaTransformation(float a, float b)
T * make(const Args &...args) const
make new ROOT object
Tan< T >::type tan(const T &t)
#define TWOPI
EgammaCoreTools.
MCPhotonAnalyzer(const edm::ParameterSet &)
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
virtual ~MCPhotonAnalyzer()
static const float etaBarrelEndcap
static const float Z_Endcap
return(e1-e2)*(e1-e2)+dp *dp
virtual void analyze(const edm::Event &, const edm::EventSetup &)
static const float R_ECAL
float phiNormalization(float &a)