Go to the documentation of this file.00001 #ifndef RecoParticleFlow_PFRootEvent_PFRootEventManager_h
00002 #define RecoParticleFlow_PFRootEvent_PFRootEventManager_h
00003
00004 #include "SimDataFormats/GeneratorProducts/interface/HepMCProduct.h"
00005
00006 #include "DataFormats/Provenance/interface/EventAuxiliary.h"
00007
00008 #include "DataFormats/ParticleFlowReco/interface/PFRecHit.h"
00009 #include "DataFormats/ParticleFlowReco/interface/PFRecHitFwd.h"
00010
00011 #include "DataFormats/ParticleFlowReco/interface/PFCluster.h"
00012 #include "DataFormats/ParticleFlowReco/interface/PFClusterFwd.h"
00013
00014 #include "DataFormats/ParticleFlowReco/interface/PFTrajectoryPoint.h"
00015
00016 #include "DataFormats/ParticleFlowReco/interface/PFRecTrack.h"
00017 #include "DataFormats/ParticleFlowReco/interface/PFRecTrackFwd.h"
00018 #include "DataFormats/TrackReco/interface/Track.h"
00019 #include "DataFormats/TrackReco/interface/TrackFwd.h"
00020 #include "DataFormats/VertexReco/interface/VertexFwd.h"
00021 #include "DataFormats/ParticleFlowReco/interface/GsfPFRecTrack.h"
00022 #include "DataFormats/ParticleFlowReco/interface/GsfPFRecTrackFwd.h"
00023
00024 #include "DataFormats/ParticleFlowReco/interface/PFSimParticle.h"
00025 #include "DataFormats/ParticleFlowReco/interface/PFSimParticleFwd.h"
00026
00027 #include "DataFormats/ParticleFlowReco/interface/PFBlock.h"
00028 #include "DataFormats/ParticleFlowReco/interface/PFBlockFwd.h"
00029
00030 #include "DataFormats/ParticleFlowCandidate/interface/PFCandidate.h"
00031 #include "DataFormats/ParticleFlowCandidate/interface/PFCandidateFwd.h"
00032
00033 #include "DataFormats/MuonReco/interface/MuonFwd.h"
00034 #include "DataFormats/MuonReco/interface/Muon.h"
00035
00036 #include "DataFormats/ParticleFlowReco/interface/PFDisplacedTrackerVertex.h"
00037
00038 #include "DataFormats/ParticleFlowReco/interface/PFConversion.h"
00039 #include "DataFormats/ParticleFlowReco/interface/PFConversionFwd.h"
00040 #include "DataFormats/ParticleFlowReco/interface/PFV0.h"
00041 #include "DataFormats/ParticleFlowReco/interface/PFV0Fwd.h"
00042
00043 #include "DataFormats/Candidate/interface/CandidateFwd.h"
00044 #include "DataFormats/HepMCCandidate/interface/GenParticle.h"
00045 #include "DataFormats/HepMCCandidate/interface/GenParticleFwd.h"
00046 #include "CommonTools/CandUtils/interface/pdgIdUtils.h"
00047
00048
00049 #include "DataFormats/CaloTowers/interface/CaloTower.h"
00050 #include "DataFormats/CaloTowers/interface/CaloTowerFwd.h"
00051
00052 #include "RecoParticleFlow/PFClusterProducer/interface/PFClusterAlgo.h"
00053 #include "RecoParticleFlow/PFProducer/interface/PFBlockAlgo.h"
00054 #include "RecoParticleFlow/PFProducer/interface/PFAlgo.h"
00055
00056 #include "RecoParticleFlow/PFRootEvent/interface/PFJetAlgorithm.h"
00057 #include "RecoParticleFlow/Benchmark/interface/PFJetBenchmark.h"
00058 #include "RecoParticleFlow/Benchmark/interface/PFMETBenchmark.h"
00059 #include "DQMOffline/PFTau/interface/PFCandidateManager.h"
00060
00061 #include "RecoParticleFlow/PFRootEvent/interface/FWLiteJetProducer.h"
00062 #include "DataFormats/JetReco/interface/BasicJetCollection.h"
00063 #include "DataFormats/JetReco/interface/PFJetCollection.h"
00064 #include "DataFormats/JetReco/interface/PFJet.h"
00065 #include "DataFormats/JetReco/interface/CaloJetCollection.h"
00066
00067 #include "DataFormats/METReco/interface/PFMETCollection.h"
00068 #include "DataFormats/METReco/interface/PFMET.h"
00069 #include "DataFormats/METReco/interface/CaloMETCollection.h"
00070 #include "DataFormats/METReco/interface/CaloMET.h"
00071 #include "DataFormats/METReco/interface/METCollection.h"
00072 #include "DataFormats/METReco/interface/MET.h"
00073
00074 #include "RecoParticleFlow/PFRootEvent/interface/METManager.h"
00075
00076
00077 #include <TObject.h>
00078 #include "TEllipse.h"
00079 #include "TBox.h"
00080
00081 #include <string>
00082 #include <map>
00083 #include <set>
00084 #include <vector>
00085 #include <memory>
00086 #include <iostream>
00087 #include <fstream>
00088
00089 class TTree;
00090 class TBranch;
00091 class TFile;
00092 class TCanvas;
00093 class TH2F;
00094 class TH1F;
00095
00096
00097 class IO;
00098
00099
00100 class PFBlockElement;
00101
00102 class EventColin;
00103 class PFEnergyCalibration;
00104 class PFEnergyCalibrationHF;
00105 class PFEnergyResolution;
00106
00107 namespace pftools {
00108 class PFClusterCalibration;
00109 }
00110
00111 class METManager;
00112
00113
00114 namespace fwlite {
00115 class ChainEvent;
00116 }
00117
00118 typedef std::pair<double, unsigned> simMatch;
00119 typedef std::list< std::pair<double, unsigned> >::iterator ITM;
00120
00122
00181 class PFRootEventManager {
00182
00183 public:
00184
00186 enum View_t { XY = 0, RZ = 1, EPE = 2, EPH = 3, NViews = 4 };
00187 enum Verbosity {SHUTUP = 0, VERBOSE};
00188
00190 PFRootEventManager();
00191
00193 PFRootEventManager(const char* file);
00194
00196 virtual ~PFRootEventManager();
00197
00198 void initializeEventInformation();
00199
00200 virtual void write();
00201
00203 void reset();
00204
00206 std::string getGenParticleName(int partId,std::string &latexStringName) const;
00207
00208
00211 void readOptions(const char* file,
00212 bool refresh=true,
00213 bool reconnect=false);
00214
00215
00216 virtual void readSpecificOptions(const char* file) {}
00217
00219 void connect(const char* infilename="");
00220
00221 int eventToEntry(int run, int lumi, int event) const;
00222
00224 virtual bool processEvent(int run, int lumi, int event);
00225
00227 virtual bool processEntry(int entry);
00228
00230 bool readFromSimulation(int entry);
00231
00233 bool isHadronicTau() const;
00234
00238 bool countChargedAndPhotons() const;
00239
00243 int chargeValue(const int& pdgId) const;
00244
00245
00247 void PreprocessRecTracks( reco::PFRecTrackCollection& rectracks);
00248 void PreprocessRecTracks( reco::GsfPFRecTrackCollection& rectracks);
00249
00251 void PreprocessRecHits( reco::PFRecHitCollection& rechits,
00252 bool findNeighbours);
00253
00257 void setRecHitNeigbours( reco::PFRecHit& rh,
00258 const std::map<unsigned, unsigned>& detId2index );
00259
00261
00262
00264 void clustering();
00265
00267 void particleFlow();
00268
00270 void pfCandCompare(int);
00271
00273 void reconstructGenJets();
00274
00276 void reconstructCaloJets();
00277
00279 void reconstructPFJets();
00280
00282 void reconstructFWLiteJets(const reco::CandidatePtrVector& Candidates,
00283 std::vector<ProtoJet>& output);
00284
00285 void mcTruthMatching( std::ostream& out,
00286 const reco::PFCandidateCollection& candidates,
00287 std::vector< std::list <simMatch> >& candSimMatchTrack,
00288 std::vector< std::list <simMatch> >& candSimMatchEcal) const;
00289
00293 double tauBenchmark( const reco::PFCandidateCollection& candidates);
00294
00295
00297 void fillOutEventWithClusters(const reco::PFClusterCollection& clusters);
00298
00300 void fillOutEventWithPFCandidates(const reco::PFCandidateCollection& pfCandidates );
00301
00303 void fillOutEventWithSimParticles(const reco::PFSimParticleCollection& ptcs);
00304
00306 void fillOutEventWithCaloTowers(const CaloTowerCollection& cts);
00307
00309 void fillOutEventWithBlocks(const reco::PFBlockCollection& blocks);
00310
00311
00312
00314 void print( std::ostream& out = std::cout,
00315 int maxNLines = -1 ) const;
00316
00318 void printMCCalib( std::ofstream& out ) const;
00319
00320
00322 TTree* tree() {return tree_;}
00323
00324
00325
00326
00327 std::string expand(const std::string& oldString) const;
00328
00330 void printRecHits(const reco::PFRecHitCollection& rechits,
00331 const PFClusterAlgo& clusterAlgo,
00332 std::ostream& out = std::cout) const;
00333
00334 void printRecHit(const reco::PFRecHit& rh, unsigned index,
00335 const char* seed=" ",
00336 std::ostream& out = std::cout) const;
00337
00339 void printClusters(const reco::PFClusterCollection& clusters,
00340 std::ostream& out = std::cout) const;
00341
00342 void printCluster(const reco::PFCluster& cluster,
00343 std::ostream& out = std::cout) const;
00344
00345
00347 void printGenParticles(std::ostream& out = std::cout,
00348 int maxNLines = -1) const;
00349
00350
00351
00352
00353
00355 bool trackInsideGCut( const reco::PFTrack& track ) const;
00356
00358 void fillRecHitMask( std::vector<bool>& mask,
00359 const reco::PFRecHitCollection& rechits ) const;
00360
00362 void fillClusterMask( std::vector<bool>& mask,
00363 const reco::PFClusterCollection& clusters ) const;
00364
00366 void fillTrackMask( std::vector<bool>& mask,
00367 const reco::PFRecTrackCollection& tracks ) const;
00368 void fillTrackMask( std::vector<bool>& mask,
00369 const reco::GsfPFRecTrackCollection& tracks ) const;
00370
00372 const reco::PFSimParticle&
00373 closestParticle( reco::PFTrajectoryPoint::LayerType layer,
00374 double eta, double phi,
00375 double& peta, double& pphi, double& pe) const;
00376
00377
00378 const reco::PFBlockCollection& blocks() const { return *pfBlocks_; }
00379
00380
00381 int eventNumber() {return iEvent_;}
00382
00383
00384
00385
00386 void readCMSSWJets();
00387
00389 bool eventAccepted() const;
00390
00392 bool highPtJet( double ptMin ) const;
00393
00395 bool highPtPFCandidate( double ptMin,
00396 reco::PFCandidate::ParticleType type = reco::PFCandidate::X) const;
00397
00399 edm::InputTag stringToTag(const std::vector< std::string >& tagname);
00400
00401
00403 int iEvent_;
00404
00406 IO* options_;
00407
00409 fwlite::ChainEvent* ev_;
00410
00412 TTree* tree_;
00413
00415 TTree* outTree_;
00416
00419 EventColin* outEvent_;
00420
00422 TH1F* h_deltaETvisible_MCEHT_;
00423
00425 TH1F* h_deltaETvisible_MCPF_;
00426
00427
00428
00429
00430
00431 TBranch* eventAuxiliaryBranch_;
00432
00434 edm::EventAuxiliary* eventAuxiliary_;
00435
00437 edm::Handle<reco::PFRecHitCollection> rechitsECALHandle_;
00438 edm::InputTag rechitsECALTag_;
00439 reco::PFRecHitCollection rechitsECAL_;
00440
00442 edm::Handle<reco::PFRecHitCollection> rechitsHCALHandle_;
00443 edm::InputTag rechitsHCALTag_;
00444 reco::PFRecHitCollection rechitsHCAL_;
00445
00447 edm::Handle<reco::PFRecHitCollection> rechitsHFEMHandle_;
00448 edm::InputTag rechitsHFEMTag_;
00449 reco::PFRecHitCollection rechitsHFEM_;
00450
00452 edm::Handle<reco::PFRecHitCollection> rechitsHFHADHandle_;
00453 edm::InputTag rechitsHFHADTag_;
00454 reco::PFRecHitCollection rechitsHFHAD_;
00455
00457 std::vector< reco::PFRecHitCollection > rechitsCLEANEDV_;
00458 std::vector< edm::Handle<reco::PFRecHitCollection> > rechitsCLEANEDHandles_;
00459 std::vector< edm::InputTag > rechitsCLEANEDTags_;
00460 reco::PFRecHitCollection rechitsCLEANED_;
00461
00463 edm::Handle<reco::PFRecHitCollection> rechitsPSHandle_;
00464 edm::InputTag rechitsPSTag_;
00465 reco::PFRecHitCollection rechitsPS_;
00466
00468 edm::Handle<reco::PFClusterCollection> clustersECALHandle_;
00469 edm::InputTag clustersECALTag_;
00470 std::auto_ptr< reco::PFClusterCollection > clustersECAL_;
00471
00473 edm::Handle<reco::PFClusterCollection> clustersHCALHandle_;
00474 edm::InputTag clustersHCALTag_;
00475 std::auto_ptr< reco::PFClusterCollection > clustersHCAL_;
00476
00478 edm::Handle<reco::PFClusterCollection> clustersHFEMHandle_;
00479 edm::InputTag clustersHFEMTag_;
00480 std::auto_ptr< reco::PFClusterCollection > clustersHFEM_;
00481
00483 edm::Handle<reco::PFClusterCollection> clustersHFHADHandle_;
00484 edm::InputTag clustersHFHADTag_;
00485 std::auto_ptr< reco::PFClusterCollection > clustersHFHAD_;
00486
00488 edm::Handle<reco::PFClusterCollection> clustersPSHandle_;
00489 edm::InputTag clustersPSTag_;
00490 std::auto_ptr< reco::PFClusterCollection > clustersPS_;
00491
00493 edm::Handle<CaloTowerCollection> caloTowersHandle_;
00494 edm::InputTag caloTowersTag_;
00495 CaloTowerCollection caloTowers_;
00496
00500 reco::CandidatePtrVector caloTowersPtrs_;
00501
00502
00504 edm::Handle<reco::VertexCollection> primaryVerticesHandle_;
00505 edm::InputTag primaryVerticesTag_;
00506 reco::VertexCollection primaryVertices_;
00507
00509 edm::Handle<reco::PFRecTrackCollection> recTracksHandle_;
00510 edm::Handle<reco::PFRecTrackCollection> displacedRecTracksHandle_;
00511 edm::InputTag recTracksTag_;
00512 edm::InputTag displacedRecTracksTag_;
00513 reco::PFRecTrackCollection recTracks_;
00514 reco::PFRecTrackCollection displacedRecTracks_;
00515
00517 edm::Handle<reco::GsfPFRecTrackCollection> gsfrecTracksHandle_;
00518 edm::InputTag gsfrecTracksTag_;
00519 reco::GsfPFRecTrackCollection gsfrecTracks_;
00520
00522 edm::Handle<reco::GsfPFRecTrackCollection> convBremGsfrecTracksHandle_;
00523 edm::InputTag convBremGsfrecTracksTag_;
00524 reco::GsfPFRecTrackCollection convBremGsfrecTracks_;
00525
00527 edm::Handle<reco::TrackCollection> stdTracksHandle_;
00528 edm::InputTag stdTracksTag_;
00529 reco::TrackCollection stdTracks_;
00530
00532 edm::Handle<reco::MuonCollection> muonsHandle_;
00533 edm::InputTag muonsTag_;
00534 reco::MuonCollection muons_;
00535
00537 edm::Handle<reco::PFConversionCollection> conversionHandle_;
00538 edm::InputTag conversionTag_;
00539 reco::PFConversionCollection conversion_;
00540
00542 edm::Handle<reco::PFV0Collection> v0Handle_;
00543 edm::InputTag v0Tag_;
00544 reco::PFV0Collection v0_;
00545
00547 edm::Handle<reco::PFDisplacedTrackerVertexCollection> pfNuclearTrackerVertexHandle_;
00548 edm::InputTag pfNuclearTrackerVertexTag_;
00549 reco::PFDisplacedTrackerVertexCollection pfNuclearTrackerVertex_;
00550
00552 edm::Handle<reco::PFSimParticleCollection> trueParticlesHandle_;
00553 edm::InputTag trueParticlesTag_;
00554 reco::PFSimParticleCollection trueParticles_;
00555
00557 edm::Handle<edm::HepMCProduct> MCTruthHandle_;
00558 edm::InputTag MCTruthTag_;
00559 edm::HepMCProduct MCTruth_;
00560
00562 edm::Handle<reco::GenParticleRefVector> genParticlesforJetsHandle_;
00563 edm::InputTag genParticlesforJetsTag_;
00564 reco::GenParticleRefVector genParticlesforJets_;
00565
00567 reco::GenJetCollection genJets_;
00568
00570 edm::Handle<reco::GenParticleCollection> genParticlesforMETHandle_;
00571 edm::InputTag genParticlesforMETTag_;
00572 reco::GenParticleCollection genParticlesCMSSW_;
00573
00577 reco::CandidatePtrVector genParticlesforJetsPtrs_;
00578
00580 std::auto_ptr< reco::PFBlockCollection > pfBlocks_;
00581
00583 std::auto_ptr< reco::PFCandidateCollection > pfCandidates_;
00584
00589 reco::CandidatePtrVector pfCandidatesPtrs_;
00590
00592 reco::PFJetCollection pfJets_;
00593
00595 std::vector<ProtoJet> caloJets_;
00596
00598 edm::Handle<reco::PFJetCollection> pfJetsHandle_;
00599 edm::InputTag pfJetsTag_;
00600 reco::PFJetCollection pfJetsCMSSW_;
00601
00603 edm::Handle<reco::GenJetCollection> genJetsHandle_;
00604 edm::InputTag genJetsTag_;
00605 reco::GenJetCollection genJetsCMSSW_;
00606
00608 edm::Handle< std::vector<reco::CaloJet> >caloJetsHandle_;
00609 edm::InputTag caloJetsTag_;
00610 std::vector<reco::CaloJet> caloJetsCMSSW_;
00611
00613 edm::Handle< std::vector<reco::CaloJet> > corrcaloJetsHandle_;
00614 edm::InputTag corrcaloJetsTag_;
00615 std::vector<reco::CaloJet> corrcaloJetsCMSSW_;
00616
00618 reco::PFMETCollection pfMets_;
00619
00621 reco::CaloMETCollection caloMets_;
00622
00624 reco::METCollection tcMets_;
00625
00627 edm::Handle<reco::CaloMETCollection> caloMetsHandle_;
00628 edm::InputTag caloMetsTag_;
00629 reco::CaloMETCollection caloMetsCMSSW_;
00630
00632 edm::Handle<reco::METCollection> tcMetsHandle_;
00633 edm::InputTag tcMetsTag_;
00634 reco::METCollection tcMetsCMSSW_;
00635
00637 edm::Handle<reco::PFMETCollection> pfMetsHandle_;
00638 edm::InputTag pfMetsTag_;
00639 reco::PFMETCollection pfMetsCMSSW_;
00640
00642 edm::Handle<reco::PFCandidateCollection> pfCandidateHandle_;
00643 edm::InputTag pfCandidateTag_;
00644 reco::PFCandidateCollection pfCandCMSSW_;
00645
00647 TFile* file_;
00648
00650 std::vector<std::string> inFileNames_;
00651
00653 TFile* outFile_;
00654
00656 std::string outFileName_;
00657
00658
00659
00662 PFClusterAlgo clusterAlgoECAL_;
00663
00665 PFClusterAlgo clusterAlgoHCAL_;
00666
00668 PFClusterAlgo clusterAlgoHFEM_;
00669
00671 PFClusterAlgo clusterAlgoHFHAD_;
00672
00674 PFClusterAlgo clusterAlgoPS_;
00675
00676
00678 PFBlockAlgo pfBlockAlgo_;
00679
00681 PFAlgo pfAlgo_;
00682
00683
00684
00686 PFJetBenchmark PFJetBenchmark_;
00687
00689 double MET1cut;
00690 double DeltaMETcut;
00691 double DeltaPhicut;
00692
00693 PFCandidateManager pfCandidateManager_;
00694 bool doPFCandidateBenchmark_;
00695
00698 PFJetAlgorithm jetAlgo_;
00699
00701 FWLiteJetProducer jetMaker_;
00702
00703
00704
00705
00707 bool printRecHits_;
00708 double printRecHitsEMin_;
00709
00711 bool printClusters_;
00712 double printClustersEMin_;
00713
00715 bool printPFBlocks_;
00716
00718 bool printPFCandidates_;
00719 double printPFCandidatesPtMin_;
00720
00722 bool printPFJets_;
00723 double printPFJetsPtMin_;
00724
00726 bool printSimParticles_;
00727 double printSimParticlesPtMin_;
00728
00730 bool printGenParticles_;
00731 double printGenParticlesPtMin_;
00732
00733
00734 bool printMCTruthMatching_;
00735
00737 int verbosity_;
00738
00739
00740
00741 unsigned filterNParticles_;
00742
00743 bool filterHadronicTaus_;
00744
00745 std::vector<int> filterTaus_;
00746
00747
00748
00751 bool doClustering_;
00752
00754 bool doParticleFlow_;
00755
00757 bool doCompare_;
00758
00760 bool doJets_;
00761
00763 bool doMet_;
00764
00766 bool JECinCaloMet_;
00767
00769 int jetAlgoType_;
00770
00772 bool doTauBenchmark_;
00773
00775 bool tauBenchmarkDebug_;
00776
00778 bool doPFJetBenchmark_;
00779
00781 bool doPFMETBenchmark_;
00782
00784 bool debug_;
00785
00787 bool findRecHitNeighbours_;
00788
00789
00791 bool jetsDebug_;
00792
00793
00795 bool fastsim_;
00796
00798 bool usePFConversions_;
00799
00801 bool usePFV0s_;
00802
00804 bool usePFNuclearInteractions_;
00805
00807 bool useConvBremGsfTracks_;
00808
00810 bool useConvBremPFRecTracks_;
00811
00813 bool useAtHLT;
00814
00815
00816
00820
00821
00822
00823 boost::shared_ptr<pftools::PFClusterCalibration> clusterCalibration_;
00824 boost::shared_ptr<PFEnergyCalibration> calibration_;
00825 boost::shared_ptr<PFEnergyCalibrationHF> thepfEnergyCalibrationHF_;
00826
00827 std::ofstream* calibFile_;
00828
00829 std::auto_ptr<METManager> metManager_;
00830
00831 typedef std::map<int, int> EventToEntry;
00832 typedef std::map<int, EventToEntry> LumisMap;
00833 typedef std::map<int, LumisMap> RunsMap;
00834 RunsMap mapEventToEntry_;
00835 };
00836 #endif