Hall-D Software  alpha
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
DHistogramActions_Reaction.h
Go to the documentation of this file.
1 #ifndef _DHistogramActions_Reaction_
2 #define _DHistogramActions_Reaction_
3 
4 #include <map>
5 #include <set>
6 #include <deque>
7 #include <string>
8 #include <iostream>
9 #include <sstream>
10 #include <limits>
11 
12 #include "TROOT.h"
13 #include "TDirectoryFile.h"
14 #include "TH1I.h"
15 #include "TH2I.h"
16 #include "TH1D.h"
17 #include "TH2D.h"
18 #include "TTree.h"
19 
20 #include "JANA/JEventLoop.h"
21 #include "particleType.h"
22 
23 #include "RF/DRFTime.h"
24 #include "PID/DChargedTrack.h"
26 #include "PID/DNeutralParticle.h"
27 #include "PID/DNeutralShower.h"
28 #include "PID/DVertex.h"
29 #include "PID/DDetectorMatches.h"
31 #include "PID/DEventRFBunch.h"
32 #include "TRACKING/DMCThrown.h"
33 
34 #include "ANALYSIS/DReaction.h"
41 #include "ANALYSIS/DCutActions.h"
42 
43 #include "START_COUNTER/DSCHit.h"
44 #include "TAGGER/DTAGHHit.h"
45 #include "TAGGER/DTAGMHit.h"
46 #include "CDC/DCDCHit.h"
47 #include "FDC/DFDCHit.h"
48 #include "TOF/DTOFPoint.h"
49 #include "TOF/DTOFHit.h"
50 #include "BCAL/DBCALShower.h"
51 #include "BCAL/DBCALHit.h"
52 #include "FCAL/DFCALShower.h"
53 #include "FCAL/DFCALHit.h"
54 
58 
59 using namespace std;
60 using namespace jana;
61 
62 /*
63 REACTION-BASED ACTIONS:
64  DHistogramAction_ParticleComboKinematics
65  DHistogramAction_PID
66  DHistogramAction_TrackVertexComparison
67  DHistogramAction_KinFitResults
68  DHistogramAction_InvariantMass
69  DHistogramAction_MissingMass
70  DHistogramAction_MissingMassSquared
71  DHistogramAction_2DInvariantMass
72  DHistogramAction_Dalitz
73  DHistogramAction_MissingTransverseMomentum
74 */
75 
77 {
78  public:
79 
80  DHistogramAction_PID(const DReaction* locReaction, bool locUseKinFitResultsFlag = false, string locActionUniqueString = "") :
81  DAnalysisAction(locReaction, "Hist_PID", locUseKinFitResultsFlag, locActionUniqueString),
82  dNum2DPBins(250), dNum2DdEdxBins(400), dNum2DBetaBins(400), dNum2DBCALThetaBins(260), dNum2DFCALThetaBins(120), dNum2DThetaBins(280), dNumBetaBins(700),
83  dNum2DEOverPBins(300), dNum2DDeltaBetaBins(400), dNum2DDeltadEdxBins(300), dNum2DDeltaTBins(400), dNum2DPullBins(200), dNumFOMBins(400),
84  dNum2DFOMBins(200), dMinP(0.0), dMaxP(10.0), dMaxBCALP(3.0), dMindEdX(0.0), dMaxdEdX(25.0), dMinBeta(-0.2), dMaxBeta(1.2), dMinBCALTheta(10.0),
85  dMaxBCALTheta(140.0), dMinFCALTheta(0.0), dMaxFCALTheta(12.0), dMinTheta(0.0), dMaxTheta(140.0), dMinEOverP(0.0), dMaxEOverP(4.0), dMinDeltaBeta(-1.0),
86  dMaxDeltaBeta(1.0), dMinDeltadEdx(-30.0), dMaxDeltadEdx(30.0), dMinDeltaT(-10.0), dMaxDeltaT(10.0), dMinPull(-10.0), dMaxPull(10.0),
87  dDIRCNumPhotonsBins(100), dDIRCThetaCBins(100), dDIRCLikelihoodBins(100),
88  dDIRCMinNumPhotons(0), dDIRCMaxNumPhotons(100),
89  dDIRCMinThetaC(0.6), dDIRCMaxThetaC(1.0), dDIRCMinLikelihood(0), dDIRCMaxLikelihood(1000)
90  {
91  dThrownPIDs.push_back(Gamma); dThrownPIDs.push_back(Neutron);
92  dThrownPIDs.push_back(PiPlus); dThrownPIDs.push_back(KPlus); dThrownPIDs.push_back(Proton);
93  dThrownPIDs.push_back(PiMinus); dThrownPIDs.push_back(KMinus);
94 
95  // used for indexing into maps
96  SYS_CDC_AMP = static_cast<DetectorSystem_t>(SYS_CDC + SYS_FDC);
97 
98  dParticleID = NULL;
99  dAnalysisUtilities = NULL;
100  }
101 
102  void Initialize(JEventLoop* locEventLoop);
103  void Reset_NewEvent(void)
104  {
105  DAnalysisAction::Reset_NewEvent();
106  dPreviouslyHistogrammedParticles.clear();
107  }
108 
109  unsigned int dNum2DPBins, dNum2DdEdxBins, dNum2DBetaBins, dNum2DBCALThetaBins, dNum2DFCALThetaBins, dNum2DThetaBins, dNumBetaBins;
110  unsigned int dNum2DEOverPBins, dNum2DDeltaBetaBins, dNum2DDeltadEdxBins, dNum2DDeltaTBins, dNum2DPullBins, dNumFOMBins, dNum2DFOMBins;
111  double dMinP, dMaxP, dMaxBCALP, dMindEdX, dMaxdEdX, dMinBeta, dMaxBeta, dMinBCALTheta, dMaxBCALTheta, dMinFCALTheta, dMaxFCALTheta, dMinTheta, dMaxTheta;
112  double dMinEOverP, dMaxEOverP, dMinDeltaBeta, dMaxDeltaBeta, dMinDeltadEdx, dMaxDeltadEdx, dMinDeltaT, dMaxDeltaT, dMinPull, dMaxPull;
113  unsigned int dDIRCNumPhotonsBins, dDIRCThetaCBins, dDIRCLikelihoodBins, dDIRCMinNumPhotons, dDIRCMaxNumPhotons;
114  double dDIRCMinThetaC, dDIRCMaxThetaC;
115  double dDIRCMinLikelihood, dDIRCMaxLikelihood;
116 
117  deque<Particle_t> dThrownPIDs;
118 
119  private:
120  bool Perform_Action(JEventLoop* locEventLoop, const DParticleCombo* locParticleCombo);
121 
122  void Fill_ChargedHists(const DChargedTrackHypothesis* locChargedTrackHypothesis, const DMCThrownMatching* locMCThrownMatching, const DEventRFBunch* locEventRFBunch);
123  void Fill_NeutralHists(const DNeutralParticleHypothesis* locNeutralParticleHypothesis, const DMCThrownMatching* locMCThrownMatching, const DEventRFBunch* locEventRFBunch);
124 
126 
129 
130  map<Particle_t, map<DetectorSystem_t, TH2I*> > dHistMap_EOverPVsP;
131  map<Particle_t, map<DetectorSystem_t, TH2I*> > dHistMap_EOverPVsTheta;
132 
133  map<Particle_t, map<DetectorSystem_t, TH2I*> > dHistMap_dEdXVsP;
134  map<Particle_t, map<DetectorSystem_t, TH2I*> > dHistMap_DeltadEdXVsP;
135  map<Particle_t, map<DetectorSystem_t, TH2I*> > dHistMap_dEdXPullVsP;
136  map<Particle_t, map<DetectorSystem_t, TH2I*> > dHistMap_dEdXFOMVsP;
137 
138  map<Particle_t, map<DetectorSystem_t, TH2I*> > dHistMap_BetaVsP;
139  map<Particle_t, map<DetectorSystem_t, TH2I*> > dHistMap_DeltaBetaVsP;
140 
141  map<Particle_t, map<DetectorSystem_t, TH2I*> > dHistMap_DeltaTVsP;
142  map<Particle_t, map<DetectorSystem_t, TH2I*> > dHistMap_TimePullVsP;
143  map<Particle_t, map<DetectorSystem_t, TH2I*> > dHistMap_TimeFOMVsP;
144 
145  map<Particle_t, map<DetectorSystem_t, TH1I*> > dHistMap_Beta; //for BCAL/FCAL neutrals only
146 
147  map<Particle_t, TH1I*> dHistMap_PIDFOM; //overall
148 
149  map<Particle_t, TH2I*> dHistMap_PVsTheta_NaNPIDFOM;
150  map<Particle_t, TH2I*> dHistMap_PVsTheta_NegativeBeta;
151 
152  map<pair<Particle_t, Particle_t>, TH1I*> dHistMap_PIDFOMForTruePID;
153 
154  map<Particle_t, TH1I*> dHistMap_NumPhotons_DIRC;
155  map<Particle_t, TH2I*> dHistMap_ThetaCVsP_DIRC;
156  map<Particle_t, TH2I*> dHistMap_Ldiff_kpiVsP_DIRC;
157  map<Particle_t, TH2I*> dHistMap_Ldiff_pkVsP_DIRC;
158 
159  set<pair<const DEventRFBunch*, pair<Particle_t, const JObject*> > > dPreviouslyHistogrammedParticles; //to prevent double-counting (JObject is source object)
160 };
161 
163 {
164  public:
165  DHistogramAction_TrackVertexComparison(const DReaction* locReaction, string locActionUniqueString = "") :
166  DAnalysisAction(locReaction, "Hist_TrackVertexComparison", false, locActionUniqueString),
167  dNumDeltaVertexZBins(200), dNumDeltaVertexTBins(100), dNumDOCABins(100), dNum2DPBins(250), dNumThetaBins(300), dMinDeltaVertexZ(-10.0), dMaxDeltaVertexZ(10.0),
168  dMinDeltaVertexT(-5.0), dMaxDeltaVertexT(5.0), dMinDOCA(0.0), dMaxDOCA(10.0), dMinP(0.0), dMaxP(10.0), dMinTheta(0.0), dMaxTheta(150.0)
169  {
170  dAnalysisUtilities = NULL;
171  }
172 
173  unsigned int dNumDeltaVertexZBins, dNumDeltaVertexTBins, dNumDOCABins, dNum2DPBins, dNumThetaBins;
174  double dMinDeltaVertexZ, dMaxDeltaVertexZ, dMinDeltaVertexT, dMaxDeltaVertexT, dMinDOCA, dMaxDOCA, dMinP, dMaxP, dMinTheta, dMaxTheta;
175 
176  void Initialize(JEventLoop* locEventLoop);
177 
178  private:
179  bool Perform_Action(JEventLoop* locEventLoop, const DParticleCombo* locParticleCombo);
180 
182 
183  //should be improved...: the particles at a given vertex may span several steps
184  deque<map<Particle_t, TH1I*> > dHistDeque_TrackZToCommon; //dim is step
185  deque<map<Particle_t, TH1I*> > dHistDeque_TrackTToCommon; //dim is step
186  deque<map<Particle_t, TH1I*> > dHistDeque_TrackDOCAToCommon; //dim is step
187 
191 
192  deque<map<pair<Particle_t, Particle_t>, TH2I*> > dHistDeque_TrackDeltaTVsP; //one hist per track pair, more massive particle is listed first, p is that of the more massive particle (generally slower: worse projected resolution)
193 
194  map<Particle_t, TH2I*> dHistMap_BeamTrackDeltaTVsP;
195 };
196 
198 {
199  public:
200  DHistogramAction_ParticleComboKinematics(const DReaction* locReaction, bool locUseKinFitResultsFlag, string locActionUniqueString = "") :
201  DAnalysisAction(locReaction, "Hist_ParticleComboKinematics", locUseKinFitResultsFlag, locActionUniqueString),
202  dNumPBins(600), dNumThetaBins(560), dNumPhiBins(360), dNumVertexZBins(750), dNumVertexXYBins(200), dNumBetaBins(400), dNumDeltaBetaBins(400),
203  dNum2DPBins(300), dNum2DThetaBins(140), dNum2DPhiBins(180), dNumDeltaTRFBins(500), dNumPathLengthBins(750), dNumLifetimeBins(500),
204  dMinP(0.0), dMaxP(12.0), dMinTheta(0.0), dMaxTheta(140.0), dMinPhi(-180.0), dMaxPhi(180.0), dMinVertexZ(-50.0), dMaxVertexZ(200.0),
205  dMinVertexXY(-5.0), dMaxVertexXY(5.0), dMinBeta(-0.2), dMaxBeta(1.2), dMinDeltaBeta(-1.0), dMaxDeltaBeta(1.0), dMinDeltaTRF(-10.0), dMaxDeltaTRF(10.0),
206  dMaxPathLength(15), dMaxLifetime(5.0)
207  {
208  dParticleID = NULL;
209  dAnalysisUtilities = NULL;
210  }
211 
212  unsigned int dNumPBins, dNumThetaBins, dNumPhiBins, dNumVertexZBins, dNumVertexXYBins, dNumBetaBins, dNumDeltaBetaBins;
213  unsigned int dNum2DPBins, dNum2DThetaBins, dNum2DPhiBins, dNumDeltaTRFBins, dNumPathLengthBins, dNumLifetimeBins;
214  double dMinP, dMaxP, dMinTheta, dMaxTheta, dMinPhi, dMaxPhi, dMinVertexZ, dMaxVertexZ, dMinVertexXY, dMaxVertexXY;
215  double dMinBeta, dMaxBeta, dMinDeltaBeta, dMaxDeltaBeta, dMinDeltaTRF, dMaxDeltaTRF, dMaxPathLength, dMaxLifetime;
216 
217  void Initialize(JEventLoop* locEventLoop);
218  void Reset_NewEvent(void)
219  {
220  DAnalysisAction::Reset_NewEvent();
221  dPreviouslyHistogrammedBeamParticles.clear();
222  dPreviouslyHistogrammedParticles.clear();
223  }
224 
225  private:
226  bool Perform_Action(JEventLoop* locEventLoop, const DParticleCombo* locParticleCombo);
227 
228  void Fill_Hists(JEventLoop* locEventLoop, const DKinematicData* locKinematicData, bool locIsMissingFlag, size_t locStepIndex);
229  void Fill_BeamHists(const DKinematicData* locKinematicData, const DEventRFBunch* locEventRFBunch);
230 
234 
244 
245  //bool: true/false for missing/non-missing
246  deque<map<Particle_t, map<bool, TH2I*> > > dHistDeque_PVsTheta;
247  deque<map<Particle_t, map<bool, TH2I*> > > dHistDeque_BetaVsP;
248  deque<map<Particle_t, map<bool, TH2I*> > > dHistDeque_DeltaBetaVsP;
249  deque<map<Particle_t, map<bool, TH2I*> > > dHistDeque_PhiVsTheta;
250  deque<map<Particle_t, map<bool, TH1I*> > > dHistDeque_P;
251  deque<map<Particle_t, map<bool, TH1I*> > > dHistDeque_Theta;
252  deque<map<Particle_t, map<bool, TH1I*> > > dHistDeque_Phi;
253  deque<map<Particle_t, map<bool, TH1I*> > > dHistDeque_VertexZ;
254  deque<map<Particle_t, map<bool, TH2I*> > > dHistDeque_VertexYVsX;
255 
259 
261  set<pair<size_t, pair<Particle_t, const JObject*> > > dPreviouslyHistogrammedParticles;
262 
263  //other than first, skipped if not detached vertex
264  map<size_t, TH1I*> dHistMap_StepVertexZ;
265  map<size_t, TH2I*> dHistMap_StepVertexYVsX;
266 
267  //size_t is step index where the detached-vertex particle decays
268  map<size_t, TH1I*> dHistMap_DetachedPathLength; //distance between this vertex and the previous one (if detached)
269  map<size_t, TH1I*> dHistMap_DetachedLifetime; //delta-t between this vertex and the previous one (if detached)
270  map<size_t, TH1I*> dHistMap_DetachedLifetime_RestFrame; //in rest frame
271 };
272 
274 {
275  public:
276  DHistogramAction_InvariantMass(const DReaction* locReaction, Particle_t locInitialPID, bool locUseKinFitResultsFlag, unsigned int locNumMassBins, double locMinMass, double locMaxMass, string locActionUniqueString = "") :
277  DAnalysisAction(locReaction, "Hist_InvariantMass", locUseKinFitResultsFlag, locActionUniqueString),
278  dInitialPID(locInitialPID), dStepIndex(-1), dToIncludePIDs(deque<Particle_t>()),
279  dNumMassBins(locNumMassBins), dMinMass(locMinMass), dMaxMass(locMaxMass), dNum2DMassBins(locNumMassBins/2), dNum2DBeamEBins(600), dMinBeamE(0.0), dMaxBeamE(12.0) {}
280 
281  //e.g. if g, p -> pi+, pi-, p
282  //call with step = 0, PIDs = pi+, pi-, and will histogram rho mass
283  DHistogramAction_InvariantMass(const DReaction* locReaction, size_t locStepIndex, deque<Particle_t> locToIncludePIDs, bool locUseKinFitResultsFlag, unsigned int locNumMassBins, double locMinMass, double locMaxMass, string locActionUniqueString = "") :
284  DAnalysisAction(locReaction, "Hist_InvariantMass", locUseKinFitResultsFlag, locActionUniqueString),
285  dInitialPID(Unknown), dStepIndex(locStepIndex), dToIncludePIDs(locToIncludePIDs),
286  dNumMassBins(locNumMassBins), dMinMass(locMinMass), dMaxMass(locMaxMass), dNum2DMassBins(locNumMassBins/2), dNum2DBeamEBins(600), dMinBeamE(0.0), dMaxBeamE(12.0) {}
287 
288  void Initialize(JEventLoop* locEventLoop);
289  void Reset_NewEvent(void)
290  {
291  DAnalysisAction::Reset_NewEvent();
292  dPreviousSourceObjects.clear();
293  dPreviousSourceObjects_Beam.clear();
294  }
295 
296  private:
297  bool Perform_Action(JEventLoop* locEventLoop, const DParticleCombo* locParticleCombo);
298 
301  deque<Particle_t> dToIncludePIDs;
302 
303  unsigned int dNumMassBins;
304  double dMinMass, dMaxMass;
305 
306  public:
307  unsigned int dNum2DMassBins, dNum2DBeamEBins;
308  double dMinBeamE, dMaxBeamE;
309 
310  private:
311  const DAnalysisUtilities* dAnalysisUtilities = nullptr;
314 
315  set<set<pair<const JObject*, unsigned int> > > dPreviousSourceObjects;
316  set<pair<set<pair<const JObject*, unsigned int> >, const JObject*>> dPreviousSourceObjects_Beam;
317 };
318 
320 {
321  public:
322  DHistogramAction_MissingMass(const DReaction* locReaction, bool locUseKinFitResultsFlag, unsigned int locNumMassBins, double locMinMass, double locMaxMass, string locActionUniqueString = "") :
323  DAnalysisAction(locReaction, "Hist_MissingMass", locUseKinFitResultsFlag, locActionUniqueString),
324  dNumMassBins(locNumMassBins), dMinMass(locMinMass), dMaxMass(locMaxMass), dMissingMassOffOfStepIndex(0),
325  dMissingMassOffOfPIDs(deque<Particle_t>()), dNum2DMassBins(locNumMassBins/2), dNum2DBeamEBins(600), dNum2DMissPBins(450),
326  dMinBeamE(0.0), dMaxBeamE(12.0), dMinMissP(0.0), dMaxMissP(9.0)
327  {
328  dAnalysisUtilities = NULL;
329  }
330 
331  //E.g. If:
332  //g, p -> K+, K+, Xi-
333  // Xi- -> pi-, Lambda
334  // Lambda -> (p), pi-
335  //And:
336  //locMissingMassOffOfStepIndex = 0, locMissingMassOffOfPIDs = K+, K+
337  //Then: Will histogram missing-mass: g, p -> K+, K+, (X)
338  //Also:
339  //locMissingMassOffOfStepIndex = 1, locMissingMassOffOfPID = pi-
340  //Then: Will histogram missing-mass: g, p -> K+, K+, pi-
341  //But:
342  //locMissingMassOffOfStepIndex = 0, locMissingMassOffOfPIDs = K+
343  //Then: Will histogram only missing-mass: g, p -> K+_1, (X) and NOT K+_2!!!
344  DHistogramAction_MissingMass(const DReaction* locReaction, int locMissingMassOffOfStepIndex, deque<Particle_t> locMissingMassOffOfPIDs, bool locUseKinFitResultsFlag, unsigned int locNumMassBins, double locMinMass, double locMaxMass, string locActionUniqueString = "") :
345  DAnalysisAction(locReaction, "Hist_MissingMass", locUseKinFitResultsFlag, locActionUniqueString),
346  dNumMassBins(locNumMassBins), dMinMass(locMinMass), dMaxMass(locMaxMass), dMissingMassOffOfStepIndex(locMissingMassOffOfStepIndex),
347  dMissingMassOffOfPIDs(locMissingMassOffOfPIDs), dNum2DMassBins(locNumMassBins/2), dNum2DBeamEBins(600), dNum2DMissPBins(450),
348  dMinBeamE(0.0), dMaxBeamE(12.0), dMinMissP(0.0), dMaxMissP(9.0)
349  {
350  dAnalysisUtilities = NULL;
351  }
352 
353  DHistogramAction_MissingMass(const DReaction* locReaction, int locMissingMassOffOfStepIndex, Particle_t locMissingMassOffOfPID, bool locUseKinFitResultsFlag, unsigned int locNumMassBins, double locMinMass, double locMaxMass, string locActionUniqueString = "") :
354  DAnalysisAction(locReaction, "Hist_MissingMass", locUseKinFitResultsFlag, locActionUniqueString),
355  dNumMassBins(locNumMassBins), dMinMass(locMinMass), dMaxMass(locMaxMass), dMissingMassOffOfStepIndex(locMissingMassOffOfStepIndex),
356  dMissingMassOffOfPIDs(deque<Particle_t>(1, locMissingMassOffOfPID)), dNum2DMassBins(locNumMassBins/2), dNum2DBeamEBins(600), dNum2DMissPBins(450),
357  dMinBeamE(0.0), dMaxBeamE(12.0), dMinMissP(0.0), dMaxMissP(9.0)
358  {
359  dAnalysisUtilities = NULL;
360  }
361 
362  void Initialize(JEventLoop* locEventLoop);
363  void Reset_NewEvent(void)
364  {
365  DAnalysisAction::Reset_NewEvent();
366  dPreviousSourceObjects.clear();
367  }
368 
369  private:
370  bool Perform_Action(JEventLoop* locEventLoop, const DParticleCombo* locParticleCombo);
371 
372  unsigned int dNumMassBins;
373  double dMinMass, dMaxMass;
375  deque<Particle_t> dMissingMassOffOfPIDs;
376 
377  public:
378  unsigned int dNum2DMassBins, dNum2DBeamEBins, dNum2DMissPBins;
379  double dMinBeamE, dMaxBeamE, dMinMissP, dMaxMissP;
380 
381  private:
386 
387  set<set<pair<const JObject*, unsigned int> > > dPreviousSourceObjects;
388 };
389 
391 {
392  public:
393  DHistogramAction_MissingMassSquared(const DReaction* locReaction, bool locUseKinFitResultsFlag, unsigned int locNumMassBins, double locMinMassSq, double locMaxMassSq, string locActionUniqueString = "") :
394  DAnalysisAction(locReaction, "Hist_MissingMassSquared", locUseKinFitResultsFlag, locActionUniqueString),
395  dNumMassBins(locNumMassBins), dMinMassSq(locMinMassSq), dMaxMassSq(locMaxMassSq), dMissingMassOffOfStepIndex(0),
396  dMissingMassOffOfPIDs(deque<Particle_t>()), dNum2DMassBins(locNumMassBins/2), dNum2DBeamEBins(600), dNum2DMissPBins(450),
397  dMinBeamE(0.0), dMaxBeamE(12.0), dMinMissP(0.0), dMaxMissP(9.0)
398  {
399  dAnalysisUtilities = NULL;
400  }
401 
402  //E.g. If:
403  //g, p -> K+, K+, Xi-
404  // Xi- -> pi-, Lambda
405  // Lambda -> (p), pi-
406  //And:
407  //locMissingMassOffOfStepIndex = 0, locMissingMassOffOfPIDs = K+, K+
408  //Then: Will histogram missing-mass: g, p -> K+, K+, (X)
409  //Also:
410  //locMissingMassOffOfStepIndex = 1, locMissingMassOffOfPID = pi-
411  //Then: Will histogram missing-mass: g, p -> K+, K+, pi-
412  //But:
413  //locMissingMassOffOfStepIndex = 0, locMissingMassOffOfPIDs = K+
414  //Then: Will histogram only missing-mass: g, p -> K+_1, (X) and NOT K+_2!!!
415  DHistogramAction_MissingMassSquared(const DReaction* locReaction, int locMissingMassOffOfStepIndex, deque<Particle_t> locMissingMassOffOfPIDs, bool locUseKinFitResultsFlag, unsigned int locNumMassBins, double locMinMassSq, double locMaxMassSq, string locActionUniqueString = "") :
416  DAnalysisAction(locReaction, "Hist_MissingMassSquared", locUseKinFitResultsFlag, locActionUniqueString),
417  dNumMassBins(locNumMassBins), dMinMassSq(locMinMassSq), dMaxMassSq(locMaxMassSq), dMissingMassOffOfStepIndex(locMissingMassOffOfStepIndex),
418  dMissingMassOffOfPIDs(locMissingMassOffOfPIDs), dNum2DMassBins(locNumMassBins/2), dNum2DBeamEBins(600), dNum2DMissPBins(450),
419  dMinBeamE(0.0), dMaxBeamE(12.0), dMinMissP(0.0), dMaxMissP(9.0)
420  {
421  dAnalysisUtilities = NULL;
422  }
423 
424  DHistogramAction_MissingMassSquared(const DReaction* locReaction, int locMissingMassOffOfStepIndex, Particle_t locMissingMassOffOfPID, bool locUseKinFitResultsFlag, unsigned int locNumMassBins, double locMinMassSq, double locMaxMassSq, string locActionUniqueString = "") :
425  DAnalysisAction(locReaction, "Hist_MissingMassSquared", locUseKinFitResultsFlag, locActionUniqueString),
426  dNumMassBins(locNumMassBins), dMinMassSq(locMinMassSq), dMaxMassSq(locMaxMassSq), dMissingMassOffOfStepIndex(locMissingMassOffOfStepIndex),
427  dMissingMassOffOfPIDs(deque<Particle_t>(1, locMissingMassOffOfPID)), dNum2DMassBins(locNumMassBins/2), dNum2DBeamEBins(600), dNum2DMissPBins(450),
428  dMinBeamE(0.0), dMaxBeamE(12.0), dMinMissP(0.0), dMaxMissP(9.0)
429  {
430  dAnalysisUtilities = NULL;
431  }
432 
433  void Initialize(JEventLoop* locEventLoop);
434  void Reset_NewEvent(void)
435  {
436  DAnalysisAction::Reset_NewEvent();
437  dPreviousSourceObjects.clear();
438  }
439 
440  private:
441  bool Perform_Action(JEventLoop* locEventLoop, const DParticleCombo* locParticleCombo);
442 
443  unsigned int dNumMassBins;
444  double dMinMassSq, dMaxMassSq;
446  deque<Particle_t> dMissingMassOffOfPIDs;
447 
448  public:
449  unsigned int dNum2DMassBins, dNum2DBeamEBins, dNum2DMissPBins;
450  double dMinBeamE, dMaxBeamE, dMinMissP, dMaxMissP;
451 
452  private:
457 
458  set<set<pair<const JObject*, unsigned int> > > dPreviousSourceObjects;
459 };
460 
462 {
463  public:
464  DHistogramAction_2DInvariantMass(const DReaction* locReaction, size_t locStepIndex, deque<Particle_t> locXPIDs, deque<Particle_t> locYPIDs, bool locUseKinFitResultsFlag, unsigned int locNumXBins, double locMinX, double locMaxX, unsigned int locNumYBins, double locMinY, double locMaxY, string locActionUniqueString = "") :
465  DAnalysisAction(locReaction, "Hist_2DInvariantMass", locUseKinFitResultsFlag, locActionUniqueString),
466  dStepIndex(locStepIndex), dXPIDs(locXPIDs), dYPIDs(locYPIDs), dNumXBins(locNumXBins), dNumYBins(locNumYBins),
467  dMinX(locMinX), dMaxX(locMaxX), dMinY(locMinY), dMaxY(locMaxY), dAnalysisUtilities(NULL) {}
468 
469  void Initialize(JEventLoop* locEventLoop);
470  void Reset_NewEvent(void)
471  {
472  DAnalysisAction::Reset_NewEvent();
473  dPreviousSourceObjects.clear();
474  }
475 
476  private:
477  bool Perform_Action(JEventLoop* locEventLoop, const DParticleCombo* locParticleCombo);
478 
480  deque<Particle_t> dXPIDs, dYPIDs;
481  unsigned int dNumXBins, dNumYBins;
482  double dMinX, dMaxX, dMinY, dMaxY;
483 
486 
487  set<set<set<pair<const JObject*, unsigned int> > > > dPreviousSourceObjects;
488 };
489 
490 
492 {
493  public:
494  DHistogramAction_Dalitz(const DReaction* locReaction, size_t locStepIndex, deque<Particle_t> locXPIDs, deque<Particle_t> locYPIDs, bool locUseKinFitResultsFlag, unsigned int locNumXBins, double locMinX, double locMaxX, unsigned int locNumYBins, double locMinY, double locMaxY, string locActionUniqueString = "") :
495  DAnalysisAction(locReaction, "Hist_Dalitz", locUseKinFitResultsFlag, locActionUniqueString),
496  dStepIndex(locStepIndex), dXPIDs(locXPIDs), dYPIDs(locYPIDs), dNumXBins(locNumXBins), dNumYBins(locNumYBins),
497  dMinX(locMinX), dMaxX(locMaxX), dMinY(locMinY), dMaxY(locMaxY), dAnalysisUtilities(NULL) {}
498 
499  void Initialize(JEventLoop* locEventLoop);
500  void Reset_NewEvent(void)
501  {
502  DAnalysisAction::Reset_NewEvent();
503  dPreviousSourceObjects.clear();
504  }
505 
506  private:
507  bool Perform_Action(JEventLoop* locEventLoop, const DParticleCombo* locParticleCombo);
508 
510  deque<Particle_t> dXPIDs, dYPIDs;
511  unsigned int dNumXBins, dNumYBins;
512  double dMinX, dMaxX, dMinY, dMaxY;
513 
516 
517  set<set<set<pair<const JObject*, unsigned int> > > > dPreviousSourceObjects;
518 };
519 
521 {
522  public:
523  DHistogramAction_KinFitResults(const DReaction* locReaction, double locPullHistConfidenceLevelCut, string locActionUniqueString = "") :
524  DAnalysisAction(locReaction, "Hist_KinFitResults", true, locActionUniqueString),
525  dHistDependenceFlag(false), dNumConfidenceLevelBins(400), dNumPullBins(200), dNum2DPBins(200), dNum2DThetaBins(140), dNum2DPhiBins(180), dNum2DPullBins(100),
526  dNum2DConfidenceLevelBins(100), dNum2DBeamEBins(240), dMinPull(-4.0), dMaxPull(4.0), dMinP(0.0), dMaxP(10.0), dMinTheta(0.0), dMaxTheta(140.0),
527  dMinPhi(-180.0), dMaxPhi(180.0), dMinBeamE(0.0), dMaxBeamE(12.0), dPullHistConfidenceLevelCut(locPullHistConfidenceLevelCut) {}
528 
529  DHistogramAction_KinFitResults(const DReaction* locReaction, double locPullHistConfidenceLevelCut, bool locHistDependenceFlag, string locActionUniqueString = "") :
530  DAnalysisAction(locReaction, "Hist_KinFitResults", true, locActionUniqueString),
531  dHistDependenceFlag(locHistDependenceFlag), dNumConfidenceLevelBins(400), dNumPullBins(200), dNum2DPBins(200), dNum2DThetaBins(140), dNum2DPhiBins(180), dNum2DPullBins(100),
532  dNum2DConfidenceLevelBins(100), dNum2DBeamEBins(240), dMinPull(-4.0), dMaxPull(4.0), dMinP(0.0), dMaxP(10.0), dMinTheta(0.0), dMaxTheta(140.0),
533  dMinPhi(-180.0), dMaxPhi(180.0), dMinBeamE(0.0), dMaxBeamE(12.0), dPullHistConfidenceLevelCut(locPullHistConfidenceLevelCut) {}
534 
535  private:
537 
538  public:
539  unsigned int dNumConfidenceLevelBins, dNumPullBins, dNum2DPBins, dNum2DThetaBins, dNum2DPhiBins, dNum2DPullBins, dNum2DConfidenceLevelBins, dNum2DBeamEBins;
540  double dMinPull, dMaxPull, dMinP, dMaxP, dMinTheta, dMaxTheta, dMinPhi, dMaxPhi, dMinBeamE, dMaxBeamE;
541 
542  void Initialize(JEventLoop* locEventLoop);
543 
544  private:
545  bool Perform_Action(JEventLoop* locEventLoop, const DParticleCombo* locParticleCombo);
546 
547  void Create_ParticlePulls(string locFullROOTName, bool locIsChargedFlag, bool locIsInVertexFitFlag, bool locIsNeutralShowerFlag, int locStepIndex, Particle_t locPID);
548  void Get_DeltaBinningParams(DKinFitPullType locPullType, bool loc2DFlag, int& locNumBins, double& locMax);
549  void Get_HistNameTitle(DKinFitPullType locPullType, string locFullROOTName, int locVsKey, string& locHistName, string& locHistTitle);
550  double Get_Delta(DKinFitPullType locPullType, const DKinematicData* locMeasured, const DKinematicData* locKinFit);
551 
553  public:
554  unsigned int dNumDeltaPOverPBins = 400, dNumDeltaShowerEBins = 400, dNumDeltaThetaBins = 400, dNumDeltaPhiBins = 400, dNumDeltaVertexXYBins = 1000, dNumDeltaVertexZBins = 800, dNumDeltaTBins = 1000;
555  unsigned int dNum2DDeltaPOverPBins = 200, dNum2DDeltaShowerEBins = 200, dNum2DDeltaThetaBins = 200, dNum2DDeltaPhiBins = 200, dNum2DDeltaVertexXYBins = 500, dNum2DDeltaVertexZBins = 400, dNum2DDeltaTBins = 500;
556  double dMaxDeltaPOverP = 1.0, dMaxDeltaShowerE = 1.0, dMaxDeltaTheta = 10.0, dMaxDeltaPhi = 20.0, dMaxDeltaT = 5.0, dMaxDeltaVertexXY = 10.0, dMaxDeltaVertexZ = 40.0;
557 
558  private:
559  const DAnalysisUtilities* dAnalysisUtilities = nullptr;
560  DKinFitUtils_GlueX* dKinFitUtils = nullptr;
561 
562  //below maps: int is step index (-1 for beam), 2nd is particle
564  map<pair<int, Particle_t>, TH2I*> dHistMap_ConfidenceLevel_VsP;
565  map<pair<int, Particle_t>, TH2I*> dHistMap_ConfidenceLevel_VsTheta;
566  map<pair<int, Particle_t>, TH2I*> dHistMap_ConfidenceLevel_VsPhi;
567 
568  //due to my laziness, pull-type px/py/pz corresponds to delta-theta, delta-phi, delta-p/p
569  map<pair<int, Particle_t>, map<DKinFitPullType, TH1I*> > dHistMap_Deltas;
570  map<pair<int, Particle_t>, map<DKinFitPullType, TH2I*> > dHistMap_DeltasVsP;
571  map<pair<int, Particle_t>, map<DKinFitPullType, TH2I*> > dHistMap_DeltasVsTheta;
572  map<pair<int, Particle_t>, map<DKinFitPullType, TH2I*> > dHistMap_DeltasVsPhi;
573 
574  map<pair<int, Particle_t>, map<DKinFitPullType, TH1I*> > dHistMap_Pulls;
575  map<pair<int, Particle_t>, map<DKinFitPullType, TH2I*> > dHistMap_PullsVsP;
576  map<pair<int, Particle_t>, map<DKinFitPullType, TH2I*> > dHistMap_PullsVsTheta;
577  map<pair<int, Particle_t>, map<DKinFitPullType, TH2I*> > dHistMap_PullsVsPhi;
578 };
579 
581 {
582  public:
583  DHistogramAction_MissingTransverseMomentum(const DReaction* locReaction, bool locUseKinFitResultsFlag, unsigned int locNumPtBins = 0, double locMinPt = 0, double locMaxPt = 1.0, string locActionUniqueString = "") :
584  DAnalysisAction(locReaction, "Hist_MissingTransverseMomentum", locUseKinFitResultsFlag, locActionUniqueString),
585  dNumPtBins(locNumPtBins), dMinPt(locMinPt), dMaxPt(locMaxPt)
586  {
587  dAnalysisUtilities = NULL;
588  }
589 
590  void Initialize(JEventLoop* locEventLoop);
591  void Reset_NewEvent(void)
592  {
593  DAnalysisAction::Reset_NewEvent();
594  dPreviousSourceObjects.clear();
595  }
596 
597  private:
598  bool Perform_Action(JEventLoop* locEventLoop, const DParticleCombo* locParticleCombo);
599 
600  unsigned int dNumPtBins;
601  double dMinPt, dMaxPt;
604 
605  set<set<pair<const JObject*, unsigned int> > > dPreviousSourceObjects;
606 };
607 
608 #endif // _DHistogramActions_Reaction_
DHistogramAction_KinFitResults(const DReaction *locReaction, double locPullHistConfidenceLevelCut, string locActionUniqueString="")
set< pair< set< pair< const JObject *, unsigned int > >, const JObject * > > dPreviousSourceObjects_Beam
DKinFitPullType
deque< map< Particle_t, map< bool, TH2I * > > > dHistDeque_DeltaBetaVsP
const DAnalysisUtilities * dAnalysisUtilities
map< Particle_t, map< DetectorSystem_t, TH2I * > > dHistMap_dEdXFOMVsP
DHistogramAction_MissingTransverseMomentum(const DReaction *locReaction, bool locUseKinFitResultsFlag, unsigned int locNumPtBins=0, double locMinPt=0, double locMaxPt=1.0, string locActionUniqueString="")
deque< map< Particle_t, map< bool, TH2I * > > > dHistDeque_VertexYVsX
const DAnalysisUtilities * dAnalysisUtilities
deque< map< Particle_t, map< bool, TH2I * > > > dHistDeque_PhiVsTheta
const DAnalysisUtilities * dAnalysisUtilities
map< pair< int, Particle_t >, TH2I * > dHistMap_ConfidenceLevel_VsPhi
set< set< pair< const JObject *, unsigned int > > > dPreviousSourceObjects
DHistogramAction_MissingMassSquared(const DReaction *locReaction, bool locUseKinFitResultsFlag, unsigned int locNumMassBins, double locMinMassSq, double locMaxMassSq, string locActionUniqueString="")
DetectorSystem_t
Definition: GlueX.h:15
DHistogramAction_InvariantMass(const DReaction *locReaction, size_t locStepIndex, deque< Particle_t > locToIncludePIDs, bool locUseKinFitResultsFlag, unsigned int locNumMassBins, double locMinMass, double locMaxMass, string locActionUniqueString="")
Definition: GlueX.h:17
map< Particle_t, map< DetectorSystem_t, TH2I * > > dHistMap_EOverPVsTheta
DHistogramAction_MissingMass(const DReaction *locReaction, bool locUseKinFitResultsFlag, unsigned int locNumMassBins, double locMinMass, double locMaxMass, string locActionUniqueString="")
map< pair< int, Particle_t >, map< DKinFitPullType, TH1I * > > dHistMap_Pulls
DHistogramAction_TrackVertexComparison(const DReaction *locReaction, string locActionUniqueString="")
set< pair< size_t, pair< Particle_t, const JObject * > > > dPreviouslyHistogrammedParticles
DHistogramAction_KinFitResults(const DReaction *locReaction, double locPullHistConfidenceLevelCut, bool locHistDependenceFlag, string locActionUniqueString="")
deque< map< Particle_t, map< bool, TH1I * > > > dHistDeque_P
deque< map< Particle_t, TH1I * > > dHistDeque_TrackTToCommon
map< pair< int, Particle_t >, map< DKinFitPullType, TH2I * > > dHistMap_PullsVsTheta
map< Particle_t, map< DetectorSystem_t, TH2I * > > dHistMap_EOverPVsP
deque< map< Particle_t, TH1I * > > dHistDeque_TrackDOCAToCommon
DHistogramAction_MissingMassSquared(const DReaction *locReaction, int locMissingMassOffOfStepIndex, Particle_t locMissingMassOffOfPID, bool locUseKinFitResultsFlag, unsigned int locNumMassBins, double locMinMassSq, double locMaxMassSq, string locActionUniqueString="")
map< pair< int, Particle_t >, map< DKinFitPullType, TH2I * > > dHistMap_PullsVsP
Definition: GlueX.h:18
map< Particle_t, TH2I * > dHistMap_Ldiff_kpiVsP_DIRC
map< pair< int, Particle_t >, map< DKinFitPullType, TH1I * > > dHistMap_Deltas
set< set< pair< const JObject *, unsigned int > > > dPreviousSourceObjects
DHistogramAction_InvariantMass(const DReaction *locReaction, Particle_t locInitialPID, bool locUseKinFitResultsFlag, unsigned int locNumMassBins, double locMinMass, double locMaxMass, string locActionUniqueString="")
map< Particle_t, TH2I * > dHistMap_ThetaCVsP_DIRC
deque< map< pair< Particle_t, Particle_t >, TH2I * > > dHistDeque_TrackDeltaTVsP
map< Particle_t, TH2I * > dHistMap_Ldiff_pkVsP_DIRC
map< pair< int, Particle_t >, map< DKinFitPullType, TH2I * > > dHistMap_DeltasVsP
DHistogramAction_ParticleComboKinematics(const DReaction *locReaction, bool locUseKinFitResultsFlag, string locActionUniqueString="")
deque< map< Particle_t, map< bool, TH1I * > > > dHistDeque_Theta
set< pair< const DEventRFBunch *, pair< Particle_t, const JObject * > > > dPreviouslyHistogrammedParticles
map< Particle_t, TH1I * > dHistMap_PIDFOM
set< set< pair< const JObject *, unsigned int > > > dPreviousSourceObjects
map< Particle_t, map< DetectorSystem_t, TH2I * > > dHistMap_dEdXPullVsP
map< Particle_t, map< DetectorSystem_t, TH2I * > > dHistMap_dEdXVsP
map< Particle_t, TH1I * > dHistMap_NumPhotons_DIRC
DHistogramAction_MissingMass(const DReaction *locReaction, int locMissingMassOffOfStepIndex, Particle_t locMissingMassOffOfPID, bool locUseKinFitResultsFlag, unsigned int locNumMassBins, double locMinMass, double locMaxMass, string locActionUniqueString="")
deque< map< Particle_t, map< bool, TH1I * > > > dHistDeque_Phi
map< pair< int, Particle_t >, map< DKinFitPullType, TH2I * > > dHistMap_DeltasVsTheta
DHistogramAction_PID(const DReaction *locReaction, bool locUseKinFitResultsFlag=false, string locActionUniqueString="")
const DAnalysisUtilities * dAnalysisUtilities
map< Particle_t, map< DetectorSystem_t, TH2I * > > dHistMap_DeltaTVsP
map< pair< int, Particle_t >, map< DKinFitPullType, TH2I * > > dHistMap_DeltasVsPhi
DHistogramAction_Dalitz(const DReaction *locReaction, size_t locStepIndex, deque< Particle_t > locXPIDs, deque< Particle_t > locYPIDs, bool locUseKinFitResultsFlag, unsigned int locNumXBins, double locMinX, double locMaxX, unsigned int locNumYBins, double locMinY, double locMaxY, string locActionUniqueString="")
map< Particle_t, map< DetectorSystem_t, TH2I * > > dHistMap_DeltadEdXVsP
set< set< set< pair< const JObject *, unsigned int > > > > dPreviousSourceObjects
DHistogramAction_2DInvariantMass(const DReaction *locReaction, size_t locStepIndex, deque< Particle_t > locXPIDs, deque< Particle_t > locYPIDs, bool locUseKinFitResultsFlag, unsigned int locNumXBins, double locMinX, double locMaxX, unsigned int locNumYBins, double locMinY, double locMaxY, string locActionUniqueString="")
map< Particle_t, map< DetectorSystem_t, TH1I * > > dHistMap_Beta
set< set< pair< const JObject *, unsigned int > > > dPreviousSourceObjects
deque< map< Particle_t, map< bool, TH1I * > > > dHistDeque_VertexZ
set< set< set< pair< const JObject *, unsigned int > > > > dPreviousSourceObjects
map< Particle_t, map< DetectorSystem_t, TH2I * > > dHistMap_TimePullVsP
map< Particle_t, TH2I * > dHistMap_PVsTheta_NaNPIDFOM
deque< map< Particle_t, map< bool, TH2I * > > > dHistDeque_BetaVsP
DHistogramAction_MissingMass(const DReaction *locReaction, int locMissingMassOffOfStepIndex, deque< Particle_t > locMissingMassOffOfPIDs, bool locUseKinFitResultsFlag, unsigned int locNumMassBins, double locMinMass, double locMaxMass, string locActionUniqueString="")
map< pair< int, Particle_t >, TH2I * > dHistMap_ConfidenceLevel_VsTheta
deque< map< Particle_t, TH1I * > > dHistDeque_TrackZToCommon
DHistogramAction_MissingMassSquared(const DReaction *locReaction, int locMissingMassOffOfStepIndex, deque< Particle_t > locMissingMassOffOfPIDs, bool locUseKinFitResultsFlag, unsigned int locNumMassBins, double locMinMassSq, double locMaxMassSq, string locActionUniqueString="")
deque< map< Particle_t, map< bool, TH2I * > > > dHistDeque_PVsTheta
map< Particle_t, map< DetectorSystem_t, TH2I * > > dHistMap_BetaVsP
map< pair< int, Particle_t >, TH2I * > dHistMap_ConfidenceLevel_VsP
map< Particle_t, map< DetectorSystem_t, TH2I * > > dHistMap_DeltaBetaVsP
map< pair< Particle_t, Particle_t >, TH1I * > dHistMap_PIDFOMForTruePID
map< Particle_t, map< DetectorSystem_t, TH2I * > > dHistMap_TimeFOMVsP
Particle_t
Definition: particleType.h:12
map< Particle_t, TH2I * > dHistMap_PVsTheta_NegativeBeta
map< pair< int, Particle_t >, map< DKinFitPullType, TH2I * > > dHistMap_PullsVsPhi