Difference between revisions of "Analysis JEventProcessor"
From GlueXWiki
(→DEventProcessor_b1pi_hists.cc) |
(→Summary) |
||
Line 3: | Line 3: | ||
* The <span style="color:#0000FF">DEventProcessor</span> can be minimal in content. | * The <span style="color:#0000FF">DEventProcessor</span> can be minimal in content. | ||
* The code below analyzes the b1pi <span style="color:#0000FF">DReaction</span>, fills reaction-independent histograms, outputs the surviving <span style="color:#0000FF">DParticleCombo</span>'s to a <span style="color:#0000FF">TTree</span>, and skims successful events into a new hddm file. | * The code below analyzes the b1pi <span style="color:#0000FF">DReaction</span>, fills reaction-independent histograms, outputs the surviving <span style="color:#0000FF">DParticleCombo</span>'s to a <span style="color:#0000FF">TTree</span>, and skims successful events into a new hddm file. | ||
− | * | + | * The [https://halldsvn.jlab.org/repos/trunk/scripts/analysis/MakeReactionPlugin.pl MakeReactionPlugin.pl] perl script can be used to create template code for a new plugin. |
== DEventProcessor_b1pi_hists.h == | == DEventProcessor_b1pi_hists.h == |
Revision as of 11:14, 31 July 2013
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.
- The MakeReactionPlugin.pl perl script can be used to create template code for a new plugin.
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/
#include "DEventProcessor_b1pi_hists.h" // The executable should define the ROOTfile global variable. It will // be automatically linked when dlopen is called. extern TFile *ROOTfile; // 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) { //Create Trees const DEventWriterROOT* locEventWriterROOT = NULL; locEventLoop->GetSingle(locEventWriterROOT); locEventWriterROOT->Create_DataTrees(locEventLoop); locEventWriterROOT->Create_ThrownTree("tree_b1pi_thrownmc.root"); //Initialize Actions dHistogramAction_TrackMultiplicity.Initialize(locEventLoop); dHistogramAction_ThrownParticleKinematics.Initialize(locEventLoop); dHistogramAction_DetectedParticleKinematics.Initialize(locEventLoop); dHistogramAction_GenReconTrackComparison.Initialize(locEventLoop); 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); //Triggers the analysis (is also automatically called by DEventWriterROOT::Fill_Trees()) vector<const DAnalysisResults*> locAnalysisResultsVector; locEventLoop->Get(locAnalysisResultsVector); //Output TTree const DEventWriterROOT* locEventWriterROOT = NULL; locEventLoop->GetSingle(locEventWriterROOT); locEventWriterROOT->Fill_DataTrees(locEventLoop, "b1pi_hists"); locEventWriterROOT->Fill_ThrownTree(locEventLoop); //Do Miscellaneous Cuts (if any) 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; //place cuts here locSaveEventFlag = true; break; } //Output REST File 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; }