// $Id$ // // File: DReaction_factory_omega2pi.cc // Created: Tue May 20 13:06:00 EDT 2014 // Creator: mstaib (on Linux max.phys.cmu.edu 2.6.18-371.3.1.el5 x86_64) // #include "DReaction_factory_omega2pi.h" //------------------ // init //------------------ jerror_t DReaction_factory_omega2pi::init(void) { ROOT_OUTPUT = true; MAKE_BACKGROUND = false; MISSING_PROTON = false; MISSING_PI0 = false; CUTS_BASED = false; if(gPARMS){ gPARMS->SetDefaultParameter("OMEGA2PI:MAKE_BACKGROUND", MAKE_BACKGROUND, "Set to 1 to turn on background generation."); gPARMS->SetDefaultParameter("OMEGA2PI:MISSING_PROTON", MISSING_PROTON, "Set to 1 to set the proton as missing"); gPARMS->SetDefaultParameter("OMEGA2PI:MISSING_PI0", MISSING_PI0, "Set to 1 to set the pi0 as missing"); gPARMS->SetDefaultParameter("OMEGA2PI:CUTS_BASED" ,CUTS_BASED, "Set to 1 to perform the cuts based analysis"); gPARMS->SetDefaultParameter("OMEGA2PI:ROOT_OUTPUT", ROOT_OUTPUT, "Set to 0 to disable ROOT Tree output"); } if(ROOT_OUTPUT){ // Make as many DReaction objects as desired DReactionStep* locReactionStep = NULL; DReaction* locReaction = new DReaction("omega2pi"); //needs to be a unique name for each DReaction object, CANNOT (!) be "Thrown" // DOCUMENTATION: // ANALYSIS library: https://halldweb1.jlab.org/wiki/index.php/GlueX_Analysis_Software // DReaction factory: https://halldweb1.jlab.org/wiki/index.php/Analysis_DReaction //====================================== omega2pi Reaction Steps ****************************************************/ locReactionStep = new DReactionStep(); locReactionStep->Set_InitialParticleID(Gamma); locReactionStep->Set_TargetParticleID(Proton); locReactionStep->Add_FinalParticleID(PiPlus); locReactionStep->Add_FinalParticleID(PiPlus); locReactionStep->Add_FinalParticleID(PiMinus); locReactionStep->Add_FinalParticleID(PiMinus); locReactionStep->Add_FinalParticleID(Pi0, MISSING_PI0); locReactionStep->Add_FinalParticleID(Proton, MISSING_PROTON); //true: proton missing locReaction->Add_ReactionStep(locReactionStep); dReactionStepPool.push_back(locReactionStep); //register so will be deleted later: prevent memory leak /* locReactionStep = new DReactionStep(); locReactionStep->Set_InitialParticleID(omega); locReactionStep->Add_FinalParticleID(PiPlus); locReactionStep->Add_FinalParticleID(PiMinus); locReactionStep->Add_FinalParticleID(Pi0, MISSING_PI0); locReaction->Add_ReactionStep(locReactionStep); dReactionStepPool.push_back(locReactionStep); //register so will be deleted later: prevent memory leak */ if (!MISSING_PI0){ locReactionStep = new DReactionStep(); locReactionStep->Set_InitialParticleID(Pi0); locReactionStep->Add_FinalParticleID(Gamma); locReactionStep->Add_FinalParticleID(Gamma); locReaction->Add_ReactionStep(locReactionStep); dReactionStepPool.push_back(locReactionStep); } /**************************************************** omega2pi Control Variables ****************************************************/ // Recommended: Type of kinematic fit to perform (default is d_NoFit) locReaction->Set_KinFitType(d_P4AndVertexFit); //simultaneously constrain apply four-momentum conservation, invariant masses, and common-vertex constraints // Highly Recommended: When generating particle combinations, reject all tracks with a tracking confidence level < 0.27% (+/- 3-sigma) locReaction-> Set_MinTrackingFOM(0.0027); // Highly Recommended: When generating particle combinations, reject all tracks without a matching hit in a detector system (ST/TOF/BCAL/FCAL) locReaction->Set_HasDetectorMatchFlag(true); // Highly Recommended: When generating particle combinations, reject all neutral particles with a PID confidence level < 5.73303E-7 (+/- 5-sigma) locReaction->Set_MinPhotonPIDFOM(5.73303E-10); // Highly Recommended: When saving thrown/reconstructed matches to ROOT TTree, only save those with match FOM > 5.73303E-7 (+/- 5-sigma) //locReaction->Set_MinThrownMatchFOMForROOT(5.73303E-7); // Recommended: Enable ROOT TTree output for this DReaction locReaction->Enable_TTreeOutput("tree_omega2pi.root"); //string is file name (must end in ".root"!!): doen't need to be unique, feel free to change // PID & Kinematics //locReaction->Add_AnalysisAction(new DCutAction_ThrownTopology(locReaction, true, "ThrownMatching")); locReaction->Add_AnalysisAction(new DCustomAction_MCSelector5pi(locReaction, false, "ThrownMatching")); //locReaction->Add_AnalysisAction(new DHistogramAction_ThrownParticleKinematics(locReaction,"MCThrown Kinematics")); locReaction->Add_AnalysisAction(new DCutAction_AllTruePID(locReaction, 0.0, "TruePID")); if(!MISSING_PROTON && !MISSING_PI0) locReaction->Add_AnalysisAction(new DCutAction_TransverseMomentum(locReaction, 0.4)); //Max Missing Pt of 0.4 GeV locReaction->Add_AnalysisAction(new DCutAction_KinFitFOM(locReaction, 0.0)); //0% confidence level cut //require kinematic fit converges //locReaction->Add_AnalysisAction(new DCutAction_InvariantMass(locReaction, omega , true, 0.55, 0.95, "Omega Invariant mass cut")); // This should kill some of the combinatorics //locReaction->Add_AnalysisAction(new DHistogramAction_ParticleComboGenReconComparison(locReaction, true, "Gen Recon comparison")); //locReaction->Add_AnalysisAction(new DHistogramAction_ParticleComboKinematics(locReaction, true, "Reconstructed Particle Combo KinFit Kinematics")); /* locReaction->Add_AnalysisAction(new DHistogramAction_PID(locReaction)); locReaction->Add_AnalysisAction(new DHistogramAction_TruePID(locReaction)); //momentum distributions of tracks with true/false PID (if thrown data available) // Transverse Momentum //Recommended for no-missing-particle reactions only! locReaction->Add_AnalysisAction(new DCutAction_TransverseMomentum(locReaction, 0.4)); //Max Missing Pt of 0.4 GeV // Kinematic Fit Results locReaction->Add_AnalysisAction(new DHistogramAction_KinFitResults(locReaction, 0.05)); //5% confidence level cut on pull histograms only // Kinematics locReaction->Add_AnalysisAction(new DHistogramAction_ParticleComboKinematics(locReaction, false)); //false: fill histograms with measured particle data locReaction->Add_AnalysisAction(new DHistogramAction_TrackVertexComparison(locReaction)); */ _data.push_back(locReaction); //Register the DReaction with the factory if(MAKE_BACKGROUND){ //=========================================== omega2piBackground Reaction Steps ==================================================/ locReaction = new DReaction("omega2piBackground"); // DOCUMENTATION: // ANALYSIS library: https://halldweb1.jlab.org/wiki/index.php/GlueX_Analysis_Software // DReaction factory: https://halldweb1.jlab.org/wiki/index.php/Analysis_DReaction //============================================== omega2pi Reaction Steps ====================================================/ locReactionStep = new DReactionStep(); locReactionStep->Set_InitialParticleID(Gamma); locReactionStep->Set_TargetParticleID(Proton); locReactionStep->Add_FinalParticleID(PiPlus); locReactionStep->Add_FinalParticleID(PiPlus); locReactionStep->Add_FinalParticleID(PiMinus); locReactionStep->Add_FinalParticleID(PiMinus); locReactionStep->Add_FinalParticleID(Pi0, MISSING_PI0); locReactionStep->Add_FinalParticleID(Proton, MISSING_PROTON); //true: proton missing locReaction->Add_ReactionStep(locReactionStep); dReactionStepPool.push_back(locReactionStep); //register so will be deleted later: prevent memory leak /* locReactionStep = new DReactionStep(); locReactionStep->Set_InitialParticleID(omega); locReactionStep->Add_FinalParticleID(PiPlus); locReactionStep->Add_FinalParticleID(PiMinus); locReactionStep->Add_FinalParticleID(Pi0, MISSING_PI0); locReaction->Add_ReactionStep(locReactionStep); dReactionStepPool.push_back(locReactionStep); //register so will be deleted later: prevent memory leak */ if(!MISSING_PI0){ locReactionStep = new DReactionStep(); locReactionStep->Set_InitialParticleID(Pi0); locReactionStep->Add_FinalParticleID(Gamma); locReactionStep->Add_FinalParticleID(Gamma); locReaction->Add_ReactionStep(locReactionStep); dReactionStepPool.push_back(locReactionStep); } locReaction->Set_KinFitType(d_P4AndVertexFit); //simultaneously constrain apply four-momentum conservation, invariant masses, and common-vertex constraints // Highly Recommended: When generating particle combinations, reject all tracks with a tracking confidence level < 0.27% (+/- 3-sigma) locReaction->Set_MinTrackingFOM(0.0027); // Highly Recommended: When generating particle combinations, reject all tracks without a matching hit in a detector system (ST/TOF/BCAL/FCAL) locReaction->Set_HasDetectorMatchFlag(true); // Highly Recommended: When generating particle combinations, reject all neutral particles with a PID confidence level < 5.73303E-7 (+/- 5-sigma) locReaction->Set_MinPhotonPIDFOM(5.73303E-10); // Highly Recommended: When saving thrown/reconstructed matches to ROOT TTree, only save those with match FOM > 5.73303E-7 (+/- 5-sigma) //locReaction->Set_MinThrownMatchFOMForROOT(5.73303E-7); // Recommended: Enable ROOT TTree output for this DReaction locReaction->Enable_TTreeOutput("tree_omega2pi_background.root"); //string is file name (must end in ".root"!!): doen't need to be unique, feel free to change locReaction->Add_AnalysisAction(new DCustomAction_BackgroundSelector(locReaction, false, "ThrownMatchFailed")); if(!MISSING_PROTON && !MISSING_PI0) locReaction->Add_AnalysisAction(new DCutAction_TransverseMomentum(locReaction, 0.4)); //Max Missing Pt of 0.4 GeV locReaction->Add_AnalysisAction(new DCutAction_KinFitFOM(locReaction, 0.0)); //0% confidence level cut //require kinematic fit converges //locReaction->Add_AnalysisAction(new DCutAction_TransverseMomentum(locReaction, 0.4)); //Max Missing Pt of 0.4 GeV /* // Kinematics locReaction->Add_AnalysisAction(new DHistogramAction_ParticleComboKinematics(locReaction, false)); //false: fill histograms with measured particle data locReaction->Add_AnalysisAction(new DHistogramAction_TrackVertexComparison(locReaction)); // PID & Kinematics locReaction->Add_AnalysisAction(new DHistogramAction_PID(locReaction)); locReaction->Add_AnalysisAction(new DHistogramAction_TruePID(locReaction)); //momentum distributions of tracks with true/false PID (if thrown data available) // Transverse Momentum //Recommended for no-missing-particle reactions only! //locReaction->Add_AnalysisAction(new DCutAction_TransverseMomentum(locReaction, 0.4)); //Max Missing Pt of 0.4 GeV // Kinematic Fit Results 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.0)); //0% confidence level cut //require kinematic fit converges // Kinematics locReaction->Add_AnalysisAction(new DHistogramAction_ParticleComboKinematics(locReaction, false)); //false: fill histograms with measured particle data locReaction->Add_AnalysisAction(new DHistogramAction_TrackVertexComparison(locReaction)); */ _data.push_back(locReaction); //Register the DReaction with the factory } // End Make Background } // End if(ROOT_OUTPUT) if (CUTS_BASED){ /* DReactionStep* locReactionStep = NULL; DReaction* locReaction = new DReaction("omega2pi_cuts_based"); //====================================== omega2pi Reaction Steps ===============================================/ locReactionStep = new DReactionStep(); locReactionStep->Set_InitialParticleID(Gamma); locReactionStep->Set_TargetParticleID(Proton); locReactionStep->Add_FinalParticleID(PiPlus); locReactionStep->Add_FinalParticleID(PiPlus); locReactionStep->Add_FinalParticleID(PiMinus); locReactionStep->Add_FinalParticleID(PiMinus); locReactionStep->Add_FinalParticleID(Pi0); locReactionStep->Add_FinalParticleID(Proton, MISSING_PROTON); //true: proton missing locReaction->Add_ReactionStep(locReactionStep); dReactionStepPool.push_back(locReactionStep); //register so will be deleted later: prevent memory leak if (!MISSING_PI0){ locReactionStep = new DReactionStep(); locReactionStep->Set_InitialParticleID(Pi0); locReactionStep->Add_FinalParticleID(Gamma); locReactionStep->Add_FinalParticleID(Gamma); locReactionStep->Set_ApplyKinFitMassConstraintOnInitialParticleFlag(false); // DON'T CONSTRAIN THE PI0 MASS locReaction->Add_ReactionStep(locReactionStep); dReactionStepPool.push_back(locReactionStep); } //================================== omega2pi Control Variables =====================================/ // Recommended: Type of kinematic fit to perform (default is d_NoFit) locReaction->Set_KinFitType(d_P4AndVertexFit); //simultaneously constrain apply four-momentum conservation, invariant masses, and common-vertex constraints // Highly Recommended: When generating particle combinations, reject all tracks with a tracking confidence level < 0.27% (+/- 3-sigma) locReaction-> Set_MinTrackingFOM(5.73303E-7); // Highly Recommended: When generating particle combinations, reject all tracks without a matching hit in a detector system (ST/TOF/BCAL/FCAL) locReaction->Set_HasDetectorMatchFlag(true); // Highly Recommended: When generating particle combinations, reject all neutral particles with a PID confidence level < 5.73303E-7 (+/- 5-sigma) locReaction->Set_MinPhotonPIDFOM(5.73303E-7); //locReaction->Set_MaxPhotonRFDeltaT(0.5*2.004); //locReaction->Set_MinChargedPIDFOM(5.73303E-7); if(!MISSING_PROTON && !MISSING_PI0) locReaction->Add_AnalysisAction(new DCutAction_TransverseMomentum(locReaction, 0.4)); locReaction->Add_AnalysisAction(new DHistogramAction_KinFitResults(locReaction, 0.05)); locReaction->Add_AnalysisAction(new DHistogramAction_InvariantMass(locReaction, Pi0, true, 100, 0.105, 0.165, "Pi0 Mass (KinFit Before cut)")); locReaction->Add_AnalysisAction(new DCutAction_InvariantMass(locReaction, Pi0 , true, 0.105, 0.165, "Pi0 Invariant mass cut")); locReaction->Add_AnalysisAction(new DCutAction_KinFitFOM(locReaction, 1.0E-5)); locReaction->Add_AnalysisAction(new DCustomAction_MCSelector5pi(locReaction, false, "ThrownMatching")); locReaction->Add_AnalysisAction(new DCutAction_AllTruePID(locReaction, 0.0, "TruePID")); _data.push_back(locReaction); //Register the DReaction with the factory // Start 3pip //DReactionStep* locReactionStep = NULL; locReaction = new DReaction("3PiP_cuts_based"); //====================================== omega2pi Reaction Steps =============================================/ locReactionStep = new DReactionStep(); locReactionStep->Set_InitialParticleID(Gamma); locReactionStep->Set_TargetParticleID(Proton); locReactionStep->Add_FinalParticleID(PiPlus); locReactionStep->Add_FinalParticleID(PiMinus); locReactionStep->Add_FinalParticleID(Pi0); locReactionStep->Add_FinalParticleID(Proton, MISSING_PROTON); //true: proton missing locReaction->Add_ReactionStep(locReactionStep); dReactionStepPool.push_back(locReactionStep); //register so will be deleted later: prevent memory leak if (!MISSING_PI0){ locReactionStep = new DReactionStep(); locReactionStep->Set_InitialParticleID(Pi0); locReactionStep->Add_FinalParticleID(Gamma); locReactionStep->Add_FinalParticleID(Gamma); locReactionStep->Set_ApplyKinFitMassConstraintOnInitialParticleFlag(false); // DON'T CONSTRAIN THE PI0 MASS locReaction->Add_ReactionStep(locReactionStep); dReactionStepPool.push_back(locReactionStep); } //==================================== omega2pi Control Variables ==================================================/ // Recommended: Type of kinematic fit to perform (default is d_NoFit) locReaction->Set_KinFitType(d_P4AndVertexFit); //simultaneously constrain apply four-momentum conservation, invariant masses, and common-vertex constraints // Highly Recommended: When generating particle combinations, reject all tracks with a tracking confidence level < 0.27% (+/- 3-sigma) locReaction-> Set_MinTrackingFOM(5.73303E-7); // Highly Recommended: When generating particle combinations, reject all tracks without a matching hit in a detector system (ST/TOF/BCAL/FCAL) locReaction->Set_HasDetectorMatchFlag(true); // Highly Recommended: When generating particle combinations, reject all neutral particles with a PID confidence level < 5.73303E-7 (+/- 5-sigma) locReaction->Set_MinPhotonPIDFOM(5.73303E-7); //locReaction->Set_MaxPhotonRFDeltaT(0.5*2.004); //locReaction->Set_MinChargedPIDFOM(5.73303E-7); if(!MISSING_PROTON && !MISSING_PI0) locReaction->Add_AnalysisAction(new DCutAction_TransverseMomentum(locReaction, 0.4)); locReaction->Add_AnalysisAction(new DHistogramAction_KinFitResults(locReaction, 0.05)); locReaction->Add_AnalysisAction(new DHistogramAction_InvariantMass(locReaction, Pi0, true, 100, 0.105, 0.165, "Pi0 Mass (KinFit Before cut)")); locReaction->Add_AnalysisAction(new DCutAction_InvariantMass(locReaction, Pi0 , true, 0.105, 0.165, "Pi0 Invariant mass cut")); locReaction->Add_AnalysisAction(new DCutAction_KinFitFOM(locReaction, 1.0E-5)); locReaction->Add_AnalysisAction(new DCustomAction_MCSelector3pip(locReaction, false, "ThrownMatching")); locReaction->Add_AnalysisAction(new DCutAction_AllTruePID(locReaction, 0.0, "TruePID")); _data.push_back(locReaction); //Register the DReaction with the factory // 3pin //DReactionStep* locReactionStep = NULL; locReaction = new DReaction("3PiN_cuts_based"); //====================================== omega2pi Reaction Steps ===========================================/ locReactionStep = new DReactionStep(); locReactionStep->Set_InitialParticleID(Gamma); locReactionStep->Set_TargetParticleID(Proton); locReactionStep->Add_FinalParticleID(PiPlus); locReactionStep->Add_FinalParticleID(PiPlus); locReactionStep->Add_FinalParticleID(PiMinus); locReactionStep->Add_FinalParticleID(Neutron, true); //true: proton missing locReaction->Add_ReactionStep(locReactionStep); dReactionStepPool.push_back(locReactionStep); //register so will be deleted later: prevent memory leak //======================================= omega2pi Control Variables =============================================/ // Recommended: Type of kinematic fit to perform (default is d_NoFit) locReaction->Set_KinFitType(d_P4AndVertexFit); //simultaneously constrain apply four-momentum conservation, invariant masses, and common-vertex constraints // Highly Recommended: When generating particle combinations, reject all tracks with a tracking confidence level < 0.27% (+/- 3-sigma) locReaction-> Set_MinTrackingFOM(5.73303E-7); // Highly Recommended: When generating particle combinations, reject all tracks without a matching hit in a detector system (ST/TOF/BCAL/FCAL) locReaction->Set_HasDetectorMatchFlag(true); // Highly Recommended: When generating particle combinations, reject all neutral particles with a PID confidence level < 5.73303E-7 (+/- 5-sigma) locReaction->Set_MinPhotonPIDFOM(5.73303E-7); //locReaction->Set_MaxPhotonRFDeltaT(0.5*2.004); //locReaction->Set_MinChargedPIDFOM(5.73303E-7); locReaction->Add_AnalysisAction(new DHistogramAction_KinFitResults(locReaction, 0.05)); locReaction->Add_AnalysisAction(new DCutAction_KinFitFOM(locReaction, 1.0E-5)); locReaction->Add_AnalysisAction(new DCustomAction_MCSelector3pin(locReaction, false, "ThrownMatching")); locReaction->Add_AnalysisAction(new DCutAction_KinFitFOM(locReaction, 0.01)); locReaction->Add_AnalysisAction(new DCutAction_KinFitFOM(locReaction, 0.15)); locReaction->Add_AnalysisAction(new DCustomAction_MCSelector3pin(locReaction, false, "ThrownMatching_0.15KinFitFOM")); locReaction->Add_AnalysisAction(new DCutAction_AllTruePID(locReaction, 0.0, "TruePID")); _data.push_back(locReaction); //Register the DReaction with the factory */ DReactionStep* locReactionStep = NULL; DReaction* locReaction = new DReaction("4pi_cuts_based"); //====================================== omega2pi Reaction Steps ===============================/ locReactionStep = new DReactionStep(); locReactionStep->Set_InitialParticleID(Gamma); locReactionStep->Set_TargetParticleID(Proton); locReactionStep->Add_FinalParticleID(PiPlus); locReactionStep->Add_FinalParticleID(PiPlus); locReactionStep->Add_FinalParticleID(PiMinus); locReactionStep->Add_FinalParticleID(PiMinus); locReactionStep->Add_FinalParticleID(Proton, MISSING_PROTON); //true: proton missing locReaction->Add_ReactionStep(locReactionStep); dReactionStepPool.push_back(locReactionStep); //register so will be deleted later: prevent memory leak //================================== omega2pi Control Variables ======================================/ // Recommended: Type of kinematic fit to perform (default is d_NoFit) locReaction->Set_KinFitType(d_P4AndVertexFit); //simultaneously constrain apply four-momentum conservation, invariant masses, and common-vertex constraints // Highly Recommended: When generating particle combinations, reject all tracks with a tracking confidence level < 0.27% (+/- 3-sigma) locReaction-> Set_MinTrackingFOM(5.73303E-7); // Highly Recommended: When generating particle combinations, reject all tracks without a matching hit in a detector system (ST/TOF/BCAL/FCAL) locReaction->Set_HasDetectorMatchFlag(true); // Highly Recommended: When generating particle combinations, reject all neutral particles with a PID confidence level < 5.73303E-7 (+/- 5-sigma) locReaction->Set_MinPhotonPIDFOM(5.73303E-7); //locReaction->Set_MaxPhotonRFDeltaT(0.5*2.004); //locReaction->Set_MinChargedPIDFOM(5.73303E-7); if(!MISSING_PROTON && !MISSING_PI0) locReaction->Add_AnalysisAction(new DCutAction_TransverseMomentum(locReaction, 0.4)); locReaction->Add_AnalysisAction(new DHistogramAction_KinFitResults(locReaction, 0.05)); locReaction->Add_AnalysisAction(new DCutAction_KinFitFOM(locReaction, 1.0E-5)); locReaction->Add_AnalysisAction(new DCustomAction_MCSelector4pi(locReaction, false, "ThrownMatching")); locReaction->Add_AnalysisAction(new DCutAction_AllTruePID(locReaction, 0.0, "TruePID")); _data.push_back(locReaction); //Register the DReaction with the factory } // End if (CUTS_BASED) return NOERROR; } //------------------ // fini //------------------ jerror_t DReaction_factory_omega2pi::fini(void) { for(size_t loc_i = 0; loc_i < dReactionStepPool.size(); ++loc_i) delete dReactionStepPool[loc_i]; //cleanup memory return NOERROR; }