FairRoot/PandaRoot
PndFsmCmpDet.cxx
Go to the documentation of this file.
1 //--------------------------------------------------------------------------
2 // Description:
3 // Class PndFsmCmpDet
4 //
5 // Detector class that combines responses from other detectors
6 //
7 // This software was developed for the PANDA collaboration. If you
8 // use all or part of it, please give an appropriate acknowledgement.
9 //
10 // Author List:
11 // Oscar Reinecke Original Author
12 //
13 // Copyright Information:
14 // Copyright (C) 2008 GSI
15 //
16 //------------------------------------------------------------------------
17 
18 //-----------------------
19 // This Class's Header --
20 //-----------------------
21 #include "PndFsmCmpDet.h"
22 
23 //-------------
24 // C Headers --
25 //-------------
26 
27 //---------------
28 // C++ Headers --
29 //---------------
30 #include <math.h>
31 #include <iostream>
32 
33 using std::cout;
34 using std::endl;
35 using std::ostream;
36 using std::string;
37 
38 //-------------------------------
39 // Collaborating Class Headers --
40 //-------------------------------
41 
42 #include "ArgList.h"
43 #include "PndFsmResponse.h"
44 #include "PndFsmTrack.h"
45 #include "PndFsmAbsDet.h"
46 #include "PndFsmDetFactory.h"
47 
48 #include "TFile.h"
49 #include "TString.h"
50 #include "TSpline.h"
51 #include "TParameter.h"
52 #include "TF1.h"
53 
54 //-----------------------------------------------------------------------
55 // Local Macros, Typedefs, Structures, Unions and Forward Declarations --
56 //-----------------------------------------------------------------------
57 
58 //----------------
59 // Constructors --
60 //----------------
61 
64  parseParameterList(par);
65  std::cout<<" -I- (PndFsmCmpDet::PndFsmCmpDet) - Using parameter file '"<<_parFileName<<"'"<<endl;
67 
68  // when PndFsmCmpDet has been created by the detector
69  // factory, some arbitrary detector set is added
70 
71  std::cout<<" -I- (PndFsmCmpDet::PndFsmCmpDet) - Creating arbitrary detector set"<<endl;
72 
73  //EM Calorimeters w/ default parameters
74  AddDetector("EmcBarrel");
75  AddDetector("EmcFwCap");
76  AddDetector("EmcBwCap");
77  AddDetector("EmcFS");
78 
79  //Tracking, Vertexing, dE/dx
80  AddDetector("Mvd2");
81  AddDetector("Stt");
82  AddDetector("MdcTS");
83  AddDetector("MdcFS");
84 //AddDetector("Tpc");
85 
86  //PID detectors
87  AddDetector("DrcBarrel");
88  AddDetector("DrcDisc");
89  AddDetector("Rich");
90  AddDetector("Tof");
91 }
92 
96 }
97 
98 //--------------
99 // Destructor --
100 //--------------
101 
103 }
104 
105 //--------------
106 // Operations --
107 //--------------
108 
111  PndFsmResponse *result=new PndFsmResponse();
112 
113  result->setDetector(this);
114 
115  bool detected=false;
116 
117  double dE=0.0;
118  double dp=0.0;
119  double dtheta=0.0;
120  double dphi=0.0;
121  double dt=0.0;
122  double dm=0.0;
123 
124  double m2=0;
125  double MvddEdx=0;
126  double TpcdEdx=0;
127  double SttdEdx=0;
128  double DrcDiscThtc=0;
129  double DrcBarrelThtc=0;
130  double RichThtc=0;
131 
132  double m2Err=0;
133  double MvddEdxErr=0;
134  double TpcdEdxErr=0;
135  double SttdEdxErr=0;
136  double DrcDiscThtcErr=0;
137  double DrcBarrelThtcErr=0;
138  double RichThtcErr=0;
139 
140  double dVx=0;
141  double dVy=0;
142  double dVz=0;
143 
144  double LH_e=1.0;
145  double LH_mu=1.0;
146  double LH_pi=1.0;
147  double LH_K=1.0;
148  double LH_p=1.0;
149 
150  double val=0.0;
151 
152  for (FsmAbsDetList::iterator iter=fDetList.begin();iter!=fDetList.end(); iter++) {
153  PndFsmResponse* resp=(*iter)->respond(t);
154 
155  detected |= resp->detected();
156 
157  if (resp->detected()) {
158  if (fabs(val = resp->dE()) > 1e-8) dE+=1/(val*val);
159  if (fabs(val = resp->dt()) > 1e-8) dt += val*val;
160  if (fabs(val = resp->dm()) > 1e-8) dm +=val;
161  if (fabs (val = resp->m2()) > 1e-11) m2+=val;
162  if (fabs (val = resp->MvddEdx()) > 1e-11) MvddEdx+=val;
163  if (fabs (val = resp->TpcdEdx()) > 1e-11) TpcdEdx+=val;
164  if (fabs (val = resp->SttdEdx()) > 1e-11) SttdEdx+=val;
165  if (fabs (val = resp->DrcDiscThtc()) > 1e-11) DrcDiscThtc+=val;
166  if (fabs (val = resp->DrcBarrelThtc()) > 1e-11) DrcBarrelThtc+=val;
167  if (fabs (val = resp->RichThtc()) > 1e-11) RichThtc+=val;
168 
169  if (fabs (val = resp->m2Err()) > 1e-11) m2Err+=val;
170  if (fabs (val = resp->MvddEdxErr()) > 1e-11) MvddEdxErr+=val;
171  if (fabs (val = resp->TpcdEdxErr()) > 1e-11) TpcdEdxErr+=val;
172  if (fabs (val = resp->SttdEdxErr()) > 1e-11) SttdEdxErr+=val;
173  if (fabs (val = resp->DrcDiscThtcErr()) > 1e-11) DrcDiscThtcErr+=val;
174  if (fabs (val = resp->DrcBarrelThtcErr()) > 1e-11) DrcBarrelThtcErr+=val;
175  if (fabs (val = resp->RichThtcErr()) > 1e-11) RichThtcErr+=val;
176 
177  double rawLHe = resp->LHElectron();
178  double rawLHmu = resp->LHMuon();
179  double rawLHpi = resp->LHPion();
180  double rawLHK = resp->LHKaon();
181  double rawLHp = resp->LHProton();
182 
183  double sumRaw = rawLHe+rawLHmu+rawLHpi+rawLHK+rawLHp;
184 
185  if (sumRaw>0) {
186  rawLHe /= sumRaw;
187  rawLHmu /= sumRaw;
188  rawLHpi /= sumRaw;
189  rawLHK /= sumRaw;
190  rawLHp /= sumRaw;
191  LH_e *= rawLHe;
192  LH_mu *= rawLHmu;
193  LH_pi *= rawLHpi;
194  LH_K *= rawLHK;
195  LH_p *= rawLHp;
196  } else {
197  LH_e *= 0.2;
198  LH_mu *= 0.2;
199  LH_pi *= 0.2;
200  LH_K *= 0.2;
201  LH_p *= 0.2;
202  }
203  }
204  }
205 
206  // invoke parameterised vertex/momentum resolution
207  // (this will overwrite dp, dtheta, dphi and dV)
208  if ( _parFile ) {
209  // haven't done neutral particles yet
210  if ( fabs(t->charge())>1e-8 ) {
211  int pid=abs(t->pdt());
212  if ( pid==11 || pid==13 || pid==211 || pid==321 || pid==2212) {
213  double p=t->p4().Vect().Mag();
214  double theta=t->p4().Vect().Theta()*180/M_PI;
215  // cut off slow and out of theta range particles
216  // (this avoids floating point exceptions)
217  detected &= ( p > _mom0[pid]->GetVal() );
218  detected &= ( theta >= _tht0->GetVal() );
219  detected &= ( theta <= _tht1->GetVal() );
220 
221  if (detected) {
222  dtheta = eval(_tht[pid], theta) * _thtScale[pid]->Eval(p) * _thtResMulti * 3.1416/180;
223  dphi = eval(_phi[pid], theta) * _phiScale[pid]->Eval(p) * _phiResMulti * 3.1416/180;
224  dp = eval(_mom[pid], theta) * _momScale[pid]->Eval(p) * _momResMulti * p;
225 
226  dVx = eval(_d0[pid], theta) * _d0Scale[pid]->Eval(p) * _d0ResMulti;
227  dVy = eval(_d0[pid], theta) * _d0Scale[pid]->Eval(p) * _d0ResMulti;
228  dVz = eval(_z0[pid], theta) * _z0Scale[pid]->Eval(p) * _z0ResMulti;
229 
230  dtheta=1/(dtheta*dtheta);
231  dphi=1/(dphi*dphi);
232  dp=1/(dp*dp);
233  }
234  }
235  }
236  }
237 
238  for (FsmAbsDetList::iterator iter=fSubtractDetList.begin();iter!=fSubtractDetList.end(); iter++) {
239  PndFsmResponse* resp=(*iter)->respond(t);
240 
241  if (resp->detected()) {
242  if (fabs(val = resp->dE()) > 1e-8) dE-=1/(val*val);
243  if (fabs(val = resp->dp()) > 1e-8) dp-=1/(val*val);
244  if (fabs(val = resp->dtheta())> 1e-8) dtheta-=1/(val*val);
245  if (fabs(val = resp->dphi()) > 1e-8) dphi-=1/(val*val);
246  if (fabs(val = resp->dt()) > 1e-8) dt -= val*val;
247  if (fabs(val = resp->dm()) > 1e-8) dm -=val;
248  if (fabs (val = resp->m2()) > 1e-11) m2-=val;
249  if (fabs (val = resp->MvddEdx()) > 1e-11) MvddEdx-=val;
250  if (fabs (val = resp->TpcdEdx()) > 1e-11) TpcdEdx-=val;
251  if (fabs (val = resp->SttdEdx()) > 1e-11) SttdEdx-=val;
252  if (fabs (val = resp->DrcDiscThtc()) > 1e-11) DrcDiscThtc-=val;
253  if (fabs (val = resp->DrcBarrelThtc()) > 1e-11) DrcBarrelThtc-=val;
254  if (fabs (val = resp->RichThtc()) > 1e-11) RichThtc-=val;
255 
256  if (fabs (val = resp->m2Err()) > 1e-11) m2Err-=val;
257  if (fabs (val = resp->MvddEdxErr()) > 1e-11) MvddEdxErr-=val;
258  if (fabs (val = resp->TpcdEdxErr()) > 1e-11) TpcdEdxErr-=val;
259  if (fabs (val = resp->SttdEdxErr()) > 1e-11) SttdEdxErr-=val;
260  if (fabs (val = resp->DrcDiscThtcErr()) > 1e-11) DrcDiscThtcErr-=val;
261  if (fabs (val = resp->DrcBarrelThtcErr()) > 1e-11) DrcBarrelThtcErr-=val;
262  if (fabs (val = resp->RichThtcErr()) > 1e-11) RichThtcErr-=val;
263 
264  if (fabs (val = resp->dV().X()) > 1e-11) dVx-=1/(val*val);
265  if (fabs (val = resp->dV().Y()) > 1e-11) dVy-=1/(val*val);
266  if (fabs (val = resp->dV().Z()) > 1e-11) dVz-=1/(val*val);
267 
268  double rawLHe = resp->LHElectron();
269  double rawLHmu = resp->LHMuon();
270  double rawLHpi = resp->LHPion();
271  double rawLHK = resp->LHKaon();
272  double rawLHp = resp->LHProton();
273 
274  double sumRaw = rawLHe+rawLHmu+rawLHpi+rawLHK+rawLHp;
275 
276  if (sumRaw>0) {
277  rawLHe /= sumRaw;
278  rawLHmu /= sumRaw;
279  rawLHpi /= sumRaw;
280  rawLHK /= sumRaw;
281  rawLHp /= sumRaw;
282  LH_e /= rawLHe;
283  LH_mu /= rawLHmu;
284  LH_pi /= rawLHpi;
285  LH_K /= rawLHK;
286  LH_p /= rawLHp;
287  }
288  }
289  }
290 
291  double sumLH = LH_e + LH_mu + LH_pi + LH_K + LH_p;
292 
293  if (sumLH>0) {
294  LH_e /= sumLH;
295  LH_mu /= sumLH;
296  LH_pi /= sumLH;
297  LH_K /= sumLH;
298  LH_p /= sumLH;
299  } else {
300  LH_e = 0.2;
301  LH_mu = 0.2;
302  LH_pi = 0.2;
303  LH_K = 0.2;
304  LH_p = 0.2;
305  }
306 
307  // this shifts all likelihoods linearly to the state
308  // of no pid information at all i. e. all lhs are 0.2
309  LH_e = 0.2*(1-_pidLhMulti) + LH_e*_pidLhMulti;
310  LH_mu = 0.2*(1-_pidLhMulti) + LH_mu*_pidLhMulti;
311  LH_pi = 0.2*(1-_pidLhMulti) + LH_pi*_pidLhMulti;
312  LH_K = 0.2*(1-_pidLhMulti) + LH_K*_pidLhMulti;
313  LH_p = 0.2*(1-_pidLhMulti) + LH_p*_pidLhMulti;
314 
315  result->setdE( dE>0. ? 1/sqrt(dE) : 0.0 );
316  result->setdp( dp>0. ? 1/sqrt(dp) : 0.0 );
317  result->setdtheta( dtheta>0. ? 1/sqrt(dtheta) : 0.0 );
318  result->setdphi( dphi>0. ? 1/sqrt(dphi) : 0.0 );
319  result->setdt( sqrt(dt) );
320  result->setdm(dm);
321 
322  result->setm2(m2, m2Err);
323  result->setMvddEdx(MvddEdx,MvddEdxErr);
324  result->setTpcdEdx(TpcdEdx,TpcdEdxErr);
325  result->setSttdEdx(SttdEdx,SttdEdxErr);
326 
327  result->setDrcDiscThtc(DrcDiscThtc,DrcDiscThtcErr);
328  result->setDrcBarrelThtc(DrcBarrelThtc,DrcBarrelThtcErr);
329  result->setRichThtc(RichThtc,RichThtcErr);
330 
331  if (dVx > 0.) dVx=1./sqrt(dVx); else dVx = 0.0;
332  if (dVy > 0.) dVy=1./sqrt(dVy); else dVy = 0.0;
333  if (dVz > 0.) dVz=1./sqrt(dVz); else dVz = 0.0;
334 
335  result->setdV( dVx , dVy , dVz );
336 
337  result->setLHElectron(LH_e);
338  result->setLHMuon(LH_mu);
339  result->setLHPion(LH_pi);
340  result->setLHKaon(LH_K);
341  result->setLHProton(LH_p);
342 
343  result->setDetected(detected);
344 
345  return result;
346 }
347 
348 
349 bool PndFsmCmpDet::AddDetector(string name, string params) {
350  PndFsmAbsDet *det=fDetFact.create(name,params);
351  if (det)
352  fDetList.push_back(det);
353  return det;
354 }
355 
356 bool PndFsmCmpDet::SubtractDetector(string name, string params) {
357  PndFsmAbsDet *det=fDetFact.create(name,params);
358  if (det)
359  fSubtractDetList.push_back(det);
360  return det;
361 }
362 
363 bool PndFsmCmpDet::setParameter(string &name, string &value) {
364  // *****************
365  // include here all string parameters which should be settable
366  // *****************
367 
368  bool knownName=true;
369 
370  if (name == "parFileName")
371  _parFileName=value;
372  else
373  knownName=false;
374 
375  return knownName;
376 }
377 
378 bool PndFsmCmpDet::setParameter(std::string &name, double value) {
379  // *****************
380  // include here all float parameters which should be settable
381  // *****************
382 
383  bool knownName=true;
384 
385  if (name == "d0ResMulti")
386  _d0ResMulti=value;
387  else
388  if (name == "z0ResMulti")
389  _z0ResMulti=value;
390  else
391  if (name == "thtResMulti")
392  _thtResMulti=value;
393  else
394  if (name == "phiResMulti")
395  _phiResMulti=value;
396  else
397  if (name == "momResMulti")
398  _momResMulti=value;
399  else
400  if (name == "thtMin")
401  _tht0 = new TParameter<double>("tht0", value);
402  else
403  if (name == "thtMax")
404  _tht1 = new TParameter<double>("tht1", value);
405  else
406  if (name == "pidLhMulti")
407  _pidLhMulti=value;
408  else
409  knownName=false;
410 
411  return knownName;
412 }
413 
415 
416  TFile f(_parFileName);
417 
418  if (f.IsZombie()) {
419  cout <<" -W- (PndFsmCmpDet::readParameters) - file "<<_parFileName
420  <<" doesn't exist. Using constant vertex reso"<<endl;
421  } else {
422  // electrons
423  _d0[11]=(TSpline3*)f.Get("d0E-");
424  _z0[11]=(TSpline3*)f.Get("z0E-");
425  _tht[11]=(TSpline3*)f.Get("thtE-");
426  _phi[11]=(TSpline3*)f.Get("phiE-");
427  _mom[11]=(TSpline3*)f.Get("momE-");
428  if (!_mom0[11]) _mom0[11]=(TParameter<double>*)f.Get("mom0E-");
429  _d0Scale[11]=(TF1*)f.Get("d0ScaleE-");
430  _z0Scale[11]=(TF1*)f.Get("z0ScaleE-");
431  _thtScale[11]=(TF1*)f.Get("thtScaleE-");
432  _phiScale[11]=(TF1*)f.Get("phiScaleE-");
433  _momScale[11]=(TF1*)f.Get("momScaleE-");
434  // muons
435  _d0[13]=(TSpline3*)f.Get("d0Mu+");
436  _z0[13]=(TSpline3*)f.Get("z0Mu+");
437  _tht[13]=(TSpline3*)f.Get("thtMu+");
438  _phi[13]=(TSpline3*)f.Get("phiMu+");
439  if (!_mom0[13]) _mom[13]=(TSpline3*)f.Get("momMu+");
440  _mom0[13]=(TParameter<double>*)f.Get("mom0Mu+");
441  _d0Scale[13]=(TF1*)f.Get("d0ScaleMu+");
442  _z0Scale[13]=(TF1*)f.Get("z0ScaleMu+");
443  _thtScale[13]=(TF1*)f.Get("thtScaleMu+");
444  _phiScale[13]=(TF1*)f.Get("phiScaleMu+");
445  _momScale[13]=(TF1*)f.Get("momScaleMu+");
446  // pions
447  _d0[211]=(TSpline3*)f.Get("d0Pi-");
448  _z0[211]=(TSpline3*)f.Get("z0Pi-");
449  _tht[211]=(TSpline3*)f.Get("thtPi-");
450  _phi[211]=(TSpline3*)f.Get("phiPi-");
451  _mom[211]=(TSpline3*)f.Get("momPi-");
452  if (!_mom0[211]) _mom0[211]=(TParameter<double>*)f.Get("mom0Pi-");
453  _d0Scale[211]=(TF1*)f.Get("d0ScalePi-");
454  _z0Scale[211]=(TF1*)f.Get("z0ScalePi-");
455  _thtScale[211]=(TF1*)f.Get("thtScalePi-");
456  _phiScale[211]=(TF1*)f.Get("phiScalePi-");
457  _momScale[211]=(TF1*)f.Get("momScalePi-");
458  // kaons
459  _d0[321]=(TSpline3*)f.Get("d0K-");
460  _z0[321]=(TSpline3*)f.Get("z0K-");
461  _tht[321]=(TSpline3*)f.Get("thtK-");
462  _phi[321]=(TSpline3*)f.Get("phiK-");
463  _mom[321]=(TSpline3*)f.Get("momK-");
464  if (!_mom0[321]) _mom0[321]=(TParameter<double>*)f.Get("mom0K-");
465  _d0Scale[321]=(TF1*)f.Get("d0ScaleK-");
466  _z0Scale[321]=(TF1*)f.Get("z0ScaleK-");
467  _thtScale[321]=(TF1*)f.Get("thtScaleK-");
468  _phiScale[321]=(TF1*)f.Get("phiScaleK-");
469  _momScale[321]=(TF1*)f.Get("momScaleK-");
470  // protons
471  _d0[2212]=(TSpline3*)f.Get("d0P+");
472  _z0[2212]=(TSpline3*)f.Get("z0P+");
473  _tht[2212]=(TSpline3*)f.Get("thtP+");
474  _phi[2212]=(TSpline3*)f.Get("phiP+");
475  _mom[2212]=(TSpline3*)f.Get("momP+");
476  if (!_mom0[2212]) _mom0[2212]=(TParameter<double>*)f.Get("mom0P+");
477  _d0Scale[2212]=(TF1*)f.Get("d0ScaleP+");
478  _z0Scale[2212]=(TF1*)f.Get("z0ScaleP+");
479  _thtScale[2212]=(TF1*)f.Get("thtScaleP+");
480  _phiScale[2212]=(TF1*)f.Get("phiScaleP+");
481  _momScale[2212]=(TF1*)f.Get("momScaleP+");
482 
483  if (!_tht0) _tht0=(TParameter<double>*)f.Get("tht0");
484  if (!_tht1) _tht1=(TParameter<double>*)f.Get("tht1");
485 
486  f.Close();
487  // now check that all parameters have been loaded correctly
488  _parFile=true;
489  std::map<int, TSpline3*>::iterator i;
490  std::map<int, TParameter<double>*>::iterator j;
491  std::map<int, TF1*>::iterator k;
492 
493  for (i=_d0.begin(); i!=_d0.end(); i++) _parFile = _parFile && i->second;
494  for (i=_z0.begin(); i!=_z0.end(); i++) _parFile = _parFile && i->second;
495  for (i=_tht.begin(); i!=_tht.end(); i++) _parFile = _parFile && i->second;
496  for (i=_phi.begin(); i!=_phi.end(); i++) _parFile = _parFile && i->second;
497  for (i=_mom.begin(); i!=_mom.end(); i++) _parFile = _parFile && i->second;
498 
499  for (j=_mom0.begin(); j!=_mom0.end(); j++) _parFile = _parFile && j->second;
500  _parFile = _parFile && _tht0 && _tht1;
501 
502  for (k=_d0Scale.begin(); k!=_d0Scale.end(); k++) _parFile = _parFile && k->second;
503  for (k=_z0Scale.begin(); k!=_z0Scale.end(); k++) _parFile = _parFile && k->second;
504  for (k=_thtScale.begin(); k!=_thtScale.end(); k++) _parFile = _parFile && k->second;
505  for (k=_phiScale.begin(); k!=_phiScale.end(); k++) _parFile = _parFile && k->second;
506  for (k=_momScale.begin(); k!=_momScale.end(); k++) _parFile = _parFile && k->second;
507 
508  if (!_parFile)
509  cout <<" -W- (PndFsmCmpDet::readParameters) - file "<<_parFileName
510  <<" is defective. Using constant vertex reso"<<endl;
511  }
512 }
513 
515  _detName = "CmpDet";
516  _parFileName = "$VMCWORKDIR/fastsim/cmpdetparams.root";
517  _parFile=false;
518  _d0ResMulti=1.0;
519  _z0ResMulti=1.0;
520  _thtResMulti=1.0;
521  _phiResMulti=1.0;
522  _momResMulti=1.0;
523  _pidLhMulti=1.0;
524  _mom0[11]=0;
525  _mom0[13]=0;
526  _mom0[211]=0;
527  _mom0[321]=0;
528  _mom0[2212]=0;
529  _tht0=0;
530  _tht1=0;
531  }
532 
533 // TSpline3::Eval returns bogus values when outside the
534 // interval, so the spline has to be continued somehow
535 double PndFsmCmpDet::eval(TSpline3* s, double x) {
536  double xmin=s->GetXmin();
537  double xmax=s->GetXmax();
538  if (x<xmin)
539  return s->Eval(xmin)+(x-xmin)*s->Derivative(xmin);
540  else if (x>xmax)
541  return s->Eval(xmax)+(x-xmax)*s->Derivative(xmax);
542  else
543  return s->Eval(x);
544 }
545 
TVector3 dV()
void setDrcBarrelThtc(double val, double err=0)
FsmAbsDetList fSubtractDetList
Definition: PndFsmCmpDet.h:71
void setdV(TVector3 v)
void setdphi(double val)
std::map< int, TSpline3 * > _d0
Definition: PndFsmCmpDet.h:86
void setLHElectron(double val)
std::map< int, TF1 * > _d0Scale
Definition: PndFsmCmpDet.h:94
double _d0ResMulti
Definition: PndFsmCmpDet.h:76
Int_t i
Definition: run_full.C:25
void setLHProton(double val)
std::list< std::string > ArgList
Definition: ArgList.h:7
friend F32vec4 sqrt(const F32vec4 &a)
Definition: P4_F32vec4.h:29
void setTpcdEdx(double val, double err=0)
std::map< int, TParameter< double > * > _mom0
Definition: PndFsmCmpDet.h:91
Double_t val[nBoxes][nFEBox]
Definition: createCalib.C:11
double _z0ResMulti
Definition: PndFsmCmpDet.h:77
double MvddEdxErr()
void setLHMuon(double val)
std::map< int, TF1 * > _phiScale
Definition: PndFsmCmpDet.h:97
TLorentzVector s
Definition: Pnd2DStar.C:50
Double_t xmax
std::map< int, TF1 * > _z0Scale
Definition: PndFsmCmpDet.h:95
std::map< int, TSpline3 * > _phi
Definition: PndFsmCmpDet.h:89
int pid()
bool SubtractDetector(std::string name, std::string params="")
FsmAbsDetList fDetList
Definition: PndFsmCmpDet.h:70
Double_t par[3]
TParameter< double > * _tht1
Definition: PndFsmCmpDet.h:93
double MvddEdx()
double charge()
Definition: PndFsmTrack.h:75
double RichThtcErr()
void parseParameterList(ArgList &par)
void setm2(double val, double err=0)
bool AddDetector(std::string name, std::string params="")
double RichThtc()
Double_t p
Definition: anasim.C:58
double DrcDiscThtcErr()
std::map< int, TSpline3 * > _tht
Definition: PndFsmCmpDet.h:88
void readParameters()
std::map< int, TF1 * > _thtScale
Definition: PndFsmCmpDet.h:96
for(int j=0;j< ncounts;j++)
TString m2(TString pts, TString exts="e px py pz")
Definition: invexp.C:117
void setdt(double val)
double SttdEdxErr()
TLorentzVector p4()
Definition: PndFsmTrack.h:72
std::map< int, TF1 * > _momScale
Definition: PndFsmCmpDet.h:98
virtual PndFsmResponse * respond(PndFsmTrack *t)
double TpcdEdx()
basic_ostream< char, char_traits< char > > ostream
void setDetector(PndFsmAbsDet *detector)
double SttdEdx()
TParameter< double > * _tht0
Definition: PndFsmCmpDet.h:92
void setDrcDiscThtc(double val, double err=0)
Double_t dE
Definition: anasim.C:58
void initParameters()
std::map< int, TSpline3 * > _z0
Definition: PndFsmCmpDet.h:87
double dtheta
Definition: anaLmdCluster.C:54
void setdp(double val)
PndFsmAbsDet * create(std::string &name, ArgList &par)
TFile * f
Definition: bump_analys.C:12
double LHElectron()
void setLHKaon(double val)
std::map< int, TSpline3 * > _mom
Definition: PndFsmCmpDet.h:90
friend F32vec4 fabs(const F32vec4 &a)
Definition: P4_F32vec4.h:47
TString name
double _thtResMulti
Definition: PndFsmCmpDet.h:78
virtual ~PndFsmCmpDet()
double _phiResMulti
Definition: PndFsmCmpDet.h:79
void setdE(double val)
PndFsmDetFactory fDetFact
Definition: PndFsmCmpDet.h:72
TString _parFileName
Definition: PndFsmCmpDet.h:74
double DrcDiscThtc()
Double_t x
void setRichThtc(double val, double err=0)
std::string _detName
Definition: PndFsmAbsDet.h:92
double _pidLhMulti
Definition: PndFsmCmpDet.h:84
void setDetected(bool isdet)
TTree * t
Definition: bump_analys.C:13
Double_t xmin
double _momResMulti
Definition: PndFsmCmpDet.h:80
void setdtheta(double val)
bool setParameter(std::string &name, std::string &value)
void setSttdEdx(double val, double err=0)
void setdm(double val)
if(fWindowIsBox)
double TpcdEdxErr()
double DrcBarrelThtcErr()
void setMvddEdx(double val, double err=0)
double DrcBarrelThtc()
double eval(TSpline3 *spline, double theta)
void setLHPion(double val)