Analysis JEventProcessor
From GlueXWiki
Summary
- The DEventProcessor can be minimal in content.
- The code below analyzes the b1pi DReaction, fills reaction-independent histograms, outputs the surviving DParticleCombo's to a TTree, and skims successful events into a new hddm file.
- Code and documentation for the setting up the b1pi DReaction can be found at: DReaction
DEventProcessor_b1pi_hists.h
- This is from sim-recon/src/programs/Analysis/plugins/b1pi_hists/
#ifndef _DEventProcessor_b1pi_hists_ #define _DEventProcessor_b1pi_hists_ #include "TFile.h" #include "TROOT.h" #include "JANA/JEventProcessor.h" #include "DANA/DApplication.h" #include "ANALYSIS/DAnalysisResults.h" #include "HDDM/DEventWriterREST.h" #include "DFactoryGenerator_b1pi_hists.h" using namespace jana; class DEventProcessor_b1pi_hists : public JEventProcessor { public: DEventProcessor_b1pi_hists(){}; ~DEventProcessor_b1pi_hists(){}; const char* className(void){return "DEventProcessor_b1pi_hists";} private: jerror_t init(void); ///< Called once at program start. jerror_t brun(JEventLoop *eventLoop, int runnumber); ///< Called everytime a new run number is detected. jerror_t evnt(JEventLoop *eventLoop, int eventnumber); ///< Called every event. jerror_t erun(void); ///< Called everytime run number changes, provided brun has been called. jerror_t fini(void); ///< Called after last event of last event source has been processed. // Create reaction-independent actions. DHistogramAction_TrackMultiplicity dHistogramAction_TrackMultiplicity; DHistogramAction_ThrownParticleKinematics dHistogramAction_ThrownParticleKinematics; DHistogramAction_DetectedParticleKinematics dHistogramAction_DetectedParticleKinematics; DHistogramAction_GenReconTrackComparison dHistogramAction_GenReconTrackComparison; }; #endif // _DEventProcessor_b1pi_hists_
DEventProcessor_b1pi_hists.cc
- This is from sim-recon/src/programs/Analysis/plugins/b1pi_hists/
- Note the AddFactoryGenerator() line in InitPlugin().
#include "DEventProcessor_b1pi_hists.h" // Routine used to create our DEventProcessor extern "C" { void InitPlugin(JApplication *app) { InitJANAPlugin(app); app->AddProcessor(new DEventProcessor_b1pi_hists()); app->AddFactoryGenerator(new DFactoryGenerator_b1pi_hists()); } } // "C" //------------------ // init //------------------ jerror_t DEventProcessor_b1pi_hists::init(void) { return NOERROR; } //------------------ // brun //------------------ jerror_t DEventProcessor_b1pi_hists::brun(JEventLoop *locEventLoop, int runnumber) { return NOERROR; } //------------------ // evnt //------------------ jerror_t DEventProcessor_b1pi_hists::evnt(JEventLoop *locEventLoop, int eventnumber) { //Fill reaction-independent histograms. dHistogramAction_TrackMultiplicity(locEventLoop); dHistogramAction_ThrownParticleKinematics(locEventLoop); dHistogramAction_DetectedParticleKinematics(locEventLoop); dHistogramAction_GenReconTrackComparison(locEventLoop); //Perform the analysis for this event by requesting the results. //For each DReaction in this plugin, this creates the DParticleCombo objects and performs the DAnalysisActions stored in the DReaction vector<const DAnalysisResults*> locAnalysisResultsVector; locEventLoop->Get(locAnalysisResultsVector); //Output TTree //saves the data from the surviving DParticleCombo's of all output-enabled DReaction's in this plugin to their respective TTree's vector<const DEventWriterROOT*> locEventWriterROOTVector; locEventLoop->Get(locEventWriterROOTVector); locEventWriterROOTVector[0]->Fill_Trees(locEventLoop); //Mark that the event should be saved if at least one DParticleCombo survived all of the cuts bool locSaveEventFlag = false; for(size_t loc_i = 0; loc_i < locAnalysisResultsVector.size(); ++loc_i) { const DAnalysisResults* locAnalysisResults = locAnalysisResultsVector[loc_i]; if(locAnalysisResults->Get_Reaction()->Get_ReactionName() != "b1pi") continue; if(locAnalysisResults->Get_NumPassedParticleCombos() == 0) continue; locSaveEventFlag = true; break; } //Save the event to dana_rest_b1pi.hddm if(locSaveEventFlag) { vector<const DEventWriterREST*> locEventWriterRESTVector; locEventLoop->Get(locEventWriterRESTVector); locEventWriterRESTVector[0]->Write_RESTEvent(locEventLoop, "b1pi"); } return NOERROR; } //------------------ // erun //------------------ jerror_t DEventProcessor_b1pi_hists::erun(void) { // Any final calculations on histograms (like dividing them) // should be done here. This may get called more than once. return NOERROR; } //------------------ // fini //------------------ jerror_t DEventProcessor_b1pi_hists::fini(void) { return NOERROR; }