56 using boost::shared_ptr;
71 eventAuxiliary_( new edm::EventAuxiliary ),
89 =
new TH1F(
"h_deltaETvisible_MCEHT",
"Jet Et difference CaloTowers-MC"
92 =
new TH1F(
"h_deltaETvisible_MCPF" ,
"Jet Et difference ParticleFlow-MC"
107 unsigned int nev =
ev_->
size();
114 cout<<
"Number of events: "<< nev
138 cout<<
"calling PFRootEventManager::readOptions"<<endl;
155 catch(
const string& err ) {
166 string calibfilename;
168 if (!calibfilename.empty()) {
169 calibFile_ =
new std::ofstream(calibfilename.c_str());
170 std::cout <<
"Calib file name " << calibfilename <<
" " << calibfilename.c_str() << std::endl;
179 bool doOutTree =
false;
182 if(!outfilename.empty() ) {
183 outFile_ = TFile::Open(outfilename.c_str(),
"recreate");
203 options_->
GetOpt(
"pfjet_benchmark",
"outjetfile", outjetfilename);
209 options_->
GetOpt(
"pfjet_benchmark",
"plotAgainstReco", plotAgainstReco);
241 std::string outmetfilename;
242 options_->
GetOpt(
"pfmet_benchmark",
"outmetfile", outmetfilename);
251 bool pfmetBenchmarkDebug;
252 options_->
GetOpt(
"pfmet_benchmark",
"debug", pfmetBenchmarkDebug);
264 std::vector<unsigned int> vIgnoreParticlesIDs;
265 options_->
GetOpt(
"pfmet_benchmark",
"trueMetIgnoreParticlesIDs", vIgnoreParticlesIDs);
268 metManager_->SetIgnoreParticlesIDs(&vIgnoreParticlesIDs);
270 std::vector<unsigned int> trueMetSpecificIdCut;
271 std::vector<double> trueMetSpecificEtaCut;
272 options_->
GetOpt(
"pfmet_benchmark",
"trueMetSpecificIdCut", trueMetSpecificIdCut);
273 options_->
GetOpt(
"pfmet_benchmark",
"trueMetSpecificEtaCut", trueMetSpecificEtaCut);
274 if (trueMetSpecificIdCut.size()!=trueMetSpecificEtaCut.size())
std::cout <<
"Warning: PFRootEventManager: trueMetSpecificIdCut.size()!=trueMetSpecificEtaCut.size()" << std::endl;
275 else metManager_->SetSpecificIdCut(&trueMetSpecificIdCut,&trueMetSpecificEtaCut);
282 cout<<
"+++ Setting PFCandidate benchmark"<<endl;
284 dir = dir->mkdir(
"PFTask");
285 dir = dir->mkdir(
"particleFlowManager");
292 bool matchCharge =
true;
293 options_->
GetOpt(
"pfCandidate_benchmark",
"matchCharge", matchCharge);
298 static_cast<Benchmark::Mode>(mode));
302 cout<<
"+++ Done "<<endl;
309 cout<<
"+++ Setting PFDQM Monitoring " <<endl;
313 dqmFile_ = TFile::Open(dqmfilename.c_str(),
"recreate");
316 TDirectory* dir1 = dir->mkdir(
"PFJetValidation");
317 TDirectory*
dir2 = dir->mkdir(
"PFMETValidation");
324 bool matchCharge =
true;
325 options_->
GetOpt(
"pfCandidate_benchmark",
"matchCharge", matchCharge);
330 ptMin, 10e5, -4.5, 4.5, -10.0, 10.0,
false);
334 ptMin, 10e5, -4.5, 4.5, -10.0, 10.0,
false);
340 std::string outputFile0;
342 TH2F* hBNeighbour0 = 0;
343 TH2F* hENeighbour0 = 0;
345 if(!outputFile0.empty() ) {
346 file0 = TFile::Open(outputFile0.c_str(),
"recreate");
347 hBNeighbour0 =
new TH2F(
"BNeighbour0",
"f_{Neighbours} vs 1/E_{Seed} (ECAL Barrel)",500, 0., 0.5, 1000,0.,1.);
348 hENeighbour0 =
new TH2F(
"ENeighbour0",
"f_{Neighbours} vs 1/E_{Seed} (ECAL Endcap)",500, 0., 0.2, 1000,0.,1.);
351 std::string outputFile1;
353 TH2F* hBNeighbour1 = 0;
354 TH2F* hENeighbour1 = 0;
356 if(!outputFile1.empty() ) {
357 file1 = TFile::Open(outputFile1.c_str(),
"recreate");
358 hBNeighbour1 =
new TH2F(
"BNeighbour1",
"f_{Neighbours} vs 1/E_{Seed} (HCAL Barrel)",500, 0., 0.05, 400,0.,1.);
359 hENeighbour1 =
new TH2F(
"ENeighbour1",
"f_{Neighbours} vs 1/E_{Seed} (HCAL Endcap)",500, 0., 0.05, 400,0.,1.);
362 std::string outputFile2;
364 TH2F* hBNeighbour2 = 0;
365 TH2F* hENeighbour2 = 0;
367 if(!outputFile2.empty() ) {
368 file2 = TFile::Open(outputFile2.c_str(),
"recreate");
369 hBNeighbour2 =
new TH2F(
"BNeighbour2",
"f_{Neighbours} vs 1/E_{Seed} (HFEM Barrel)",500, 0., 0.02, 400,0.,1.);
370 hENeighbour2 =
new TH2F(
"ENeighbour2",
"f_{Neighbours} vs 1/E_{Seed} (HFEM Endcap)",500, 0., 0.02, 400,0.,1.);
373 std::string outputFile3;
375 TH2F* hBNeighbour3 = 0;
376 TH2F* hENeighbour3 = 0;
378 if(!outputFile3.empty() ) {
379 file3 = TFile::Open(outputFile3.c_str(),
"recreate");
380 hBNeighbour3 =
new TH2F(
"BNeighbour3",
"f_{Neighbours} vs 1/E_{Seed} (HFHAD Barrel)",500, 0., 0.02, 400,0.,1.);
381 hENeighbour3 =
new TH2F(
"ENeighbour3",
"f_{Neighbours} vs 1/E_{Seed} (HFHAD Endcap)",500, 0., 0.02, 400,0.,1.);
384 std::string outputFile4;
386 TH2F* hBNeighbour4 = 0;
387 TH2F* hENeighbour4 = 0;
389 if(!outputFile4.empty() ) {
390 file4 = TFile::Open(outputFile4.c_str(),
"recreate");
391 hBNeighbour4 =
new TH2F(
"BNeighbour4",
"f_{Neighbours} vs 1/E_{Seed} (Preshower Barrel)",200, 0., 1000., 400,0.,1.);
392 hENeighbour4 =
new TH2F(
"ENeighbour4",
"f_{Neighbours} vs 1/E_{Seed} (Preshower Endcap)",200, 0., 1000., 400,0.,1.);
412 cerr<<
"PFRootEventManager::ReadOptions, bad filter/taus option."<<endl
413 <<
"please use : "<<endl
414 <<
"\tfilter taus n_charged n_neutral"<<endl;
422 double threshold_R0=0.4;
425 double threshold_R1=1.0;
429 double threshHO_Seed_Ring0=1.0;
430 options_->
GetOpt(
"clustering",
"threshHO_Seed_Ring0", threshHO_Seed_Ring0);
432 double threshHO_Ring0=0.5;
435 double threshHO_Seed_Outer=3.1;
436 options_->
GetOpt(
"clustering",
"threshHO_Seed_Outer", threshHO_Seed_Outer);
438 double threshHO_Outer=1.0;
445 bool clusteringDebug =
false;
452 double threshEcalBarrel = 0.1;
453 options_->
GetOpt(
"clustering",
"thresh_Ecal_Barrel", threshEcalBarrel);
455 double threshPtEcalBarrel = 0.0;
456 options_->
GetOpt(
"clustering",
"thresh_Pt_Ecal_Barrel", threshPtEcalBarrel);
458 double threshSeedEcalBarrel = 0.3;
460 threshSeedEcalBarrel);
462 double threshPtSeedEcalBarrel = 0.0;
464 threshPtSeedEcalBarrel);
466 double threshCleanEcalBarrel = 1E5;
468 threshCleanEcalBarrel);
470 std::vector<double> minS4S1CleanEcalBarrel;
472 minS4S1CleanEcalBarrel);
474 double threshDoubleSpikeEcalBarrel = 10.;
476 threshDoubleSpikeEcalBarrel);
478 double minS6S2DoubleSpikeEcalBarrel = 0.04;
480 minS6S2DoubleSpikeEcalBarrel);
482 double threshEcalEndcap = 0.2;
483 options_->
GetOpt(
"clustering",
"thresh_Ecal_Endcap", threshEcalEndcap);
485 double threshPtEcalEndcap = 0.0;
486 options_->
GetOpt(
"clustering",
"thresh_Pt_Ecal_Endcap", threshPtEcalEndcap);
488 double threshSeedEcalEndcap = 0.8;
490 threshSeedEcalEndcap);
492 double threshPtSeedEcalEndcap = 0.0;
494 threshPtSeedEcalEndcap);
496 double threshCleanEcalEndcap = 1E5;
498 threshCleanEcalEndcap);
500 std::vector<double> minS4S1CleanEcalEndcap;
502 minS4S1CleanEcalEndcap);
504 double threshDoubleSpikeEcalEndcap = 1E9;
506 threshDoubleSpikeEcalEndcap);
508 double minS6S2DoubleSpikeEcalEndcap = -1.;
510 minS6S2DoubleSpikeEcalEndcap);
512 double showerSigmaEcal = 3;
516 int nNeighboursEcal = 4;
517 options_->
GetOpt(
"clustering",
"neighbours_Ecal", nNeighboursEcal);
519 int posCalcNCrystalEcal = -1;
521 posCalcNCrystalEcal);
524 = threshEcalBarrel<threshEcalEndcap ? threshEcalBarrel:threshEcalEndcap;
528 bool useCornerCellsEcal =
false;
600 double threshHcalBarrel = 0.8;
601 options_->
GetOpt(
"clustering",
"thresh_Hcal_Barrel", threshHcalBarrel);
603 double threshPtHcalBarrel = 0.0;
604 options_->
GetOpt(
"clustering",
"thresh_Pt_Hcal_Barrel", threshPtHcalBarrel);
606 double threshSeedHcalBarrel = 1.4;
608 threshSeedHcalBarrel);
610 double threshPtSeedHcalBarrel = 0.0;
612 threshPtSeedHcalBarrel);
614 double threshCleanHcalBarrel = 1E5;
616 threshCleanHcalBarrel);
618 std::vector<double> minS4S1CleanHcalBarrel;
620 minS4S1CleanHcalBarrel);
622 double threshHcalEndcap = 0.8;
623 options_->
GetOpt(
"clustering",
"thresh_Hcal_Endcap", threshHcalEndcap);
625 double threshPtHcalEndcap = 0.0;
626 options_->
GetOpt(
"clustering",
"thresh_Pt_Hcal_Endcap", threshPtHcalEndcap);
628 double threshSeedHcalEndcap = 1.4;
630 threshSeedHcalEndcap);
632 double threshPtSeedHcalEndcap = 0.0;
634 threshPtSeedHcalEndcap);
636 double threshCleanHcalEndcap = 1E5;
638 threshCleanHcalEndcap);
640 std::vector<double> minS4S1CleanHcalEndcap;
642 minS4S1CleanHcalEndcap);
644 double showerSigmaHcal = 15;
648 int nNeighboursHcal = 4;
649 options_->
GetOpt(
"clustering",
"neighbours_Hcal", nNeighboursHcal);
651 int posCalcNCrystalHcal = 5;
653 posCalcNCrystalHcal);
655 bool useCornerCellsHcal =
false;
659 bool cleanRBXandHPDs =
false;
664 = threshHcalBarrel<threshHcalEndcap ? threshHcalBarrel:threshHcalEndcap;
703 double threshHOBarrel = 0.5;
704 options_->
GetOpt(
"clustering",
"thresh_HO_Barrel", threshHOBarrel);
706 double threshPtHOBarrel = 0.0;
707 options_->
GetOpt(
"clustering",
"thresh_Pt_HO_Barrel", threshPtHOBarrel);
709 double threshSeedHOBarrel = 1.0;
713 double threshPtSeedHOBarrel = 0.0;
715 threshPtSeedHOBarrel);
717 double threshCleanHOBarrel = 1E5;
719 threshCleanHOBarrel);
721 std::vector<double> minS4S1CleanHOBarrel;
723 minS4S1CleanHOBarrel);
725 double threshDoubleSpikeHOBarrel = 1E9;
727 threshDoubleSpikeHOBarrel);
729 double minS6S2DoubleSpikeHOBarrel = -1;
731 minS6S2DoubleSpikeHOBarrel);
733 double threshHOEndcap = 1.0;
734 options_->
GetOpt(
"clustering",
"thresh_HO_Endcap", threshHOEndcap);
736 double threshPtHOEndcap = 0.0;
737 options_->
GetOpt(
"clustering",
"thresh_Pt_HO_Endcap", threshPtHOEndcap);
739 double threshSeedHOEndcap = 3.1;
743 double threshPtSeedHOEndcap = 0.0;
745 threshPtSeedHOEndcap);
747 double threshCleanHOEndcap = 1E5;
749 threshCleanHOEndcap);
751 std::vector<double> minS4S1CleanHOEndcap;
753 minS4S1CleanHOEndcap);
755 double threshDoubleSpikeHOEndcap = 1E9;
757 threshDoubleSpikeHOEndcap);
759 double minS6S2DoubleSpikeHOEndcap = -1;
761 minS6S2DoubleSpikeHOEndcap);
763 double showerSigmaHO = 15;
767 int nNeighboursHO = 4;
770 int posCalcNCrystalHO = 5;
774 bool useCornerCellsHO =
false;
778 bool cleanRBXandHPDsHO =
false;
783 = threshHOBarrel<threshHOEndcap ? threshHOBarrel:threshHOEndcap;
829 double threshHFEM = 0.;
832 double threshPtHFEM = 0.;
835 double threshSeedHFEM = 0.001;
839 double threshPtSeedHFEM = 0.0;
843 double threshCleanHFEM = 1E5;
847 std::vector<double> minS4S1CleanHFEM;
851 double showerSigmaHFEM = 0.1;
855 int nNeighboursHFEM = 4;
856 options_->
GetOpt(
"clustering",
"neighbours_HFEM", nNeighboursHFEM);
858 int posCalcNCrystalHFEM = -1;
860 posCalcNCrystalHFEM);
862 bool useCornerCellsHFEM =
false;
866 double posCalcP1HFEM = threshHFEM;
894 double threshHFHAD = 0.;
897 double threshPtHFHAD = 0.;
900 double threshSeedHFHAD = 0.001;
904 double threshPtSeedHFHAD = 0.0;
908 double threshCleanHFHAD = 1E5;
912 std::vector<double> minS4S1CleanHFHAD;
916 double showerSigmaHFHAD = 0.1;
920 int nNeighboursHFHAD = 4;
921 options_->
GetOpt(
"clustering",
"neighbours_HFHAD", nNeighboursHFHAD);
923 int posCalcNCrystalHFHAD = -1;
925 posCalcNCrystalHFHAD);
927 bool useCornerCellsHFHAD =
false;
929 useCornerCellsHFHAD);
931 double posCalcP1HFHAD = threshHFHAD;
959 double threshPS = 0.0001;
962 double threshPtPS = 0.0;
965 double threshSeedPS = 0.001;
969 double threshPtSeedPS = 0.0;
970 options_->
GetOpt(
"clustering",
"thresh_Pt_Seed_PS", threshPtSeedPS);
972 double threshCleanPS = 1E5;
975 std::vector<double> minS4S1CleanPS;
976 options_->
GetOpt(
"clustering",
"minS4S1_Clean_PS", minS4S1CleanPS);
979 double threshPSBarrel = threshPS;
980 double threshSeedPSBarrel = threshSeedPS;
982 double threshPtPSBarrel = threshPtPS;
983 double threshPtSeedPSBarrel = threshPtSeedPS;
985 double threshCleanPSBarrel = threshCleanPS;
986 std::vector<double> minS4S1CleanPSBarrel = minS4S1CleanPS;
988 double threshPSEndcap = threshPS;
989 double threshSeedPSEndcap = threshSeedPS;
991 double threshPtPSEndcap = threshPtPS;
992 double threshPtSeedPSEndcap = threshPtSeedPS;
994 double threshCleanPSEndcap = threshCleanPS;
995 std::vector<double> minS4S1CleanPSEndcap = minS4S1CleanPS;
997 double showerSigmaPS = 0.1;
1001 int nNeighboursPS = 4;
1004 int posCalcNCrystalPS = -1;
1008 bool useCornerCellsPS =
false;
1012 double posCalcP1PS = threshPS;
1062 std::vector<double> DPtovPtCut;
1063 std::vector<unsigned> NHitCut;
1064 bool useIterTracking;
1065 int nuclearInteractionsPurity;
1068 options_->
GetOpt(
"particle_flow",
"useIterTracking", useIterTracking);
1069 options_->
GetOpt(
"particle_flow",
"nuclearInteractionsPurity", nuclearInteractionsPurity);
1072 std::vector<double> PhotonSelectionCuts;
1074 options_->
GetOpt(
"particle_flow",
"photonSelection", PhotonSelectionCuts);
1081 nuclearInteractionsPurity,
1083 PhotonSelectionCuts);
1086 cerr<<
"exception setting PFBlockAlgo parameters: "
1087 <<err.what()<<
". terminating."<<endl;
1093 bool blockAlgoDebug =
false;
1097 bool AlgoDebug =
false;
1102 boost::shared_ptr<PFEnergyCalibration>
1106 bool usePFSCEleCalib;
1107 std::vector<double> calibPFSCEle_Fbrem_barrel;
1108 std::vector<double> calibPFSCEle_Fbrem_endcap;
1109 std::vector<double> calibPFSCEle_barrel;
1110 std::vector<double> calibPFSCEle_endcap;
1111 options_->
GetOpt(
"particle_flow",
"usePFSCEleCalib",usePFSCEleCalib);
1112 options_->
GetOpt(
"particle_flow",
"calibPFSCEle_Fbrem_barrel",calibPFSCEle_Fbrem_barrel);
1113 options_->
GetOpt(
"particle_flow",
"calibPFSCEle_Fbrem_endcap",calibPFSCEle_Fbrem_endcap);
1114 options_->
GetOpt(
"particle_flow",
"calibPFSCEle_barrel",calibPFSCEle_barrel);
1115 options_->
GetOpt(
"particle_flow",
"calibPFSCEle_endcap",calibPFSCEle_endcap);
1116 boost::shared_ptr<PFSCEnergyCalibration>
1117 thePFSCEnergyCalibration (
new PFSCEnergyCalibration(calibPFSCEle_Fbrem_barrel,calibPFSCEle_Fbrem_endcap,
1118 calibPFSCEle_barrel,calibPFSCEle_endcap ));
1120 bool useEGammaSupercluster;
1121 double sumEtEcalIsoForEgammaSC_barrel;
1122 double sumEtEcalIsoForEgammaSC_endcap;
1123 double coneEcalIsoForEgammaSC;
1124 double sumPtTrackIsoForEgammaSC_barrel;
1125 double sumPtTrackIsoForEgammaSC_endcap;
1126 unsigned int nTrackIsoForEgammaSC;
1127 double coneTrackIsoForEgammaSC;
1128 options_->
GetOpt(
"particle_flow",
"useEGammaSupercluster",useEGammaSupercluster);
1129 options_->
GetOpt(
"particle_flow",
"sumEtEcalIsoForEgammaSC_barrel",sumEtEcalIsoForEgammaSC_barrel);
1130 options_->
GetOpt(
"particle_flow",
"sumEtEcalIsoForEgammaSC_endcap",sumEtEcalIsoForEgammaSC_endcap);
1131 options_->
GetOpt(
"particle_flow",
"coneEcalIsoForEgammaSC",coneEcalIsoForEgammaSC);
1132 options_->
GetOpt(
"particle_flow",
"sumPtTrackIsoForEgammaSC_barrel",sumPtTrackIsoForEgammaSC_barrel);
1133 options_->
GetOpt(
"particle_flow",
"sumPtTrackIsoForEgammaSC_endcap",sumPtTrackIsoForEgammaSC_endcap);
1134 options_->
GetOpt(
"particle_flow",
"nTrackIsoForEgammaSC",nTrackIsoForEgammaSC);
1135 options_->
GetOpt(
"particle_flow",
"coneTrackIsoForEgammaSC",coneTrackIsoForEgammaSC);
1139 bool calibHF_use =
false;
1140 std::vector<double> calibHF_eta_step;
1141 std::vector<double> calibHF_a_EMonly;
1142 std::vector<double> calibHF_b_HADonly;
1143 std::vector<double> calibHF_a_EMHAD;
1144 std::vector<double> calibHF_b_EMHAD;
1146 options_->
GetOpt(
"particle_flow",
"calib_calibHF_use",calibHF_use);
1147 options_->
GetOpt(
"particle_flow",
"calib_calibHF_eta_step",calibHF_eta_step);
1148 options_->
GetOpt(
"particle_flow",
"calib_calibHF_a_EMonly",calibHF_a_EMonly);
1149 options_->
GetOpt(
"particle_flow",
"calib_calibHF_b_HADonly",calibHF_b_HADonly);
1150 options_->
GetOpt(
"particle_flow",
"calib_calibHF_a_EMHAD",calibHF_a_EMHAD);
1151 options_->
GetOpt(
"particle_flow",
"calib_calibHF_b_EMHAD",calibHF_b_EMHAD);
1153 boost::shared_ptr<PFEnergyCalibrationHF> thepfEnergyCalibrationHF
1154 (
new PFEnergyCalibrationHF(calibHF_use,calibHF_eta_step,calibHF_a_EMonly,calibHF_b_HADonly,calibHF_a_EMHAD,calibHF_b_EMHAD) ) ;
1160 double nSigmaECAL = 99999;
1162 double nSigmaHCAL = 99999;
1170 cerr<<
"exception setting PFAlgo parameters: "
1171 <<err.what()<<
". terminating."<<endl;
1176 std::vector<double> muonHCAL;
1177 std::vector<double> muonECAL;
1178 std::vector<double> muonHO;
1183 assert ( muonHCAL.size() == 2 && muonECAL.size() == 2 && muonHO.size() == 2);
1185 double nSigmaTRACK = 3.0;
1188 double ptError = 1.0;
1191 std::vector<double> factors45;
1193 assert ( factors45.size() == 2 );
1195 bool usePFMuonMomAssign =
false;
1196 options_->
GetOpt(
"particle_flow",
"usePFMuonMomAssign", usePFMuonMomAssign);
1198 bool useBestMuonTrack =
false;
1199 options_->
GetOpt(
"particle_flow",
"useBestMuonTrack", useBestMuonTrack);
1212 cerr<<
"exception setting PFAlgo Muon and Fake parameters: "
1213 <<err.what()<<
". terminating."<<endl;
1218 bool postHFCleaning =
true;
1219 options_->
GetOpt(
"particle_flow",
"postHFCleaning", postHFCleaning);
1220 double minHFCleaningPt = 5.;
1221 options_->
GetOpt(
"particle_flow",
"minHFCleaningPt", minHFCleaningPt);
1222 double minSignificance = 2.5;
1223 options_->
GetOpt(
"particle_flow",
"minSignificance", minSignificance);
1224 double maxSignificance = 2.5;
1225 options_->
GetOpt(
"particle_flow",
"maxSignificance", maxSignificance);
1226 double minSignificanceReduction = 1.4;
1227 options_->
GetOpt(
"particle_flow",
"minSignificanceReduction", minSignificanceReduction);
1228 double maxDeltaPhiPt = 7.0;
1229 options_->
GetOpt(
"particle_flow",
"maxDeltaPhiPt", maxDeltaPhiPt);
1230 double minDeltaMet = 0.4;
1239 minSignificanceReduction,
1244 cerr<<
"exception setting post HF cleaning parameters: "
1245 <<err.what()<<
". terminating."<<endl;
1265 double mvaEleCut = -1.;
1268 bool applyCrackCorrections=
true;
1269 options_->
GetOpt(
"particle_flow",
"electron_crackCorrection",applyCrackCorrections);
1271 string mvaWeightFileEleID =
"";
1273 mvaWeightFileEleID);
1274 mvaWeightFileEleID =
expand(mvaWeightFileEleID);
1276 std::string egammaElectronstagname;
1277 options_->
GetOpt(
"particle_flow",
"egammaElectrons",egammaElectronstagname);
1288 thePFSCEnergyCalibration,
1290 sumEtEcalIsoForEgammaSC_barrel,
1291 sumEtEcalIsoForEgammaSC_endcap,
1292 coneEcalIsoForEgammaSC,
1293 sumPtTrackIsoForEgammaSC_barrel,
1294 sumPtTrackIsoForEgammaSC_endcap,
1295 nTrackIsoForEgammaSC,
1296 coneTrackIsoForEgammaSC,
1297 applyCrackCorrections,
1300 useEGammaSupercluster);
1303 cerr<<
"exception setting PFAlgo Electron parameters: "
1304 <<err.what()<<
". terminating."<<endl;
1310 bool usePFPhotons =
true;
1312 string mvaWeightFileConvID =
"";
1313 string mvaWeightFileRegLCEB=
"";
1314 string mvaWeightFileRegLCEE=
"";
1315 string mvaWeightFileRegGCEB=
"";
1316 string mvaWeightFileRegGCEEhr9=
"";
1317 string mvaWeightFileRegGCEElr9=
"";
1318 string mvaWeightFileRegRes=
"";
1320 double mvaConvCut=-1.;
1321 double sumPtTrackIsoForPhoton=2.0;
1322 double sumPtTrackIsoSlopeForPhoton=0.001;
1326 options_->
GetOpt(
"particle_flow",
"convID_mvaWeightFile", mvaWeightFileConvID);
1327 options_->
GetOpt(
"particle_flow",
"mvaWeightFileRegLCEB", mvaWeightFileRegLCEB);
1328 options_->
GetOpt(
"particle_flow",
"mvaWeightFileRegLCEE", mvaWeightFileRegLCEE);
1329 options_->
GetOpt(
"particle_flow",
"mvaWeightFileRegGCEB", mvaWeightFileRegGCEB);
1330 options_->
GetOpt(
"particle_flow",
"mvaWeightFileRegGCEEHr9", mvaWeightFileRegGCEEhr9);
1331 options_->
GetOpt(
"particle_flow",
"mvaWeightFileRegGCEELr9", mvaWeightFileRegGCEElr9);
1332 options_->
GetOpt(
"particle_flow",
"mvaWeightFileRegRes", mvaWeightFileRegRes);
1334 options_->
GetOpt(
"particle_flow",
"sumPtTrackIsoForPhoton",sumPtTrackIsoForPhoton);
1335 options_->
GetOpt(
"particle_flow",
"sumPtTrackIsoSlopeForPhoton",sumPtTrackIsoSlopeForPhoton);
1338 if( usePFPhotons ) {
1340 TFile *infile_PFLCEB =
new TFile(mvaWeightFileRegLCEB.c_str(),
"READ");
1341 TFile *infile_PFLCEE =
new TFile(mvaWeightFileRegLCEE.c_str(),
"READ");
1342 TFile *infile_PFGCEB =
new TFile(mvaWeightFileRegGCEB.c_str(),
"READ");
1343 TFile *infile_PFGCEEhR9 =
new TFile(mvaWeightFileRegGCEEhr9.c_str(),
"READ");
1344 TFile *infile_PFGCEElR9 =
new TFile(mvaWeightFileRegGCEElr9.c_str(),
"READ");
1345 TFile *infile_PFRes =
new TFile(mvaWeightFileRegRes.c_str(),
"READ");
1356 mvaWeightFileConvID,
1361 sumPtTrackIsoForPhoton,
1362 sumPtTrackIsoSlopeForPhoton
1365 gbrGCEEhr9,gbrGCEElr9,
1371 cerr<<
"exception setting PFAlgo Photon parameters: "
1372 <<err.what()<<
". terminating."<<endl;
1380 bool rejectTracks_Bad =
true;
1381 bool rejectTracks_Step45 =
true;
1382 bool usePFConversions =
false;
1383 bool usePFNuclearInteractions =
false;
1384 bool usePFV0s =
false;
1387 double dptRel_DispVtx = 10;
1390 options_->
GetOpt(
"particle_flow",
"usePFConversions", usePFConversions);
1392 options_->
GetOpt(
"particle_flow",
"usePFNuclearInteractions", usePFNuclearInteractions);
1393 options_->
GetOpt(
"particle_flow",
"dptRel_DispVtx", dptRel_DispVtx);
1397 rejectTracks_Step45,
1398 usePFNuclearInteractions,
1405 cerr<<
"exception setting PFAlgo displaced vertex parameters: "
1406 <<err.what()<<
". terminating."<<endl;
1411 bool bCorrect =
false;
1412 bool bCalibPrimary =
false;
1413 double dptRel_PrimaryTrack = 0;
1414 double dptRel_MergedTrack = 0;
1415 double ptErrorSecondary = 0;
1416 vector<double> nuclCalibFactors;
1419 options_->
GetOpt(
"particle_flow",
"bCalibPrimary", bCalibPrimary);
1420 options_->
GetOpt(
"particle_flow",
"dptRel_PrimaryTrack", dptRel_PrimaryTrack);
1421 options_->
GetOpt(
"particle_flow",
"dptRel_MergedTrack", dptRel_MergedTrack);
1422 options_->
GetOpt(
"particle_flow",
"ptErrorSecondary", ptErrorSecondary);
1423 options_->
GetOpt(
"particle_flow",
"nuclCalibFactors", nuclCalibFactors);
1429 cerr<<
"exception setting PFAlgo cand connector parameters: "
1430 <<err.what()<<
". terminating."<<endl;
1456 double mEtInputCut = 0.5;
1459 double mEInputCut = 0.;
1462 double seedThreshold = 1.0;
1465 double coneRadius = 0.5;
1468 double coneAreaFraction= 1.0;
1474 int maxIterations=100;
1477 double overlapThreshold = 0.75;
1483 double rparam = 1.0;
1501 cout <<
"----------------------------------" << endl;
1510 double coneAngle = 0.5;
1513 double seedEt = 0.4;
1516 double coneMerge = 100.0;
1524 cout <<
"Tau Benchmark Options : ";
1525 cout <<
"Angle=" << coneAngle <<
" seedEt=" << seedEt
1526 <<
" Merge=" << coneMerge << endl;
1590 cout<<
"Opening input root files"<<endl;
1599 catch(
string& err) {
1607 cout <<
"The rootfile(s) " << endl;
1610 cout <<
" is (are) not valid file(s) to open" << endl;
1613 cout <<
"The rootfile(s) : " << endl;
1616 cout<<
" are opened with " <<
ev_->
size() <<
" events." <<endl;
1620 std::string rechitsECALtagname;
1621 options_->
GetOpt(
"root",
"rechits_ECAL_inputTag", rechitsECALtagname);
1624 std::string rechitsHCALtagname;
1625 options_->
GetOpt(
"root",
"rechits_HCAL_inputTag", rechitsHCALtagname);
1628 std::string rechitsHOtagname;
1629 options_->
GetOpt(
"root",
"rechits_HO_inputTag", rechitsHOtagname);
1632 std::string rechitsHFEMtagname;
1633 options_->
GetOpt(
"root",
"rechits_HFEM_inputTag", rechitsHFEMtagname);
1636 std::string rechitsHFHADtagname;
1637 options_->
GetOpt(
"root",
"rechits_HFHAD_inputTag", rechitsHFHADtagname);
1640 std::vector<string> rechitsCLEANEDtagnames;
1641 options_->
GetOpt(
"root",
"rechits_CLEANED_inputTags", rechitsCLEANEDtagnames);
1642 for (
unsigned tags = 0;
tags<rechitsCLEANEDtagnames.size(); ++
tags )
1649 std::string rechitsPStagname;
1650 options_->
GetOpt(
"root",
"rechits_PS_inputTag", rechitsPStagname);
1653 std::string recTrackstagname;
1657 std::string displacedRecTrackstagname;
1658 options_->
GetOpt(
"root",
"displacedRecTracks_inputTag", displacedRecTrackstagname);
1661 std::string primaryVerticestagname;
1662 options_->
GetOpt(
"root",
"primaryVertices_inputTag", primaryVerticestagname);
1665 std::string stdTrackstagname;
1669 std::string gsfrecTrackstagname;
1670 options_->
GetOpt(
"root",
"gsfrecTracks_inputTag", gsfrecTrackstagname);
1676 std::string convBremGsfrecTrackstagname;
1677 options_->
GetOpt(
"root",
"convBremGsfrecTracks_inputTag", convBremGsfrecTrackstagname);
1686 std::string muonstagname;
1694 std::string conversiontagname;
1695 options_->
GetOpt(
"root",
"conversion_inputTag", conversiontagname);
1703 std::string v0tagname;
1709 std::string photontagname;
1717 std::string pfNuclearTrackerVertextagname;
1718 options_->
GetOpt(
"root",
"PFDisplacedVertex_inputTag", pfNuclearTrackerVertextagname);
1722 std::string trueParticlestagname;
1723 options_->
GetOpt(
"root",
"trueParticles_inputTag", trueParticlestagname);
1726 std::string MCTruthtagname;
1730 std::string caloTowerstagname;
1731 options_->
GetOpt(
"root",
"caloTowers_inputTag", caloTowerstagname);
1734 std::string genJetstagname;
1739 std::string genParticlesforMETtagname;
1740 options_->
GetOpt(
"root",
"genParticlesforMET_inputTag", genParticlesforMETtagname);
1743 std::string genParticlesforJetstagname;
1744 options_->
GetOpt(
"root",
"genParticlesforJets_inputTag", genParticlesforJetstagname);
1748 std::string pfCandidatetagname;
1749 options_->
GetOpt(
"root",
"particleFlowCand_inputTag", pfCandidatetagname);
1752 std::string caloJetstagname;
1756 std::string corrcaloJetstagname;
1757 options_->
GetOpt(
"root",
"corrCaloJets_inputTag", corrcaloJetstagname);
1760 std::string pfJetstagname;
1764 std::string pfMetstagname;
1768 std::string caloMetstagname;
1772 std::string tcMetstagname;
1808 cout <<
" Writing DQM root file " << endl;
1831 LumisMap::const_iterator iL = iR->second.find( lumi );
1832 if( iL != iR->second.end() ) {
1833 EventToEntry::const_iterator iE = iL->second.find( event );
1834 if( iE != iL->second.end() ) {
1838 cout<<
"event "<<
event<<
" not found in run "<<run<<
", lumi "<<lumi<<endl;
1842 cout<<
"lumi "<<lumi<<
" not found in run "<<run<<endl;
1846 cout<<
"run "<<run<<
" not found"<<endl;
1855 cout<<
"event "<<
event<<
" is not present, sorry."<<endl;
1869 bool exists =
ev_->
to(entry);
1871 std::cout <<
"Entry " << entry <<
" does not exist " << std::endl;
1881 (entry < 100 && entry%10 == 0) ||
1882 (entry < 1000 && entry%100 == 0) ||
1884 cout<<
"process entry "<< entry
1885 <<
", run "<<iEvent.
id().
run()
1887 <<
", event:"<<iEvent.
id().
event()
1907 cout<<
"number of muons : "<<
muons_.size()<<endl;
1910 cout<<
"number of v0 : "<<
v0_.size()<<endl;
1926 cout<<
"clustering is OFF - clusters come from the input file"<<endl;
1982 cout <<
" =====================PFJetBenchmark =================" << endl;
1983 cout<<
"Resol Pt max "<<resPt
1984 <<
" resChargedHadEnergy Max " << resChargedHadEnergy
1985 <<
" resNeutralHadEnergy Max " << resNeutralHadEnergy
1986 <<
" resNeutralEmEnergy Max "<< resNeutralEmEnergy << endl;
1995 if ( resPt < -1. ) {
1996 cout <<
" =====================PFJetBenchmark =================" << endl;
1997 cout<<
"process entry "<< entry << endl;
1998 cout<<
"Resol Pt max "<<resPt
1999 <<
" resChargedHadEnergy Max " << resChargedHadEnergy
2000 <<
" resNeutralHadEnergy Max " << resNeutralHadEnergy
2001 <<
" resNeutralEmEnergy Max "<< resNeutralEmEnergy
2002 <<
" Jet pt " <<
genJets_[0].pt() << endl;
2054 float deltaMin, deltaMax;
2063 double deltaEt = 0.;
2110 if( pfc.
pt() >
ptMin )
return true;
2119 cout <<
"start reading from simulation"<<endl;
2129 if ( foundstdTracks ) {
2133 cerr<<
"PFRootEventManager::ProcessEntry : stdTracks Collection not found : "
2138 if ( foundMCTruth ) {
2160 cerr<<
"PFRootEventManager::ProcessEntry : rechitsECAL Collection not found : "
2169 cerr<<
"PFRootEventManager::ProcessEntry : rechitsHCAL Collection not found : "
2179 cerr<<
"PFRootEventManager::ProcessEntry : rechitsHO Collection not found : "
2189 cerr<<
"PFRootEventManager::ProcessEntry : rechitsHFEM Collection not found : "
2198 cerr<<
"PFRootEventManager::ProcessEntry : rechitsHFHAD Collection not found : "
2205 if ( foundCLEANED ) {
2209 cerr<<
"PFRootEventManager::ProcessEntry : rechitsCLEANED Collection not found : "
2220 cerr<<
"PFRootEventManager::ProcessEntry : rechitsPS Collection not found : "
2229 cerr<<
"PFRootEventManager::ProcessEntry : caloTowers Collection not found : "
2238 cerr<<
"PFRootEventManager::ProcessEntry : primaryVertices Collection not found : "
2248 cerr<<
"PFRootEventManager::ProcessEntry : pfNuclearTrackerVertex Collection not found : "
2253 if ( foundrecTracks ) {
2257 cerr<<
"PFRootEventManager::ProcessEntry : recTracks Collection not found : "
2262 if ( founddisplacedRecTracks ) {
2266 cerr<<
"PFRootEventManager::ProcessEntry : displacedRecTracks Collection not found : "
2272 if ( foundgsfrecTracks ) {
2276 cerr<<
"PFRootEventManager::ProcessEntry : gsfrecTracks Collection not found : "
2281 if ( foundconvBremGsfrecTracks ) {
2285 cerr<<
"PFRootEventManager::ProcessEntry : convBremGsfrecTracks Collection not found : "
2301 cerr<<
"PFRootEventManager::ProcessEntry : muons Collection not found : "
2306 if ( foundconversion ) {
2310 cerr<<
"PFRootEventManager::ProcessEntry : conversion Collection not found : "
2321 cerr<<
"PFRootEventManager::ProcessEntry : v0 Collection not found : "
2322 <<entry <<
" " <<
v0Tag_<<endl;
2327 if ( foundPhotons) {
2330 cerr <<
"PFRootEventManager::ProcessEntry : photon collection not found : "
2337 if ( foundElectrons) {
2342 cerr <<
"PFRootEventManager::ProcessEntry : electron collection not found : "
2348 if ( foundgenJets ) {
2357 if ( foundgenParticlesforJets ) {
2366 if ( foundgenParticlesforMET ) {
2375 if ( foundcaloJets ) {
2379 cerr<<
"PFRootEventManager::ProcessEntry : caloJets Collection not found : "
2384 if ( foundcorrcaloJets ) {
2393 if ( foundpfJets ) {
2397 cerr<<
"PFRootEventManager::ProcessEntry : PFJets Collection not found : "
2402 if ( foundpfCands ) {
2406 cerr<<
"PFRootEventManager::ProcessEntry : PFCandidate Collection not found : "
2411 if ( foundpfMets ) {
2415 cerr<<
"PFRootEventManager::ProcessEntry : PFMets Collection not found : "
2420 if ( foundtcMets ) {
2424 cerr<<
"TCRootEventManager::ProcessEntry : TCMets Collection not found : "
2429 if ( foundcaloMets ) {
2433 cerr<<
"CALORootEventManager::ProcessEntry : CALOMets Collection not found : "
2439 bool goodevent =
true;
2444 cout <<
"PFRootEventManager : event discarded Nparticles="
2449 cout <<
"PFRootEventManager : leptonic tau discarded " << endl;
2455 cout <<
"PFRootEventManager : tau discarded: "
2456 <<
"number of charged and neutral particles different from "
2532 const std::vector<int>& ptcdaughters = ptc.
daughterIds();
2534 for (
unsigned int dapt=0; dapt < ptcdaughters.size(); ++dapt) {
2540 int pdgdaugther = daughter.
pdgCode();
2541 int abspdgdaughter =
std::abs(pdgdaugther);
2544 if (abspdgdaughter == 11 ||
2545 abspdgdaughter == 13) {
2566 const std::vector<int>& daughters = ptc.
daughterIds();
2570 if(!daughters.empty() )
continue;
2573 double pdgCode = ptc.
pdgCode();
2577 else if( pdgCode==22 )
2625 int kqa,kq1,kq2,kq3,kqj,irt,kqx,kqn;
2629 int ichg[109]={-1,2,-1,2,-1,2,-1,2,0,0,-3,0,-3,0,-3,0,
2630 -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,
2631 -3,0,-3,0,-3,0,0,0,0,0,-1,2,-1,2,-1,2,0,0,0,0,
2632 -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};
2638 kqn=kqa/1000000000%10;
2648 if(kqa==0 || kqa >= 10000000) {
2650 if(kqn==1) {hepchg=0;}
2653 else if(kqa<=100) {hepchg = ichg[kqa-1];}
2655 else if(kqa==100 || kqa==101) {hepchg = -3;}
2657 else if(kqa==102 || kqa==104) {hepchg = -6;}
2659 else if(kqj == 0) {hepchg = 0;}
2661 else if(kqx>0 && irt<100)
2663 hepchg = ichg[irt-1];
2664 if(kqa==1000017 || kqa==1000018) {hepchg = 0;}
2665 if(kqa==1000034 || kqa==1000052) {hepchg = 0;}
2666 if(kqa==1000053 || kqa==1000054) {hepchg = 0;}
2667 if(kqa==5100061 || kqa==5100062) {hepchg = 6;}
2673 hepchg = ichg[kq2-1]-ichg[kq1-1];
2675 if((kq2==3) || (kq2==5)) {hepchg = ichg[kq1-1]-ichg[kq2-1];}
2679 hepchg = ichg[kq3-1] + ichg[kq2-1];
2684 hepchg = ichg[kq3-1]+ichg[kq2-1]+ichg[kq1-1];
2688 if(Id<0 && hepchg!=0) {hepchg = -1*hepchg;}
2719 bool findNeighbours) {
2722 map<unsigned, unsigned> detId2index;
2724 for(
unsigned i=0;
i<rechits.size();
i++) {
2725 rechits[
i].calculatePositionREP();
2728 detId2index.insert( make_pair(rechits[
i].detId(),
i) );
2731 if(findNeighbours) {
2732 for(
unsigned i=0;
i<rechits.size();
i++) {
2741 const map<unsigned, unsigned>& detId2index ) {
2748 for(
unsigned i=0;
i<neighbours4DetId.size();
i++) {
2749 unsigned detId = neighbours4DetId[
i];
2751 const map<unsigned, unsigned>::const_iterator& it = detId2index.find(detId);
2753 if(it != detId2index.end() ) {
2759 for(
unsigned i=0;
i<neighbours8DetId.size();
i++) {
2760 unsigned detId = neighbours8DetId[
i];
2762 const map<unsigned, unsigned>::const_iterator& it = detId2index.find(detId);
2764 if(it != detId2index.end() ) {
2777 cout <<
"start clustering"<<endl;
2839 for(
unsigned i=0;
i<clusters.size();
i++) {
2841 cluster.
eta = clusters[
i].position().Eta();
2842 cluster.
phi = clusters[
i].position().Phi();
2843 cluster.
e = clusters[
i].energy();
2844 cluster.
layer = clusters[
i].layer();
2850 switch( clusters[
i].layer() ) {
2875 cluster.
eta, cluster.
phi,
2901 for (
unsigned i=0;
i < trueParticles.size();
i++) {
2911 if(ntrajpoints == 3) {
2939 for (
unsigned i=0;
i < pfCandidates.size();
i++) {
2944 outptc.
eta = candidate.
eta();
2945 outptc.
phi = candidate.
phi();
2946 outptc.
e = candidate.
energy();
2960 for (
unsigned i=0;
i < cts.
size();
i++) {
2980 for (
unsigned i=0;
i < blocks.size();
i++) {
2995 cout <<
"start particle flow"<<endl;
3000 cout<<
"PFRootEventManager::particleFlow start"<<endl;
3057 vector<bool> trackMask;
3059 vector<bool> gsftrackMask;
3061 vector<bool> ecalMask;
3063 vector<bool> hcalMask;
3067 vector<bool> hoMask;
3070 vector<bool> hfemMask;
3072 vector<bool> hfhadMask;
3074 vector<bool> psMask;
3076 vector<bool> photonMask;
3081 muonh, nuclearh, displacedtrackh, convh, v0,
3082 ecalh, hcalh, hoh, hfemh, hfhadh, psh,
3083 photonh, trackMask,gsftrackMask,
3084 ecalMask, hcalMask, hoMask, hfemMask, hfhadMask, psMask,photonMask );
3087 trackMask, ecalMask, hcalMask, hoMask, psMask);
3118 if(
debug_)
cout<<
"PFRootEventManager::particleFlow stop"<<endl;
3130 if ( differentSize ) {
3131 cout <<
"+++WARNING+++ PFCandidate size changed for entry "
3132 << entry <<
" !" << endl
3133 <<
" - original size : " <<
pfCandCMSSW_.size() << endl
3137 double deltaE = (*pfCandidates_)[
i].energy()-
pfCandCMSSW_[
i].energy();
3140 if ( fabs(deltaE) > 1E-4 ||
3141 fabs(deltaEta) > 1E-9 ||
3142 fabs(deltaPhi) > 1E-9 ) {
3143 cout <<
"+++WARNING+++ PFCandidate " <<
i
3144 <<
" changed for entry " << entry <<
" ! " << endl
3146 <<
" - Current : " << (*pfCandidates_)[
i] << endl
3147 <<
" DeltaE = : " << deltaE << endl
3148 <<
" DeltaEta = : " << deltaEta << endl
3149 <<
" DeltaPhi = : " << deltaPhi << endl << endl;
3160 cout<<
"start reconstruct GenJets --- "<<endl;
3161 cout<<
" input gen particles for jet: all neutrinos removed ; muons present" << endl;
3181 cout <<
" #" <<
i <<
" PDG code:" << genPart.
pdgId()
3182 <<
" status " << genPart.
status()
3183 <<
", p/pt/eta/phi: " << genPart.
p() <<
'/' << genPart.
pt()
3184 <<
'/' << genPart.
eta() <<
'/' << genPart.
phi() << endl;
3190 vector<ProtoJet> protoJets;
3196 typedef vector <ProtoJet>::const_iterator IPJ;
3197 for (IPJ ipj = protoJets.begin(); ipj != protoJets.end (); ipj++) {
3213 ProtoJet::Constituents::const_iterator constituent = constituents.
begin();
3214 for (; constituent != constituents.end(); ++constituent) {
3217 uint
index = constituent->index();
3221 newJet.setJetArea(protojet.
jetArea());
3222 newJet.setPileup(protojet.
pileup());
3223 newJet.setNPasses(protojet.
nPasses());
3225 if (
jetsDebug_ )
cout<<
" gen jet "<<ijet<<
" "<<newJet.print()<<endl;
3236 cout<<
"start reconstruct CaloJets --- "<<endl;
3249 for(
unsigned ipj=0; ipj<
caloJets_.size(); ipj++) {
3251 cout<<
" calo jet "<<ipj<<
" "<<protojet.
pt() <<endl;
3262 cout<<
"start reconstruct PF Jets --- "<<endl;
3272 vector<ProtoJet> protoJets;
3278 typedef vector <ProtoJet>::const_iterator IPJ;
3279 for (IPJ ipj = protoJets.begin(); ipj != protoJets.end (); ipj++) {
3295 ProtoJet::Constituents::const_iterator constituent = constituents.
begin();
3296 for (; constituent != constituents.end(); ++constituent) {
3299 uint
index = constituent->index();
3303 newJet.setJetArea(protojet.
jetArea());
3304 newJet.setPileup(protojet.
pileup());
3305 newJet.setNPasses(protojet.
nPasses());
3307 if (
jetsDebug_ )
cout<<
" PF jet "<<ijet<<
" "<<newJet.print()<<endl;
3375 TLorentzVector partTOTMC;
3376 bool tauFound =
false;
3377 bool tooManyTaus =
false;
3384 if(
i ) tooManyTaus =
true;
3389 if(!tauFound || tooManyTaus ) {
3395 const std::vector<int>& ptcdaughters =
trueParticles_[0].daughterIds();
3401 for (
unsigned int dapt=0; dapt < ptcdaughters.size(); ++dapt) {
3405 TLorentzVector partMC;
3406 partMC.SetPxPyPzE(tpatvtx.
momentum().Px(),
3411 partTOTMC += partMC;
3415 cout << pdgcode << endl;
3416 cout << tpatvtx << endl;
3417 cout << partMC.Px() <<
" " << partMC.Py() <<
" "
3418 << partMC.Pz() <<
" " << partMC.E()
3420 <<
sqrt(partMC.Px()*partMC.Px()+partMC.Py()*partMC.Py())
3428 for ( HepMC::GenEvent::particle_const_iterator
3429 piter = myGenEvent->particles_begin();
3430 piter != myGenEvent->particles_end();
3434 if (
std::abs((*piter)->pdg_id())==15){
3437 for ( HepMC::GenVertex::particles_out_const_iterator bp =
3438 (*piter)->end_vertex()->particles_out_const_begin();
3439 bp != (*piter)->end_vertex()->particles_out_const_end(); ++bp ) {
3440 uint nuId=
std::abs((*bp)->pdg_id());
3441 bool isNeutrino=(nuId==12)||(nuId==14)||(nuId==16);
3445 TLorentzVector partMC;
3446 partMC.SetPxPyPzE((*bp)->momentum().x(),
3447 (*bp)->momentum().y(),
3448 (*bp)->momentum().z(),
3449 (*bp)->momentum().e());
3450 partTOTMC += partMC;
3455 if (itau>1) tooManyTaus=
true;
3457 if(!tauFound || tooManyTaus ) {
3458 cerr<<
"PFRootEventManager::tauBenchmark : not a single tau event"<<endl;
3466 jetmc.
eta = partTOTMC.Eta();
3467 jetmc.
phi = partTOTMC.Phi();
3468 jetmc.
et = partTOTMC.Et();
3469 jetmc.
e = partTOTMC.E();
3505 cout <<
" ET Vector=" << partTOTMC.Et()
3506 <<
" " << partTOTMC.Eta()
3507 <<
" " << partTOTMC.Phi() << endl;
cout << endl;
3515 vector<TLorentzVector> allcalotowers;
3518 double threshCaloTowers = 1E-10;
3526 TLorentzVector caloT;
3531 caloT.SetPxPyPzE(pxyz.X(),pxyz.Y(),pxyz.Z(),
caloTowers_[
i].energy());
3532 allcalotowers.push_back(caloT);
3537 cout <<
" RETRIEVED " << allcalotowers.size()
3538 <<
" CALOTOWER 4-VECTORS " << endl;
3542 const vector< PFJetAlgorithm::Jet >& caloTjets
3546 double JetEHTETmax = 0.0;
3547 for (
unsigned i = 0;
i < caloTjets.size();
i++) {
3548 TLorentzVector jetmom = caloTjets[
i].GetMomentum();
3549 double jetcalo_pt =
sqrt(jetmom.Px()*jetmom.Px()+jetmom.Py()*jetmom.Py());
3550 double jetcalo_et = jetmom.Et();
3553 jet.
eta = jetmom.Eta();
3554 jet.
phi = jetmom.Phi();
3555 jet.
et = jetmom.Et();
3558 const vector<int>& indexes = caloTjets[
i].GetIndexes();
3559 for(
unsigned ii=0; ii<indexes.size(); ii++){
3569 cout <<
" ECAL+HCAL jet : " << caloTjets[
i] << endl;
3570 cout << jetmom.Px() <<
" " << jetmom.Py() <<
" "
3571 << jetmom.Pz() <<
" " << jetmom.E()
3572 <<
" PT=" << jetcalo_pt << endl;
3575 if (jetcalo_et >= JetEHTETmax)
3576 JetEHTETmax = jetcalo_et;
3581 vector<TLorentzVector> allrecparticles;
3593 for(
unsigned i=0;
i<candidates.size();
i++) {
3602 cout <<
i <<
" " << candidate << endl;
3604 cout <<
" type= " << type <<
" " << candidate.
charge()
3610 TLorentzVector partRec(PFpart.Px(),
3616 allrecparticles.push_back( partRec );
3622 cout <<
" THERE ARE " << allrecparticles.size()
3623 <<
" RECONSTRUCTED 4-VECTORS" << endl;
3626 const vector< PFJetAlgorithm::Jet >& PFjets
3630 cout << PFjets.size() <<
" PF Jets found" << endl;
3631 double JetPFETmax = 0.0;
3632 for (
unsigned i = 0;
i < PFjets.size();
i++) {
3633 TLorentzVector jetmom = PFjets[
i].GetMomentum();
3634 double jetpf_pt =
sqrt(jetmom.Px()*jetmom.Px()+jetmom.Py()*jetmom.Py());
3635 double jetpf_et = jetmom.Et();
3638 jet.
eta = jetmom.Eta();
3639 jet.
phi = jetmom.Phi();
3640 jet.
et = jetmom.Et();
3646 cout <<
" Rec jet : "<< PFjets[
i] <<endl;
3647 cout << jetmom.Px() <<
" " << jetmom.Py() <<
" "
3648 << jetmom.Pz() <<
" " << jetmom.E()
3649 <<
" PT=" << jetpf_pt <<
" eta="<< jetmom.Eta()
3650 <<
" Phi=" << jetmom.Phi() << endl;
3651 cout <<
"------------------------------------------------" << endl;
3654 if (jetpf_et >= JetPFETmax)
3655 JetPFETmax = jetpf_et;
3660 double deltaEtEHT = JetEHTETmax - partTOTMC.Et();
3663 double deltaEt = JetPFETmax - partTOTMC.Et();
3667 cout <<
"tau benchmark E_T(PF) - E_T(true) = " << deltaEt << endl;
3670 return deltaEt/partTOTMC.Et();
3725 string newString = oldString;
3727 string dollar =
"$";
3731 int dollarPos = newString.find(dollar,0);
3732 if( dollarPos == -1 )
return oldString;
3734 int lengh = newString.find(slash,0) - newString.find(dollar,0) + 1;
3735 string env_variable =
3736 newString.substr( ( newString.find(dollar,0) + 1 ), lengh -2);
3738 int begin = env_variable.find_first_of(
"{");
3739 int end = env_variable.find_last_of(
"}");
3744 env_variable = env_variable.substr( begin+1, end-1 );
3749 char*
directory = getenv( env_variable.c_str() );
3752 cerr<<
"please define environment variable $"<<env_variable<<endl;
3759 newString.replace( 0, lengh , sdir);
3762 cout <<
"expand " <<oldString<<
" to "<< newString << endl;
3777 if(!myGenEvent)
return;
3779 for ( HepMC::GenEvent::particle_const_iterator
3780 piter = myGenEvent->particles_begin();
3781 piter != myGenEvent->particles_end();
3784 if ( nGen != 1 || nSim != 1 )
return;
3787 if (
genJets_.size() != 1 )
return;
3789 double true_eta =
genJets_[0].eta();
3790 double true_phi =
genJets_[0].phi();
3794 double rec_ECALEnergy = 0.;
3795 double rec_HCALEnergy = 0.;
3796 double deltaRMin = 999.;
3797 unsigned int theJet = 0;
3798 for (
unsigned int ijet=0; ijet<
pfJets_.size(); ++ijet ) {
3799 double rec_ECAL =
pfJets_[ijet].neutralEmEnergy();
3800 double rec_HCAL =
pfJets_[ijet].neutralHadronEnergy();
3801 double rec_eta =
pfJets_[0].eta();
3802 double rec_phi =
pfJets_[0].phi();
3804 + (rec_phi-true_phi)*(rec_phi-true_phi) );
3805 if ( deltaR < deltaRMin ) {
3807 rec_ECALEnergy = rec_ECAL;
3808 rec_HCALEnergy = rec_HCAL;
3811 if ( deltaRMin > 0.1 )
return;
3813 std::vector < PFCandidatePtr > constituents =
pfJets_[theJet].getPFConstituents ();
3814 double pat_ECALEnergy = 0.;
3815 double pat_HCALEnergy = 0.;
3816 for (
unsigned ic = 0; ic < constituents.size (); ++ic) {
3817 if ( constituents[ic]->particleId() < 4 )
continue;
3818 if ( constituents[ic]->particleId() == 4 )
3819 pat_ECALEnergy += constituents[ic]->rawEcalEnergy();
3820 else if ( constituents[ic]->particleId() == 5 )
3821 pat_HCALEnergy += constituents[ic]->rawHcalEnergy();
3824 out << true_eta <<
" " << true_phi <<
" " << true_E
3825 <<
" " << rec_ECALEnergy <<
" " << rec_HCALEnergy
3826 <<
" " << pat_ECALEnergy <<
" " << pat_HCALEnergy
3827 <<
" " << deltaRMin << std::endl;
3837 std::vector< std::list <simMatch> > candSimMatchTrack;
3838 std::vector< std::list <simMatch> > candSimMatchEcal;
3848 out<<
"ECAL RecHits ==============================================="<<endl;
3850 out<<
"HCAL RecHits ==============================================="<<endl;
3853 out<<
"HO RecHits ================================================="<<endl;
3856 out<<
"HFEM RecHits ==============================================="<<endl;
3858 out<<
"HFHAD RecHits =============================================="<<endl;
3860 out<<
"PS RecHits ================================================="<<endl;
3865 out<<
"ECAL Clusters ============================================="<<endl;
3867 out<<
"HCAL Clusters ============================================="<<endl;
3870 out<<
"HO Clusters ==============================================="<<endl;
3873 out<<
"HFEM Clusters ============================================="<<endl;
3875 out<<
"HFHAD Clusters ============================================"<<endl;
3877 out<<
"PS Clusters ============================================="<<endl;
3880 bool printTracks =
true;
3885 out<<
"Particle Flow Blocks ======================================"<<endl;
3887 out<<
i<<
" "<<(*pfBlocks_)[
i]<<endl;
3892 out<<
"Particle Flow Candidates =================================="<<endl;
3903 out<<
"MEX, MEY, MET ============================================" <<endl
3904 << mex <<
" " << mey <<
" " <<
sqrt(mex*mex+mey*mey);
3911 cout<<
"MCTruthMatching Results"<<endl;
3914 out <<icand<<
" " <<(*pfCandidates_)[icand]<<endl;
3915 out <<
"is matching:" << endl;
3918 ITM it_t = candSimMatchTrack[icand].begin();
3919 ITM itend_t = candSimMatchTrack[icand].end();
3920 for(;it_t!=itend_t;++it_t){
3921 unsigned simid = it_t->second;
3924 out <<
"\t\tthrough Track matching pTrectrack="
3925 << it_t->first <<
" GeV" << endl;
3928 ITM it_e = candSimMatchEcal[icand].begin();
3929 ITM itend_e = candSimMatchEcal[icand].end();
3930 for(;it_e!=itend_e;++it_e){
3931 unsigned simid = it_e->second;
3934 out <<
"\t\tsimparticle contributing to a total of "
3936 <<
" GeV of its ECAL cluster"
3939 cout<<
"________________"<<endl;
3944 out<<
"Jets ====================================================="<<endl;
3945 out<<
"Particle Flow: "<<endl;
3951 out<<
"Generated: "<<endl;
3958 out<<
"Calo: "<<endl;
3965 out<<
"Sim Particles ==========================================="<<endl;
3983 cout<<
"MCTruthMatching Results"<<endl;
3985 cout <<
"==== Particle Simulated " <<
i << endl;
3990 cout <<
"Look at the desintegration products" << endl;
3997 cout <<
"matching pfCandidate (trough tracking): " << endl;
4001 ITM it = candSimMatchTrack[icand].begin();
4002 ITM itend = candSimMatchTrack[icand].end();
4003 for(;it!=itend;++it)
4004 if(
i == it->second ){
4005 out<<icand<<
" "<<(*pfCandidates_)[icand]<<endl;
4012 vector<unsigned> rechitSimIDs
4014 vector<double> rechitSimFrac
4017 if( !rechitSimIDs.size() )
continue;
4019 cout <<
"matching pfCandidate (through ECAL): " << endl;
4022 double totalEcalE = 0.0;
4024 for (
unsigned isimrh=0; isimrh < rechitSimIDs.size();
4028 cout <<
"For info, this particle deposits E=" << totalEcalE
4029 <<
"(GeV) in the ECAL" << endl;
4034 ITM it = candSimMatchEcal[icand].begin();
4035 ITM itend = candSimMatchEcal[icand].end();
4036 for(;it!=itend;++it)
4037 if(
i == it->second )
4038 out<<icand<<
" "<<it->first<<
"GeV "<<(*pfCandidates_)[icand]<<endl;
4055 int maxNLines)
const {
4059 if(!myGenEvent)
return;
4061 out<<
"GenParticles ==========================================="<<endl;
4063 std::cout <<
"Id Gen Name eta phi pT E Vtx1 "
4065 <<
"Moth Vtx2 eta phi R Z Da1 Da2 Ecal?"
4069 for ( HepMC::GenEvent::particle_const_iterator
4070 piter = myGenEvent->particles_begin();
4071 piter != myGenEvent->particles_end();
4074 if( nLines == maxNLines)
break;
4079 int partId = p->pdg_id();
4186 std::string latexString;
4192 p->momentum().e() );
4198 if ( !p->production_vertex() && p->pdg_id() == 2212 )
continue;
4203 if(p->production_vertex() ) {
4204 vertex1.SetCoordinates( p->production_vertex()->position().x()/10.,
4205 p->production_vertex()->position().y()/10.,
4206 p->production_vertex()->position().z()/10. );
4207 vertexId1 = p->production_vertex()->barcode();
4210 out.setf(std::ios::fixed, std::ios::floatfield);
4211 out.setf(std::ios::right, std::ios::adjustfield);
4213 out << std::setw(4) << p->barcode() <<
" "
4216 for(
unsigned int k=0;
k<11-name.length() &&
k<12;
k++) out <<
" ";
4218 double eta = momentum1.eta();
4219 if ( eta > +10. ) eta = +10.;
4220 if ( eta < -10. ) eta = -10.;
4222 out << std::setw(6) << std::setprecision(2) << eta <<
" "
4223 << std::setw(6) << std::setprecision(2) << momentum1.phi() <<
" "
4224 << std::setw(7) << std::setprecision(2) << momentum1.pt() <<
" "
4225 << std::setw(7) << std::setprecision(2) << momentum1.e() <<
" "
4226 << std::setw(4) << vertexId1 <<
" "
4227 << std::setw(6) << std::setprecision(1) << vertex1.x() <<
" "
4228 << std::setw(6) << std::setprecision(1) << vertex1.y() <<
" "
4229 << std::setw(6) << std::setprecision(1) << vertex1.z() <<
" ";
4232 if( p->production_vertex() ) {
4233 if ( p->production_vertex()->particles_in_size() ) {
4235 *(p->production_vertex()->particles_in_const_begin());
4237 out << std::setw(4) << mother->barcode() <<
" ";
4243 if ( p->end_vertex() ) {
4245 p->end_vertex()->position().y()/10.,
4246 p->end_vertex()->position().z()/10.,
4247 p->end_vertex()->position().t()/10.);
4248 int vertexId2 = p->end_vertex()->barcode();
4250 std::vector<const HepMC::GenParticle*> children;
4251 HepMC::GenVertex::particles_out_const_iterator firstDaughterIt =
4252 p->end_vertex()->particles_out_const_begin();
4253 HepMC::GenVertex::particles_out_const_iterator lastDaughterIt =
4254 p->end_vertex()->particles_out_const_end();
4255 for ( ; firstDaughterIt != lastDaughterIt ; ++firstDaughterIt ) {
4256 children.push_back(*firstDaughterIt);
4259 out << std::setw(4) << vertexId2 <<
" "
4260 << std::setw(6) << std::setprecision(2) << vertex2.eta() <<
" "
4261 << std::setw(6) << std::setprecision(2) << vertex2.phi() <<
" "
4262 << std::setw(5) << std::setprecision(1) << vertex2.pt() <<
" "
4263 << std::setw(6) << std::setprecision(1) << vertex2.z() <<
" ";
4265 for (
unsigned id=0;
id<children.size(); ++
id )
4266 out << std::setw(4) << children[
id]->barcode() <<
" ";
4274 for(
unsigned i=0;
i<rechits.size();
i++) {
4275 string seedstatus =
" ";
4277 seedstatus =
"SEED";
4285 const char* seedstatus,
4286 ostream&
out)
const {
4295 TCutG* cutg = (TCutG*) gROOT->FindObject(
"CUTG");
4296 if( !cutg || cutg->IsInside( eta, phi ) )
4297 out<<index<<
"\t"<<seedstatus<<
" "<<rh<<endl;
4301 ostream&
out )
const {
4302 for(
unsigned i=0;
i<clusters.size();
i++) {
4309 ostream&
out )
const {
4319 TCutG* cutg = (TCutG*) gROOT->FindObject(
"CUTG");
4320 if( !cutg || cutg->IsInside( eta, phi ) )
4326 TCutG* cutg = (TCutG*) gROOT->FindObject(
"CUTG");
4327 if(!cutg)
return true;
4329 const vector< reco::PFTrajectoryPoint >& points = track.
trajectoryPoints();
4331 for(
unsigned i=0;
i<points.size();
i++) {
4332 if( ! points[
i].isValid() )
continue;
4335 if( cutg->IsInside( pos.Eta(), pos.Phi() ) )
return true;
4348 TCutG* cutg = (TCutG*) gROOT->FindObject(
"CUTG");
4350 mask.resize( rechits.size(),
true);
4355 mask.reserve( rechits.size() );
4356 for(
unsigned i=0;
i<rechits.size();
i++) {
4358 double eta = rechits[
i].position().Eta();
4359 double phi = rechits[
i].position().Phi();
4361 if( cutg->IsInside( eta, phi ) )
4362 mask.push_back(
true );
4364 mask.push_back(
false );
4373 TCutG* cutg = (TCutG*) gROOT->FindObject(
"CUTG");
4377 mask.reserve( clusters.size() );
4378 for(
unsigned i=0;
i<clusters.size();
i++) {
4380 double eta = clusters[
i].position().Eta();
4381 double phi = clusters[
i].position().Phi();
4383 if( cutg->IsInside( eta, phi ) )
4384 mask.push_back(
true );
4386 mask.push_back(
false );
4395 TCutG* cutg = (TCutG*) gROOT->FindObject(
"CUTG");
4399 mask.reserve( tracks.size() );
4400 for(
unsigned i=0;
i<tracks.size();
i++) {
4402 mask.push_back(
true );
4404 mask.push_back(
false );
4413 TCutG* cutg = (TCutG*) gROOT->FindObject(
"CUTG");
4417 mask.reserve( photons.size() );
4418 for(
unsigned i=0;
i<photons.size();
i++) {
4419 double eta = photons[
i].caloPosition().Eta();
4420 double phi = photons[
i].caloPosition().Phi();
4421 if( cutg->IsInside( eta, phi ) )
4422 mask.push_back(
true );
4424 mask.push_back(
false );
4434 TCutG* cutg = (TCutG*) gROOT->FindObject(
"CUTG");
4438 mask.reserve( tracks.size() );
4439 for(
unsigned i=0;
i<tracks.size();
i++) {
4441 mask.push_back(
true );
4443 mask.push_back(
false );
4451 double& peta,
double& pphi,
double& pe)
4456 string err =
"PFRootEventManager::closestParticle : ";
4457 err +=
"vector of PFSimParticles is empty";
4458 throw std::length_error( err.c_str() );
4461 double mindist2 = 99999999;
4462 unsigned iClosest=0;
4482 double deta = peta -
eta;
4483 double dphi = pphi -
phi;
4485 double dist2 = deta*deta + dphi*dphi;
4487 if(dist2<mindist2) {
4520 case 1: { name =
"d";latexString=
"d";
break; }
4521 case 2: { name =
"u";latexString=
"u";
break; }
4522 case 3: { name =
"s";latexString=
"s" ;
break; }
4523 case 4: { name =
"c";latexString=
"c" ;
break; }
4524 case 5: { name =
"b";latexString=
"b" ;
break; }
4525 case 6: { name =
"t";latexString=
"t" ;
break; }
4526 case -1: { name =
"~d";latexString=
"#bar{d}" ;
break; }
4527 case -2: { name =
"~u";latexString=
"#bar{u}" ;
break; }
4528 case -3: { name =
"~s";latexString=
"#bar{s}" ;
break; }
4529 case -4: { name =
"~c";latexString=
"#bar{c}" ;
break; }
4530 case -5: { name =
"~b";latexString=
"#bar{b}" ;
break; }
4531 case -6: { name =
"~t";latexString=
"#bar{t}" ;
break; }
4532 case 11: { name =
"e-";latexString=
name ;
break; }
4533 case -11: { name =
"e+";latexString=
name ;
break; }
4534 case 12: { name =
"nu_e";latexString=
"#nu_{e}" ;
break; }
4535 case -12: { name =
"~nu_e";latexString=
"#bar{#nu}_{e}" ;
break; }
4536 case 13: { name =
"mu-";latexString=
"#mu-" ;
break; }
4537 case -13: { name =
"mu+";latexString=
"#mu+" ;
break; }
4538 case 14: { name =
"nu_mu";latexString=
"#nu_{mu}" ;
break; }
4539 case -14: { name =
"~nu_mu";latexString=
"#bar{#nu}_{#mu}";
break; }
4540 case 15: { name =
"tau-";latexString=
"#tau^{-}" ;
break; }
4541 case -15: { name =
"tau+";latexString=
"#tau^{+}" ;
break; }
4542 case 16: { name =
"nu_tau";latexString=
"#nu_{#tau}" ;
break; }
4543 case -16: { name =
"~nu_tau";latexString=
"#bar{#nu}_{#tau}";
break; }
4544 case 21: { name =
"gluon";latexString=
name;
break; }
4545 case 22: { name =
"gamma";latexString=
"#gamma";
break; }
4546 case 23: { name =
"Z0";latexString=
"Z^{0}" ;
break; }
4547 case 24: { name =
"W+";latexString=
"W^{+}" ;
break; }
4548 case 25: { name =
"H0";latexString=
name ;
break; }
4549 case -24: { name =
"W-";latexString=
"W^{-}" ;
break; }
4550 case 111: { name =
"pi0";latexString=
"#pi^{0}" ;
break; }
4551 case 113: { name =
"rho0";latexString=
"#rho^{0}" ;
break; }
4552 case 223: { name =
"omega";latexString=
"#omega" ;
break; }
4553 case 333: { name =
"phi";latexString=
"#phi";
break; }
4554 case 443: { name =
"J/psi";latexString=
"J/#psi" ;
break; }
4555 case 553: { name =
"Upsilon";latexString=
"#Upsilon" ;
break; }
4556 case 130: { name =
"K0L";latexString=
name ;
break; }
4557 case 211: { name =
"pi+";latexString=
"#pi^{+}" ;
break; }
4558 case -211: { name =
"pi-";latexString=
"#pi^{-}" ;
break; }
4559 case 213: { name =
"rho+";latexString=
"#rho^{+}" ;
break; }
4560 case -213: { name =
"rho-";latexString=
"#rho^{-}" ;
break; }
4561 case 221: { name =
"eta";latexString=
"#eta" ;
break; }
4562 case 331: { name =
"eta'";latexString=
"#eta'" ;
break; }
4563 case 441: { name =
"etac";latexString=
"#eta_{c}" ;
break; }
4564 case 551: { name =
"etab";latexString=
"#eta_{b}";
break; }
4565 case 310: { name =
"K0S";latexString=
name ;
break; }
4566 case 311: { name =
"K0";latexString=
"K^{0}" ;
break; }
4567 case -311: { name =
"Kbar0";latexString=
"#bar{#Kappa}^{0}" ;
break; }
4568 case 321: { name =
"K+";latexString=
"K^{+}";
break; }
4569 case -321: { name =
"K-";latexString=
"K^{-}";
break; }
4570 case 411: { name =
"D+";latexString=
"D^{+}" ;
break; }
4571 case -411: { name =
"D-";latexString=
"D^{-}";
break; }
4572 case 421: { name =
"D0";latexString=
"D^{0}" ;
break; }
4573 case -421: { name =
"D0-bar";latexString=
"#overline{D^{0}}" ;
break; }
4574 case 423: { name =
"D*0";latexString=
"D^{*0}" ;
break; }
4575 case -423: { name =
"D*0-bar";latexString=
"#overline{D^{*0}}" ;
break; }
4576 case 431: { name =
"Ds_+";latexString=
"Ds_{+}" ;
break; }
4577 case -431: { name =
"Ds_-";latexString=
"Ds_{-}" ;
break; }
4578 case 511: { name =
"B0";latexString=
name;
break; }
4579 case 521: { name =
"B+";latexString=
"B^{+}" ;
break; }
4580 case -521: { name =
"B-";latexString=
"B^{-}" ;
break; }
4581 case 531: { name =
"Bs_0";latexString=
"Bs_{0}" ;
break; }
4582 case -531: { name =
"anti-Bs_0";latexString=
"#overline{Bs_{0}}" ;
break; }
4583 case 541: { name =
"Bc_+";latexString=
"Bc_{+}" ;
break; }
4584 case -541: { name =
"Bc_+";latexString=
"Bc_{+}" ;
break; }
4585 case 313: { name =
"K*0";latexString=
"K^{*0}" ;
break; }
4586 case -313: { name =
"K*bar0";latexString=
"#bar{K}^{*0}" ;
break; }
4587 case 323: { name =
"K*+";latexString=
"#K^{*+}";
break; }
4588 case -323: { name =
"K*-";latexString=
"#K^{*-}" ;
break; }
4589 case 413: { name =
"D*+";latexString=
"D^{*+}";
break; }
4590 case -413: { name =
"D*-";latexString=
"D^{*-}" ;
break; }
4592 case 433: { name =
"Ds*+";latexString=
"D_{s}^{*+}" ;
break; }
4593 case -433: { name =
"Ds*-";latexString=
"B_{S}{*-}" ;
break; }
4595 case 513: { name =
"B*0";latexString=
"B^{*0}" ;
break; }
4596 case -513: { name =
"anti-B*0";latexString=
"#overline{B^{*0}}" ;
break; }
4597 case 523: { name =
"B*+";latexString=
"B^{*+}" ;
break; }
4598 case -523: { name =
"B*-";latexString=
"B^{*-}" ;
break; }
4600 case 533: { name =
"B*_s0";latexString=
"B^{*}_{s0}" ;
break; }
4601 case -533 : {name=
"anti-B_s0"; latexString=
"#overline{B_{s}^{0}}";
break; }
4603 case 543: { name =
"B*_c+";latexString=
"B^{*}_{c+}";
break; }
4604 case -543: { name =
"B*_c-";latexString=
"B^{*}_{c-}";
break; }
4605 case 1114: { name =
"Delta-";latexString=
"#Delta^{-}" ;
break; }
4606 case -1114: { name =
"Deltabar+";latexString=
"#bar{#Delta}^{+}" ;
break; }
4607 case -2112: { name =
"nbar0";latexString=
"{bar}n^{0}" ;
break; }
4608 case 2112: { name =
"n"; latexString=
name ;
break;}
4609 case 2114: { name =
"Delta0"; latexString=
"#Delta^{0}" ;
break; }
4610 case -2114: { name =
"Deltabar0"; latexString=
"#bar{#Delta}^{0}" ;
break; }
4611 case 3122: { name =
"Lambda0";latexString=
"#Lambda^{0}";
break; }
4612 case -3122: { name =
"Lambdabar0";latexString=
"#bar{#Lambda}^{0}" ;
break; }
4613 case 3112: { name =
"Sigma-"; latexString=
"#Sigma" ;
break; }
4614 case -3112: { name =
"Sigmabar+"; latexString=
"#bar{#Sigma}^{+}" ;
break; }
4615 case 3114: { name =
"Sigma*-"; latexString=
"#Sigma^{*}" ;
break; }
4616 case -3114: { name =
"Sigmabar*+"; latexString=
"#bar{#Sigma}^{*+}" ;
break; }
4619 case 3212: { name =
"Sigma0";latexString=
"#Sigma^{0}" ;
break; }
4620 case -3212: { name =
"Sigmabar0";latexString=
"#bar{#Sigma}^{0}" ;
break; }
4621 case 3214: { name =
"Sigma*0"; latexString=
"#Sigma^{*0}" ;
break; }
4622 case -3214: { name =
"Sigma*bar0";latexString=
"#bar{#Sigma}^{*0}" ;
break; }
4623 case 3222: { name =
"Sigma+"; latexString=
"#Sigma^{+}" ;
break; }
4624 case -3222: { name =
"Sigmabar-"; latexString=
"#bar{#Sigma}^{-}";
break; }
4625 case 3224: { name =
"Sigma*+"; latexString=
"#Sigma^{*+}" ;
break; }
4626 case -3224: { name =
"Sigmabar*-"; latexString=
"#bar{#Sigma}^{*-}";
break; }
4628 case 2212: { name =
"p";latexString=
name ;
break; }
4629 case -2212: { name =
"~p";latexString=
"#bar{p}" ;
break; }
4630 case -2214: { name =
"Delta-";latexString=
"#Delta^{-}" ;
break; }
4631 case 2214: { name =
"Delta+";latexString=
"#Delta^{+}" ;
break; }
4632 case -2224: { name =
"Deltabar--"; latexString=
"#bar{#Delta}^{--}" ;
break; }
4633 case 2224: { name =
"Delta++"; latexString=
"#Delta^{++}";
break; }
4635 case 3312: { name =
"Xi-"; latexString=
"#Xi^{-}";
break; }
4636 case -3312: { name =
"Xi+"; latexString=
"#Xi^{+}";
break; }
4637 case 3314: { name =
"Xi*-"; latexString=
"#Xi^{*-}";
break; }
4638 case -3314: { name =
"Xi*+"; latexString=
"#Xi^{*+}";
break; }
4640 case 3322: { name =
"Xi0"; latexString=
"#Xi^{0}";
break; }
4641 case -3322: { name =
"anti-Xi0"; latexString=
"#overline{Xi^{0}}";
break; }
4642 case 3324: { name =
"Xi*0"; latexString=
"#Xi^{*0}";
break; }
4643 case -3324: { name =
"anti-Xi*0"; latexString=
"#overline{Xi^{*0}}";
break; }
4645 case 3334: { name =
"Omega-"; latexString=
"#Omega^{-}";
break; }
4646 case -3334: { name =
"anti-Omega+"; latexString=
"#Omega^{+}";
break; }
4648 case 4122: { name =
"Lambda_c+"; latexString=
"#Lambda_{c}^{+}";
break; }
4649 case -4122: { name =
"Lambda_c-"; latexString=
"#Lambda_{c}^{-}";
break; }
4650 case 4222: { name =
"Sigma_c++"; latexString=
"#Sigma_{c}^{++}";
break; }
4651 case -4222: { name =
"Sigma_c--"; latexString=
"#Sigma_{c}^{--}";
break; }
4654 case 92 : {name=
"String"; latexString=
"String";
break; }
4656 case 2101 : {name=
"ud_0"; latexString=
"ud_{0}";
break; }
4657 case -2101 : {name=
"anti-ud_0"; latexString=
"#overline{ud}_{0}";
break; }
4658 case 2103 : {name=
"ud_1"; latexString=
"ud_{1}";
break; }
4659 case -2103 : {name=
"anti-ud_1"; latexString=
"#overline{ud}_{1}";
break; }
4660 case 2203 : {name=
"uu_1"; latexString=
"uu_{1}";
break; }
4661 case -2203 : {name=
"anti-uu_1"; latexString=
"#overline{uu}_{1}";
break; }
4662 case 3303 : {name=
"ss_1"; latexString=
"#overline{ss}_{1}";
break; }
4663 case 3101 : {name=
"sd_0"; latexString=
"sd_{0}";
break; }
4664 case -3101 : {name=
"anti-sd_0"; latexString=
"#overline{sd}_{0}";
break; }
4665 case 3103 : {name=
"sd_1"; latexString=
"sd_{1}";
break; }
4666 case -3103 : {name=
"anti-sd_1"; latexString=
"#overline{sd}_{1}";
break; }
4668 case 20213 : {name=
"a_1+"; latexString=
"a_{1}^{+}";
break; }
4669 case -20213 : {name=
"a_1-"; latexString=
"a_{1}^{-}";
break; }
4674 cout <<
"Unknown code : " << partId << endl;
4687 std::vector< std::list <simMatch> >& candSimMatchTrack,
4688 std::vector< std::list <simMatch> >& candSimMatchEcal)
const
4693 out <<
"Running Monte Carlo Truth Matching Tool" << endl;
4697 candSimMatchTrack.resize(candidates.size());
4698 candSimMatchEcal.resize(candidates.size());
4700 for(
unsigned i=0;
i<candidates.size();
i++) {
4705 out <<
i<<
" " <<(*pfCandidates_)[
i]<<endl;
4706 out <<
"is matching:" << endl;
4712 for(
unsigned iel=0; iel<eleInBlocks.size(); ++iel) {
4713 PFBlockRef blockRef = eleInBlocks[iel].first;
4714 unsigned indexInBlock = eleInBlocks[iel].second;
4723 = elements_h[ indexInBlock ].type();
4730 = elements_h[ indexInBlock ].trackRefPF();
4731 assert( !trackref.
isNull() );
4734 unsigned rtrkID = track.trackId();
4740 if(trackIDM != 99999
4741 && trackIDM == rtrkID){
4744 out <<
"\tSimParticle " << isim
4745 <<
" through Track matching pTrectrack="
4746 << trkREF->pt() <<
" GeV" << endl;
4749 std::pair<double, unsigned> simtrackmatch
4750 = make_pair(trkREF->pt(),trackIDM);
4751 candSimMatchTrack[
i].push_back(simtrackmatch);
4761 = elements_h[ indexInBlock ].clusterRef();
4762 assert( !clusterref.
isNull() );
4765 const std::vector< reco::PFRecHitFraction >&
4766 fracs = cluster.recHitFractions();
4770 vector<unsigned> simpID;
4773 for(
unsigned int rhit = 0; rhit < fracs.size(); ++rhit){
4776 if(rh.
isNull())
continue;
4787 vector<unsigned> rechitSimIDs
4789 vector<double> rechitSimFrac
4792 if( !rechitSimIDs.size() )
continue;
4794 for (
unsigned isimrh=0; isimrh < rechitSimIDs.size(); isimrh++) {
4795 if( rechitSimIDs[isimrh] == rechit_cluster.
detId() ){
4797 bool takenalready =
false;
4798 for(
unsigned iss = 0; iss < simpID.size(); ++iss)
4799 if(simpID[iss] == isim) takenalready =
true;
4800 if(!takenalready) simpID.push_back(isim);
4803 ((rechit_cluster.
energy()*rechitSimFrac[isimrh])/100.0)
4804 *fracs[rhit].fraction();
4816 for(
unsigned is=0; is < simpID.size(); ++is)
4818 double frac_of_cluster
4819 = (simpEC[simpID[is]]/cluster.energy())*100.0;
4822 std::pair<double, unsigned> simecalmatch
4823 = make_pair(simpEC[simpID[is]],simpID[is]);
4824 candSimMatchEcal[
i].push_back(simecalmatch);
4827 out <<
"\tSimParticle " << simpID[is]
4828 <<
" through ECAL matching Epfcluster="
4830 <<
" GeV with N=" << simpCN[simpID[is]]
4831 <<
" rechits in common "
4833 out <<
"\t\tsimparticle contributing to a total of "
4834 << simpEC[simpID[is]]
4835 <<
" GeV of this cluster ("
4836 << frac_of_cluster <<
"%) "
4845 cout <<
"==============================================================="
4852 cout <<
"=================================================================="
4854 cout <<
"SimParticles" << endl;
4858 cout <<
"==== Particle Simulated " <<
i << endl;
4863 cout <<
"Look at the desintegration products" << endl;
4870 cout <<
"matching pfCandidate (trough tracking): " << endl;
4871 for(
unsigned icand=0; icand<candidates.size(); icand++ )
4873 ITM it = candSimMatchTrack[icand].begin();
4874 ITM itend = candSimMatchTrack[icand].end();
4875 for(;it!=itend;++it)
4876 if(
i == it->second ){
4877 out<<icand<<
" "<<(*pfCandidates_)[icand]<<endl;
4885 vector<unsigned> rechitSimIDs
4887 vector<double> rechitSimFrac
4890 if( !rechitSimIDs.size() )
continue;
4892 cout <<
"matching pfCandidate (through ECAL): " << endl;
4895 double totalEcalE = 0.0;
4897 for (
unsigned isimrh=0; isimrh < rechitSimIDs.size();
4901 cout <<
"For info, this particle deposits E=" << totalEcalE
4902 <<
"(GeV) in the ECAL" << endl;
4904 for(
unsigned icand=0; icand<candidates.size(); icand++ )
4906 ITM it = candSimMatchEcal[icand].begin();
4907 ITM itend = candSimMatchEcal[icand].end();
4908 for(;it!=itend;++it)
4909 if(
i == it->second )
4910 out<<icand<<
" "<<it->first<<
"GeV "<<(*pfCandidates_)[icand]<<endl;
4922 if ( tagname.size() == 1 )
4925 else if ( tagname.size() == 2 )
4928 else if ( tagname.size() == 3 )
4929 return tagname[2] ==
'*' ?
4933 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
bool useAtHLT_
Use HLT tracking.
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 printCluster(const reco::PFCluster &cluster, std::ostream &out=std::cout) const
void setPFMuonAndFakeParameters(std::vector< double > muonHCAL, std::vector< double > muonECAL, std::vector< double > muonHO, double nSigmaTRACK, double ptError, std::vector< double > factors45, bool usePFMuonMomAssign, bool useBestMuonTrack)
bool tauBenchmarkDebug_
tau benchmark debug
double printSimParticlesPtMin_
bool printPFJets_
print PFJets yes/no
ParticleType
particle types
edm::Handle< reco::PFRecHitCollection > rechitsHFEMHandle_
rechits HF EM
PFClusterAlgo clusterAlgoHO_
clustering algorithm for HO
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_
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
std::auto_ptr< reco::PFCandidateElectronExtraCollection > transferElectronExtra()
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
edm::InputTag egammaElectronsTag_
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_
bool usePFElectrons_
Use PFElectrons.
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)
void setEGElectronCollection(const reco::GsfElectronCollection &egelectrons)
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_
void setPFPhotonParameters(bool usePFPhoton, std::string mvaWeightFileConvID, double mvaConvCut, bool useReg, std::string X0_Map, const boost::shared_ptr< PFEnergyCalibration > &thePFEnergyCalibration, double sumPtTrackIsoForPhoton, double sumPtTrackIsoSlopeForPhoton)
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 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
edm::InputTag rechitsHOTag_
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
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 > &hoh, 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 &hoMask=dummyMask_, const Mask &hfemMask=dummyMask_, const Mask &hfhadMask=dummyMask_, const Mask &psMask=dummyMask_, const Mask &phMask=dummyMask_)
set input collections of tracks and clusters
edm::InputTag corrcaloJetsTag_
bool doParticleFlow_
particle flow on/off
void setPFPhotonRegWeights(const GBRForest *LCorrForestEB, const GBRForest *LCorrForestEE, const GBRForest *GCorrForestBarrel, const GBRForest *GCorrForestEndcapHr9, const GBRForest *GCorrForestEndcapLr9, const GBRForest *PFEcalResolution)
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_
std::auto_ptr< reco::PFCandidateElectronExtraCollection > pfCandidateElectronExtras_
PFCandidateElectronExtra.
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_
bool useKDTreeTrackEcalLinker_
ECAL-track link optimization.
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.
std::auto_ptr< reco::PFClusterCollection > clustersHO_
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)
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
edm::Handle< reco::PFRecHitCollection > rechitsHOHandle_
rechits HO
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_
reco::PFRecHitCollection rechitsHO_
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_
edm::Handle< reco::GsfElectronCollection > egammaElectronHandle_
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 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.
bool getByLabel(InputTag const &, Handle< T > &) const
bool useHO_
Use of HO in links with tracks/HCAL and in particle flow reconstruction.
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)
void setUseOptimization(bool useKDTreeTrackEcalLinker)
virtual ParticleType particleId() const
void setMaxPairSize(int aMaxPairSize)
????
void setThreshCleanEndcap(double thresh)
set endcap clean threshold
void setup()
book histograms
std::vector< reco::PFCandidateElectronExtra > PFCandidateElectronExtraCollection
collection of PFCandidateElectronExtras
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)
bool useEGElectrons_
Use EGElectrons.
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
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
reco::GsfElectronCollection egammaElectrons_
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
void setElectronExtraRef(const edm::OrphanHandle< reco::PFCandidateElectronExtraCollection > &extrah)
edm::Handle< reco::PFRecTrackCollection > recTracksHandle_
reconstructed tracks
int eventToEntry(int run, int lumi, int event) const