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);
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);
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.);
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.);
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.);
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.);
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,
1088 cerr<<
"exception setting PFBlockAlgo parameters: "
1089 <<err.what()<<
". terminating."<<endl;
1095 bool blockAlgoDebug =
false;
1099 bool AlgoDebug =
false;
1104 boost::shared_ptr<PFEnergyCalibration>
1108 bool usePFSCEleCalib;
1109 std::vector<double> calibPFSCEle_Fbrem_barrel;
1110 std::vector<double> calibPFSCEle_Fbrem_endcap;
1111 std::vector<double> calibPFSCEle_barrel;
1112 std::vector<double> calibPFSCEle_endcap;
1113 options_->
GetOpt(
"particle_flow",
"usePFSCEleCalib",usePFSCEleCalib);
1114 options_->
GetOpt(
"particle_flow",
"calibPFSCEle_Fbrem_barrel",calibPFSCEle_Fbrem_barrel);
1115 options_->
GetOpt(
"particle_flow",
"calibPFSCEle_Fbrem_endcap",calibPFSCEle_Fbrem_endcap);
1116 options_->
GetOpt(
"particle_flow",
"calibPFSCEle_barrel",calibPFSCEle_barrel);
1117 options_->
GetOpt(
"particle_flow",
"calibPFSCEle_endcap",calibPFSCEle_endcap);
1118 boost::shared_ptr<PFSCEnergyCalibration>
1119 thePFSCEnergyCalibration (
new PFSCEnergyCalibration(calibPFSCEle_Fbrem_barrel,calibPFSCEle_Fbrem_endcap,
1120 calibPFSCEle_barrel,calibPFSCEle_endcap ));
1122 bool useEGammaSupercluster;
1123 double sumEtEcalIsoForEgammaSC_barrel;
1124 double sumEtEcalIsoForEgammaSC_endcap;
1125 double coneEcalIsoForEgammaSC;
1126 double sumPtTrackIsoForEgammaSC_barrel;
1127 double sumPtTrackIsoForEgammaSC_endcap;
1128 unsigned int nTrackIsoForEgammaSC;
1129 double coneTrackIsoForEgammaSC;
1130 options_->
GetOpt(
"particle_flow",
"useEGammaSupercluster",useEGammaSupercluster);
1131 options_->
GetOpt(
"particle_flow",
"sumEtEcalIsoForEgammaSC_barrel",sumEtEcalIsoForEgammaSC_barrel);
1132 options_->
GetOpt(
"particle_flow",
"sumEtEcalIsoForEgammaSC_endcap",sumEtEcalIsoForEgammaSC_endcap);
1133 options_->
GetOpt(
"particle_flow",
"coneEcalIsoForEgammaSC",coneEcalIsoForEgammaSC);
1134 options_->
GetOpt(
"particle_flow",
"sumPtTrackIsoForEgammaSC_barrel",sumPtTrackIsoForEgammaSC_barrel);
1135 options_->
GetOpt(
"particle_flow",
"sumPtTrackIsoForEgammaSC_endcap",sumPtTrackIsoForEgammaSC_endcap);
1136 options_->
GetOpt(
"particle_flow",
"nTrackIsoForEgammaSC",nTrackIsoForEgammaSC);
1137 options_->
GetOpt(
"particle_flow",
"coneTrackIsoForEgammaSC",coneTrackIsoForEgammaSC);
1141 bool calibHF_use =
false;
1142 std::vector<double> calibHF_eta_step;
1143 std::vector<double> calibHF_a_EMonly;
1144 std::vector<double> calibHF_b_HADonly;
1145 std::vector<double> calibHF_a_EMHAD;
1146 std::vector<double> calibHF_b_EMHAD;
1148 options_->
GetOpt(
"particle_flow",
"calib_calibHF_use",calibHF_use);
1149 options_->
GetOpt(
"particle_flow",
"calib_calibHF_eta_step",calibHF_eta_step);
1150 options_->
GetOpt(
"particle_flow",
"calib_calibHF_a_EMonly",calibHF_a_EMonly);
1151 options_->
GetOpt(
"particle_flow",
"calib_calibHF_b_HADonly",calibHF_b_HADonly);
1152 options_->
GetOpt(
"particle_flow",
"calib_calibHF_a_EMHAD",calibHF_a_EMHAD);
1153 options_->
GetOpt(
"particle_flow",
"calib_calibHF_b_EMHAD",calibHF_b_EMHAD);
1155 boost::shared_ptr<PFEnergyCalibrationHF> thepfEnergyCalibrationHF
1156 (
new PFEnergyCalibrationHF(calibHF_use,calibHF_eta_step,calibHF_a_EMonly,calibHF_b_HADonly,calibHF_a_EMHAD,calibHF_b_EMHAD) ) ;
1162 double nSigmaECAL = 99999;
1164 double nSigmaHCAL = 99999;
1172 cerr<<
"exception setting PFAlgo parameters: "
1173 <<err.what()<<
". terminating."<<endl;
1178 std::vector<double> muonHCAL;
1179 std::vector<double> muonECAL;
1180 std::vector<double> muonHO;
1185 assert ( muonHCAL.size() == 2 && muonECAL.size() == 2 && muonHO.size() == 2);
1187 double nSigmaTRACK = 3.0;
1190 double ptError = 1.0;
1193 std::vector<double> factors45;
1195 assert ( factors45.size() == 2 );
1202 iConfig.addParameter<
double>(
"maxDPtOPt",maxDPtOPt);
1205 options_->
GetOpt(
"particle_flow",
"minTrackerHits", minTrackerHits);
1210 iConfig.addParameter<
int>(
"minPixelHits",minPixelHits);
1216 double ptErrorScale;
1218 iConfig.addParameter<
double>(
"ptErrorScale",ptErrorScale);
1220 double eventFractionForCleaning;
1221 options_->
GetOpt(
"particle_flow",
"eventFractionForCleaning", eventFractionForCleaning);
1222 iConfig.addParameter<
double>(
"eventFractionForCleaning",eventFractionForCleaning);
1226 iConfig.addParameter<
double>(
"dzPV",dzpv);
1228 bool postMuonCleaning;
1229 options_->
GetOpt(
"particle_flow",
"postMuonCleaning", postMuonCleaning);
1230 iConfig.addParameter<
bool>(
"postMuonCleaning",postMuonCleaning);
1232 double minPtForPostCleaning;
1233 options_->
GetOpt(
"particle_flow",
"minPtForPostCleaning", minPtForPostCleaning);
1234 iConfig.addParameter<
double>(
"minPtForPostCleaning",minPtForPostCleaning);
1236 double eventFactorForCosmics;
1237 options_->
GetOpt(
"particle_flow",
"eventFactorForCosmics", eventFactorForCosmics);
1238 iConfig.addParameter<
double>(
"eventFactorForCosmics",eventFactorForCosmics);
1240 double minSignificanceForCleaning;
1241 options_->
GetOpt(
"particle_flow",
"metSignificanceForCleaning", minSignificanceForCleaning);
1242 iConfig.addParameter<
double>(
"metSignificanceForCleaning",minSignificanceForCleaning);
1244 double minSignificanceForRejection;
1245 options_->
GetOpt(
"particle_flow",
"metSignificanceForRejection", minSignificanceForRejection);
1246 iConfig.addParameter<
double>(
"metSignificanceForRejection",minSignificanceForRejection);
1248 double metFactorForCleaning;
1249 options_->
GetOpt(
"particle_flow",
"metFactorForCleaning", metFactorForCleaning);
1250 iConfig.addParameter<
double>(
"metFactorForCleaning",metFactorForCleaning);
1252 double eventFractionForRejection;
1253 options_->
GetOpt(
"particle_flow",
"eventFractionForRejection", eventFractionForRejection);
1254 iConfig.addParameter<
double>(
"eventFractionForRejection",eventFractionForRejection);
1256 double metFactorForRejection;
1257 options_->
GetOpt(
"particle_flow",
"metFactorForRejection", metFactorForRejection);
1258 iConfig.addParameter<
double>(
"metFactorForRejection",metFactorForRejection);
1260 double metFactorForHighEta;
1261 options_->
GetOpt(
"particle_flow",
"metFactorForHighEta", metFactorForHighEta);
1262 iConfig.addParameter<
double>(
"metFactorForHighEta",metFactorForHighEta);
1264 double ptFactorForHighEta;
1265 options_->
GetOpt(
"particle_flow",
"ptFactorForHighEta", ptFactorForHighEta);
1266 iConfig.addParameter<
double>(
"ptFactorForHighEta",ptFactorForHighEta);
1269 double metFactorForFakes;
1270 options_->
GetOpt(
"particle_flow",
"metFactorForFakes", metFactorForFakes);
1271 iConfig.addParameter<
double>(
"metFactorForFakes",metFactorForFakes);
1273 double minMomentumForPunchThrough;
1274 options_->
GetOpt(
"particle_flow",
"minMomentumForPunchThrough", minMomentumForPunchThrough);
1275 iConfig.addParameter<
double>(
"minMomentumForPunchThrough",minMomentumForPunchThrough);
1277 double minEnergyForPunchThrough;
1278 options_->
GetOpt(
"particle_flow",
"minEnergyForPunchThrough", minEnergyForPunchThrough);
1279 iConfig.addParameter<
double>(
"minEnergyForPunchThrough",minEnergyForPunchThrough);
1282 double punchThroughFactor;
1283 options_->
GetOpt(
"particle_flow",
"punchThroughFactor", punchThroughFactor);
1284 iConfig.addParameter<
double>(
"punchThroughFactor",punchThroughFactor);
1286 double punchThroughMETFactor;
1287 options_->
GetOpt(
"particle_flow",
"punchThroughMETFactor", punchThroughMETFactor);
1288 iConfig.addParameter<
double>(
"punchThroughMETFactor",punchThroughMETFactor);
1291 double cosmicRejectionDistance;
1292 options_->
GetOpt(
"particle_flow",
"cosmicRejectionDistance", cosmicRejectionDistance);
1293 iConfig.addParameter<
double>(
"cosmicRejectionDistance",cosmicRejectionDistance);
1299 cerr<<
"exception setting PFAlgo Muon and Fake parameters: "
1300 <<err.what()<<
". terminating."<<endl;
1305 bool postHFCleaning =
true;
1306 options_->
GetOpt(
"particle_flow",
"postHFCleaning", postHFCleaning);
1307 double minHFCleaningPt = 5.;
1308 options_->
GetOpt(
"particle_flow",
"minHFCleaningPt", minHFCleaningPt);
1309 double minSignificance = 2.5;
1310 options_->
GetOpt(
"particle_flow",
"minSignificance", minSignificance);
1311 double maxSignificance = 2.5;
1312 options_->
GetOpt(
"particle_flow",
"maxSignificance", maxSignificance);
1313 double minSignificanceReduction = 1.4;
1314 options_->
GetOpt(
"particle_flow",
"minSignificanceReduction", minSignificanceReduction);
1315 double maxDeltaPhiPt = 7.0;
1316 options_->
GetOpt(
"particle_flow",
"maxDeltaPhiPt", maxDeltaPhiPt);
1317 double minDeltaMet = 0.4;
1326 minSignificanceReduction,
1331 cerr<<
"exception setting post HF cleaning parameters: "
1332 <<err.what()<<
". terminating."<<endl;
1352 double mvaEleCut = -1.;
1355 bool applyCrackCorrections=
true;
1356 options_->
GetOpt(
"particle_flow",
"electron_crackCorrection",applyCrackCorrections);
1358 string mvaWeightFileEleID =
"";
1360 mvaWeightFileEleID);
1361 mvaWeightFileEleID =
expand(mvaWeightFileEleID);
1364 options_->
GetOpt(
"particle_flow",
"egammaElectrons",egammaElectronstagname);
1375 thePFSCEnergyCalibration,
1377 sumEtEcalIsoForEgammaSC_barrel,
1378 sumEtEcalIsoForEgammaSC_endcap,
1379 coneEcalIsoForEgammaSC,
1380 sumPtTrackIsoForEgammaSC_barrel,
1381 sumPtTrackIsoForEgammaSC_endcap,
1382 nTrackIsoForEgammaSC,
1383 coneTrackIsoForEgammaSC,
1384 applyCrackCorrections,
1387 useEGammaSupercluster);
1390 cerr<<
"exception setting PFAlgo Electron parameters: "
1391 <<err.what()<<
". terminating."<<endl;
1397 bool usePFPhotons =
true;
1399 string mvaWeightFileConvID =
"";
1400 string mvaWeightFileRegLCEB=
"";
1401 string mvaWeightFileRegLCEE=
"";
1402 string mvaWeightFileRegGCEB=
"";
1403 string mvaWeightFileRegGCEEhr9=
"";
1404 string mvaWeightFileRegGCEElr9=
"";
1405 string mvaWeightFileRegRes=
"";
1407 double mvaConvCut=-1.;
1408 double sumPtTrackIsoForPhoton=2.0;
1409 double sumPtTrackIsoSlopeForPhoton=0.001;
1413 options_->
GetOpt(
"particle_flow",
"convID_mvaWeightFile", mvaWeightFileConvID);
1414 options_->
GetOpt(
"particle_flow",
"mvaWeightFileRegLCEB", mvaWeightFileRegLCEB);
1415 options_->
GetOpt(
"particle_flow",
"mvaWeightFileRegLCEE", mvaWeightFileRegLCEE);
1416 options_->
GetOpt(
"particle_flow",
"mvaWeightFileRegGCEB", mvaWeightFileRegGCEB);
1417 options_->
GetOpt(
"particle_flow",
"mvaWeightFileRegGCEEHr9", mvaWeightFileRegGCEEhr9);
1418 options_->
GetOpt(
"particle_flow",
"mvaWeightFileRegGCEELr9", mvaWeightFileRegGCEElr9);
1419 options_->
GetOpt(
"particle_flow",
"mvaWeightFileRegRes", mvaWeightFileRegRes);
1421 options_->
GetOpt(
"particle_flow",
"sumPtTrackIsoForPhoton",sumPtTrackIsoForPhoton);
1422 options_->
GetOpt(
"particle_flow",
"sumPtTrackIsoSlopeForPhoton",sumPtTrackIsoSlopeForPhoton);
1425 if( usePFPhotons ) {
1427 TFile *infile_PFLCEB =
new TFile(mvaWeightFileRegLCEB.c_str(),
"READ");
1428 TFile *infile_PFLCEE =
new TFile(mvaWeightFileRegLCEE.c_str(),
"READ");
1429 TFile *infile_PFGCEB =
new TFile(mvaWeightFileRegGCEB.c_str(),
"READ");
1430 TFile *infile_PFGCEEhR9 =
new TFile(mvaWeightFileRegGCEEhr9.c_str(),
"READ");
1431 TFile *infile_PFGCEElR9 =
new TFile(mvaWeightFileRegGCEElr9.c_str(),
"READ");
1432 TFile *infile_PFRes =
new TFile(mvaWeightFileRegRes.c_str(),
"READ");
1443 mvaWeightFileConvID,
1448 sumPtTrackIsoForPhoton,
1449 sumPtTrackIsoSlopeForPhoton
1452 gbrGCEEhr9,gbrGCEElr9,
1458 cerr<<
"exception setting PFAlgo Photon parameters: "
1459 <<err.what()<<
". terminating."<<endl;
1467 bool rejectTracks_Bad =
true;
1468 bool rejectTracks_Step45 =
true;
1469 bool usePFConversions =
false;
1470 bool usePFNuclearInteractions =
false;
1471 bool usePFV0s =
false;
1474 double dptRel_DispVtx = 10;
1477 options_->
GetOpt(
"particle_flow",
"usePFConversions", usePFConversions);
1479 options_->
GetOpt(
"particle_flow",
"usePFNuclearInteractions", usePFNuclearInteractions);
1480 options_->
GetOpt(
"particle_flow",
"dptRel_DispVtx", dptRel_DispVtx);
1484 rejectTracks_Step45,
1485 usePFNuclearInteractions,
1492 cerr<<
"exception setting PFAlgo displaced vertex parameters: "
1493 <<err.what()<<
". terminating."<<endl;
1498 bool bCorrect =
false;
1499 bool bCalibPrimary =
false;
1500 double dptRel_PrimaryTrack = 0;
1501 double dptRel_MergedTrack = 0;
1502 double ptErrorSecondary = 0;
1503 vector<double> nuclCalibFactors;
1506 options_->
GetOpt(
"particle_flow",
"bCalibPrimary", bCalibPrimary);
1507 options_->
GetOpt(
"particle_flow",
"dptRel_PrimaryTrack", dptRel_PrimaryTrack);
1508 options_->
GetOpt(
"particle_flow",
"dptRel_MergedTrack", dptRel_MergedTrack);
1509 options_->
GetOpt(
"particle_flow",
"ptErrorSecondary", ptErrorSecondary);
1510 options_->
GetOpt(
"particle_flow",
"nuclCalibFactors", nuclCalibFactors);
1516 cerr<<
"exception setting PFAlgo cand connector parameters: "
1517 <<err.what()<<
". terminating."<<endl;
1543 double mEtInputCut = 0.5;
1546 double mEInputCut = 0.;
1549 double seedThreshold = 1.0;
1552 double coneRadius = 0.5;
1555 double coneAreaFraction= 1.0;
1561 int maxIterations=100;
1564 double overlapThreshold = 0.75;
1570 double rparam = 1.0;
1588 cout <<
"----------------------------------" << endl;
1597 double coneAngle = 0.5;
1600 double seedEt = 0.4;
1603 double coneMerge = 100.0;
1611 cout <<
"Tau Benchmark Options : ";
1612 cout <<
"Angle=" << coneAngle <<
" seedEt=" << seedEt
1613 <<
" Merge=" << coneMerge << endl;
1677 cout<<
"Opening input root files"<<endl;
1686 catch(
string& err) {
1694 cout <<
"The rootfile(s) " << endl;
1697 cout <<
" is (are) not valid file(s) to open" << endl;
1700 cout <<
"The rootfile(s) : " << endl;
1703 cout<<
" are opened with " <<
ev_->
size() <<
" events." <<endl;
1708 options_->
GetOpt(
"root",
"rechits_ECAL_inputTag", rechitsECALtagname);
1712 options_->
GetOpt(
"root",
"rechits_HCAL_inputTag", rechitsHCALtagname);
1716 options_->
GetOpt(
"root",
"rechits_HO_inputTag", rechitsHOtagname);
1720 options_->
GetOpt(
"root",
"rechits_HFEM_inputTag", rechitsHFEMtagname);
1724 options_->
GetOpt(
"root",
"rechits_HFHAD_inputTag", rechitsHFHADtagname);
1727 std::vector<string> rechitsCLEANEDtagnames;
1728 options_->
GetOpt(
"root",
"rechits_CLEANED_inputTags", rechitsCLEANEDtagnames);
1729 for (
unsigned tags = 0;
tags<rechitsCLEANEDtagnames.size(); ++
tags )
1737 options_->
GetOpt(
"root",
"rechits_PS_inputTag", rechitsPStagname);
1745 options_->
GetOpt(
"root",
"displacedRecTracks_inputTag", displacedRecTrackstagname);
1749 options_->
GetOpt(
"root",
"primaryVertices_inputTag", primaryVerticestagname);
1757 options_->
GetOpt(
"root",
"gsfrecTracks_inputTag", gsfrecTrackstagname);
1764 options_->
GetOpt(
"root",
"convBremGsfrecTracks_inputTag", convBremGsfrecTrackstagname);
1782 options_->
GetOpt(
"root",
"conversion_inputTag", conversiontagname);
1805 options_->
GetOpt(
"root",
"PFDisplacedVertex_inputTag", pfNuclearTrackerVertextagname);
1810 options_->
GetOpt(
"root",
"trueParticles_inputTag", trueParticlestagname);
1818 options_->
GetOpt(
"root",
"caloTowers_inputTag", caloTowerstagname);
1827 options_->
GetOpt(
"root",
"genParticlesforMET_inputTag", genParticlesforMETtagname);
1831 options_->
GetOpt(
"root",
"genParticlesforJets_inputTag", genParticlesforJetstagname);
1836 options_->
GetOpt(
"root",
"particleFlowCand_inputTag", pfCandidatetagname);
1844 options_->
GetOpt(
"root",
"corrCaloJets_inputTag", corrcaloJetstagname);
1895 cout <<
" Writing DQM root file " << endl;
1918 LumisMap::const_iterator iL = iR->second.find( lumi );
1919 if( iL != iR->second.end() ) {
1920 EventToEntry::const_iterator iE = iL->second.find( event );
1921 if( iE != iL->second.end() ) {
1925 cout<<
"event "<<
event<<
" not found in run "<<run<<
", lumi "<<lumi<<endl;
1929 cout<<
"lumi "<<lumi<<
" not found in run "<<run<<endl;
1933 cout<<
"run "<<run<<
" not found"<<endl;
1942 cout<<
"event "<<
event<<
" is not present, sorry."<<endl;
1956 bool exists =
ev_->
to(entry);
1958 std::cout <<
"Entry " << entry <<
" does not exist " << std::endl;
1968 (entry < 100 && entry%10 == 0) ||
1969 (entry < 1000 && entry%100 == 0) ||
1971 cout<<
"process entry "<< entry
1972 <<
", run "<<iEvent.
id().
run()
1974 <<
", event:"<<iEvent.
id().
event()
1994 cout<<
"number of muons : "<<
muons_.size()<<endl;
1997 cout<<
"number of v0 : "<<
v0_.size()<<endl;
2013 cout<<
"clustering is OFF - clusters come from the input file"<<endl;
2069 cout <<
" =====================PFJetBenchmark =================" << endl;
2070 cout<<
"Resol Pt max "<<resPt
2071 <<
" resChargedHadEnergy Max " << resChargedHadEnergy
2072 <<
" resNeutralHadEnergy Max " << resNeutralHadEnergy
2073 <<
" resNeutralEmEnergy Max "<< resNeutralEmEnergy << endl;
2082 if ( resPt < -1. ) {
2083 cout <<
" =====================PFJetBenchmark =================" << endl;
2084 cout<<
"process entry "<< entry << endl;
2085 cout<<
"Resol Pt max "<<resPt
2086 <<
" resChargedHadEnergy Max " << resChargedHadEnergy
2087 <<
" resNeutralHadEnergy Max " << resNeutralHadEnergy
2088 <<
" resNeutralEmEnergy Max "<< resNeutralEmEnergy
2089 <<
" Jet pt " <<
genJets_[0].pt() << endl;
2141 float deltaMin, deltaMax;
2150 double deltaEt = 0.;
2197 if( pfc.
pt() >
ptMin )
return true;
2206 cout <<
"start reading from simulation"<<endl;
2216 if ( foundstdTracks ) {
2220 cerr<<
"PFRootEventManager::ProcessEntry : stdTracks Collection not found : "
2225 if ( foundMCTruth ) {
2247 cerr<<
"PFRootEventManager::ProcessEntry : rechitsECAL Collection not found : "
2256 cerr<<
"PFRootEventManager::ProcessEntry : rechitsHCAL Collection not found : "
2266 cerr<<
"PFRootEventManager::ProcessEntry : rechitsHO Collection not found : "
2276 cerr<<
"PFRootEventManager::ProcessEntry : rechitsHFEM Collection not found : "
2285 cerr<<
"PFRootEventManager::ProcessEntry : rechitsHFHAD Collection not found : "
2292 if ( foundCLEANED ) {
2296 cerr<<
"PFRootEventManager::ProcessEntry : rechitsCLEANED Collection not found : "
2307 cerr<<
"PFRootEventManager::ProcessEntry : rechitsPS Collection not found : "
2316 cerr<<
"PFRootEventManager::ProcessEntry : caloTowers Collection not found : "
2325 cerr<<
"PFRootEventManager::ProcessEntry : primaryVertices Collection not found : "
2335 cerr<<
"PFRootEventManager::ProcessEntry : pfNuclearTrackerVertex Collection not found : "
2340 if ( foundrecTracks ) {
2344 cerr<<
"PFRootEventManager::ProcessEntry : recTracks Collection not found : "
2349 if ( founddisplacedRecTracks ) {
2353 cerr<<
"PFRootEventManager::ProcessEntry : displacedRecTracks Collection not found : "
2359 if ( foundgsfrecTracks ) {
2363 cerr<<
"PFRootEventManager::ProcessEntry : gsfrecTracks Collection not found : "
2368 if ( foundconvBremGsfrecTracks ) {
2372 cerr<<
"PFRootEventManager::ProcessEntry : convBremGsfrecTracks Collection not found : "
2388 cerr<<
"PFRootEventManager::ProcessEntry : muons Collection not found : "
2393 if ( foundconversion ) {
2397 cerr<<
"PFRootEventManager::ProcessEntry : conversion Collection not found : "
2408 cerr<<
"PFRootEventManager::ProcessEntry : v0 Collection not found : "
2409 <<entry <<
" " <<
v0Tag_<<endl;
2414 if ( foundPhotons) {
2417 cerr <<
"PFRootEventManager::ProcessEntry : photon collection not found : "
2424 if ( foundElectrons) {
2429 cerr <<
"PFRootEventManager::ProcessEntry : electron collection not found : "
2435 if ( foundgenJets ) {
2444 if ( foundgenParticlesforJets ) {
2453 if ( foundgenParticlesforMET ) {
2462 if ( foundcaloJets ) {
2466 cerr<<
"PFRootEventManager::ProcessEntry : caloJets Collection not found : "
2471 if ( foundcorrcaloJets ) {
2480 if ( foundpfJets ) {
2484 cerr<<
"PFRootEventManager::ProcessEntry : PFJets Collection not found : "
2489 if ( foundpfCands ) {
2493 cerr<<
"PFRootEventManager::ProcessEntry : PFCandidate Collection not found : "
2498 if ( foundpfMets ) {
2502 cerr<<
"PFRootEventManager::ProcessEntry : PFMets Collection not found : "
2507 if ( foundtcMets ) {
2511 cerr<<
"TCRootEventManager::ProcessEntry : TCMets Collection not found : "
2516 if ( foundcaloMets ) {
2520 cerr<<
"CALORootEventManager::ProcessEntry : CALOMets Collection not found : "
2526 bool goodevent =
true;
2531 cout <<
"PFRootEventManager : event discarded Nparticles="
2536 cout <<
"PFRootEventManager : leptonic tau discarded " << endl;
2542 cout <<
"PFRootEventManager : tau discarded: "
2543 <<
"number of charged and neutral particles different from "
2619 const std::vector<int>& ptcdaughters = ptc.
daughterIds();
2621 for (
unsigned int dapt=0; dapt < ptcdaughters.size(); ++dapt) {
2627 int pdgdaugther = daughter.
pdgCode();
2628 int abspdgdaughter =
std::abs(pdgdaugther);
2631 if (abspdgdaughter == 11 ||
2632 abspdgdaughter == 13) {
2653 const std::vector<int>& daughters = ptc.
daughterIds();
2657 if(!daughters.empty() )
continue;
2660 double pdgCode = ptc.
pdgCode();
2664 else if( pdgCode==22 )
2712 int kqa,kq1,kq2,kq3,kqj,irt,kqx,kqn;
2716 int ichg[109]={-1,2,-1,2,-1,2,-1,2,0,0,-3,0,-3,0,-3,0,
2717 -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,
2718 -3,0,-3,0,-3,0,0,0,0,0,-1,2,-1,2,-1,2,0,0,0,0,
2719 -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};
2725 kqn=kqa/1000000000%10;
2735 if(kqa==0 || kqa >= 10000000) {
2737 if(kqn==1) {hepchg=0;}
2740 else if(kqa<=100) {hepchg = ichg[kqa-1];}
2742 else if(kqa==100 || kqa==101) {hepchg = -3;}
2744 else if(kqa==102 || kqa==104) {hepchg = -6;}
2746 else if(kqj == 0) {hepchg = 0;}
2748 else if(kqx>0 && irt<100)
2750 hepchg = ichg[irt-1];
2751 if(kqa==1000017 || kqa==1000018) {hepchg = 0;}
2752 if(kqa==1000034 || kqa==1000052) {hepchg = 0;}
2753 if(kqa==1000053 || kqa==1000054) {hepchg = 0;}
2754 if(kqa==5100061 || kqa==5100062) {hepchg = 6;}
2760 hepchg = ichg[kq2-1]-ichg[kq1-1];
2762 if((kq2==3) || (kq2==5)) {hepchg = ichg[kq1-1]-ichg[kq2-1];}
2766 hepchg = ichg[kq3-1] + ichg[kq2-1];
2771 hepchg = ichg[kq3-1]+ichg[kq2-1]+ichg[kq1-1];
2775 if(Id<0 && hepchg!=0) {hepchg = -1*hepchg;}
2806 bool findNeighbours) {
2809 map<unsigned, unsigned> detId2index;
2811 for(
unsigned i=0;
i<rechits.size();
i++) {
2812 rechits[
i].calculatePositionREP();
2815 detId2index.insert( make_pair(rechits[
i].detId(),
i) );
2818 if(findNeighbours) {
2819 for(
unsigned i=0;
i<rechits.size();
i++) {
2828 const map<unsigned, unsigned>& detId2index ) {
2835 for(
unsigned i=0;
i<neighbours4DetId.size();
i++) {
2836 unsigned detId = neighbours4DetId[
i];
2838 const map<unsigned, unsigned>::const_iterator& it = detId2index.find(detId);
2840 if(it != detId2index.end() ) {
2846 for(
unsigned i=0;
i<neighbours8DetId.size();
i++) {
2847 unsigned detId = neighbours8DetId[
i];
2849 const map<unsigned, unsigned>::const_iterator& it = detId2index.find(detId);
2851 if(it != detId2index.end() ) {
2864 cout <<
"start clustering"<<endl;
2926 for(
unsigned i=0;
i<clusters.size();
i++) {
2928 cluster.
eta = clusters[
i].position().Eta();
2929 cluster.
phi = clusters[
i].position().Phi();
2930 cluster.
e = clusters[
i].energy();
2931 cluster.
layer = clusters[
i].layer();
2937 switch( clusters[
i].layer() ) {
2962 cluster.
eta, cluster.
phi,
2988 for (
unsigned i=0;
i < trueParticles.size();
i++) {
2998 if(ntrajpoints == 3) {
3026 for (
unsigned i=0;
i < pfCandidates.size();
i++) {
3031 outptc.
eta = candidate.
eta();
3032 outptc.
phi = candidate.
phi();
3033 outptc.
e = candidate.
energy();
3047 for (
unsigned i=0;
i < cts.
size();
i++) {
3067 for (
unsigned i=0;
i < blocks.size();
i++) {
3082 cout <<
"start particle flow"<<endl;
3087 cout<<
"PFRootEventManager::particleFlow start"<<endl;
3148 vector<bool> trackMask;
3150 vector<bool> gsftrackMask;
3152 vector<bool> ecalMask;
3154 vector<bool> hcalMask;
3157 vector<bool> scmask;
3159 vector<bool> hoMask;
3162 vector<bool> hfemMask;
3164 vector<bool> hfhadMask;
3166 vector<bool> psMask;
3168 vector<bool> photonMask;
3173 muonh, nuclearh, displacedtrackh, convh, v0,
3174 ecalh, hcalh, hoh, hfemh, hfhadh, psh,
3175 photonh, ebsch, eesch, trackMask,gsftrackMask,
3176 ecalMask, hcalMask, hoMask, hfemMask, hfhadMask, psMask,photonMask,scmask );
3179 trackMask, ecalMask, hcalMask, hoMask, psMask);
3211 if(
debug_)
cout<<
"PFRootEventManager::particleFlow stop"<<endl;
3223 if ( differentSize ) {
3224 cout <<
"+++WARNING+++ PFCandidate size changed for entry "
3225 << entry <<
" !" << endl
3226 <<
" - original size : " <<
pfCandCMSSW_.size() << endl
3230 double deltaE = (*pfCandidates_)[
i].energy()-
pfCandCMSSW_[
i].energy();
3233 if ( fabs(deltaE) > 1E-4 ||
3234 fabs(deltaEta) > 1E-9 ||
3235 fabs(deltaPhi) > 1E-9 ) {
3236 cout <<
"+++WARNING+++ PFCandidate " <<
i
3237 <<
" changed for entry " << entry <<
" ! " << endl
3239 <<
" - Current : " << (*pfCandidates_)[
i] << endl
3240 <<
" DeltaE = : " << deltaE << endl
3241 <<
" DeltaEta = : " << deltaEta << endl
3242 <<
" DeltaPhi = : " << deltaPhi << endl << endl;
3253 cout<<
"start reconstruct GenJets --- "<<endl;
3254 cout<<
" input gen particles for jet: all neutrinos removed ; muons present" << endl;
3274 cout <<
" #" <<
i <<
" PDG code:" << genPart.
pdgId()
3275 <<
" status " << genPart.
status()
3276 <<
", p/pt/eta/phi: " << genPart.
p() <<
'/' << genPart.
pt()
3277 <<
'/' << genPart.
eta() <<
'/' << genPart.
phi() << endl;
3283 vector<ProtoJet> protoJets;
3289 typedef vector <ProtoJet>::const_iterator IPJ;
3290 for (IPJ ipj = protoJets.begin(); ipj != protoJets.end (); ipj++) {
3306 ProtoJet::Constituents::const_iterator constituent = constituents.
begin();
3307 for (; constituent != constituents.end(); ++constituent) {
3310 uint
index = constituent->index();
3314 newJet.setJetArea(protojet.
jetArea());
3315 newJet.setPileup(protojet.
pileup());
3316 newJet.setNPasses(protojet.
nPasses());
3318 if (
jetsDebug_ )
cout<<
" gen jet "<<ijet<<
" "<<newJet.print()<<endl;
3329 cout<<
"start reconstruct CaloJets --- "<<endl;
3342 for(
unsigned ipj=0; ipj<
caloJets_.size(); ipj++) {
3344 cout<<
" calo jet "<<ipj<<
" "<<protojet.
pt() <<endl;
3355 cout<<
"start reconstruct PF Jets --- "<<endl;
3365 vector<ProtoJet> protoJets;
3371 typedef vector <ProtoJet>::const_iterator IPJ;
3372 for (IPJ ipj = protoJets.begin(); ipj != protoJets.end (); ipj++) {
3388 ProtoJet::Constituents::const_iterator constituent = constituents.
begin();
3389 for (; constituent != constituents.end(); ++constituent) {
3392 uint
index = constituent->index();
3396 newJet.setJetArea(protojet.
jetArea());
3397 newJet.setPileup(protojet.
pileup());
3398 newJet.setNPasses(protojet.
nPasses());
3400 if (
jetsDebug_ )
cout<<
" PF jet "<<ijet<<
" "<<newJet.print()<<endl;
3468 TLorentzVector partTOTMC;
3469 bool tauFound =
false;
3470 bool tooManyTaus =
false;
3477 if(
i ) tooManyTaus =
true;
3482 if(!tauFound || tooManyTaus ) {
3488 const std::vector<int>& ptcdaughters =
trueParticles_[0].daughterIds();
3494 for (
unsigned int dapt=0; dapt < ptcdaughters.size(); ++dapt) {
3498 TLorentzVector partMC;
3499 partMC.SetPxPyPzE(tpatvtx.
momentum().Px(),
3504 partTOTMC += partMC;
3508 cout << pdgcode << endl;
3509 cout << tpatvtx << endl;
3510 cout << partMC.Px() <<
" " << partMC.Py() <<
" "
3511 << partMC.Pz() <<
" " << partMC.E()
3513 <<
sqrt(partMC.Px()*partMC.Px()+partMC.Py()*partMC.Py())
3521 for ( HepMC::GenEvent::particle_const_iterator
3522 piter = myGenEvent->particles_begin();
3523 piter != myGenEvent->particles_end();
3527 if (
std::abs((*piter)->pdg_id())==15){
3530 for ( HepMC::GenVertex::particles_out_const_iterator bp =
3531 (*piter)->end_vertex()->particles_out_const_begin();
3532 bp != (*piter)->end_vertex()->particles_out_const_end(); ++bp ) {
3533 uint nuId=
std::abs((*bp)->pdg_id());
3534 bool isNeutrino=(nuId==12)||(nuId==14)||(nuId==16);
3538 TLorentzVector partMC;
3539 partMC.SetPxPyPzE((*bp)->momentum().x(),
3540 (*bp)->momentum().y(),
3541 (*bp)->momentum().z(),
3542 (*bp)->momentum().e());
3543 partTOTMC += partMC;
3548 if (itau>1) tooManyTaus=
true;
3550 if(!tauFound || tooManyTaus ) {
3551 cerr<<
"PFRootEventManager::tauBenchmark : not a single tau event"<<endl;
3559 jetmc.
eta = partTOTMC.Eta();
3560 jetmc.
phi = partTOTMC.Phi();
3561 jetmc.
et = partTOTMC.Et();
3562 jetmc.
e = partTOTMC.E();
3598 cout <<
" ET Vector=" << partTOTMC.Et()
3599 <<
" " << partTOTMC.Eta()
3600 <<
" " << partTOTMC.Phi() << endl;
cout << endl;
3608 vector<TLorentzVector> allcalotowers;
3611 double threshCaloTowers = 1E-10;
3619 TLorentzVector caloT;
3624 caloT.SetPxPyPzE(pxyz.X(),pxyz.Y(),pxyz.Z(),
caloTowers_[
i].energy());
3625 allcalotowers.push_back(caloT);
3630 cout <<
" RETRIEVED " << allcalotowers.size()
3631 <<
" CALOTOWER 4-VECTORS " << endl;
3635 const vector< PFJetAlgorithm::Jet >& caloTjets
3639 double JetEHTETmax = 0.0;
3640 for (
unsigned i = 0;
i < caloTjets.size();
i++) {
3641 TLorentzVector jetmom = caloTjets[
i].GetMomentum();
3642 double jetcalo_pt =
sqrt(jetmom.Px()*jetmom.Px()+jetmom.Py()*jetmom.Py());
3643 double jetcalo_et = jetmom.Et();
3646 jet.
eta = jetmom.Eta();
3647 jet.
phi = jetmom.Phi();
3648 jet.
et = jetmom.Et();
3651 const vector<int>& indexes = caloTjets[
i].GetIndexes();
3652 for(
unsigned ii=0;
ii<indexes.size();
ii++){
3662 cout <<
" ECAL+HCAL jet : " << caloTjets[
i] << endl;
3663 cout << jetmom.Px() <<
" " << jetmom.Py() <<
" "
3664 << jetmom.Pz() <<
" " << jetmom.E()
3665 <<
" PT=" << jetcalo_pt << endl;
3668 if (jetcalo_et >= JetEHTETmax)
3669 JetEHTETmax = jetcalo_et;
3674 vector<TLorentzVector> allrecparticles;
3686 for(
unsigned i=0;
i<candidates.size();
i++) {
3695 cout <<
i <<
" " << candidate << endl;
3697 cout <<
" type= " << type <<
" " << candidate.
charge()
3703 TLorentzVector partRec(PFpart.Px(),
3709 allrecparticles.push_back( partRec );
3715 cout <<
" THERE ARE " << allrecparticles.size()
3716 <<
" RECONSTRUCTED 4-VECTORS" << endl;
3719 const vector< PFJetAlgorithm::Jet >& PFjets
3723 cout << PFjets.size() <<
" PF Jets found" << endl;
3724 double JetPFETmax = 0.0;
3725 for (
unsigned i = 0;
i < PFjets.size();
i++) {
3726 TLorentzVector jetmom = PFjets[
i].GetMomentum();
3727 double jetpf_pt =
sqrt(jetmom.Px()*jetmom.Px()+jetmom.Py()*jetmom.Py());
3728 double jetpf_et = jetmom.Et();
3731 jet.
eta = jetmom.Eta();
3732 jet.
phi = jetmom.Phi();
3733 jet.
et = jetmom.Et();
3739 cout <<
" Rec jet : "<< PFjets[
i] <<endl;
3740 cout << jetmom.Px() <<
" " << jetmom.Py() <<
" "
3741 << jetmom.Pz() <<
" " << jetmom.E()
3742 <<
" PT=" << jetpf_pt <<
" eta="<< jetmom.Eta()
3743 <<
" Phi=" << jetmom.Phi() << endl;
3744 cout <<
"------------------------------------------------" << endl;
3747 if (jetpf_et >= JetPFETmax)
3748 JetPFETmax = jetpf_et;
3753 double deltaEtEHT = JetEHTETmax - partTOTMC.Et();
3756 double deltaEt = JetPFETmax - partTOTMC.Et();
3760 cout <<
"tau benchmark E_T(PF) - E_T(true) = " << deltaEt << endl;
3763 return deltaEt/partTOTMC.Et();
3818 string newString = oldString;
3820 string dollar =
"$";
3824 int dollarPos = newString.find(dollar,0);
3825 if( dollarPos == -1 )
return oldString;
3827 int lengh = newString.find(slash,0) - newString.find(dollar,0) + 1;
3828 string env_variable =
3829 newString.substr( ( newString.find(dollar,0) + 1 ), lengh -2);
3831 int begin = env_variable.find_first_of(
"{");
3832 int end = env_variable.find_last_of(
"}");
3837 env_variable = env_variable.substr( begin+1, end-1 );
3842 char*
directory = getenv( env_variable.c_str() );
3845 cerr<<
"please define environment variable $"<<env_variable<<endl;
3852 newString.replace( 0, lengh , sdir);
3855 cout <<
"expand " <<oldString<<
" to "<< newString << endl;
3870 if(!myGenEvent)
return;
3872 for ( HepMC::GenEvent::particle_const_iterator
3873 piter = myGenEvent->particles_begin();
3874 piter != myGenEvent->particles_end();
3877 if ( nGen != 1 || nSim != 1 )
return;
3880 if (
genJets_.size() != 1 )
return;
3882 double true_eta =
genJets_[0].eta();
3883 double true_phi =
genJets_[0].phi();
3887 double rec_ECALEnergy = 0.;
3888 double rec_HCALEnergy = 0.;
3889 double deltaRMin = 999.;
3890 unsigned int theJet = 0;
3891 for (
unsigned int ijet=0; ijet<
pfJets_.size(); ++ijet ) {
3892 double rec_ECAL =
pfJets_[ijet].neutralEmEnergy();
3893 double rec_HCAL =
pfJets_[ijet].neutralHadronEnergy();
3894 double rec_eta =
pfJets_[0].eta();
3895 double rec_phi =
pfJets_[0].phi();
3897 + (rec_phi-true_phi)*(rec_phi-true_phi) );
3898 if ( deltaR < deltaRMin ) {
3900 rec_ECALEnergy = rec_ECAL;
3901 rec_HCALEnergy = rec_HCAL;
3904 if ( deltaRMin > 0.1 )
return;
3906 std::vector < PFCandidatePtr > constituents =
pfJets_[theJet].getPFConstituents ();
3907 double pat_ECALEnergy = 0.;
3908 double pat_HCALEnergy = 0.;
3909 for (
unsigned ic = 0; ic < constituents.size (); ++ic) {
3910 if ( constituents[ic]->particleId() < 4 )
continue;
3911 if ( constituents[ic]->particleId() == 4 )
3912 pat_ECALEnergy += constituents[ic]->rawEcalEnergy();
3913 else if ( constituents[ic]->particleId() == 5 )
3914 pat_HCALEnergy += constituents[ic]->rawHcalEnergy();
3917 out << true_eta <<
" " << true_phi <<
" " << true_E
3918 <<
" " << rec_ECALEnergy <<
" " << rec_HCALEnergy
3919 <<
" " << pat_ECALEnergy <<
" " << pat_HCALEnergy
3920 <<
" " << deltaRMin << std::endl;
3930 std::vector< std::list <simMatch> > candSimMatchTrack;
3931 std::vector< std::list <simMatch> > candSimMatchEcal;
3941 out<<
"ECAL RecHits ==============================================="<<endl;
3943 out<<
"HCAL RecHits ==============================================="<<endl;
3946 out<<
"HO RecHits ================================================="<<endl;
3949 out<<
"HFEM RecHits ==============================================="<<endl;
3951 out<<
"HFHAD RecHits =============================================="<<endl;
3953 out<<
"PS RecHits ================================================="<<endl;
3958 out<<
"ECAL Clusters ============================================="<<endl;
3960 out<<
"HCAL Clusters ============================================="<<endl;
3963 out<<
"HO Clusters ==============================================="<<endl;
3966 out<<
"HFEM Clusters ============================================="<<endl;
3968 out<<
"HFHAD Clusters ============================================"<<endl;
3970 out<<
"PS Clusters ============================================="<<endl;
3973 bool printTracks =
true;
3978 out<<
"Particle Flow Blocks ======================================"<<endl;
3980 out<<
i<<
" "<<(*pfBlocks_)[
i]<<endl;
3985 out<<
"Particle Flow Candidates =================================="<<endl;
3996 out<<
"MEX, MEY, MET ============================================" <<endl
3997 << mex <<
" " << mey <<
" " <<
sqrt(mex*mex+mey*mey);
4004 cout<<
"MCTruthMatching Results"<<endl;
4007 out <<icand<<
" " <<(*pfCandidates_)[icand]<<endl;
4008 out <<
"is matching:" << endl;
4011 ITM it_t = candSimMatchTrack[icand].begin();
4012 ITM itend_t = candSimMatchTrack[icand].end();
4013 for(;it_t!=itend_t;++it_t){
4014 unsigned simid = it_t->second;
4017 out <<
"\t\tthrough Track matching pTrectrack="
4018 << it_t->first <<
" GeV" << endl;
4021 ITM it_e = candSimMatchEcal[icand].begin();
4022 ITM itend_e = candSimMatchEcal[icand].end();
4023 for(;it_e!=itend_e;++it_e){
4024 unsigned simid = it_e->second;
4027 out <<
"\t\tsimparticle contributing to a total of "
4029 <<
" GeV of its ECAL cluster"
4032 cout<<
"________________"<<endl;
4037 out<<
"Jets ====================================================="<<endl;
4038 out<<
"Particle Flow: "<<endl;
4044 out<<
"Generated: "<<endl;
4051 out<<
"Calo: "<<endl;
4058 out<<
"Sim Particles ==========================================="<<endl;
4076 cout<<
"MCTruthMatching Results"<<endl;
4078 cout <<
"==== Particle Simulated " <<
i << endl;
4083 cout <<
"Look at the desintegration products" << endl;
4090 cout <<
"matching pfCandidate (trough tracking): " << endl;
4094 ITM it = candSimMatchTrack[icand].begin();
4095 ITM itend = candSimMatchTrack[icand].end();
4096 for(;it!=itend;++it)
4097 if(
i == it->second ){
4098 out<<icand<<
" "<<(*pfCandidates_)[icand]<<endl;
4105 vector<unsigned> rechitSimIDs
4107 vector<double> rechitSimFrac
4110 if( !rechitSimIDs.size() )
continue;
4112 cout <<
"matching pfCandidate (through ECAL): " << endl;
4115 double totalEcalE = 0.0;
4117 for (
unsigned isimrh=0; isimrh < rechitSimIDs.size();
4121 cout <<
"For info, this particle deposits E=" << totalEcalE
4122 <<
"(GeV) in the ECAL" << endl;
4127 ITM it = candSimMatchEcal[icand].begin();
4128 ITM itend = candSimMatchEcal[icand].end();
4129 for(;it!=itend;++it)
4130 if(
i == it->second )
4131 out<<icand<<
" "<<it->first<<
"GeV "<<(*pfCandidates_)[icand]<<endl;
4148 int maxNLines)
const {
4152 if(!myGenEvent)
return;
4154 out<<
"GenParticles ==========================================="<<endl;
4156 std::cout <<
"Id Gen Name eta phi pT E Vtx1 "
4158 <<
"Moth Vtx2 eta phi R Z Da1 Da2 Ecal?"
4162 for ( HepMC::GenEvent::particle_const_iterator
4163 piter = myGenEvent->particles_begin();
4164 piter != myGenEvent->particles_end();
4167 if( nLines == maxNLines)
break;
4172 int partId = p->pdg_id();
4285 p->momentum().e() );
4291 if ( !p->production_vertex() && p->pdg_id() == 2212 )
continue;
4296 if(p->production_vertex() ) {
4297 vertex1.SetCoordinates( p->production_vertex()->position().x()/10.,
4298 p->production_vertex()->position().y()/10.,
4299 p->production_vertex()->position().z()/10. );
4300 vertexId1 = p->production_vertex()->barcode();
4303 out.setf(std::ios::fixed, std::ios::floatfield);
4304 out.setf(std::ios::right, std::ios::adjustfield);
4306 out << std::setw(4) << p->barcode() <<
" "
4309 for(
unsigned int k=0;
k<11-name.length() &&
k<12;
k++) out <<
" ";
4311 double eta = momentum1.eta();
4312 if ( eta > +10. ) eta = +10.;
4313 if ( eta < -10. ) eta = -10.;
4315 out << std::setw(6) << std::setprecision(2) << eta <<
" "
4316 << std::setw(6) << std::setprecision(2) << momentum1.phi() <<
" "
4317 << std::setw(7) << std::setprecision(2) << momentum1.pt() <<
" "
4318 << std::setw(7) << std::setprecision(2) << momentum1.e() <<
" "
4319 << std::setw(4) << vertexId1 <<
" "
4320 << std::setw(6) << std::setprecision(1) << vertex1.x() <<
" "
4321 << std::setw(6) << std::setprecision(1) << vertex1.y() <<
" "
4322 << std::setw(6) << std::setprecision(1) << vertex1.z() <<
" ";
4325 if( p->production_vertex() ) {
4326 if ( p->production_vertex()->particles_in_size() ) {
4328 *(p->production_vertex()->particles_in_const_begin());
4330 out << std::setw(4) << mother->barcode() <<
" ";
4336 if ( p->end_vertex() ) {
4338 p->end_vertex()->position().y()/10.,
4339 p->end_vertex()->position().z()/10.,
4340 p->end_vertex()->position().t()/10.);
4341 int vertexId2 = p->end_vertex()->barcode();
4343 std::vector<const HepMC::GenParticle*> children;
4344 HepMC::GenVertex::particles_out_const_iterator firstDaughterIt =
4345 p->end_vertex()->particles_out_const_begin();
4346 HepMC::GenVertex::particles_out_const_iterator lastDaughterIt =
4347 p->end_vertex()->particles_out_const_end();
4348 for ( ; firstDaughterIt != lastDaughterIt ; ++firstDaughterIt ) {
4349 children.push_back(*firstDaughterIt);
4352 out << std::setw(4) << vertexId2 <<
" "
4353 << std::setw(6) << std::setprecision(2) << vertex2.eta() <<
" "
4354 << std::setw(6) << std::setprecision(2) << vertex2.phi() <<
" "
4355 << std::setw(5) << std::setprecision(1) << vertex2.pt() <<
" "
4356 << std::setw(6) << std::setprecision(1) << vertex2.z() <<
" ";
4358 for (
unsigned id=0;
id<children.size(); ++id )
4359 out << std::setw(4) << children[id]->barcode() <<
" ";
4367 for(
unsigned i=0;
i<rechits.size();
i++) {
4368 string seedstatus =
" ";
4370 seedstatus =
"SEED";
4378 const char* seedstatus,
4379 ostream&
out)
const {
4388 TCutG* cutg = (TCutG*) gROOT->FindObject(
"CUTG");
4389 if( !cutg || cutg->IsInside( eta, phi ) )
4390 out<<index<<
"\t"<<seedstatus<<
" "<<rh<<endl;
4394 ostream&
out )
const {
4395 for(
unsigned i=0;
i<clusters.size();
i++) {
4402 ostream&
out )
const {
4412 TCutG* cutg = (TCutG*) gROOT->FindObject(
"CUTG");
4413 if( !cutg || cutg->IsInside( eta, phi ) )
4419 TCutG* cutg = (TCutG*) gROOT->FindObject(
"CUTG");
4420 if(!cutg)
return true;
4422 const vector< reco::PFTrajectoryPoint >& points = track.
trajectoryPoints();
4424 for(
unsigned i=0;
i<points.size();
i++) {
4425 if( ! points[
i].isValid() )
continue;
4428 if( cutg->IsInside( pos.Eta(), pos.Phi() ) )
return true;
4441 TCutG* cutg = (TCutG*) gROOT->FindObject(
"CUTG");
4443 mask.resize( rechits.size(),
true);
4448 mask.reserve( rechits.size() );
4449 for(
unsigned i=0;
i<rechits.size();
i++) {
4451 double eta = rechits[
i].position().Eta();
4452 double phi = rechits[
i].position().Phi();
4454 if( cutg->IsInside( eta, phi ) )
4455 mask.push_back(
true );
4457 mask.push_back(
false );
4466 TCutG* cutg = (TCutG*) gROOT->FindObject(
"CUTG");
4470 mask.reserve( clusters.size() );
4471 for(
unsigned i=0;
i<clusters.size();
i++) {
4473 double eta = clusters[
i].position().Eta();
4474 double phi = clusters[
i].position().Phi();
4476 if( cutg->IsInside( eta, phi ) )
4477 mask.push_back(
true );
4479 mask.push_back(
false );
4488 TCutG* cutg = (TCutG*) gROOT->FindObject(
"CUTG");
4492 mask.reserve( tracks.size() );
4493 for(
unsigned i=0;
i<tracks.size();
i++) {
4495 mask.push_back(
true );
4497 mask.push_back(
false );
4506 TCutG* cutg = (TCutG*) gROOT->FindObject(
"CUTG");
4510 mask.reserve( photons.size() );
4511 for(
unsigned i=0;
i<photons.size();
i++) {
4512 double eta = photons[
i].caloPosition().Eta();
4513 double phi = photons[
i].caloPosition().Phi();
4514 if( cutg->IsInside( eta, phi ) )
4515 mask.push_back(
true );
4517 mask.push_back(
false );
4527 TCutG* cutg = (TCutG*) gROOT->FindObject(
"CUTG");
4531 mask.reserve( tracks.size() );
4532 for(
unsigned i=0;
i<tracks.size();
i++) {
4534 mask.push_back(
true );
4536 mask.push_back(
false );
4544 double& peta,
double& pphi,
double& pe)
4549 string err =
"PFRootEventManager::closestParticle : ";
4550 err +=
"vector of PFSimParticles is empty";
4551 throw std::length_error( err.c_str() );
4554 double mindist2 = 99999999;
4555 unsigned iClosest=0;
4575 double deta = peta -
eta;
4576 double dphi = pphi -
phi;
4578 double dist2 = deta*deta + dphi*dphi;
4580 if(dist2<mindist2) {
4613 case 1: { name =
"d";latexString=
"d";
break; }
4614 case 2: { name =
"u";latexString=
"u";
break; }
4615 case 3: { name =
"s";latexString=
"s" ;
break; }
4616 case 4: { name =
"c";latexString=
"c" ;
break; }
4617 case 5: { name =
"b";latexString=
"b" ;
break; }
4618 case 6: { name =
"t";latexString=
"t" ;
break; }
4619 case -1: { name =
"~d";latexString=
"#bar{d}" ;
break; }
4620 case -2: { name =
"~u";latexString=
"#bar{u}" ;
break; }
4621 case -3: { name =
"~s";latexString=
"#bar{s}" ;
break; }
4622 case -4: { name =
"~c";latexString=
"#bar{c}" ;
break; }
4623 case -5: { name =
"~b";latexString=
"#bar{b}" ;
break; }
4624 case -6: { name =
"~t";latexString=
"#bar{t}" ;
break; }
4625 case 11: { name =
"e-";latexString=
name ;
break; }
4626 case -11: { name =
"e+";latexString=
name ;
break; }
4627 case 12: { name =
"nu_e";latexString=
"#nu_{e}" ;
break; }
4628 case -12: { name =
"~nu_e";latexString=
"#bar{#nu}_{e}" ;
break; }
4629 case 13: { name =
"mu-";latexString=
"#mu-" ;
break; }
4630 case -13: { name =
"mu+";latexString=
"#mu+" ;
break; }
4631 case 14: { name =
"nu_mu";latexString=
"#nu_{mu}" ;
break; }
4632 case -14: { name =
"~nu_mu";latexString=
"#bar{#nu}_{#mu}";
break; }
4633 case 15: { name =
"tau-";latexString=
"#tau^{-}" ;
break; }
4634 case -15: { name =
"tau+";latexString=
"#tau^{+}" ;
break; }
4635 case 16: { name =
"nu_tau";latexString=
"#nu_{#tau}" ;
break; }
4636 case -16: { name =
"~nu_tau";latexString=
"#bar{#nu}_{#tau}";
break; }
4637 case 21: { name =
"gluon";latexString=
name;
break; }
4638 case 22: { name =
"gamma";latexString=
"#gamma";
break; }
4639 case 23: { name =
"Z0";latexString=
"Z^{0}" ;
break; }
4640 case 24: { name =
"W+";latexString=
"W^{+}" ;
break; }
4641 case 25: { name =
"H0";latexString=
name ;
break; }
4642 case -24: { name =
"W-";latexString=
"W^{-}" ;
break; }
4643 case 111: { name =
"pi0";latexString=
"#pi^{0}" ;
break; }
4644 case 113: { name =
"rho0";latexString=
"#rho^{0}" ;
break; }
4645 case 223: { name =
"omega";latexString=
"#omega" ;
break; }
4646 case 333: { name =
"phi";latexString=
"#phi";
break; }
4647 case 443: { name =
"J/psi";latexString=
"J/#psi" ;
break; }
4648 case 553: { name =
"Upsilon";latexString=
"#Upsilon" ;
break; }
4649 case 130: { name =
"K0L";latexString=
name ;
break; }
4650 case 211: { name =
"pi+";latexString=
"#pi^{+}" ;
break; }
4651 case -211: { name =
"pi-";latexString=
"#pi^{-}" ;
break; }
4652 case 213: { name =
"rho+";latexString=
"#rho^{+}" ;
break; }
4653 case -213: { name =
"rho-";latexString=
"#rho^{-}" ;
break; }
4654 case 221: { name =
"eta";latexString=
"#eta" ;
break; }
4655 case 331: { name =
"eta'";latexString=
"#eta'" ;
break; }
4656 case 441: { name =
"etac";latexString=
"#eta_{c}" ;
break; }
4657 case 551: { name =
"etab";latexString=
"#eta_{b}";
break; }
4658 case 310: { name =
"K0S";latexString=
name ;
break; }
4659 case 311: { name =
"K0";latexString=
"K^{0}" ;
break; }
4660 case -311: { name =
"Kbar0";latexString=
"#bar{#Kappa}^{0}" ;
break; }
4661 case 321: { name =
"K+";latexString=
"K^{+}";
break; }
4662 case -321: { name =
"K-";latexString=
"K^{-}";
break; }
4663 case 411: { name =
"D+";latexString=
"D^{+}" ;
break; }
4664 case -411: { name =
"D-";latexString=
"D^{-}";
break; }
4665 case 421: { name =
"D0";latexString=
"D^{0}" ;
break; }
4666 case -421: { name =
"D0-bar";latexString=
"#overline{D^{0}}" ;
break; }
4667 case 423: { name =
"D*0";latexString=
"D^{*0}" ;
break; }
4668 case -423: { name =
"D*0-bar";latexString=
"#overline{D^{*0}}" ;
break; }
4669 case 431: { name =
"Ds_+";latexString=
"Ds_{+}" ;
break; }
4670 case -431: { name =
"Ds_-";latexString=
"Ds_{-}" ;
break; }
4671 case 511: { name =
"B0";latexString=
name;
break; }
4672 case 521: { name =
"B+";latexString=
"B^{+}" ;
break; }
4673 case -521: { name =
"B-";latexString=
"B^{-}" ;
break; }
4674 case 531: { name =
"Bs_0";latexString=
"Bs_{0}" ;
break; }
4675 case -531: { name =
"anti-Bs_0";latexString=
"#overline{Bs_{0}}" ;
break; }
4676 case 541: { name =
"Bc_+";latexString=
"Bc_{+}" ;
break; }
4677 case -541: { name =
"Bc_+";latexString=
"Bc_{+}" ;
break; }
4678 case 313: { name =
"K*0";latexString=
"K^{*0}" ;
break; }
4679 case -313: { name =
"K*bar0";latexString=
"#bar{K}^{*0}" ;
break; }
4680 case 323: { name =
"K*+";latexString=
"#K^{*+}";
break; }
4681 case -323: { name =
"K*-";latexString=
"#K^{*-}" ;
break; }
4682 case 413: { name =
"D*+";latexString=
"D^{*+}";
break; }
4683 case -413: { name =
"D*-";latexString=
"D^{*-}" ;
break; }
4685 case 433: { name =
"Ds*+";latexString=
"D_{s}^{*+}" ;
break; }
4686 case -433: { name =
"Ds*-";latexString=
"B_{S}{*-}" ;
break; }
4688 case 513: { name =
"B*0";latexString=
"B^{*0}" ;
break; }
4689 case -513: { name =
"anti-B*0";latexString=
"#overline{B^{*0}}" ;
break; }
4690 case 523: { name =
"B*+";latexString=
"B^{*+}" ;
break; }
4691 case -523: { name =
"B*-";latexString=
"B^{*-}" ;
break; }
4693 case 533: { name =
"B*_s0";latexString=
"B^{*}_{s0}" ;
break; }
4694 case -533 : {name=
"anti-B_s0"; latexString=
"#overline{B_{s}^{0}}";
break; }
4696 case 543: { name =
"B*_c+";latexString=
"B^{*}_{c+}";
break; }
4697 case -543: { name =
"B*_c-";latexString=
"B^{*}_{c-}";
break; }
4698 case 1114: { name =
"Delta-";latexString=
"#Delta^{-}" ;
break; }
4699 case -1114: { name =
"Deltabar+";latexString=
"#bar{#Delta}^{+}" ;
break; }
4700 case -2112: { name =
"nbar0";latexString=
"{bar}n^{0}" ;
break; }
4701 case 2112: { name =
"n"; latexString=
name ;
break;}
4702 case 2114: { name =
"Delta0"; latexString=
"#Delta^{0}" ;
break; }
4703 case -2114: { name =
"Deltabar0"; latexString=
"#bar{#Delta}^{0}" ;
break; }
4704 case 3122: { name =
"Lambda0";latexString=
"#Lambda^{0}";
break; }
4705 case -3122: { name =
"Lambdabar0";latexString=
"#bar{#Lambda}^{0}" ;
break; }
4706 case 3112: { name =
"Sigma-"; latexString=
"#Sigma" ;
break; }
4707 case -3112: { name =
"Sigmabar+"; latexString=
"#bar{#Sigma}^{+}" ;
break; }
4708 case 3114: { name =
"Sigma*-"; latexString=
"#Sigma^{*}" ;
break; }
4709 case -3114: { name =
"Sigmabar*+"; latexString=
"#bar{#Sigma}^{*+}" ;
break; }
4712 case 3212: { name =
"Sigma0";latexString=
"#Sigma^{0}" ;
break; }
4713 case -3212: { name =
"Sigmabar0";latexString=
"#bar{#Sigma}^{0}" ;
break; }
4714 case 3214: { name =
"Sigma*0"; latexString=
"#Sigma^{*0}" ;
break; }
4715 case -3214: { name =
"Sigma*bar0";latexString=
"#bar{#Sigma}^{*0}" ;
break; }
4716 case 3222: { name =
"Sigma+"; latexString=
"#Sigma^{+}" ;
break; }
4717 case -3222: { name =
"Sigmabar-"; latexString=
"#bar{#Sigma}^{-}";
break; }
4718 case 3224: { name =
"Sigma*+"; latexString=
"#Sigma^{*+}" ;
break; }
4719 case -3224: { name =
"Sigmabar*-"; latexString=
"#bar{#Sigma}^{*-}";
break; }
4721 case 2212: { name =
"p";latexString=
name ;
break; }
4722 case -2212: { name =
"~p";latexString=
"#bar{p}" ;
break; }
4723 case -2214: { name =
"Delta-";latexString=
"#Delta^{-}" ;
break; }
4724 case 2214: { name =
"Delta+";latexString=
"#Delta^{+}" ;
break; }
4725 case -2224: { name =
"Deltabar--"; latexString=
"#bar{#Delta}^{--}" ;
break; }
4726 case 2224: { name =
"Delta++"; latexString=
"#Delta^{++}";
break; }
4728 case 3312: { name =
"Xi-"; latexString=
"#Xi^{-}";
break; }
4729 case -3312: { name =
"Xi+"; latexString=
"#Xi^{+}";
break; }
4730 case 3314: { name =
"Xi*-"; latexString=
"#Xi^{*-}";
break; }
4731 case -3314: { name =
"Xi*+"; latexString=
"#Xi^{*+}";
break; }
4733 case 3322: { name =
"Xi0"; latexString=
"#Xi^{0}";
break; }
4734 case -3322: { name =
"anti-Xi0"; latexString=
"#overline{Xi^{0}}";
break; }
4735 case 3324: { name =
"Xi*0"; latexString=
"#Xi^{*0}";
break; }
4736 case -3324: { name =
"anti-Xi*0"; latexString=
"#overline{Xi^{*0}}";
break; }
4738 case 3334: { name =
"Omega-"; latexString=
"#Omega^{-}";
break; }
4739 case -3334: { name =
"anti-Omega+"; latexString=
"#Omega^{+}";
break; }
4741 case 4122: { name =
"Lambda_c+"; latexString=
"#Lambda_{c}^{+}";
break; }
4742 case -4122: { name =
"Lambda_c-"; latexString=
"#Lambda_{c}^{-}";
break; }
4743 case 4222: { name =
"Sigma_c++"; latexString=
"#Sigma_{c}^{++}";
break; }
4744 case -4222: { name =
"Sigma_c--"; latexString=
"#Sigma_{c}^{--}";
break; }
4747 case 92 : {name=
"String"; latexString=
"String";
break; }
4749 case 2101 : {name=
"ud_0"; latexString=
"ud_{0}";
break; }
4750 case -2101 : {name=
"anti-ud_0"; latexString=
"#overline{ud}_{0}";
break; }
4751 case 2103 : {name=
"ud_1"; latexString=
"ud_{1}";
break; }
4752 case -2103 : {name=
"anti-ud_1"; latexString=
"#overline{ud}_{1}";
break; }
4753 case 2203 : {name=
"uu_1"; latexString=
"uu_{1}";
break; }
4754 case -2203 : {name=
"anti-uu_1"; latexString=
"#overline{uu}_{1}";
break; }
4755 case 3303 : {name=
"ss_1"; latexString=
"#overline{ss}_{1}";
break; }
4756 case 3101 : {name=
"sd_0"; latexString=
"sd_{0}";
break; }
4757 case -3101 : {name=
"anti-sd_0"; latexString=
"#overline{sd}_{0}";
break; }
4758 case 3103 : {name=
"sd_1"; latexString=
"sd_{1}";
break; }
4759 case -3103 : {name=
"anti-sd_1"; latexString=
"#overline{sd}_{1}";
break; }
4761 case 20213 : {name=
"a_1+"; latexString=
"a_{1}^{+}";
break; }
4762 case -20213 : {name=
"a_1-"; latexString=
"a_{1}^{-}";
break; }
4767 cout <<
"Unknown code : " << partId << endl;
4780 std::vector< std::list <simMatch> >& candSimMatchTrack,
4781 std::vector< std::list <simMatch> >& candSimMatchEcal)
const
4786 out <<
"Running Monte Carlo Truth Matching Tool" << endl;
4790 candSimMatchTrack.resize(candidates.size());
4791 candSimMatchEcal.resize(candidates.size());
4793 for(
unsigned i=0;
i<candidates.size();
i++) {
4798 out <<
i<<
" " <<(*pfCandidates_)[
i]<<endl;
4799 out <<
"is matching:" << endl;
4805 for(
unsigned iel=0; iel<eleInBlocks.size(); ++iel) {
4806 PFBlockRef blockRef = eleInBlocks[iel].first;
4807 unsigned indexInBlock = eleInBlocks[iel].second;
4816 = elements_h[ indexInBlock ].type();
4823 = elements_h[ indexInBlock ].trackRefPF();
4824 assert( !trackref.
isNull() );
4827 unsigned rtrkID = track.trackId();
4833 if(trackIDM != 99999
4834 && trackIDM == rtrkID){
4837 out <<
"\tSimParticle " << isim
4838 <<
" through Track matching pTrectrack="
4839 << trkREF->pt() <<
" GeV" << endl;
4842 std::pair<double, unsigned> simtrackmatch
4843 = make_pair(trkREF->pt(),trackIDM);
4844 candSimMatchTrack[
i].push_back(simtrackmatch);
4854 = elements_h[ indexInBlock ].clusterRef();
4855 assert( !clusterref.
isNull() );
4858 const std::vector< reco::PFRecHitFraction >&
4859 fracs = cluster.recHitFractions();
4863 vector<unsigned> simpID;
4866 for(
unsigned int rhit = 0; rhit < fracs.size(); ++rhit){
4869 if(rh.
isNull())
continue;
4880 vector<unsigned> rechitSimIDs
4882 vector<double> rechitSimFrac
4885 if( !rechitSimIDs.size() )
continue;
4887 for (
unsigned isimrh=0; isimrh < rechitSimIDs.size(); isimrh++) {
4888 if( rechitSimIDs[isimrh] == rechit_cluster.
detId() ){
4890 bool takenalready =
false;
4891 for(
unsigned iss = 0; iss < simpID.size(); ++iss)
4892 if(simpID[iss] == isim) takenalready =
true;
4893 if(!takenalready) simpID.push_back(isim);
4896 ((rechit_cluster.
energy()*rechitSimFrac[isimrh])/100.0)
4897 *fracs[rhit].fraction();
4909 for(
unsigned is=0; is < simpID.size(); ++is)
4911 double frac_of_cluster
4912 = (simpEC[simpID[is]]/cluster.energy())*100.0;
4915 std::pair<double, unsigned> simecalmatch
4916 = make_pair(simpEC[simpID[is]],simpID[is]);
4917 candSimMatchEcal[
i].push_back(simecalmatch);
4920 out <<
"\tSimParticle " << simpID[is]
4921 <<
" through ECAL matching Epfcluster="
4923 <<
" GeV with N=" << simpCN[simpID[is]]
4924 <<
" rechits in common "
4926 out <<
"\t\tsimparticle contributing to a total of "
4927 << simpEC[simpID[is]]
4928 <<
" GeV of this cluster ("
4929 << frac_of_cluster <<
"%) "
4938 cout <<
"==============================================================="
4945 cout <<
"=================================================================="
4947 cout <<
"SimParticles" << endl;
4951 cout <<
"==== Particle Simulated " <<
i << endl;
4956 cout <<
"Look at the desintegration products" << endl;
4963 cout <<
"matching pfCandidate (trough tracking): " << endl;
4964 for(
unsigned icand=0; icand<candidates.size(); icand++ )
4966 ITM it = candSimMatchTrack[icand].begin();
4967 ITM itend = candSimMatchTrack[icand].end();
4968 for(;it!=itend;++it)
4969 if(
i == it->second ){
4970 out<<icand<<
" "<<(*pfCandidates_)[icand]<<endl;
4978 vector<unsigned> rechitSimIDs
4980 vector<double> rechitSimFrac
4983 if( !rechitSimIDs.size() )
continue;
4985 cout <<
"matching pfCandidate (through ECAL): " << endl;
4988 double totalEcalE = 0.0;
4990 for (
unsigned isimrh=0; isimrh < rechitSimIDs.size();
4994 cout <<
"For info, this particle deposits E=" << totalEcalE
4995 <<
"(GeV) in the ECAL" << endl;
4997 for(
unsigned icand=0; icand<candidates.size(); icand++ )
4999 ITM it = candSimMatchEcal[icand].begin();
5000 ITM itend = candSimMatchEcal[icand].end();
5001 for(;it!=itend;++it)
5002 if(
i == it->second )
5003 out<<icand<<
" "<<it->first<<
"GeV "<<(*pfCandidates_)[icand]<<endl;
5015 if ( tagname.size() == 1 )
5018 else if ( tagname.size() == 2 )
5021 else if ( tagname.size() == 3 )
5022 return tagname[2] ==
'*' ?
5026 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.
virtual double energy() const GCC11_FINAL
energy
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
void reset()
reset before next event
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
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.
void setPFMuonAndFakeParameters(const edm::ParameterSet &pset)
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
virtual double p() const GCC11_FINAL
magnitude of momentum vector
virtual const LorentzVector & p4() const GCC11_FINAL
four-momentum Lorentz vector
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
virtual int pdgId() const GCC11_FINAL
PDG identifier.
edm::Handle< reco::PFRecHitCollection > rechitsHCALHandle_
rechits HCAL
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 setPFVertexParameters(bool useVertex, const reco::VertexCollection *primaryVertices)
void setEGElectronCollection(const reco::GsfElectronCollection &egelectrons)
virtual double py() const GCC11_FINAL
y coordinate of momentum vector
reco::PFRecHitCollection rechitsPS_
Jets made from PFObjects.
void applyCuts(const reco::CandidatePtrVector &Candidates, JetReco::InputCollection *input)
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 float phi() const GCC11_FINAL
momentum azimuthal angle
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
virtual int status() const GCC11_FINAL
status word
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_
void setParameters(float dRMax=0.3, bool matchCharge=true, Benchmark::Mode mode=Benchmark::DEFAULT)
set the benchmark parameters
edm::InputTag corrcaloJetsTag_
bool doParticleFlow_
particle flow on/off
void setPFPhotonRegWeights(const GBRForest *LCorrForestEB, const GBRForest *LCorrForestEE, const GBRForest *GCorrForestBarrel, const GBRForest *GCorrForestEndcapHr9, const GBRForest *GCorrForestEndcapLr9, const GBRForest *PFEcalResolution)
virtual double px() const GCC11_FINAL
x coordinate of momentum vector
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
reco::SuperClusterCollection eesc_
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
virtual float eta() const GCC11_FINAL
momentum pseudorapidity
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 setParameters(std::vector< double > &DPtovPtCut, std::vector< unsigned > &NHitCut, bool useConvBremPFRecTracks, bool useIterTracking, int nuclearInteractionsPurity, bool useEGPhotons, std::vector< double > &photonSelectionCuts, bool useSuperClusters)
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
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
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 int charge() const GCC11_FINAL
electric charge
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_
T const * product() const
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 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 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)
reco::SuperClusterCollection ebsc_
superclusters
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_
virtual float pt() const GCC11_FINAL
transverse momentum
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.
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
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_
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 T< reco::SuperClusterCollection > &sceb, const T< reco::SuperClusterCollection > &scee, 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_, const Mask &scMask=dummyMask_)
set input collections of tracks and clusters
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