Hall-D Software  alpha
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
DCustomAction_dirc_reactions.cc
Go to the documentation of this file.
1 // $Id$
2 //
3 // File: DCustomAction_dirc_reactions.cc
4 //
5 
7 
8 void DCustomAction_dirc_reactions::Initialize(JEventLoop* locEventLoop)
9 {
10  DIRC_TRUTH_BARHIT = false;
11  if(gPARMS->Exists("DIRC:TRUTH_BARHIT"))
12  gPARMS->GetParameter("DIRC:TRUTH_BARHIT",DIRC_TRUTH_BARHIT);
13 
14  DIRC_FILL_BAR_MAP = false;
15  gPARMS->SetDefaultParameter("DIRC:FILL_BAR_MAP",DIRC_FILL_BAR_MAP);
16 
17  // get PID algos
18  const DParticleID* locParticleID = NULL;
19  locEventLoop->GetSingle(locParticleID);
20  dParticleID = locParticleID;
21 
22  locEventLoop->GetSingle(dDIRCLut);
23  locEventLoop->GetSingle(dAnalysisUtilities);
24 
25  // get DIRC geometry
26  vector<const DDIRCGeometry*> locDIRCGeometry;
27  locEventLoop->Get(locDIRCGeometry);
28  dDIRCGeometry = locDIRCGeometry[0];
29 
30  // set PID for different passes in debuging histograms
31  dFinalStatePIDs.push_back(Positron);
32  dFinalStatePIDs.push_back(PiPlus);
33  dFinalStatePIDs.push_back(KPlus);
34  dFinalStatePIDs.push_back(Proton);
35 
36  //CREATE THE HISTOGRAMS
37  //Since we are creating histograms, the contents of gDirectory will be modified: must use JANA-wide ROOT lock
38  japp->RootWriteLock(); //ACQUIRE ROOT LOCK!!
39  {
40  //Required: Create a folder in the ROOT output file that will contain all of the output ROOT objects (if any) for this action.
41  //If another thread has already created the folder, it just changes to it.
43 
44  string locParticleName = ParticleType(dPID);
45  string locParticleROOTName = ParticleName_ROOT(dPID);
46  string locLikelihoodName = "ln L(#pi) - ln L(K)";
47  if(dPID==Electron || dPID==Positron)
48  locLikelihoodName = "ln L(e) - ln L(#pi)";
49  else if(dPID==Proton || dPID==AntiProton)
50  locLikelihoodName = "ln L(K) - ln L(p)";
51 
52  hExtrapolatedBarHitXY_PreCut = GetOrCreate_Histogram<TH2I>(Form("hExtrapolatedBarHitXY_PreCut_%s",locParticleName.data()), "; Bar Hit X (cm); Bar Hit Y (cm)", 200, -100, 100, 200, -100, 100);
53  hExtrapolatedBarHitXY = GetOrCreate_Histogram<TH2I>(Form("hExtrapolatedBarHitXY_%s",locParticleName.data()), "; Bar Hit X (cm); Bar Hit Y (cm)", 200, -100, 100, 200, -100, 100);
54 
55  hDiff = GetOrCreate_Histogram<TH1I>(Form("hDiff_%s",locParticleName.data()), Form("; %s t_{calc}-t_{measured} [ns]; entries [#]", locParticleROOTName.data()), 400,-20,20);
56  hNphC = GetOrCreate_Histogram<TH1I>(Form("hNphC_%s",locParticleName.data()), Form("# photons; %s # photons", locParticleROOTName.data()), 150, 0, 150);
57  hThetaC = GetOrCreate_Histogram<TH1I>(Form("hThetaC_%s",locParticleName.data()), Form("cherenkov angle; %s #theta_{C} [rad]", locParticleROOTName.data()), 250, 0.6, 1.0);
58  hDeltaThetaC = GetOrCreate_Histogram<TH1I>(Form("hDeltaThetaC_%s",locParticleName.data()), Form("cherenkov angle; %s #Delta#theta_{C} [rad]", locParticleROOTName.data()), 200,-0.2,0.2);
59  hLikelihood = GetOrCreate_Histogram<TH1I>(Form("hLikelihood_%s",locParticleName.data()), Form("; %s -lnL; entries [#]", locParticleROOTName.data()),1000,0.,1000.);
60  hLikelihoodDiff = GetOrCreate_Histogram<TH1I>(Form("hLikelihoodDiff_%s",locParticleName.data()), Form("; %s;entries [#]", locLikelihoodName.data()),100,-200.,200.);
61 
62  hThetaCVsP = GetOrCreate_Histogram<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.6, 1.0);
63  hDeltaThetaCVsP = GetOrCreate_Histogram<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);
64  hLikelihoodDiffVsP = GetOrCreate_Histogram<TH2I>(Form("hLikelihoodDiffVsP_%s",locParticleName.data()), Form("; p (GeV/c); %s", locLikelihoodName.data()), 120, 0.0, 12.0, 100, -200, 200);
65  hReactionLikelihoodDiffVsP = GetOrCreate_Histogram<TH2I>(Form("hReactionLikelihoodDiffVsP_%s",locParticleName.data()), Form("; p (GeV/c); %s", locLikelihoodName.data()), 120, 0.0, 12.0, 100, -200, 200);
66 
67  // Map of histograms for every bar, binned in x position
68  if(DIRC_FILL_BAR_MAP) {
69 
70  for(int locBar=0; locBar<24; locBar++) {
71 
72  CreateAndChangeTo_Directory(Form("Bar %d", locBar), Form("Bar %d", locBar));
73  double bar_y = dDIRCGeometry->GetBarY(locBar);
74 
75  for(int locXbin=0; locXbin<40; locXbin++) {
76 
77  double xbin_min = -100.0 + locXbin*5.0;
78  double xbin_max = xbin_min + 5.0;
79 
80  // skip creation of histograms for bins outside active area
81  TVector3 locBinVect((xbin_min+xbin_max)/2., bar_y, 586.5 - 65.);
82  if(locBinVect.Theta()*180/TMath::Pi() > 12.)
83  continue;
84 
85  hDiffMap[locBar][locXbin] = GetOrCreate_Histogram<TH1I>(Form("hDiff_%s_%d_%d",locParticleName.data(),locBar,locXbin), Form("Bar %d, xbin [%0.0f,%0.0f]; %s t_{calc}-t_{measured} [ns]; entries [#]", locBar,xbin_min,xbin_max,locParticleROOTName.data()), 200,-100,100);
86  hHitTimeMap[locBar][locXbin] = GetOrCreate_Histogram<TH1I>(Form("hHitTimeMap_%s_%d_%d",locParticleName.data(),locBar,locXbin), Form("Bar %d, xbin [%0.0f,%0.0f]; %s t_{measured} [ns]; entries [#]", locBar,xbin_min,xbin_max,locParticleROOTName.data()), 200,0,200);
87  hNphCMap[locBar][locXbin] = GetOrCreate_Histogram<TH1I>(Form("hNphC_%s_%d_%d",locParticleName.data(),locBar,locXbin), Form("Bar %d, xbin [%0.0f,%0.0f] # photons; %s # photons", locBar,xbin_min,xbin_max,locParticleROOTName.data()), 80, 0, 80);
88  hNphCMapSlot4[locBar][locXbin] = GetOrCreate_Histogram<TH1I>(Form("hNphCSlot4_%s_%d_%d",locParticleName.data(),locBar,locXbin), Form("Bar %d, xbin [%0.0f,%0.0f] # photons; %s # photons", locBar,xbin_min,xbin_max,locParticleROOTName.data()), 80, 0, 80);
89  hNphCMapSlot5[locBar][locXbin] = GetOrCreate_Histogram<TH1I>(Form("hNphCSlot5_%s_%d_%d",locParticleName.data(),locBar,locXbin), Form("Bar %d, xbin [%0.0f,%0.0f] # photons; %s # photons", locBar,xbin_min,xbin_max,locParticleROOTName.data()), 80, 0, 80);
90 
91  hDeltaThetaCVsPMap[locBar][locXbin] = GetOrCreate_Histogram<TH2I>(Form("hDeltaThetaCVsP_%s_%d_%d",locParticleName.data(),locBar,locXbin), Form("Bar %d, xbin [%0.0f,%0.0f] cherenkov angle vs. momentum; p (GeV/c); %s #Delta#theta_{C} [rad]", locBar,xbin_min,xbin_max,locParticleROOTName.data()), 60, 0.0, 12.0, 60,-0.15,0.15);
92  hReactionLikelihoodDiffVsPMap[locBar][locXbin] = GetOrCreate_Histogram<TH2I>(Form("hReactionLikelihoodDiffVsP_%s_%d_%d",locParticleName.data(),locBar,locXbin), Form("Bar %d, xbin [%0.0f,%0.0f]; p (GeV/c); %s", locBar,xbin_min,xbin_max,locLikelihoodName.data()), 60, 0.0, 12.0, 50, -200, 200);
93 
94  hPixelHitMap[locBar][locXbin] = GetOrCreate_Histogram<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);
95  hPixelHitMapReflected[locBar][locXbin] = GetOrCreate_Histogram<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);
96 
97  hHitTimeMapAll[locBar][locXbin] = GetOrCreate_Histogram<TH1I>(Form("hHitTimeMapAll_%s_%d_%d",locParticleName.data(),locBar,locXbin), Form("Bar %d, xbin [%0.0f,%0.0f]; %s t_{measured} [ns]; entries [#]", locBar,xbin_min,xbin_max,locParticleROOTName.data()), 200,0,200);
98  hPixelHitMapAll[locBar][locXbin] = GetOrCreate_Histogram<TH2S>(Form("hPixelHitAll_%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);
99  hPixelHitMapAllReflected[locBar][locXbin] = GetOrCreate_Histogram<TH2S>(Form("hPixelHitAllReflected_%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);
100  //hPixelHitTimeMap[locBar][locXbin] = GetOrCreate_Histogram<TH2I>(Form("hPixelHitTime_%s_%d_%d",locParticleName.data(),locBar,locXbin), Form("Bar %d, xbin [%0.0f,%0.0f]; Pixel Hit Channel; Pixel Hit t [ns]", locBar,xbin_min,xbin_max), 6912, 0, 6912, 50, 0, 100);
101  }
102 
103  gDirectory->cd(".."); //End of single bar histograms
104  }
105  }
106 
107  //Return to the base directory
109  }
110  japp->RootUnLock(); //RELEASE ROOT LOCK!!
111 }
112 
113 bool DCustomAction_dirc_reactions::Perform_Action(JEventLoop* locEventLoop, const DParticleCombo* locParticleCombo)
114 {
115 
116  const DDetectorMatches* locDetectorMatches = NULL;
117  locEventLoop->GetSingle(locDetectorMatches);
118  DDetectorMatches locDetectorMatch = (DDetectorMatches)locDetectorMatches[0];
119 
120  // truth information on tracks hitting DIRC bar (for comparison)
121  vector<const DDIRCTruthBarHit*> locDIRCBarHits;
122  locEventLoop->Get(locDIRCBarHits);
123 
124  vector<const DDIRCPmtHit*> locDIRCPmtHits;
125  locEventLoop->Get(locDIRCPmtHits);
126 
127  // Get selected particle from reaction for DIRC analysis
128  const DParticleComboStep* locParticleComboStep = locParticleCombo->Get_ParticleComboStep(dParticleComboStepIndex);
129  auto locParticle = Get_UseKinFitResultsFlag() ? locParticleComboStep->Get_FinalParticle(dParticleIndex) : locParticleComboStep->Get_FinalParticle_Measured(dParticleIndex);
130 
131  // Get track and histogram DIRC quantities
132  const DChargedTrack* locChargedTrack = static_cast<const DChargedTrack*>(locParticleComboStep->Get_FinalParticle_SourceObject(dParticleIndex));
133  const DChargedTrackHypothesis* locChargedTrackHypothesis = locChargedTrack->Get_Hypothesis(locParticle->PID());
134  const DTrackTimeBased* locTrackTimeBased = locChargedTrackHypothesis->Get_TrackTimeBased();
135 
136  //Lock_Action(); //ACQUIRE ROOT LOCK!!
137  //hExtrapolatedBarHitXY_PreCut->Fill(posInBar.X(), posInBar.Y());
138  //Unlock_Action(); //RELEASE ROOT LOCK!!
139 
140  // require well reconstructed tracks for initial studies
141  int locDCHits = locTrackTimeBased->Ndof + 5;
142  double locTheta = locTrackTimeBased->momentum().Theta()*180/TMath::Pi();
143  double locP = locParticle->lorentzMomentum().Vect().Mag();
144  if(locDCHits < 15 || locTheta < 1.0 || locTheta > 12.0 || locP > 12.0)
145  return true;
146 
147  // require has good match to TOF hit for cleaner sample
148  shared_ptr<const DTOFHitMatchParams> locTOFHitMatchParams;
149  bool foundTOF = dParticleID->Get_BestTOFMatchParams(locTrackTimeBased, locDetectorMatches, locTOFHitMatchParams);
150  if(!foundTOF || locTOFHitMatchParams->dDeltaXToHit > 10.0 || locTOFHitMatchParams->dDeltaYToHit > 10.0)
151  return true;
152 
153  Particle_t locPID = locTrackTimeBased->PID();
154  double locMass = ParticleMass(locPID);
155 
156  // get DIRC match parameters (contains LUT information)
157  shared_ptr<const DDIRCMatchParams> locDIRCMatchParams;
158  bool foundDIRC = dParticleID->Get_DIRCMatchParams(locTrackTimeBased, locDetectorMatches, locDIRCMatchParams);
159  vector<int> locUsedPixel;
160 
161  if(foundDIRC) {
162 
163  DVector3 posInBar = locDIRCMatchParams->dExtrapolatedPos;
164  DVector3 momInBar = locDIRCMatchParams->dExtrapolatedMom;
165  double locExpectedThetaC = locDIRCMatchParams->dExpectedThetaC;
166  double locExtrapolatedTime = locDIRCMatchParams->dExtrapolatedTime;
167 
168  // get binning for histograms
169  int locBar = dDIRCGeometry->GetBar(posInBar.Y());
170  int locXbin = (int)(posInBar.X()/5.0) + 19;
171 
172  // check that histogram index exists
173  TVector3 locBarHitVect(posInBar.X(), posInBar.Y(), posInBar.Z() - 65.);
174  if(locBar < 0 || locBar >23 || locXbin < 0 || locXbin > 39 || locBarHitVect.Theta()*180/TMath::Pi() > 12.0)
175  return true;
176 
177  Lock_Action(); //ACQUIRE ROOT LOCK!!
178  hExtrapolatedBarHitXY->Fill(posInBar.X(), posInBar.Y());
179  Unlock_Action(); //RELEASE ROOT LOCK!!
180 
181  double locAngle = dDIRCLut->CalcAngle(momInBar, locMass);
182  map<Particle_t, double> locExpectedAngle = dDIRCLut->CalcExpectedAngles(momInBar);
183 
184  // get map of DIRCMatches to PMT hits
185  map<shared_ptr<const DDIRCMatchParams>, vector<const DDIRCPmtHit*> > locDIRCTrackMatchParamsMap;
186  locDetectorMatch.Get_DIRCTrackMatchParamsMap(locDIRCTrackMatchParamsMap);
187  map<Particle_t, double> logLikelihoodSum;
188 
189  int locNPhCSlot4 = 0;
190  int locNPhCSlot5 = 0;
191 
192  // loop over associated hits for LUT diagnostic plots
193  for(uint loc_i=0; loc_i<locDIRCPmtHits.size(); loc_i++) {
194  vector<pair<double, double>> locDIRCPhotons = dDIRCLut->CalcPhoton(locDIRCPmtHits[loc_i], locExtrapolatedTime, posInBar, momInBar, locExpectedAngle, locAngle, locPID, logLikelihoodSum);
195  double locHitTime = locDIRCPmtHits[loc_i]->t - locExtrapolatedTime;
196  int locChannel = locDIRCPmtHits[loc_i]->ch;
197  if(locChannel >= 108*64) locChannel -= 108*64;
198 
199  // fill PMT hits without any association cuts
200  Lock_Action(); //ACQUIRE ROOT LOCK!!
201  if(DIRC_FILL_BAR_MAP) {
202  hHitTimeMapAll[locBar][locXbin]->Fill(locHitTime);
203  }
204  Unlock_Action(); //RELEASE ROOT LOCK!!
205 
206  // format final pixel x' and y' axes for view from behind PMTs looking downstream
207  int pixel_row = dDIRCGeometry->GetPixelRow(locChannel);
208  int pixel_col = dDIRCGeometry->GetPixelColumn(locChannel);
209 
210  // fill histograms for candidate photons in timing cut
211  if(locHitTime > 0 && locHitTime < 100.0) {
212  if((pixel_row < 64 && pixel_col < 24) || (pixel_row < 32 && pixel_col > 23))
213  locNPhCSlot4++;
214  else
215  locNPhCSlot5++;
216 
217  Lock_Action(); //ACQUIRE ROOT LOCK!!
218  if(DIRC_FILL_BAR_MAP && locP > 4.) {
219  //hPixelHitTimeMap[locBar][locXbin]->Fill(locChannel, locHitTime);
220  if(locHitTime < 38.)
221  hPixelHitMapAll[locBar][locXbin]->Fill(pixel_row, pixel_col);
222  else
223  hPixelHitMapAllReflected[locBar][locXbin]->Fill(pixel_row, pixel_col);
224  }
225  Unlock_Action(); //RELEASE ROOT LOCK!!
226 
227  }
228 
229  // if found associated photons loop over them and fill histos
230  if(locDIRCPhotons.size() > 0) {
231 
232  // loop over candidate photons
233  for(uint loc_j = 0; loc_j<locDIRCPhotons.size(); loc_j++) {
234  double locDeltaT = locDIRCPhotons[loc_j].first - locHitTime;
235  double locThetaC = locDIRCPhotons[loc_j].second;
236 
237  Lock_Action(); //ACQUIRE ROOT LOCK!!
238  hDiff->Fill(locDeltaT);
239  if(DIRC_FILL_BAR_MAP) {
240  hDiffMap[locBar][locXbin]->Fill(locDeltaT);
241  hHitTimeMap[locBar][locXbin]->Fill(locHitTime);
242  }
243  Unlock_Action(); //RELEASE ROOT LOCK!!
244 
245  // fill histograms for candidate photons in timing cut
246  if(fabs(locDeltaT) < 100.0) {
247  Lock_Action(); //ACQUIRE ROOT LOCK!!
248  hThetaC->Fill(locThetaC);
249  hDeltaThetaC->Fill(locThetaC-locExpectedThetaC);
250  hDeltaThetaCVsP->Fill(momInBar.Mag(), locThetaC-locExpectedThetaC);
251  if(DIRC_FILL_BAR_MAP) hDeltaThetaCVsPMap[locBar][locXbin]->Fill(momInBar.Mag(), locThetaC-locExpectedThetaC);
252  Unlock_Action(); //RELEASE ROOT LOCK!!
253 
254  if(std::find(locUsedPixel.begin(), locUsedPixel.end(), locChannel) != locUsedPixel.end())
255  continue;
256 
257  Lock_Action(); //ACQUIRE ROOT LOCK!!
258  if(DIRC_FILL_BAR_MAP && locP > 4.) {
259  //hPixelHitTimeMap[locBar][locXbin]->Fill(locChannel, locHitTime);
260  if(locHitTime < 38.)
261  hPixelHitMap[locBar][locXbin]->Fill(pixel_row, pixel_col);
262  else
263  hPixelHitMapReflected[locBar][locXbin]->Fill(pixel_row, pixel_col);
264  }
265  locUsedPixel.push_back(locChannel);
266  Unlock_Action(); //RELEASE ROOT LOCK!!
267  }
268  }
269  }
270  }
271 
272  // fill histograms with per-track quantities
273  Lock_Action(); //ACQUIRE ROOT LOCK!!
274  hNphC->Fill(locDIRCMatchParams->dNPhotons);
275  hThetaCVsP->Fill(momInBar.Mag(), locDIRCMatchParams->dThetaC);
276  if(DIRC_FILL_BAR_MAP) {
277  hNphCMap[locBar][locXbin]->Fill(locDIRCMatchParams->dNPhotons);
278  hNphCMapSlot4[locBar][locXbin]->Fill(locNPhCSlot4);
279  hNphCMapSlot5[locBar][locXbin]->Fill(locNPhCSlot5);
280  }
281 
282  // for likelihood and difference for given track mass hypothesis
283  if(locPID == Positron || locPID == Electron) {
284  hLikelihood->Fill(-1. * locDIRCMatchParams->dLikelihoodElectron);
285  hLikelihoodDiff->Fill(locDIRCMatchParams->dLikelihoodElectron - locDIRCMatchParams->dLikelihoodPion);
286  hLikelihoodDiffVsP->Fill(locP, locDIRCMatchParams->dLikelihoodElectron - locDIRCMatchParams->dLikelihoodPion);
287  hReactionLikelihoodDiffVsP->Fill(locP, logLikelihoodSum[Positron]-logLikelihoodSum[PiPlus]);
288  if(DIRC_FILL_BAR_MAP)
289  hReactionLikelihoodDiffVsPMap[locBar][locXbin]->Fill(locP, logLikelihoodSum[Positron]-logLikelihoodSum[PiPlus]);
290  }
291  else if(locPID == PiPlus || locPID == PiMinus) {
292  hLikelihood->Fill(-1. * locDIRCMatchParams->dLikelihoodPion);
293  hLikelihoodDiff->Fill(locDIRCMatchParams->dLikelihoodPion - locDIRCMatchParams->dLikelihoodKaon);
294  hLikelihoodDiffVsP->Fill(locP, locDIRCMatchParams->dLikelihoodPion - locDIRCMatchParams->dLikelihoodKaon);
295  hReactionLikelihoodDiffVsP->Fill(locP, logLikelihoodSum[PiPlus]-logLikelihoodSum[KPlus]);
297  hReactionLikelihoodDiffVsPMap[locBar][locXbin]->Fill(locP, logLikelihoodSum[PiPlus]-logLikelihoodSum[KPlus]);
298  }
299  else if(locPID == KPlus || locPID == KMinus) {
300  hLikelihood->Fill(-1. * locDIRCMatchParams->dLikelihoodKaon);
301  hLikelihoodDiff->Fill(locDIRCMatchParams->dLikelihoodPion - locDIRCMatchParams->dLikelihoodKaon);
302  hLikelihoodDiffVsP->Fill(locP, locDIRCMatchParams->dLikelihoodPion - locDIRCMatchParams->dLikelihoodKaon);
303  hReactionLikelihoodDiffVsP->Fill(locP, logLikelihoodSum[PiPlus]-logLikelihoodSum[KPlus]);
305  hReactionLikelihoodDiffVsPMap[locBar][locXbin]->Fill(locP, logLikelihoodSum[PiPlus]-logLikelihoodSum[KPlus]);
306  }
307  else if(locPID == Proton || locPID == AntiProton) {
308  hLikelihood->Fill(-1. * locDIRCMatchParams->dLikelihoodProton);
309  hLikelihoodDiff->Fill(locDIRCMatchParams->dLikelihoodProton - locDIRCMatchParams->dLikelihoodKaon);
310  hLikelihoodDiffVsP->Fill(locP, locDIRCMatchParams->dLikelihoodKaon - locDIRCMatchParams->dLikelihoodProton);
311  hReactionLikelihoodDiffVsP->Fill(locP, logLikelihoodSum[KPlus]-logLikelihoodSum[Proton]);
313  hReactionLikelihoodDiffVsPMap[locBar][locXbin]->Fill(locP, logLikelihoodSum[KPlus]-logLikelihoodSum[Proton]);
314  }
315  Unlock_Action(); //RELEASE ROOT LOCK!!
316 
317  }
318 
319  return true; //return false if you want to use this action to apply a cut (and it fails the cut!)
320 }
const DAnalysisUtilities * dAnalysisUtilities
TDirectoryFile * ChangeTo_BaseDirectory(void)
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
Definition: DDIRCLut.cc:212
double GetBarY(int locBar) const
const DKinematicData * Get_FinalParticle_Measured(size_t locFinalParticleIndex) const
int GetPixelRow(int channel) const
static char * ParticleName_ROOT(Particle_t p)
Definition: particleType.h:851
double CalcAngle(TVector3 momInBar, double locMass) const
Definition: DDIRCLut.cc:379
bool Get_DIRCTrackMatchParamsMap(map< shared_ptr< const DDIRCMatchParams >, vector< const DDIRCPmtHit * > > &locDIRCTrackMatchParamsMap)
TVector3 DVector3
Definition: DVector3.h:14
bool Perform_Action(JEventLoop *locEventLoop, const DParticleCombo *locParticleCombo)
void Initialize(JEventLoop *locEventLoop)
TDirectoryFile * CreateAndChangeTo_Directory(TDirectoryFile *locBaseDirectory, string locDirName, string locDirTitle)
const DTrackTimeBased * Get_TrackTimeBased(void) const
TDirectoryFile * CreateAndChangeTo_ActionDirectory(void)
bool Get_DIRCMatchParams(const DTrackingData *locTrack, const DDetectorMatches *locDetectorMatches, shared_ptr< const DDIRCMatchParams > &locBestMatchParams) const
static char * ParticleType(Particle_t p)
Definition: particleType.h:142
int GetPixelColumn(int channel) const
const DChargedTrackHypothesis * Get_Hypothesis(Particle_t locPID) const
Definition: DChargedTrack.h:59
bool Get_UseKinFitResultsFlag(void) const
JApplication * japp
bool Get_BestTOFMatchParams(const DTrackingData *locTrack, const DDetectorMatches *locDetectorMatches, shared_ptr< const DTOFHitMatchParams > &locBestMatchParams) const
int Ndof
Number of degrees of freedom in the fit.
static double ParticleMass(Particle_t p)
const JObject * Get_FinalParticle_SourceObject(size_t locFinalParticleIndex) const
const DVector3 & momentum(void) const
map< Particle_t, double > CalcExpectedAngles(TVector3 momInBar) const
Definition: DDIRCLut.cc:383
const DParticleComboStep * Get_ParticleComboStep(size_t locStepIndex) const
const DKinematicData * Get_FinalParticle(size_t locFinalParticleIndex) const
Particle_t PID(void) const
int GetBar(float y) const
Particle_t
Definition: particleType.h:12