#ifndef _DHistogramActions_Thrown_ #define _DHistogramActions_Thrown_ #include #include #include #include #include #include #include #include "TROOT.h" #include "TDirectoryFile.h" #include "TH1I.h" #include "TH2I.h" #include "TH1D.h" #include "TH2D.h" #include "TTree.h" #include "JANA/JEventLoop.h" #include "particleType.h" #include "RF/DRFTime.h" #include "PID/DChargedTrack.h" #include "PID/DChargedTrackHypothesis.h" #include "PID/DNeutralParticle.h" #include "PID/DNeutralShower.h" #include "PID/DVertex.h" #include "PID/DDetectorMatches.h" #include "PID/DNeutralParticleHypothesis.h" #include "PID/DEventRFBunch.h" #include "TRACKING/DMCThrown.h" #include "ANALYSIS/DReaction.h" #include "ANALYSIS/DKinFitParticle.h" #include "ANALYSIS/DMCThrownMatching.h" #include "ANALYSIS/DMCThrownMatching_factory.h" #include "ANALYSIS/DParticleCombo.h" #include "ANALYSIS/DAnalysisUtilities.h" #include "ANALYSIS/DAnalysisAction.h" #include "ANALYSIS/DCutActions.h" #include "START_COUNTER/DSCHit.h" #include "TAGGER/DTAGHHit.h" #include "TAGGER/DTAGMHit.h" #include "CDC/DCDCHit.h" #include "FDC/DFDCHit.h" #include "TOF/DTOFPoint.h" #include "TOF/DTOFHit.h" #include "TOF/DTOFTruth.h" #include "BCAL/DBCALShower.h" #include "BCAL/DBCALHit.h" #include "BCAL/DBCALTruthShower.h" #include "FCAL/DFCALShower.h" #include "FCAL/DFCALHit.h" #include "FCAL/DFCALTruthShower.h" #include "TRACKING/DTrackTimeBased.h" #include "TRACKING/DTrackWireBased.h" #include "TRACKING/DTrackCandidate.h" using namespace std; using namespace jana; /* THROWN_ONLY: REACTION: DHistogramAction_ParticleComboGenReconComparison DHistogramAction_TruePID INDEPENDENT: DHistogramAction_TOFHitStudy DHistogramAction_ThrownParticleKinematics DHistogramAction_ReconnedThrownKinematics DHistogramAction_GenReconTrackComparison */ class DHistogramAction_ParticleComboGenReconComparison : public DAnalysisAction { public: DHistogramAction_ParticleComboGenReconComparison(const DReaction* locReaction, bool locUseKinFitResultsFlag, string locActionUniqueString = "") : DAnalysisAction(locReaction, "Hist_ParticleComboGenReconComparison", locUseKinFitResultsFlag, locActionUniqueString), dNumDeltaPOverPBins(500), dNumDeltaThetaBins(240), dNumDeltaPhiBins(400), dNumDeltaTBins(500), dNumDeltaVertexZBins(300), dNum2DPBins(250), dNum2DThetaBins(140), dNumRFDeltaTBins(202), dNumPullBins(500), dNum2DPullBins(250), dMinDeltaPOverP(-0.4), dMaxDeltaPOverP(0.4), dMinDeltaTheta(-1.0), dMaxDeltaTheta(1.0), dMinDeltaPhi(-6.0), dMaxDeltaPhi(6.0), dMinDeltaT(-5.0), dMaxDeltaT(5.0), dMinDeltaVertexZ(-15.0), dMaxDeltaVertexZ(15.0), dMinP(0.0), dMaxP(10.0), dMinTheta(0.0), dMaxTheta(140.0), dMinRFDeltaT(-10.1), dMaxRFDeltaT(10.1) { dPullTypes.resize(8); dPullTypes[0] = d_EPull; dPullTypes[1] = d_PxPull; dPullTypes[2] = d_PyPull; dPullTypes[3] = d_PzPull; dPullTypes[4] = d_XxPull; dPullTypes[5] = d_XyPull; dPullTypes[6] = d_XzPull; dPullTypes[7] = d_TPull; } unsigned int dNumDeltaPOverPBins, dNumDeltaThetaBins, dNumDeltaPhiBins, dNumDeltaTBins, dNumDeltaVertexZBins, dNum2DPBins, dNum2DThetaBins, dNumRFDeltaTBins, dNumPullBins, dNum2DPullBins; double dMinDeltaPOverP, dMaxDeltaPOverP, dMinDeltaTheta, dMaxDeltaTheta, dMinDeltaPhi, dMaxDeltaPhi, dMinDeltaT, dMaxDeltaT, dMinDeltaVertexZ, dMaxDeltaVertexZ; double dMinP, dMaxP, dMinTheta, dMaxTheta, dMinRFDeltaT, dMaxRFDeltaT; void Initialize(JEventLoop* locEventLoop); private: bool Perform_Action(JEventLoop* locEventLoop, const DParticleCombo* locParticleCombo); void Fill_BeamHists(const DKinematicData* locKinematicData, const DKinematicData* locThrownKinematicData); void Fill_ChargedHists(const DChargedTrackHypothesis* locChargedTrackHypothesis, const DMCThrown* locMCThrown, const DEventRFBunch* locThrownEventRFBunch, size_t locStepIndex); void Fill_NeutralHists(const DNeutralParticleHypothesis* locNeutralParticleHypothesis, const DMCThrown* locMCThrown, const DEventRFBunch* locThrownEventRFBunch, size_t locStepIndex); deque dPullTypes; double dTargetZCenter; TH1I* dRFBeamBunchDeltaT_Hist; TH1I* dBeamParticleHist_DeltaPOverP; TH2I* dBeamParticleHist_DeltaPOverPVsP; TH1I* dBeamParticleHist_DeltaT; deque > dHistDeque_DeltaPOverP; deque > dHistDeque_DeltaTheta; deque > dHistDeque_DeltaPhi; deque > dHistDeque_DeltaT; deque > dHistDeque_DeltaT_TOF; deque > dHistDeque_DeltaT_BCAL; deque > dHistDeque_DeltaT_FCAL; deque > dHistDeque_DeltaVertexZ; deque > dHistDeque_DeltaPOverPVsP; deque > dHistDeque_DeltaPOverPVsTheta; deque > dHistDeque_DeltaThetaVsP; deque > dHistDeque_DeltaThetaVsTheta; deque > dHistDeque_DeltaPhiVsP; deque > dHistDeque_DeltaPhiVsTheta; deque > dHistDeque_DeltaTVsTheta; deque > dHistDeque_DeltaTVsP; deque > dHistDeque_DeltaVertexZVsTheta; deque > > dHistDeque_Pulls; deque > > dHistDeque_PullsVsP; deque > > dHistDeque_PullsVsTheta; deque > dHistDeque_TimePull_CDC; deque > dHistDeque_TimePull_ST; deque > dHistDeque_TimePull_BCAL; deque > dHistDeque_TimePull_TOF; deque > dHistDeque_TimePull_FCAL; deque > dHistDeque_TimePullVsTheta_CDC; deque > dHistDeque_TimePullVsTheta_BCAL; deque > dHistDeque_TimePullVsTheta_ST; deque > dHistDeque_TimePullVsP_CDC; deque > dHistDeque_TimePullVsP_BCAL; deque > dHistDeque_TimePullVsP_ST; deque > dHistDeque_TimePullVsP_TOF; deque > dHistDeque_TimePullVsP_FCAL; set dPreviouslyHistogrammedBeamParticles; set > > dPreviouslyHistogrammedParticles; }; class DHistogramAction_ThrownParticleKinematics : public DAnalysisAction { public: DHistogramAction_ThrownParticleKinematics(const DReaction* locReaction, string locActionUniqueString = "") : DAnalysisAction(locReaction, "Hist_ThrownParticleKinematics", false, locActionUniqueString), dNumPBins(500), dNumThetaBins(560), dNumPhiBins(360), dNumVertexZBins(600), dNumTBins(400), dNumVertexXYBins(400), dNum2DPBins(250), dNum2DThetaBins(140), dNum2DPhiBins(180), dMinT(-20.0), dMaxT(20.0), dMinP(0.0), dMaxP(10.0), dMinTheta(0.0), dMaxTheta(140.0), dMinPhi(-180.0), dMaxPhi(180.0), dMinVertexZ(0.0), dMaxVertexZ(200.0), dMinVertexXY(-10.0), dMaxVertexXY(10.0) { dFinalStatePIDs.clear(); dFinalStatePIDs.push_back(Gamma); dFinalStatePIDs.push_back(Neutron); dFinalStatePIDs.push_back(PiPlus); dFinalStatePIDs.push_back(KPlus); dFinalStatePIDs.push_back(Proton); dFinalStatePIDs.push_back(PiMinus); dFinalStatePIDs.push_back(KMinus); } DHistogramAction_ThrownParticleKinematics(string locActionUniqueString) : DAnalysisAction(NULL, "Hist_ThrownParticleKinematics", false, locActionUniqueString), dNumPBins(500), dNumThetaBins(560), dNumPhiBins(360), dNumVertexZBins(600), dNumTBins(400), dNumVertexXYBins(400), dNum2DPBins(250), dNum2DThetaBins(140), dNum2DPhiBins(180), dMinT(-20.0), dMaxT(20.0), dMinP(0.0), dMaxP(10.0), dMinTheta(0.0), dMaxTheta(140.0), dMinPhi(-180.0), dMaxPhi(180.0), dMinVertexZ(0.0), dMaxVertexZ(200.0), dMinVertexXY(-10.0), dMaxVertexXY(10.0) { dFinalStatePIDs.clear(); dFinalStatePIDs.push_back(Gamma); dFinalStatePIDs.push_back(Neutron); dFinalStatePIDs.push_back(PiPlus); dFinalStatePIDs.push_back(KPlus); dFinalStatePIDs.push_back(Proton); dFinalStatePIDs.push_back(PiMinus); dFinalStatePIDs.push_back(KMinus); } DHistogramAction_ThrownParticleKinematics(void) : DAnalysisAction(NULL, "Hist_ThrownParticleKinematics", false, ""), dNumPBins(500), dNumThetaBins(560), dNumPhiBins(360), dNumVertexZBins(600), dNumTBins(400), dNumVertexXYBins(400), dNum2DPBins(250), dNum2DThetaBins(140), dNum2DPhiBins(180), dMinT(-20.0), dMaxT(20.0), dMinP(0.0), dMaxP(10.0), dMinTheta(0.0), dMaxTheta(140.0), dMinPhi(-180.0), dMaxPhi(180.0), dMinVertexZ(0.0), dMaxVertexZ(200.0), dMinVertexXY(-10.0), dMaxVertexXY(10.0) { dFinalStatePIDs.clear(); dFinalStatePIDs.push_back(Gamma); dFinalStatePIDs.push_back(Neutron); dFinalStatePIDs.push_back(PiPlus); dFinalStatePIDs.push_back(KPlus); dFinalStatePIDs.push_back(Proton); dFinalStatePIDs.push_back(PiMinus); dFinalStatePIDs.push_back(KMinus); } unsigned int dNumPBins, dNumThetaBins, dNumPhiBins, dNumVertexZBins, dNumTBins, dNumVertexXYBins, dNum2DPBins, dNum2DThetaBins, dNum2DPhiBins; double dMinT, dMaxT, dMinP, dMaxP, dMinTheta, dMaxTheta, dMinPhi, dMaxPhi, dMinVertexZ, dMaxVertexZ, dMinVertexXY, dMaxVertexXY; deque dFinalStatePIDs; void Initialize(JEventLoop* locEventLoop); private: bool Perform_Action(JEventLoop* locEventLoop, const DParticleCombo* locParticleCombo = NULL); TH1I* dMCGENBeamParticle_P; TH1I* dMCGENBeamParticle_Time; TH1I* dAllBeamParticle_P; TH1I* dAllBeamParticle_Time; map dHistMap_PVsTheta; map dHistMap_PhiVsTheta; map dHistMap_P; map dHistMap_Theta; map dHistMap_Phi; map dHistMap_VertexZ; map dHistMap_VertexYVsX; map dHistMap_VertexT; }; class DHistogramAction_ReconnedThrownKinematics : public DAnalysisAction { public: DHistogramAction_ReconnedThrownKinematics(const DReaction* locReaction, string locActionUniqueString = "") : DAnalysisAction(locReaction, "Hist_ReconnedThrownKinematics", false, locActionUniqueString), dMinThrownMatchFOM(5.73303E-7), dNumPBins(500), dNumThetaBins(560), dNumPhiBins(360), dNumVertexZBins(600), dNumTBins(400), dNumVertexXYBins(400), dNum2DPBins(250), dNum2DThetaBins(140), dNum2DPhiBins(180), dNumBetaBins(400), dMinT(-20.0), dMaxT(20.0), dMinP(0.0), dMaxP(10.0), dMinTheta(0.0), dMaxTheta(140.0), dMinPhi(-180.0), dMaxPhi(180.0), dMinVertexZ(0.0), dMaxVertexZ(200.0), dMinVertexXY(-10.0), dMaxVertexXY(10.0), dMinBeta(-0.2), dMaxBeta(1.2) { dFinalStatePIDs.clear(); dFinalStatePIDs.push_back(Gamma); dFinalStatePIDs.push_back(Neutron); dFinalStatePIDs.push_back(PiPlus); dFinalStatePIDs.push_back(KPlus); dFinalStatePIDs.push_back(Proton); dFinalStatePIDs.push_back(PiMinus); dFinalStatePIDs.push_back(KMinus); dAnalysisUtilities = NULL; } DHistogramAction_ReconnedThrownKinematics(string locActionUniqueString) : DAnalysisAction(NULL, "Hist_ReconnedThrownKinematics", false, locActionUniqueString), dMinThrownMatchFOM(5.73303E-7), dNumPBins(500), dNumThetaBins(560), dNumPhiBins(360), dNumVertexZBins(600), dNumTBins(400), dNumVertexXYBins(400), dNum2DPBins(250), dNum2DThetaBins(140), dNum2DPhiBins(180), dNumBetaBins(400), dMinT(-20.0), dMaxT(20.0), dMinP(0.0), dMaxP(10.0), dMinTheta(0.0), dMaxTheta(140.0), dMinPhi(-180.0), dMaxPhi(180.0), dMinVertexZ(0.0), dMaxVertexZ(200.0), dMinVertexXY(-10.0), dMaxVertexXY(10.0), dMinBeta(-0.2), dMaxBeta(1.2) { dFinalStatePIDs.clear(); dFinalStatePIDs.push_back(Gamma); dFinalStatePIDs.push_back(Neutron); dFinalStatePIDs.push_back(PiPlus); dFinalStatePIDs.push_back(KPlus); dFinalStatePIDs.push_back(Proton); dFinalStatePIDs.push_back(PiMinus); dFinalStatePIDs.push_back(KMinus); dAnalysisUtilities = NULL; } DHistogramAction_ReconnedThrownKinematics(void) : DAnalysisAction(NULL, "Hist_ReconnedThrownKinematics", false, ""), dMinThrownMatchFOM(5.73303E-7), dNumPBins(500), dNumThetaBins(560), dNumPhiBins(360), dNumVertexZBins(600), dNumTBins(400), dNumVertexXYBins(400), dNum2DPBins(250), dNum2DThetaBins(140), dNum2DPhiBins(180), dNumBetaBins(400), dMinT(-20.0), dMaxT(20.0), dMinP(0.0), dMaxP(10.0), dMinTheta(0.0), dMaxTheta(140.0), dMinPhi(-180.0), dMaxPhi(180.0), dMinVertexZ(0.0), dMaxVertexZ(200.0), dMinVertexXY(-10.0), dMaxVertexXY(10.0), dMinBeta(-0.2), dMaxBeta(1.2) { dFinalStatePIDs.clear(); dFinalStatePIDs.push_back(Gamma); dFinalStatePIDs.push_back(Neutron); dFinalStatePIDs.push_back(PiPlus); dFinalStatePIDs.push_back(KPlus); dFinalStatePIDs.push_back(Proton); dFinalStatePIDs.push_back(PiMinus); dFinalStatePIDs.push_back(KMinus); dAnalysisUtilities = NULL; } double dMinThrownMatchFOM; unsigned int dNumPBins, dNumThetaBins, dNumPhiBins, dNumVertexZBins, dNumTBins, dNumVertexXYBins, dNum2DPBins, dNum2DThetaBins, dNum2DPhiBins, dNumBetaBins; double dMinT, dMaxT, dMinP, dMaxP, dMinTheta, dMaxTheta, dMinPhi, dMaxPhi, dMinVertexZ, dMaxVertexZ, dMinVertexXY, dMaxVertexXY, dMinBeta, dMaxBeta; deque dFinalStatePIDs; void Initialize(JEventLoop* locEventLoop); private: bool Perform_Action(JEventLoop* locEventLoop, const DParticleCombo* locParticleCombo = NULL); const DAnalysisUtilities* dAnalysisUtilities; TH1I* dBeamParticle_P; //PID map dHistMap_QBetaVsP; //int is charge: -1, 1 map dHistMap_PVsTheta; map dHistMap_PhiVsTheta; map dHistMap_P; map dHistMap_Theta; map dHistMap_Phi; map dHistMap_VertexZ; map dHistMap_VertexYVsX; map dHistMap_VertexT; }; class DHistogramAction_GenReconTrackComparison : public DAnalysisAction { public: DHistogramAction_GenReconTrackComparison(const DReaction* locReaction, string locActionUniqueString = "") : DAnalysisAction(locReaction, "Hist_GenReconTrackComparison", false, locActionUniqueString), dNumDeltaPOverPBins(500), dNumDeltaThetaBins(240), dNumDeltaPhiBins(400), dNumDeltaTBins(500), dNumDeltaVertexZBins(300), dNum2DPBins(250), dNum2DThetaBins(140), dNumRFDeltaTBins(202), dNumPullBins(500), dNum2DPullBins(250), dNumMCMatchingFOMBins(500), dMinDeltaPOverP(-0.4), dMaxDeltaPOverP(0.4), dMinDeltaTheta(-1.0), dMaxDeltaTheta(1.0), dMinDeltaPhi(-6.0), dMaxDeltaPhi(6.0), dMinDeltaT(-5.0), dMaxDeltaT(5.0), dMinDeltaVertexZ(-15.0), dMaxDeltaVertexZ(15.0), dMinP(0.0), dMaxP(10.0), dMinTheta(0.0), dMaxTheta(140.0), dMinRFDeltaT(-10.1), dMaxRFDeltaT(10.1) { dFinalStatePIDs.push_back(Gamma); dFinalStatePIDs.push_back(Neutron); dFinalStatePIDs.push_back(PiPlus); dFinalStatePIDs.push_back(KPlus); dFinalStatePIDs.push_back(Proton); dFinalStatePIDs.push_back(PiMinus); dFinalStatePIDs.push_back(KMinus); dPullTypes.resize(8); dPullTypes[0] = d_EPull; dPullTypes[1] = d_PxPull; dPullTypes[2] = d_PyPull; dPullTypes[3] = d_PzPull; dPullTypes[4] = d_XxPull; dPullTypes[5] = d_XyPull; dPullTypes[6] = d_XzPull; dPullTypes[7] = d_TPull; } DHistogramAction_GenReconTrackComparison(string locActionUniqueString) : DAnalysisAction(NULL, "Hist_GenReconTrackComparison", false, locActionUniqueString), dNumDeltaPOverPBins(500), dNumDeltaThetaBins(240), dNumDeltaPhiBins(400), dNumDeltaTBins(500), dNumDeltaVertexZBins(300), dNum2DPBins(250), dNum2DThetaBins(140), dNumRFDeltaTBins(202), dNumPullBins(500), dNum2DPullBins(250), dNumMCMatchingFOMBins(500), dMinDeltaPOverP(-0.4), dMaxDeltaPOverP(0.4), dMinDeltaTheta(-1.0), dMaxDeltaTheta(1.0), dMinDeltaPhi(-6.0), dMaxDeltaPhi(6.0), dMinDeltaT(-5.0), dMaxDeltaT(5.0), dMinDeltaVertexZ(-15.0), dMaxDeltaVertexZ(15.0), dMinP(0.0), dMaxP(10.0), dMinTheta(0.0), dMaxTheta(140.0), dMinRFDeltaT(-10.1), dMaxRFDeltaT(10.1) { dFinalStatePIDs.push_back(Gamma); dFinalStatePIDs.push_back(Neutron); dFinalStatePIDs.push_back(PiPlus); dFinalStatePIDs.push_back(KPlus); dFinalStatePIDs.push_back(Proton); dFinalStatePIDs.push_back(PiMinus); dFinalStatePIDs.push_back(KMinus); dPullTypes.resize(8); dPullTypes[0] = d_EPull; dPullTypes[1] = d_PxPull; dPullTypes[2] = d_PyPull; dPullTypes[3] = d_PzPull; dPullTypes[4] = d_XxPull; dPullTypes[5] = d_XyPull; dPullTypes[6] = d_XzPull; dPullTypes[7] = d_TPull; } DHistogramAction_GenReconTrackComparison(void) : DAnalysisAction(NULL, "Hist_GenReconTrackComparison", false, ""), dNumDeltaPOverPBins(500), dNumDeltaThetaBins(240), dNumDeltaPhiBins(400), dNumDeltaTBins(500), dNumDeltaVertexZBins(300), dNum2DPBins(250), dNum2DThetaBins(140), dNumRFDeltaTBins(202), dNumPullBins(500), dNum2DPullBins(250), dNumMCMatchingFOMBins(500), dMinDeltaPOverP(-0.4), dMaxDeltaPOverP(0.4), dMinDeltaTheta(-1.0), dMaxDeltaTheta(1.0), dMinDeltaPhi(-6.0), dMaxDeltaPhi(6.0), dMinDeltaT(-5.0), dMaxDeltaT(5.0), dMinDeltaVertexZ(-15.0), dMaxDeltaVertexZ(15.0), dMinP(0.0), dMaxP(10.0), dMinTheta(0.0), dMaxTheta(140.0), dMinRFDeltaT(-10.1), dMaxRFDeltaT(10.1) { dFinalStatePIDs.push_back(Gamma); dFinalStatePIDs.push_back(Neutron); dFinalStatePIDs.push_back(PiPlus); dFinalStatePIDs.push_back(KPlus); dFinalStatePIDs.push_back(Proton); dFinalStatePIDs.push_back(PiMinus); dFinalStatePIDs.push_back(KMinus); dPullTypes.resize(8); dPullTypes[0] = d_EPull; dPullTypes[1] = d_PxPull; dPullTypes[2] = d_PyPull; dPullTypes[3] = d_PzPull; dPullTypes[4] = d_XxPull; dPullTypes[5] = d_XyPull; dPullTypes[6] = d_XzPull; dPullTypes[7] = d_TPull; } unsigned int dNumDeltaPOverPBins, dNumDeltaThetaBins, dNumDeltaPhiBins, dNumDeltaTBins, dNumDeltaVertexZBins, dNum2DPBins; unsigned int dNum2DThetaBins, dNumRFDeltaTBins, dNumPullBins, dNum2DPullBins, dNumMCMatchingFOMBins; double dMinDeltaPOverP, dMaxDeltaPOverP, dMinDeltaTheta, dMaxDeltaTheta, dMinDeltaPhi, dMaxDeltaPhi, dMinDeltaT, dMaxDeltaT, dMinDeltaVertexZ, dMaxDeltaVertexZ; double dMinP, dMaxP, dMinTheta, dMaxTheta, dMinRFDeltaT, dMaxRFDeltaT; deque dFinalStatePIDs; void Initialize(JEventLoop* locEventLoop); private: bool Perform_Action(JEventLoop* locEventLoop, const DParticleCombo* locParticleCombo = NULL); deque dPullTypes; double dTargetZCenter; TH1I* dRFBeamBunchDeltaT_Hist; map dHistMap_MatchFOM; map dHistMap_DeltaPOverP; map dHistMap_DeltaTheta; map dHistMap_DeltaPhi; map dHistMap_DeltaT; map dHistMap_DeltaT_TOF; map dHistMap_DeltaT_BCAL; map dHistMap_DeltaT_FCAL; map dHistMap_DeltaVertexZ; map dHistMap_DeltaPOverPVsP; map dHistMap_DeltaPOverPVsTheta; map dHistMap_DeltaThetaVsP; map dHistMap_DeltaThetaVsTheta; map dHistMap_DeltaPhiVsP; map dHistMap_DeltaPhiVsTheta; map dHistMap_DeltaTVsTheta; map dHistMap_DeltaTVsP; map dHistMap_DeltaVertexZVsTheta; map dHistMap_PVsTheta_LargeDeltaT; map > dHistMap_Pulls; map > dHistMap_PullsVsP; map > dHistMap_PullsVsTheta; map dHistMap_TimePull_CDC; map dHistMap_TimePull_ST; map dHistMap_TimePull_BCAL; map dHistMap_TimePull_TOF; map dHistMap_TimePull_FCAL; map dHistMap_TimePullVsTheta_CDC; map dHistMap_TimePullVsTheta_BCAL; map dHistMap_TimePullVsTheta_ST; map dHistMap_TimePullVsP_CDC; map dHistMap_TimePullVsP_BCAL; map dHistMap_TimePullVsP_ST; map dHistMap_TimePullVsP_TOF; map dHistMap_TimePullVsP_FCAL; }; class DHistogramAction_TOFHitStudy : public DAnalysisAction { public: DHistogramAction_TOFHitStudy(const DReaction* locReaction, string locActionUniqueString = "") : DAnalysisAction(locReaction, "Hist_TOFHitStudy", false, locActionUniqueString), dNumDeltaTBins(400), dNumDeltaXBins(400), dNumdEBins(400), dNum2DPBins(250), dMinDeltaT(-1.0), dMaxDeltaT(1.0), dMinDeltaX(-6.0), dMaxDeltaX(6.0), dMindE(3.0), dMaxdE(20.0), dMinP(0.0), dMaxP(10.0) { dFinalStatePIDs.push_back(PiPlus); dFinalStatePIDs.push_back(KPlus); dFinalStatePIDs.push_back(Proton); dFinalStatePIDs.push_back(PiMinus); dFinalStatePIDs.push_back(KMinus); } DHistogramAction_TOFHitStudy(string locActionUniqueString) : DAnalysisAction(NULL, "Hist_TOFHitStudy", false, locActionUniqueString), dNumDeltaTBins(400), dNumDeltaXBins(400), dNumdEBins(400), dNum2DPBins(250), dMinDeltaT(-1.0), dMaxDeltaT(1.0), dMinDeltaX(-6.0), dMaxDeltaX(6.0), dMindE(3.0), dMaxdE(20.0), dMinP(0.0), dMaxP(10.0) { dFinalStatePIDs.push_back(PiPlus); dFinalStatePIDs.push_back(KPlus); dFinalStatePIDs.push_back(Proton); dFinalStatePIDs.push_back(PiMinus); dFinalStatePIDs.push_back(KMinus); } DHistogramAction_TOFHitStudy(void) : DAnalysisAction(NULL, "Hist_TOFHitStudy", false, ""), dNumDeltaTBins(400), dNumDeltaXBins(400), dNumdEBins(400), dNum2DPBins(250), dMinDeltaT(-1.0), dMaxDeltaT(1.0), dMinDeltaX(-6.0), dMaxDeltaX(6.0), dMindE(3.0), dMaxdE(20.0), dMinP(0.0), dMaxP(10.0) { dFinalStatePIDs.push_back(PiPlus); dFinalStatePIDs.push_back(KPlus); dFinalStatePIDs.push_back(Proton); dFinalStatePIDs.push_back(PiMinus); dFinalStatePIDs.push_back(KMinus); } unsigned int dNumDeltaTBins, dNumDeltaXBins, dNumdEBins, dNum2DPBins; double dMinDeltaT, dMaxDeltaT, dMinDeltaX, dMaxDeltaX, dMindE, dMaxdE, dMinP, dMaxP; deque dFinalStatePIDs; void Initialize(JEventLoop* locEventLoop); private: bool Perform_Action(JEventLoop* locEventLoop, const DParticleCombo* locParticleCombo = NULL); map dHistMap_DeltaT; map dHistMap_DeltaX; map dHistMap_DeltaY; map dHistMap_dE; map dHistMap_DeltaTVsP; map dHistMap_DeltaXVsP; map dHistMap_DeltaYVsP; map dHistMap_dEVsP; }; class DHistogramAction_TruePID : public DAnalysisAction { public: DHistogramAction_TruePID(const DReaction* locReaction, string locActionUniqueString = "") : DAnalysisAction(locReaction, "Hist_TruePID", false, locActionUniqueString), dNumPBins(300), dNum2DPBins(150), dNumThetaBins(140), dMinP(0.0), dMaxP(10.0), dMinTheta(0.0), dMaxTheta(140.0), dMinThrownMatchFOM(5.73303E-7) { dAnalysisUtilities = NULL; } unsigned int dNumPBins, dNum2DPBins, dNumThetaBins; double dMinP, dMaxP, dMinTheta, dMaxTheta; private: bool Perform_Action(JEventLoop* locEventLoop, const DParticleCombo* locParticleCombo); void Initialize(JEventLoop* locEventLoop); double dMinThrownMatchFOM; const DAnalysisUtilities* dAnalysisUtilities; TH1I* dHist_TruePIDStatus; deque > dHistDeque_P_CorrectID; deque > dHistDeque_P_IncorrectID; deque > dHistDeque_PVsTheta_CorrectID; deque > dHistDeque_PVsTheta_IncorrectID; set > > dPreviouslyHistogrammedParticles; }; #endif // _DHistogramActions_Thrown_