Difference between revisions of "Mattione GlueX Analysis Factories"

From GlueXWiki
Jump to: navigation, search
(User Plugin DEventProcessor)
(User Plugin DReaction Factory)
Line 21: Line 21:
 
  locReaction = new DReaction();
 
  locReaction = new DReaction();
 
  locReaction->Set_ReactionName(<span style="color:#0000FF">"Y2175"</span>);
 
  locReaction->Set_ReactionName(<span style="color:#0000FF">"Y2175"</span>);
 +
locReaction->Set_FitTypeFlag(<span style="color:#0000FF">3</span>); //kinfit p4, v, & t simultaneously (0 is no kinfit)
 
    
 
    
 
  //<span style="color:#0000FF">g, p -> phi(2175), (p)</span>
 
  //<span style="color:#0000FF">g, p -> phi(2175), (p)</span>

Revision as of 14:01, 12 August 2012

Summary

  • In his/her plugin, a user specifies the reactions he/she wants to study (DReaction objects), then just asks JANA for the results (DTrackCombo objects).
    • Creates all possible track combinations for the desired reaction; user then cuts on the likelihood that those combinations represent the hypothesized reaction.

User Plugin DReaction Factory

  • DReaction.h located in DANA libraries, DReaction_factory.h located in user plugin (along with a factory generator for it).
  • Below shows how to set up DReaction for a Y(2175) analysis.
//------------------
// 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);

	DReaction* locReaction;
	DReactionStep* locReactionStep;

	// Make as many DReaction objects as desired
	locReaction = new DReaction();
	locReaction->Set_ReactionName("Y2175");
	locReaction->Set_FitTypeFlag(3); //kinfit p4, v, & t simultaneously (0 is no kinfit)
 
	//g, p -> phi(2175), (p)
	locReactionStep = new DReactionStep();
	locReactionStep->Set_InitialParticleID(Gamma);
	locReactionStep->Set_TargetParticleID(Proton);
	locReactionStep->Add_FinalParticleID(Unknown); //phi(2175)
	locReactionStep->Add_FinalParticleID(Proton);
	locReactionStep->Set_MissingParticleIndex(1); //proton missing
	locReaction->Add_ReactionStep(locReactionStep);
	dReactionStepPool.push_back(locReactionStep); //prevent memory leak

	//phi(2175) -> pi+, pi-, phi
	locReactionStep = new DReactionStep();
	locReactionStep->Set_InitialParticleID(Unknown); //phi(2175)
	locReactionStep->Set_TargetParticleID(Unknown); //no target for this step
	locReactionStep->Add_FinalParticleID(PiPlus);
	locReactionStep->Add_FinalParticleID(PiMinus);
	locReactionStep->Add_FinalParticleID(phiMeson);
	locReactionStep->Set_MissingParticleIndex(-1); //none missing
	locReaction->Add_ReactionStep(locReactionStep);
	dReactionStepPool.push_back(locReactionStep); //prevent memory leak

	//phi -> K+, K-
	locReactionStep = new DReactionStep();
	locReactionStep->Set_InitialParticleID(Unknown); //phi(2175)
	locReactionStep->Set_TargetParticleID(Unknown); //no target for this step
	locReactionStep->Add_FinalParticleID(KPlus);
	locReactionStep->Add_FinalParticleID(KMinus);
 	locReactionStep->Set_MissingParticleIndex(-1); //none missing
 	locReaction->Add_ReactionStep(locReactionStep);
	dReactionStepPool.push_back(locReactionStep); //prevent memory leak

	_data.push_back(locReaction);

	return NOERROR;
}

DTrackCombo

  • Will be located in src/libraries/ANALYSIS
  • DTrackCombo_factory: Generates a DTrackCombo object for each possible combination of detected tracks and DBeamPhotons (configurable time cut used to eliminate way-out-of-time photons).
    • PID is NOT assumed, all possibilities are tested: For each q = +/-/0 particle in a given DReaction, all detected q = +/-/0 tracks are tested as to whether or not they are that particle.
  • DKinFitResults_factory: Performs a single, full kinematic fit testing whether each DTrackCombo matches the DReaction: includes all mass, vertex, timing constraints.
  • DTrackCombo_factory_KinFit: Create new DTrackCombo objects, using the kinematic fit track information and results.
class DTrackCombo : public JObject
{
	private:
		const DReaction* dReaction;
		deque<const DTrackComboStep*> dTrackComboSteps;
		deque<const DChargedTrack*> dUnusedPositiveTracks;
		deque<const DChargedTrack*> dUnusedNegativeTracks;
		deque<const DNeutralShower*> dUnusedNeutralShowers;
};
class DTrackComboStep
{
	private:
		//PIDS:
		Particle_t dInitialParticleID; //e.g. lambda, phi, gamma
		Particle_t dTargetParticleID; //Unknown for no target
		deque<Particle_t> dFinalParticleIDs;

		//INITIAL PARTICLES:
		DKinematicData* dInitialParticle; //kinfit result, else measured
		DKinematicData* dInitialParticle_Measured; //e.g. DBeamPhoton
		DKinematicData* dTargetParticle; //NULL for no target

		//FINAL PARTICLES:
		deque<const DKinematicData*> dFinalParticles; //kinfit result, else measured //e.g. DChargedTrackHypothesis, DNeutralParticleHypothesis
		deque<const DKinematicData*> dFinalParticles_Measured; //e.g. DChargedTrackHypothesis, DNeutralParticleHypothesis
		deque<const JObject*> dFinalParticleSourceObjects; //original DChargedTrack or DNeutralShower objects

		//CONTROL VARIABLES:
		int dInitialParticleDecayFromStepIndex; //points to which DTrackComboStep represents the production of the initial particle (e.g. Lambda)
		deque<int> dDecayStepIndices; //let's you know whether a final state particle is decaying, missing, or detected.  if decaying, points to which DTrackComboStep represents its decay
};

User Plugin DAnalysis Factory

User Plugin DEventProcessor

extern "C" 
{
	void InitPlugin(JApplication *app)
	{
		InitJANAPlugin(app);
		app->AddProcessor(new DEventProcessor_Y2175());
		app->AddFactoryGenerator(new DFactoryGenerator_DReaction());
	}
} // "C"

jerror_t DEventProcessor_Y2175::evnt(JEventLoop *locEventLoop, int eventnumber)
{
	vector<const DTrackCombo*> locTrackCombos;
	locEventLoop->Get(locTrackCombos, "KinFit");

	//DO HISTS/CUTS/TUPLES HERE

	return NOERROR;
}

Cutting/Histogramming

  • Coming Soon...
//execute the contained action for each DTrackCombo of the given DReaction that has passed all previous cuts.
class DAnalysisAction
{
	public:
		//returns true/false if passes/fails cut/eval/etc, respectively
		virtual bool operator()(JEventLoop* locEventLoop, map<const DTrackCombo*, bool>& locTrackComboCutStatus, deque<const JObject*>& locNewObjects) = 0;
	protected:
		DReaction* dReaction; //tells it to ignore DTrackCombo objects from other reactions
};

Tupling

  • Haven't really gotten this far yet...