Hall-D Software  alpha
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
DParticleID_PID1.cc
Go to the documentation of this file.
1 // $Id$
2 //
3 // File: DParticleID_PID1.cc
4 // Created: Mon Feb 28 15:25:35 EST 2011
5 // Creator: staylor (on Linux ifarml1 2.6.18-128.el5 x86_64)
6 //
7 
8 #include "DParticleID_PID1.h"
9 
10 //---------------------------------
11 // DParticleID_PID1 (Constructor)
12 //---------------------------------
14 {
15  DApplication* dapp=dynamic_cast<DApplication*>(loop->GetJApplication());
16  JCalibration * jcalib = dapp->GetJCalibration(loop->GetJEvent().GetRunNumber());
17  vector<map<string,double> >vals;
18  if (jcalib->Get("CDC/ElectrondEdxMean",vals)==false){
19  map<string,double> &row = vals[0];
20  ddEdxMeanParams_CDC_Electron.push_back(row["m1"]);
21  ddEdxMeanParams_CDC_Electron.push_back(row["m2"]);
22  ddEdxMeanParams_CDC_Electron.push_back(row["m3"]);
23  ddEdxMeanParams_CDC_Electron.push_back(row["m4"]);
24  }
25  if (jcalib->Get("CDC/dEdxMean",vals)==false){
26  for(unsigned int i=0; i<vals.size(); i++){
27  map<string,double> &row = vals[i];
28  switch(int(row["PID"])){
29  case 8:
30  ddEdxMeanParams_CDC_PiPlus.push_back(row["m1"]);
31  ddEdxMeanParams_CDC_PiPlus.push_back(row["m2"]);
32  ddEdxMeanParams_CDC_PiPlus.push_back(row["m3"]);
33  ddEdxMeanParams_CDC_PiPlus.push_back(row["m4"]);
34  break;
35  case 11:
36  ddEdxMeanParams_CDC_KPlus.push_back(row["m1"]);
37  ddEdxMeanParams_CDC_KPlus.push_back(row["m2"]);
38  ddEdxMeanParams_CDC_KPlus.push_back(row["m3"]);
39  ddEdxMeanParams_CDC_KPlus.push_back(row["m4"]);
40  break;
41  case 14:
42  ddEdxMeanParams_CDC_Proton.push_back(row["m1"]);
43  ddEdxMeanParams_CDC_Proton.push_back(row["m2"]);
44  ddEdxMeanParams_CDC_Proton.push_back(row["m3"]);
45  ddEdxMeanParams_CDC_Proton.push_back(row["m4"]);
46  break;
47  default:
48  break;
49  }
50  }
51  }
52  if (jcalib->Get("CDC/ElectrondEdxSigma",vals)==false){
53  map<string,double> &row = vals[0];
54  ddEdxSigmaParams_CDC_Electron.push_back(row["s1"]);
55  ddEdxSigmaParams_CDC_Electron.push_back(row["s2"]);
56  ddEdxSigmaParams_CDC_Electron.push_back(row["s3"]);
57  ddEdxSigmaParams_CDC_Electron.push_back(row["s4"]);
58  }
59  if (jcalib->Get("CDC/dEdxSigma",vals)==false){
60  for(unsigned int i=0; i<vals.size(); i++){
61  map<string,double> &row = vals[i];
62  switch(int(row["PID"])){
63  case 8:
64  ddEdxSigmaParams_CDC_PiPlus.push_back(row["s1"]);
65  ddEdxSigmaParams_CDC_PiPlus.push_back(row["s2"]);
66  ddEdxSigmaParams_CDC_PiPlus.push_back(row["s3"]);
67  ddEdxSigmaParams_CDC_PiPlus.push_back(row["s4"]);
68  break;
69  case 11:
70  ddEdxSigmaParams_CDC_KPlus.push_back(row["s1"]);
71  ddEdxSigmaParams_CDC_KPlus.push_back(row["s2"]);
72  ddEdxSigmaParams_CDC_KPlus.push_back(row["s3"]);
73  ddEdxSigmaParams_CDC_KPlus.push_back(row["s4"]);
74  break;
75  case 14:
76  ddEdxSigmaParams_CDC_Proton.push_back(row["s1"]);
77  ddEdxSigmaParams_CDC_Proton.push_back(row["s2"]);
78  ddEdxSigmaParams_CDC_Proton.push_back(row["s3"]);
79  ddEdxSigmaParams_CDC_Proton.push_back(row["s4"]);
80  break;
81  default:
82  break;
83  }
84  }
85  }
86 
87  if (jcalib->Get("FDC/ElectrondEdxMean",vals)==false){
88  map<string,double> &row = vals[0];
89  ddEdxMeanParams_FDC_Electron.push_back(row["m1"]);
90  ddEdxMeanParams_FDC_Electron.push_back(row["m2"]);
91  ddEdxMeanParams_FDC_Electron.push_back(row["m3"]);
92  ddEdxMeanParams_FDC_Electron.push_back(row["m4"]);
93  }
94  if (jcalib->Get("FDC/dEdxMean",vals)==false){
95  for(unsigned int i=0; i<vals.size(); i++){
96  map<string,double> &row = vals[i];
97  switch(int(row["PID"])){
98  case 8:
99  ddEdxMeanParams_FDC_PiPlus.push_back(row["m1"]);
100  ddEdxMeanParams_FDC_PiPlus.push_back(row["m2"]);
101  ddEdxMeanParams_FDC_PiPlus.push_back(row["m3"]);
102  ddEdxMeanParams_FDC_PiPlus.push_back(row["m4"]);
103  break;
104  case 11:
105  ddEdxMeanParams_FDC_KPlus.push_back(row["m1"]);
106  ddEdxMeanParams_FDC_KPlus.push_back(row["m2"]);
107  ddEdxMeanParams_FDC_KPlus.push_back(row["m3"]);
108  ddEdxMeanParams_FDC_KPlus.push_back(row["m4"]);
109  break;
110  case 14:
111  ddEdxMeanParams_FDC_Proton.push_back(row["m1"]);
112  ddEdxMeanParams_FDC_Proton.push_back(row["m2"]);
113  ddEdxMeanParams_FDC_Proton.push_back(row["m3"]);
114  ddEdxMeanParams_FDC_Proton.push_back(row["m4"]);
115  break;
116  default:
117  break;
118  }
119  }
120  }
121  if (jcalib->Get("FDC/ElectrondEdxSigma",vals)==false){
122  map<string,double> &row = vals[0];
123  ddEdxSigmaParams_FDC_Electron.push_back(row["s1"]);
124  ddEdxSigmaParams_FDC_Electron.push_back(row["s2"]);
125  ddEdxSigmaParams_FDC_Electron.push_back(row["s3"]);
126  ddEdxSigmaParams_FDC_Electron.push_back(row["s4"]);
127  }
128  if (jcalib->Get("FDC/dEdxSigma",vals)==false){
129  for(unsigned int i=0; i<vals.size(); i++){
130  map<string,double> &row = vals[i];
131  switch(int(row["PID"])){
132  case 8:
133  ddEdxSigmaParams_FDC_PiPlus.push_back(row["s1"]);
134  ddEdxSigmaParams_FDC_PiPlus.push_back(row["s2"]);
135  ddEdxSigmaParams_FDC_PiPlus.push_back(row["s3"]);
136  ddEdxSigmaParams_FDC_PiPlus.push_back(row["s4"]);
137  break;
138  case 11:
139  ddEdxSigmaParams_FDC_KPlus.push_back(row["s1"]);
140  ddEdxSigmaParams_FDC_KPlus.push_back(row["s2"]);
141  ddEdxSigmaParams_FDC_KPlus.push_back(row["s3"]);
142  ddEdxSigmaParams_FDC_KPlus.push_back(row["s4"]);
143  break;
144  case 14:
145  ddEdxSigmaParams_FDC_Proton.push_back(row["s1"]);
146  ddEdxSigmaParams_FDC_Proton.push_back(row["s2"]);
147  ddEdxSigmaParams_FDC_Proton.push_back(row["s3"]);
148  ddEdxSigmaParams_FDC_Proton.push_back(row["s4"]);
149  break;
150  default:
151  break;
152  }
153  }
154  }
155  if (jcalib->Get("START_COUNTER/dEdxProtonMean",vals)==false){
156  map<string,double> &row = vals[0];
157  ddEdxMeanParams_SC_Proton.push_back(row["m1"]);
158  ddEdxMeanParams_SC_Proton.push_back(row["m2"]);
159  ddEdxMeanParams_SC_Proton.push_back(row["m3"]);
160  ddEdxMeanParams_SC_Proton.push_back(row["m4"]);
161  }
162  if (jcalib->Get("START_COUNTER/dEdxProtonSigma",vals)==false){
163  map<string,double> &row = vals[0];
164  ddEdxSigmaParams_SC_Proton.push_back(row["s1"]);
165  ddEdxSigmaParams_SC_Proton.push_back(row["s2"]);
166  ddEdxSigmaParams_SC_Proton.push_back(row["s3"]);
167  ddEdxSigmaParams_SC_Proton.push_back(row["s4"]);
168  }
169 
170  if (jcalib->Get("TOF/TimeSigmas",vals)==false){
171  for(unsigned int i=0; i<vals.size(); i++){
172  map<string,double> &row = vals[i];
173  switch(int(row["PID"])){
174  case 2:
175  dTimeSigmaParams_TOF_Positron.push_back(row["s1"]);
176  dTimeSigmaParams_TOF_Positron.push_back(row["s2"]);
177  dTimeSigmaParams_TOF_Positron.push_back(row["s3"]);
178  dTimeSigmaParams_TOF_Positron.push_back(row["s4"]);
179  break;
180  case 8:
181  dTimeSigmaParams_TOF_PiPlus.push_back(row["s1"]);
182  dTimeSigmaParams_TOF_PiPlus.push_back(row["s2"]);
183  dTimeSigmaParams_TOF_PiPlus.push_back(row["s3"]);
184  dTimeSigmaParams_TOF_PiPlus.push_back(row["s4"]);
185  break;
186  case 11:
187  dTimeSigmaParams_TOF_KPlus.push_back(row["s1"]);
188  dTimeSigmaParams_TOF_KPlus.push_back(row["s2"]);
189  dTimeSigmaParams_TOF_KPlus.push_back(row["s3"]);
190  dTimeSigmaParams_TOF_KPlus.push_back(row["s4"]);
191  break;
192  case 14:
193  dTimeSigmaParams_TOF_Proton.push_back(row["s1"]);
194  dTimeSigmaParams_TOF_Proton.push_back(row["s2"]);
195  dTimeSigmaParams_TOF_Proton.push_back(row["s3"]);
196  dTimeSigmaParams_TOF_Proton.push_back(row["s4"]);
197  break;
198  default:
199  break;
200  }
201  }
202  }
203 
204  if (jcalib->Get("BCAL/TimeSigmas",vals)==false){
205  for(unsigned int i=0; i<vals.size(); i++){
206  map<string,double> &row = vals[i];
207  switch(int(row["PID"])){
208  case 2:
209  dTimeSigmaParams_BCAL_Positron.push_back(row["s1"]);
210  dTimeSigmaParams_BCAL_Positron.push_back(row["s2"]);
211  dTimeSigmaParams_BCAL_Positron.push_back(row["s3"]);
212  dTimeSigmaParams_BCAL_Positron.push_back(row["s4"]);
213  break;
214  case 8:
215  dTimeSigmaParams_BCAL_PiPlus.push_back(row["s1"]);
216  dTimeSigmaParams_BCAL_PiPlus.push_back(row["s2"]);
217  dTimeSigmaParams_BCAL_PiPlus.push_back(row["s3"]);
218  dTimeSigmaParams_BCAL_PiPlus.push_back(row["s4"]);
219  break;
220  case 11:
221  dTimeSigmaParams_BCAL_KPlus.push_back(row["s1"]);
222  dTimeSigmaParams_BCAL_KPlus.push_back(row["s2"]);
223  dTimeSigmaParams_BCAL_KPlus.push_back(row["s3"]);
224  dTimeSigmaParams_BCAL_KPlus.push_back(row["s4"]);
225  break;
226  case 14:
227  dTimeSigmaParams_BCAL_Proton.push_back(row["s1"]);
228  dTimeSigmaParams_BCAL_Proton.push_back(row["s2"]);
229  dTimeSigmaParams_BCAL_Proton.push_back(row["s3"]);
230  dTimeSigmaParams_BCAL_Proton.push_back(row["s4"]);
231  break;
232  default:
233  break;
234  }
235  }
236  }
237 
238  if (jcalib->Get("BCAL/EOverPSigma",vals)==false){
239  map<string,double> &row = vals[0];
240  dEOverPSigmaParams_BCAL.push_back(row["s0"]);
241  dEOverPSigmaParams_BCAL.push_back(row["s1"]);
242  dEOverPSigmaParams_BCAL.push_back(row["s2"]);
243  }
244  if (jcalib->Get("BCAL/EOverPMean",vals)==false){
245  map<string,double> &row = vals[0];
246  dEOverPMeanParams_BCAL.push_back(row["m0"]);
247  dEOverPMeanParams_BCAL.push_back(row["m1"]);
248  dEOverPMeanParams_BCAL.push_back(row["m2"]);
249  }
250 
251 
252  if (jcalib->Get("FCAL/EOverPSigma",vals)==false){
253  map<string,double> &row = vals[0];
254  dEOverPSigmaParams_FCAL.push_back(row["s0"]);
255  dEOverPSigmaParams_FCAL.push_back(row["s1"]);
256  dEOverPSigmaParams_FCAL.push_back(row["s2"]);
257  }
258  if (jcalib->Get("FCAL/EOverPMean",vals)==false){
259  map<string,double> &row = vals[0];
260  dEOverPMeanParams_FCAL.push_back(row["m0"]);
261  dEOverPMeanParams_FCAL.push_back(row["m1"]);
262  dEOverPMeanParams_FCAL.push_back(row["m2"]);
263  }
264 
265  if (jcalib->Get("FCAL/TimeSigmas",vals)==false){
266  for(unsigned int i=0; i<vals.size(); i++){
267  map<string,double> &row = vals[i];
268  switch(int(row["PID"])){
269  case 2:
270  dTimeSigmaParams_FCAL_Positron.push_back(row["s1"]);
271  dTimeSigmaParams_FCAL_Positron.push_back(row["s2"]);
272  dTimeSigmaParams_FCAL_Positron.push_back(row["s3"]);
273  dTimeSigmaParams_FCAL_Positron.push_back(row["s4"]);
274  break;
275  case 8:
276  dTimeSigmaParams_FCAL_PiPlus.push_back(row["s1"]);
277  dTimeSigmaParams_FCAL_PiPlus.push_back(row["s2"]);
278  dTimeSigmaParams_FCAL_PiPlus.push_back(row["s3"]);
279  dTimeSigmaParams_FCAL_PiPlus.push_back(row["s4"]);
280  break;
281  case 11:
282  dTimeSigmaParams_FCAL_KPlus.push_back(row["s1"]);
283  dTimeSigmaParams_FCAL_KPlus.push_back(row["s2"]);
284  dTimeSigmaParams_FCAL_KPlus.push_back(row["s3"]);
285  dTimeSigmaParams_FCAL_KPlus.push_back(row["s4"]);
286  break;
287  case 14:
288  dTimeSigmaParams_FCAL_Proton.push_back(row["s1"]);
289  dTimeSigmaParams_FCAL_Proton.push_back(row["s2"]);
290  dTimeSigmaParams_FCAL_Proton.push_back(row["s3"]);
291  dTimeSigmaParams_FCAL_Proton.push_back(row["s4"]);
292  break;
293  default:
294  break;
295  }
296  }
297  }
298 }
299 
300 //---------------------------------
301 // ~DParticleID_PID1 (Destructor)
302 //---------------------------------
304 {
305 
306 }
307 
309  double p) const{
310  double mean=0;
311  switch(detector){
312  case SYS_FCAL:
315  break;
316  case SYS_BCAL:
319  break;
320  default:
321  break;
322  }
323  return mean;
324 }
325 
327  double p) const{
328  double mean=0;
329  switch(detector){
330  case SYS_FCAL:
333  break;
334  case SYS_BCAL:
337  break;
338  default:
339  break;
340  }
341  return mean;
342 }
343 
344 
345 double DParticleID_PID1::GetProtondEdxMean_SC(double locBeta) const{
346  double locBetaGammaValue = locBeta/sqrt(1.0 - locBeta*locBeta);
347  return 0.001*Function_dEdx(locBetaGammaValue, ddEdxMeanParams_SC_Proton);
348 }
349 double DParticleID_PID1::GetProtondEdxSigma_SC(double locBeta) const{
350  double locBetaGammaValue = locBeta/sqrt(1.0 - locBeta*locBeta);
351  return 0.001*Function_dEdxSigma(locBetaGammaValue, ddEdxSigmaParams_SC_Proton);
352 }
353 
354 jerror_t DParticleID_PID1::GetdEdxMean_CDC(double locBeta, unsigned int locNumHitsUsedFordEdx, double& locMeandEdx, Particle_t locPIDHypothesis) const
355 {
356  double locBetaGammaValue = locBeta/sqrt(1.0 - locBeta*locBeta);
357  if((locPIDHypothesis == Electron) || (locPIDHypothesis == Positron)){
358  locMeandEdx = Function_dEdx(locBetaGammaValue, ddEdxMeanParams_CDC_Electron)/1000000.0;
359  return NOERROR;
360  }
361  if((locPIDHypothesis == Proton) || (locPIDHypothesis == AntiProton)){
362  locMeandEdx = Function_dEdx(locBetaGammaValue, ddEdxMeanParams_CDC_Proton)/1000000.0;
363  return NOERROR;
364  }
365  if((locPIDHypothesis == KPlus) || (locPIDHypothesis == KMinus)){
366  locMeandEdx = Function_dEdx(locBetaGammaValue, ddEdxMeanParams_CDC_KPlus)/1000000.0;
367  return NOERROR;
368  }
369  if((locPIDHypothesis == PiPlus) || (locPIDHypothesis == PiMinus)){
370  locMeandEdx = Function_dEdx(locBetaGammaValue, ddEdxMeanParams_CDC_PiPlus)/1000000.0;
371  return NOERROR;
372  }
373 
374  return RESOURCE_UNAVAILABLE;
375 }
376 
377 jerror_t DParticleID_PID1::GetdEdxSigma_CDC(double locBeta, unsigned int locNumHitsUsedFordEdx, double& locSigmadEdx, Particle_t locPIDHypothesis) const
378 {
379  double locBetaGammaValue = locBeta/sqrt(1.0 - locBeta*locBeta);
380  if((locPIDHypothesis == Electron) || (locPIDHypothesis == Positron)){
381  locSigmadEdx = Function_dEdx(locBetaGammaValue, ddEdxSigmaParams_CDC_Electron)/1000000.0;
382  return NOERROR;
383  }
384  if((locPIDHypothesis == Proton) || (locPIDHypothesis == AntiProton)){
385  locSigmadEdx = Function_dEdxSigma(locBetaGammaValue, ddEdxSigmaParams_CDC_Proton)/1000000.0;
386  return NOERROR;
387  }
388  if((locPIDHypothesis == KPlus) || (locPIDHypothesis == KMinus)){
389  locSigmadEdx = Function_dEdxSigma(locBetaGammaValue, ddEdxSigmaParams_CDC_KPlus)/1000000.0;
390  return NOERROR;
391  }
392  if((locPIDHypothesis == PiPlus) || (locPIDHypothesis == PiMinus)){
393  locSigmadEdx = Function_dEdxSigma(locBetaGammaValue, ddEdxSigmaParams_CDC_PiPlus)/1000000.0;
394  return NOERROR;
395  }
396 
397  return RESOURCE_UNAVAILABLE;
398 }
399 
400 jerror_t DParticleID_PID1::GetdEdxMean_FDC(double locBeta, unsigned int locNumHitsUsedFordEdx, double& locMeandEdx, Particle_t locPIDHypothesis) const
401 {
402  double locBetaGammaValue = locBeta/sqrt(1.0 - locBeta*locBeta);
403  if((locPIDHypothesis == Electron) || (locPIDHypothesis == Positron)){
404  locMeandEdx = Function_dEdx(locBetaGammaValue, ddEdxMeanParams_FDC_Electron)/1000000.0;
405  return NOERROR;
406  }
407  if((locPIDHypothesis == Proton) || (locPIDHypothesis == AntiProton)){
408  locMeandEdx = Function_dEdx(locBetaGammaValue, ddEdxMeanParams_FDC_Proton)/1000000.0;
409  return NOERROR;
410  }
411  if((locPIDHypothesis == KPlus) || (locPIDHypothesis == KMinus)){
412  locMeandEdx = Function_dEdx(locBetaGammaValue, ddEdxMeanParams_FDC_KPlus)/1000000.0;
413  return NOERROR;
414  }
415  if((locPIDHypothesis == PiPlus) || (locPIDHypothesis == PiMinus)){
416  locMeandEdx = Function_dEdx(locBetaGammaValue, ddEdxMeanParams_FDC_PiPlus)/1000000.0;
417  return NOERROR;
418  }
419 
420  return RESOURCE_UNAVAILABLE;;
421 }
422 
423 jerror_t DParticleID_PID1::GetdEdxSigma_FDC(double locBeta, unsigned int locNumHitsUsedFordEdx, double& locSigmadEdx, Particle_t locPIDHypothesis) const
424 {
425  double locBetaGammaValue = locBeta/sqrt(1.0 - locBeta*locBeta);
426  if((locPIDHypothesis == Electron) || (locPIDHypothesis == Positron)){
427  locSigmadEdx = Function_dEdx(locBetaGammaValue, ddEdxSigmaParams_FDC_Electron)/1000000.0;
428  return NOERROR;
429  }
430  if((locPIDHypothesis == Proton) || (locPIDHypothesis == AntiProton)){
431  locSigmadEdx = Function_dEdxSigma(locBetaGammaValue, ddEdxSigmaParams_FDC_Proton)/1000000.0;
432  return NOERROR;
433  }
434  if((locPIDHypothesis == KPlus) || (locPIDHypothesis == KMinus)){
435  locSigmadEdx = Function_dEdxSigma(locBetaGammaValue, ddEdxSigmaParams_FDC_KPlus)/1000000.0;
436  return NOERROR;
437  }
438  if((locPIDHypothesis == PiPlus) || (locPIDHypothesis == PiMinus)){
439  locSigmadEdx = Function_dEdxSigma(locBetaGammaValue, ddEdxSigmaParams_FDC_PiPlus)/1000000.0;
440  return NOERROR;
441  }
442 
443  return RESOURCE_UNAVAILABLE;
444 }
445 
446 jerror_t DParticleID_PID1::CalcDCdEdxChiSq(DChargedTrackHypothesis *locChargedTrackHypothesis) const
447 {
448  locChargedTrackHypothesis->Set_ChiSq_DCdEdx(0.0, 0);
449  unsigned int locMinimumNumberUsedHitsForConfidence = 3; //dE/dx is landau-distributed, so to approximate Gaussian must remove hits with largest dE/dx //3 means 6 or more hits originally
450  Particle_t locPID = locChargedTrackHypothesis->PID();
451  double locChiSq=0.;
452  unsigned int locNDF=0;
453 
454  auto locTrackTimeBased = locChargedTrackHypothesis->Get_TrackTimeBased();
455  unsigned int locNumHitsUsedFordEdx_CDC = locTrackTimeBased->dNumHitsUsedFordEdx_CDC;
456  unsigned int locNumHitsUsedFordEdx_FDC = locTrackTimeBased->dNumHitsUsedFordEdx_FDC;
457 
458  bool locUseCDCHitsFlag = (locNumHitsUsedFordEdx_CDC >= locMinimumNumberUsedHitsForConfidence) ? true : false;
459  bool locUseFDCHitsFlag = (locNumHitsUsedFordEdx_FDC >= locMinimumNumberUsedHitsForConfidence) ? true : false;
460 
461  if((locUseCDCHitsFlag == false) && (locUseFDCHitsFlag == false))
462  return RESOURCE_UNAVAILABLE; //not enough hits, use other sources of information for PID
463 
464  // Get the dEdx values for each detector group
465  double locDCdEdx_FDC=locTrackTimeBased->ddEdx_FDC;
466  double locDCdEdx_CDC=locTrackTimeBased->ddEdx_CDC_amp;
467 
468  double locMeandEdx_FDC, locMeandEdx_CDC, locSigmadEdx_FDC, locSigmadEdx_CDC;
469  double locDeltadEdx_CDC = 0.0, locDeltadEdx_FDC = 0.0;
470 
471  double locBeta = locChargedTrackHypothesis->momentum().Mag()/locChargedTrackHypothesis->energy();
472 
473  if(locUseCDCHitsFlag && GetdEdxMean_CDC(locBeta, locNumHitsUsedFordEdx_CDC, locMeandEdx_CDC, locPID) == NOERROR)
474  {
475  if(GetdEdxSigma_CDC(locBeta, locNumHitsUsedFordEdx_CDC, locSigmadEdx_CDC, locPID) == NOERROR)
476  {
477  locDeltadEdx_CDC = locDCdEdx_CDC - locMeandEdx_CDC;
478  double locNormalizedDifference = locDeltadEdx_CDC/locSigmadEdx_CDC;
479  locChiSq += locNormalizedDifference*locNormalizedDifference;
480  locNDF++;
481  }
482  }
483 
484  if(locUseFDCHitsFlag && GetdEdxMean_FDC(locBeta, locNumHitsUsedFordEdx_FDC, locMeandEdx_FDC, locPID) == NOERROR)
485  {
486  if(GetdEdxSigma_FDC(locBeta, locNumHitsUsedFordEdx_FDC, locSigmadEdx_FDC, locPID) == NOERROR)
487  {
488  locDeltadEdx_FDC = locDCdEdx_FDC - locMeandEdx_FDC;
489  double locNormalizedDifference = locDeltadEdx_FDC/locSigmadEdx_FDC;
490  locChiSq += locNormalizedDifference*locNormalizedDifference;
491  locNDF++;
492  }
493  }
494 
495  if (locNDF>0)
496  locChargedTrackHypothesis->Set_ChiSq_DCdEdx(locChiSq, locNDF);
497 
498  return NOERROR;
499 }
500 
501 double DParticleID_PID1::GetTimeVariance(DetectorSystem_t detector,Particle_t particle,double p) const {
502  double locSigma=0.;
503 
504  if (particle==Proton || particle==AntiProton){
505  switch(detector){
506  case SYS_TOF:
507  locSigma=dTimeSigmaParams_TOF_Proton[0]/(p*p)
511  break;
512  case SYS_BCAL:
513  locSigma=dTimeSigmaParams_BCAL_Proton[0]/(p*p)
517  break;
518  case SYS_FCAL:
519  locSigma=dTimeSigmaParams_FCAL_Proton[0]/(p*p)
523  break;
524  default:
525  break;
526  }
527  }
528  else if (particle==KPlus || particle==KMinus){
529  switch(detector){
530  case SYS_TOF:
531  locSigma=dTimeSigmaParams_TOF_KPlus[0]/(p*p)
535  break;
536  case SYS_BCAL:
537  locSigma=dTimeSigmaParams_BCAL_KPlus[0]/(p*p)
541  break;
542  case SYS_FCAL:
543  locSigma=dTimeSigmaParams_FCAL_KPlus[0]/(p*p)
547  break;
548  default:
549  break;
550  }
551  }
552  else if (particle==PiPlus || particle==PiMinus){
553  switch(detector){
554  case SYS_TOF:
555  locSigma=dTimeSigmaParams_TOF_PiPlus[0]/(p*p)
559  break;
560  case SYS_BCAL:
561  locSigma=dTimeSigmaParams_BCAL_PiPlus[0]/(p*p)
565  break;
566  case SYS_FCAL:
567  locSigma=dTimeSigmaParams_FCAL_PiPlus[0]/(p*p)
571  break;
572  default:
573  break;
574  }
575  }
576  else if (particle==Electron || particle==Positron){
577  switch(detector){
578  case SYS_TOF:
579  locSigma=dTimeSigmaParams_TOF_Positron[0]/(p*p)
583  break;
584  case SYS_BCAL:
585  locSigma=dTimeSigmaParams_BCAL_Positron[0]/(p*p)
589  break;
590  case SYS_FCAL:
591  locSigma=dTimeSigmaParams_FCAL_Positron[0]/(p*p)
595  break;
596  default:
597  break;
598  }
599  }
600 
601  return locSigma*locSigma;
602 }
603 
604 
vector< float > ddEdxSigmaParams_FDC_PiPlus
vector< float > ddEdxMeanParams_FDC_PiPlus
vector< float > dTimeSigmaParams_TOF_KPlus
DApplication * dapp
vector< float > ddEdxMeanParams_CDC_Electron
vector< float > ddEdxSigmaParams_CDC_KPlus
vector< float > ddEdxSigmaParams_FDC_KPlus
double energy(void) const
jerror_t CalcDCdEdxChiSq(DChargedTrackHypothesis *locChargedTrackHypothesis) const
double GetProtondEdxMean_SC(double locBeta) const
const DTrackTimeBased * Get_TrackTimeBased(void) const
vector< float > ddEdxMeanParams_CDC_Proton
double GetProtondEdxSigma_SC(double locBeta) const
DetectorSystem_t
Definition: GlueX.h:15
vector< float > dEOverPMeanParams_FCAL
vector< float > ddEdxMeanParams_CDC_PiPlus
Definition: GlueX.h:19
vector< float > ddEdxSigmaParams_CDC_PiPlus
vector< float > ddEdxMeanParams_CDC_KPlus
void Set_ChiSq_DCdEdx(double locChiSq, unsigned int locNDF)
vector< float > dTimeSigmaParams_FCAL_PiPlus
jerror_t GetdEdxMean_FDC(double locBeta, unsigned int locNumHitsUsedFordEdx, double &locMeandEdx, Particle_t locPIDHypothesis) const
vector< float > ddEdxSigmaParams_FDC_Electron
Definition: GlueX.h:20
double Function_dEdxSigma(double locBetaGamma, const vector< float > &locParams) const
Definition: GlueX.h:22
vector< float > dTimeSigmaParams_TOF_Positron
vector< float > dTimeSigmaParams_BCAL_KPlus
vector< float > ddEdxMeanParams_SC_Proton
double GetEOverPSigma(DetectorSystem_t detector, double p) const
vector< float > ddEdxSigmaParams_CDC_Electron
vector< float > dEOverPMeanParams_BCAL
vector< float > dTimeSigmaParams_FCAL_Positron
double Function_dEdx(double locBetaGamma, const vector< float > &locParams) const
vector< float > ddEdxMeanParams_FDC_Proton
double sqrt(double)
vector< float > ddEdxSigmaParams_FDC_Proton
vector< float > dTimeSigmaParams_BCAL_Proton
vector< float > dTimeSigmaParams_BCAL_PiPlus
vector< float > ddEdxMeanParams_FDC_Electron
vector< float > ddEdxMeanParams_FDC_KPlus
double GetEOverPMean(DetectorSystem_t detector, double p) const
vector< float > ddEdxSigmaParams_SC_Proton
const DVector3 & momentum(void) const
vector< float > dTimeSigmaParams_FCAL_KPlus
vector< float > dTimeSigmaParams_TOF_PiPlus
jerror_t GetdEdxSigma_FDC(double locBeta, unsigned int locNumHitsUsedFordEdx, double &locSigmadEdx, Particle_t locPIDHypothesis) const
vector< float > dTimeSigmaParams_FCAL_Proton
vector< float > dEOverPSigmaParams_FCAL
jerror_t GetdEdxSigma_CDC(double locBeta, unsigned int locNumHitsUsedFordEdx, double &locSigmadEdx, Particle_t locPIDHypothesis) const
vector< float > ddEdxSigmaParams_CDC_Proton
vector< float > dTimeSigmaParams_BCAL_Positron
vector< float > dEOverPSigmaParams_BCAL
vector< float > dTimeSigmaParams_TOF_Proton
jerror_t GetdEdxMean_CDC(double locBeta, unsigned int locNumHitsUsedFordEdx, double &locMeandEdx, Particle_t locPIDHypothesis) const
unsigned int dNumHitsUsedFordEdx_CDC
Particle_t PID(void) const
double GetTimeVariance(DetectorSystem_t detector, Particle_t particle, double p) const
Particle_t
Definition: particleType.h:12