56 using boost::shared_ptr;
71 eventAuxiliary_( new edm::EventAuxiliary ),
87 =
new TH1F(
"h_deltaETvisible_MCEHT",
"Jet Et difference CaloTowers-MC"
90 =
new TH1F(
"h_deltaETvisible_MCPF" ,
"Jet Et difference ParticleFlow-MC"
105 unsigned int nev =
ev_->
size();
112 cout<<
"Number of events: "<< nev
136 cout<<
"calling PFRootEventManager::readOptions"<<endl;
153 catch(
const string& err ) {
164 string calibfilename;
166 if (!calibfilename.empty()) {
167 calibFile_ =
new std::ofstream(calibfilename.c_str());
168 std::cout <<
"Calib file name " << calibfilename <<
" " << calibfilename.c_str() << std::endl;
177 bool doOutTree =
false;
180 if(!outfilename.empty() ) {
181 outFile_ = TFile::Open(outfilename.c_str(),
"recreate");
201 options_->
GetOpt(
"pfjet_benchmark",
"outjetfile", outjetfilename);
207 options_->
GetOpt(
"pfjet_benchmark",
"plotAgainstReco", plotAgainstReco);
239 std::string outmetfilename;
240 options_->
GetOpt(
"pfmet_benchmark",
"outmetfile", outmetfilename);
249 bool pfmetBenchmarkDebug;
250 options_->
GetOpt(
"pfmet_benchmark",
"debug", pfmetBenchmarkDebug);
262 std::vector<unsigned int> vIgnoreParticlesIDs;
263 options_->
GetOpt(
"pfmet_benchmark",
"trueMetIgnoreParticlesIDs", vIgnoreParticlesIDs);
266 metManager_->SetIgnoreParticlesIDs(&vIgnoreParticlesIDs);
268 std::vector<unsigned int> trueMetSpecificIdCut;
269 std::vector<double> trueMetSpecificEtaCut;
270 options_->
GetOpt(
"pfmet_benchmark",
"trueMetSpecificIdCut", trueMetSpecificIdCut);
271 options_->
GetOpt(
"pfmet_benchmark",
"trueMetSpecificEtaCut", trueMetSpecificEtaCut);
272 if (trueMetSpecificIdCut.size()!=trueMetSpecificEtaCut.size())
std::cout <<
"Warning: PFRootEventManager: trueMetSpecificIdCut.size()!=trueMetSpecificEtaCut.size()" << std::endl;
273 else metManager_->SetSpecificIdCut(&trueMetSpecificIdCut,&trueMetSpecificEtaCut);
280 cout<<
"+++ Setting PFCandidate benchmark"<<endl;
282 dir = dir->mkdir(
"PFTask");
283 dir = dir->mkdir(
"particleFlowManager");
290 bool matchCharge =
true;
291 options_->
GetOpt(
"pfCandidate_benchmark",
"matchCharge", matchCharge);
296 static_cast<Benchmark::Mode>(mode));
300 cout<<
"+++ Done "<<endl;
307 cout<<
"+++ Setting PFDQM Monitoring " <<endl;
311 dqmFile_ = TFile::Open(dqmfilename.c_str(),
"recreate");
314 TDirectory* dir1 = dir->mkdir(
"PFJetValidation");
315 TDirectory* dir2 = dir->mkdir(
"PFMETValidation");
322 bool matchCharge =
true;
323 options_->
GetOpt(
"pfCandidate_benchmark",
"matchCharge", matchCharge);
328 ptMin, 10e5, -4.5, 4.5, -10.0, 10.0,
false);
332 ptMin, 10e5, -4.5, 4.5, -10.0, 10.0,
false);
338 std::string outputFile0;
340 TH2F* hBNeighbour0 = 0;
341 TH2F* hENeighbour0 = 0;
343 if(!outputFile0.empty() ) {
344 file0 = TFile::Open(outputFile0.c_str(),
"recreate");
345 hBNeighbour0 =
new TH2F(
"BNeighbour0",
"f_{Neighbours} vs 1/E_{Seed} (ECAL Barrel)",500, 0., 0.5, 1000,0.,1.);
346 hENeighbour0 =
new TH2F(
"ENeighbour0",
"f_{Neighbours} vs 1/E_{Seed} (ECAL Endcap)",500, 0., 0.2, 1000,0.,1.);
349 std::string outputFile1;
351 TH2F* hBNeighbour1 = 0;
352 TH2F* hENeighbour1 = 0;
354 if(!outputFile1.empty() ) {
355 file1 = TFile::Open(outputFile1.c_str(),
"recreate");
356 hBNeighbour1 =
new TH2F(
"BNeighbour1",
"f_{Neighbours} vs 1/E_{Seed} (HCAL Barrel)",500, 0., 0.05, 400,0.,1.);
357 hENeighbour1 =
new TH2F(
"ENeighbour1",
"f_{Neighbours} vs 1/E_{Seed} (HCAL Endcap)",500, 0., 0.05, 400,0.,1.);
360 std::string outputFile2;
362 TH2F* hBNeighbour2 = 0;
363 TH2F* hENeighbour2 = 0;
365 if(!outputFile2.empty() ) {
366 file2 = TFile::Open(outputFile2.c_str(),
"recreate");
367 hBNeighbour2 =
new TH2F(
"BNeighbour2",
"f_{Neighbours} vs 1/E_{Seed} (HFEM Barrel)",500, 0., 0.02, 400,0.,1.);
368 hENeighbour2 =
new TH2F(
"ENeighbour2",
"f_{Neighbours} vs 1/E_{Seed} (HFEM Endcap)",500, 0., 0.02, 400,0.,1.);
371 std::string outputFile3;
373 TH2F* hBNeighbour3 = 0;
374 TH2F* hENeighbour3 = 0;
376 if(!outputFile3.empty() ) {
377 file3 = TFile::Open(outputFile3.c_str(),
"recreate");
378 hBNeighbour3 =
new TH2F(
"BNeighbour3",
"f_{Neighbours} vs 1/E_{Seed} (HFHAD Barrel)",500, 0., 0.02, 400,0.,1.);
379 hENeighbour3 =
new TH2F(
"ENeighbour3",
"f_{Neighbours} vs 1/E_{Seed} (HFHAD Endcap)",500, 0., 0.02, 400,0.,1.);
382 std::string outputFile4;
384 TH2F* hBNeighbour4 = 0;
385 TH2F* hENeighbour4 = 0;
387 if(!outputFile4.empty() ) {
388 file4 = TFile::Open(outputFile4.c_str(),
"recreate");
389 hBNeighbour4 =
new TH2F(
"BNeighbour4",
"f_{Neighbours} vs 1/E_{Seed} (Preshower Barrel)",200, 0., 1000., 400,0.,1.);
390 hENeighbour4 =
new TH2F(
"ENeighbour4",
"f_{Neighbours} vs 1/E_{Seed} (Preshower Endcap)",200, 0., 1000., 400,0.,1.);
410 cerr<<
"PFRootEventManager::ReadOptions, bad filter/taus option."<<endl
411 <<
"please use : "<<endl
412 <<
"\tfilter taus n_charged n_neutral"<<endl;
422 bool clusteringDebug =
false;
429 double threshEcalBarrel = 0.1;
430 options_->
GetOpt(
"clustering",
"thresh_Ecal_Barrel", threshEcalBarrel);
432 double threshPtEcalBarrel = 0.0;
433 options_->
GetOpt(
"clustering",
"thresh_Pt_Ecal_Barrel", threshPtEcalBarrel);
435 double threshSeedEcalBarrel = 0.3;
437 threshSeedEcalBarrel);
439 double threshPtSeedEcalBarrel = 0.0;
441 threshPtSeedEcalBarrel);
443 double threshCleanEcalBarrel = 1E5;
445 threshCleanEcalBarrel);
447 std::vector<double> minS4S1CleanEcalBarrel;
449 minS4S1CleanEcalBarrel);
451 double threshDoubleSpikeEcalBarrel = 10.;
453 threshDoubleSpikeEcalBarrel);
455 double minS6S2DoubleSpikeEcalBarrel = 0.04;
457 minS6S2DoubleSpikeEcalBarrel);
459 double threshEcalEndcap = 0.2;
460 options_->
GetOpt(
"clustering",
"thresh_Ecal_Endcap", threshEcalEndcap);
462 double threshPtEcalEndcap = 0.0;
463 options_->
GetOpt(
"clustering",
"thresh_Pt_Ecal_Endcap", threshPtEcalEndcap);
465 double threshSeedEcalEndcap = 0.8;
467 threshSeedEcalEndcap);
469 double threshPtSeedEcalEndcap = 0.0;
471 threshPtSeedEcalEndcap);
473 double threshCleanEcalEndcap = 1E5;
475 threshCleanEcalEndcap);
477 std::vector<double> minS4S1CleanEcalEndcap;
479 minS4S1CleanEcalEndcap);
481 double threshDoubleSpikeEcalEndcap = 1E9;
483 threshDoubleSpikeEcalEndcap);
485 double minS6S2DoubleSpikeEcalEndcap = -1.;
487 minS6S2DoubleSpikeEcalEndcap);
489 double showerSigmaEcal = 3;
493 int nNeighboursEcal = 4;
494 options_->
GetOpt(
"clustering",
"neighbours_Ecal", nNeighboursEcal);
496 int posCalcNCrystalEcal = -1;
498 posCalcNCrystalEcal);
501 = threshEcalBarrel<threshEcalEndcap ? threshEcalBarrel:threshEcalEndcap;
505 bool useCornerCellsEcal =
false;
577 double threshHcalBarrel = 0.8;
578 options_->
GetOpt(
"clustering",
"thresh_Hcal_Barrel", threshHcalBarrel);
580 double threshPtHcalBarrel = 0.0;
581 options_->
GetOpt(
"clustering",
"thresh_Pt_Hcal_Barrel", threshPtHcalBarrel);
583 double threshSeedHcalBarrel = 1.4;
585 threshSeedHcalBarrel);
587 double threshPtSeedHcalBarrel = 0.0;
589 threshPtSeedHcalBarrel);
591 double threshCleanHcalBarrel = 1E5;
593 threshCleanHcalBarrel);
595 std::vector<double> minS4S1CleanHcalBarrel;
597 minS4S1CleanHcalBarrel);
599 double threshHcalEndcap = 0.8;
600 options_->
GetOpt(
"clustering",
"thresh_Hcal_Endcap", threshHcalEndcap);
602 double threshPtHcalEndcap = 0.0;
603 options_->
GetOpt(
"clustering",
"thresh_Pt_Hcal_Endcap", threshPtHcalEndcap);
605 double threshSeedHcalEndcap = 1.4;
607 threshSeedHcalEndcap);
609 double threshPtSeedHcalEndcap = 0.0;
611 threshPtSeedHcalEndcap);
613 double threshCleanHcalEndcap = 1E5;
615 threshCleanHcalEndcap);
617 std::vector<double> minS4S1CleanHcalEndcap;
619 minS4S1CleanHcalEndcap);
621 double showerSigmaHcal = 15;
625 int nNeighboursHcal = 4;
626 options_->
GetOpt(
"clustering",
"neighbours_Hcal", nNeighboursHcal);
628 int posCalcNCrystalHcal = 5;
630 posCalcNCrystalHcal);
632 bool useCornerCellsHcal =
false;
636 bool cleanRBXandHPDs =
false;
641 = threshHcalBarrel<threshHcalEndcap ? threshHcalBarrel:threshHcalEndcap;
681 double threshHFEM = 0.;
684 double threshPtHFEM = 0.;
687 double threshSeedHFEM = 0.001;
691 double threshPtSeedHFEM = 0.0;
695 double threshCleanHFEM = 1E5;
699 std::vector<double> minS4S1CleanHFEM;
703 double showerSigmaHFEM = 0.1;
707 int nNeighboursHFEM = 4;
708 options_->
GetOpt(
"clustering",
"neighbours_HFEM", nNeighboursHFEM);
710 int posCalcNCrystalHFEM = -1;
712 posCalcNCrystalHFEM);
714 bool useCornerCellsHFEM =
false;
718 double posCalcP1HFEM = threshHFEM;
746 double threshHFHAD = 0.;
749 double threshPtHFHAD = 0.;
752 double threshSeedHFHAD = 0.001;
756 double threshPtSeedHFHAD = 0.0;
760 double threshCleanHFHAD = 1E5;
764 std::vector<double> minS4S1CleanHFHAD;
768 double showerSigmaHFHAD = 0.1;
772 int nNeighboursHFHAD = 4;
773 options_->
GetOpt(
"clustering",
"neighbours_HFHAD", nNeighboursHFHAD);
775 int posCalcNCrystalHFHAD = -1;
777 posCalcNCrystalHFHAD);
779 bool useCornerCellsHFHAD =
false;
781 useCornerCellsHFHAD);
783 double posCalcP1HFHAD = threshHFHAD;
811 double threshPS = 0.0001;
814 double threshPtPS = 0.0;
817 double threshSeedPS = 0.001;
821 double threshPtSeedPS = 0.0;
822 options_->
GetOpt(
"clustering",
"thresh_Pt_Seed_PS", threshPtSeedPS);
824 double threshCleanPS = 1E5;
827 std::vector<double> minS4S1CleanPS;
828 options_->
GetOpt(
"clustering",
"minS4S1_Clean_PS", minS4S1CleanPS);
831 double threshPSBarrel = threshPS;
832 double threshSeedPSBarrel = threshSeedPS;
834 double threshPtPSBarrel = threshPtPS;
835 double threshPtSeedPSBarrel = threshPtSeedPS;
837 double threshCleanPSBarrel = threshCleanPS;
838 std::vector<double> minS4S1CleanPSBarrel = minS4S1CleanPS;
840 double threshPSEndcap = threshPS;
841 double threshSeedPSEndcap = threshSeedPS;
843 double threshPtPSEndcap = threshPtPS;
844 double threshPtSeedPSEndcap = threshPtSeedPS;
846 double threshCleanPSEndcap = threshCleanPS;
847 std::vector<double> minS4S1CleanPSEndcap = minS4S1CleanPS;
849 double showerSigmaPS = 0.1;
853 int nNeighboursPS = 4;
856 int posCalcNCrystalPS = -1;
860 bool useCornerCellsPS =
false;
864 double posCalcP1PS = threshPS;
909 std::vector<double> DPtovPtCut;
910 std::vector<unsigned> NHitCut;
911 bool useIterTracking;
912 int nuclearInteractionsPurity;
915 options_->
GetOpt(
"particle_flow",
"useIterTracking", useIterTracking);
916 options_->
GetOpt(
"particle_flow",
"nuclearInteractionsPurity", nuclearInteractionsPurity);
919 std::vector<double> PhotonSelectionCuts;
921 options_->
GetOpt(
"particle_flow",
"photonSelection", PhotonSelectionCuts);
928 nuclearInteractionsPurity,
930 PhotonSelectionCuts);
933 cerr<<
"exception setting PFBlockAlgo parameters: "
934 <<err.what()<<
". terminating."<<endl;
940 bool blockAlgoDebug =
false;
944 bool AlgoDebug =
false;
949 boost::shared_ptr<PFEnergyCalibration>
953 bool usePFSCEleCalib;
954 std::vector<double> calibPFSCEle_Fbrem_barrel;
955 std::vector<double> calibPFSCEle_Fbrem_endcap;
956 std::vector<double> calibPFSCEle_barrel;
957 std::vector<double> calibPFSCEle_endcap;
958 options_->
GetOpt(
"particle_flow",
"usePFSCEleCalib",usePFSCEleCalib);
959 options_->
GetOpt(
"particle_flow",
"calibPFSCEle_Fbrem_barrel",calibPFSCEle_Fbrem_barrel);
960 options_->
GetOpt(
"particle_flow",
"calibPFSCEle_Fbrem_endcap",calibPFSCEle_Fbrem_endcap);
961 options_->
GetOpt(
"particle_flow",
"calibPFSCEle_barrel",calibPFSCEle_barrel);
962 options_->
GetOpt(
"particle_flow",
"calibPFSCEle_endcap",calibPFSCEle_endcap);
963 boost::shared_ptr<PFSCEnergyCalibration>
964 thePFSCEnergyCalibration (
new PFSCEnergyCalibration(calibPFSCEle_Fbrem_barrel,calibPFSCEle_Fbrem_endcap,
965 calibPFSCEle_barrel,calibPFSCEle_endcap ));
967 bool useEGammaSupercluster;
968 double sumEtEcalIsoForEgammaSC_barrel;
969 double sumEtEcalIsoForEgammaSC_endcap;
970 double coneEcalIsoForEgammaSC;
971 double sumPtTrackIsoForEgammaSC_barrel;
972 double sumPtTrackIsoForEgammaSC_endcap;
973 unsigned int nTrackIsoForEgammaSC;
974 double coneTrackIsoForEgammaSC;
975 bool useEGammaElectrons;
976 options_->
GetOpt(
"particle_flow",
"useEGammaSupercluster",useEGammaSupercluster);
977 options_->
GetOpt(
"particle_flow",
"sumEtEcalIsoForEgammaSC_barrel",sumEtEcalIsoForEgammaSC_barrel);
978 options_->
GetOpt(
"particle_flow",
"sumEtEcalIsoForEgammaSC_endcap",sumEtEcalIsoForEgammaSC_endcap);
979 options_->
GetOpt(
"particle_flow",
"coneEcalIsoForEgammaSC",coneEcalIsoForEgammaSC);
980 options_->
GetOpt(
"particle_flow",
"sumPtTrackIsoForEgammaSC_barrel",sumPtTrackIsoForEgammaSC_barrel);
981 options_->
GetOpt(
"particle_flow",
"sumPtTrackIsoForEgammaSC_endcap",sumPtTrackIsoForEgammaSC_endcap);
982 options_->
GetOpt(
"particle_flow",
"nTrackIsoForEgammaSC",nTrackIsoForEgammaSC);
983 options_->
GetOpt(
"particle_flow",
"coneTrackIsoForEgammaSC",coneTrackIsoForEgammaSC);
984 options_->
GetOpt(
"particle_flow",
"useEGammaElectrons",useEGammaElectrons);
987 bool calibHF_use =
false;
988 std::vector<double> calibHF_eta_step;
989 std::vector<double> calibHF_a_EMonly;
990 std::vector<double> calibHF_b_HADonly;
991 std::vector<double> calibHF_a_EMHAD;
992 std::vector<double> calibHF_b_EMHAD;
994 options_->
GetOpt(
"particle_flow",
"calib_calibHF_use",calibHF_use);
995 options_->
GetOpt(
"particle_flow",
"calib_calibHF_eta_step",calibHF_eta_step);
996 options_->
GetOpt(
"particle_flow",
"calib_calibHF_a_EMonly",calibHF_a_EMonly);
997 options_->
GetOpt(
"particle_flow",
"calib_calibHF_b_HADonly",calibHF_b_HADonly);
998 options_->
GetOpt(
"particle_flow",
"calib_calibHF_a_EMHAD",calibHF_a_EMHAD);
999 options_->
GetOpt(
"particle_flow",
"calib_calibHF_b_EMHAD",calibHF_b_EMHAD);
1001 boost::shared_ptr<PFEnergyCalibrationHF> thepfEnergyCalibrationHF
1002 (
new PFEnergyCalibrationHF(calibHF_use,calibHF_eta_step,calibHF_a_EMonly,calibHF_b_HADonly,calibHF_a_EMHAD,calibHF_b_EMHAD) ) ;
1008 double nSigmaECAL = 99999;
1010 double nSigmaHCAL = 99999;
1018 cerr<<
"exception setting PFAlgo parameters: "
1019 <<err.what()<<
". terminating."<<endl;
1024 std::vector<double> muonHCAL;
1025 std::vector<double> muonECAL;
1028 assert ( muonHCAL.size() == 2 && muonECAL.size() == 2 );
1030 double nSigmaTRACK = 3.0;
1033 double ptError = 1.0;
1036 std::vector<double> factors45;
1038 assert ( factors45.size() == 2 );
1040 bool usePFMuonMomAssign =
false;
1041 options_->
GetOpt(
"particle_flow",
"usePFMuonMomAssign", usePFMuonMomAssign);
1049 usePFMuonMomAssign);
1052 cerr<<
"exception setting PFAlgo Muon and Fake parameters: "
1053 <<err.what()<<
". terminating."<<endl;
1058 bool postHFCleaning =
true;
1059 options_->
GetOpt(
"particle_flow",
"postHFCleaning", postHFCleaning);
1060 double minHFCleaningPt = 5.;
1061 options_->
GetOpt(
"particle_flow",
"minHFCleaningPt", minHFCleaningPt);
1062 double minSignificance = 2.5;
1063 options_->
GetOpt(
"particle_flow",
"minSignificance", minSignificance);
1064 double maxSignificance = 2.5;
1065 options_->
GetOpt(
"particle_flow",
"maxSignificance", maxSignificance);
1066 double minSignificanceReduction = 1.4;
1067 options_->
GetOpt(
"particle_flow",
"minSignificanceReduction", minSignificanceReduction);
1068 double maxDeltaPhiPt = 7.0;
1069 options_->
GetOpt(
"particle_flow",
"maxDeltaPhiPt", maxDeltaPhiPt);
1070 double minDeltaMet = 0.4;
1079 minSignificanceReduction,
1084 cerr<<
"exception setting post HF cleaning parameters: "
1085 <<err.what()<<
". terminating."<<endl;
1095 bool usePFElectrons =
false;
1096 options_->
GetOpt(
"particle_flow",
"usePFElectrons", usePFElectrons);
1097 cout<<
"use PFElectrons "<<usePFElectrons<<endl;
1099 if( usePFElectrons ) {
1101 double mvaEleCut = -1.;
1104 bool applyCrackCorrections=
true;
1105 options_->
GetOpt(
"particle_flow",
"electron_crackCorrection",applyCrackCorrections);
1107 string mvaWeightFileEleID =
"";
1109 mvaWeightFileEleID);
1110 mvaWeightFileEleID =
expand(mvaWeightFileEleID);
1116 thePFSCEnergyCalibration,
1118 sumEtEcalIsoForEgammaSC_barrel,
1119 sumEtEcalIsoForEgammaSC_endcap,
1120 coneEcalIsoForEgammaSC,
1121 sumPtTrackIsoForEgammaSC_barrel,
1122 sumPtTrackIsoForEgammaSC_endcap,
1123 nTrackIsoForEgammaSC,
1124 coneTrackIsoForEgammaSC,
1125 applyCrackCorrections,
1128 useEGammaSupercluster);
1131 cerr<<
"exception setting PFAlgo Electron parameters: "
1132 <<err.what()<<
". terminating."<<endl;
1138 bool usePFPhotons =
true;
1139 string mvaWeightFileConvID =
"";
1140 double mvaConvCut=-1.;
1143 options_->
GetOpt(
"particle_flow",
"convID_mvaWeightFile", mvaWeightFileConvID);
1146 if( usePFPhotons ) {
1151 mvaWeightFileConvID,
1157 cerr<<
"exception setting PFAlgo Photon parameters: "
1158 <<err.what()<<
". terminating."<<endl;
1166 bool rejectTracks_Bad =
true;
1167 bool rejectTracks_Step45 =
true;
1168 bool usePFConversions =
false;
1169 bool usePFNuclearInteractions =
false;
1170 bool usePFV0s =
false;
1173 double dptRel_DispVtx = 10;
1176 options_->
GetOpt(
"particle_flow",
"usePFConversions", usePFConversions);
1178 options_->
GetOpt(
"particle_flow",
"usePFNuclearInteractions", usePFNuclearInteractions);
1179 options_->
GetOpt(
"particle_flow",
"dptRel_DispVtx", dptRel_DispVtx);
1183 rejectTracks_Step45,
1184 usePFNuclearInteractions,
1191 cerr<<
"exception setting PFAlgo displaced vertex parameters: "
1192 <<err.what()<<
". terminating."<<endl;
1197 bool bCorrect =
false;
1198 bool bCalibPrimary =
false;
1199 double dptRel_PrimaryTrack = 0;
1200 double dptRel_MergedTrack = 0;
1201 double ptErrorSecondary = 0;
1202 vector<double> nuclCalibFactors;
1205 options_->
GetOpt(
"particle_flow",
"bCalibPrimary", bCalibPrimary);
1206 options_->
GetOpt(
"particle_flow",
"dptRel_PrimaryTrack", dptRel_PrimaryTrack);
1207 options_->
GetOpt(
"particle_flow",
"dptRel_MergedTrack", dptRel_MergedTrack);
1208 options_->
GetOpt(
"particle_flow",
"ptErrorSecondary", ptErrorSecondary);
1209 options_->
GetOpt(
"particle_flow",
"nuclCalibFactors", nuclCalibFactors);
1215 cerr<<
"exception setting PFAlgo cand connector parameters: "
1216 <<err.what()<<
". terminating."<<endl;
1242 double mEtInputCut = 0.5;
1245 double mEInputCut = 0.;
1248 double seedThreshold = 1.0;
1251 double coneRadius = 0.5;
1254 double coneAreaFraction= 1.0;
1260 int maxIterations=100;
1263 double overlapThreshold = 0.75;
1269 double rparam = 1.0;
1287 cout <<
"----------------------------------" << endl;
1296 double coneAngle = 0.5;
1299 double seedEt = 0.4;
1302 double coneMerge = 100.0;
1310 cout <<
"Tau Benchmark Options : ";
1311 cout <<
"Angle=" << coneAngle <<
" seedEt=" << seedEt
1312 <<
" Merge=" << coneMerge << endl;
1376 cout<<
"Opening input root files"<<endl;
1385 catch(
string& err) {
1393 cout <<
"The rootfile(s) " << endl;
1396 cout <<
" is (are) not valid file(s) to open" << endl;
1399 cout <<
"The rootfile(s) : " << endl;
1402 cout<<
" are opened with " <<
ev_->
size() <<
" events." <<endl;
1406 std::string rechitsECALtagname;
1407 options_->
GetOpt(
"root",
"rechits_ECAL_inputTag", rechitsECALtagname);
1410 std::string rechitsHCALtagname;
1411 options_->
GetOpt(
"root",
"rechits_HCAL_inputTag", rechitsHCALtagname);
1414 std::string rechitsHFEMtagname;
1415 options_->
GetOpt(
"root",
"rechits_HFEM_inputTag", rechitsHFEMtagname);
1418 std::string rechitsHFHADtagname;
1419 options_->
GetOpt(
"root",
"rechits_HFHAD_inputTag", rechitsHFHADtagname);
1422 std::vector<string> rechitsCLEANEDtagnames;
1423 options_->
GetOpt(
"root",
"rechits_CLEANED_inputTags", rechitsCLEANEDtagnames);
1424 for (
unsigned tags = 0;
tags<rechitsCLEANEDtagnames.size(); ++
tags )
1431 std::string rechitsPStagname;
1432 options_->
GetOpt(
"root",
"rechits_PS_inputTag", rechitsPStagname);
1435 std::string recTrackstagname;
1439 std::string displacedRecTrackstagname;
1440 options_->
GetOpt(
"root",
"displacedRecTracks_inputTag", displacedRecTrackstagname);
1443 std::string primaryVerticestagname;
1444 options_->
GetOpt(
"root",
"primaryVertices_inputTag", primaryVerticestagname);
1447 std::string stdTrackstagname;
1451 std::string gsfrecTrackstagname;
1452 options_->
GetOpt(
"root",
"gsfrecTracks_inputTag", gsfrecTrackstagname);
1458 std::string convBremGsfrecTrackstagname;
1459 options_->
GetOpt(
"root",
"convBremGsfrecTracks_inputTag", convBremGsfrecTrackstagname);
1468 std::string muonstagname;
1476 std::string conversiontagname;
1477 options_->
GetOpt(
"root",
"conversion_inputTag", conversiontagname);
1485 std::string v0tagname;
1491 std::string photontagname;
1499 std::string pfNuclearTrackerVertextagname;
1500 options_->
GetOpt(
"root",
"PFDisplacedVertex_inputTag", pfNuclearTrackerVertextagname);
1504 std::string trueParticlestagname;
1505 options_->
GetOpt(
"root",
"trueParticles_inputTag", trueParticlestagname);
1508 std::string MCTruthtagname;
1512 std::string caloTowerstagname;
1513 options_->
GetOpt(
"root",
"caloTowers_inputTag", caloTowerstagname);
1516 std::string genJetstagname;
1521 std::string genParticlesforMETtagname;
1522 options_->
GetOpt(
"root",
"genParticlesforMET_inputTag", genParticlesforMETtagname);
1525 std::string genParticlesforJetstagname;
1526 options_->
GetOpt(
"root",
"genParticlesforJets_inputTag", genParticlesforJetstagname);
1530 std::string pfCandidatetagname;
1531 options_->
GetOpt(
"root",
"particleFlowCand_inputTag", pfCandidatetagname);
1534 std::string caloJetstagname;
1538 std::string corrcaloJetstagname;
1539 options_->
GetOpt(
"root",
"corrCaloJets_inputTag", corrcaloJetstagname);
1542 std::string pfJetstagname;
1546 std::string pfMetstagname;
1550 std::string caloMetstagname;
1554 std::string tcMetstagname;
1589 cout <<
" Writing DQM root file " << endl;
1612 LumisMap::const_iterator iL = iR->second.find( lumi );
1613 if( iL != iR->second.end() ) {
1614 EventToEntry::const_iterator iE = iL->second.find( event );
1615 if( iE != iL->second.end() ) {
1619 cout<<
"event "<<
event<<
" not found in run "<<run<<
", lumi "<<lumi<<endl;
1623 cout<<
"lumi "<<lumi<<
" not found in run "<<run<<endl;
1627 cout<<
"run "<<run<<
" not found"<<endl;
1636 cout<<
"event "<<
event<<
" is not present, sorry."<<endl;
1650 bool exists =
ev_->
to(entry);
1652 std::cout <<
"Entry " << entry <<
" does not exist " << std::endl;
1661 (entry < 100 && entry%10 == 0) ||
1662 (entry < 1000 && entry%100 == 0) ||
1664 cout<<
"process entry "<< entry
1665 <<
", run "<<iEvent.
id().
run()
1667 <<
", event:"<<iEvent.
id().
event()
1686 cout<<
"number of muons : "<<
muons_.size()<<endl;
1689 cout<<
"number of v0 : "<<
v0_.size()<<endl;
1702 cout<<
"clustering is OFF - clusters come from the input file"<<endl;
1754 cout <<
" =====================PFJetBenchmark =================" << endl;
1755 cout<<
"Resol Pt max "<<resPt
1756 <<
" resChargedHadEnergy Max " << resChargedHadEnergy
1757 <<
" resNeutralHadEnergy Max " << resNeutralHadEnergy
1758 <<
" resNeutralEmEnergy Max "<< resNeutralEmEnergy << endl;
1767 if ( resPt < -1. ) {
1768 cout <<
" =====================PFJetBenchmark =================" << endl;
1769 cout<<
"process entry "<< entry << endl;
1770 cout<<
"Resol Pt max "<<resPt
1771 <<
" resChargedHadEnergy Max " << resChargedHadEnergy
1772 <<
" resNeutralHadEnergy Max " << resNeutralHadEnergy
1773 <<
" resNeutralEmEnergy Max "<< resNeutralEmEnergy
1774 <<
" Jet pt " <<
genJets_[0].pt() << endl;
1826 float deltaMin, deltaMax;
1835 double deltaEt = 0.;
1883 if( pfc.
pt() >
ptMin )
return true;
1892 cout <<
"start reading from simulation"<<endl;
1902 if ( foundstdTracks ) {
1906 cerr<<
"PFRootEventManager::ProcessEntry : stdTracks Collection not found : "
1911 if ( foundMCTruth ) {
1933 cerr<<
"PFRootEventManager::ProcessEntry : rechitsECAL Collection not found : "
1942 cerr<<
"PFRootEventManager::ProcessEntry : rechitsHCAL Collection not found : "
1951 cerr<<
"PFRootEventManager::ProcessEntry : rechitsHFEM Collection not found : "
1960 cerr<<
"PFRootEventManager::ProcessEntry : rechitsHFHAD Collection not found : "
1967 if ( foundCLEANED ) {
1971 cerr<<
"PFRootEventManager::ProcessEntry : rechitsCLEANED Collection not found : "
1982 cerr<<
"PFRootEventManager::ProcessEntry : rechitsPS Collection not found : "
1991 cerr<<
"PFRootEventManager::ProcessEntry : caloTowers Collection not found : "
2000 cerr<<
"PFRootEventManager::ProcessEntry : primaryVertices Collection not found : "
2009 cerr<<
"PFRootEventManager::ProcessEntry : pfNuclearTrackerVertex Collection not found : "
2014 if ( foundrecTracks ) {
2018 cerr<<
"PFRootEventManager::ProcessEntry : recTracks Collection not found : "
2023 if ( founddisplacedRecTracks ) {
2027 cerr<<
"PFRootEventManager::ProcessEntry : displacedRecTracks Collection not found : "
2033 if ( foundgsfrecTracks ) {
2037 cerr<<
"PFRootEventManager::ProcessEntry : gsfrecTracks Collection not found : "
2042 if ( foundconvBremGsfrecTracks ) {
2046 cerr<<
"PFRootEventManager::ProcessEntry : convBremGsfrecTracks Collection not found : "
2062 cerr<<
"PFRootEventManager::ProcessEntry : muons Collection not found : "
2067 if ( foundconversion ) {
2071 cerr<<
"PFRootEventManager::ProcessEntry : conversion Collection not found : "
2082 cerr<<
"PFRootEventManager::ProcessEntry : v0 Collection not found : "
2083 <<entry <<
" " <<
v0Tag_<<endl;
2088 if ( foundPhotons) {
2091 cerr <<
"PFRootEventManager::ProcessEntry : photon collection not found : "
2097 if ( foundgenJets ) {
2106 if ( foundgenParticlesforJets ) {
2115 if ( foundgenParticlesforMET ) {
2124 if ( foundcaloJets ) {
2128 cerr<<
"PFRootEventManager::ProcessEntry : caloJets Collection not found : "
2133 if ( foundcorrcaloJets ) {
2142 if ( foundpfJets ) {
2146 cerr<<
"PFRootEventManager::ProcessEntry : PFJets Collection not found : "
2151 if ( foundpfCands ) {
2155 cerr<<
"PFRootEventManager::ProcessEntry : PFCandidate Collection not found : "
2160 if ( foundpfMets ) {
2164 cerr<<
"PFRootEventManager::ProcessEntry : PFMets Collection not found : "
2169 if ( foundtcMets ) {
2173 cerr<<
"TCRootEventManager::ProcessEntry : TCMets Collection not found : "
2178 if ( foundcaloMets ) {
2182 cerr<<
"CALORootEventManager::ProcessEntry : CALOMets Collection not found : "
2188 bool goodevent =
true;
2193 cout <<
"PFRootEventManager : event discarded Nparticles="
2198 cout <<
"PFRootEventManager : leptonic tau discarded " << endl;
2204 cout <<
"PFRootEventManager : tau discarded: "
2205 <<
"number of charged and neutral particles different from "
2272 const std::vector<int>& ptcdaughters = ptc.
daughterIds();
2274 for (
unsigned int dapt=0; dapt < ptcdaughters.size(); ++dapt) {
2280 int pdgdaugther = daughter.
pdgCode();
2281 int abspdgdaughter =
std::abs(pdgdaugther);
2284 if (abspdgdaughter == 11 ||
2285 abspdgdaughter == 13) {
2306 const std::vector<int>& daughters = ptc.
daughterIds();
2310 if(!daughters.empty() )
continue;
2313 double pdgCode = ptc.
pdgCode();
2317 else if( pdgCode==22 )
2365 int kqa,kq1,kq2,kq3,kqj,irt,kqx,kqn;
2369 int ichg[109]={-1,2,-1,2,-1,2,-1,2,0,0,-3,0,-3,0,-3,0,
2370 -3,0,0,0,0,0,0,3,0,0,0,0,0,0,3,0,3,6,0,0,3,6,0,0,-1,2,-1,2,-1,2,0,0,0,0,
2371 -3,0,-3,0,-3,0,0,0,0,0,-1,2,-1,2,-1,2,0,0,0,0,
2372 -3,0,-3,0,-3,0,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
2378 kqn=kqa/1000000000%10;
2388 if(kqa==0 || kqa >= 10000000) {
2390 if(kqn==1) {hepchg=0;}
2393 else if(kqa<=100) {hepchg = ichg[kqa-1];}
2395 else if(kqa==100 || kqa==101) {hepchg = -3;}
2397 else if(kqa==102 || kqa==104) {hepchg = -6;}
2399 else if(kqj == 0) {hepchg = 0;}
2401 else if(kqx>0 && irt<100)
2403 hepchg = ichg[irt-1];
2404 if(kqa==1000017 || kqa==1000018) {hepchg = 0;}
2405 if(kqa==1000034 || kqa==1000052) {hepchg = 0;}
2406 if(kqa==1000053 || kqa==1000054) {hepchg = 0;}
2407 if(kqa==5100061 || kqa==5100062) {hepchg = 6;}
2413 hepchg = ichg[kq2-1]-ichg[kq1-1];
2415 if((kq2==3) || (kq2==5)) {hepchg = ichg[kq1-1]-ichg[kq2-1];}
2419 hepchg = ichg[kq3-1] + ichg[kq2-1];
2424 hepchg = ichg[kq3-1]+ichg[kq2-1]+ichg[kq1-1];
2428 if(Id<0 && hepchg!=0) {hepchg = -1*hepchg;}
2438 for(
unsigned i=0;
i<recTracks.size(); ++
i ) {
2439 recTracks[
i].calculatePositionREP();
2445 for(
unsigned i=0;
i<recTracks.size(); ++
i ) {
2446 recTracks[
i].calculatePositionREP();
2447 recTracks[
i].calculateBremPositionREP();
2455 bool findNeighbours) {
2458 map<unsigned, unsigned> detId2index;
2460 for(
unsigned i=0;
i<rechits.size();
i++) {
2461 rechits[
i].calculatePositionREP();
2464 detId2index.insert( make_pair(rechits[
i].detId(),
i) );
2467 if(findNeighbours) {
2468 for(
unsigned i=0;
i<rechits.size();
i++) {
2477 const map<unsigned, unsigned>& detId2index ) {
2484 for(
unsigned i=0;
i<neighbours4DetId.size();
i++) {
2485 unsigned detId = neighbours4DetId[
i];
2487 const map<unsigned, unsigned>::const_iterator& it = detId2index.find(detId);
2489 if(it != detId2index.end() ) {
2495 for(
unsigned i=0;
i<neighbours8DetId.size();
i++) {
2496 unsigned detId = neighbours8DetId[
i];
2498 const map<unsigned, unsigned>::const_iterator& it = detId2index.find(detId);
2500 if(it != detId2index.end() ) {
2513 cout <<
"start clustering"<<endl;
2564 for(
unsigned i=0;
i<clusters.size();
i++) {
2566 cluster.
eta = clusters[
i].position().Eta();
2567 cluster.
phi = clusters[
i].position().Phi();
2568 cluster.
e = clusters[
i].energy();
2569 cluster.
layer = clusters[
i].layer();
2574 switch( clusters[
i].layer() ) {
2594 cluster.
eta, cluster.
phi,
2620 for (
unsigned i=0;
i < trueParticles.size();
i++) {
2630 if(ntrajpoints == 3) {
2658 for (
unsigned i=0;
i < pfCandidates.size();
i++) {
2663 outptc.
eta = candidate.
eta();
2664 outptc.
phi = candidate.
phi();
2665 outptc.
e = candidate.
energy();
2679 for (
unsigned i=0;
i < cts.
size();
i++) {
2699 for (
unsigned i=0;
i < blocks.size();
i++) {
2714 cout <<
"start particle flow"<<endl;
2719 cout<<
"PFRootEventManager::particleFlow start"<<endl;
2773 vector<bool> trackMask;
2775 vector<bool> gsftrackMask;
2777 vector<bool> ecalMask;
2779 vector<bool> hcalMask;
2781 vector<bool> hfemMask;
2783 vector<bool> hfhadMask;
2785 vector<bool> psMask;
2787 vector<bool> photonMask;
2792 muonh, nuclearh, displacedtrackh, convh, v0,
2793 ecalh, hcalh, hfemh, hfhadh, psh, photonh,
2794 trackMask,gsftrackMask,
2795 ecalMask, hcalMask, hfemMask, hfhadMask, psMask,photonMask );
2798 trackMask, ecalMask, hcalMask, psMask );
2821 if(
debug_)
cout<<
"PFRootEventManager::particleFlow stop"<<endl;
2827 if ( differentSize ) {
2828 cout <<
"+++WARNING+++ PFCandidate size changed for entry "
2829 << entry <<
" !" << endl
2830 <<
" - original size : " <<
pfCandCMSSW_.size() << endl
2834 double deltaE = (*pfCandidates_)[
i].energy()-
pfCandCMSSW_[
i].energy();
2835 double deltaEta = (*pfCandidates_)[
i].eta()-
pfCandCMSSW_[
i].eta();
2837 if ( fabs(deltaE) > 1E-5 ||
2838 fabs(deltaEta) > 1E-9 ||
2839 fabs(deltaPhi) > 1E-9 ) {
2840 cout <<
"+++WARNING+++ PFCandidate " <<
i
2841 <<
" changed for entry " << entry <<
" ! " << endl
2843 <<
" - Current : " << (*pfCandidates_)[
i] << endl
2844 <<
" DeltaE = : " << deltaE << endl
2845 <<
" DeltaEta = : " << deltaEta << endl
2846 <<
" DeltaPhi = : " << deltaPhi << endl << endl;
2858 cout<<
"start reconstruct GenJets --- "<<endl;
2859 cout<<
" input gen particles for jet: all neutrinos removed ; muons present" << endl;
2879 cout <<
" #" <<
i <<
" PDG code:" << genPart.
pdgId()
2880 <<
" status " << genPart.
status()
2881 <<
", p/pt/eta/phi: " << genPart.
p() <<
'/' << genPart.
pt()
2882 <<
'/' << genPart.
eta() <<
'/' << genPart.
phi() << endl;
2888 vector<ProtoJet> protoJets;
2894 typedef vector <ProtoJet>::const_iterator IPJ;
2895 for (IPJ ipj = protoJets.begin(); ipj != protoJets.end (); ipj++) {
2903 GenJet newJet (protojet.
p4(), vertex, specific);
2911 ProtoJet::Constituents::const_iterator constituent = constituents.
begin();
2912 for (; constituent != constituents.end(); ++constituent) {
2915 uint
index = constituent->index();
2919 newJet.setJetArea(protojet.
jetArea());
2920 newJet.setPileup(protojet.
pileup());
2921 newJet.setNPasses(protojet.
nPasses());
2923 if (
jetsDebug_ )
cout<<
" gen jet "<<ijet<<
" "<<newJet.print()<<endl;
2934 cout<<
"start reconstruct CaloJets --- "<<endl;
2947 for(
unsigned ipj=0; ipj<
caloJets_.size(); ipj++) {
2949 cout<<
" calo jet "<<ipj<<
" "<<protojet.
pt() <<endl;
2960 cout<<
"start reconstruct PF Jets --- "<<endl;
2970 vector<ProtoJet> protoJets;
2976 typedef vector <ProtoJet>::const_iterator IPJ;
2977 for (IPJ ipj = protoJets.begin(); ipj != protoJets.end (); ipj++) {
2985 PFJet newJet (protojet.
p4(), vertex, specific);
2993 ProtoJet::Constituents::const_iterator constituent = constituents.
begin();
2994 for (; constituent != constituents.end(); ++constituent) {
2997 uint
index = constituent->index();
3001 newJet.setJetArea(protojet.
jetArea());
3002 newJet.setPileup(protojet.
pileup());
3003 newJet.setNPasses(protojet.
nPasses());
3005 if (
jetsDebug_ )
cout<<
" PF jet "<<ijet<<
" "<<newJet.print()<<endl;
3073 TLorentzVector partTOTMC;
3074 bool tauFound =
false;
3075 bool tooManyTaus =
false;
3082 if(
i ) tooManyTaus =
true;
3087 if(!tauFound || tooManyTaus ) {
3093 const std::vector<int>& ptcdaughters =
trueParticles_[0].daughterIds();
3099 for (
unsigned int dapt=0; dapt < ptcdaughters.size(); ++dapt) {
3103 TLorentzVector partMC;
3104 partMC.SetPxPyPzE(tpatvtx.
momentum().Px(),
3109 partTOTMC += partMC;
3113 cout << pdgcode << endl;
3114 cout << tpatvtx << endl;
3115 cout << partMC.Px() <<
" " << partMC.Py() <<
" "
3116 << partMC.Pz() <<
" " << partMC.E()
3118 <<
sqrt(partMC.Px()*partMC.Px()+partMC.Py()*partMC.Py())
3126 for ( HepMC::GenEvent::particle_const_iterator
3127 piter = myGenEvent->particles_begin();
3128 piter != myGenEvent->particles_end();
3132 if (
std::abs((*piter)->pdg_id())==15){
3135 for ( HepMC::GenVertex::particles_out_const_iterator bp =
3136 (*piter)->end_vertex()->particles_out_const_begin();
3137 bp != (*piter)->end_vertex()->particles_out_const_end(); ++bp ) {
3138 uint nuId=
std::abs((*bp)->pdg_id());
3139 bool isNeutrino=(nuId==12)||(nuId==14)||(nuId==16);
3143 TLorentzVector partMC;
3144 partMC.SetPxPyPzE((*bp)->momentum().x(),
3145 (*bp)->momentum().y(),
3146 (*bp)->momentum().z(),
3147 (*bp)->momentum().e());
3148 partTOTMC += partMC;
3153 if (itau>1) tooManyTaus=
true;
3155 if(!tauFound || tooManyTaus ) {
3156 cerr<<
"PFRootEventManager::tauBenchmark : not a single tau event"<<endl;
3169 jetmc.
eta = partTOTMC.Eta();
3170 jetmc.
phi = partTOTMC.Phi();
3171 jetmc.
et = partTOTMC.Et();
3172 jetmc.
e = partTOTMC.E();
3208 cout <<
" ET Vector=" << partTOTMC.Et()
3209 <<
" " << partTOTMC.Eta()
3210 <<
" " << partTOTMC.Phi() << endl;
cout << endl;
3218 vector<TLorentzVector> allcalotowers;
3221 double threshCaloTowers = 1E-10;
3229 TLorentzVector caloT;
3234 caloT.SetPxPyPzE(pxyz.X(),pxyz.Y(),pxyz.Z(),
caloTowers_[
i].energy());
3235 allcalotowers.push_back(caloT);
3240 cout <<
" RETRIEVED " << allcalotowers.size()
3241 <<
" CALOTOWER 4-VECTORS " << endl;
3245 const vector< PFJetAlgorithm::Jet >& caloTjets
3249 double JetEHTETmax = 0.0;
3250 for (
unsigned i = 0;
i < caloTjets.size();
i++) {
3251 TLorentzVector jetmom = caloTjets[
i].GetMomentum();
3252 double jetcalo_pt =
sqrt(jetmom.Px()*jetmom.Px()+jetmom.Py()*jetmom.Py());
3253 double jetcalo_et = jetmom.Et();
3258 jet.
eta = jetmom.Eta();
3259 jet.
phi = jetmom.Phi();
3260 jet.
et = jetmom.Et();
3263 const vector<int>& indexes = caloTjets[
i].GetIndexes();
3264 for(
unsigned ii=0; ii<indexes.size(); ii++){
3274 cout <<
" ECAL+HCAL jet : " << caloTjets[
i] << endl;
3275 cout << jetmom.Px() <<
" " << jetmom.Py() <<
" "
3276 << jetmom.Pz() <<
" " << jetmom.E()
3277 <<
" PT=" << jetcalo_pt << endl;
3280 if (jetcalo_et >= JetEHTETmax)
3281 JetEHTETmax = jetcalo_et;
3286 vector<TLorentzVector> allrecparticles;
3298 for(
unsigned i=0;
i<candidates.size();
i++) {
3307 cout <<
i <<
" " << candidate << endl;
3309 cout <<
" type= " << type <<
" " << candidate.
charge()
3315 TLorentzVector partRec(PFpart.Px(),
3321 allrecparticles.push_back( partRec );
3327 cout <<
" THERE ARE " << allrecparticles.size()
3328 <<
" RECONSTRUCTED 4-VECTORS" << endl;
3331 const vector< PFJetAlgorithm::Jet >& PFjets
3335 cout << PFjets.size() <<
" PF Jets found" << endl;
3336 double JetPFETmax = 0.0;
3337 for (
unsigned i = 0;
i < PFjets.size();
i++) {
3338 TLorentzVector jetmom = PFjets[
i].GetMomentum();
3339 double jetpf_pt =
sqrt(jetmom.Px()*jetmom.Px()+jetmom.Py()*jetmom.Py());
3340 double jetpf_et = jetmom.Et();
3343 jet.
eta = jetmom.Eta();
3344 jet.
phi = jetmom.Phi();
3345 jet.
et = jetmom.Et();
3351 cout <<
" Rec jet : "<< PFjets[
i] <<endl;
3352 cout << jetmom.Px() <<
" " << jetmom.Py() <<
" "
3353 << jetmom.Pz() <<
" " << jetmom.E()
3354 <<
" PT=" << jetpf_pt <<
" eta="<< jetmom.Eta()
3355 <<
" Phi=" << jetmom.Phi() << endl;
3356 cout <<
"------------------------------------------------" << endl;
3359 if (jetpf_et >= JetPFETmax)
3360 JetPFETmax = jetpf_et;
3365 double deltaEtEHT = JetEHTETmax - partTOTMC.Et();
3368 double deltaEt = JetPFETmax - partTOTMC.Et();
3372 cout <<
"tau benchmark E_T(PF) - E_T(true) = " << deltaEt << endl;
3375 return deltaEt/partTOTMC.Et();
3430 string newString = oldString;
3432 string dollar =
"$";
3436 int dollarPos = newString.find(dollar,0);
3437 if( dollarPos == -1 )
return oldString;
3439 int lengh = newString.find(slash,0) - newString.find(dollar,0) + 1;
3440 string env_variable =
3441 newString.substr( ( newString.find(dollar,0) + 1 ), lengh -2);
3443 int begin = env_variable.find_first_of(
"{");
3444 int end = env_variable.find_last_of(
"}");
3449 env_variable = env_variable.substr( begin+1, end-1 );
3454 char*
directory = getenv( env_variable.c_str() );
3457 cerr<<
"please define environment variable $"<<env_variable<<endl;
3464 newString.replace( 0, lengh , sdir);
3467 cout <<
"expand " <<oldString<<
" to "<< newString << endl;
3482 if(!myGenEvent)
return;
3484 for ( HepMC::GenEvent::particle_const_iterator
3485 piter = myGenEvent->particles_begin();
3486 piter != myGenEvent->particles_end();
3489 if ( nGen != 1 || nSim != 1 )
return;
3492 if (
genJets_.size() != 1 )
return;
3494 double true_eta =
genJets_[0].eta();
3495 double true_phi =
genJets_[0].phi();
3499 double rec_ECALEnergy = 0.;
3500 double rec_HCALEnergy = 0.;
3501 double deltaRMin = 999.;
3502 unsigned int theJet = 0;
3503 for (
unsigned int ijet=0; ijet<
pfJets_.size(); ++ijet ) {
3504 double rec_ECAL =
pfJets_[ijet].neutralEmEnergy();
3505 double rec_HCAL =
pfJets_[ijet].neutralHadronEnergy();
3506 double rec_eta =
pfJets_[0].eta();
3507 double rec_phi =
pfJets_[0].phi();
3509 + (rec_phi-true_phi)*(rec_phi-true_phi) );
3510 if ( deltaR < deltaRMin ) {
3512 rec_ECALEnergy = rec_ECAL;
3513 rec_HCALEnergy = rec_HCAL;
3516 if ( deltaRMin > 0.1 )
return;
3518 std::vector < PFCandidatePtr > constituents =
pfJets_[theJet].getPFConstituents ();
3519 double pat_ECALEnergy = 0.;
3520 double pat_HCALEnergy = 0.;
3521 for (
unsigned ic = 0; ic < constituents.size (); ++ic) {
3522 if ( constituents[ic]->particleId() < 4 )
continue;
3523 if ( constituents[ic]->particleId() == 4 )
3524 pat_ECALEnergy += constituents[ic]->rawEcalEnergy();
3525 else if ( constituents[ic]->particleId() == 5 )
3526 pat_HCALEnergy += constituents[ic]->rawHcalEnergy();
3529 out << true_eta <<
" " << true_phi <<
" " << true_E
3530 <<
" " << rec_ECALEnergy <<
" " << rec_HCALEnergy
3531 <<
" " << pat_ECALEnergy <<
" " << pat_HCALEnergy
3532 <<
" " << deltaRMin << std::endl;
3542 std::vector< std::list <simMatch> > candSimMatchTrack;
3543 std::vector< std::list <simMatch> > candSimMatchEcal;
3553 out<<
"ECAL RecHits ==============================================="<<endl;
3555 out<<
"HCAL RecHits ==============================================="<<endl;
3557 out<<
"HFEM RecHits ==============================================="<<endl;
3559 out<<
"HFHAD RecHits =============================================="<<endl;
3561 out<<
"PS RecHits ================================================="<<endl;
3566 out<<
"ECAL Clusters ============================================="<<endl;
3568 out<<
"HCAL Clusters ============================================="<<endl;
3570 out<<
"HFEM Clusters ============================================="<<endl;
3572 out<<
"HFHAD Clusters ============================================"<<endl;
3574 out<<
"PS Clusters ============================================="<<endl;
3577 bool printTracks =
true;
3582 out<<
"Particle Flow Blocks ======================================"<<endl;
3584 out<<
i<<
" "<<(*pfBlocks_)[
i]<<endl;
3589 out<<
"Particle Flow Candidates =================================="<<endl;
3600 out<<
"MEX, MEY, MET ============================================" <<endl
3601 << mex <<
" " << mey <<
" " <<
sqrt(mex*mex+mey*mey);
3608 cout<<
"MCTruthMatching Results"<<endl;
3611 out <<icand<<
" " <<(*pfCandidates_)[icand]<<endl;
3612 out <<
"is matching:" << endl;
3615 ITM it_t = candSimMatchTrack[icand].begin();
3616 ITM itend_t = candSimMatchTrack[icand].end();
3617 for(;it_t!=itend_t;++it_t){
3618 unsigned simid = it_t->second;
3621 out <<
"\t\tthrough Track matching pTrectrack="
3622 << it_t->first <<
" GeV" << endl;
3625 ITM it_e = candSimMatchEcal[icand].begin();
3626 ITM itend_e = candSimMatchEcal[icand].end();
3627 for(;it_e!=itend_e;++it_e){
3628 unsigned simid = it_e->second;
3631 out <<
"\t\tsimparticle contributing to a total of "
3633 <<
" GeV of its ECAL cluster"
3636 cout<<
"________________"<<endl;
3641 out<<
"Jets ====================================================="<<endl;
3642 out<<
"Particle Flow: "<<endl;
3648 out<<
"Generated: "<<endl;
3655 out<<
"Calo: "<<endl;
3662 out<<
"Sim Particles ==========================================="<<endl;
3680 cout<<
"MCTruthMatching Results"<<endl;
3682 cout <<
"==== Particle Simulated " <<
i << endl;
3687 cout <<
"Look at the desintegration products" << endl;
3694 cout <<
"matching pfCandidate (trough tracking): " << endl;
3698 ITM it = candSimMatchTrack[icand].begin();
3699 ITM itend = candSimMatchTrack[icand].end();
3700 for(;it!=itend;++it)
3701 if(
i == it->second ){
3702 out<<icand<<
" "<<(*pfCandidates_)[icand]<<endl;
3709 vector<unsigned> rechitSimIDs
3711 vector<double> rechitSimFrac
3714 if( !rechitSimIDs.size() )
continue;
3716 cout <<
"matching pfCandidate (through ECAL): " << endl;
3719 double totalEcalE = 0.0;
3721 for (
unsigned isimrh=0; isimrh < rechitSimIDs.size();
3725 cout <<
"For info, this particle deposits E=" << totalEcalE
3726 <<
"(GeV) in the ECAL" << endl;
3731 ITM it = candSimMatchEcal[icand].begin();
3732 ITM itend = candSimMatchEcal[icand].end();
3733 for(;it!=itend;++it)
3734 if(
i == it->second )
3735 out<<icand<<
" "<<it->first<<
"GeV "<<(*pfCandidates_)[icand]<<endl;
3752 int maxNLines)
const {
3756 if(!myGenEvent)
return;
3758 out<<
"GenParticles ==========================================="<<endl;
3760 std::cout <<
"Id Gen Name eta phi pT E Vtx1 "
3762 <<
"Moth Vtx2 eta phi R Z Da1 Da2 Ecal?"
3766 for ( HepMC::GenEvent::particle_const_iterator
3767 piter = myGenEvent->particles_begin();
3768 piter != myGenEvent->particles_end();
3771 if( nLines == maxNLines)
break;
3776 int partId = p->pdg_id();
3883 std::string latexString;
3889 p->momentum().e() );
3895 if ( !p->production_vertex() && p->pdg_id() == 2212 )
continue;
3900 if(p->production_vertex() ) {
3901 vertex1.SetCoordinates( p->production_vertex()->position().x()/10.,
3902 p->production_vertex()->position().y()/10.,
3903 p->production_vertex()->position().z()/10. );
3904 vertexId1 = p->production_vertex()->barcode();
3907 out.setf(std::ios::fixed, std::ios::floatfield);
3908 out.setf(std::ios::right, std::ios::adjustfield);
3910 out << std::setw(4) << p->barcode() <<
" "
3913 for(
unsigned int k=0;
k<11-name.length() &&
k<12;
k++) out <<
" ";
3915 double eta = momentum1.eta();
3916 if ( eta > +10. ) eta = +10.;
3917 if ( eta < -10. ) eta = -10.;
3919 out << std::setw(6) << std::setprecision(2) << eta <<
" "
3920 << std::setw(6) << std::setprecision(2) << momentum1.phi() <<
" "
3921 << std::setw(7) << std::setprecision(2) << momentum1.pt() <<
" "
3922 << std::setw(7) << std::setprecision(2) << momentum1.e() <<
" "
3923 << std::setw(4) << vertexId1 <<
" "
3924 << std::setw(6) << std::setprecision(1) << vertex1.x() <<
" "
3925 << std::setw(6) << std::setprecision(1) << vertex1.y() <<
" "
3926 << std::setw(6) << std::setprecision(1) << vertex1.z() <<
" ";
3929 if( p->production_vertex() ) {
3930 if ( p->production_vertex()->particles_in_size() ) {
3932 *(p->production_vertex()->particles_in_const_begin());
3934 out << std::setw(4) << mother->barcode() <<
" ";
3940 if ( p->end_vertex() ) {
3942 p->end_vertex()->position().y()/10.,
3943 p->end_vertex()->position().z()/10.,
3944 p->end_vertex()->position().t()/10.);
3945 int vertexId2 = p->end_vertex()->barcode();
3947 std::vector<const HepMC::GenParticle*> children;
3948 HepMC::GenVertex::particles_out_const_iterator firstDaughterIt =
3949 p->end_vertex()->particles_out_const_begin();
3950 HepMC::GenVertex::particles_out_const_iterator lastDaughterIt =
3951 p->end_vertex()->particles_out_const_end();
3952 for ( ; firstDaughterIt != lastDaughterIt ; ++firstDaughterIt ) {
3953 children.push_back(*firstDaughterIt);
3956 out << std::setw(4) << vertexId2 <<
" "
3957 << std::setw(6) << std::setprecision(2) << vertex2.eta() <<
" "
3958 << std::setw(6) << std::setprecision(2) << vertex2.phi() <<
" "
3959 << std::setw(5) << std::setprecision(1) << vertex2.pt() <<
" "
3960 << std::setw(6) << std::setprecision(1) << vertex2.z() <<
" ";
3962 for (
unsigned id=0;
id<children.size(); ++id )
3963 out << std::setw(4) << children[id]->barcode() <<
" ";
3971 for(
unsigned i=0;
i<rechits.size();
i++) {
3972 string seedstatus =
" ";
3974 seedstatus =
"SEED";
3982 const char* seedstatus,
3983 ostream&
out)
const {
3992 TCutG* cutg = (TCutG*) gROOT->FindObject(
"CUTG");
3993 if( !cutg || cutg->IsInside( eta, phi ) )
3994 out<<index<<
"\t"<<seedstatus<<
" "<<rh<<endl;
3998 ostream&
out )
const {
3999 for(
unsigned i=0;
i<clusters.size();
i++) {
4006 ostream&
out )
const {
4016 TCutG* cutg = (TCutG*) gROOT->FindObject(
"CUTG");
4017 if( !cutg || cutg->IsInside( eta, phi ) )
4027 TCutG* cutg = (TCutG*) gROOT->FindObject(
"CUTG");
4028 if(!cutg)
return true;
4030 const vector< reco::PFTrajectoryPoint >& points = track.
trajectoryPoints();
4032 for(
unsigned i=0;
i<points.size();
i++) {
4033 if( ! points[
i].isValid() )
continue;
4036 if( cutg->IsInside( pos.Eta(), pos.Phi() ) )
return true;
4049 TCutG* cutg = (TCutG*) gROOT->FindObject(
"CUTG");
4051 mask.resize( rechits.size(),
true);
4056 mask.reserve( rechits.size() );
4057 for(
unsigned i=0;
i<rechits.size();
i++) {
4059 double eta = rechits[
i].position().Eta();
4060 double phi = rechits[
i].position().Phi();
4062 if( cutg->IsInside( eta, phi ) )
4063 mask.push_back(
true );
4065 mask.push_back(
false );
4074 TCutG* cutg = (TCutG*) gROOT->FindObject(
"CUTG");
4078 mask.reserve( clusters.size() );
4079 for(
unsigned i=0;
i<clusters.size();
i++) {
4081 double eta = clusters[
i].position().Eta();
4082 double phi = clusters[
i].position().Phi();
4084 if( cutg->IsInside( eta, phi ) )
4085 mask.push_back(
true );
4087 mask.push_back(
false );
4096 TCutG* cutg = (TCutG*) gROOT->FindObject(
"CUTG");
4100 mask.reserve( tracks.size() );
4101 for(
unsigned i=0;
i<tracks.size();
i++) {
4103 mask.push_back(
true );
4105 mask.push_back(
false );
4114 TCutG* cutg = (TCutG*) gROOT->FindObject(
"CUTG");
4118 mask.reserve( photons.size() );
4119 for(
unsigned i=0;
i<photons.size();
i++) {
4120 double eta = photons[
i].caloPosition().Eta();
4121 double phi = photons[
i].caloPosition().Phi();
4122 if( cutg->IsInside( eta, phi ) )
4123 mask.push_back(
true );
4125 mask.push_back(
false );
4135 TCutG* cutg = (TCutG*) gROOT->FindObject(
"CUTG");
4139 mask.reserve( tracks.size() );
4140 for(
unsigned i=0;
i<tracks.size();
i++) {
4142 mask.push_back(
true );
4144 mask.push_back(
false );
4152 double& peta,
double& pphi,
double& pe)
4157 string err =
"PFRootEventManager::closestParticle : ";
4158 err +=
"vector of PFSimParticles is empty";
4159 throw std::length_error( err.c_str() );
4162 double mindist2 = 99999999;
4163 unsigned iClosest=0;
4183 double deta = peta -
eta;
4184 double dphi = pphi -
phi;
4186 double dist2 = deta*deta + dphi*dphi;
4188 if(dist2<mindist2) {
4221 case 1: { name =
"d";latexString=
"d";
break; }
4222 case 2: { name =
"u";latexString=
"u";
break; }
4223 case 3: { name =
"s";latexString=
"s" ;
break; }
4224 case 4: { name =
"c";latexString=
"c" ;
break; }
4225 case 5: { name =
"b";latexString=
"b" ;
break; }
4226 case 6: { name =
"t";latexString=
"t" ;
break; }
4227 case -1: { name =
"~d";latexString=
"#bar{d}" ;
break; }
4228 case -2: { name =
"~u";latexString=
"#bar{u}" ;
break; }
4229 case -3: { name =
"~s";latexString=
"#bar{s}" ;
break; }
4230 case -4: { name =
"~c";latexString=
"#bar{c}" ;
break; }
4231 case -5: { name =
"~b";latexString=
"#bar{b}" ;
break; }
4232 case -6: { name =
"~t";latexString=
"#bar{t}" ;
break; }
4233 case 11: { name =
"e-";latexString=
name ;
break; }
4234 case -11: { name =
"e+";latexString=
name ;
break; }
4235 case 12: { name =
"nu_e";latexString=
"#nu_{e}" ;
break; }
4236 case -12: { name =
"~nu_e";latexString=
"#bar{#nu}_{e}" ;
break; }
4237 case 13: { name =
"mu-";latexString=
"#mu-" ;
break; }
4238 case -13: { name =
"mu+";latexString=
"#mu+" ;
break; }
4239 case 14: { name =
"nu_mu";latexString=
"#nu_{mu}" ;
break; }
4240 case -14: { name =
"~nu_mu";latexString=
"#bar{#nu}_{#mu}";
break; }
4241 case 15: { name =
"tau-";latexString=
"#tau^{-}" ;
break; }
4242 case -15: { name =
"tau+";latexString=
"#tau^{+}" ;
break; }
4243 case 16: { name =
"nu_tau";latexString=
"#nu_{#tau}" ;
break; }
4244 case -16: { name =
"~nu_tau";latexString=
"#bar{#nu}_{#tau}";
break; }
4245 case 21: { name =
"gluon";latexString=
name;
break; }
4246 case 22: { name =
"gamma";latexString=
"#gamma";
break; }
4247 case 23: { name =
"Z0";latexString=
"Z^{0}" ;
break; }
4248 case 24: { name =
"W+";latexString=
"W^{+}" ;
break; }
4249 case 25: { name =
"H0";latexString=
name ;
break; }
4250 case -24: { name =
"W-";latexString=
"W^{-}" ;
break; }
4251 case 111: { name =
"pi0";latexString=
"#pi^{0}" ;
break; }
4252 case 113: { name =
"rho0";latexString=
"#rho^{0}" ;
break; }
4253 case 223: { name =
"omega";latexString=
"#omega" ;
break; }
4254 case 333: { name =
"phi";latexString=
"#phi";
break; }
4255 case 443: { name =
"J/psi";latexString=
"J/#psi" ;
break; }
4256 case 553: { name =
"Upsilon";latexString=
"#Upsilon" ;
break; }
4257 case 130: { name =
"K0L";latexString=
name ;
break; }
4258 case 211: { name =
"pi+";latexString=
"#pi^{+}" ;
break; }
4259 case -211: { name =
"pi-";latexString=
"#pi^{-}" ;
break; }
4260 case 213: { name =
"rho+";latexString=
"#rho^{+}" ;
break; }
4261 case -213: { name =
"rho-";latexString=
"#rho^{-}" ;
break; }
4262 case 221: { name =
"eta";latexString=
"#eta" ;
break; }
4263 case 331: { name =
"eta'";latexString=
"#eta'" ;
break; }
4264 case 441: { name =
"etac";latexString=
"#eta_{c}" ;
break; }
4265 case 551: { name =
"etab";latexString=
"#eta_{b}";
break; }
4266 case 310: { name =
"K0S";latexString=
name ;
break; }
4267 case 311: { name =
"K0";latexString=
"K^{0}" ;
break; }
4268 case -311: { name =
"Kbar0";latexString=
"#bar{#Kappa}^{0}" ;
break; }
4269 case 321: { name =
"K+";latexString=
"K^{+}";
break; }
4270 case -321: { name =
"K-";latexString=
"K^{-}";
break; }
4271 case 411: { name =
"D+";latexString=
"D^{+}" ;
break; }
4272 case -411: { name =
"D-";latexString=
"D^{-}";
break; }
4273 case 421: { name =
"D0";latexString=
name ;
break; }
4274 case 431: { name =
"Ds_+";latexString=
"Ds_{+}" ;
break; }
4275 case -431: { name =
"Ds_-";latexString=
"Ds_{-}" ;
break; }
4276 case 511: { name =
"B0";latexString=
name;
break; }
4277 case 521: { name =
"B+";latexString=
"B^{+}" ;
break; }
4278 case -521: { name =
"B-";latexString=
"B^{-}" ;
break; }
4279 case 531: { name =
"Bs_0";latexString=
"Bs_{0}" ;
break; }
4280 case 541: { name =
"Bc_+";latexString=
"Bc_{+}" ;
break; }
4281 case -541: { name =
"Bc_+";latexString=
"Bc_{+}" ;
break; }
4282 case 313: { name =
"K*0";latexString=
"K^{*0}" ;
break; }
4283 case -313: { name =
"K*bar0";latexString=
"#bar{K}^{*0}" ;
break; }
4284 case 323: { name =
"K*+";latexString=
"#K^{*+}";
break; }
4285 case -323: { name =
"K*-";latexString=
"#K^{*-}" ;
break; }
4286 case 413: { name =
"D*+";latexString=
"D^{*+}";
break; }
4287 case -413: { name =
"D*-";latexString=
"D^{*-}" ;
break; }
4288 case 423: { name =
"D*0";latexString=
"D^{*0}" ;
break; }
4289 case 513: { name =
"B*0";latexString=
"B^{*0}" ;
break; }
4290 case 523: { name =
"B*+";latexString=
"B^{*+}" ;
break; }
4291 case -523: { name =
"B*-";latexString=
"B^{*-}" ;
break; }
4292 case 533: { name =
"B*_s0";latexString=
"B^{*}_{s0}" ;
break; }
4293 case 543: { name =
"B*_c+";latexString=
"B^{*}_{c+}";
break; }
4294 case -543: { name =
"B*_c-";latexString=
"B^{*}_{c-}";
break; }
4295 case 1114: { name =
"Delta-";latexString=
"#Delta^{-}" ;
break; }
4296 case -1114: { name =
"Deltabar+";latexString=
"#bar{#Delta}^{+}" ;
break; }
4297 case -2112: { name =
"nbar0";latexString=
"{bar}n^{0}" ;
break; }
4298 case 2112: { name =
"n"; latexString=
name ;
break;}
4299 case 2114: { name =
"Delta0"; latexString=
"#Delta^{0}" ;
break; }
4300 case -2114: { name =
"Deltabar0"; latexString=
"#bar{#Delta}^{0}" ;
break; }
4301 case 3122: { name =
"Lambda0";latexString=
"#Lambda^{0}";
break; }
4302 case -3122: { name =
"Lambdabar0";latexString=
"#bar{#Lambda}^{0}" ;
break; }
4303 case 3112: { name =
"Sigma-"; latexString=
"#Sigma" ;
break; }
4304 case -3112: { name =
"Sigmabar+"; latexString=
"#bar{#Sigma}^{+}" ;
break; }
4305 case 3212: { name =
"Sigma0";latexString=
"#Sigma^{0}" ;
break; }
4306 case -3212: { name =
"Sigmabar0";latexString=
"#bar{#Sigma}^{0}" ;
break; }
4307 case 3214: { name =
"Sigma*0"; latexString=
"#Sigma^{*0}" ;
break; }
4308 case -3214: { name =
"Sigma*bar0";latexString=
"#bar{#Sigma}^{*0}" ;
break; }
4309 case 3222: { name =
"Sigma+"; latexString=
"#Sigma^{+}" ;
break; }
4310 case -3222: { name =
"Sigmabar-"; latexString=
"#bar{#Sigma}^{-}";
break; }
4311 case 2212: { name =
"p";latexString=
name ;
break; }
4312 case -2212: { name =
"~p";latexString=
"#bar{p}" ;
break; }
4313 case -2214: { name =
"Delta-";latexString=
"#Delta^{-}" ;
break; }
4314 case 2214: { name =
"Delta+";latexString=
"#Delta^{+}" ;
break; }
4315 case -2224: { name =
"Deltabar--"; latexString=
"#bar{#Delta}^{--}" ;
break; }
4316 case 2224: { name =
"Delta++"; latexString=
"#Delta^{++}";
break; }
4320 cout <<
"Unknown code : " << partId << endl;
4333 std::vector< std::list <simMatch> >& candSimMatchTrack,
4334 std::vector< std::list <simMatch> >& candSimMatchEcal)
const
4339 out <<
"Running Monte Carlo Truth Matching Tool" << endl;
4343 candSimMatchTrack.resize(candidates.size());
4344 candSimMatchEcal.resize(candidates.size());
4346 for(
unsigned i=0;
i<candidates.size();
i++) {
4351 out <<
i<<
" " <<(*pfCandidates_)[
i]<<endl;
4352 out <<
"is matching:" << endl;
4358 for(
unsigned iel=0; iel<eleInBlocks.size(); ++iel) {
4359 PFBlockRef blockRef = eleInBlocks[iel].first;
4360 unsigned indexInBlock = eleInBlocks[iel].second;
4369 = elements_h[ indexInBlock ].type();
4376 = elements_h[ indexInBlock ].trackRefPF();
4377 assert( !trackref.
isNull() );
4380 unsigned rtrkID = track.trackId();
4386 if(trackIDM != 99999
4387 && trackIDM == rtrkID){
4390 out <<
"\tSimParticle " << isim
4391 <<
" through Track matching pTrectrack="
4392 << trkREF->pt() <<
" GeV" << endl;
4395 std::pair<double, unsigned> simtrackmatch
4396 = make_pair(trkREF->pt(),trackIDM);
4397 candSimMatchTrack[
i].push_back(simtrackmatch);
4407 = elements_h[ indexInBlock ].clusterRef();
4408 assert( !clusterref.
isNull() );
4411 const std::vector< reco::PFRecHitFraction >&
4412 fracs = cluster.recHitFractions();
4416 vector<unsigned> simpID;
4419 for(
unsigned int rhit = 0; rhit < fracs.size(); ++rhit){
4422 if(rh.
isNull())
continue;
4433 vector<unsigned> rechitSimIDs
4435 vector<double> rechitSimFrac
4438 if( !rechitSimIDs.size() )
continue;
4440 for (
unsigned isimrh=0; isimrh < rechitSimIDs.size(); isimrh++) {
4441 if( rechitSimIDs[isimrh] == rechit_cluster.
detId() ){
4443 bool takenalready =
false;
4444 for(
unsigned iss = 0; iss < simpID.size(); ++iss)
4445 if(simpID[iss] == isim) takenalready =
true;
4446 if(!takenalready) simpID.push_back(isim);
4449 ((rechit_cluster.
energy()*rechitSimFrac[isimrh])/100.0)
4450 *fracs[rhit].fraction();
4462 for(
unsigned is=0; is < simpID.size(); ++is)
4464 double frac_of_cluster
4465 = (simpEC[simpID[is]]/cluster.energy())*100.0;
4468 std::pair<double, unsigned> simecalmatch
4469 = make_pair(simpEC[simpID[is]],simpID[is]);
4470 candSimMatchEcal[
i].push_back(simecalmatch);
4473 out <<
"\tSimParticle " << simpID[is]
4474 <<
" through ECAL matching Epfcluster="
4476 <<
" GeV with N=" << simpCN[simpID[is]]
4477 <<
" rechits in common "
4479 out <<
"\t\tsimparticle contributing to a total of "
4480 << simpEC[simpID[is]]
4481 <<
" GeV of this cluster ("
4482 << frac_of_cluster <<
"%) "
4491 cout <<
"==============================================================="
4498 cout <<
"=================================================================="
4500 cout <<
"SimParticles" << endl;
4504 cout <<
"==== Particle Simulated " <<
i << endl;
4509 cout <<
"Look at the desintegration products" << endl;
4516 cout <<
"matching pfCandidate (trough tracking): " << endl;
4517 for(
unsigned icand=0; icand<candidates.size(); icand++ )
4519 ITM it = candSimMatchTrack[icand].begin();
4520 ITM itend = candSimMatchTrack[icand].end();
4521 for(;it!=itend;++it)
4522 if(
i == it->second ){
4523 out<<icand<<
" "<<(*pfCandidates_)[icand]<<endl;
4531 vector<unsigned> rechitSimIDs
4533 vector<double> rechitSimFrac
4536 if( !rechitSimIDs.size() )
continue;
4538 cout <<
"matching pfCandidate (through ECAL): " << endl;
4541 double totalEcalE = 0.0;
4543 for (
unsigned isimrh=0; isimrh < rechitSimIDs.size();
4547 cout <<
"For info, this particle deposits E=" << totalEcalE
4548 <<
"(GeV) in the ECAL" << endl;
4550 for(
unsigned icand=0; icand<candidates.size(); icand++ )
4552 ITM it = candSimMatchEcal[icand].begin();
4553 ITM itend = candSimMatchEcal[icand].end();
4554 for(;it!=itend;++it)
4555 if(
i == it->second )
4556 out<<icand<<
" "<<it->first<<
"GeV "<<(*pfCandidates_)[icand]<<endl;
4568 if ( tagname.size() == 1 )
4571 else if ( tagname.size() == 2 )
4574 else if ( tagname.size() == 3 )
4575 return tagname[2] ==
'*' ?
4579 cout <<
"Invalid tag name with " << tagname.size() <<
" strings "<< endl;
void setmEInputCut(double amEInputCut)
Minimum E for jet constituents.
edm::InputTag displacedRecTracksTag_
CaloTowerCollection caloTowers_
std::auto_ptr< reco::PFBlockCollection > pfBlocks_
reconstructed pfblocks
const std::vector< int > & daughterIds() const
void setThreshCleanBarrel(double thresh)
set barrel clean threshold
edm::InputTag MCTruthTag_
std::auto_ptr< reco::PFCandidateCollection > transferCandidates()
void fillClusterMask(std::vector< bool > &mask, const reco::PFClusterCollection &clusters) const
cluster mask set to true for rechits inside TCutG
edm::Handle< reco::CaloMETCollection > caloMetsHandle_
CMSSW Calo MET.
EventNumber_t event() const
void fillTrackMask(std::vector< bool > &mask, const reco::PFRecTrackCollection &tracks) const
track mask set to true for rechits inside TCutG
const math::XYZPoint & position() const
cluster centroid position
void reconstructGenJets()
reconstruct gen jets
void add4Neighbour(unsigned index)
reconstructed track used as an input to particle flow
std::string getGenParticleName(int partId, std::string &latexStringName) const
get name of genParticle
void setOverlapThreshold(double aOverlapThreshold)
????
edm::Handle< reco::GenParticleRefVector > genParticlesforJetsHandle_
input collection of gen particles
virtual int pdgId() const
PDG identifier.
void reset()
reset before next event
virtual double p() const
magnitude of momentum vector
void setThreshDoubleSpikeEndcap(double thresh)
set endcap thresholds for double spike cleaning
void reconstructPFJets()
reconstruct pf jets
void setParameters(Benchmark::Mode mode, float ptmin, float ptmax, float etamin, float etamax, float phimin, float phimax, bool metSpHistos)
set the parameters locally
PFClusterAlgo clusterAlgoHFEM_
clustering algorithm for HF, electro-magnetic layer
void setDirectory(TDirectory *dir)
set directory (to use in ROOT)
PFMETMonitor pfMETMonitor_
unsigned filterNParticles_
void SetConeMerge(double coneMerge)
void setPFPhotonParameters(bool usePFPhoton, std::string mvaWeightFileConvID, double mvaConvCut, const boost::shared_ptr< PFEnergyCalibration > &thePFEnergyCalibration)
void printCluster(const reco::PFCluster &cluster, std::ostream &out=std::cout) const
bool tauBenchmarkDebug_
tau benchmark debug
double printSimParticlesPtMin_
bool printPFJets_
print PFJets yes/no
ParticleType
particle types
edm::Handle< reco::PFRecHitCollection > rechitsHFEMHandle_
rechits HF EM
boost::shared_ptr< PFEnergyCalibration > calibration_
edm::Handle< reco::PFJetCollection > pfJetsHandle_
CMSSW PF Jets.
void setShowerSigma(double sigma)
set shower sigma for
void add8Neighbour(unsigned index)
JetReco::InputCollection Constituents
bool printPFBlocks_
print PFBlocks yes/no
PFJetBenchmark PFJetBenchmark_
PFJet Benchmark.
General option file parser.
Ptr< typename C::value_type > refToPtr(Ref< C, typename C::value_type, refhelper::FindUsingAdvance< C, typename C::value_type > > const &ref)
reco::PFMETCollection pfMetsCMSSW_
bool useConvBremPFRecTracks_
Use Conv Brem KF Tracks.
edm::InputTag caloJetsTag_
void fillOutEventWithPFCandidates(const reco::PFCandidateCollection &pfCandidates)
fills OutEvent with candidates
void setPosCalcP1(double p1)
set p1 for position calculation
Particle flow cluster, see clustering algorithm in PFClusterAlgo.
void doClustering(const reco::PFRecHitCollection &rechits)
perform clustering
bool debug_
debug printouts for this PFRootEventManager on/off
edm::Handle< reco::PFCandidateCollection > pfCandidateHandle_
CMSSW PF candidates.
void setDirectory(TDirectory *dir)
set directory (to use in ROOT)
boost::shared_ptr< PFEnergyCalibrationHF > thepfEnergyCalibrationHF_
static void setDepthCorParameters(int mode, double a, double b, double ap, double bp)
void setPosCalcNCrystal(int n)
set number of crystals for position calculation (-1 all,5, or 9)
reco::GenParticleRefVector genParticlesforJets_
void setThreshSeedBarrel(double thresh)
set barrel seed threshold
unsigned detId() const
rechit detId
edm::InputTag convBremGsfrecTracksTag_
double deltaPhi(float phi1, float phi2)
void makeIterativeConeJets(const JetReco::InputCollection &fInput, JetReco::OutputCollection *fOutput)
Produce jet collection using CMS Iterative Cone Algorithm.
void setCandConnectorParameters(const edm::ParameterSet &iCfgCandConnector)
int chargeValue(const int &pdgId) const
edm::Handle< reco::PFRecHitCollection > rechitsHCALHandle_
rechits HCAL
virtual int status() const
status word
void push_back(Ptr< T > const &iPtr)
edm::Handle< reco::PFMETCollection > pfMetsHandle_
CMSSW PF MET.
void reconstructParticles(const reco::PFBlockHandle &blockHandle)
const math::XYZPoint & position() const
cartesian position (x, y, z)
void setS6S2DoubleSpikeEndcap(double cut)
fwlite::ChainEvent * ev_
NEW: input event.
std::vector< InputItem > InputCollection
IO * options_
options file parser
reco::PFJetCollection pfJetsCMSSW_
std::auto_ptr< reco::PFClusterCollection > clustersECAL_
void PreprocessRecHits(reco::PFRecHitCollection &rechits, bool findNeighbours)
preprocess a rechit vector from a given rechit branch
bool usePFV0s_
Use of V0 in PFAlgo.
bool isSeed(unsigned rhi) const
double printClustersEMin_
void fill(const T &jetCollection, const C &matchedJetCollection, float &minVal, float &maxVal)
fill histograms with all particle
reco::MuonCollection muons_
void setmEtInputCut(double amEtInputCut)
Minimum ET for jet constituents.
void setSeedThreshold(double aSeedThreshold)
Set seed to start jet reconstruction.
edm::InputTag stdTracksTag_
const Constituents & getTowerList()
void setMaxIterations(int amaxIteration)
????
std::vector< std::string > inFileNames_
input file names
PFRootEventManager()
default constructor
reco::PFRecTrackCollection displacedRecTracks_
General CMS geometry parameters used during Particle Flow reconstruction or drawing. All methods and members are static.
reco::GenJetCollection genJets_
gen Jets
reco::PFRecHitCollection rechitsHFHAD_
edm::InputTag primaryVerticesTag_
unsigned rectrackId() const
std::vector< PFSimParticle > PFSimParticleCollection
collection of PFSimParticle objects
const edm::OwnVector< reco::PFBlockElement > & elements() const
edm::InputTag rechitsHFEMTag_
void addJetMC(const Jet &jets)
edm::InputTag rechitsECALTag_
std::vector< PFRecHit > PFRecHitCollection
collection of PFRecHit objects
reco::CandidatePtrVector caloTowersPtrs_
bool usePFNuclearInteractions_
Use of PFDisplacedVertex in PFAlgo.
Transient Jet class used by the reconstruction algorithms.
bool isHadronicTau() const
study the sim event to check if the tau decay is hadronic
void checkCleaning(const reco::PFRecHitCollection &cleanedHF)
Check HF Cleaning.
std::auto_ptr< reco::PFClusterCollection > clustersHCAL_
reco::PhotonCollection photons_
Base class for particle flow input reconstructed tracks and simulated particles.
const std::vector< PFJetAlgorithm::Jet > & FindJets(const std::vector< TLorentzVector > *vecs)
std::vector< ProtoJet > caloJets_
calo Jets
void setDisplacedVerticesParameters(bool rejectTracks_Bad, bool rejectTracks_Step45, bool usePFNuclearInteractions, bool usePFConversions, bool usePFDecays, double dptRel_DispVtx)
void fillOutEventWithCaloTowers(const CaloTowerCollection &cts)
fills outEvent with calo towers
void setThreshBarrel(double thresh)
setters -------------------------------------------------——
PFClusterAlgo clusterAlgoECAL_
reco::PFRecTrackCollection recTracks_
edm::Handle< reco::GsfPFRecTrackCollection > gsfrecTracksHandle_
reconstructed GSF tracks
void write()
write to the TFile, in plain ROOT mode. No need to call this function in DQM mode ...
LuminosityBlockNumber_t luminosityBlock() const
void setConeRadius(double aConeRadius)
Set radius of the cone.
void setUseCornerCells(bool usecornercells)
activate use of cells with a common corner to build topo-clusters
bool highPtJet(double ptMin) const
returns true if there is at least one jet with pT>pTmin
void setPFEleParameters(double mvaEleCut, std::string mvaWeightFileEleID, bool usePFElectrons, const boost::shared_ptr< PFSCEnergyCalibration > &thePFSCEnergyCalibration, const boost::shared_ptr< PFEnergyCalibration > &thePFEnergyCalibration, double sumEtEcalIsoForEgammaSC_barrel, double sumEtEcalIsoForEgammaSC_endcap, double coneEcalIsoForEgammaSC, double sumPtTrackIsoForEgammaSC_barrel, double sumPtTrackIsoForEgammaSC_endcap, unsigned int nTrackIsoForEgammaSC, double coneTrackIsoForEgammaSC, bool applyCrackCorrections=false, bool usePFSCEleCalib=true, bool useEGElectrons=false, bool useEGammaSupercluster=true)
reco::PFRecHitCollection rechitsPS_
Jets made from PFObjects.
void applyCuts(const reco::CandidatePtrVector &Candidates, JetReco::InputCollection *input)
virtual double eta() const
momentum pseudorapidity
void particleFlow()
performs particle flow
std::vector< ElementInBlock > ElementsInBlocks
edm::Handle< reco::PhotonCollection > photonHandle_
photons
void setNumber(int number)
double printGenParticlesPtMin_
double tauBenchmark(const reco::PFCandidateCollection &candidates)
COLIN need to get rid of this mess.
edm::Handle< std::vector< reco::CaloJet > > caloJetsHandle_
CMSSW calo Jets.
bool GetOpt(const char *tag, const char *key, std::vector< T > &values) const
reads a vector of T
const ElementsInBlocks & elementsInBlocks() const
bool getByLabel(const InputTag &, Handle< T > &) const
bool doPFMETBenchmark_
PFMET benchmark on/off.
reco::PFRecHitCollection rechitsHCAL_
std::vector< PFCandidatePtr > pfCandidates(const PFJet &jet, int particleId, bool sort=true)
void reconstructFWLiteJets(const reco::CandidatePtrVector &Candidates, std::vector< ProtoJet > &output)
used by the reconstruct*Jets functions
edm::InputTag gsfrecTracksTag_
edm::Handle< reco::PFRecHitCollection > rechitsECALHandle_
rechits ECAL
void setThreshPtSeedBarrel(double thresh)
edm::Handle< reco::PFRecHitCollection > rechitsHFHADHandle_
rechits HF HAD
std::vector< edm::Handle< reco::PFRecHitCollection > > rechitsCLEANEDHandles_
reco::PFSimParticleCollection trueParticles_
XYZTLorentzVectorD XYZTLorentzVector
Lorentz vector with cylindrical internal representation using pseudorapidity.
edm::Handle< reco::PFSimParticleCollection > trueParticlesHandle_
true particles
void addCandidate(const Particle &ptc)
bool readFromSimulation(int entry)
read data from simulation tree
void setThreshSeedEndcap(double thresh)
set endcap seed threshold
edm::InputTag stringToTag(const std::vector< std::string > &tagname)
returns an InputTag from a vector of strings
void print(std::ostream &out=std::cout, int maxNLines=-1) const
print information
virtual double energy() const
energy
Algorithm for particle flow clustering.
void readOptions(const char *file, bool refresh=true, bool reconnect=false)
edm::Handle< reco::TrackCollection > stdTracksHandle_
standard reconstructed tracks
std::vector< int > filterTaus_
edm::InputTag rechitsPSTag_
void setup(std::string Filename, bool debug, bool plotAgainstReco=0, bool onlyTwoJets=1, double deltaRMax=0.1, std::string benchmarkLabel_="ParticleFlow", double recPt=-1, double maxEta=-1, DQMStore *dbe_store=NULL)
bool isNull() const
Checks for null.
bool isNeutrino(const Candidate &part)
edm::Handle< reco::GenJetCollection > genJetsHandle_
CMSSW gen Jets.
void fillPhotonMask(std::vector< bool > &mask, const reco::PhotonCollection &photons) const
photon mask set to true for photons inside TCutG
bool jetsDebug_
debug printouts for jet algo on/off
bool printClusters_
print clusters yes/no
reco::VertexCollection primaryVertices_
void setDebug(bool debug)
edm::InputTag genParticlesforMETTag_
Particle flow rechit (rechit + geometry and topology information). See clustering algorithm in PFClus...
reco::CandidatePtrVector pfCandidatesPtrs_
TTree * outTree_
output tree
void fillOutEventWithClusters(const reco::PFClusterCollection &clusters)
fills OutEvent with clusters
void setParameters(double nSigmaECAL, double nSigmaHCAL, const boost::shared_ptr< PFEnergyCalibration > &calibration, const boost::shared_ptr< PFEnergyCalibrationHF > &thepfEnergyCalibrationHF)
std::auto_ptr< reco::PFClusterCollection > clustersPS_
std::vector< GsfPFRecTrack > GsfPFRecTrackCollection
collection of GsfPFRecTrack objects
void printRecHits(const reco::PFRecHitCollection &rechits, const PFClusterAlgo &clusterAlgo, std::ostream &out=std::cout) const
print rechits
reco::GenJetCollection genJetsCMSSW_
void makeMidpointJets(const JetReco::InputCollection &fInput, JetReco::OutputCollection *fOutput)
Produce jet collection using CMS Midpoint Jet Algorithm.
TFile * outFile_
output file
void setup()
book histograms
void mcTruthMatching(std::ostream &out, const reco::PFCandidateCollection &candidates, std::vector< std::list< simMatch > > &candSimMatchTrack, std::vector< std::list< simMatch > > &candSimMatchEcal) const
std::pair< std::string, MonitorElement * > entry
void setDebug(bool debug)
sets debug printout flag
PFJetMonitor pfJetMonitor_
std::ofstream * calibFile_
void setParameters(float dRMax, bool matchCharge, Benchmark::Mode mode, float ptmin, float ptmax, float etamin, float etamax, float phimin, float phimax, bool fracHistoFlag=true)
set the parameters locally
void setNNeighbours(int n)
set number of neighbours for
TH1F * h_deltaETvisible_MCPF_
output histo dET ( PF - MC)
edm::InputTag pfNuclearTrackerVertexTag_
virtual int charge() const
electric charge
void setParameters(float dRMax=0.3, bool matchCharge=true, Benchmark::Mode mode=Benchmark::DEFAULT)
set the benchmark parameters
edm::InputTag corrcaloJetsTag_
bool doParticleFlow_
particle flow on/off
edm::InputTag genParticlesforJetsTag_
edm::InputTag caloTowersTag_
PFClusterAlgo clusterAlgoHCAL_
clustering algorithm for HCAL
float jetArea() const
Jet area as calculated by algorithm.
Jets made from MC generator particles.
PFCandidateManager pfCandidateManager_
edm::InputTag recTracksTag_
void addCluster(const Cluster &ptc)
bool printPFCandidates_
print PFCandidates yes/no
void printClusters(const reco::PFClusterCollection &clusters, std::ostream &out=std::cout) const
print clusters
std::list< std::pair< double, unsigned > >::iterator ITM
void setS4S1CleanBarrel(const std::vector< double > &coeffs)
reco::PFCandidateCollection pfCandCMSSW_
const reco::PFTrajectoryPoint & extrapolatedPoint(unsigned layerid) const
reco::GsfPFRecTrackCollection gsfrecTracks_
edm::InputTag genJetsTag_
void SetConeAngle(double coneAngle)
void setThreshPtSeedEndcap(double thresh)
double resNeutralEmEnergyMax() const
double resNeutralHadEnergyMax() const
void SetSeedEt(double et)
bool usePFConversions_
Use of conversions in PFAlgo.
bool findRecHitNeighbours_
find rechit neighbours ?
reco::CandidatePtrVector genParticlesforJetsPtrs_
std::vector< double > recHitContribFrac() const
How EventSelector::AcceptEvent() decides whether to accept an event for output otherwise it is excluding the probing of A single or multiple positive and the trigger will pass if any such matching triggers are PASS or EXCEPTION[A criterion thatmatches no triggers at all is detected and causes a throw.] A single negative with an expectation of appropriate bit checking in the decision and the trigger will pass if any such matching triggers are FAIL or EXCEPTION A wildcarded negative criterion that matches more than one trigger in the trigger but the state exists so we define the behavior If all triggers are the negative crieriion will lead to accepting the event(this again matches the behavior of"!*"before the partial wildcard feature was incorporated).The per-event"cost"of each negative criterion with multiple relevant triggers is about the same as!*was in the past
void setPostHFCleaningParameters(bool postHFCleaning, double minHFCleaningPt, double minSignificance, double maxSignificance, double minSignificanceReduction, double maxDeltaPhiPt, double minDeltaMet)
std::vector< PFBlock > PFBlockCollection
collection of PFBlock objects
TH1F * h_deltaETvisible_MCEHT_
output histo dET ( EHT - MC)
void setThreshPtEndcap(double thresh)
bool to(Long64_t iIndex)
Go to the event at index iIndex.
virtual bool processEntry(int entry)
process one entry (pass the TTree entry)
void setPFMuonAndFakeParameters(std::vector< double > muonHCAL, std::vector< double > muonECAL, double nSigmaTRACK, double ptError, std::vector< double > factors45, bool usePFMuonMomAssign)
reco::PFRecHitCollection rechitsHFEM_
void setDebug(bool aDebug)
PFAlgo pfAlgo_
particle flow algorithm
true particle for particle flow
double energy() const
cluster energy
void clustering()
read data from testbeam tree
std::vector< reco::PFRecHitCollection > rechitsCLEANEDV_
rechits HF CLEANED
void setThreshEndcap(double thresh)
set endcap threshold
void process(const reco::PFJetCollection &, const reco::GenJetCollection &)
void addJetPF(const Jet &jets)
edm::InputTag rechitsHFHADTag_
std::string expand(const std::string &oldString) const
void setThreshDoubleSpikeBarrel(double thresh)
set endcap thresholds for double spike cleaning
void printRecHit(const reco::PFRecHit &rh, unsigned index, const char *seed=" ", std::ostream &out=std::cout) const
void makeFastJets(const JetReco::InputCollection &fInput, JetReco::OutputCollection *fOutput)
Produce jet collection using CMS Fast Jet Algorithm.
double deltaR(double eta1, double eta2, double phi1, double phi2)
const std::vector< reco::PFTrajectoryPoint > & trajectoryPoints() const
void setConeAreaFraction(double aConeAreaFraction)
Set fraction of (alowed) overlapping.
bool makeSpecific(const JetReco::InputCollection &fConstituents, const CaloSubdetectorGeometry &fTowerGeometry, reco::CaloJet::Specific *fJetSpecific)
Make CaloJet specifics. Assumes ProtoJet is made from CaloTowerCandidates.
double printPFCandidatesPtMin_
void fillOutEventWithSimParticles(const reco::PFSimParticleCollection &ptcs)
fills OutEvent with sim particles
virtual bool processEvent(int run, int lumi, int event)
process one event (pass the CMS event number)
std::auto_ptr< reco::PFCandidateCollection > pfCandidates_
reconstructed pfCandidates
bool countChargedAndPhotons() const
const math::XYZPoint & position() const
is seed ?
bool printMCTruthMatching_
void setDirectory(TDirectory *dir)
set directory (to use in ROOT)
void fillOne(const reco::MET &met, const reco::MET &matchedMet, float &minVal, float &maxVal)
edm::Handle< reco::PFConversionCollection > conversionHandle_
conversions
void connect(const char *infilename="")
open the root file and connect to the tree
std::vector< reco::PFCandidate > PFCandidateCollection
collection of PFCandidates
const std::vector< unsigned > & neighboursIds8() const
reco::GsfPFRecTrackCollection convBremGsfrecTracks_
void printGenParticles(std::ostream &out=std::cout, int maxNLines=-1) const
print the HepMC truth
const math::XYZTLorentzVector & momentum() const
4-momenta quadrivector
void setPFVertexParameters(bool useVertex, const reco::VertexCollection &primaryVertices)
reco::GenParticleCollection genParticlesCMSSW_
edm::Handle< reco::GenParticleCollection > genParticlesforMETHandle_
CMSSW GenParticles.
bool doTauBenchmark_
tau benchmark on/off
const HepMC::GenEvent * GetEvent() const
reco::PFJetCollection pfJets_
PF Jets.
edm::InputTag caloMetsTag_
std::auto_ptr< reco::PFClusterCollection > clustersHFEM_
double resChargedHadEnergyMax() const
virtual double px() const
x coordinate of momentum vector
bool eventAccepted() const
returns true if the event is accepted(have a look at the function implementation) ...
virtual const_iterator begin() const
first daughter const_iterator
edm::InputTag rechitsHCALTag_
void printMCCalib(std::ofstream &out) const
print calibration information
reco::PFRecHitCollection rechitsCLEANED_
unsigned int nCharged(const GenJet &jet)
XYZVectorD XYZVector
spatial vector with cartesian internal representation
virtual double pt() const
transverse momentum
std::auto_ptr< reco::PFClusterCollection > clustersHFHAD_
XYZPointD XYZPoint
point in space with cartesian internal representation
edm::Handle< CaloTowerCollection > caloTowersHandle_
input collection of calotowers
const LorentzVector & p4() const
unsigned int nTrajectoryMeasurements() const
PFBlockAlgo pfBlockAlgo_
algorithm for building the particle flow blocks
void setRange(float ptMin, float ptMax, float etaMin, float etaMax, float phiMin, float phiMax)
reco::TrackCollection stdTracks_
std::auto_ptr< reco::PFBlockCollection > transferBlocks()
bool highPtPFCandidate(double ptMin, reco::PFCandidate::ParticleType type=reco::PFCandidate::X) const
returns true if there is a PFCandidate of a given type over a given pT
reco::CaloMETCollection caloMetsCMSSW_
void setInput(const T< reco::PFRecTrackCollection > &trackh, const T< reco::GsfPFRecTrackCollection > &gsftrackh, const T< reco::GsfPFRecTrackCollection > &convbremgsftrackh, const T< reco::MuonCollection > &muonh, const T< reco::PFDisplacedTrackerVertexCollection > &nuclearh, const T< reco::PFRecTrackCollection > &nucleartrackh, const T< reco::PFConversionCollection > &conv, const T< reco::PFV0Collection > &v0, const T< reco::PFClusterCollection > &ecalh, const T< reco::PFClusterCollection > &hcalh, const T< reco::PFClusterCollection > &hfemh, const T< reco::PFClusterCollection > &hfhadh, const T< reco::PFClusterCollection > &psh, const T< reco::PhotonCollection > &egphh, const Mask &trackMask=dummyMask_, const Mask &gsftrackMask=dummyMask_, const Mask &ecalMask=dummyMask_, const Mask &hcalMask=dummyMask_, const Mask &hfemMask=dummyMask_, const Mask &hfhadMask=dummyMask_, const Mask &psMask=dummyMask_, const Mask &phMask=dummyMask_)
set input collections of tracks and clusters
void addParticle(const Particle &ptc)
PFClusterAlgo clusterAlgoPS_
clustering algorithm for PS
void setRecHitNeigbours(reco::PFRecHit &rh, const std::map< unsigned, unsigned > &detId2index)
std::vector< Photon > PhotonCollection
collectin of Photon objects
void findBlocks()
build blocks
float pileup() const
pileup energy contribution as calculated by algorithm
edm::Handle< edm::HepMCProduct > MCTruthHandle_
MC truth.
reco::PFDisplacedTrackerVertexCollection pfNuclearTrackerVertex_
edm::HepMCProduct MCTruth_
void addBlock(const Block &b)
bool doPFCandidateBenchmark_
virtual void readSpecificOptions(const char *file)
virtual ~PFRootEventManager()
destructor
bool doPFJetBenchmark_
PFJet benchmark on/off.
const reco::PFSimParticle & closestParticle(reco::PFTrajectoryPoint::LayerType layer, double eta, double phi, double &peta, double &pphi, double &pe) const
find the closest PFSimParticle to a point (eta,phi) in a given detector
edm::Handle< reco::METCollection > tcMetsHandle_
CMSSW TCMET.
std::auto_ptr< METManager > metManager_
edm::Handle< reco::PFDisplacedTrackerVertexCollection > pfNuclearTrackerVertexHandle_
PFDisplacedVertex.
void setThreshPtBarrel(double thresh)
std::auto_ptr< std::vector< reco::PFCluster > > & clusters()
void setParameters(std::vector< double > &DPtovPtCut, std::vector< unsigned > &NHitCut, bool useConvBremPFRecTracks, bool useIterTracking, int nuclearInteractionsPurity, bool useEGPhotons, std::vector< double > &photonSelectionCuts)
void clear()
Clear the PtrVector.
edm::Handle< reco::VertexCollection > primaryVerticesHandle_
reconstructed primary vertices
void initializeEventInformation()
Particle reconstructed by the particle flow algorithm.
double energy() const
rechit energy
edm::InputTag conversionTag_
void setCleanRBXandHPDs(bool cleanRBXandHPDs)
Activate cleaning of HCAL RBX's and HPD's.
bool printSimParticles_
print true particles yes/no
void setS6S2DoubleSpikeBarrel(double cut)
void reconstructCaloJets()
reconstruct calo jets
edm::Handle< reco::PFRecTrackCollection > displacedRecTracksHandle_
edm::Handle< reco::PFRecHitCollection > rechitsPSHandle_
rechits PS
edm::Handle< std::vector< reco::CaloJet > > corrcaloJetsHandle_
CMSSW corrected calo Jets.
edm::Handle< reco::GsfPFRecTrackCollection > convBremGsfrecTracksHandle_
reconstructed secondary GSF tracks
edm::Handle< reco::PFV0Collection > v0Handle_
V0.
void enableDebugging(bool debug)
set hits on which clustering will be performed
static TVector3 VectorEPRtoXYZ(const TVector3 &posepr)
converts a vector (in eta,phi,R) to a vector in (x,y,z)
void setS4S1CleanEndcap(const std::vector< double > &coeffs)
void postMuonCleaning(const edm::Handle< reco::MuonCollection > &muonh, const reco::VertexCollection &primaryVertices)
void fill(const reco::PFCandidateCollection &candCollection, const C &matchedCandCollection)
fill histograms with all particle
size_type size() const
Size of the RefVector.
bool useConvBremGsfTracks_
Use Secondary Gsf Tracks.
std::vector< PFCluster > PFClusterCollection
collection of PFCluster objects
static void enable()
enable automatic library loading
std::vector< reco::CaloJet > corrcaloJetsCMSSW_
math::XYZPoint Point
point in the space
edm::InputTag pfCandidateTag_
void pfCandCompare(int)
compare particle flow
reco::PFRecHitCollection rechitsECAL_
unsigned int nTrajectoryPoints() const
double MET1cut
PFMET Benchmark.
A PFTrack holds several trajectory points, which basically contain the position and momentum of a tra...
void setRParam(double aRparam)
int nPasses() const
number of passes taken by algorithm
reco::PFConversionCollection conversion_
PFClusterAlgo clusterAlgoHFHAD_
clustering algorithm for HF, hadronic layer
const std::vector< unsigned > & neighboursIds4() const
void addJetEHT(const Jet &jets)
virtual ParticleType particleId() const
void setMaxPairSize(int aMaxPairSize)
????
void setThreshCleanEndcap(double thresh)
set endcap clean threshold
void setup()
book histograms
std::vector< reco::CaloJet > caloJetsCMSSW_
void setHistos(TFile *file, TH2F *hB, TH2F *hE)
set endcap clean threshold
bool JECinCaloMet_
propagate the Jet Energy Corrections to the caloMET on/off
bool fastsim_
Fastsim or fullsim.
reco::METCollection tcMetsCMSSW_
void setPtMin(double aPtMin)
LayerType
Define the different layers where the track can be propagated.
virtual double phi() const
momentum azimuthal angle
virtual const LorentzVector & p4() const
four-momentum Lorentz vector
bool useEGPhotons_
Use EGPhotons.
void addCaloTower(const CaloTower &ct)
void fillRecHitMask(std::vector< bool > &mask, const reco::PFRecHitCollection &rechits) const
rechit mask set to true for rechits inside TCutG
bool trackInsideGCut(const reco::PFTrack &track) const
is PFTrack inside cut G ? yes if at least one trajectory point is inside.
bool doCompare_
comparison with pf CMSSW
std::vector< PFRecTrack > PFRecTrackCollection
collection of PFRecTrack objects
bool printGenParticles_
print MC truth yes/no
bool useAtHLT
Use HLT tracking.
tuple size
Write out results.
edm::Handle< reco::MuonCollection > muonsHandle_
muons
virtual double py() const
y coordinate of momentum vector
void PreprocessRecTracks(reco::PFRecTrackCollection &rectracks)
preprocess a rectrack vector from a given rectrack branch
void setup()
book histograms
std::vector< unsigned > recHitContrib() const
void fillOutEventWithBlocks(const reco::PFBlockCollection &blocks)
fills outEvent with blocks
std::vector< edm::InputTag > rechitsCLEANEDTags_
edm::InputTag trueParticlesTag_
FWLiteJetProducer jetMaker_
wrapper to official jet algorithms
bool printRecHits_
print rechits yes/no
int jetAlgoType_
jet algo type
edm::Handle< reco::PFRecTrackCollection > recTracksHandle_
reconstructed tracks
int eventToEntry(int run, int lumi, int event) const