13 JCalibration *jcalib = dapp->GetJCalibration((locEventLoop->GetJEvent()).GetRunNumber());
17 map<string, double> photon_endpoint_energy;
18 if(jcalib->Get(
"/PHOTON_BEAM/endpoint_energy", photon_endpoint_energy) ==
false) {
19 endpoint_energy = photon_endpoint_energy[
"PHOTON_BEAM_ENDPOINT_ENERGY"];
22 jout<<
"No /PHOTON_BEAM/endpoint_energy for this run number: using default of 12 GeV"<<endl;
28 map<string, double> photon_beam_param;
29 if(jcalib->Get(
"/ANALYSIS/beam_asymmetry/coherent_energy", photon_beam_param) ==
false) {
34 jout<<
"No /ANALYSIS/beam_asymmetry/coherent_energy for this run number: using default range of 0-12 GeV"<<endl;
48 locEventLoop->GetSingle(locParticleID);
59 japp->RootWriteLock();
68 dMM_M2pi = GetOrCreate_Histogram<TH2I>(
"MM_M2pi",
"MM off #pi^{+}#pi^{-} vs M_{#pi^{+}#pi^{-}}; M_{#pi^{+}#pi^{-}}; MM", 200, 0.0, 2.0, 200, 0., 4.);
69 dMM_M2pi_noEle = GetOrCreate_Histogram<TH2I>(
"MM_M2pi_noEle",
"MM off #pi^{+}#pi^{-} vs M_{#pi^{+}#pi^{-}}; M_{#pi^{+}#pi^{-}}; MM", 200, 0.0, 2.0, 200, 0., 4.);
70 dt_M2pi_noEle = GetOrCreate_Histogram<TH2I>(
"t_M2pi_noEle",
"|t| vs M_{#pi^{+}#pi^{-}}; M_{#pi^{+}#pi^{-}}; t", 200, 0.0, 2.0, 1000, 0., 5.);
71 dPiPlusPsi_t = GetOrCreate_Histogram<TH2I>(
"PiPlusPsi_t",
"#psi vs |t|; |t|; #pi^{+} #psi",1000,0.,5.,360,-180,180);
74 dMM2_M2pi = GetOrCreate_Histogram<TH2I>(
"MM2_M2pi",
"MM^{2} off #pi^{+}#pi^{-} vs M_{#pi^{+}#pi^{-}}; M_{#pi^{+}#pi^{-}}; MM^{2}", 200, 0.0, 2.0, 200, -0.1, 0.1);
75 dProton_dEdx_P = GetOrCreate_Histogram<TH2I>(
"Proton_dEdx_P",
"dE/dx vs p; p; dE/dx",200,0,2,500,0,25);
76 dProton_P_Theta = GetOrCreate_Histogram<TH2I>(
"Proton_P_Theta",
"p vs #theta; #theta; p (GeV/c)",180,0,180,120,0,12);
77 dDeltaE_M2pi = GetOrCreate_Histogram<TH2I>(
"DeltaE_M2pi",
"#DeltaE vs M_{#pi^{+}#pi^{-}}; M_{#pi^{+}#pi^{-}}; #DeltaE (tagger - tracks)", 200, 0.0, 2.0, 200, -5., 5.);
78 dDeltaE_M2pi_ProtonTag = GetOrCreate_Histogram<TH2I>(
"DeltaE_M2pi_ProtonTag",
"#DeltaE vs M_{#pi^{+}#pi^{-}}; M_{#pi^{+}#pi^{-}}; #DeltaE (tagger - tracks)", 200, 0.0, 2.0, 200, -5., 5.);
80 dDalitz_p2pi = GetOrCreate_Histogram<TH2I>(
"Dalitz_p2pi",
"Dalitz p#pi^{+}#pi^{-}; M_{#pi^{+}#pi^{-}}^{2}; M_{p#pi^{+}}^{2}", 200, 0.0, 5.0, 200, 0., 5.);
81 dMppiplus_M2pi = GetOrCreate_Histogram<TH2I>(
"Mppiplus_M2pi",
"Psuedo-Dalitz p#pi^{+}#pi^{-}; M_{#pi^{+}#pi^{-}}; M_{p#pi^{+}}", 200, 0.0, 2.0, 200, 1.0, 3.0);
82 dMppiminus_M2pi = GetOrCreate_Histogram<TH2I>(
"Mppiminus_M2pi",
"Psuedo-Dalitz p#pi^{+}#pi^{-}; M_{#pi^{+}#pi^{-}}; M_{p#pi^{-}}", 200, 0.0, 2.0, 200, 1.0, 3.0);
86 dPiPlusPsi_t = GetOrCreate_Histogram<TH2I>(
"PiPlusPsi_t",
"#psi vs |t|; |t|; #pi^{+} #psi",1000,0.,5.,360,-180,180);
90 dBaryonM_CosTheta_Egamma1 = GetOrCreate_Histogram<TH2I>(
"BaryonM_CosTheta_Egamma1",
"Baryon M_{p#pi^{+}} vs cos#theta: E_{#gamma} < 2.5; cos#theta; M_{p#pi^{+}}", 100, -1, 1, 100, 1.0, 2.5);
91 dBaryonM_CosTheta_Egamma2 = GetOrCreate_Histogram<TH2I>(
"BaryonM_CosTheta_Egamma2",
"Baryon M_{p#pi^{+}} vs cos#theta: 2.5 < E_{#gamma} < 3.0; cos#theta; M_{p#pi^{+}}", 100, -1, 1, 100, 1.0, 2.5);
92 dBaryonM_CosTheta_Egamma3 = GetOrCreate_Histogram<TH2I>(
"BaryonM_CosTheta_Egamma3",
"Baryon M_{p#pi^{+}} vs cos#theta: E_{#gamma} > 3.0; cos#theta; M_{p#pi^{+}}", 100, -1, 1, 100, 1.0, 2.5);
105 locEventLoop->GetSingle(locDetectorMatches);
113 double locBeamPhotonEnergy = locBeamPhoton->energy();
117 for(
size_t loc_i = 0; loc_i < 3; ++loc_i) {
118 if(locParticles[loc_i] == NULL)
continue;
119 if(locParticles[loc_i]->PID() ==
PiPlus || locParticles[loc_i]->PID() ==
PiMinus)
120 locP4_2pi += locParticles[loc_i]->lorentzMomentum();
135 else locProtonP4 = locMissingP4;
140 locSumInitP4 += locProtonP4Init;
141 locSumInitP4 += locBeamPhoton->lorentzMomentum();
142 TLorentzVector locDelta = (locProtonP4 - locProtonP4Init);
143 double t = locDelta.M2();
145 TLorentzVector locPiPlus_P4 = locParticles[1]->lorentzMomentum();
148 TLorentzRotation resonanceBoost( -locP4_2pi.BoostVector() );
149 TLorentzVector recoil_res = resonanceBoost * locProtonP4;
150 TLorentzVector p1_res = resonanceBoost * locPiPlus_P4;
153 TVector3
y = (locBeamPhoton->lorentzMomentum().Vect().Unit().Cross(-locProtonP4.Vect().Unit())).Unit();
156 TVector3 z = -1. * recoil_res.Vect().Unit();
157 TVector3
x = y.Cross(z).Unit();
158 TVector3 angles( (p1_res.Vect()).Dot(x),
159 (p1_res.Vect()).Dot(y),
160 (p1_res.Vect()).Dot(z) );
162 double cosTheta = angles.CosTheta();
163 double phi = angles.Phi();
165 TVector3 eps(1.0, 0.0, 0.0);
166 double Phi = atan2(y.Dot(eps), locBeamPhoton->lorentzMomentum().Vect().Unit().Dot(eps.Cross(y)));
168 double locPsi = phi - Phi;
169 if(locPsi < -1*TMath::Pi()) locPsi += 2*TMath::Pi();
170 if(locPsi > TMath::Pi()) locPsi -= 2*TMath::Pi();
178 dEgamma->Fill(locBeamPhotonEnergy);
182 dMM_M2pi->Fill(locP4_2pi.M(), locMissingP4.M());
184 if(locParticles[1]->lorentzMomentum().Theta()*180/TMath::Pi() > 2. && locParticles[2]->lorentzMomentum().Theta()*180/TMath::Pi() > 2.) {
198 dMM2_M2pi->Fill(locP4_2pi.M(), locMissingP4.M2());
203 dProton_P_Theta->Fill(locProtonP4.Vect().Theta()*180/TMath::Pi(), locProtonP4.Vect().Mag());
212 locP4_ppiplus += locParticles[1]->lorentzMomentum();
213 locP4_ppiminus += locParticles[2]->lorentzMomentum();
vector< const DKinematicData * > Get_FinalParticles_Measured(void) const
const DAnalysisUtilities * dAnalysisUtilities
TDirectoryFile * ChangeTo_BaseDirectory(void)
TH2I * dDeltaE_M2pi_ProtonTag
TH2I * dBaryonM_CosTheta_Egamma2
const DReaction * Get_Reaction(void) const
const DTrackTimeBased * Get_TrackTimeBased(void) const
TDirectoryFile * CreateAndChangeTo_ActionDirectory(void)
const DKinematicData * Get_InitialParticle_Measured(void) const
TLorentzVector DLorentzVector
const DChargedTrackHypothesis * Get_Hypothesis(Particle_t locPID) const
bool Get_UseKinFitResultsFlag(void) const
const DParticleID * dParticleID
DLorentzVector Calc_MissingP4(const DReaction *locReaction, const DParticleCombo *locParticleCombo, bool locUseKinFitDataFlag) const
void Initialize(JEventLoop *locEventLoop)
vector< const DKinematicData * > Get_FinalParticles(void) const
vector< Particle_t > Get_MissingPIDs(int locStepIndex=-1, Charge_t locCharge=d_AllCharges, bool locIncludeDuplicatesFlag=true) const
DLorentzVector lorentzMomentum(void) const
const JObject * Get_FinalParticle_SourceObject(size_t locFinalParticleIndex) const
const DKinematicData * Get_InitialParticle(void) const
TH2I * dBaryonM_CosTheta_Egamma1
const DParticleComboStep * Get_ParticleComboStep(size_t locStepIndex) const
TH2I * dBaryonM_CosTheta_Egamma3
bool Perform_Action(JEventLoop *locEventLoop, const DParticleCombo *locParticleCombo)