43 #include "CLHEP/Units/GlobalPhysicalConstants.h"
61 outputFile_ = conf.
getParameter<std::string>(
"outputFile");
64 matchingCondition_ = conf.
getParameter<std::string>(
"matchingCondition");
67 histfile_ =
new TFile(outputFile_.c_str(),
"RECREATE");
70 assert(matchingCondition_==
"Cone") ;
71 maxPtMatchingObject_ = conf.
getParameter<
double>(
"MaxPtMatchingObject");
72 maxAbsEtaMatchingObject_ = conf.
getParameter<
double>(
"MaxAbsEtaMatchingObject");
79 TAGcheckclass_ = conf.
getParameter<
bool>(
"TAGcheckclass");
81 PROBEcheckclass_ = conf.
getParameter<
bool>(
"PROBEcheckclass");
88 isNotEBEEGap_ = conf.
getParameter<
bool>(
"SelectNotEBEEGap");
89 isEcalDriven_ = conf.
getParameter<
bool>(
"SelectEcalDriven");
90 isTrackerDriven_ = conf.
getParameter<
bool>(
"SelectTrackerDriven");
91 eOverPMinBarrel_ = conf.
getParameter<
double>(
"MinEOverPBarrel");
92 eOverPMaxBarrel_ = conf.
getParameter<
double>(
"MaxEOverPBarrel");
93 eOverPMinEndcaps_ = conf.
getParameter<
double>(
"MinEOverPEndcaps");
94 eOverPMaxEndcaps_ = conf.
getParameter<
double>(
"MaxEOverPEndcaps");
95 dEtaMinBarrel_ = conf.
getParameter<
double>(
"MinDetaBarrel");
96 dEtaMaxBarrel_ = conf.
getParameter<
double>(
"MaxDetaBarrel");
97 dEtaMinEndcaps_ = conf.
getParameter<
double>(
"MinDetaEndcaps");
98 dEtaMaxEndcaps_ = conf.
getParameter<
double>(
"MaxDetaEndcaps");
99 dPhiMinBarrel_ = conf.
getParameter<
double>(
"MinDphiBarrel");
100 dPhiMaxBarrel_ = conf.
getParameter<
double>(
"MaxDphiBarrel");
101 dPhiMinEndcaps_ = conf.
getParameter<
double>(
"MinDphiEndcaps");
102 dPhiMaxEndcaps_ = conf.
getParameter<
double>(
"MaxDphiEndcaps");
103 sigIetaIetaMinBarrel_ = conf.
getParameter<
double>(
"MinSigIetaIetaBarrel");
104 sigIetaIetaMaxBarrel_ = conf.
getParameter<
double>(
"MaxSigIetaIetaBarrel");
105 sigIetaIetaMinEndcaps_ = conf.
getParameter<
double>(
"MinSigIetaIetaEndcaps");
106 sigIetaIetaMaxEndcaps_ = conf.
getParameter<
double>(
"MaxSigIetaIetaEndcaps");
107 hadronicOverEmMaxBarrel_ = conf.
getParameter<
double>(
"MaxHoEBarrel");
108 hadronicOverEmMaxEndcaps_ = conf.
getParameter<
double>(
"MaxHoEEndcaps");
110 tipMaxBarrel_ = conf.
getParameter<
double>(
"MaxTipBarrel");
111 tipMaxEndcaps_ = conf.
getParameter<
double>(
"MaxTipEndcaps");
113 hcalIso03Depth1MaxBarrel_ = conf.
getParameter<
double>(
"MaxHcalIso03Depth1Barrel");
114 hcalIso03Depth1MaxEndcaps_ = conf.
getParameter<
double>(
"MaxHcalIso03Depth1Endcaps");
115 hcalIso03Depth2MaxEndcaps_ = conf.
getParameter<
double>(
"MaxHcalIso03Depth2Endcaps");
116 ecalIso03MaxBarrel_ = conf.
getParameter<
double>(
"MaxEcalIso03Barrel");
117 ecalIso03MaxEndcaps_ = conf.
getParameter<
double>(
"MaxEcalIso03Endcaps");
120 HLTPathsByName_= conf.
getParameter<std::vector<std::string > >(
"hltPaths");
121 HLTPathsByIndex_.resize(HLTPathsByName_.size());
162 nbindetamatch2D=pset.
getParameter<
int>(
"Nbindetamatch2D");
163 nbindphimatch2D=pset.
getParameter<
int>(
"Nbindphimatch2D");
197 if ( locSC != std::string::npos ) {
198 std::cout <<
"Matching objects are SuperClusters "<< std::endl;
201 std::cout <<
"Didn't recognize input matching objects!! " << std::endl;
208 std::string htitle, hlabel;
209 hlabel=
"h_"+type+
"Num"; htitle=
"# "+type+
"s";
210 h_matchingObjectNum =
new TH1F( hlabel.c_str(), htitle.c_str(), nbinfhits,0.,fhitsmax );
211 hlabel=
"h_"+type+
"_eta"; htitle=type+
" #eta";
212 h_matchingObjectEta =
new TH1F( hlabel.c_str(), htitle.c_str(), nbineta,etamin,etamax);
213 hlabel=
"h_"+type+
"_abseta"; htitle=type+
" |#eta|";
214 h_matchingObjectAbsEta =
new TH1F( hlabel.c_str(), htitle.c_str(), nbineta/2,0.,etamax);
215 hlabel=
"h_"+type+
"_P"; htitle=type+
" p";
216 h_matchingObjectP =
new TH1F( hlabel.c_str(), htitle.c_str(), nbinp,0.,pmax);
217 hlabel=
"h_"+type+
"_Pt"; htitle=type+
" pt";
218 h_matchingObjectPt =
new TH1F( hlabel.c_str(),htitle.c_str(), nbinpteff,5.,ptmax);
219 hlabel=
"h_"+type+
"_phi"; htitle=type+
" phi";
220 h_matchingObjectPhi =
new TH1F( hlabel.c_str(), htitle.c_str(), nbinphi,
phimin,
phimax);
221 hlabel=
"h_"+type+
"_z"; htitle=type+
" z";
222 h_matchingObjectZ =
new TH1F( hlabel.c_str(), htitle.c_str(), nbinxyz , -25, 25 );
224 h_matchingObjectNum->GetXaxis()-> SetTitle(
"N_{SC}");
225 h_matchingObjectNum->GetYaxis()-> SetTitle(
"Events");
226 h_matchingObjectEta->GetXaxis()-> SetTitle(
"#eta_{SC}");
227 h_matchingObjectEta->GetYaxis()-> SetTitle(
"Events");
228 h_matchingObjectP->GetXaxis()-> SetTitle(
"E_{SC} (GeV)");
229 h_matchingObjectP->GetYaxis()-> SetTitle(
"Events");
231 h_ele_matchingObjectEta_matched =
new TH1F(
"h_ele_matchingObjectEta_matched",
"Efficiency vs matching SC #eta", nbineta,etamin,etamax);
232 h_ele_matchingObjectEta_matched->Sumw2();
233 h_ele_matchingObjectAbsEta_matched =
new TH1F(
"h_ele_matchingObjectAbsEta_matched",
"Efficiency vs matching SC |#eta|", nbineta/2,0.,2.5);
234 h_ele_matchingObjectAbsEta_matched->Sumw2();
235 h_ele_matchingObjectPt_matched =
new TH1F(
"h_ele_matchingObjectPt_matched",
"Efficiency vs matching SC E_{T}", nbinpteff,5.,ptmax);
236 h_ele_matchingObjectPt_matched->Sumw2();
237 h_ele_matchingObjectPhi_matched =
new TH1F(
"h_ele_matchingObjectPhi_matched",
"Efficiency vs matching SC phi", nbinphi,phimin,
phimax);
238 h_ele_matchingObjectPhi_matched->Sumw2();
239 h_ele_matchingObjectZ_matched =
new TH1F(
"h_ele_matchingObjectZ_matched",
"Efficiency vs matching SC z", nbinxyz,-25,25);
240 h_ele_matchingObjectZ_matched->Sumw2();
246 h_ele_vertexPt =
new TH1F(
"h_ele_vertexPt",
"ele transverse momentum",nbinpt,0.,ptmax);
247 h_ele_Et =
new TH1F(
"h_ele_Et",
"ele SC transverse energy", nbinpt,0.,ptmax);
248 h_ele_vertexEta =
new TH1F(
"h_ele_vertexEta",
"ele momentum eta",nbineta,etamin,etamax);
249 h_ele_vertexPhi =
new TH1F(
"h_ele_vertexPhi",
"ele momentum #phi",nbinphi,phimin,
phimax);
250 h_ele_vertexX =
new TH1F(
"h_ele_vertexX",
"ele vertex x",nbinxyz,-0.1,0.1 );
251 h_ele_vertexY =
new TH1F(
"h_ele_vertexY",
"ele vertex y",nbinxyz,-0.1,0.1 );
252 h_ele_vertexZ =
new TH1F(
"h_ele_vertexZ",
"ele vertex z",nbinxyz,-25, 25 );
253 h_ele_vertexTIP =
new TH1F(
"h_ele_vertexTIP",
"ele transverse impact parameter (wrt bs)",90,0.,0.15);
254 h_ele_charge =
new TH1F(
"h_ele_charge",
"ele charge",5,-2.,2.);
256 h_ele_charge->GetXaxis()-> SetTitle(
"charge");
257 h_ele_charge->GetYaxis()-> SetTitle(
"Events");
259 h_ele_vertexPt->GetXaxis()-> SetTitle(
"p_{T vertex} (GeV/c)");
260 h_ele_vertexPt->GetYaxis()-> SetTitle(
"Events");
262 h_ele_Et->GetXaxis()-> SetTitle(
"E_{T} (GeV)");
263 h_ele_Et->GetYaxis()-> SetTitle(
"Events");
265 h_ele_vertexEta->GetXaxis()-> SetTitle(
"#eta");
266 h_ele_vertexEta->GetYaxis()-> SetTitle(
"Events");
267 h_ele_vertexPhi->GetXaxis()-> SetTitle(
"#phi (rad)");
268 h_ele_vertexPhi->GetYaxis()-> SetTitle(
"Events");
270 h_ele_vertexX-> GetXaxis()-> SetTitle(
"x (cm)");
271 h_ele_vertexX-> GetYaxis()-> SetTitle(
"Events");
272 h_ele_vertexY-> GetXaxis()-> SetTitle(
"y (cm)");
273 h_ele_vertexY-> GetYaxis()-> SetTitle(
"Events");
274 h_ele_vertexZ-> GetXaxis()-> SetTitle(
"z (cm)");
275 h_ele_vertexZ-> GetYaxis()-> SetTitle(
"Events");
277 h_ele_vertexTIP-> GetXaxis()-> SetTitle(
"TIP (cm)");
278 h_ele_vertexTIP-> GetYaxis()-> SetTitle(
"Events");
284 histNum_=
new TH1F(
"h_recEleNum",
"# rec electrons",20, 0.,20.);
286 histNum_-> GetXaxis()-> SetTitle(
"N_{ele}");
287 histNum_-> GetYaxis()-> SetTitle(
"Events");
293 histSclEn_ =
new TH1F(
"h_scl_energy",
"ele supercluster energy",nbinp,0.,pmax);
294 histSclEt_ =
new TH1F(
"h_scl_et",
"ele supercluster transverse energy",nbinpt,0.,ptmax);
295 histSclEta_ =
new TH1F(
"h_scl_eta",
"ele supercluster eta",nbineta,etamin,etamax);
296 histSclPhi_ =
new TH1F(
"h_scl_phi",
"ele supercluster phi",nbinphi,phimin,
phimax);
297 histSclSigEtaEta_ =
new TH1F(
"h_scl_sigetaeta",
"ele supercluster sigma eta eta",100,0.,0.05);
303 h_ele_ambiguousTracks =
new TH1F(
"h_ele_ambiguousTracks",
"ele # ambiguous tracks", 5,0.,5.);
304 h_ele_ambiguousTracksVsEta =
new TH2F(
"h_ele_ambiguousTracksVsEta",
"ele # ambiguous tracks vs eta", nbineta2D,etamin,etamax,5,0.,5.);
305 h_ele_ambiguousTracksVsPhi =
new TH2F(
"h_ele_ambiguousTracksVsPhi",
"ele # ambiguous tracks vs phi", nbinphi2D,phimin,
phimax,5,0.,5.);
306 h_ele_ambiguousTracksVsPt =
new TH2F(
"h_ele_ambiguousTracksVsPt",
"ele # ambiguous tracks vs pt", nbinpt2D,0.,ptmax,5,0.,5.);
307 h_ele_foundHits =
new TH1F(
"h_ele_foundHits",
"ele track # found hits", nbinfhits,0.,fhitsmax);
308 h_ele_foundHitsVsEta =
new TH2F(
"h_ele_foundHitsVsEta",
"ele track # found hits vs eta", nbineta2D,etamin,etamax,nbinfhits,0.,fhitsmax);
309 h_ele_foundHitsVsPhi =
new TH2F(
"h_ele_foundHitsVsPhi",
"ele track # found hits vs phi", nbinphi2D,phimin,
phimax,nbinfhits,0.,fhitsmax);
310 h_ele_foundHitsVsPt =
new TH2F(
"h_ele_foundHitsVsPt",
"ele track # found hits vs pt", nbinpt2D,0.,ptmax,nbinfhits,0.,fhitsmax);
311 h_ele_lostHits =
new TH1F(
"h_ele_lostHits",
"ele track # lost hits", 5,0.,5.);
312 h_ele_lostHitsVsEta =
new TH2F(
"h_ele_lostHitsVsEta",
"ele track # lost hits vs eta", nbineta2D,etamin,etamax,nbinlhits,0.,lhitsmax);
313 h_ele_lostHitsVsPhi =
new TH2F(
"h_ele_lostHitsVsPhi",
"ele track # lost hits vs eta", nbinphi2D,phimin,
phimax,nbinlhits,0.,lhitsmax);
314 h_ele_lostHitsVsPt =
new TH2F(
"h_ele_lostHitsVsPt",
"ele track # lost hits vs eta", nbinpt2D,0.,ptmax,nbinlhits,0.,lhitsmax);
315 h_ele_chi2 =
new TH1F(
"h_ele_chi2",
"ele track #chi^{2}", 100,0.,15.);
316 h_ele_chi2VsEta =
new TH2F(
"h_ele_chi2VsEta",
"ele track #chi^{2} vs eta", nbineta2D,etamin,etamax,50,0.,15.);
317 h_ele_chi2VsPhi =
new TH2F(
"h_ele_chi2VsPhi",
"ele track #chi^{2} vs phi", nbinphi2D,phimin,
phimax,50,0.,15.);
318 h_ele_chi2VsPt =
new TH2F(
"h_ele_chi2VsPt",
"ele track #chi^{2} vs pt", nbinpt2D,0.,ptmax,50,0.,15.);
320 h_ele_foundHits->GetXaxis()-> SetTitle(
"N_{hits}");
321 h_ele_foundHits->GetYaxis()-> SetTitle(
"Events");
322 h_ele_lostHits->GetXaxis()-> SetTitle(
"N_{lost hits}");
323 h_ele_lostHits->GetYaxis()-> SetTitle(
"Events");
324 h_ele_chi2->GetXaxis()-> SetTitle(
"#Chi^{2}");
325 h_ele_chi2->GetYaxis()-> SetTitle(
"Events");
331 h_ele_EoP =
new TH1F(
"h_ele_EoP",
"ele E/P_{vertex}", nbineop,0.,eopmax);
333 h_ele_EeleOPout =
new TH1F(
"h_ele_EeleOPout",
"ele E_{ele}/P_{out}", nbineop,0.,eopmax);
334 h_ele_dEtaSc_propVtx =
new TH1F(
"h_ele_dEtaSc_propVtx",
"ele #eta_{sc} - #eta_{tr}, prop from vertex", nbindetamatch,detamatchmin,detamatchmax);
335 h_ele_dPhiSc_propVtx =
new TH1F(
"h_ele_dPhiSc_propVtx",
"ele #phi_{sc} - #phi_{tr}, prop from vertex", nbindphimatch,dphimatchmin,dphimatchmax);
336 h_ele_dEtaCl_propOut =
new TH1F(
"h_ele_dEtaCl_propOut",
"ele #eta_{cl} - #eta_{tr}, prop from outermost", nbindetamatch,detamatchmin,detamatchmax);
337 h_ele_dPhiCl_propOut =
new TH1F(
"h_ele_dPhiCl_propOut",
"ele #phi_{cl} - #phi_{tr}, prop from outermost", nbindphimatch,dphimatchmin,dphimatchmax);
338 h_ele_dEtaEleCl_propOut =
new TH1F(
"h_ele_dEtaEleCl_propOut",
"ele #eta_{EleCl} - #eta_{tr}, prop from outermost", nbindetamatch,detamatchmin,detamatchmax);
339 h_ele_dPhiEleCl_propOut =
new TH1F(
"h_ele_dPhiEleCl_propOut",
"ele #phi_{EleCl} - #phi_{tr}, prop from outermost", nbindphimatch,dphimatchmin,dphimatchmax);
340 h_ele_HoE =
new TH1F(
"h_ele_HoE",
"ele hadronic energy / em energy", nbinhoe, hoemin, hoemax) ;
341 h_ele_outerP =
new TH1F(
"h_ele_outerP",
"ele track outer p, mean", nbinp,0.,pmax);
342 h_ele_outerP_mode =
new TH1F(
"h_ele_outerP_mode",
"ele track outer p, mode", nbinp,0.,pmax);
343 h_ele_outerPt =
new TH1F(
"h_ele_outerPt",
"ele track outer p_{T}, mean", nbinpt,0.,ptmax);
344 h_ele_outerPt_mode =
new TH1F(
"h_ele_outerPt_mode",
"ele track outer p_{T}, mode", nbinpt,0.,ptmax);
346 h_ele_PinMnPout =
new TH1F(
"h_ele_PinMnPout",
"ele track inner p - outer p, mean" ,nbinp,0.,200.);
347 h_ele_PinMnPout_mode =
new TH1F(
"h_ele_PinMnPout_mode",
"ele track inner p - outer p, mode" ,nbinp,0.,100.);
349 h_ele_mva =
new TH1F(
"h_ele_mva",
"ele identification mva",100,-1.,1.);
350 h_ele_provenance =
new TH1F(
"h_ele_provenance",
"ele provenance",5,-2.,3.);
352 h_ele_PinMnPout->GetXaxis()-> SetTitle(
"P_{vertex} - P_{out} (GeV/c)");
353 h_ele_PinMnPout->GetYaxis()-> SetTitle(
"Events");
354 h_ele_PinMnPout_mode->GetXaxis()-> SetTitle(
"P_{vertex} - P_{out}, mode (GeV/c)");
355 h_ele_PinMnPout_mode->GetYaxis()-> SetTitle(
"Events");
357 h_ele_outerP->GetXaxis()-> SetTitle(
"P_{out} (GeV/c)");
358 h_ele_outerP->GetYaxis()-> SetTitle(
"Events");
359 h_ele_outerP_mode->GetXaxis()-> SetTitle(
"P_{out} (GeV/c)");
360 h_ele_outerP_mode->GetYaxis()-> SetTitle(
"Events");
362 h_ele_outerPt->GetXaxis()-> SetTitle(
"P_{T out} (GeV/c)");
363 h_ele_outerPt->GetYaxis()-> SetTitle(
"Events");
364 h_ele_outerPt_mode->GetXaxis()-> SetTitle(
"P_{T out} (GeV/c)");
365 h_ele_outerPt_mode->GetYaxis()-> SetTitle(
"Events");
367 h_ele_EoP->GetXaxis()-> SetTitle(
"E/P_{vertex}");
368 h_ele_EoP->GetYaxis()-> SetTitle(
"Events");
372 h_ele_EeleOPout->GetXaxis()-> SetTitle(
"E_{ele}/P_{out}");
373 h_ele_EeleOPout->GetYaxis()-> SetTitle(
"Events");
375 h_ele_dEtaSc_propVtx-> GetXaxis()-> SetTitle(
"#eta_{sc} - #eta_{tr}");
376 h_ele_dEtaSc_propVtx-> GetYaxis()-> SetTitle(
"Events");
377 h_ele_dEtaCl_propOut-> GetXaxis()-> SetTitle(
"#eta_{seedcl} - #eta_{tr}");
378 h_ele_dEtaCl_propOut-> GetYaxis()-> SetTitle(
"Events");
379 h_ele_dEtaEleCl_propOut-> GetXaxis()-> SetTitle(
"#eta_{elecl} - #eta_{tr}");
380 h_ele_dEtaEleCl_propOut-> GetYaxis()-> SetTitle(
"Events");
381 h_ele_dPhiSc_propVtx-> GetXaxis()-> SetTitle(
"#phi_{sc} - #phi_{tr} (rad)");
382 h_ele_dPhiSc_propVtx-> GetYaxis()-> SetTitle(
"Events");
383 h_ele_dPhiCl_propOut-> GetXaxis()-> SetTitle(
"#phi_{seedcl} - #phi_{tr} (rad)");
384 h_ele_dPhiCl_propOut-> GetYaxis()-> SetTitle(
"Events");
385 h_ele_dPhiEleCl_propOut-> GetXaxis()-> SetTitle(
"#phi_{elecl} - #phi_{tr} (rad)");
386 h_ele_dPhiEleCl_propOut-> GetYaxis()-> SetTitle(
"Events");
387 h_ele_HoE-> GetXaxis()-> SetTitle(
"H/E") ;
388 h_ele_HoE-> GetYaxis()-> SetTitle(
"Events") ;
394 h_ele_tkSumPt_dr03 =
new TH1F(
"h_ele_tkSumPt_dr03",
"tk isolation sum, dR=0.3",100,0.0,20.);
395 h_ele_ecalRecHitSumEt_dr03=
new TH1F(
"h_ele_ecalRecHitSumEt_dr03",
"ecal isolation sum, dR=0.3",100,0.0,20.);
396 h_ele_hcalDepth1TowerSumEt_dr03=
new TH1F(
"h_ele_hcalDepth1TowerSumEt_dr03",
"hcal depth1 isolation sum, dR=0.3",100,0.0,20.);
397 h_ele_hcalDepth2TowerSumEt_dr03=
new TH1F(
"h_ele_hcalDepth2TowerSumEt_dr03",
"hcal depth2 isolation sum, dR=0.3",100,0.0,20.);
398 h_ele_tkSumPt_dr04=
new TH1F(
"h_ele_tkSumPt_dr04",
"hcal isolation sum",100,0.0,20.);
399 h_ele_ecalRecHitSumEt_dr04=
new TH1F(
"h_ele_ecalRecHitSumEt_dr04",
"ecal isolation sum, dR=0.4",100,0.0,20.);
400 h_ele_hcalDepth1TowerSumEt_dr04=
new TH1F(
"h_ele_hcalDepth1TowerSumEt_dr04",
"hcal depth1 isolation sum, dR=0.4",100,0.0,20.);
401 h_ele_hcalDepth2TowerSumEt_dr04=
new TH1F(
"h_ele_hcalDepth2TowerSumEt_dr04",
"hcal depth2 isolation sum, dR=0.4",100,0.0,20.);
406 h_ele_mee_os =
new TH1F(
"h_ele_mee_os",
"ele pairs invariant mass, opposite sign", nbinmee, meemin, meemax );
452 std::cout <<
"efficiency calculation " << std::endl;
455 TH1F *h_ele_ptEff = (TH1F*)h_ele_matchingObjectPt_matched->Clone(
"h_ele_ptEff");
456 h_ele_ptEff->Reset();
457 h_ele_ptEff->Divide(h_ele_matchingObjectPt_matched,h_matchingObjectPt,1,1,
"b");
458 h_ele_ptEff->GetXaxis()->SetTitle(
"p_{T} (GeV/c)");
459 h_ele_ptEff->GetYaxis()->SetTitle(
"Efficiency");
462 TH1F *h_ele_etaEff = (TH1F*)h_ele_matchingObjectEta_matched->Clone(
"h_ele_etaEff");
463 h_ele_etaEff->Reset();
464 h_ele_etaEff->Divide(h_ele_matchingObjectEta_matched,h_matchingObjectEta,1,1,
"b");
465 h_ele_etaEff->Print();
466 h_ele_etaEff->GetXaxis()->SetTitle(
"#eta");
467 h_ele_etaEff->GetYaxis()->SetTitle(
"Efficiency");
470 TH1F *h_ele_absetaEff = (TH1F*)h_ele_matchingObjectAbsEta_matched->Clone(
"h_ele_absetaEff");
471 h_ele_absetaEff->Reset();
472 h_ele_absetaEff->Divide(h_ele_matchingObjectAbsEta_matched,h_matchingObjectAbsEta,1,1,
"b");
473 h_ele_absetaEff->GetXaxis()->SetTitle(
"|#eta|");
474 h_ele_absetaEff->GetYaxis()->SetTitle(
"Efficiency");
477 TH1F *h_ele_phiEff = (TH1F*)h_ele_matchingObjectPhi_matched->Clone(
"h_ele_phiEff");
478 h_ele_phiEff->Reset();
479 h_ele_phiEff->Divide(h_ele_matchingObjectPhi_matched,h_matchingObjectPhi,1,1,
"b");
480 h_ele_phiEff->GetXaxis()->SetTitle(
"#phi (rad)");
481 h_ele_phiEff->GetYaxis()->SetTitle(
"Efficiency");
484 TH1F *h_ele_zEff = (TH1F*)h_ele_matchingObjectZ_matched->Clone(
"h_ele_zEff");
486 h_ele_zEff->Divide(h_ele_matchingObjectZ_matched,h_matchingObjectZ,1,1,
"b");
488 h_ele_zEff->GetXaxis()->SetTitle(
"z (cm)");
489 h_ele_zEff->GetYaxis()->SetTitle(
"Efficiency");
502 h_matchingObjectNum->Write();
509 h_matchingObjectEta->Write();
510 h_matchingObjectAbsEta->Write();
511 h_matchingObjectP->Write();
512 h_matchingObjectPt->Write();
513 h_matchingObjectPhi->Write();
514 h_matchingObjectZ->Write();
519 h_ele_charge->Write();
522 h_ele_vertexPt->Write();
523 h_ele_vertexEta->Write();
524 h_ele_vertexPhi->Write();
525 h_ele_vertexX->Write();
526 h_ele_vertexY ->Write();
527 h_ele_vertexZ->Write();
529 h_ele_vertexTIP->Write();
533 h_ele_matchingObjectPt_matched->Write();
534 h_ele_matchingObjectAbsEta_matched->Write();
535 h_ele_matchingObjectEta_matched->Write();
536 h_ele_matchingObjectPhi_matched->Write();
537 h_ele_matchingObjectZ_matched->Write();
553 histSclEta_->Write();
554 histSclPhi_->Write();
555 histSclSigEtaEta_->Write();
558 h_ele_ambiguousTracks->Write();
559 h_ele_ambiguousTracksVsEta->Write();
560 h_ele_ambiguousTracksVsPhi->Write();
561 h_ele_ambiguousTracksVsPt->Write();
563 h_ele_foundHits->Write();
564 h_ele_foundHitsVsEta->Write();
565 h_ele_foundHitsVsPhi->Write();
566 h_ele_foundHitsVsPt->Write();
568 h_ele_lostHits->Write();
569 h_ele_lostHitsVsEta->Write();
570 h_ele_lostHitsVsPhi->Write();
571 h_ele_lostHitsVsPt->Write();
573 h_ele_chi2 ->Write();
574 h_ele_chi2VsEta ->Write();
575 h_ele_chi2VsPhi ->Write();
576 h_ele_chi2VsPt->Write();
578 h_ele_PinMnPout->Write();
579 h_ele_PinMnPout_mode->Write();
580 h_ele_outerP ->Write();
581 h_ele_outerP_mode->Write();
582 h_ele_outerPt->Write();
583 h_ele_outerPt_mode ->Write();
588 h_ele_EeleOPout->Write();
589 h_ele_dEtaSc_propVtx->Write();
590 h_ele_dPhiSc_propVtx->Write();
591 h_ele_dEtaCl_propOut->Write();
592 h_ele_dPhiCl_propOut->Write();
593 h_ele_dEtaEleCl_propOut->Write();
594 h_ele_dPhiEleCl_propOut->Write();
599 h_ele_mee_os-> GetXaxis()-> SetTitle(
"m_{e^{+}e^{-}} (GeV/c^{2})");
600 h_ele_mee_os-> GetYaxis()-> SetTitle(
"Events");
601 h_ele_mee_os->Write();
608 h_ele_etaEff->Write();
610 h_ele_phiEff->Write();
611 h_ele_absetaEff->Write();
612 h_ele_ptEff->Write();
617 h_ele_provenance->Write();
620 h_ele_tkSumPt_dr03->GetXaxis()->SetTitle(
"TkIsoSum, cone 0.3 (GeV/c)");
621 h_ele_tkSumPt_dr03->GetYaxis()->SetTitle(
"Events");
622 h_ele_ecalRecHitSumEt_dr03->GetXaxis()->SetTitle(
"EcalIsoSum, cone 0.3 (GeV)");
623 h_ele_ecalRecHitSumEt_dr03->GetYaxis()->SetTitle(
"Events");
624 h_ele_hcalDepth1TowerSumEt_dr03->GetXaxis()->SetTitle(
"Hcal1IsoSum, cone 0.3 (GeV)");
625 h_ele_hcalDepth1TowerSumEt_dr03->GetYaxis()->SetTitle(
"Events");
626 h_ele_hcalDepth2TowerSumEt_dr03->GetXaxis()->SetTitle(
"Hcal2IsoSum, cone 0.3 (GeV)");
627 h_ele_hcalDepth2TowerSumEt_dr03->GetYaxis()->SetTitle(
"Events");
628 h_ele_tkSumPt_dr04->GetXaxis()->SetTitle(
"TkIsoSum, cone 0.4 (GeV/c)");
629 h_ele_tkSumPt_dr04->GetYaxis()->SetTitle(
"Events");
630 h_ele_ecalRecHitSumEt_dr04->GetXaxis()->SetTitle(
"EcalIsoSum, cone 0.4 (GeV)");
631 h_ele_ecalRecHitSumEt_dr04->GetYaxis()->SetTitle(
"Events");
632 h_ele_hcalDepth1TowerSumEt_dr04->GetXaxis()->SetTitle(
"Hcal1IsoSum, cone 0.4 (GeV)");
633 h_ele_hcalDepth1TowerSumEt_dr04->GetYaxis()->SetTitle(
"Events");
634 h_ele_hcalDepth2TowerSumEt_dr04->GetXaxis()->SetTitle(
"Hcal2IsoSum, cone 0.4 (GeV)");
635 h_ele_hcalDepth2TowerSumEt_dr04->GetYaxis()->SetTitle(
"Events");
637 h_ele_tkSumPt_dr03->Write();
638 h_ele_ecalRecHitSumEt_dr03->Write();
639 h_ele_hcalDepth1TowerSumEt_dr03->Write();
640 h_ele_hcalDepth2TowerSumEt_dr03->Write();
641 h_ele_tkSumPt_dr04->Write();
642 h_ele_ecalRecHitSumEt_dr04->Write();
643 h_ele_hcalDepth1TowerSumEt_dr04->Write();
644 h_ele_hcalDepth2TowerSumEt_dr04->Write();
652 edm::LogInfo(
"DQMAnalyzer::analyze")<<
"Treating event "<<iEvent.
id() ;
654 if (!trigger(iEvent))
return ;
658 iEvent.
getByLabel(electronCollection_,gsfElectrons);
659 edm::LogInfo(
"DQMAnalyzer::analyze")<<
"Event has "<<gsfElectrons.
product()->size()<<
" electrons" ;
661 iEvent.
getByLabel(matchingObjectCollection_,recoClusters);
665 histNum_->Fill((*gsfElectrons).size());
668 reco::GsfElectronCollection::const_iterator gsfIter ;
670 ( gsfIter=gsfElectrons->begin() ;
671 gsfIter!=gsfElectrons->end();
676 (gsfIter->vertex().x()-bs.
position().x()) * (gsfIter->vertex().x()-bs.
position().x()) +
677 (gsfIter->vertex().y()-bs.
position().y()) * (gsfIter->vertex().y()-bs.
position().y()) ;
678 vertexTIP =
sqrt(vertexTIP) ;
681 if (!selected(gsfIter,vertexTIP)) continue ;
684 h_ele_charge->Fill( gsfIter->charge() );
686 h_ele_vertexPt->Fill( gsfIter->pt() );
687 h_ele_Et->Fill( gsfIter->superCluster()->energy()/cosh( gsfIter->superCluster()->eta()) );
688 h_ele_vertexEta->Fill( gsfIter->eta() );
689 h_ele_vertexPhi->Fill( gsfIter->phi() );
690 h_ele_vertexX->Fill( gsfIter->vertex().x() );
691 h_ele_vertexY->Fill( gsfIter->vertex().y() );
692 h_ele_vertexZ->Fill( gsfIter->vertex().z() );
693 h_ele_vertexTIP->Fill( vertexTIP );
700 histSclEn_->Fill(sclRef->energy());
701 double R=TMath::Sqrt(sclRef->x()*sclRef->x() + sclRef->y()*sclRef->y() +sclRef->z()*sclRef->z());
702 double Rt=TMath::Sqrt(sclRef->x()*sclRef->x() + sclRef->y()*sclRef->y());
703 histSclEt_->Fill(sclRef->energy()*(Rt/
R));
704 histSclEta_->Fill(sclRef->eta());
705 histSclPhi_->Fill(sclRef->phi());
706 histSclSigEtaEta_->Fill(gsfIter->scSigmaEtaEta());
709 h_ele_ambiguousTracks->Fill( gsfIter->ambiguousGsfTracksSize() );
710 h_ele_ambiguousTracksVsEta->Fill( gsfIter->eta(), gsfIter->ambiguousGsfTracksSize() );
711 h_ele_ambiguousTracksVsPhi->Fill( gsfIter->phi(), gsfIter->ambiguousGsfTracksSize() );
712 h_ele_ambiguousTracksVsPt->Fill( gsfIter->pt(), gsfIter->ambiguousGsfTracksSize() );
715 h_ele_foundHits->Fill( gsfIter->gsfTrack()->numberOfValidHits() );
716 h_ele_foundHitsVsEta->Fill( gsfIter->eta(), gsfIter->gsfTrack()->numberOfValidHits() );
717 h_ele_foundHitsVsPhi->Fill( gsfIter->phi(), gsfIter->gsfTrack()->numberOfValidHits() );
718 h_ele_foundHitsVsPt->Fill( gsfIter->pt(), gsfIter->gsfTrack()->numberOfValidHits() );
719 h_ele_lostHits->Fill( gsfIter->gsfTrack()->numberOfLostHits() );
720 h_ele_lostHitsVsEta->Fill( gsfIter->eta(), gsfIter->gsfTrack()->numberOfLostHits() );
721 h_ele_lostHitsVsPhi->Fill( gsfIter->phi(), gsfIter->gsfTrack()->numberOfLostHits() );
722 h_ele_lostHitsVsPt->Fill( gsfIter->pt(), gsfIter->gsfTrack()->numberOfLostHits() );
723 h_ele_chi2->Fill( gsfIter->gsfTrack()->normalizedChi2() );
724 h_ele_chi2VsEta->Fill( gsfIter->eta(), gsfIter->gsfTrack()->normalizedChi2() );
725 h_ele_chi2VsPhi->Fill( gsfIter->phi(), gsfIter->gsfTrack()->normalizedChi2() );
726 h_ele_chi2VsPt->Fill( gsfIter->pt(), gsfIter->gsfTrack()->normalizedChi2() );
732 h_ele_PinMnPout->Fill( gsfIter->gsfTrack()->innerMomentum().R() - gsfIter->gsfTrack()->outerMomentum().R() );
733 h_ele_outerP->Fill( gsfIter->gsfTrack()->outerMomentum().R() );
734 h_ele_outerPt->Fill( gsfIter->gsfTrack()->outerMomentum().Rho() );
738 h_ele_PinMnPout_mode->Fill( gsfIter->trackMomentumAtVtx().R() - gsfIter->trackMomentumOut().R() );
739 h_ele_outerP_mode->Fill( gsfIter->trackMomentumOut().R() );
740 h_ele_outerPt_mode->Fill( gsfIter->trackMomentumOut().Rho() );
757 h_ele_EoP->Fill( gsfIter->eSuperClusterOverP() );
758 h_ele_EeleOPout->Fill( gsfIter->eEleClusterOverPout() );
759 h_ele_dEtaSc_propVtx->Fill(gsfIter->deltaEtaSuperClusterTrackAtVtx());
760 h_ele_dPhiSc_propVtx->Fill(gsfIter->deltaPhiSuperClusterTrackAtVtx());
761 h_ele_dEtaCl_propOut->Fill(gsfIter->deltaEtaSeedClusterTrackAtCalo());
762 h_ele_dPhiCl_propOut->Fill(gsfIter->deltaPhiSeedClusterTrackAtCalo());
763 h_ele_dEtaEleCl_propOut->Fill(gsfIter->deltaEtaEleClusterTrackAtCalo());
764 h_ele_dPhiEleCl_propOut->Fill(gsfIter->deltaPhiEleClusterTrackAtCalo());
765 h_ele_HoE->Fill(gsfIter->hadronicOverEm());
771 h_ele_mva->Fill(gsfIter->mva()) ;
772 if (gsfIter->ecalDrivenSeed()) h_ele_provenance->Fill(1.) ;
773 if (gsfIter->trackerDrivenSeed()) h_ele_provenance->Fill(-1.) ;
774 if (gsfIter->trackerDrivenSeed()||gsfIter->ecalDrivenSeed()) h_ele_provenance->Fill(0.);
775 if (gsfIter->trackerDrivenSeed()&&!gsfIter->ecalDrivenSeed()) h_ele_provenance->Fill(-2.);
776 if (!gsfIter->trackerDrivenSeed()&&gsfIter->ecalDrivenSeed()) h_ele_provenance->Fill(2.);
778 h_ele_tkSumPt_dr03->Fill(gsfIter->dr03TkSumPt());
779 h_ele_ecalRecHitSumEt_dr03->Fill(gsfIter->dr03EcalRecHitSumEt());
780 h_ele_hcalDepth1TowerSumEt_dr03->Fill(gsfIter->dr03HcalDepth1TowerSumEt());
781 h_ele_hcalDepth2TowerSumEt_dr03->Fill(gsfIter->dr03HcalDepth2TowerSumEt());
782 h_ele_tkSumPt_dr04->Fill(gsfIter->dr04TkSumPt());
783 h_ele_ecalRecHitSumEt_dr04->Fill(gsfIter->dr04EcalRecHitSumEt());
784 h_ele_hcalDepth1TowerSumEt_dr04->Fill(gsfIter->dr04HcalDepth1TowerSumEt());
785 h_ele_hcalDepth2TowerSumEt_dr04->Fill(gsfIter->dr04HcalDepth2TowerSumEt());
789 int matchingObjectNum=0 ;
790 reco::SuperClusterCollection::const_iterator moIter ;
792 ( moIter=recoClusters->begin() ;
793 moIter!=recoClusters->end() ;
800 ( moIter->energy()/cosh(moIter->eta())>maxPtMatchingObject_ ||
801 fabs(moIter->eta())> maxAbsEtaMatchingObject_ )
809 h_matchingObjectEta->Fill( moIter->eta() );
810 h_matchingObjectAbsEta->Fill( fabs(moIter->eta()) );
811 h_matchingObjectP->Fill( moIter->energy() );
812 h_matchingObjectPt->Fill( moIter->energy()/cosh(moIter->eta()) );
813 h_matchingObjectPhi->Fill( moIter->phi() );
814 h_matchingObjectZ->Fill( moIter->z() );
817 bool okGsfFound =
false;
818 double gsfOkRatio = 999999.;
820 reco::GsfElectronCollection::const_iterator gsfIter ;
822 ( gsfIter=gsfElectrons->begin() ;
823 gsfIter!=gsfElectrons->end() ;
827 (gsfIter->vertex().x()-bs.
position().x()) * (gsfIter->vertex().x()-bs.
position().x()) +
828 (gsfIter->vertex().y()-bs.
position().y()) * (gsfIter->vertex().y()-bs.
position().y()) ;
829 vertexTIP =
sqrt(vertexTIP) ;
832 if (!selected(gsfIter,vertexTIP)) continue ;
836 reco::GsfElectronCollection::const_iterator gsfIter2 ;
838 ( gsfIter2=gsfIter+1 ;
839 gsfIter2!=gsfElectrons->end() ;
843 float mee2 = p12.Dot(p12) ;
844 bool opsign = (gsfIter->charge()*gsfIter2->charge()<0.) ;
845 float invMass =
sqrt(mee2) ;
847 if (TPchecksign_ && !opsign) break ;
853 if(PROBEetcut_ && (gsfIter2->superCluster()->energy()/cosh(gsfIter2->superCluster()->eta())<minEt_))
continue;
854 if(PROBEcheckclass_ && (gsfIter2->classification()==
GsfElectron::SHOWERING || gsfIter2->isGap()))
continue;
856 if( invMass < massLow_ || invMass > massHigh_ ) continue ;
858 h_ele_mee_os->Fill(invMass) ;
859 bestGsfElectron =* gsfIter2 ;
865 reco::GsfElectronCollection::const_iterator gsfIter2 ;
867 ( gsfIter2=gsfIter+1;
868 gsfIter2!=gsfElectrons->end() ;
872 float mee2 = p12.Dot(p12) ;
874 float invMass =
sqrt(mee2) ;
875 h_ele_mee_os->Fill(invMass) ;
879 if ( matchingCondition_ ==
"Cone" )
881 double dphi = gsfIter->phi()-moIter->phi() ;
883 { dphi = dphi < 0? (CLHEP::twopi) + dphi : dphi - CLHEP::twopi ; }
889 double tmpGsfRatio = gsfIter->p()/moIter->energy();
890 if ( fabs(tmpGsfRatio-1) < fabs(gsfOkRatio-1) && Selection_ != 4 )
892 gsfOkRatio = tmpGsfRatio;
893 bestGsfElectron=*gsfIter;
906 h_ele_matchingObjectPt_matched->Fill( moIter->energy()/cosh(moIter->eta()) );
907 h_ele_matchingObjectPhi_matched->Fill( moIter->phi() );
908 h_ele_matchingObjectAbsEta_matched->Fill( fabs(moIter->eta()) );
909 h_ele_matchingObjectEta_matched->Fill( moIter->eta() );
910 h_ele_matchingObjectZ_matched->Fill( moIter->z() );
935 h_matchingObjectNum->Fill(matchingObjectNum) ;
943 e.
getByLabel(triggerResults_,triggerResults) ;
955 for (
unsigned int i=0;
i<triggerNames.
size();
i++)
961 unsigned int n = HLTPathsByName_.size() ;
962 for (
unsigned int i=0;
i!=
n;
i++)
964 HLTPathsByIndex_[
i]=triggerNames.
triggerIndex(HLTPathsByName_[
i]) ;
970 n=triggerResults->size() ;
971 HLTPathsByName_.resize(n) ;
972 HLTPathsByIndex_.resize(n) ;
973 for (
unsigned int i=0 ;
i!=
n ;
i++)
976 HLTPathsByIndex_[
i]=
i ;
997 unsigned int fired=0 ;
998 for (
unsigned int i=0 ;
i!=
n ;
i++ )
1000 if (HLTPathsByIndex_[
i]<triggerResults->size())
1002 if (triggerResults->accept(HLTPathsByIndex_[
i]))
1018 if ((Selection_>0)&&generalCut(gsfIter))
return false ;
1019 if ((Selection_>=1)&&etCut(gsfIter))
return false ;
1020 if ((Selection_>=2)&&isolationCut(gsfIter,vertexTIP))
return false ;
1021 if ((Selection_>=3)&&idCut(gsfIter))
return false ;
1027 if (fabs(gsfIter->eta())>maxAbsEta_)
return true ;
1028 if (gsfIter->pt()<minPt_)
return true ;
1030 if (gsfIter->isEB() && isEE_)
return true ;
1031 if (gsfIter->isEE() && isEB_)
return true ;
1032 if (gsfIter->isEBEEGap() && isNotEBEEGap_)
return true ;
1034 if (gsfIter->ecalDrivenSeed() && isTrackerDriven_)
return true ;
1035 if (gsfIter->trackerDrivenSeed() && isEcalDriven_)
return true ;
1042 if (gsfIter->superCluster()->energy()/cosh(gsfIter->superCluster()->eta())<minEt_)
return true ;
1049 if (gsfIter->isEB() && vertexTIP > tipMaxBarrel_)
return true ;
1050 if (gsfIter->isEE() && vertexTIP > tipMaxEndcaps_)
return true ;
1052 if (gsfIter->dr03TkSumPt() > tkIso03Max_)
return true ;
1053 if (gsfIter->isEB() && gsfIter->dr03HcalDepth1TowerSumEt() > hcalIso03Depth1MaxBarrel_)
return true ;
1054 if (gsfIter->isEE() && gsfIter->dr03HcalDepth1TowerSumEt() > hcalIso03Depth1MaxEndcaps_)
return true ;
1055 if (gsfIter->isEE() && gsfIter->dr03HcalDepth2TowerSumEt() > hcalIso03Depth2MaxEndcaps_)
return true ;
1056 if (gsfIter->isEB() && gsfIter->dr03EcalRecHitSumEt() > ecalIso03MaxBarrel_)
return true ;
1057 if (gsfIter->isEE() && gsfIter->dr03EcalRecHitSumEt() > ecalIso03MaxEndcaps_)
return true ;
1064 if (gsfIter->isEB() && gsfIter->eSuperClusterOverP() < eOverPMinBarrel_)
return true ;
1065 if (gsfIter->isEB() && gsfIter->eSuperClusterOverP() > eOverPMaxBarrel_)
return true ;
1066 if (gsfIter->isEE() && gsfIter->eSuperClusterOverP() < eOverPMinEndcaps_)
return true ;
1067 if (gsfIter->isEE() && gsfIter->eSuperClusterOverP() > eOverPMaxEndcaps_)
return true ;
1068 if (gsfIter->isEB() && fabs(gsfIter->deltaEtaSuperClusterTrackAtVtx()) < dEtaMinBarrel_)
return true ;
1069 if (gsfIter->isEB() && fabs(gsfIter->deltaEtaSuperClusterTrackAtVtx()) > dEtaMaxBarrel_)
return true ;
1070 if (gsfIter->isEE() && fabs(gsfIter->deltaEtaSuperClusterTrackAtVtx()) < dEtaMinEndcaps_)
return true ;
1071 if (gsfIter->isEE() && fabs(gsfIter->deltaEtaSuperClusterTrackAtVtx()) > dEtaMaxEndcaps_)
return true ;
1072 if (gsfIter->isEB() && fabs(gsfIter->deltaPhiSuperClusterTrackAtVtx()) < dPhiMinBarrel_)
return true ;
1073 if (gsfIter->isEB() && fabs(gsfIter->deltaPhiSuperClusterTrackAtVtx()) > dPhiMaxBarrel_)
return true ;
1074 if (gsfIter->isEE() && fabs(gsfIter->deltaPhiSuperClusterTrackAtVtx()) < dPhiMinEndcaps_)
return true ;
1075 if (gsfIter->isEE() && fabs(gsfIter->deltaPhiSuperClusterTrackAtVtx()) > dPhiMaxEndcaps_)
return true ;
1076 if (gsfIter->isEB() && gsfIter->scSigmaIEtaIEta() < sigIetaIetaMinBarrel_)
return true ;
1077 if (gsfIter->isEB() && gsfIter->scSigmaIEtaIEta() > sigIetaIetaMaxBarrel_)
return true ;
1078 if (gsfIter->isEE() && gsfIter->scSigmaIEtaIEta() < sigIetaIetaMinEndcaps_)
return true ;
1079 if (gsfIter->isEE() && gsfIter->scSigmaIEtaIEta() > sigIetaIetaMaxEndcaps_)
return true ;
1080 if (gsfIter->isEB() && gsfIter->hadronicOverEm() > hadronicOverEmMaxBarrel_)
return true ;
1081 if (gsfIter->isEE() && gsfIter->hadronicOverEm() > hadronicOverEmMaxEndcaps_)
return true ;
bool trigger(const edm::Event &e)
T getParameter(std::string const &) const
virtual edm::TriggerNames const & triggerNames(edm::TriggerResults const &triggerResults) const
bool generalCut(const reco::GsfElectronCollection::const_iterator &gsfIter)
bool getByType(Handle< PROD > &result) const
Strings::size_type size() const
bool accept(const edm::Event &event, const edm::TriggerResults &triggerTable, const std::string &triggerPath)
double deltaR(double eta1, double phi1, double eta2, double phi2)
bool selected(const reco::GsfElectronCollection::const_iterator &gsfIter, double vertexTIP)
XYZTLorentzVectorD XYZTLorentzVector
Lorentz vector with cylindrical internal representation using pseudorapidity.
unsigned int triggerIndex(std::string const &name) const
virtual SuperClusterRef superCluster() const
reference to a SuperCluster
bool isolationCut(const reco::GsfElectronCollection::const_iterator &gsfIter, double vertexTIP)
bool idCut(const reco::GsfElectronCollection::const_iterator &gsfIter)
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
virtual void analyze(const edm::Event &e, const edm::EventSetup &c)
bool etCut(const reco::GsfElectronCollection::const_iterator &gsfIter)
std::string const & triggerName(unsigned int index) const
T const * product() const
const Point & position() const
position
DQMAnalyzer(const edm::ParameterSet &conf)
Power< A, B >::type pow(const A &a, const B &b)