24 if(gPARMS->Exists(
"DIRC:TRUTH_BARHIT"))
27 TDirectory *
dir =
new TDirectoryFile(
"DIRC",
"DIRC");
31 deque<TString> locLikelihoodName;
44 TDirectory *locBarDir =
new TDirectoryFile(
"PerBarDiagnostic",
"PerBarDiagnostic");
46 for(
int i=0; i<24; i++) {
47 hDiffBar[i] =
new TH2I(Form(
"hDiff_bar%02d",i), Form(
"Bar %02d; Channel ID; t_{calc}-t_{measured} [ns]; entries [#]", i),
dMaxChannels, 0,
dMaxChannels, 400,-20,20);
48 hNphCBar[i] =
new TH1I(Form(
"hNphC_bar%02d",i), Form(
"Bar %02d; # photons", i), 150, 0, 150);
49 hNphCBarVsP[i] =
new TH2I(Form(
"hNphCVsP_bar%d",i), Form(
"Bar %02d # photons vs. momentum; p (GeV/c); # photons", i), 120, 0, 12.0, 150, 0, 150);
50 hNphCBarInclusive[i] =
new TH1I(Form(
"hNphCInclusive_bar%02d",i), Form(
"Bar %02d; # photons", i), 150, 0, 150);
51 hNphCBarInclusiveVsP[i] =
new TH2I(Form(
"hNphCInclusiveVsP_bar%d",i), Form(
"Bar %02d # photons vs. momentum; p (GeV/c); # photons", i), 120, 0, 12.0, 150, 0, 150);
61 TDirectory *locParticleDir =
new TDirectoryFile(locParticleName.data(),locParticleName.data());
64 hExtrapolatedBarHitXY[locPID] =
new TH2I(Form(
"hExtrapolatedBarHitXY_%s",locParticleName.data()),
"; Bar Hit X (cm); Bar Hit Y (cm)", 200, -100, 100, 200, -100, 100);
65 hDiff[locPID] =
new TH1I(Form(
"hDiff_%s",locParticleName.data()), Form(
"; %s t_{calc}-t_{measured} [ns]; entries [#]", locParticleName.data()), 400,-100,100);
66 hDiffVsChannelDirect[locPID] =
new TH2I(Form(
"hDiffVsChannelDirect_%s",locParticleName.data()), Form(
"; Channel ID; %s t_{calc}-t_{measured} [ns]; entries [#]",locParticleName.data()),
dMaxChannels, 0,
dMaxChannels, 400,-20,20);
67 hDiffVsChannelReflected[locPID] =
new TH2I(Form(
"hDiffVsChannelReflected_%s",locParticleName.data()), Form(
"; Channel ID; %s t_{calc}-t_{measured} [ns]; entries [#]",locParticleName.data()),
dMaxChannels, 0,
dMaxChannels, 400,-20,20);
68 hNphC[locPID] =
new TH1I(Form(
"hNphC_%s",locParticleName.data()), Form(
"# photons; %s # photons", locParticleROOTName.data()), 150, 0, 150);
69 hNphCInclusive[locPID] =
new TH1I(Form(
"hNphCInclusive_%s",locParticleName.data()), Form(
"# photons; %s # photons", locParticleROOTName.data()), 150, 0, 150);
70 hThetaC[locPID] =
new TH1I(Form(
"hThetaC_%s",locParticleName.data()), Form(
"cherenkov angle; %s #theta_{C} [rad]", locParticleROOTName.data()), 250, 0.6, 1.0);
71 hDeltaThetaC[locPID] =
new TH1I(Form(
"hDeltaThetaC_%s",locParticleName.data()), Form(
"cherenkov angle; %s #Delta#theta_{C} [rad]", locParticleROOTName.data()), 200,-0.2,0.2);
72 hLikelihood[locPID] =
new TH1I(Form(
"hLikelihood_%s",locParticleName.data()), Form(
"; %s -lnL; entries [#]", locParticleROOTName.data()),1000,0.,1000.);
73 hLikelihoodDiff[locPID] =
new TH1I(Form(
"hLikelihoodDiff_%s",locParticleName.data()), Form(
"; %s;entries [#]", locLikelihoodName[loc_i].Data()),100,-200.,200.);
76 hNphCVsP[locPID] =
new TH2I(Form(
"hNphCVsP_%s",locParticleName.data()), Form(
"# photons vs. momentum; p (GeV/c); %s # photons", locParticleROOTName.data()), 120, 0, 12.0, 150, 0, 150);
77 hNphCInclusiveVsP[locPID] =
new TH2I(Form(
"hNphCInclusiveVsP_%s",locParticleName.data()), Form(
"# photons vs. momentum; p (GeV/c); %s # photons", locParticleROOTName.data()), 120, 0, 12.0, 150, 0, 150);
78 hThetaCVsP[locPID] =
new TH2I(Form(
"hThetaCVsP_%s",locParticleName.data()), Form(
"cherenkov angle vs. momentum; p (GeV/c); %s #theta_{C} [rad]", locParticleROOTName.data()), 120, 0.0, 12.0, 250, 0.75, 0.85);
79 hDeltaThetaCVsP[locPID] =
new TH2I(Form(
"hDeltaThetaCVsP_%s",locParticleName.data()), Form(
"cherenkov angle vs. momentum; p (GeV/c); %s #Delta#theta_{C} [rad]", locParticleROOTName.data()), 120, 0.0, 12.0, 200,-0.2,0.2);
80 hLikelihoodDiffVsP[locPID] =
new TH2I(Form(
"hLikelihoodDiffVsP_%s",locParticleName.data()), Form(
"; p (GeV/c); %s", locLikelihoodName[loc_i].Data()), 120, 0.0, 12.0, 100, -200, 200);
82 hDeltaTVsP[locPID] =
new TH2I(Form(
"hDeltaTVsP_%s",locParticleName.data()), Form(
"#Delta T vs. momentum; p (GeV/c); %s #Delta T (ns)", locParticleROOTName.data()), 120, 0.0, 12.0, 200, -100, 100);
88 string locParticleName =
"PiPlus";
90 TDirectory *locMapDir =
new TDirectoryFile(
"HitMapBar3",
"HitMapBar3");
92 for(
int locXbin=0; locXbin<40; locXbin++) {
93 double xbin_min = -100.0 + locXbin*5.0;
94 double xbin_max = xbin_min + 5.0;
96 hHitTimeMap[locXbin] =
new TH1I(Form(
"hHitTimeMap_%s_%d_%d",locParticleName.data(),locBar,locXbin), Form(
"Bar %d, xbin [%0.0f,%0.0f]; t_{measured} [ns]; entries [#]",locBar,xbin_min,xbin_max), 100,0,100);
97 hPixelHitMap[locXbin] =
new TH2S(Form(
"hPixelHit_%s_%d_%d",locParticleName.data(),locBar,locXbin), Form(
"Bar %d, xbin [%0.0f,%0.0f]; pixel rows; pixel columns", locBar,xbin_min,xbin_max), 144, -0.5, 143.5, 48, -0.5, 47.5);
98 hPixelHitMapReflected[locXbin] =
new TH2S(Form(
"hPixelHitReflected_%s_%d_%d",locParticleName.data(),locBar,locXbin), Form(
"Bar %d, xbin [%0.0f,%0.0f]; pixel rows; pixel columns", locBar,xbin_min,xbin_max), 144, -0.5, 143.5, 48, -0.5, 47.5);
116 loop->GetSingle(locTrigger);
122 loop->GetSingle(locParticleID);
124 vector<const DDIRCGeometry*> locDIRCGeometryVec;
125 loop->Get(locDIRCGeometryVec);
126 auto locDIRCGeometry = locDIRCGeometryVec[0];
130 loop->GetSingle(dDIRCLut);
133 vector<const DTrackTimeBased*> locTimeBasedTracks;
134 loop->Get(locTimeBasedTracks);
136 vector<const DDIRCPmtHit*> locDIRCPmtHits;
137 loop->Get(locDIRCPmtHits);
140 loop->GetSingle(locDetectorMatches);
144 for (
unsigned int loc_i = 0; loc_i < locTimeBasedTracks.size(); loc_i++){
149 int locDCHits = locTrackTimeBased->
Ndof + 5;
150 double locTheta = locTrackTimeBased->
momentum().Theta()*180/TMath::Pi();
151 double locP = locTrackTimeBased->
momentum().Mag();
152 if(locDCHits < 15 || locTheta < 1.0 || locTheta > 12.0 || locP > 12.0)
156 shared_ptr<const DTOFHitMatchParams> locTOFHitMatchParams;
157 bool foundTOF = locParticleID->
Get_BestTOFMatchParams(locTrackTimeBased, locDetectorMatches, locTOFHitMatchParams);
158 if(!foundTOF || locTOFHitMatchParams->dDeltaXToHit > 10.0 || locTOFHitMatchParams->dDeltaYToHit > 10.0)
165 shared_ptr<const DDIRCMatchParams> locDIRCMatchParams;
166 bool foundDIRC = locParticleID->
Get_DIRCMatchParams(locTrackTimeBased, locDetectorMatches, locDIRCMatchParams);
170 TVector3 posInBar = locDIRCMatchParams->dExtrapolatedPos;
171 TVector3 momInBar = locDIRCMatchParams->dExtrapolatedMom;
172 double locExpectedThetaC = locDIRCMatchParams->dExpectedThetaC;
173 double locExtrapolatedTime = locDIRCMatchParams->dExtrapolatedTime;
174 int locBar = locDIRCGeometry->GetBar(posInBar.Y());
175 if(locBar > 23)
continue;
177 japp->RootFillLock(
this);
179 japp->RootFillUnLock(
this);
181 double locAngle = dDIRCLut->
CalcAngle(momInBar, locMass);
185 map<shared_ptr<const DDIRCMatchParams>, vector<const DDIRCPmtHit*> > locDIRCTrackMatchParamsMap;
187 map<Particle_t, double> logLikelihoodSum;
189 int locPhotonInclusive = 0;
192 for(uint loc_i=0; loc_i<locDIRCPmtHits.size(); loc_i++) {
193 vector<pair<double, double>> locDIRCPhotons = dDIRCLut->
CalcPhoton(locDIRCPmtHits[loc_i], locExtrapolatedTime, posInBar, momInBar, locExpectedAngle, locAngle, locPID, logLikelihoodSum);
194 double locHitTime = locDIRCPmtHits[loc_i]->t - locExtrapolatedTime;
195 int locChannel = locDIRCPmtHits[loc_i]->ch%
dMaxChannels;
196 if(locHitTime > 0 && locHitTime < 100) locPhotonInclusive++;
198 int pixel_row = locDIRCGeometry->GetPixelRow(locChannel);
199 int pixel_col = locDIRCGeometry->GetPixelColumn(locChannel);
202 int locXbin = (int)(posInBar.X()/5.0) + 19;
203 if(locXbin >= 0 && locXbin < 40 && locBar == 3 && locPID ==
PiPlus && momInBar.Mag() > 4.0) {
205 japp->RootFillLock(
this);
211 japp->RootFillUnLock(
this);
214 if(locDIRCPhotons.size() > 0) {
217 for(uint loc_j = 0; loc_j<locDIRCPhotons.size(); loc_j++) {
218 double locDeltaT = locDIRCPhotons[loc_j].first - locHitTime;
219 double locThetaC = locDIRCPhotons[loc_j].second;
221 japp->RootFillLock(
this);
223 if(fabs(locThetaC-locExpectedThetaC)<0.05) {
224 hDiff[locPID]->Fill(locDeltaT);
230 hDiffBar[locBar]->Fill(locChannel,locDeltaT);
234 if(fabs(locDeltaT) < 100.0) {
235 hThetaC[locPID]->Fill(locThetaC);
236 hDeltaThetaC[locPID]->Fill(locThetaC-locExpectedThetaC);
237 hDeltaThetaCVsP[locPID]->Fill(momInBar.Mag(), locThetaC-locExpectedThetaC);
241 japp->RootFillUnLock(
this);
250 japp->RootFillLock(
this);
253 hNphC[locPID]->Fill(locDIRCMatchParams->dNPhotons);
255 hNphCVsP[locPID]->Fill(momInBar.Mag(), locDIRCMatchParams->dNPhotons);
257 hThetaCVsP[locPID]->Fill(momInBar.Mag(), locDIRCMatchParams->dThetaC);
258 hDeltaTVsP[locPID]->Fill(momInBar.Mag(), locDIRCMatchParams->dDeltaT);
261 hNphCBar[locBar]->Fill(locDIRCMatchParams->dNPhotons);
263 hNphCBarVsP[locBar]->Fill(momInBar.Mag(), locDIRCMatchParams->dNPhotons);
269 hLikelihood[locPID]->Fill(-1. * locDIRCMatchParams->dLikelihoodElectron);
270 hLikelihoodDiff[locPID]->Fill(locDIRCMatchParams->dLikelihoodElectron - locDIRCMatchParams->dLikelihoodPion);
271 hLikelihoodDiffVsP[locPID]->Fill(locP, locDIRCMatchParams->dLikelihoodElectron - locDIRCMatchParams->dLikelihoodPion);
274 hLikelihood[locPID]->Fill(-1. * locDIRCMatchParams->dLikelihoodPion);
275 hLikelihoodDiff[locPID]->Fill(locDIRCMatchParams->dLikelihoodPion - locDIRCMatchParams->dLikelihoodKaon);
276 hLikelihoodDiffVsP[locPID]->Fill(locP, locDIRCMatchParams->dLikelihoodPion - locDIRCMatchParams->dLikelihoodKaon);
279 hLikelihood[locPID]->Fill(-1. * locDIRCMatchParams->dLikelihoodKaon);
280 hLikelihoodDiff[locPID]->Fill(locDIRCMatchParams->dLikelihoodPion - locDIRCMatchParams->dLikelihoodKaon);
281 hLikelihoodDiffVsP[locPID]->Fill(locP, locDIRCMatchParams->dLikelihoodPion - locDIRCMatchParams->dLikelihoodKaon);
283 else if(locPID ==
Proton) {
284 hLikelihood[locPID]->Fill(-1. * locDIRCMatchParams->dLikelihoodProton);
285 hLikelihoodDiff[locPID]->Fill(locDIRCMatchParams->dLikelihoodProton - locDIRCMatchParams->dLikelihoodKaon);
286 hLikelihoodDiffVsP[locPID]->Fill(locP, locDIRCMatchParams->dLikelihoodProton - locDIRCMatchParams->dLikelihoodKaon);
289 japp->RootFillUnLock(
this);
map< Particle_t, TH2I * > hDeltaThetaCVsP
map< Particle_t, TH2I * > hDeltaTVsP
vector< pair< double, double > > CalcPhoton(const DDIRCPmtHit *locDIRCHit, double locFlightTime, TVector3 posInBar, TVector3 momInBar, map< Particle_t, double > locExpectedAngle, double locAngle, Particle_t locPID, map< Particle_t, double > &logLikelihoodSum, int &nPhotonsThetaC, double &meanThetaC, double &meanDeltaT, bool &isGood) const
jerror_t evnt(JEventLoop *loop, uint64_t eventnumber)
static char * ParticleName_ROOT(Particle_t p)
map< Particle_t, TH1I * > hThetaC
jerror_t brun(jana::JEventLoop *loop, int32_t runnumber)
double CalcAngle(TVector3 momInBar, double locMass) const
bool Get_DIRCTrackMatchParamsMap(map< shared_ptr< const DDIRCMatchParams >, vector< const DDIRCPmtHit * > > &locDIRCTrackMatchParamsMap)
~DEventProcessor_dirc_hists()
map< Particle_t, TH2I * > hLikelihoodDiffVsP
map< Particle_t, TH1I * > hNphC
map< Particle_t, TH2I * > hNphCVsP
bool Get_DIRCMatchParams(const DTrackingData *locTrack, const DDetectorMatches *locDetectorMatches, shared_ptr< const DDIRCMatchParams > &locBestMatchParams) const
static char * ParticleType(Particle_t p)
map< Particle_t, TH2I * > hDiffVsChannelDirect
deque< Particle_t > dFinalStatePIDs
map< Particle_t, TH2I * > hExtrapolatedBarHitXY
bool Get_IsPhysicsEvent(void) const
bool Get_BestTOFMatchParams(const DTrackingData *locTrack, const DDetectorMatches *locDetectorMatches, shared_ptr< const DTOFHitMatchParams > &locBestMatchParams) const
TH2S * hPixelHitMapReflected[40]
map< Particle_t, TH1I * > hDiff
map< Particle_t, TH1I * > hLikelihoodDiff
map< Particle_t, TH1I * > hLikelihood
int Ndof
Number of degrees of freedom in the fit.
TH1I * hNphCBarInclusive[48]
DEventProcessor_dirc_hists()
TH2I * hNphCBarInclusiveVsP[48]
static double ParticleMass(Particle_t p)
map< Particle_t, TH2I * > hDiffVsChannelReflected
map< Particle_t, TH1I * > hDeltaThetaC
const DVector3 & momentum(void) const
map< Particle_t, TH2I * > hNphCInclusiveVsP
map< Particle_t, double > CalcExpectedAngles(TVector3 momInBar) const
map< Particle_t, TH1I * > hNphCInclusive
map< Particle_t, TH2I * > hThetaCVsP
Particle_t PID(void) const