Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008 #include "TH1F.h"
00009
00010 #include "FWCore/Framework/interface/Frameworkfwd.h"
00011 #include "FWCore/Framework/interface/EDAnalyzer.h"
00012 #include "FWCore/Framework/interface/MakerMacros.h"
00013 #include "FWCore/ParameterSet/interface/ParameterSet.h"
00014 #include "FWCore/ServiceRegistry/interface/Service.h"
00015
00016 #include "CommonTools/UtilAlgos/interface/TFileService.h"
00017
00018 #include "SimTracker/TrackHistory/interface/TrackClassifier.h"
00019
00020
00021
00022
00023
00024 class TrackingParticleCategoriesAnalyzer : public edm::EDAnalyzer
00025 {
00026 public:
00027
00028 explicit TrackingParticleCategoriesAnalyzer(const edm::ParameterSet&);
00029 ~TrackingParticleCategoriesAnalyzer();
00030
00031 private:
00032
00033 virtual void analyze(const edm::Event&, const edm::EventSetup&);
00034
00035
00036
00037 edm::InputTag trackingTruth_;
00038
00039 std::size_t totalTrakingParticles_;
00040
00041 TrackClassifier classifier_;
00042
00043 TH1F * trackingParticleCategories_;
00044
00045 Int_t numberTrackingParticleCategories_;
00046 };
00047
00048
00049 TrackingParticleCategoriesAnalyzer::TrackingParticleCategoriesAnalyzer(const edm::ParameterSet& config) : classifier_(config)
00050 {
00051
00052 trackingTruth_ = config.getUntrackedParameter<edm::InputTag> ( "trackingTruth" );
00053
00054
00055 edm::Service<TFileService> fs;
00056
00057
00058 TFileDirectory directory = fs->mkdir( "TrackingParticleCategoriesAnalyzer" );
00059
00060
00061 numberTrackingParticleCategories_ = TrackCategories::Unknown+1;
00062
00063
00064 trackingParticleCategories_ = fs->make<TH1F>(
00065 "Frequency",
00066 "Frequency for the different track categories",
00067 numberTrackingParticleCategories_,
00068 -0.5,
00069 numberTrackingParticleCategories_ - 0.5
00070 );
00071
00072
00073 for (Int_t i = 0; i < numberTrackingParticleCategories_; ++i)
00074 trackingParticleCategories_->GetXaxis()->SetBinLabel(i+1, TrackCategories::Names[i]);
00075 }
00076
00077
00078 TrackingParticleCategoriesAnalyzer::~TrackingParticleCategoriesAnalyzer() { }
00079
00080
00081 void TrackingParticleCategoriesAnalyzer::analyze(const edm::Event& event, const edm::EventSetup& setup)
00082 {
00083
00084 edm::Handle<TrackingParticleCollection> TPCollection;
00085 event.getByLabel(trackingTruth_, TPCollection);
00086
00087
00088 classifier_.newEvent(event, setup);
00089
00090
00091 for (std::size_t index = 0; index < TPCollection->size(); index++)
00092 {
00093 TrackingParticleRef trackingParticle(TPCollection, index);
00094
00095
00096 classifier_.evaluate(trackingParticle);
00097
00098
00099 for (Int_t i = 0; i != numberTrackingParticleCategories_; ++i)
00100 if (
00101 classifier_.is( (TrackCategories::Category) i )
00102 )
00103 trackingParticleCategories_->Fill(i);
00104 }
00105 }
00106
00107
00108 DEFINE_FWK_MODULE(TrackingParticleCategoriesAnalyzer);