Hall-D Software  alpha
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
DHistogramActions_Independent.h
Go to the documentation of this file.
1 #ifndef _DHistogramActions_Independent_
2 #define _DHistogramActions_Independent_
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 #include "DResourcePool.h"
23 
24 #include <DANA/DStatusBits.h>
25 #include "RF/DRFTime.h"
26 #include "RF/DRFTime_factory.h"
27 #include "RF/DRFDigiTime.h"
28 #include "RF/DRFTDCDigiTime.h"
29 #include "START_COUNTER/DSCHit.h"
30 #include "TAGGER/DTAGHHit.h"
31 #include "TAGGER/DTAGMHit.h"
32 #include "CDC/DCDCHit.h"
33 #include "FDC/DFDCHit.h"
34 #include "FDC/DFDCPseudo.h"
35 #include "TOF/DTOFPoint.h"
36 #include "TOF/DTOFHit.h"
37 #include "TOF/DTOFPaddleHit.h"
38 #include "BCAL/DBCALShower.h"
39 #include "BCAL/DBCALHit.h"
40 #include "FCAL/DFCALShower.h"
41 #include "FCAL/DFCALHit.h"
42 
46 #include "TRACKING/DMCThrown.h"
47 
48 #include "PID/DChargedTrack.h"
50 #include "PID/DNeutralParticle.h"
51 #include "PID/DNeutralShower.h"
52 #include "PID/DVertex.h"
53 #include "PID/DDetectorMatches.h"
55 #include "PID/DEventRFBunch.h"
56 
57 #include "ANALYSIS/DReaction.h"
63 #include "ANALYSIS/DCutActions.h"
65 
67 
68 #include "ANALYSIS/DCutActions.h"
69 #include "ANALYSIS/DSourceCombo.h"
70 
71 using namespace std;
72 using namespace jana;
73 
74 class DParticleCombo_factory_PreKinFit;
75 class DAnalysisResults;
76 
77 /*
78 REACTION-INDEPENDENT ACTIONS:
79  DHistogramAction_ObjectMemory
80  DHistogramAction_TrackMultiplicity
81  DHistogramAction_EventVertex
82  DHistogramAction_DetectedParticleKinematics
83  DHistogramAction_DetectorMatchParams
84  DHistogramAction_Neutrals
85  DHistogramAction_DetectorPID
86  DHistogramAction_DetectorMatching
87  DHistogramAction_Reconstruction
88  DHistogramAction_NumReconstructedObjects
89  DHistogramAction_TrackShowerErrors
90 */
91 
93 {
94  // This action SHOULD NOT be added to a DReaction. If it is ... it's not the end of the world, but it won't work.
95 
96  public:
97  DHistogramAction_ObjectMemory(string locActionUniqueString) :
98  DAnalysisAction(NULL, "Hist_ObjectMemory", false, locActionUniqueString),
99  dMaxNumEvents(50000), dEventCounter(0) {}
100 
102  DAnalysisAction(NULL, "Hist_ObjectMemory", false, ""),
103  dMaxNumEvents(50000), dEventCounter(0) {}
104 
105  void Initialize(JEventLoop* locEventLoop);
106 
107  void Read_MemoryUsage(double& vm_usage, double& resident_set);
108 
109  unsigned int dMaxNumEvents;
110 
111  private:
112  bool Perform_Action(JEventLoop* locEventLoop, const DParticleCombo* locParticleCombo = NULL);
113 
114  unsigned int dEventCounter; //not the same as event #: running with multiple threads over many files, possibly starting at event # != 1
115 
116  map<string, int> dBinMap;
117 
123 
129 
134 
139 
144 
147 
151 };
152 
154 {
155  public:
156 
157  //user can call any of these three constructors
158  DHistogramAction_Reconstruction(const DReaction* locReaction, string locActionUniqueString = "") :
159  DAnalysisAction(locReaction, "Hist_Reconstruction", false, locActionUniqueString),
160  dNumFCALTOFXYBins(260), dNumShowerEnergyBins(800), dNumPhiBins(720), dNum2DBCALZBins(450), dNum2DPhiBins(360), dNumHitEnergyBins(500),
161  dNum2DHitEnergyBins(250), dNum2DThetaBins(280), dNumFOMBins(500), dNum2DFOMBins(200), dNum2DPBins(250), dNum2DDeltaTBins(800),
162  dMinShowerEnergy(0.0), dMaxShowerEnergy(8.0), dMaxBCALP(1.5), dMinPhi(-180.0), dMaxPhi(180.0), dMinHitEnergy(0.0),
163  dMaxHitEnergy(50.0), dMinTheta(0.0), dMaxTheta(140.0), dMinP(0.0), dMaxP(10.0), dMinDeltaT(-20.0), dMaxDeltaT(20.0),
164  dGoodTrackFOM(5.73303E-7), dHighTrackFOM(0.98)
165  {
166  dTargetCenter.SetXYZ(0.0, 0.0, -9.9E9);
167  }
168 
169  DHistogramAction_Reconstruction(string locActionUniqueString) :
170  DAnalysisAction(NULL, "Hist_Reconstruction", false, locActionUniqueString),
171  dNumFCALTOFXYBins(260), dNumShowerEnergyBins(800), dNumPhiBins(720), dNum2DBCALZBins(450), dNum2DPhiBins(360), dNumHitEnergyBins(500),
172  dNum2DHitEnergyBins(250), dNum2DThetaBins(280), dNumFOMBins(500), dNum2DFOMBins(200), dNum2DPBins(250), dNum2DDeltaTBins(800),
173  dMinShowerEnergy(0.0), dMaxShowerEnergy(8.0), dMaxBCALP(1.5), dMinPhi(-180.0), dMaxPhi(180.0), dMinHitEnergy(0.0),
174  dMaxHitEnergy(50.0), dMinTheta(0.0), dMaxTheta(140.0), dMinP(0.0), dMaxP(10.0), dMinDeltaT(-20.0), dMaxDeltaT(20.0),
175  dGoodTrackFOM(5.73303E-7), dHighTrackFOM(0.98)
176  {
177  dTargetCenter.SetXYZ(0.0, 0.0, -9.9E9);
178  }
179 
181  DAnalysisAction(NULL, "Hist_Reconstruction", false, ""),
182  dNumFCALTOFXYBins(260), dNumShowerEnergyBins(800), dNumPhiBins(720), dNum2DBCALZBins(450), dNum2DPhiBins(360), dNumHitEnergyBins(500),
183  dNum2DHitEnergyBins(250), dNum2DThetaBins(280), dNumFOMBins(500), dNum2DFOMBins(200), dNum2DPBins(250), dNum2DDeltaTBins(800),
184  dMinShowerEnergy(0.0), dMaxShowerEnergy(8.0), dMaxBCALP(1.5), dMinPhi(-180.0), dMaxPhi(180.0), dMinHitEnergy(0.0),
185  dMaxHitEnergy(50.0), dMinTheta(0.0), dMaxTheta(140.0), dMinP(0.0), dMaxP(10.0), dMinDeltaT(-20.0), dMaxDeltaT(20.0),
186  dGoodTrackFOM(5.73303E-7), dHighTrackFOM(0.98)
187  {
188  dTargetCenter.SetXYZ(0.0, 0.0, -9.9E9);
189  }
190 
191  void Initialize(JEventLoop* locEventLoop);
192 
193  unsigned int dNumFCALTOFXYBins, dNumShowerEnergyBins, dNumPhiBins, dNum2DBCALZBins, dNum2DPhiBins;
194  unsigned int dNumHitEnergyBins, dNum2DHitEnergyBins, dNum2DThetaBins, dNumFOMBins, dNum2DFOMBins, dNum2DPBins, dNum2DDeltaTBins;
195  double dMinShowerEnergy, dMaxShowerEnergy, dMaxBCALP, dMinPhi, dMaxPhi, dMinHitEnergy;
196  double dMaxHitEnergy, dMinTheta, dMaxTheta, dMinP, dMaxP, dMinDeltaT, dMaxDeltaT;
197 
198  double dGoodTrackFOM, dHighTrackFOM;
199 
200  private:
201  bool Perform_Action(JEventLoop* locEventLoop, const DParticleCombo* locParticleCombo = NULL);
202 
204 
207 
211 
214 
219 
222 
234  map<int, TH2I*> dHistMap_PVsTheta_Candidates; //int is charge
235  map<int, TH2I*> dHistMap_PVsTheta_WireBased; //int is charge
236  map<int, TH2I*> dHistMap_PVsTheta_TimeBased; //int is charge
237  map<int, TH2I*> dHistMap_PVsTheta_TimeBased_GoodTrackFOM; //int is charge
238  map<int, TH2I*> dHistMap_PVsTheta_TimeBased_LowTrackFOM; //int is charge
239  map<int, TH2I*> dHistMap_PVsTheta_TimeBased_HighTrackFOM; //int is charge
240 
241  map<int, TH2I*> dHistMap_PVsTheta_GoodWireBased_GoodTimeBased; //int is charge
242  map<int, TH2I*> dHistMap_PVsTheta_GoodWireBased_BadTimeBased; //int is charge
243 
252 
255 };
256 
258 {
259  public:
260 
261  //user can call any of these three constructors
262  DHistogramAction_DetectorMatching(const DReaction* locReaction, string locActionUniqueString = "") :
263  DAnalysisAction(locReaction, "Hist_DetectorMatching", false, locActionUniqueString),
264  dNum2DThetaBins(280), dNumPBins(500), dNum2DPBins(250), dNum2DPhiBins(360), dNum2DDeltaPhiBins(300), dNum2DDeltaZBins(250), dNum2DTrackDOCABins(200),
265  dNumTrackDOCABins(400), dNumFCALTOFXYBins(260), dNum2DBCALZBins(450), dNum2DSCZBins(240), dNumTOFRBins(360), dMinP(0.0), dMaxP(10.0), dMinTheta(0.0), dMaxTheta(140.0),
266  dMinPhi(-180.0), dMaxPhi(180.0), dSCMatchMinDeltaPhi(-60.0), dSCMatchMaxDeltaPhi(60.0), dMinTrackDOCA(0.0), dMaxTrackMatchDOCA(20.0),
267  dMinDeltaPhi(-30.0), dMaxDeltaPhi(30.0), dMinDeltaZ(-50.0), dMaxDeltaZ(50.0),
268  dMinTrackingFOM(0.0027), dMinTOFPaddleMatchDistance(9.0), dMinHitRingsPerCDCSuperlayer(2), dMinHitPlanesPerFDCPackage(4) {}
269 
270  DHistogramAction_DetectorMatching(string locActionUniqueString) :
271  DAnalysisAction(NULL, "Hist_DetectorMatching", false, locActionUniqueString),
272  dNum2DThetaBins(280), dNumPBins(500), dNum2DPBins(250), dNum2DPhiBins(360), dNum2DDeltaPhiBins(300), dNum2DDeltaZBins(250), dNum2DTrackDOCABins(200),
273  dNumTrackDOCABins(400), dNumFCALTOFXYBins(260), dNum2DBCALZBins(450), dNum2DSCZBins(240), dNumTOFRBins(360), dMinP(0.0), dMaxP(10.0), dMinTheta(0.0), dMaxTheta(140.0),
274  dMinPhi(-180.0), dMaxPhi(180.0), dSCMatchMinDeltaPhi(-60.0), dSCMatchMaxDeltaPhi(60.0), dMinTrackDOCA(0.0), dMaxTrackMatchDOCA(20.0),
275  dMinDeltaPhi(-30.0), dMaxDeltaPhi(30.0), dMinDeltaZ(-50.0), dMaxDeltaZ(50.0),
276  dMinTrackingFOM(0.0027), dMinTOFPaddleMatchDistance(9.0), dMinHitRingsPerCDCSuperlayer(2), dMinHitPlanesPerFDCPackage(4) {}
277 
279  DAnalysisAction(NULL, "Hist_DetectorMatching", false, ""),
280  dNum2DThetaBins(280), dNumPBins(500), dNum2DPBins(250), dNum2DPhiBins(360), dNum2DDeltaPhiBins(300), dNum2DDeltaZBins(250), dNum2DTrackDOCABins(200),
281  dNumTrackDOCABins(400), dNumFCALTOFXYBins(260), dNum2DBCALZBins(450), dNum2DSCZBins(240), dNumTOFRBins(360), dMinP(0.0), dMaxP(10.0), dMinTheta(0.0), dMaxTheta(140.0),
282  dMinPhi(-180.0), dMaxPhi(180.0), dSCMatchMinDeltaPhi(-60.0), dSCMatchMaxDeltaPhi(60.0), dMinTrackDOCA(0.0), dMaxTrackMatchDOCA(20.0),
283  dMinDeltaPhi(-30.0), dMaxDeltaPhi(30.0), dMinDeltaZ(-50.0), dMaxDeltaZ(50.0),
284  dMinTrackingFOM(0.0027), dMinTOFPaddleMatchDistance(9.0), dMinHitRingsPerCDCSuperlayer(2), dMinHitPlanesPerFDCPackage(4) {}
285 
286  void Initialize(JEventLoop* locEventLoop);
287 
288  unsigned int dNum2DThetaBins, dNumPBins, dNum2DPBins, dNum2DPhiBins, dNum2DDeltaPhiBins, dNum2DDeltaZBins;
289  unsigned int dNum2DTrackDOCABins, dNumTrackDOCABins, dNumFCALTOFXYBins, dNum2DBCALZBins, dNum2DSCZBins, dNumTOFRBins;
290  double dMinP, dMaxP, dMinTheta, dMaxTheta, dMinPhi, dMaxPhi, dSCMatchMinDeltaPhi, dSCMatchMaxDeltaPhi, dMinTrackDOCA, dMaxTrackMatchDOCA;
291  double dMinDeltaPhi, dMaxDeltaPhi, dMinDeltaZ, dMaxDeltaZ;
292 
293  double dMinTrackingFOM, dMinTOFPaddleMatchDistance;
294  unsigned int dMinHitRingsPerCDCSuperlayer, dMinHitPlanesPerFDCPackage;
295 
296  private:
297  bool Perform_Action(JEventLoop* locEventLoop, const DParticleCombo* locParticleCombo = NULL);
298  void Fill_MatchingHists(JEventLoop* locEventLoop, bool locIsTimeBased);
299 
300  bool Get_Extrapolations(const DKinematicData* locTrack,map<DetectorSystem_t,vector<DTrackFitter::Extrapolation_t> >&extrapolations) const{
301  const DTrackTimeBased* locTrackTimeBased = dynamic_cast<const DTrackTimeBased*>(locTrack);
302  const DTrackWireBased* locTrackWireBased = dynamic_cast<const DTrackWireBased*>(locTrack);
303  if((locTrackTimeBased == NULL) && (locTrackWireBased == NULL))
304  return false;
305  (locTrackTimeBased != NULL) ? (extrapolations=locTrackTimeBased->extrapolations) : (extrapolations=locTrackWireBased->extrapolations);
306  return true;
307  }
308 
310 
311  //bool is time/wire-based for true/false
312  map<DetectorSystem_t, map<bool, TH2I*> > dHistMap_PVsTheta_HasHit;
313  map<DetectorSystem_t, map<bool, TH2I*> > dHistMap_PVsTheta_NoHit;
314  map<DetectorSystem_t, map<bool, TH2I*> > dHistMap_PhiVsTheta_HasHit;
315  map<DetectorSystem_t, map<bool, TH2I*> > dHistMap_PhiVsTheta_NoHit;
316 
319  map<bool, TH2I*> dHistMap_SCPaddleVsZ_HasHit;
320  map<bool, TH2I*> dHistMap_SCPaddleVsZ_NoHit;
323  map<bool, TH1I*> dHistMap_SCPaddle_NoseRegion_HasHit; //includes bend
324  map<bool, TH1I*> dHistMap_SCPaddle_NoseRegion_NoHit; //includes bend
325 
327  map<bool, TH2I*> dHistMap_TrackTOFYVsX_NoHit;
330  map<bool, TH1I*> dHistMap_TrackTOFR_HasHit;
331  map<bool, TH1I*> dHistMap_TrackTOFR_NoHit;
332  map<bool, TH1I*> dHistMap_TrackTOFP_HasHit;
333  map<bool, TH1I*> dHistMap_TrackTOFP_NoHit;
334 
337  map<bool, TH1I*> dHistMap_TrackFCALR_HasHit;
338  map<bool, TH1I*> dHistMap_TrackFCALR_NoHit;
339  map<bool, TH1I*> dHistMap_TrackFCALP_HasHit;
340  map<bool, TH1I*> dHistMap_TrackFCALP_NoHit;
343 
348 
351  map<bool, TH2I*> dHistMap_SCTrackDeltaPhiVsP;
352  map<bool, TH2I*> dHistMap_SCTrackDeltaPhiVsZ;
356  map<bool, TH2I*> dHistMap_BCALDeltaPhiVsP;
357  map<bool, TH2I*> dHistMap_BCALDeltaPhiVsZ;
358  map<bool, TH2I*> dHistMap_BCALDeltaZVsTheta;
359  map<bool, TH2I*> dHistMap_BCALDeltaZVsZ;
360 
361  //DTOFPaddle Matching
368 
369  //DTOFPoint Matching
378 };
379 
381 {
382  //Delta-t plots can be found in DHistogramAction_DetectorMatchParams
383  public:
384 
385  //user can call any of these three constructors
386  DHistogramAction_DetectorPID(const DReaction* locReaction, string locActionUniqueString = "") :
387  DAnalysisAction(locReaction, "Hist_DetectorPID", false, locActionUniqueString),
388  dNum2DPBins(250), dNum2DdEdxBins(400), dNum2DBetaBins(400), dNum2DBCALThetaBins(260), dNum2DFCALThetaBins(120), dNum2DEOverPBins(300),
389  dNum2DDeltaBetaBins(400), dNum2DDeltadEdxBins(300), dNum2DDeltaTBins(400), dNum2DPullBins(200), dNum2DFOMBins(200), dMinP(0.0), dMaxP(10.0), dMaxBCALP(3.0),
390  dMindEdX(0.0), dMaxdEdX(25.0), dMinBeta(-0.2), dMaxBeta(1.2), dMinBCALTheta(10.0), dMaxBCALTheta(140.0), dMinFCALTheta(0.0), dMaxFCALTheta(12.0),
391  dMinEOverP(0.0), dMaxEOverP(4.0), dMinDeltaBeta(-1.0), dMaxDeltaBeta(1.0), dMinDeltadEdx(-30.0), dMaxDeltadEdx(30.0), dMinDeltaT(-10.0), dMaxDeltaT(10.0),
392  dMinPull(-10.0), dMaxPull(10.0), dTrackSelectionTag("NotATag"), dShowerSelectionTag("NotATag"),
393  dDIRCNumPhotonsBins(100), dDIRCThetaCBins(100), dDIRCLikelihoodBins(100),
394  dDIRCMinNumPhotons(0), dDIRCMaxNumPhotons(100),
395  dDIRCMinThetaC(0.6), dDIRCMaxThetaC(1.0), dDIRCMinLikelihood(0), dDIRCMaxLikelihood(1000)
396  {
397  dFinalStatePIDs.push_back(PiPlus); dFinalStatePIDs.push_back(KPlus); dFinalStatePIDs.push_back(Proton);
398  dFinalStatePIDs.push_back(PiMinus); dFinalStatePIDs.push_back(KMinus);
399 
400  // used for indexing into maps
401  SYS_CDC_AMP = static_cast<DetectorSystem_t>(SYS_CDC + SYS_FDC);
402  }
403 
404  DHistogramAction_DetectorPID(string locActionUniqueString) :
405  DAnalysisAction(NULL, "Hist_DetectorPID", false, locActionUniqueString),
406  dNum2DPBins(250), dNum2DdEdxBins(400), dNum2DBetaBins(400), dNum2DBCALThetaBins(260), dNum2DFCALThetaBins(120), dNum2DEOverPBins(300),
407  dNum2DDeltaBetaBins(400), dNum2DDeltadEdxBins(300), dNum2DDeltaTBins(400), dNum2DPullBins(200), dNum2DFOMBins(200), dMinP(0.0), dMaxP(10.0), dMaxBCALP(3.0),
408  dMindEdX(0.0), dMaxdEdX(25.0), dMinBeta(-0.2), dMaxBeta(1.2), dMinBCALTheta(10.0), dMaxBCALTheta(140.0), dMinFCALTheta(0.0), dMaxFCALTheta(12.0),
409  dMinEOverP(0.0), dMaxEOverP(4.0), dMinDeltaBeta(-1.0), dMaxDeltaBeta(1.0), dMinDeltadEdx(-30.0), dMaxDeltadEdx(30.0), dMinDeltaT(-10.0), dMaxDeltaT(10.0),
410  dMinPull(-10.0), dMaxPull(10.0), dTrackSelectionTag("NotATag"), dShowerSelectionTag("NotATag"),
411  dDIRCNumPhotonsBins(100), dDIRCThetaCBins(100), dDIRCLikelihoodBins(100),
412  dDIRCMinNumPhotons(0), dDIRCMaxNumPhotons(100),
413  dDIRCMinThetaC(0.6), dDIRCMaxThetaC(1.0), dDIRCMinLikelihood(0), dDIRCMaxLikelihood(1000)
414  {
415  dFinalStatePIDs.push_back(PiPlus); dFinalStatePIDs.push_back(KPlus); dFinalStatePIDs.push_back(Proton);
416  dFinalStatePIDs.push_back(PiMinus); dFinalStatePIDs.push_back(KMinus);
417 
418  // used for indexing into maps
419  SYS_CDC_AMP = static_cast<DetectorSystem_t>(SYS_CDC + SYS_FDC);
420  }
421 
423  DAnalysisAction(NULL, "Hist_DetectorPID", false, ""),
424  dNum2DPBins(250), dNum2DdEdxBins(400), dNum2DBetaBins(400), dNum2DBCALThetaBins(260), dNum2DFCALThetaBins(120), dNum2DEOverPBins(300),
425  dNum2DDeltaBetaBins(400), dNum2DDeltadEdxBins(300), dNum2DDeltaTBins(400), dNum2DPullBins(200), dNum2DFOMBins(200), dMinP(0.0), dMaxP(10.0), dMaxBCALP(3.0),
426  dMindEdX(0.0), dMaxdEdX(25.0), dMinBeta(-0.2), dMaxBeta(1.2), dMinBCALTheta(10.0), dMaxBCALTheta(140.0), dMinFCALTheta(0.0), dMaxFCALTheta(12.0),
427  dMinEOverP(0.0), dMaxEOverP(4.0), dMinDeltaBeta(-1.0), dMaxDeltaBeta(1.0), dMinDeltadEdx(-30.0), dMaxDeltadEdx(30.0), dMinDeltaT(-10.0), dMaxDeltaT(10.0),
428  dMinPull(-10.0), dMaxPull(10.0), dTrackSelectionTag("NotATag"), dShowerSelectionTag("NotATag"),
429  dDIRCNumPhotonsBins(100), dDIRCThetaCBins(100), dDIRCLikelihoodBins(100),
430  dDIRCMinNumPhotons(0), dDIRCMaxNumPhotons(100),
431  dDIRCMinThetaC(0.6), dDIRCMaxThetaC(1.0), dDIRCMinLikelihood(0), dDIRCMaxLikelihood(1000)
432  {
433  dFinalStatePIDs.push_back(PiPlus); dFinalStatePIDs.push_back(KPlus); dFinalStatePIDs.push_back(Proton);
434  dFinalStatePIDs.push_back(PiMinus); dFinalStatePIDs.push_back(KMinus);
435 
436  // used for indexing into maps
437  SYS_CDC_AMP = static_cast<DetectorSystem_t>(SYS_CDC + SYS_FDC);
438  }
439 
440  void Initialize(JEventLoop* locEventLoop);
441 
442  unsigned int dNum2DPBins, dNum2DdEdxBins, dNum2DBetaBins, dNum2DBCALThetaBins, dNum2DFCALThetaBins;
443  unsigned int dNum2DEOverPBins, dNum2DDeltaBetaBins, dNum2DDeltadEdxBins, dNum2DDeltaTBins, dNum2DPullBins, dNum2DFOMBins;
444  double dMinP, dMaxP, dMaxBCALP, dMindEdX, dMaxdEdX, dMinBeta, dMaxBeta, dMinBCALTheta, dMaxBCALTheta, dMinFCALTheta, dMaxFCALTheta;
445  double dMinEOverP, dMaxEOverP, dMinDeltaBeta, dMaxDeltaBeta, dMinDeltadEdx, dMaxDeltadEdx, dMinDeltaT, dMaxDeltaT, dMinPull, dMaxPull;
446  string dTrackSelectionTag, dShowerSelectionTag; //In Initialize, will default to "PreSelect" unless otherwise specified
447  unsigned int dDIRCNumPhotonsBins, dDIRCThetaCBins, dDIRCLikelihoodBins, dDIRCMinNumPhotons, dDIRCMaxNumPhotons;
448  double dDIRCMinThetaC, dDIRCMaxThetaC;
449  double dDIRCMinLikelihood, dDIRCMaxLikelihood;
450 
451  private:
452  bool Perform_Action(JEventLoop* locEventLoop, const DParticleCombo* locParticleCombo = NULL);
453 
455  vector<Particle_t> dFinalStatePIDs;
456 
457  //int is charge: -1, 0, 1
458  map<int, TH2I*> dHistMap_BCALEOverPVsP;
459  map<int, TH2I*> dHistMap_BCALEOverPVsTheta;
460 
461  map<int, TH2I*> dHistMap_FCALEOverPVsP;
462  map<int, TH2I*> dHistMap_FCALEOverPVsTheta;
463 
464  map<DetectorSystem_t, map<int, TH2I*> > dHistMap_dEdXVsP;
465  map<DetectorSystem_t, map<Particle_t, TH2I*> > dHistMap_DeltadEdXVsP;
466 // map<DetectorSystem_t, map<Particle_t, TH2I*> > dHistMap_dEdXPullVsP;
467 // map<DetectorSystem_t, map<Particle_t, TH2I*> > dHistMap_dEdXFOMVsP;
468 
469  map<DetectorSystem_t, map<int, TH2I*> > dHistMap_BetaVsP;
470  map<DetectorSystem_t, map<Particle_t, TH2I*> > dHistMap_DeltaBetaVsP;
471 
472  map<DetectorSystem_t, map<Particle_t, TH2I*> > dHistMap_DeltaTVsP;
473 // map<DetectorSystem_t, map<Particle_t, TH2I*> > dHistMap_TimePullVsP;
474 // map<DetectorSystem_t, map<Particle_t, TH2I*> > dHistMap_TimeFOMVsP;
475 
476  map<Particle_t, TH1I*> dHistMap_NumPhotons_DIRC;
477  map<Particle_t, TH2I*> dHistMap_ThetaCVsP_DIRC;
478  map<Particle_t, TH2I*> dHistMap_Ldiff_kpiVsP_DIRC;
479  map<Particle_t, TH2I*> dHistMap_Ldiff_pkVsP_DIRC;
480 };
481 
483 {
484  public:
485 
486  //user can call any of these three constructors
487  DHistogramAction_Neutrals(const DReaction* locReaction, string locActionUniqueString = "") :
488  DAnalysisAction(locReaction, "Hist_Neutrals", false, locActionUniqueString),
489  dNumTrackDOCABins(400), dNumDeltaPhiBins(600), dNumShowerEnergyBins(800), dNumDeltaTBins(400), dNum2DShowerEnergyBins(400),
490  dNum2DDeltaTBins(400), dNum2DBCALZBins(450), dMinTrackDOCA(0.0), dMaxTrackDOCA(400.0), dMinDeltaPhi(-30.0), dMaxDeltaPhi(30.0),
491  dMinShowerEnergy(0.0), dMaxShowerEnergy(8.0), dMaxBCALP(1.5), dMinDeltaT(-10.0), dMaxDeltaT(10.0)
492  {
493  dTargetCenter.SetXYZ(0.0, 0.0, -9.9E9);
494  }
495 
496  DHistogramAction_Neutrals(string locActionUniqueString) :
497  DAnalysisAction(NULL, "Hist_Neutrals", false, locActionUniqueString),
498  dNumTrackDOCABins(400), dNumDeltaPhiBins(600), dNumShowerEnergyBins(800), dNumDeltaTBins(400), dNum2DShowerEnergyBins(400),
499  dNum2DDeltaTBins(400), dNum2DBCALZBins(450), dMinTrackDOCA(0.0), dMaxTrackDOCA(400.0), dMinDeltaPhi(-30.0), dMaxDeltaPhi(30.0),
500  dMinShowerEnergy(0.0), dMaxShowerEnergy(8.0), dMaxBCALP(1.5), dMinDeltaT(-10.0), dMaxDeltaT(10.0)
501  {
502  dTargetCenter.SetXYZ(0.0, 0.0, -9.9E9);
503  }
504 
506  DAnalysisAction(NULL, "Hist_Neutrals", false, ""),
507  dNumTrackDOCABins(400), dNumDeltaPhiBins(600), dNumShowerEnergyBins(800), dNumDeltaTBins(400), dNum2DShowerEnergyBins(400),
508  dNum2DDeltaTBins(400), dNum2DBCALZBins(450), dMinTrackDOCA(0.0), dMaxTrackDOCA(400.0), dMinDeltaPhi(-30.0), dMaxDeltaPhi(30.0),
509  dMinShowerEnergy(0.0), dMaxShowerEnergy(8.0), dMaxBCALP(1.5), dMinDeltaT(-10.0), dMaxDeltaT(10.0)
510  {
511  dTargetCenter.SetXYZ(0.0, 0.0, -9.9E9);
512  }
513 
514  void Initialize(JEventLoop* locEventLoop);
515 
516  unsigned int dNumTrackDOCABins, dNumDeltaPhiBins, dNumShowerEnergyBins, dNumDeltaTBins, dNum2DShowerEnergyBins, dNum2DDeltaTBins, dNum2DBCALZBins;
517  double dMinTrackDOCA, dMaxTrackDOCA, dMinDeltaPhi, dMaxDeltaPhi, dMinShowerEnergy, dMaxShowerEnergy, dMaxBCALP, dMinDeltaT, dMaxDeltaT;
518 
519  private:
520  bool Perform_Action(JEventLoop* locEventLoop, const DParticleCombo* locParticleCombo = NULL);
521 
523 
531 
536 };
537 
539 {
540  public:
541 
542  //user can call any of these three constructors
543  DHistogramAction_DetectorMatchParams(const DReaction* locReaction, string locActionUniqueString = "") :
544  DAnalysisAction(locReaction, "Hist_DetectorMatchParams", false, locActionUniqueString),
545  dNumShowerEnergyBins(800), dNumShowerDepthBins(400), dNum2DPBins(250), dNum2DThetaBins(280), dNum2DHitEnergyBins(250),
546  dMinShowerEnergy(0.0), dMaxShowerEnergy(8.0), dMaxBCALP(1.5), dMinShowerDepth(0.0), dMaxShowerDepth(20.0), dMinP(0.0), dMaxP(10.0),
547  dMinTheta(0.0), dMaxTheta(140.0), dMinHitEnergy(0.0), dMaxHitEnergy(50.0), dNum2DPhiBins(360), dMinPhi(-180.0), dMaxPhi(180.0),
548  dTrackSelectionTag("NotATag")
549  {
550  dTrackingPIDs.push_back(PiPlus); dTrackingPIDs.push_back(KPlus); dTrackingPIDs.push_back(Proton);
551  dTrackingPIDs.push_back(PiMinus); dTrackingPIDs.push_back(KMinus);
552  dTargetCenterZ = -9.9E9;
553  }
554 
555  DHistogramAction_DetectorMatchParams(string locActionUniqueString) :
556  DAnalysisAction(NULL, "Hist_DetectorMatchParams", false, locActionUniqueString),
557  dNumShowerEnergyBins(800), dNumShowerDepthBins(400), dNum2DPBins(250), dNum2DThetaBins(280), dNum2DHitEnergyBins(250),
558  dMinShowerEnergy(0.0), dMaxShowerEnergy(8.0), dMaxBCALP(1.5), dMinShowerDepth(0.0), dMaxShowerDepth(20.0), dMinP(0.0), dMaxP(10.0),
559  dMinTheta(0.0), dMaxTheta(140.0), dMinHitEnergy(0.0), dMaxHitEnergy(50.0), dNum2DPhiBins(360), dMinPhi(-180.0), dMaxPhi(180.0),
560  dTrackSelectionTag("NotATag")
561  {
562  dTrackingPIDs.push_back(PiPlus); dTrackingPIDs.push_back(KPlus); dTrackingPIDs.push_back(Proton);
563  dTrackingPIDs.push_back(PiMinus); dTrackingPIDs.push_back(KMinus);
564  dTargetCenterZ = -9.9E9;
565  }
566 
568  DAnalysisAction(NULL, "Hist_DetectorMatchParams", false, ""),
569  dNumShowerEnergyBins(800), dNumShowerDepthBins(400), dNum2DPBins(250), dNum2DThetaBins(280), dNum2DHitEnergyBins(250),
570  dMinShowerEnergy(0.0), dMaxShowerEnergy(8.0), dMaxBCALP(1.5), dMinShowerDepth(0.0), dMaxShowerDepth(20.0), dMinP(0.0), dMaxP(10.0),
571  dMinTheta(0.0), dMaxTheta(140.0), dMinHitEnergy(0.0), dMaxHitEnergy(50.0), dNum2DPhiBins(360), dMinPhi(-180.0), dMaxPhi(180.0),
572  dTrackSelectionTag("NotATag")
573  {
574  dTrackingPIDs.push_back(PiPlus); dTrackingPIDs.push_back(KPlus); dTrackingPIDs.push_back(Proton);
575  dTrackingPIDs.push_back(PiMinus); dTrackingPIDs.push_back(KMinus);
576  dTargetCenterZ = -9.9E9;
577  }
578 
579  void Initialize(JEventLoop* locEventLoop);
580 
581  unsigned int dNumShowerEnergyBins, dNumShowerDepthBins, dNum2DPBins, dNum2DThetaBins, dNum2DHitEnergyBins;
582  double dMinShowerEnergy, dMaxShowerEnergy, dMaxBCALP, dMinShowerDepth, dMaxShowerDepth, dMinP, dMaxP;
583  double dMinTheta, dMaxTheta, dMinHitEnergy, dMaxHitEnergy, dNum2DPhiBins, dMinPhi, dMaxPhi;
584  string dTrackSelectionTag; //In Initialize, will default to "PreSelect" unless otherwise specified
585 
586  vector<Particle_t> dTrackingPIDs;
587 
588  private:
589  bool Perform_Action(JEventLoop* locEventLoop, const DParticleCombo* locParticleCombo = NULL);
590  void Fill_Hists(JEventLoop* locEventLoop, bool locUseTruePIDFlag);
591 
593 
594  //Delta-T: shower/hit_t - tflight - RF_t (if present)
595  //bool in pair: true/false for true/best-reconstructed PID
596  //int in pair: -2 for q-, -1 for q+, 0+ for Particle_t
597 
598  map<pair<int, bool>, TH1I*> dHistMap_BCALShowerEnergy;
599  map<pair<int, bool>, TH1I*> dHistMap_BCALShowerTrackDepth;
600  map<pair<int, bool>, TH2I*> dHistMap_BCALShowerTrackDepthVsP;
601 
602  map<pair<int, bool>, TH1I*> dHistMap_FCALShowerEnergy;
603  map<pair<int, bool>, TH1I*> dHistMap_FCALShowerTrackDepth;
604  map<pair<int, bool>, TH2I*> dHistMap_FCALShowerTrackDepthVsP;
605 
606  map<pair<int, bool>, TH2I*> dHistMap_SCEnergyVsTheta;
607  map<pair<int, bool>, TH2I*> dHistMap_SCPhiVsTheta;
608 };
609 
611 {
612  public:
613  DHistogramAction_EventVertex(const DReaction* locReaction, string locActionUniqueString = "") :
614  DAnalysisAction(locReaction, "Hist_EventVertex", false, locActionUniqueString),
615  dNumConfidenceLevelBins(400), dNumPullBins(200), dNumVertexZBins(750), dNumTBins(400), dNumRFTBins(300), dNumVertexXYBins(400),
616  dMinVertexZ(-50.0), dMaxVertexZ(200.0), dMinT(-20.0), dMaxT(20.0), dMinVertexXY(-10.0), dMaxVertexXY(10.0),
617  dMinPull(-4.0), dMaxPull(4.0), dPullHistConfidenceLevelCut(0.05), dTrackSelectionTag("NotATag")
618  {
619  dFinalStatePIDs.push_back(PiPlus); dFinalStatePIDs.push_back(Proton); dFinalStatePIDs.push_back(PiMinus);
620  }
621 
622  DHistogramAction_EventVertex(string locActionUniqueString) :
623  DAnalysisAction(NULL, "Hist_EventVertex", false, locActionUniqueString),
624  dNumConfidenceLevelBins(400), dNumPullBins(200), dNumVertexZBins(750), dNumTBins(400), dNumRFTBins(300), dNumVertexXYBins(400),
625  dMinVertexZ(-50.0), dMaxVertexZ(200.0), dMinT(-20.0), dMaxT(20.0), dMinVertexXY(-10.0), dMaxVertexXY(10.0),
626  dMinPull(-4.0), dMaxPull(4.0), dPullHistConfidenceLevelCut(0.05), dTrackSelectionTag("NotATag")
627  {
628  dFinalStatePIDs.push_back(PiPlus); dFinalStatePIDs.push_back(Proton); dFinalStatePIDs.push_back(PiMinus);
629  }
630 
632  DAnalysisAction(NULL, "Hist_EventVertex", false, ""),
633  dNumConfidenceLevelBins(400), dNumPullBins(200), dNumVertexZBins(750), dNumTBins(400), dNumRFTBins(300), dNumVertexXYBins(400),
634  dMinVertexZ(-50.0), dMaxVertexZ(200.0), dMinT(-20.0), dMaxT(20.0), dMinVertexXY(-10.0), dMaxVertexXY(10.0),
635  dMinPull(-4.0), dMaxPull(4.0), dPullHistConfidenceLevelCut(0.05), dTrackSelectionTag("NotATag")
636  {
637  dFinalStatePIDs.push_back(PiPlus); dFinalStatePIDs.push_back(Proton); dFinalStatePIDs.push_back(PiMinus);
638  }
639 
640  unsigned int dNumConfidenceLevelBins, dNumPullBins, dNumVertexZBins, dNumTBins, dNumRFTBins, dNumVertexXYBins;
641  double dMinVertexZ, dMaxVertexZ, dMinT, dMaxT, dMinVertexXY, dMaxVertexXY, dMinPull, dMaxPull;
642 
644  string dTrackSelectionTag; //In Initialize, will default to "PreSelect" unless otherwise specified
645 
646  deque<Particle_t> dFinalStatePIDs;
647 
648  void Initialize(JEventLoop* locEventLoop);
649 
650  private:
651  bool Perform_Action(JEventLoop* locEventLoop, const DParticleCombo* locParticleCombo);
652 
657 
661 
663  map<Particle_t, map<DKinFitPullType, TH1I*> > dHistMap_KinFitPulls;
664 };
665 
667 {
668  public:
669  DHistogramAction_DetectedParticleKinematics(const DReaction* locReaction, string locActionUniqueString = "") :
670  DAnalysisAction(locReaction, "Hist_DetectedParticleKinematics", false, locActionUniqueString),
671  dMinPIDFOM(5.73303E-7), dNumPBins(600), dNumThetaBins(560), dNumPhiBins(360), dNumVertexZBins(750), dNumTBins(400),
672  dNumVertexXYBins(400), dNumBetaBins(400), dNum2DDeltaBetaBins(400), dNum2DPBins(300), dNum2DThetaBins(140), dNum2DPhiBins(180), dNumBeamEBins(650),
673  dMinT(-20.0), dMaxT(20.0), dMinP(0.0), dMaxP(12.0), dMaxBeamE(13.0), dMinTheta(0.0), dMaxTheta(140.0), dMinPhi(-180.0), dMaxPhi(180.0), dMinVertexZ(-50.0), dMaxVertexZ(200.0),
674  dMinVertexXY(-10.0), dMaxVertexXY(10.0), dMinBeta(-0.2), dMaxBeta(1.2), dMinDeltaBeta(-1.0), dMaxDeltaBeta(1.0),
675  dTrackSelectionTag("NotATag"), dShowerSelectionTag("NotATag")
676  {
677  dFinalStatePIDs.push_back(Gamma);
678  dFinalStatePIDs.push_back(PiPlus); dFinalStatePIDs.push_back(KPlus); dFinalStatePIDs.push_back(Proton);
679  dFinalStatePIDs.push_back(PiMinus); dFinalStatePIDs.push_back(KMinus);
680  }
681 
682  DHistogramAction_DetectedParticleKinematics(string locActionUniqueString) :
683  DAnalysisAction(NULL, "Hist_DetectedParticleKinematics", false, locActionUniqueString),
684  dMinPIDFOM(5.73303E-7), dNumPBins(600), dNumThetaBins(560), dNumPhiBins(360), dNumVertexZBins(750), dNumTBins(400),
685  dNumVertexXYBins(400), dNumBetaBins(400), dNum2DDeltaBetaBins(400), dNum2DPBins(300), dNum2DThetaBins(140), dNum2DPhiBins(180), dNumBeamEBins(650),
686  dMinT(-20.0), dMaxT(20.0), dMinP(0.0), dMaxP(12.0), dMaxBeamE(13.0), dMinTheta(0.0), dMaxTheta(140.0), dMinPhi(-180.0), dMaxPhi(180.0), dMinVertexZ(-50.0), dMaxVertexZ(200.0),
687  dMinVertexXY(-10.0), dMaxVertexXY(10.0), dMinBeta(-0.2), dMaxBeta(1.2), dMinDeltaBeta(-1.0), dMaxDeltaBeta(1.0),
688  dTrackSelectionTag("NotATag"), dShowerSelectionTag("NotATag")
689  {
690  dFinalStatePIDs.push_back(Gamma);
691  dFinalStatePIDs.push_back(PiPlus); dFinalStatePIDs.push_back(KPlus); dFinalStatePIDs.push_back(Proton);
692  dFinalStatePIDs.push_back(PiMinus); dFinalStatePIDs.push_back(KMinus);
693  }
694 
696  DAnalysisAction(NULL, "Hist_DetectedParticleKinematics", false, ""),
697  dMinPIDFOM(5.73303E-7), dNumPBins(600), dNumThetaBins(560), dNumPhiBins(360), dNumVertexZBins(750), dNumTBins(400),
698  dNumVertexXYBins(400), dNumBetaBins(400), dNum2DDeltaBetaBins(400), dNum2DPBins(300), dNum2DThetaBins(140), dNum2DPhiBins(180), dNumBeamEBins(650),
699  dMinT(-20.0), dMaxT(20.0), dMinP(0.0), dMaxP(12.0), dMaxBeamE(13.0), dMinTheta(0.0), dMaxTheta(140.0), dMinPhi(-180.0), dMaxPhi(180.0), dMinVertexZ(-50.0), dMaxVertexZ(200.0),
700  dMinVertexXY(-10.0), dMaxVertexXY(10.0), dMinBeta(-0.2), dMaxBeta(1.2), dMinDeltaBeta(-1.0), dMaxDeltaBeta(1.0),
701  dTrackSelectionTag("NotATag"), dShowerSelectionTag("NotATag")
702  {
703  dFinalStatePIDs.push_back(Gamma);
704  dFinalStatePIDs.push_back(PiPlus); dFinalStatePIDs.push_back(KPlus); dFinalStatePIDs.push_back(Proton);
705  dFinalStatePIDs.push_back(PiMinus); dFinalStatePIDs.push_back(KMinus);
706  }
707 
708  double dMinPIDFOM;
709  unsigned int dNumPBins, dNumThetaBins, dNumPhiBins, dNumVertexZBins, dNumTBins, dNumVertexXYBins, dNumBetaBins, dNum2DDeltaBetaBins, dNum2DPBins;
710  unsigned int dNum2DThetaBins, dNum2DPhiBins, dNumBeamEBins;
711  double dMinT, dMaxT, dMinP, dMaxP, dMaxBeamE, dMinTheta, dMaxTheta, dMinPhi, dMaxPhi, dMinVertexZ, dMaxVertexZ, dMinVertexXY, dMaxVertexXY, dMinBeta;
712  double dMaxBeta, dMinDeltaBeta, dMaxDeltaBeta;
713  string dTrackSelectionTag, dShowerSelectionTag; //In Initialize, will default to "PreSelect" unless otherwise specified
714 
715  deque<Particle_t> dFinalStatePIDs;
716 
717  void Initialize(JEventLoop* locEventLoop);
718 
719  private:
720  bool Perform_Action(JEventLoop* locEventLoop, const DParticleCombo* locParticleCombo);
721 
723 
724  //PID
725  map<int, TH2I*> dHistMap_QBetaVsP; //int is charge: -1, 1
726 
727  map<Particle_t, TH2I*> dHistMap_PVsTheta;
728  map<Particle_t, TH2I*> dHistMap_PhiVsTheta;
729  map<Particle_t, TH2I*> dHistMap_BetaVsP;
730  map<Particle_t, TH2I*> dHistMap_DeltaBetaVsP;
731  map<Particle_t, TH1I*> dHistMap_P;
732  map<Particle_t, TH1I*> dHistMap_Theta;
733  map<Particle_t, TH1I*> dHistMap_Phi;
734  map<Particle_t, TH1I*> dHistMap_VertexZ;
735  map<Particle_t, TH2I*> dHistMap_VertexYVsX;
736  map<Particle_t, TH1I*> dHistMap_VertexT;
737 };
738 
740 {
741  public:
742  DHistogramAction_TrackShowerErrors(const DReaction* locReaction, string locActionUniqueString = "") :
743  DAnalysisAction(locReaction, "Hist_TrackShowerErrors", false, locActionUniqueString),
744  dMinPIDFOM(5.73303E-7), dNum2DPBins(250), dNum2DThetaBins(140), dNum2DPhiBins(180),
745  dNum2DXYErrorBins(300), dNum2DZErrorBins(400), dNum2DShowerZErrorBins(300), dNum2DPxyErrorBins(200), dNum2DPzErrorBins(400), dNum2DEErrorBins(200), dNum2DTErrorBins(200),
746  dMinP(0.0), dMaxP(10.0), dMaxPBCAL(2.0), dMinTheta(0.0), dMinThetaBCAL(10.0), dMaxTheta(140.0), dMaxThetaFCAL(15.0), dMinPhi(-180.0), dMaxPhi(180.0),
747  dMaxPxyError(0.1), dMaxPzError(0.5), dMaxXYError(1.5), dMaxZError(10.0), dMaxShowerZError(15.0), dMaxEError(0.5), dMaxTError(2.0),
748  dTrackSelectionTag("NotATag"), dShowerSelectionTag("NotATag")
749  {
750  dFinalStatePIDs.push_back(PiPlus); dFinalStatePIDs.push_back(PiMinus); dFinalStatePIDs.push_back(Proton);
751  }
752 
753  DHistogramAction_TrackShowerErrors(string locActionUniqueString) :
754  DAnalysisAction(NULL, "Hist_TrackShowerErrors", false, locActionUniqueString),
755  dMinPIDFOM(5.73303E-7), dNum2DPBins(250), dNum2DThetaBins(140), dNum2DPhiBins(180),
756  dNum2DXYErrorBins(300), dNum2DZErrorBins(400), dNum2DShowerZErrorBins(300), dNum2DPxyErrorBins(200), dNum2DPzErrorBins(400), dNum2DEErrorBins(200), dNum2DTErrorBins(200),
757  dMinP(0.0), dMaxP(10.0), dMaxPBCAL(2.0), dMinTheta(0.0), dMinThetaBCAL(10.0), dMaxTheta(140.0), dMaxThetaFCAL(15.0), dMinPhi(-180.0), dMaxPhi(180.0),
758  dMaxPxyError(0.1), dMaxPzError(0.5), dMaxXYError(1.5), dMaxZError(10.0), dMaxShowerZError(15.0), dMaxEError(0.5), dMaxTError(2.0),
759  dTrackSelectionTag("NotATag"), dShowerSelectionTag("NotATag")
760  {
761  dFinalStatePIDs.push_back(PiPlus); dFinalStatePIDs.push_back(PiMinus); dFinalStatePIDs.push_back(Proton);
762  }
763 
765  DAnalysisAction(NULL, "Hist_TrackShowerErrors", false, ""),
766  dMinPIDFOM(5.73303E-7), dNum2DPBins(250), dNum2DThetaBins(140), dNum2DPhiBins(180),
767  dNum2DXYErrorBins(300), dNum2DZErrorBins(400), dNum2DShowerZErrorBins(300), dNum2DPxyErrorBins(200), dNum2DPzErrorBins(400), dNum2DEErrorBins(200), dNum2DTErrorBins(200),
768  dMinP(0.0), dMaxP(10.0), dMaxPBCAL(2.0), dMinTheta(0.0), dMinThetaBCAL(10.0), dMaxTheta(140.0), dMaxThetaFCAL(15.0), dMinPhi(-180.0), dMaxPhi(180.0),
769  dMaxPxyError(0.1), dMaxPzError(0.5), dMaxXYError(1.5), dMaxZError(10.0), dMaxShowerZError(15.0), dMaxEError(0.5), dMaxTError(2.0),
770  dTrackSelectionTag("NotATag"), dShowerSelectionTag("NotATag")
771  {
772  dFinalStatePIDs.push_back(PiPlus); dFinalStatePIDs.push_back(PiMinus); dFinalStatePIDs.push_back(Proton);
773  }
774 
775  double dMinPIDFOM;
776  unsigned int dNum2DPBins, dNum2DThetaBins, dNum2DPhiBins, dNum2DXYErrorBins, dNum2DZErrorBins, dNum2DShowerZErrorBins;
777  unsigned int dNum2DPxyErrorBins, dNum2DPzErrorBins, dNum2DEErrorBins, dNum2DTErrorBins;
778  double dMinP, dMaxP, dMaxPBCAL, dMinTheta, dMinThetaBCAL, dMaxTheta, dMaxThetaFCAL, dMinPhi, dMaxPhi;
779  double dMaxPxyError, dMaxPzError, dMaxXYError, dMaxZError, dMaxShowerZError, dMaxEError, dMaxTError;
780  string dTrackSelectionTag, dShowerSelectionTag; //In Initialize, will default to "PreSelect" unless otherwise specified
781 
782  deque<Particle_t> dFinalStatePIDs;
783 
784  void Initialize(JEventLoop* locEventLoop);
785 
786  private:
787  bool Perform_Action(JEventLoop* locEventLoop, const DParticleCombo* locParticleCombo);
788 
789  //tracks
790  map<Particle_t, TH2I*> dHistMap_TrackPxErrorVsP;
791  map<Particle_t, TH2I*> dHistMap_TrackPyErrorVsP;
792  map<Particle_t, TH2I*> dHistMap_TrackPzErrorVsP;
793  map<Particle_t, TH2I*> dHistMap_TrackXErrorVsP;
794  map<Particle_t, TH2I*> dHistMap_TrackYErrorVsP;
795  map<Particle_t, TH2I*> dHistMap_TrackZErrorVsP;
796 
797  map<Particle_t, TH2I*> dHistMap_TrackPxErrorVsTheta;
798  map<Particle_t, TH2I*> dHistMap_TrackPyErrorVsTheta;
799  map<Particle_t, TH2I*> dHistMap_TrackPzErrorVsTheta;
800  map<Particle_t, TH2I*> dHistMap_TrackXErrorVsTheta;
801  map<Particle_t, TH2I*> dHistMap_TrackYErrorVsTheta;
802  map<Particle_t, TH2I*> dHistMap_TrackZErrorVsTheta;
803 
804  map<Particle_t, TH2I*> dHistMap_TrackPxErrorVsPhi;
805  map<Particle_t, TH2I*> dHistMap_TrackPyErrorVsPhi;
806  map<Particle_t, TH2I*> dHistMap_TrackPzErrorVsPhi;
807  map<Particle_t, TH2I*> dHistMap_TrackXErrorVsPhi;
808  map<Particle_t, TH2I*> dHistMap_TrackYErrorVsPhi;
809  map<Particle_t, TH2I*> dHistMap_TrackZErrorVsPhi;
810 
811  //shower //bool: true/false for BCAL/FCAL
812  map<bool, TH2I*> dHistMap_ShowerEErrorVsP;
813  map<bool, TH2I*> dHistMap_ShowerXErrorVsP;
814  map<bool, TH2I*> dHistMap_ShowerYErrorVsP;
815  map<bool, TH2I*> dHistMap_ShowerZErrorVsP;
816  map<bool, TH2I*> dHistMap_ShowerTErrorVsP;
817 
823 
824  map<bool, TH2I*> dHistMap_ShowerEErrorVsPhi;
825  map<bool, TH2I*> dHistMap_ShowerXErrorVsPhi;
826  map<bool, TH2I*> dHistMap_ShowerYErrorVsPhi;
827  map<bool, TH2I*> dHistMap_ShowerZErrorVsPhi;
828  map<bool, TH2I*> dHistMap_ShowerTErrorVsPhi;
829 };
830 
832 {
833  public:
834  DHistogramAction_NumReconstructedObjects(const DReaction* locReaction, string locActionUniqueString = "") :
835  DAnalysisAction(locReaction, "Hist_NumReconstructedObjects", false, locActionUniqueString),
836  dMaxNumObjects(40), dMaxNumMatchObjects(20), dMaxNumCDCHits(400), dMaxNumFDCHits(1000), dMaxNumTOFCalorimeterHits(400), dMaxNumBeamPhotons(100){}
837 
838  DHistogramAction_NumReconstructedObjects(string locActionUniqueString) :
839  DAnalysisAction(NULL, "Hist_NumReconstructedObjects", false, ""),
840  dMaxNumObjects(40), dMaxNumMatchObjects(20), dMaxNumCDCHits(400), dMaxNumFDCHits(1000), dMaxNumTOFCalorimeterHits(400), dMaxNumBeamPhotons(100){}
841 
843  DAnalysisAction(NULL, "Hist_NumReconstructedObjects", false, ""),
844  dMaxNumObjects(40), dMaxNumMatchObjects(20), dMaxNumCDCHits(400), dMaxNumFDCHits(1000), dMaxNumTOFCalorimeterHits(400), dMaxNumBeamPhotons(100){}
845 
846  unsigned int dMaxNumObjects;
847  unsigned int dMaxNumMatchObjects;
848  unsigned int dMaxNumCDCHits;
849  unsigned int dMaxNumFDCHits;
851  unsigned int dMaxNumBeamPhotons;
852 
853  void Initialize(JEventLoop* locEventLoop);
854 
855  private:
856  bool Perform_Action(JEventLoop* locEventLoop, const DParticleCombo* locParticleCombo = NULL);
857 
859 
863 
877 
886 
891 
899 
900  TH1I* dHist_NumRFSignals; //all sources
901 };
902 
904 {
905  public:
906  DHistogramAction_TrackMultiplicity(const DReaction* locReaction, string locActionUniqueString = "") :
907  DAnalysisAction(locReaction, "Hist_TrackMultiplicity", false, locActionUniqueString),
908  dMaxNumTracks(40), dMinTrackingFOM(0.0027), dMinPIDFOM(5.73303E-7), dRequireDetectorMatchFlag(true),
909  dTrackSelectionTag("NotATag"), dShowerSelectionTag("NotATag")
910  {
911  dFinalStatePIDs.push_back(Gamma);
912  dFinalStatePIDs.push_back(PiPlus); dFinalStatePIDs.push_back(KPlus); dFinalStatePIDs.push_back(Proton);
913  dFinalStatePIDs.push_back(PiMinus); dFinalStatePIDs.push_back(KMinus);
914  }
915 
916  DHistogramAction_TrackMultiplicity(string locActionUniqueString) :
917  DAnalysisAction(NULL, "Hist_TrackMultiplicity", false, ""),
918  dMaxNumTracks(40), dMinTrackingFOM(0.0027), dMinPIDFOM(5.73303E-7), dRequireDetectorMatchFlag(true),
919  dTrackSelectionTag("NotATag"), dShowerSelectionTag("NotATag")
920  {
921  dFinalStatePIDs.push_back(Gamma);
922  dFinalStatePIDs.push_back(PiPlus); dFinalStatePIDs.push_back(KPlus); dFinalStatePIDs.push_back(Proton);
923  dFinalStatePIDs.push_back(PiMinus); dFinalStatePIDs.push_back(KMinus);
924  }
925 
927  DAnalysisAction(NULL, "Hist_TrackMultiplicity", false, ""),
928  dMaxNumTracks(40), dMinTrackingFOM(0.0027), dMinPIDFOM(5.73303E-7), dRequireDetectorMatchFlag(true),
929  dTrackSelectionTag("NotATag"), dShowerSelectionTag("NotATag")
930  {
931  dFinalStatePIDs.push_back(Gamma);
932  dFinalStatePIDs.push_back(PiPlus); dFinalStatePIDs.push_back(KPlus); dFinalStatePIDs.push_back(Proton);
933  dFinalStatePIDs.push_back(PiMinus); dFinalStatePIDs.push_back(KMinus);
934  }
935 
936  unsigned int dMaxNumTracks;
938  double dMinPIDFOM;
940  string dTrackSelectionTag, dShowerSelectionTag; //In Initialize, will default to "PreSelect" unless otherwise specified
941 
942  deque<Particle_t> dFinalStatePIDs;
943 
944  void Initialize(JEventLoop* locEventLoop);
945 
946  private:
947  bool Perform_Action(JEventLoop* locEventLoop, const DParticleCombo* locParticleCombo = NULL);
948 
951 };
952 
953 #endif // _DHistogramActions_Independent_
954 
map< DetectorSystem_t, vector< DTrackFitter::Extrapolation_t > > extrapolations
map< DetectorSystem_t, map< int, TH2I * > > dHistMap_BetaVsP
DHistogramAction_NumReconstructedObjects(const DReaction *locReaction, string locActionUniqueString="")
DHistogramAction_Reconstruction(const DReaction *locReaction, string locActionUniqueString="")
DHistogramAction_DetectorMatchParams(const DReaction *locReaction, string locActionUniqueString="")
DHistogramAction_DetectorPID(const DReaction *locReaction, string locActionUniqueString="")
map< Particle_t, TH2I * > dHistMap_TrackPyErrorVsTheta
map< bool, TH2I * > dHistMap_TOFPointTrackDeltaYVsVerticalPaddle
DResourcePool< DParticleComboStep > dResourcePool_ParticleComboStep
DHistogramAction_DetectorMatchParams(string locActionUniqueString)
DHistogramAction_ObjectMemory(string locActionUniqueString)
map< pair< int, bool >, TH2I * > dHistMap_SCEnergyVsTheta
DResourcePool< DParticleCombo > dResourcePool_ParticleCombo
TVector3 DVector3
Definition: DVector3.h:14
map< pair< int, bool >, TH2I * > dHistMap_BCALShowerTrackDepthVsP
DHistogramAction_Reconstruction(string locActionUniqueString)
DHistogramAction_TrackMultiplicity(const DReaction *locReaction, string locActionUniqueString="")
map< bool, TH2I * > dHistMap_TOFPaddleTrackYVsVerticalPaddle_NoHit
map< Particle_t, TH1I * > dHistMap_NumPhotons_DIRC
map< DetectorSystem_t, map< bool, TH2I * > > dHistMap_PVsTheta_HasHit
DHistogramAction_DetectorMatching(const DReaction *locReaction, string locActionUniqueString="")
DResourcePool< DKinFitConstraint_Mass > dResourcePool_MassConstraint
map< bool, TH2I * > dHistMap_TOFPointTrackDeltaXVsVerticalPaddle
map< DetectorSystem_t, map< Particle_t, TH2I * > > dHistMap_DeltadEdXVsP
DResourcePool< DKinematicData > dResourcePool_KinematicData
DetectorSystem_t
Definition: GlueX.h:15
DHistogramAction_EventVertex(string locActionUniqueString)
Definition: GlueX.h:17
map< int, TH2I * > dHistMap_PVsTheta_GoodWireBased_BadTimeBased
map< Particle_t, TH2I * > dHistMap_Ldiff_kpiVsP_DIRC
map< Particle_t, TH2I * > dHistMap_ThetaCVsP_DIRC
map< DetectorSystem_t, map< bool, TH2I * > > dHistMap_PhiVsTheta_NoHit
map< DetectorSystem_t, map< int, TH2I * > > dHistMap_dEdXVsP
map< bool, TH2I * > dHistMap_TOFPaddleTrackYVsVerticalPaddle_HasHit
map< bool, TH2I * > dHistMap_TOFPointTrackDeltaXVsHorizontalPaddle
map< pair< int, bool >, TH2I * > dHistMap_FCALShowerTrackDepthVsP
DHistogramAction_TrackShowerErrors(const DReaction *locReaction, string locActionUniqueString="")
Definition: GlueX.h:18
map< bool, TH2I * > dHistMap_TOFPointTrackDeltaYVsHorizontalPaddle
map< DetectorSystem_t, map< bool, TH2I * > > dHistMap_PVsTheta_NoHit
DHistogramAction_TrackMultiplicity(string locActionUniqueString)
map< pair< int, bool >, TH1I * > dHistMap_BCALShowerEnergy
map< DetectorSystem_t, map< Particle_t, TH2I * > > dHistMap_DeltaTVsP
DHistogramAction_Neutrals(const DReaction *locReaction, string locActionUniqueString="")
DResourcePool< DNeutralParticleHypothesis > dResourcePool_NeutralParticleHypothesis
DResourcePool< DChargedTrackHypothesis > dResourcePool_ChargedTrackHypothesis
DHistogramAction_TrackShowerErrors(string locActionUniqueString)
DResourcePool< DSourceCombo > dResourcePool_SourceCombo
DHistogramAction_Neutrals(string locActionUniqueString)
DHistogramAction_DetectedParticleKinematics(const DReaction *locReaction, string locActionUniqueString="")
DResourcePool< DEventRFBunch > dResourcePool_EventRFBunch
DHistogramAction_DetectorMatching(string locActionUniqueString)
DResourcePool< DKinFitConstraint_Spacetime > dResourcePool_SpacetimeConstraint
DResourcePool< DChargedTrackHypothesis::DTimingInfo > dResourcePool_ChargedHypoTimingInfo
map< Particle_t, TH2I * > dHistMap_TrackPzErrorVsTheta
map< pair< int, bool >, TH1I * > dHistMap_FCALShowerTrackDepth
map< pair< int, bool >, TH1I * > dHistMap_FCALShowerEnergy
DResourcePool< DKinFitChainStep > dResourcePool_KinFitChainStep
DResourcePool< DKinFitParticle > dResourcePool_KinFitParticle
map< pair< int, bool >, TH1I * > dHistMap_BCALShowerTrackDepth
DResourcePool< DChargedTrackHypothesis::DTrackingInfo > dResourcePool_ChargedHypoTrackingInfo
bool Get_Extrapolations(const DKinematicData *locTrack, map< DetectorSystem_t, vector< DTrackFitter::Extrapolation_t > > &extrapolations) const
DResourcePool< vector< const DSourceCombo * > > dResourcePool_SourceComboVector
map< pair< int, bool >, TH2I * > dHistMap_SCPhiVsTheta
DResourcePool< DKinematicData::DKinematicInfo > dResourcePool_KinematicInfo
map< int, TH2I * > dHistMap_PVsTheta_GoodWireBased_GoodTimeBased
DHistogramAction_EventVertex(const DReaction *locReaction, string locActionUniqueString="")
DHistogramAction_NumReconstructedObjects(string locActionUniqueString)
map< DetectorSystem_t, map< bool, TH2I * > > dHistMap_PhiVsTheta_HasHit
DHistogramAction_DetectorPID(string locActionUniqueString)
map< Particle_t, TH2I * > dHistMap_Ldiff_pkVsP_DIRC
map< Particle_t, map< DKinFitPullType, TH1I * > > dHistMap_KinFitPulls
map< DetectorSystem_t, map< Particle_t, TH2I * > > dHistMap_DeltaBetaVsP
DResourcePool< DKinFitChain > dResourcePool_KinFitChain
DResourcePool< DBeamPhoton > dResourcePool_BeamPhotons
DResourcePool< DKinFitResults > dResourcePool_KinFitResults
map< Particle_t, TH2I * > dHistMap_TrackPxErrorVsTheta
DResourcePool< TMatrixFSym > dResourcePool_TMatrixFSym
map< DetectorSystem_t, vector< DTrackFitter::Extrapolation_t > > extrapolations
DResourcePool< DKinFitConstraint_Vertex > dResourcePool_VertexConstraint
map< bool, TH2I * > dHistMap_TOFPaddleHorizontalPaddleVsTrackX_HasHit
DResourcePool< DNeutralParticleHypothesis::DTimingInfo > dResourcePool_NeutralHypoTimingInfo
map< bool, TH2I * > dHistMap_TOFPaddleHorizontalPaddleVsTrackX_NoHit
DResourcePool< DKinFitConstraint_P4 > dResourcePool_P4Constraint
DHistogramAction_DetectedParticleKinematics(string locActionUniqueString)