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 TrackCategoriesAnalyzer : public edm::EDAnalyzer
00025 {
00026 public:
00027
00028 explicit TrackCategoriesAnalyzer(const edm::ParameterSet&);
00029 ~TrackCategoriesAnalyzer();
00030
00031 private:
00032
00033 virtual void analyze(const edm::Event&, const edm::EventSetup&);
00034
00035
00036
00037 edm::InputTag trackProducer_;
00038
00039 std::size_t totalTracks_;
00040
00041 TrackClassifier classifier_;
00042
00043 TH1F * trackCategories_;
00044
00045 Int_t numberTrackCategories_;
00046 };
00047
00048
00049 TrackCategoriesAnalyzer::TrackCategoriesAnalyzer(const edm::ParameterSet& config) : classifier_(config)
00050 {
00051
00052 trackProducer_ = config.getUntrackedParameter<edm::InputTag> ( "trackProducer" );
00053
00054
00055 edm::Service<TFileService> fs;
00056
00057
00058 TFileDirectory directory = fs->mkdir( "TrackCategoriesAnalyzer" );
00059
00060
00061 numberTrackCategories_ = TrackCategories::Unknown+1;
00062
00063
00064 trackCategories_ = fs->make<TH1F>(
00065 "Frequency",
00066 "Frequency for the different track categories",
00067 numberTrackCategories_,
00068 -0.5,
00069 numberTrackCategories_ - 0.5
00070 );
00071
00072
00073 for (Int_t i = 0; i < numberTrackCategories_; ++i)
00074 trackCategories_->GetXaxis()->SetBinLabel(i+1, TrackCategories::Names[i]);
00075 }
00076
00077
00078 TrackCategoriesAnalyzer::~TrackCategoriesAnalyzer() { }
00079
00080
00081 void TrackCategoriesAnalyzer::analyze(const edm::Event& event, const edm::EventSetup& setup)
00082 {
00083
00084 edm::Handle<edm::View<reco::Track> > trackCollection;
00085 event.getByLabel(trackProducer_, trackCollection);
00086
00087
00088 classifier_.newEvent(event, setup);
00089
00090
00091 for (std::size_t index = 0; index < trackCollection->size(); index++)
00092 {
00093 edm::RefToBase<reco::Track> track(trackCollection, index);
00094
00095
00096 classifier_.evaluate(track);
00097
00098
00099 for (Int_t i = 0; i != numberTrackCategories_; ++i)
00100 if (
00101 classifier_.is( (TrackCategories::Category) i )
00102 )
00103 trackCategories_->Fill(i);
00104 }
00105 }
00106
00107
00108 DEFINE_FWK_MODULE(TrackCategoriesAnalyzer);
00109