19 if(locMissingPIDs.size() != 1)
26 string locHistName, locHistTitle;
31 japp->RootWriteLock();
38 locHistName =
"SCTrackDeltaPhiVsP";
39 locHistTitle = locTrackString +
string(
";p (GeV/c);SC / Track #Delta#phi#circ");
42 locHistName =
"SCTrackDeltaPhiVsTheta";
43 locHistTitle = locTrackString +
string(
";#theta#circ;SC / Track #Delta#phi#circ");
46 locHistName =
"SCTrackDeltaPhiVsZ";
47 locHistTitle = locTrackString +
string(
";Projected SC Hit-Z (cm);SC / Track #Delta#phi#circ");
51 locHistName =
"TOFTrackDistanceVsP";
52 locHistTitle = locTrackString +
string(
";p (GeV/c);TOF / Track Distance (cm)");
55 locHistName =
"TOFTrackDistanceVsTheta";
56 locHistTitle = locTrackString +
string(
";#theta#circ;TOF / Track Distance (cm)");
60 locHistName =
"FCALTrackDistanceVsP";
61 locHistTitle = locTrackString +
string(
";p (GeV/c);FCAL / Track Distance (cm)");
64 locHistName =
"FCALTrackDistanceVsTheta";
65 locHistTitle = locTrackString +
string(
";#theta#circ;FCAL / Track Distance (cm)");
69 locHistName =
"BCALDeltaPhiVsP";
70 locHistTitle = locTrackString +
string(
";p (GeV/c);BCAL / Track #Delta#phi#circ");
73 locHistName =
"BCALDeltaPhiVsZ";
74 locHistTitle = locTrackString +
string(
";Projected BCAL Hit-Z (cm);BCAL / Track #Delta#phi#circ");
77 locHistName =
"BCALDeltaPhiVsTheta";
78 locHistTitle = locTrackString +
string(
";#theta#circ;BCAL / Track #Delta#phi#circ");
81 locHistName =
"BCALDeltaZVsTheta";
82 locHistTitle = locTrackString +
string(
";#theta#circ;BCAL / Track #Deltaz (cm)");
85 locHistName =
"BCALDeltaZVsZ";
86 locHistTitle = locTrackString +
string(
";Projected BCAL Hit-Z (cm);BCAL / Track #Deltaz (cm)");
105 if(locMissingParticles.empty())
107 auto locMissingParticle = locMissingParticles[0];
108 double locP = locMissingParticle->momentum().Mag();
109 double locTheta = locMissingParticle->momentum().Theta()*180.0/TMath::Pi();
115 rt.
Swim(locMissingParticle->position(), locMissingParticle->momentum(), rt.
q);
117 vector<const DBCALShower*> locBCALShowers;
118 locEventLoop->Get(locBCALShowers);
120 vector<const DFCALShower*> locFCALShowers;
121 locEventLoop->Get(locFCALShowers);
123 vector<const DTOFPoint*> locTOFPoints;
124 locEventLoop->Get(locTOFPoints);
126 vector<const DSCHit*> locSCHits;
127 locEventLoop->Get(locSCHits);
130 shared_ptr<const DBCALShowerMatchParams> locBestBCALMatchParams;
131 double locStartTimeVariance = 0.0;
134 bool locBCALHitFoundFlag =
dParticleID->
Get_ClosestToTrack(&rt, locBCALShowers,
false, locStartTime, locBestBCALMatchParams, &locStartTimeVariance, &locProjPos, &locProjMom);
135 double locBCALProjectedZ = locProjPos.Z();
136 double locBCALDeltaPhi = locBCALHitFoundFlag ? locBestBCALMatchParams->dDeltaPhiToShower*180.0/TMath::Pi() : 9.9E9;
139 shared_ptr<const DFCALShowerMatchParams> locBestFCALMatchParams;
141 DVector3 locProjPos_FCALMissing, locProjMom_FCALMissing;
142 bool locFCALHitFoundFlag =
dParticleID->
Get_ClosestToTrack(&rt, locFCALShowers,
false, locStartTime, locBestFCALMatchParams, &locStartTimeVariance, &locProjPos_FCALMissing, &locProjMom_FCALMissing);
145 shared_ptr<const DSCHitMatchParams> locBestSCMatchParams;
147 bool locSCHitFoundFlag =
dParticleID->
Get_ClosestToTrack(&rt, locSCHits,
true,
false, locStartTime, locBestSCMatchParams, &locStartTimeVariance, &locProjPos, &locProjMom);
148 double locSCProjectedZ = locProjPos.Z();
149 double locSCDeltaPhi = locSCHitFoundFlag ? locBestSCMatchParams->dDeltaPhiToHit*180.0/TMath::Pi() : 9.9E9;
152 shared_ptr<const DTOFHitMatchParams> locBestTOFMatchParams;
153 DVector3 locProjPos_TOFMissing, locProjMom_TOFMissing;
155 bool locTOFHitFoundFlag =
dParticleID->
Get_ClosestToTrack(&rt, locTOFPoints,
false, locStartTime, locBestTOFMatchParams, &locStartTimeVariance, &locProjPos_TOFMissing, &locProjMom_TOFMissing);
156 double locTOFDistance = 999.9;
157 if(locTOFHitFoundFlag)
159 double locDeltaX = locBestTOFMatchParams->dDeltaXToHit;
160 double locDeltaY = locBestTOFMatchParams->dDeltaYToHit;
161 if(locBestTOFMatchParams->dTOFPoint->Is_XPositionWellDefined() == locBestTOFMatchParams->dTOFPoint->Is_YPositionWellDefined())
162 locTOFDistance =
sqrt(locDeltaX*locDeltaX + locDeltaY*locDeltaY);
164 locTOFDistance = locBestTOFMatchParams->dTOFPoint->Is_XPositionWellDefined() ? locDeltaX : locDeltaY;
269 if((locKinFitResults !=
nullptr) && (locKinFitResults->Get_ConfidenceLevel() > 0.0001))
278 if(locBCALHitFoundFlag)
288 if(locFCALHitFoundFlag)
295 if(locTOFHitFoundFlag)
302 if(locSCHitFoundFlag)
314 if((locP < 0.2) && locMassiveParticleFlag)
316 if((locP < 0.3) && locMassiveParticleFlag)
318 if((locP < 0.4) && (locTheta < 30.0) && locMassiveParticleFlag)
322 if(!locSCHitFoundFlag)
324 double locSCDeltaPhiCut = 25.0 + 0.12*exp(0.13*(locSCProjectedZ - 50.0));
325 if(fabs(locSCDeltaPhi) > locSCDeltaPhiCut)
329 if((locP < 0.4) && locMassiveParticleFlag)
335 if(locBCALHitFoundFlag)
336 return ((fabs(locBCALDeltaPhi) < 2.0) && (fabs(locBestBCALMatchParams->dDeltaZToShower) < 15.0));
339 if(!locTOFHitFoundFlag || !locFCALHitFoundFlag)
342 if(locTOFHitFoundFlag)
343 return (locTOFDistance < 30.0);
345 return (locBestFCALMatchParams->dDOCAToShower < 50.0);
void Initialize(JEventLoop *locEventLoop)
unsigned int dNum2DBCALZBins
static char * ParticleName_ROOT(Particle_t p)
const DMagneticFieldMap * dMagneticFieldMap
const DReaction * Get_Reaction(void) const
TH2I * dHist_FCALTrackDistanceVsTheta
DMagneticFieldMap * GetBfield(unsigned int run_number=1)
TH2I * dHist_FCALTrackDistanceVsP
void SetMass(double mass)
void Swim(const DVector3 &pos, const DVector3 &mom, double q=-1000.0, const TMatrixFSym *cov=NULL, double smax=2000.0, const DCoordinateSystem *wire=NULL)
TDirectoryFile * CreateAndChangeTo_ActionDirectory(void)
static int ParticleCharge(Particle_t p)
unsigned int dNum2DDeltaZBins
bool Perform_Action(JEventLoop *locEventLoop, const DParticleCombo *locParticleCombo)
TH2I * dHist_TOFPointTrackDistanceVsP
unsigned int dNum2DTrackDOCABins
unsigned int dNum2DSCZBins
float dSCMatchMaxDeltaPhi
vector< const DKinematicData * > Get_MissingParticles(const DReaction *locReaction) const
TH2I * dHist_SCTrackDeltaPhiVsP
TH2I * dHist_SCTrackDeltaPhiVsTheta
const DParticleID * dParticleID
bool Get_ClosestToTrack(const DReferenceTrajectory *rt, const vector< const DBCALShower * > &locBCALShowers, bool locCutFlag, double &locStartTime, shared_ptr< const DBCALShowerMatchParams > &locBestMatchParams, double *locStartTimeVariance=nullptr, DVector3 *locBestProjPos=nullptr, DVector3 *locBestProjMom=nullptr) const
DLorentzVector Get_SpacetimeVertex(void) const
TH2I * dHistMap_BCALDeltaZVsZ
TH2I * dHistMap_BCALDeltaPhiVsZ
vector< Particle_t > Get_MissingPIDs(int locStepIndex=-1, Charge_t locCharge=d_AllCharges, bool locIncludeDuplicatesFlag=true) const
static double ParticleMass(Particle_t p)
TH2I * dHistMap_BCALDeltaPhiVsTheta
TH2I * dHist_TOFPointTrackDistanceVsTheta
unsigned int dNum2DThetaBins
const DKinFitResults * Get_KinFitResults(void) const
const DParticleComboStep * Get_ParticleComboStep(size_t locStepIndex) const
TH2I * dHist_BCALDeltaZVsTheta
unsigned int dNum2DDeltaPhiBins
TH2I * dHistMap_SCTrackDeltaPhiVsZ
TH2I * dHist_BCALDeltaPhiVsP
float dSCMatchMinDeltaPhi