20 if(locMissingPIDs.size() != 1)
34 TMap* locMiscInfoMap =
new TMap();
35 locMiscInfoMap->SetName(
"MiscInfoMap");
36 locUserInfo->Add(locMiscInfoMap);
38 locMiscInfoMap->Add(
new TObjString(
"ReactionName"),
new TObjString(locReaction->
Get_ReactionName().c_str()));
40 ostringstream locOStream;
42 locMiscInfoMap->Add(
new TObjString(
"MissingPID_PDG"),
new TObjString(locOStream.str().c_str()));
45 locOStream << locEventLoop->GetJEvent().GetRunNumber();
46 locMiscInfoMap->Add(
new TObjString(
"RunNumber"),
new TObjString(locOStream.str().c_str()));
49 locBranchRegister.Register_Single<ULong64_t>(
"EventNumber");
50 locBranchRegister.Register_Single<Float_t>(
"BeamEnergy");
51 locBranchRegister.Register_Single<Float_t>(
"BeamRFDeltaT");
52 locBranchRegister.Register_Single<Float_t>(
"ComboVertexZ");
53 locBranchRegister.Register_Single<UChar_t>(
"NumExtraTracks");
54 locBranchRegister.Register_Single<Float_t>(
"MissingMassSquared");
55 locBranchRegister.Register_Single<Float_t>(
"KinFitChiSq");
56 locBranchRegister.Register_Single<UInt_t>(
"KinFitNDF");
57 locBranchRegister.Register_Single<TVector3>(
"MissingP3");
60 locBranchRegister.Register_Single<Float_t>(
"MissingP3_CovPxPx");
61 locBranchRegister.Register_Single<Float_t>(
"MissingP3_CovPxPy");
62 locBranchRegister.Register_Single<Float_t>(
"MissingP3_CovPxPz");
63 locBranchRegister.Register_Single<Float_t>(
"MissingP3_CovPyPy");
64 locBranchRegister.Register_Single<Float_t>(
"MissingP3_CovPyPz");
65 locBranchRegister.Register_Single<Float_t>(
"MissingP3_CovPzPz");
68 locBranchRegister.Register_Single<UInt_t>(
"NumUnusedWireBased");
69 locBranchRegister.Register_Single<UInt_t>(
"NumUnusedTimeBased");
70 locBranchRegister.Register_FundamentalArray<Float_t>(
"ReconMatchFOM_WireBased",
"NumUnusedWireBased");
71 locBranchRegister.Register_FundamentalArray<Float_t>(
"ReconTrackingFOM_WireBased",
"NumUnusedWireBased");
72 locBranchRegister.Register_ClonesArray<TVector3>(
"ReconP3_WireBased");
73 locBranchRegister.Register_FundamentalArray<Float_t>(
"ReconMatchFOM",
"NumUnusedTimeBased");
74 locBranchRegister.Register_FundamentalArray<Float_t>(
"ReconTrackingFOM",
"NumUnusedTimeBased");
75 locBranchRegister.Register_ClonesArray<TVector3>(
"ReconP3");
76 locBranchRegister.Register_FundamentalArray<Float_t>(
"MeasuredMissingE",
"NumUnusedTimeBased");
77 locBranchRegister.Register_FundamentalArray<UInt_t>(
"TrackCDCRings",
"NumUnusedTimeBased");
78 locBranchRegister.Register_FundamentalArray<UInt_t>(
"TrackFDCPlanes",
"NumUnusedTimeBased");
81 locBranchRegister.Register_FundamentalArray<Float_t>(
"ReconP3_CovPxPx",
"NumUnusedTimeBased");
82 locBranchRegister.Register_FundamentalArray<Float_t>(
"ReconP3_CovPxPy",
"NumUnusedTimeBased");
83 locBranchRegister.Register_FundamentalArray<Float_t>(
"ReconP3_CovPxPz",
"NumUnusedTimeBased");
84 locBranchRegister.Register_FundamentalArray<Float_t>(
"ReconP3_CovPyPy",
"NumUnusedTimeBased");
85 locBranchRegister.Register_FundamentalArray<Float_t>(
"ReconP3_CovPyPz",
"NumUnusedTimeBased");
86 locBranchRegister.Register_FundamentalArray<Float_t>(
"ReconP3_CovPzPz",
"NumUnusedTimeBased");
99 locEventLoop->GetSingle(locDetectorMatches);
101 vector<const DBCALShower*> locBCALShowers;
102 locEventLoop->Get(locBCALShowers);
104 vector<const DChargedTrack*> locUnusedChargedTracks;
122 DVector3 locMissingP3 = locMeasuredMissingP4.Vect();
123 TMatrixDSym locMissingCovarianceMatrix(3);
125 if(locKinFitResults == NULL)
128 for(
unsigned int loc_q = 0; loc_q < 3; ++loc_q)
130 for(
unsigned int loc_r = 0; loc_r < 3; ++loc_r)
131 locMissingCovarianceMatrix(loc_q, loc_r) = locFMissingCovarianceMatrix(loc_q, loc_r);
137 locMissingP3 = locMissingParticle->
momentum();
138 const TMatrixFSym& locKinFitCovarianceMatrix = *(locMissingParticle->errorMatrix());
139 for(
unsigned int loc_q = 0; loc_q < 3; ++loc_q)
141 for(
unsigned int loc_r = 0; loc_r < 3; ++loc_r)
142 locMissingCovarianceMatrix(loc_q, loc_r) = locKinFitCovarianceMatrix(loc_q, loc_r);
148 double locBeamRFDeltaT = locBeamParticle->
time() - locEventRFBunch->
dTime;
151 size_t locNumExtraTracks = 0;
152 for(
auto locChargedTrack : locUnusedChargedTracks)
154 auto locBestHypothesis = locChargedTrack->Get_BestFOM();
155 auto locNumTrackHits = locBestHypothesis->Get_TrackTimeBased()->Ndof + 5;
156 if(locNumTrackHits >= 10)
169 if(locKinFitResults == NULL)
179 TVector3 locTMissingP3(locMissingP3.Px(), locMissingP3.Py(), locMissingP3.Pz());
192 if(!locEventLoop->GetJEvent().GetStatusBit(
kSTATUS_REST))
195 vector<const DTrackWireBased*> locUnusedWireBasedTracks;
199 size_t locNumWireBasedTracks = 0;
200 for(
size_t loc_i = 0; loc_i < locUnusedWireBasedTracks.size(); ++loc_i)
202 const DTrackWireBased* locWireBasedTrack = locUnusedWireBasedTracks[loc_i];
207 TVector3 locWireBasedP3(locWireBasedDP3.X(), locWireBasedDP3.Y(), locWireBasedDP3.Z());
211 const TMatrixFSym& locCovarianceMatrix = *(locWireBasedTrack->
errorMatrix());
212 TMatrixDSym locDCovarianceMatrix(3);
213 for(
unsigned int loc_j = 0; loc_j < 3; ++loc_j)
215 for(
unsigned int loc_k = 0; loc_k < 3; ++loc_k)
216 locDCovarianceMatrix(loc_j, loc_k) = locCovarianceMatrix(loc_j, loc_k);
218 locDCovarianceMatrix += locMissingCovarianceMatrix;
221 TDecompLU locDecompLU(locDCovarianceMatrix);
223 if(locDecompLU.Decompose() && (fabs(locDCovarianceMatrix.Determinant()) >= 1.0E-300))
225 locDCovarianceMatrix.Invert();
227 double locMatchFOM =
Calc_MatchFOM(locDeltaP3, locDCovarianceMatrix);
233 ++locNumWireBasedTracks;
243 vector<const DTrackTimeBased*> locUnusedTimeBasedTracks;
247 size_t locNumTimeBasedTracks = 0;
248 for(
size_t loc_i = 0; loc_i < locUnusedTimeBasedTracks.size(); ++loc_i)
250 const DTrackTimeBased* locTimeBasedTrack = locUnusedTimeBasedTracks[loc_i];
255 TVector3 locTimeBasedP3(locTimeBasedDP3.X(), locTimeBasedDP3.Y(), locTimeBasedDP3.Z());
259 const TMatrixFSym& locCovarianceMatrix = *(locTimeBasedTrack->
errorMatrix());
260 TMatrixDSym locDCovarianceMatrix(3);
261 for(
unsigned int loc_j = 0; loc_j < 3; ++loc_j)
263 for(
unsigned int loc_k = 0; loc_k < 3; ++loc_k)
264 locDCovarianceMatrix(loc_j, loc_k) = locCovarianceMatrix(loc_j, loc_k);
266 locDCovarianceMatrix += locMissingCovarianceMatrix;
269 TDecompLU locDecompLU(locDCovarianceMatrix);
271 if(locDecompLU.Decompose() && (fabs(locDCovarianceMatrix.Determinant()) >= 1.0E-300))
273 locDCovarianceMatrix.Invert();
275 double locMatchFOM =
Calc_MatchFOM(locDeltaP3, locDCovarianceMatrix);
294 ++locNumTimeBasedTracks;
307 locDeltas(0, 0) = locDeltaP3.Px();
308 locDeltas(1, 0) = locDeltaP3.Py();
309 locDeltas(2, 0) = locDeltaP3.Pz();
311 double locChiSq = (locInverse3x3Matrix.SimilarityT(locDeltas))(0, 0);
312 return TMath::Prob(locChiSq, 3);
double Calc_MatchFOM(const DVector3 &locDeltaP3, TMatrixDSym locInverse3x3Matrix) const
double energy(void) const
const DReaction * Get_Reaction(void) const
const DParticleID * dParticleID
void Get_UnusedTimeBasedTracks(JEventLoop *locEventLoop, const DParticleCombo *locParticleCombo, vector< const DTrackTimeBased * > &locUnusedTimeBasedTracks) const
void Fill_Array(string locBranchName, const DType &locData, size_t locArrayIndex)
bool Create_Branches(const DTreeBranchRegister &locTreeBranchRegister)
const DKinematicData * Get_InitialParticle_Measured(void) const
TLorentzVector DLorentzVector
const DEventRFBunch * Get_EventRFBunch(void) const
static int ParticleCharge(Particle_t p)
static int PDGtype(Particle_t p)
DTreeFillData dTreeFillData
double Get_ChiSq(void) const
void Fill(DTreeFillData &locTreeFillData)
void Get_UnusedChargedTracks(JEventLoop *locEventLoop, const DParticleCombo *locParticleCombo, vector< const DChargedTrack * > &locUnusedChargedTracks) const
static DTreeInterface * Create_DTreeInterface(string locTreeName, string locFileName)
DLorentzVector Calc_MissingP4(const DReaction *locReaction, const DParticleCombo *locParticleCombo, bool locUseKinFitDataFlag) const
vector< const DKinematicData * > Get_MissingParticles(const DReaction *locReaction) const
string Get_ReactionName(void) const
void Initialize(JEventLoop *locEventLoop)
bool Perform_Action(JEventLoop *locEventLoop, const DParticleCombo *locParticleCombo)
void Get_UnusedWireBasedTracks(JEventLoop *locEventLoop, const DParticleCombo *locParticleCombo, vector< const DTrackWireBased * > &locUnusedWireBasedTracks) const
TList * Get_UserInfo(void) const
vector< Particle_t > Get_MissingPIDs(int locStepIndex=-1, Charge_t locCharge=d_AllCharges, bool locIncludeDuplicatesFlag=true) const
DLorentzVector lorentzMomentum(void) const
const DKinematicData * Get_InitialParticle(void) const
const DVector3 & momentum(void) const
const DKinFitResults * Get_KinFitResults(void) const
const DAnalysisUtilities * dAnalysisUtilities
shared_ptr< const TMatrixFSym > errorMatrix(void) const
const DParticleComboStep * Get_ParticleComboStep(size_t locStepIndex) const
DTreeInterface * dTreeInterface
unsigned int Get_NDF(void) const
DLorentzVector Get_EventVertex(void) const
Particle_t PID(void) const
TMatrixFSym Calc_MissingP3Covariance(const DReaction *locReaction, const DParticleCombo *locParticleCombo) const
void Fill_Single(string locBranchName, const DType &locData)