|
|
(8 intermediate revisions by the same user not shown) |
Line 1: |
Line 1: |
− | == Summary ==
| |
| | | |
− | * 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, and skims successful events into a new hddm file.
| |
− | * Code and documentation for the setting up the b1pi <span style="color:#0000FF">DReaction</span> can be found at: [[Analysis_DReaction | DReaction]]
| |
− | * Although not shown below, you can also create and fill a ROOT TTree with the <span style="color:#0000FF">DParticleCombo</span> data instead of skimming.
| |
− |
| |
− | == DEventProcessor_b1pi_hists.h ==
| |
− | * This is from sim-recon/src/programs/Analysis/plugins/b1pi_hists/
| |
− | <syntaxhighlight>
| |
− | #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_DReaction.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_
| |
− | </syntaxhighlight>
| |
− |
| |
− | == DEventProcessor_b1pi_hists.cc ==
| |
− | * This is from sim-recon/src/programs/Analysis/plugins/b1pi_hists/
| |
− | * Note the <span style="color:#008000">AddFactoryGenerator</span>() line in <span style="color:#008000">InitPlugin</span>().
| |
− | <syntaxhighlight>
| |
− | #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_DReaction());
| |
− | }
| |
− | } // "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, this creates the DParticleCombo objects and performs the DAnalysisActions stored in the DReaction
| |
− | vector<const DAnalysisResults*> locAnalysisResultsVector;
| |
− | locEventLoop->Get(locAnalysisResultsVector);
| |
− |
| |
− | //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;
| |
− | }
| |
− | </syntaxhighlight>
| |