CMS 3D CMS Logo

/data/doxygen/doxygen-1.7.3/gen/CMSSW_4_2_8/src/SimTracker/TrackHistory/plugins/TrackingParticleCategoriesAnalyser.cc

Go to the documentation of this file.
00001 /*
00002  *  TrackingParticleCategoriesAnalyzer.C
00003  *
00004  *  Created by Victor Eduardo Bazterra on 06/17/08.
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 // class decleration
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     // Member data
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     // Get the track collection
00052     trackingTruth_ = config.getUntrackedParameter<edm::InputTag> ( "trackingTruth" );
00053 
00054     // Get the file service
00055     edm::Service<TFileService> fs;
00056 
00057     // Create a sub directory associated to the analyzer
00058     TFileDirectory directory = fs->mkdir( "TrackingParticleCategoriesAnalyzer" );
00059 
00060     // Number of track categories
00061     numberTrackingParticleCategories_ = TrackCategories::Unknown+1;
00062 
00063     // Define a new histograms
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     // Set the proper categories names
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     // Track collection
00084     edm::Handle<TrackingParticleCollection> TPCollection;
00085     event.getByLabel(trackingTruth_, TPCollection);
00086 
00087     // Set the classifier for a new event
00088     classifier_.newEvent(event, setup);
00089 
00090     // Loop over the track collection.
00091     for (std::size_t index = 0; index < TPCollection->size(); index++)
00092     {
00093         TrackingParticleRef trackingParticle(TPCollection, index);
00094 
00095         // Classify the tracks
00096         classifier_.evaluate(trackingParticle);
00097 
00098         // Fill the histogram with the categories
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);