14 InitJANAPlugin(locApplication);
34 japp->RootWriteLock();
36 string locOutputFileName =
"hd_root.root";
37 if(gPARMS->Exists(
"OUTPUT_FILENAME"))
38 gPARMS->GetParameter(
"OUTPUT_FILENAME", locOutputFileName);
41 TFile* locFile = (TFile*)gROOT->FindObject(locOutputFileName.c_str());
47 TObject* locTree = gDirectory->Get(
"dirc");
49 fTree =
new TTree(
"dirc",
"dirc tree");
51 fTree =
static_cast<TTree*
>(locTree);
53 fcEvent =
new TClonesArray(
"DrcEvent");
77 vector<const DDIRCGeometry*> locDIRCGeometryVec;
78 loop->Get(locDIRCGeometryVec);
79 auto locDIRCGeometry = locDIRCGeometryVec[0];
83 loop->GetSingle(locParticleID);
85 vector<const DAnalysisResults*> locAnalysisResultsVector;
86 loop->Get(locAnalysisResultsVector);
88 vector<const DTrackTimeBased*> locTimeBasedTracks;
89 loop->Get(locTimeBasedTracks);
91 vector<const DDIRCPmtHit*> locDIRCPmtHits;
92 loop->Get(locDIRCPmtHits);
95 loop->GetSingle(locDetectorMatches);
98 japp->RootWriteLock();
103 for (
size_t loc_i = 0; loc_i < locAnalysisResultsVector.size(); loc_i++){
104 deque<const DParticleCombo*> locPassedParticleCombos;
105 locAnalysisResultsVector[loc_i]->Get_PassedParticleCombos(locPassedParticleCombos);
106 const DReaction* locReaction = locAnalysisResultsVector[loc_i]->Get_Reaction();
107 std::vector<double> previousInv;
110 for(
size_t icombo = 0; icombo < locPassedParticleCombos.size(); ++icombo){
111 double chisq = locPassedParticleCombos[icombo]->Get_KinFitResults()->Get_ChiSq();
114 auto locParticleComboStep = locPassedParticleCombos[icombo]->Get_ParticleComboStep(0);
117 for(
size_t parti=0; parti<locParticleComboStep->Get_NumFinalParticles(); parti++){
118 auto locParticle = locParticleComboStep->Get_FinalParticle(parti);
121 if(locParticle->PID() ==
PiPlus || locParticle->PID() ==
PiMinus || locParticle->PID() ==
KPlus || locParticle->PID() ==
KMinus){
122 locInvP4 += locParticle->lorentzMomentum();
125 double tm = locInvP4.M();
127 if(std::find_if(previousInv.begin(), previousInv.end(), [&tm](
double m){
return fabs(m-tm)<0.000000001;}) != previousInv.end()) {
continue; }
128 previousInv.push_back(tm);
133 auto locChargedTrack =
static_cast<const DChargedTrack*
>(locParticleComboStep->Get_FinalParticle_SourceObject(parti));
134 auto locChargedTrackHypothesis = locChargedTrack->
Get_Hypothesis(locParticle->PID());
138 int locDCHits = locTrackTimeBased->
Ndof + 5;
139 double locTheta = locTrackTimeBased->momentum().Theta()*180/TMath::Pi();
140 double locP = locTrackTimeBased->momentum().Mag();
141 if(locDCHits < 10 || locTheta < 1.0 || locTheta > 12.0 || locP > 12.0)
continue;
144 shared_ptr<const DTOFHitMatchParams> locTOFHitMatchParams;
145 bool foundTOF = locParticleID->
Get_BestTOFMatchParams(locTrackTimeBased, locDetectorMatches, locTOFHitMatchParams);
146 if(!foundTOF || locTOFHitMatchParams->Get_DistanceToTrack() > 20.0)
continue;
147 double toftrackdist = locTOFHitMatchParams->Get_DistanceToTrack();
151 shared_ptr<const DDIRCMatchParams> locDIRCMatchParams;
152 bool foundDIRC = locParticleID->
Get_DIRCMatchParams(locTrackTimeBased, locDetectorMatches, locDIRCMatchParams);
155 DVector3 posInBar = locDIRCMatchParams->dExtrapolatedPos;
156 DVector3 momInBar = locDIRCMatchParams->dExtrapolatedMom;
157 double locExtrapolatedTime = locDIRCMatchParams->dExtrapolatedTime;
175 for(
const auto dhit : locDIRCPmtHits){
194 if(cevt.GetEntriesFast()>0)
fTree->Fill();
const DDIRCGeometry * dDIRCGeometry
void SetTime(Double_t val)
void SetPixelId(Int_t val)
jerror_t evnt(jana::JEventLoop *locEventLoop, uint64_t locEventNumber)
Called every event.
void SetMissMass(Double_t val)
void SetLeadTime(Double_t val)
const DTrackTimeBased * Get_TrackTimeBased(void) const
jerror_t init(void)
Called once at program start.
bool Get_DIRCMatchParams(const DTrackingData *locTrack, const DDetectorMatches *locDetectorMatches, shared_ptr< const DDIRCMatchParams > &locBestMatchParams) const
TLorentzVector DLorentzVector
void SetChiSq(Double_t val)
static int PDGtype(Particle_t p)
const DChargedTrackHypothesis * Get_Hypothesis(Particle_t locPID) const
void SetParent(Int_t val)
bool Get_BestTOFMatchParams(const DTrackingData *locTrack, const DDetectorMatches *locDetectorMatches, shared_ptr< const DTOFHitMatchParams > &locBestMatchParams) const
const DAnalysisUtilities * fAnalysisUtilities
void SetDcHits(Int_t val)
DLorentzVector Calc_MissingP4(const DReaction *locReaction, const DParticleCombo *locParticleCombo, bool locUseKinFitDataFlag) const
void SetTofTrackDist(Double_t val)
void SetMomentum(TVector3 val)
void SetChannel(Int_t val)
int Ndof
Number of degrees of freedom in the fit.
jerror_t erun(void)
Called every time run number changes, provided brun has been called.
jerror_t fini(void)
Called after last event of last event source has been processed.
void SetInvMass(Double_t val)
void SetPosition(TVector3 val)
jerror_t brun(jana::JEventLoop *locEventLoop, int locRunNumber)
Called every time a new run number is detected.
void SetTotTime(Double_t val)
int GetBar(float y) const