Difference between revisions of "Analysis JEventProcessor"

From GlueXWiki
Jump to: navigation, search
(Summary)
(Blanked the page)
 
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, 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 ==
 
* 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_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_
 
</syntaxhighlight>
 
 
== DEventProcessor_b1pi_hists.cc ==
 
* This is from sim-recon/src/programs/Analysis/plugins/b1pi_hists/
 
<syntaxhighlight>
 
#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;
 
}
 
</syntaxhighlight>
 

Latest revision as of 08:06, 3 November 2017