// $Id$ // // File: DReaction_factory.cc // Created: Thu Feb 28 17:02:04 EST 2013 // Creator: davidl (on Darwin harriet.jlab.org 11.4.2 i386) // #include #include using namespace std; #include #include #include #include #include "DReaction_factory.h" #include "JFactoryGenerator_DReaction.h" #include "JEventProcessor_cpp_analysis.h" using namespace jana; // Routine used to create our JEventProcessor #include extern "C"{ void InitPlugin(JApplication *app){ InitJANAPlugin(app); app->AddFactoryGenerator(new JFactoryGenerator_DReaction()); app->AddProcessor(new JEventProcessor_cpp_analysis()); } } // "C" //------------------ // init //------------------ jerror_t DReaction_factory::init(void) { // Setting the PERSISTANT prevents JANA from deleting the // objects every event so we only create them once. SetFactoryFlag(PERSISTANT); // Make as many DReaction objects as desired DReactionStep* locReactionStep; /***************************** pi+pi- ****************************************/ DReaction* locReaction = new DReaction("pi+pi-"); //unique name //g, Pb -> p pi+ pi- locReactionStep = new DReactionStep(); locReactionStep->Set_InitialParticleID(Gamma); locReactionStep->Set_TargetParticleID(Pb208); locReactionStep->Add_FinalParticleID(PiPlus); // pi+ locReactionStep->Add_FinalParticleID(PiMinus); // pi- locReactionStep->Add_FinalParticleID(Pb208, true); //target nucleus missing locReaction->Add_ReactionStep(locReactionStep); dReactionStepPool.push_back(locReactionStep); //prevent memory leak /***************************** pi+pi- Control Variables ****************************************/ // Type of kinematic fit to perform: locReaction->Set_KinFitType(d_P4AndVertexFit); //defined in DKinFitResults.h // Comboing cuts: used to cut out potential particle combinations that are "obviously" invalid // e.g. contains garbage tracks, PIDs way off // These cut values are overriden if specified on the command line locReaction->Set_MinCombinedChargedPIDFOM(0.001); locReaction->Set_MinCombinedTrackingFOM(0.001); /***************************** pi+pi- Actions ****************************************/ //Extremely Loose Mass Cuts //locReaction->Add_AnalysisAction(new DCutAction_MissingMass(locReaction, false, 0.1, 1.6, "Pb208_Loose")); //false: measured data //PID locReaction->Add_AnalysisAction(new DHistogramAction_ParticleComboKinematics(locReaction, false)); //false: measured data locReaction->Add_AnalysisAction(new DHistogramAction_PID(locReaction)); //locReaction->Add_AnalysisAction(new DCutAction_AllPIDFOM(locReaction, 0.01)); //1% locReaction->Add_AnalysisAction(new DCutAction_AllPIDFOM(locReaction, 0.00)); //1% locReaction->Add_AnalysisAction(new DHistogramAction_TruePID(locReaction, "PostPID")); //Initial Mass Distributions locReaction->Add_AnalysisAction(new DHistogramAction_MissingMass(locReaction, false, 650, 0.3, 1.6, "PostPID")); //false: measured data //Kinematic Fit Results and Confidence Level Cut locReaction->Add_AnalysisAction(new DHistogramAction_KinFitResults(locReaction, 0.05)); //5% confidence level cut on pull histograms only locReaction->Add_AnalysisAction(new DCutAction_KinFitFOM(locReaction, 0.01)); //1% //Constrained Mass Distributions locReaction->Add_AnalysisAction(new DHistogramAction_MissingMass(locReaction, false, 650, 0.3, 1.6, "PostKinFitConLev")); //false: measured data //Final Track Kinematics & PID Check locReaction->Add_AnalysisAction(new DHistogramAction_TrackVertexComparison(locReaction, "Final")); locReaction->Add_AnalysisAction(new DHistogramAction_ParticleComboKinematics(locReaction, true, "Final")); //true: kinfit data locReaction->Add_AnalysisAction(new DHistogramAction_TruePID(locReaction, "Final")); _data.push_back(locReaction); //Register the DReaction return NOERROR; } //------------------ // brun //------------------ jerror_t DReaction_factory::brun(jana::JEventLoop *eventLoop, int runnumber) { return NOERROR; } //------------------ // evnt //------------------ jerror_t DReaction_factory::evnt(JEventLoop *loop, int eventnumber) { // Code to generate factory data goes here. Add it like: // // DReaction *myDReaction = new DReaction; // myDReaction->x = x; // myDReaction->y = y; // ... // _data.push_back(myDReaction); // // Note that the objects you create here will be deleted later // by the system and the _data vector will be cleared automatically. return NOERROR; } //------------------ // erun //------------------ jerror_t DReaction_factory::erun(void) { return NOERROR; } //------------------ // fini //------------------ jerror_t DReaction_factory::fini(void) { for(size_t loc_i = 0; loc_i < dReactionStepPool.size(); ++loc_i) delete dReactionStepPool[loc_i]; return NOERROR; }