Hall-D Software  alpha
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
DCutActions.h
Go to the documentation of this file.
1 #ifndef _DCutActions_
2 #define _DCutActions_
3 
4 #include <string>
5 #include <iostream>
6 #include <deque>
7 
8 #include "TRandom3.h"
9 #include "TMath.h"
10 
11 #include "JANA/JEventLoop.h"
12 
13 #include "particleType.h"
14 #include "TRACKING/DMCThrown.h"
17 
18 #include "KINFITTER/DKinFitter.h"
19 
25 
26 using namespace jana;
27 using namespace std;
28 
29 /*
30 //CLASSES DEFINED BELOW:
31 DCutAction_TruePID
32 DCutAction_AllTruePID
33 DCutAction_TrueBeamParticle
34 DCutAction_TrueCombo
35 DCutAction_ThrownTopology
36 DCutAction_BDTSignalCombo
37 
38 DCutAction_PIDFOM
39 DCutAction_CombinedPIDFOM
40 DCutAction_CombinedTrackingFOM
41 
42 DCutAction_MinTrackHits
43 DCutAction_AllTracksHaveDetectorMatch
44 DCutAction_ProductionVertexZ
45 DCutAction_AllVertexZ
46 DCutAction_MaxTrackDOCA
47 DCutAction_KinFitFOM
48 
49 DCutAction_MissingMass
50 DCutAction_MissingMassSquared
51 DCutAction_InvariantMass
52 
53 DCutAction_TransverseMomentum
54 DCutAction_TrackHitPattern
55 DCutAction_dEdx
56 DCutAction_BeamEnergy
57 DCutAction_TrackShowerEOverP
58 DCutAction_TrackFCALShowerEOverP
59 DCutAction_PIDDeltaT
60 DCutAction_PIDTimingBeta
61 DCutAction_NoPIDHit
62 
63 DCutAction_OneVertexKinFit
64 */
65 
67 {
68  public:
69  DCutAction_MinTrackHits(const DReaction* locReaction, unsigned int locMinTrackHits, string locActionUniqueString = "") :
70  DAnalysisAction(locReaction, "Cut_MinTrackHits", false, locActionUniqueString),
71  dMinTrackHits(locMinTrackHits), dParticleID(nullptr){}
72 
73  string Get_ActionName(void) const;
74  void Initialize(JEventLoop* locEventLoop);
75 
76  private:
77  bool Perform_Action(JEventLoop* locEventLoop, const DParticleCombo* locParticleCombo);
78 
79  unsigned int dMinTrackHits;
81 };
82 
84 {
85  //cut on whether the thrown topology matches the DReaction
86  //if locExclusiveMatchFlag = false: inclusive match: require the DReaction be a subset (or the total) of the thrown
87  public:
88  DCutAction_ThrownTopology(const DReaction* locReaction, bool locExclusiveMatchFlag, string locActionUniqueString = "") :
89  DAnalysisAction(locReaction, "Cut_ThrownTopology", false, locActionUniqueString),
90  dExclusiveMatchFlag(locExclusiveMatchFlag){}
91 
92  string Get_ActionName(void) const;
93  void Initialize(JEventLoop* locEventLoop);
94 
95  private:
96  bool Perform_Action(JEventLoop* locEventLoop, const DParticleCombo* locParticleCombo);
97 
98  bool dExclusiveMatchFlag; //if false: inclusive match
100 };
101 
103 {
104  public:
105  DCutAction_AllTracksHaveDetectorMatch(const DReaction* locReaction, string locActionUniqueString = "") :
106  DAnalysisAction(locReaction, "Cut_AllTracksHaveDetectorMatch", false, locActionUniqueString) {}
107 
108  inline void Initialize(JEventLoop* locEventLoop){}
109 
110  private:
111  bool Perform_Action(JEventLoop* locEventLoop, const DParticleCombo* locParticleCombo);
112 };
113 
115 {
116  public:
117  DCutAction_PIDFOM(const DReaction* locReaction, Particle_t locStepPID, Particle_t locParticleID, double locMinimumConfidenceLevel, bool locCutNDFZeroFlag = false, string locActionUniqueString = "") :
118  DAnalysisAction(locReaction, "Cut_PIDFOM", false, locActionUniqueString),
119  dStepPID(locStepPID), dParticleID(locParticleID), dMinimumConfidenceLevel(locMinimumConfidenceLevel), dCutNDFZeroFlag(locCutNDFZeroFlag){}
120 
121  string Get_ActionName(void) const;
122  inline void Initialize(JEventLoop* locEventLoop){}
123 
124  private:
125  bool Perform_Action(JEventLoop* locEventLoop, const DParticleCombo* locParticleCombo);
126 
131 };
132 
134 {
135  public:
136  DCutAction_EachPIDFOM(const DReaction* locReaction, double locMinimumConfidenceLevel, bool locCutNDFZeroFlag = false, string locActionUniqueString = "") :
137  DAnalysisAction(locReaction, "Cut_EachPIDFOM", false, locActionUniqueString),
138  dMinimumConfidenceLevel(locMinimumConfidenceLevel), dCutNDFZeroFlag(locCutNDFZeroFlag){}
139 
140  string Get_ActionName(void) const;
141  inline void Initialize(JEventLoop* locEventLoop){}
142 
143  private:
144  bool Perform_Action(JEventLoop* locEventLoop, const DParticleCombo* locParticleCombo);
145 
148 };
149 
151 {
152  public:
153  DCutAction_CombinedPIDFOM(const DReaction* locReaction, double locMinimumConfidenceLevel, bool locCutNDFZeroFlag = false, string locActionUniqueString = "") :
154  DAnalysisAction(locReaction, "Cut_CombinedPIDFOM", false, locActionUniqueString), dMinimumConfidenceLevel(locMinimumConfidenceLevel), dCutNDFZeroFlag(locCutNDFZeroFlag){}
155 
156  string Get_ActionName(void) const;
157  inline void Initialize(JEventLoop* locEventLoop){}
158 
159  private:
160  bool Perform_Action(JEventLoop* locEventLoop, const DParticleCombo* locParticleCombo);
161 
164 };
165 
167 {
168  public:
169  DCutAction_CombinedTrackingFOM(const DReaction* locReaction, double locMinimumConfidenceLevel, string locActionUniqueString = "") :
170  DAnalysisAction(locReaction, "Cut_CombinedTrackingFOM", false, locActionUniqueString), dMinimumConfidenceLevel(locMinimumConfidenceLevel){}
171 
172  string Get_ActionName(void) const;
173  inline void Initialize(JEventLoop* locEventLoop){}
174 
175  private:
176  bool Perform_Action(JEventLoop* locEventLoop, const DParticleCombo* locParticleCombo);
177 
179 };
180 
182 {
183  public:
184  DCutAction_TrueBeamParticle(const DReaction* locReaction, string locActionUniqueString = "") :
185  DAnalysisAction(locReaction, "Cut_TrueBeamParticle", false, locActionUniqueString){}
186 
187  inline void Initialize(JEventLoop* locEventLoop){}
188 
189  private:
190  bool Perform_Action(JEventLoop* locEventLoop, const DParticleCombo* locParticleCombo);
191 };
192 
194 {
195  public:
196  //if locExclusiveMatchFlag = false: inclusive match: require the DReaction be a subset (or the total) of the thrown
197  DCutAction_TrueCombo(const DReaction* locReaction, double locMinThrownMatchFOM, bool locExclusiveMatchFlag, string locActionUniqueString = "") :
198  DAnalysisAction(locReaction, "Cut_TrueCombo", false, locActionUniqueString),
199  dMinThrownMatchFOM(locMinThrownMatchFOM), dExclusiveMatchFlag(locExclusiveMatchFlag),
200  dCutAction_ThrownTopology(NULL), dCutAction_TrueBeamParticle(NULL){}
201 
202  void Initialize(JEventLoop* locEventLoop);
203 
204  ~DCutAction_TrueCombo(void);
205 
206  private:
207  bool Perform_Action(JEventLoop* locEventLoop, const DParticleCombo* locParticleCombo);
208 
211 
214 };
215 
217 {
218  public:
219  //if locExclusiveMatchFlag = false: inclusive match: require the DReaction be a subset (or the total) of the thrown
220 
221  //if locIncludeDecayingToReactionFlag = true, will test whether the thrown reaction could decay to the DReaction
222  //Note that resonances, phi's, and omega's are automatically decayed
223  //e.g. if DReaction or thrown is g, p -> pi+, pi-, omega, p; will instead treat it as g, p -> 2pi+, 2pi-, pi0, p (or whatever the omega decay products are)
224  //e.g. g, p -> pi+, pi0, K0, Lambda can decay to g, p -> 2pi+, 2pi-, pi0, p
225  //if locIncludeDecayingToReactionFlag = true, then it would be included as "Signal," if false, then background
226  //locIncludeDecayingToReactionFlag should be true UNLESS you are explicitly checking all possible reactions that could decay to your channel in your BDT
227  //e.g. could kinfit to g, p -> pi+, pi0, K0, Lambda and include it as a BDT variable
228 
229  DCutAction_BDTSignalCombo(const DReaction* locReaction, double locMinThrownMatchFOM, bool locExclusiveMatchFlag, bool locIncludeDecayingToReactionFlag, string locActionUniqueString = "") :
230  DAnalysisAction(locReaction, "Cut_BDTSignalCombo", false, locActionUniqueString),
231  dMinThrownMatchFOM(locMinThrownMatchFOM), dExclusiveMatchFlag(locExclusiveMatchFlag),
232  dIncludeDecayingToReactionFlag(locIncludeDecayingToReactionFlag), dCutAction_TrueBeamParticle(NULL){}
233 
234  void Initialize(JEventLoop* locEventLoop);
235 
237 
238  private:
239  bool Perform_Action(JEventLoop* locEventLoop, const DParticleCombo* locParticleCombo);
240 
244 
247 };
248 
250 {
251  public:
252  DCutAction_TruePID(const DReaction* locReaction, Particle_t locTruePID, Particle_t locInitialPID, double locMinThrownMatchFOM, string locActionUniqueString = "") :
253  DAnalysisAction(locReaction, "Cut_TruePID", false, locActionUniqueString),
254  dTruePID(locTruePID), dInitialPID(locInitialPID), dMinThrownMatchFOM(locMinThrownMatchFOM){}
255 
256  inline void Initialize(JEventLoop* locEventLoop){}
257 
258  private:
259  bool Perform_Action(JEventLoop* locEventLoop, const DParticleCombo* locParticleCombo);
260 
264 };
265 
267 {
268  public:
269  DCutAction_AllTruePID(const DReaction* locReaction, double locMinThrownMatchFOM, string locActionUniqueString = "") :
270  DAnalysisAction(locReaction, "Cut_AllTruePID", false, locActionUniqueString),
271  dMinThrownMatchFOM(locMinThrownMatchFOM){}
272 
273  inline void Initialize(JEventLoop* locEventLoop){}
274 
275  private:
276  bool Perform_Action(JEventLoop* locEventLoop, const DParticleCombo* locParticleCombo);
277 
279 };
280 
282 {
283  public:
284  DCutAction_ProductionVertexZ(const DReaction* locReaction, double locMinVertexZ, double locMaxVertexZ, string locActionUniqueString = "") :
285  DAnalysisAction(locReaction, "Cut_ProductionVertexZ", false, locActionUniqueString), dMinVertexZ(locMinVertexZ), dMaxVertexZ(locMaxVertexZ){}
286 
287  string Get_ActionName(void) const;
288  inline void Initialize(JEventLoop* locEventLoop){}
289 
290  private:
291  bool Perform_Action(JEventLoop* locEventLoop, const DParticleCombo* locParticleCombo);
292 
293  double dMinVertexZ;
294  double dMaxVertexZ;
295 };
296 
298 {
299  public:
300  DCutAction_AllVertexZ(const DReaction* locReaction, double locMinVertexZ, double locMaxVertexZ, string locActionUniqueString = "") :
301  DAnalysisAction(locReaction, "Cut_AllVertexZ", false, locActionUniqueString), dMinVertexZ(locMinVertexZ), dMaxVertexZ(locMaxVertexZ){}
302 
303  string Get_ActionName(void) const;
304  inline void Initialize(JEventLoop* locEventLoop){}
305 
306  private:
307  bool Perform_Action(JEventLoop* locEventLoop, const DParticleCombo* locParticleCombo);
308 
309  double dMinVertexZ;
310  double dMaxVertexZ;
311 };
312 
314 {
315  public:
316  DCutAction_MaxTrackDOCA(const DReaction* locReaction, Particle_t locInitialPID, double locMaxTrackDOCA, string locActionUniqueString = "") :
317  DAnalysisAction(locReaction, "Cut_MaxTrackDOCA", false, locActionUniqueString), dInitialPID(locInitialPID), dMaxTrackDOCA(locMaxTrackDOCA){}
318 
319  string Get_ActionName(void) const;
320  void Initialize(JEventLoop* locEventLoop);
321 
322  private:
323  bool Perform_Action(JEventLoop* locEventLoop, const DParticleCombo* locParticleCombo);
324 
328 };
329 
331 {
332  public:
333  DCutAction_KinFitFOM(const DReaction* locReaction, double locMinimumConfidenceLevel, string locActionUniqueString = "") :
334  DAnalysisAction(locReaction, "Cut_KinFitFOM", true, locActionUniqueString), dMinimumConfidenceLevel(locMinimumConfidenceLevel){}
335 
336  string Get_ActionName(void) const;
337  inline void Initialize(JEventLoop* locEventLoop){}
338 
339  private:
340  bool Perform_Action(JEventLoop* locEventLoop, const DParticleCombo* locParticleCombo);
341 
342  const string dKinFitName;
344 };
345 
347 {
348  public:
349  DCutAction_MissingMass(const DReaction* locReaction, bool locUseKinFitResultsFlag, double locMinimumMissingMass, double locMaximumMissingMass, string locActionUniqueString = "") :
350  DAnalysisAction(locReaction, "Cut_MissingMass", locUseKinFitResultsFlag, locActionUniqueString),
351  dMinimumMissingMass(locMinimumMissingMass), dMaximumMissingMass(locMaximumMissingMass), dMissingMassOffOfStepIndex(0){}
352 
353  //E.g. If:
354  //g, p -> K+, K+, Xi-
355  // Xi- -> pi-, Lambda
356  // Lambda -> (p), pi-
357  //And:
358  //locMissingMassOffOfStepIndex = 0, locMissingMassOffOfPIDs = K+, K+
359  //Then: Will cut missing-mass: g, p -> K+, K+, (X)
360  //Also:
361  //locMissingMassOffOfStepIndex = 1, locMissingMassOffOfPID = pi-
362  //Then: Will cut missing-mass: g, p -> K+, K+, pi- (from Xi- decay)
363  //But:
364  //locMissingMassOffOfStepIndex = 0, locMissingMassOffOfPIDs = K+
365  //Then: Will cut only missing-mass: g, p -> K+_1, (X) and NOT K+_2!!!
366  DCutAction_MissingMass(const DReaction* locReaction, int locMissingMassOffOfStepIndex, deque<Particle_t> locMissingMassOffOfPIDs, bool locUseKinFitResultsFlag, double locMinimumMissingMass, double locMaximumMissingMass, string locActionUniqueString = "") :
367  DAnalysisAction(locReaction, "Cut_MissingMass", locUseKinFitResultsFlag, locActionUniqueString),
368  dMinimumMissingMass(locMinimumMissingMass), dMaximumMissingMass(locMaximumMissingMass), dMissingMassOffOfStepIndex(locMissingMassOffOfStepIndex),
369  dMissingMassOffOfPIDs(locMissingMassOffOfPIDs) {}
370 
371  DCutAction_MissingMass(const DReaction* locReaction, int locMissingMassOffOfStepIndex, Particle_t locMissingMassOffOfPID, bool locUseKinFitResultsFlag, double locMinimumMissingMass, double locMaximumMissingMass, string locActionUniqueString = "") :
372  DAnalysisAction(locReaction, "Cut_MissingMass", locUseKinFitResultsFlag, locActionUniqueString),
373  dMinimumMissingMass(locMinimumMissingMass), dMaximumMissingMass(locMaximumMissingMass), dMissingMassOffOfStepIndex(locMissingMassOffOfStepIndex),
374  dMissingMassOffOfPIDs(deque<Particle_t>(1, locMissingMassOffOfPID)) {}
375 
376  string Get_ActionName(void) const;
377  void Initialize(JEventLoop* locEventLoop);
378 
379  private:
380  bool Perform_Action(JEventLoop* locEventLoop, const DParticleCombo* locParticleCombo);
381 
385  deque<Particle_t> dMissingMassOffOfPIDs;
386 
387  const DAnalysisUtilities* dAnalysisUtilities = nullptr;
388 };
389 
391 {
392  public:
393  DCutAction_MissingMassSquared(const DReaction* locReaction, bool locUseKinFitResultsFlag, double locMinimumMissingMassSq, double locMaximumMissingMassSq, string locActionUniqueString = "") :
394  DAnalysisAction(locReaction, "Cut_MissingMassSquared", locUseKinFitResultsFlag, locActionUniqueString),
395  dMinimumMissingMassSq(locMinimumMissingMassSq), dMaximumMissingMassSq(locMaximumMissingMassSq), dMissingMassOffOfStepIndex(0){}
396 
397  //E.g. If:
398  //g, p -> K+, K+, Xi-
399  // Xi- -> pi-, Lambda
400  // Lambda -> (p), pi-
401  //And:
402  //locMissingMassOffOfStepIndex = 0, locMissingMassOffOfPIDs = K+, K+
403  //Then: Will cut missing-mass: g, p -> K+, K+, (X)
404  //Also:
405  //locMissingMassOffOfStepIndex = 1, locMissingMassOffOfPID = pi-
406  //Then: Will cut missing-mass: g, p -> K+, K+, pi-
407  //But:
408  //locMissingMassOffOfStepIndex = 0, locMissingMassOffOfPIDs = K+
409  //Then: Will cut only if BOTH missing-mass: g, p -> K+_1, (X) AND g, p -> K+_2, (X) fail.
410  DCutAction_MissingMassSquared(const DReaction* locReaction, int locMissingMassOffOfStepIndex, deque<Particle_t> locMissingMassOffOfPIDs, bool locUseKinFitResultsFlag, double locMinimumMissingMassSq, double locMaximumMissingMassSq, string locActionUniqueString = "") :
411  DAnalysisAction(locReaction, "Cut_MissingMassSquared", locUseKinFitResultsFlag, locActionUniqueString),
412  dMinimumMissingMassSq(locMinimumMissingMassSq), dMaximumMissingMassSq(locMaximumMissingMassSq), dMissingMassOffOfStepIndex(locMissingMassOffOfStepIndex),
413  dMissingMassOffOfPIDs(locMissingMassOffOfPIDs) {}
414 
415  DCutAction_MissingMassSquared(const DReaction* locReaction, int locMissingMassOffOfStepIndex, Particle_t locMissingMassOffOfPID, bool locUseKinFitResultsFlag, double locMinimumMissingMassSq, double locMaximumMissingMassSq, string locActionUniqueString = "") :
416  DAnalysisAction(locReaction, "Cut_MissingMassSquared", locUseKinFitResultsFlag, locActionUniqueString),
417  dMinimumMissingMassSq(locMinimumMissingMassSq), dMaximumMissingMassSq(locMaximumMissingMassSq), dMissingMassOffOfStepIndex(locMissingMassOffOfStepIndex),
418  dMissingMassOffOfPIDs(deque<Particle_t>(1, locMissingMassOffOfPID)) {}
419 
420  string Get_ActionName(void) const;
421  void Initialize(JEventLoop* locEventLoop);
422 
423  private:
424  bool Perform_Action(JEventLoop* locEventLoop, const DParticleCombo* locParticleCombo);
425 
429  deque<Particle_t> dMissingMassOffOfPIDs;
430 
431  const DAnalysisUtilities* dAnalysisUtilities = nullptr;
432 };
433 
435 {
436  public:
437  DCutAction_InvariantMass(const DReaction* locReaction, Particle_t locInitialPID, bool locUseKinFitResultsFlag, double locMinMass, double locMaxMass, string locActionUniqueString = "") :
438  DAnalysisAction(locReaction, "Cut_InvariantMass", locUseKinFitResultsFlag, locActionUniqueString),
439  dInitialPID(locInitialPID), dStepIndex(-1), dToIncludePIDs(deque<Particle_t>()), dMinMass(locMinMass), dMaxMass(locMaxMass){}
440 
441  //e.g. if g, p -> pi+, pi-, p
442  //call with step = 0, PIDs = pi+, pi-, and will histogram rho mass
443  DCutAction_InvariantMass(const DReaction* locReaction, size_t locStepIndex, deque<Particle_t> locToIncludePIDs, bool locUseKinFitResultsFlag, double locMinMass, double locMaxMass, string locActionUniqueString = "") :
444  DAnalysisAction(locReaction, "Cut_InvariantMass", locUseKinFitResultsFlag, locActionUniqueString),
445  dInitialPID(Unknown), dStepIndex(locStepIndex), dToIncludePIDs(locToIncludePIDs), dMinMass(locMinMass), dMaxMass(locMaxMass){}
446 
447  string Get_ActionName(void) const;
448  void Initialize(JEventLoop* locEventLoop);
449 
450  private:
451  bool Perform_Action(JEventLoop* locEventLoop, const DParticleCombo* locParticleCombo);
452 
455  deque<Particle_t> dToIncludePIDs;
456 
457  double dMinMass;
458  double dMaxMass;
459  const DAnalysisUtilities* dAnalysisUtilities = nullptr;
460 };
461 
463 {
464  public:
465  DCutAction_GoodEventRFBunch(const DReaction* locReaction, bool locCutIfBadRFBunchFlag, string locActionUniqueString = "") :
466  DAnalysisAction(locReaction, "Cut_GoodEventRFBunch", false, locActionUniqueString),
467  dCutIfBadRFBunchFlag(locCutIfBadRFBunchFlag){}
468 
469  string Get_ActionName(void) const;
470  inline void Initialize(JEventLoop* locEventLoop){}
471 
472  private:
473  bool Perform_Action(JEventLoop* locEventLoop, const DParticleCombo* locParticleCombo);
474 
475  bool dCutIfBadRFBunchFlag; //if false, will cut if good rf bunch
476 };
477 
479 {
480  //cut on whether the thrown topology matches the DReaction
481  public:
482  DCutAction_TransverseMomentum(const DReaction* locReaction, double locMaxTransverseMomentum, string locActionUniqueString = "") :
483  DAnalysisAction(locReaction, "Cut_TransverseMomentum", false, locActionUniqueString),
484  dMaxTransverseMomentum(locMaxTransverseMomentum){}
485 
486  string Get_ActionName(void) const;
487  void Initialize(JEventLoop* locEventLoop){}
488 
489  private:
490  bool Perform_Action(JEventLoop* locEventLoop, const DParticleCombo* locParticleCombo);
491 
493 };
494 
496 {
497  //THIS CUT MAY THROW AWAY A LOT OF REAL TRACKS
498  // It is designed to try to get a relatively "pure" sample
499 
500  //In the CDC, in each super-layer between the innermost & outermost superlayers with hits, require that there be at least dMinHitRingsPerCDCSuperlayer hits
501  //cannot cut in the last superlayer, the track might be leaving the CDC
502  //cannot cut in the first superlayer, the track might have been produced in a decay at a detached vertex
503  //In the FDC, in each package up to the outermost package with hits, require that there be at least dMinHitPlanesPerFDCPackage hits
504  //cannot cut in the last package, the track might be leaving the FDC
505 
506  public:
507  DCutAction_TrackHitPattern(const DReaction* locReaction, unsigned int locMinHitRingsPerCDCSuperlayer = 2, unsigned int locMinHitPlanesPerFDCPackage = 4, string locActionUniqueString = "") :
508  DAnalysisAction(locReaction, "Cut_TrackHitPattern", false, locActionUniqueString),
509  dMinHitRingsPerCDCSuperlayer(locMinHitRingsPerCDCSuperlayer), dMinHitPlanesPerFDCPackage(locMinHitPlanesPerFDCPackage){}
510 
511  string Get_ActionName(void) const;
512  void Initialize(JEventLoop* locEventLoop){}
513 
514  bool Cut_TrackHitPattern(const DParticleID* locParticleID, const DKinematicData* locTrack) const;
515 
516  private:
517  bool Perform_Action(JEventLoop* locEventLoop, const DParticleCombo* locParticleCombo);
518 
521 };
522 
524 {
525  public:
526 
527  DCutAction_dEdx(const DReaction* locReaction, string locActionUniqueString = "") :
528  DAnalysisAction(locReaction, "Cut_dEdx", false, locActionUniqueString){}
529 
530  void Initialize(JEventLoop* locEventLoop);
531  bool Cut_dEdx(const DChargedTrackHypothesis* locChargedTrackHypothesis);
532 
533  map<Particle_t, pair<TF1*, TF1*>> dCutMap; //pair: first is lower bound, second is upper bound
534 
535  private:
536  bool Perform_Action(JEventLoop* locEventLoop, const DParticleCombo* locParticleCombo);
537 };
538 
540 {
541  public:
542 
543  DCutAction_BeamEnergy(const DReaction* locReaction, bool locUseKinFitResultsFlag, double locMinBeamEnergy, double locMaxBeamEnergy, string locActionUniqueString = "") :
544  DAnalysisAction(locReaction, "Cut_BeamEnergy", locUseKinFitResultsFlag, locActionUniqueString),
545  dMinBeamEnergy(locMinBeamEnergy), dMaxBeamEnergy(locMaxBeamEnergy){}
546 
547  void Initialize(JEventLoop* locEventLoop){};
548  string Get_ActionName(void) const;
549 
550  private:
551 
552  bool Perform_Action(JEventLoop* locEventLoop, const DParticleCombo* locParticleCombo);
553 
556 };
557 
559 {
560  // For all charged tracks except e+/e-, cuts those with FCAL E/p > input value
561  // For e+/e-, cuts those with FCAL E/p < input value
562  // Does not cut tracks without a matching FCAL shower
563 
564  public:
565 
566  DCutAction_TrackFCALShowerEOverP(const DReaction* locReaction, bool locUseKinFitResultsFlag, double locShowerEOverPCut, string locActionUniqueString = "") :
567  DAnalysisAction(locReaction, "Cut_TrackFCALShowerEOverP", locUseKinFitResultsFlag, locActionUniqueString),
568  dShowerEOverPCut(locShowerEOverPCut){}
569 
570  void Initialize(JEventLoop* locEventLoop){};
571  string Get_ActionName(void) const;
572 
573  private:
574 
575  bool Perform_Action(JEventLoop* locEventLoop, const DParticleCombo* locParticleCombo);
576 
578 };
579 
581 {
582  // For all charged tracks except e+/e-, cuts those with FCAL E/p > input value
583  // For e+/e-, cuts those with FCAL E/p < input value
584  // Does not cut tracks without a matching shower
585 
586  public:
587 
588  DCutAction_TrackShowerEOverP(const DReaction* locReaction, bool locUseKinFitResultsFlag, DetectorSystem_t locDetector, Particle_t locPID, double locShowerEOverPCut, string locActionUniqueString = "") :
589  DAnalysisAction(locReaction, "Cut_TrackShowerEOverP", locUseKinFitResultsFlag, locActionUniqueString),
590  dDetector(locDetector), dPID(locPID), dShowerEOverPCut(locShowerEOverPCut) {}
591 
592  void Initialize(JEventLoop* locEventLoop){};
593  string Get_ActionName(void) const;
594 
595  private:
596 
597  bool Perform_Action(JEventLoop* locEventLoop, const DParticleCombo* locParticleCombo);
598 
602 };
603 
605 {
606  //if dPID = Unknown, apply cut to all PIDs
607  //if dSystem = SYS_NULL, apply cut to all systems
608 
609  public:
610 
611  DCutAction_PIDDeltaT(const DReaction* locReaction, bool locUseKinFitResultsFlag, double locDeltaTCut, Particle_t locPID = Unknown, DetectorSystem_t locSystem = SYS_NULL, string locActionUniqueString = "") :
612  DAnalysisAction(locReaction, "Cut_PIDDeltaT", locUseKinFitResultsFlag, locActionUniqueString),
613  dDeltaTCut(locDeltaTCut), dPID(locPID), dSystem(locSystem){}
614 
615  void Initialize(JEventLoop* locEventLoop){};
616  string Get_ActionName(void) const;
617 
618  private:
619 
620  bool Perform_Action(JEventLoop* locEventLoop, const DParticleCombo* locParticleCombo);
621 
622  double dDeltaTCut;
625 };
626 
628 {
629  //if dPID = Unknown, apply cut to all PIDs
630  //if dSystem = SYS_NULL, apply cut to all systems
631  //RECOMMENDED ONLY FOR CUTTING ON NEUTRALS (e.g. separating photons and neutrons)
632 
633  public:
634 
635  DCutAction_PIDTimingBeta(const DReaction* locReaction, double locMinBeta, double locMaxBeta, Particle_t locPID = Unknown, DetectorSystem_t locSystem = SYS_NULL, string locActionUniqueString = "") :
636  DAnalysisAction(locReaction, "Cut_PIDTimingBeta", false, locActionUniqueString),
637  dMinBeta(locMinBeta), dMaxBeta(locMaxBeta), dPID(locPID), dSystem(locSystem){}
638 
639  void Initialize(JEventLoop* locEventLoop){};
640  string Get_ActionName(void) const;
641 
642  private:
643 
644  bool Perform_Action(JEventLoop* locEventLoop, const DParticleCombo* locParticleCombo);
645 
646  double dMinBeta;
647  double dMaxBeta;
650 };
651 
653 {
654  //if dPID = Unknown, apply cut to all PIDs
655 
656  public:
657 
658  DCutAction_NoPIDHit(const DReaction* locReaction, Particle_t locPID = Unknown, string locActionUniqueString = "") :
659  DAnalysisAction(locReaction, "Cut_NoPIDHit", false, locActionUniqueString),
660  dPID(locPID){}
661 
662  void Initialize(JEventLoop* locEventLoop){};
663  string Get_ActionName(void) const;
664 
665  private:
666 
667  bool Perform_Action(JEventLoop* locEventLoop, const DParticleCombo* locParticleCombo);
668 
670 };
671 
673 {
674  //does not cut vertex-z position if min > max
675  public:
676 
677  DCutAction_OneVertexKinFit(const DReaction* locReaction, double locMinKinFitCL = -1.0, double locMinVertexZ = 1.0, double locMaxVertexZ = 0.0, string locActionUniqueString = "") :
678  DAnalysisAction(locReaction, "Cut_OneVertexKinFit", false, locActionUniqueString),
679  dMinKinFitCL(locMinKinFitCL), dMinVertexZ(locMinVertexZ), dMaxVertexZ(locMaxVertexZ), dKinFitter(NULL), dKinFitUtils(NULL) {}
680 
681  void Initialize(JEventLoop* locEventLoop);
682 
684 
685  private:
686 
687  bool Perform_Action(JEventLoop* locEventLoop, const DParticleCombo* locParticleCombo);
688 
689  double dMinKinFitCL;
690  double dMinVertexZ;
691  double dMaxVertexZ;
692 
696 
700 };
701 
702 #endif // _DCutActions_
703 
DCutAction_AllTruePID(const DReaction *locReaction, double locMinThrownMatchFOM, string locActionUniqueString="")
Definition: DCutActions.h:269
void Initialize(JEventLoop *locEventLoop)
Definition: DCutActions.h:288
Particle_t dParticleID
Definition: DCutActions.h:128
DCutAction_TrueBeamParticle * dCutAction_TrueBeamParticle
Definition: DCutActions.h:245
void Initialize(JEventLoop *locEventLoop)
Definition: DCutActions.h:273
unsigned int dMinHitPlanesPerFDCPackage
Definition: DCutActions.h:520
void Initialize(JEventLoop *locEventLoop)
Definition: DCutActions.h:487
Definition: GlueX.h:16
DCutAction_PIDFOM(const DReaction *locReaction, Particle_t locStepPID, Particle_t locParticleID, double locMinimumConfidenceLevel, bool locCutNDFZeroFlag=false, string locActionUniqueString="")
Definition: DCutActions.h:117
void Initialize(JEventLoop *locEventLoop)
Definition: DCutActions.h:187
DCutAction_MinTrackHits(const DReaction *locReaction, unsigned int locMinTrackHits, string locActionUniqueString="")
Definition: DCutActions.h:69
DCutAction_InvariantMass(const DReaction *locReaction, size_t locStepIndex, deque< Particle_t > locToIncludePIDs, bool locUseKinFitResultsFlag, double locMinMass, double locMaxMass, string locActionUniqueString="")
Definition: DCutActions.h:443
double dMinThrownMatchFOM
Definition: DCutActions.h:263
const DAnalysisUtilities * dAnalysisUtilities
Definition: DCutActions.h:327
void Initialize(JEventLoop *locEventLoop)
Definition: DCutActions.h:108
DCutAction_BeamEnergy(const DReaction *locReaction, bool locUseKinFitResultsFlag, double locMinBeamEnergy, double locMaxBeamEnergy, string locActionUniqueString="")
Definition: DCutActions.h:543
DCutAction_TrackFCALShowerEOverP(const DReaction *locReaction, bool locUseKinFitResultsFlag, double locShowerEOverPCut, string locActionUniqueString="")
Definition: DCutActions.h:566
DCutAction_PIDDeltaT(const DReaction *locReaction, bool locUseKinFitResultsFlag, double locDeltaTCut, Particle_t locPID=Unknown, DetectorSystem_t locSystem=SYS_NULL, string locActionUniqueString="")
Definition: DCutActions.h:611
DetectorSystem_t
Definition: GlueX.h:15
deque< Particle_t > dMissingMassOffOfPIDs
Definition: DCutActions.h:385
const DAnalysisUtilities * dAnalysisUtilities
Definition: DCutActions.h:695
deque< Particle_t > dToIncludePIDs
Definition: DCutActions.h:455
void Initialize(JEventLoop *locEventLoop)
Definition: DCutActions.h:304
map< Particle_t, pair< TF1 *, TF1 * > > dCutMap
Definition: DCutActions.h:533
DCutAction_dEdx(const DReaction *locReaction, string locActionUniqueString="")
Definition: DCutActions.h:527
const DAnalysisUtilities * dAnalysisUtilities
Definition: DCutActions.h:99
DKinFitUtils_GlueX * dKinFitUtils
Definition: DCutActions.h:694
double dMinimumConfidenceLevel
Definition: DCutActions.h:146
void Initialize(JEventLoop *locEventLoop)
Definition: DCutActions.h:337
void Initialize(JEventLoop *locEventLoop)
Definition: DCutActions.h:157
DCutAction_TrueBeamParticle * dCutAction_TrueBeamParticle
Definition: DCutActions.h:213
DetectorSystem_t dSystem
Definition: DCutActions.h:649
DCutAction_MissingMass(const DReaction *locReaction, int locMissingMassOffOfStepIndex, Particle_t locMissingMassOffOfPID, bool locUseKinFitResultsFlag, double locMinimumMissingMass, double locMaximumMissingMass, string locActionUniqueString="")
Definition: DCutActions.h:371
DCutAction_TransverseMomentum(const DReaction *locReaction, double locMaxTransverseMomentum, string locActionUniqueString="")
Definition: DCutActions.h:482
DCutAction_MissingMassSquared(const DReaction *locReaction, int locMissingMassOffOfStepIndex, deque< Particle_t > locMissingMassOffOfPIDs, bool locUseKinFitResultsFlag, double locMinimumMissingMassSq, double locMaximumMissingMassSq, string locActionUniqueString="")
Definition: DCutActions.h:410
double dMinimumConfidenceLevel
Definition: DCutActions.h:343
DCutAction_GoodEventRFBunch(const DReaction *locReaction, bool locCutIfBadRFBunchFlag, string locActionUniqueString="")
Definition: DCutActions.h:465
void Initialize(JEventLoop *locEventLoop)
Definition: DCutActions.h:173
double dMinimumConfidenceLevel
Definition: DCutActions.h:129
void Initialize(JEventLoop *locEventLoop)
Definition: DCutActions.h:615
void Initialize(JEventLoop *locEventLoop)
Definition: DCutActions.h:592
DCutAction_MissingMass(const DReaction *locReaction, int locMissingMassOffOfStepIndex, deque< Particle_t > locMissingMassOffOfPIDs, bool locUseKinFitResultsFlag, double locMinimumMissingMass, double locMaximumMissingMass, string locActionUniqueString="")
Definition: DCutActions.h:366
DCutAction_MaxTrackDOCA(const DReaction *locReaction, Particle_t locInitialPID, double locMaxTrackDOCA, string locActionUniqueString="")
Definition: DCutActions.h:316
const DAnalysisUtilities * dAnalysisUtilities
Definition: DCutActions.h:246
DCutAction_PIDTimingBeta(const DReaction *locReaction, double locMinBeta, double locMaxBeta, Particle_t locPID=Unknown, DetectorSystem_t locSystem=SYS_NULL, string locActionUniqueString="")
Definition: DCutActions.h:635
deque< Particle_t > dMissingMassOffOfPIDs
Definition: DCutActions.h:429
DCutAction_CombinedPIDFOM(const DReaction *locReaction, double locMinimumConfidenceLevel, bool locCutNDFZeroFlag=false, string locActionUniqueString="")
Definition: DCutActions.h:153
const string dKinFitName
Definition: DCutActions.h:342
void Initialize(JEventLoop *locEventLoop)
Definition: DCutActions.h:547
DCutAction_MissingMass(const DReaction *locReaction, bool locUseKinFitResultsFlag, double locMinimumMissingMass, double locMaximumMissingMass, string locActionUniqueString="")
Definition: DCutActions.h:349
void Initialize(JEventLoop *locEventLoop)
Definition: DCutActions.h:512
DCutAction_ThrownTopology(const DReaction *locReaction, bool locExclusiveMatchFlag, string locActionUniqueString="")
Definition: DCutActions.h:88
DCutAction_ProductionVertexZ(const DReaction *locReaction, double locMinVertexZ, double locMaxVertexZ, string locActionUniqueString="")
Definition: DCutActions.h:284
DCutAction_InvariantMass(const DReaction *locReaction, Particle_t locInitialPID, bool locUseKinFitResultsFlag, double locMinMass, double locMaxMass, string locActionUniqueString="")
Definition: DCutActions.h:437
DCutAction_TrackHitPattern(const DReaction *locReaction, unsigned int locMinHitRingsPerCDCSuperlayer=2, unsigned int locMinHitPlanesPerFDCPackage=4, string locActionUniqueString="")
Definition: DCutActions.h:507
void Initialize(JEventLoop *locEventLoop)
Definition: DCutActions.h:141
DCutAction_EachPIDFOM(const DReaction *locReaction, double locMinimumConfidenceLevel, bool locCutNDFZeroFlag=false, string locActionUniqueString="")
Definition: DCutActions.h:136
Particle_t dTruePID
Definition: DCutActions.h:261
DCutAction_MissingMassSquared(const DReaction *locReaction, bool locUseKinFitResultsFlag, double locMinimumMissingMassSq, double locMaximumMissingMassSq, string locActionUniqueString="")
Definition: DCutActions.h:393
DCutAction_TrueBeamParticle(const DReaction *locReaction, string locActionUniqueString="")
Definition: DCutActions.h:184
void Initialize(JEventLoop *locEventLoop)
Definition: DCutActions.h:570
DCutAction_NoPIDHit(const DReaction *locReaction, Particle_t locPID=Unknown, string locActionUniqueString="")
Definition: DCutActions.h:658
unsigned int dMinHitRingsPerCDCSuperlayer
Definition: DCutActions.h:519
DCutAction_AllVertexZ(const DReaction *locReaction, double locMinVertexZ, double locMaxVertexZ, string locActionUniqueString="")
Definition: DCutActions.h:300
DCutAction_TrueCombo(const DReaction *locReaction, double locMinThrownMatchFOM, bool locExclusiveMatchFlag, string locActionUniqueString="")
Definition: DCutActions.h:197
DCutAction_TruePID(const DReaction *locReaction, Particle_t locTruePID, Particle_t locInitialPID, double locMinThrownMatchFOM, string locActionUniqueString="")
Definition: DCutActions.h:252
DCutAction_KinFitFOM(const DReaction *locReaction, double locMinimumConfidenceLevel, string locActionUniqueString="")
Definition: DCutActions.h:333
DCutAction_ThrownTopology * dCutAction_ThrownTopology
Definition: DCutActions.h:212
void Initialize(JEventLoop *locEventLoop)
Definition: DCutActions.h:122
DCutAction_MissingMassSquared(const DReaction *locReaction, int locMissingMassOffOfStepIndex, Particle_t locMissingMassOffOfPID, bool locUseKinFitResultsFlag, double locMinimumMissingMassSq, double locMaximumMissingMassSq, string locActionUniqueString="")
Definition: DCutActions.h:415
void Initialize(JEventLoop *locEventLoop)
Definition: DCutActions.h:639
DCutAction_TrackShowerEOverP(const DReaction *locReaction, bool locUseKinFitResultsFlag, DetectorSystem_t locDetector, Particle_t locPID, double locShowerEOverPCut, string locActionUniqueString="")
Definition: DCutActions.h:588
DCutAction_BDTSignalCombo(const DReaction *locReaction, double locMinThrownMatchFOM, bool locExclusiveMatchFlag, bool locIncludeDecayingToReactionFlag, string locActionUniqueString="")
Definition: DCutActions.h:229
unsigned int dMinTrackHits
Definition: DCutActions.h:79
void Initialize(JEventLoop *locEventLoop)
Definition: DCutActions.h:256
const DParticleID * dParticleID
Definition: DCutActions.h:80
DCutAction_OneVertexKinFit(const DReaction *locReaction, double locMinKinFitCL=-1.0, double locMinVertexZ=1.0, double locMaxVertexZ=0.0, string locActionUniqueString="")
Definition: DCutActions.h:677
DCutAction_AllTracksHaveDetectorMatch(const DReaction *locReaction, string locActionUniqueString="")
Definition: DCutActions.h:105
Particle_t dInitialPID
Definition: DCutActions.h:262
DetectorSystem_t dDetector
Definition: DCutActions.h:599
DCutAction_CombinedTrackingFOM(const DReaction *locReaction, double locMinimumConfidenceLevel, string locActionUniqueString="")
Definition: DCutActions.h:169
void Initialize(JEventLoop *locEventLoop)
Definition: DCutActions.h:470
Particle_t dStepPID
Definition: DCutActions.h:127
DetectorSystem_t dSystem
Definition: DCutActions.h:624
void Initialize(JEventLoop *locEventLoop)
Definition: DCutActions.h:662
Particle_t
Definition: particleType.h:12