FairRoot/PandaRoot
Public Member Functions | Protected Member Functions | Protected Attributes | Private Types | Private Member Functions | Private Attributes | List of all members
PndFsmCmpDet Class Reference

#include <PndFsmCmpDet.h>

Inheritance diagram for PndFsmCmpDet:
PndFsmAbsDet

Public Member Functions

 PndFsmCmpDet ()
 
 PndFsmCmpDet (ArgList &par)
 
virtual ~PndFsmCmpDet ()
 
virtual PndFsmResponserespond (PndFsmTrack *t)
 
bool AddDetector (std::string name, std::string params="")
 
bool SubtractDetector (std::string name, std::string params="")
 
virtual void print (std::ostream &o)
 
const std::string & detName ()
 
void setName (std::string &name)
 
Bool_t doesPid () const
 
void setStorePid (Bool_t doespid=kTRUE)
 

Protected Member Functions

void parseParameterList (ArgList &par)
 

Protected Attributes

std::string _detName
 
double _efficiency
 
TRandom3 * _rand
 
TDatabasePDG * _fdbPDG
 
Bool_t _doesPid
 

Private Types

typedef std::list< PndFsmAbsDet * > FsmAbsDetList
 

Private Member Functions

bool setParameter (std::string &name, std::string &value)
 
bool setParameter (std::string &name, double value)
 
void readParameters ()
 
void initParameters ()
 
double eval (TSpline3 *spline, double theta)
 

Private Attributes

FsmAbsDetList fDetList
 
FsmAbsDetList fSubtractDetList
 
PndFsmDetFactory fDetFact
 
TString _parFileName
 
bool _parFile
 
double _d0ResMulti
 
double _z0ResMulti
 
double _thtResMulti
 
double _phiResMulti
 
double _momResMulti
 
double _pidLhMulti
 
std::map< int, TSpline3 * > _d0
 
std::map< int, TSpline3 * > _z0
 
std::map< int, TSpline3 * > _tht
 
std::map< int, TSpline3 * > _phi
 
std::map< int, TSpline3 * > _mom
 
std::map< int, TParameter
< double > * > 
_mom0
 
TParameter< double > * _tht0
 
TParameter< double > * _tht1
 
std::map< int, TF1 * > _d0Scale
 
std::map< int, TF1 * > _z0Scale
 
std::map< int, TF1 * > _thtScale
 
std::map< int, TF1 * > _phiScale
 
std::map< int, TF1 * > _momScale
 

Detailed Description

Definition at line 47 of file PndFsmCmpDet.h.

Member Typedef Documentation

typedef std::list<PndFsmAbsDet*> PndFsmCmpDet::FsmAbsDetList
private

Definition at line 69 of file PndFsmCmpDet.h.

Constructor & Destructor Documentation

PndFsmCmpDet::PndFsmCmpDet ( )

Definition at line 93 of file PndFsmCmpDet.cxx.

References initParameters(), and readParameters().

93  {
96 }
void readParameters()
void initParameters()
PndFsmCmpDet::PndFsmCmpDet ( ArgList par)

Definition at line 62 of file PndFsmCmpDet.cxx.

References _parFileName, AddDetector(), initParameters(), PndFsmAbsDet::parseParameterList(), and readParameters().

62  {
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 }
Double_t par[3]
void parseParameterList(ArgList &par)
bool AddDetector(std::string name, std::string params="")
void readParameters()
void initParameters()
TString _parFileName
Definition: PndFsmCmpDet.h:74
PndFsmCmpDet::~PndFsmCmpDet ( )
virtual

Definition at line 102 of file PndFsmCmpDet.cxx.

102  {
103 }

Member Function Documentation

bool PndFsmCmpDet::AddDetector ( std::string  name,
std::string  params = "" 
)

Definition at line 349 of file PndFsmCmpDet.cxx.

References PndFsmDetFactory::create(), fDetFact, and fDetList.

Referenced by PndFsmCmpDet().

349  {
350  PndFsmAbsDet *det=fDetFact.create(name,params);
351  if (det)
352  fDetList.push_back(det);
353  return det;
354 }
FsmAbsDetList fDetList
Definition: PndFsmCmpDet.h:70
PndFsmAbsDet * create(std::string &name, ArgList &par)
TString name
PndFsmDetFactory fDetFact
Definition: PndFsmCmpDet.h:72
const std::string& PndFsmAbsDet::detName ( )
inlineinherited
Bool_t PndFsmAbsDet::doesPid ( ) const
inlineinherited

Definition at line 76 of file PndFsmAbsDet.h.

References PndFsmAbsDet::_doesPid.

Referenced by PndFastSim::Register(), and PndFastSim::smearTrack().

76 {return _doesPid;};
Bool_t _doesPid
Definition: PndFsmAbsDet.h:96
double PndFsmCmpDet::eval ( TSpline3 *  spline,
double  theta 
)
private

Definition at line 535 of file PndFsmCmpDet.cxx.

References xmax, and xmin.

Referenced by respond().

535  {
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 }
TLorentzVector s
Definition: Pnd2DStar.C:50
Double_t xmax
Double_t x
Double_t xmin
void PndFsmCmpDet::initParameters ( )
privatevirtual

Reimplemented from PndFsmAbsDet.

Definition at line 514 of file PndFsmCmpDet.cxx.

References _d0ResMulti, PndFsmAbsDet::_detName, _mom0, _momResMulti, _parFile, _parFileName, _phiResMulti, _pidLhMulti, _tht0, _tht1, _thtResMulti, and _z0ResMulti.

Referenced by PndFsmCmpDet().

514  {
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  }
double _d0ResMulti
Definition: PndFsmCmpDet.h:76
std::map< int, TParameter< double > * > _mom0
Definition: PndFsmCmpDet.h:91
double _z0ResMulti
Definition: PndFsmCmpDet.h:77
TParameter< double > * _tht1
Definition: PndFsmCmpDet.h:93
TParameter< double > * _tht0
Definition: PndFsmCmpDet.h:92
double _thtResMulti
Definition: PndFsmCmpDet.h:78
double _phiResMulti
Definition: PndFsmCmpDet.h:79
TString _parFileName
Definition: PndFsmCmpDet.h:74
std::string _detName
Definition: PndFsmAbsDet.h:92
double _pidLhMulti
Definition: PndFsmCmpDet.h:84
double _momResMulti
Definition: PndFsmCmpDet.h:80
void PndFsmAbsDet::parseParameterList ( ArgList par)
protectedinherited

Definition at line 119 of file PndFsmAbsDet.cxx.

References CStrTok::GetFirst(), CStrTok::GetNext(), name, and PndFsmAbsDet::setParameter().

Referenced by PndFsmAbsDet::PndFsmAbsDet(), PndFsmCmpDet(), PndFsmCombiDet::PndFsmCombiDet(), PndFsmDetTemplate::PndFsmDetTemplate(), PndFsmDrcBarrel::PndFsmDrcBarrel(), PndFsmDrcDisc::PndFsmDrcDisc(), PndFsmEffTracker::PndFsmEffTracker(), PndFsmEmcBarrel::PndFsmEmcBarrel(), PndFsmEmcBwCap::PndFsmEmcBwCap(), PndFsmEmcFS::PndFsmEmcFS(), PndFsmEmcFwCap::PndFsmEmcFwCap(), PndFsmEmcPid::PndFsmEmcPid(), PndFsmIdealPid::PndFsmIdealPid(), PndFsmMdcFS::PndFsmMdcFS(), PndFsmMdcTS::PndFsmMdcTS(), PndFsmMdtPid::PndFsmMdtPid(), PndFsmMvd::PndFsmMvd(), PndFsmMvd2::PndFsmMvd2(), PndFsmMvdPid::PndFsmMvdPid(), PndFsmRich::PndFsmRich(), PndFsmSimpleTracker::PndFsmSimpleTracker(), PndFsmSimpleVtx::PndFsmSimpleVtx(), PndFsmStt::PndFsmStt(), PndFsmSttPid::PndFsmSttPid(), and PndFsmTof::PndFsmTof().

120 {
121  // ArgList is a std::list<std::string> of the form ("a=1","b=2","c=3","d=4")
122 
123  // Default values for the parameters
124 
125  CStrTok tokenizer;
126  char csrc[200];
127 
128  if (par.size() != 0) {
129 
130  //cout <<"Parameters for detector <"<<_detName<<">"<<endl;
131  for(ArgList::const_iterator argIt=par.begin(); argIt!=par.end();argIt++) {
132 
133  const char *src=argIt->data();
134  strcpy(csrc,src);
135 
136  char* token = tokenizer.GetFirst(csrc,"=");
137  string name(token);
138  //cout <<"variable: -" << name << "- ";
139  token = tokenizer.GetNext("=");
140 
141  double value = atof(token);
142  string strvalue(token);
143 
144  //cout <<"value: -"<<value<<"- "<<endl;
145 
146  if (value!=0 || strvalue=="0" || strvalue=="0.0" || strvalue=="0.")
147  {
148  if (!setParameter(name,value))
149  cout <<" -W- (PndFsmAbsDet::parseParameterList) Unknown Parameter: <"<<name<< endl;
150  }
151  else
152  {
153  if (!setParameter(name,strvalue))
154  cout <<" -W- (PndFsmAbsDet::parseParameterList) Unknown Parameter: <"<<name<< endl;
155  }
156 
157  }
158  }
159 
160  /*
161  if (par.size() != 0) {
162 
163  //cout <<"Parameters for detector <"<<_detName<<">"<<endl;
164  for(ArgList::const_iterator argIt=par.begin(); argIt!=par.end();argIt++) {
165  typedef boost::tokenizer<boost::char_separator<char> > tokenizer;
166  boost::char_separator<char> sep("=");
167  tokenizer tokens(*argIt, sep);
168  tokenizer::iterator tok_iter = tokens.begin();
169  string name(*tok_iter);
170  ++tok_iter;
171  double value=atof((*tok_iter).c_str());
172 
173  //cout <<"<"<<name<<"> = "<<value<<endl;
174 
175  string name("efficiency");
176  double value=0.99;
177  if (!setParameter(name,value))
178  cout <<" -W- Unknown Parameter: <"<<name<<"> in PndFsmAbsDet::parseParameterList" << endl;
179  }
180  }
181  */
182  //print(std::cout);
183 
184 }
Double_t par[3]
char * GetFirst(char *lpsz, const char *lpcszDelimiters)
Definition: StrTok.cxx:29
TString name
Definition: StrTok.h:11
virtual bool setParameter(std::string &name, double value)
char * GetNext(const char *lpcszDelimiters)
Definition: StrTok.cxx:37
void PndFsmAbsDet::print ( std::ostream o)
virtualinherited
void PndFsmCmpDet::readParameters ( )
private

Definition at line 414 of file PndFsmCmpDet.cxx.

References _d0, _d0Scale, _mom, _mom0, _momScale, _parFile, _parFileName, _phi, _phiScale, _tht, _tht0, _tht1, _thtScale, _z0, _z0Scale, f, for(), i, and if().

Referenced by PndFsmCmpDet().

414  {
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 }
std::map< int, TSpline3 * > _d0
Definition: PndFsmCmpDet.h:86
std::map< int, TF1 * > _d0Scale
Definition: PndFsmCmpDet.h:94
Int_t i
Definition: run_full.C:25
std::map< int, TParameter< double > * > _mom0
Definition: PndFsmCmpDet.h:91
std::map< int, TF1 * > _phiScale
Definition: PndFsmCmpDet.h:97
std::map< int, TF1 * > _z0Scale
Definition: PndFsmCmpDet.h:95
std::map< int, TSpline3 * > _phi
Definition: PndFsmCmpDet.h:89
TParameter< double > * _tht1
Definition: PndFsmCmpDet.h:93
std::map< int, TSpline3 * > _tht
Definition: PndFsmCmpDet.h:88
std::map< int, TF1 * > _thtScale
Definition: PndFsmCmpDet.h:96
for(int j=0;j< ncounts;j++)
std::map< int, TF1 * > _momScale
Definition: PndFsmCmpDet.h:98
TParameter< double > * _tht0
Definition: PndFsmCmpDet.h:92
std::map< int, TSpline3 * > _z0
Definition: PndFsmCmpDet.h:87
TFile * f
Definition: bump_analys.C:12
std::map< int, TSpline3 * > _mom
Definition: PndFsmCmpDet.h:90
TString _parFileName
Definition: PndFsmCmpDet.h:74
if(fWindowIsBox)
PndFsmResponse * PndFsmCmpDet::respond ( PndFsmTrack t)
virtual

Implements PndFsmAbsDet.

Definition at line 110 of file PndFsmCmpDet.cxx.

References _d0, _d0ResMulti, _d0Scale, _mom, _mom0, _momResMulti, _momScale, _parFile, _phi, _phiResMulti, _phiScale, _pidLhMulti, _tht, _tht0, _tht1, _thtResMulti, _thtScale, _z0, _z0ResMulti, _z0Scale, PndFsmTrack::charge(), dE, PndFsmResponse::dE(), PndFsmResponse::detected(), PndFsmResponse::dm(), PndFsmResponse::dp(), PndFsmResponse::dphi(), PndFsmResponse::DrcBarrelThtc(), PndFsmResponse::DrcBarrelThtcErr(), PndFsmResponse::DrcDiscThtc(), PndFsmResponse::DrcDiscThtcErr(), PndFsmResponse::dt(), dtheta, PndFsmResponse::dtheta(), PndFsmResponse::dV(), eval(), fabs(), fDetList, fSubtractDetList, PndFsmResponse::LHElectron(), PndFsmResponse::LHKaon(), PndFsmResponse::LHMuon(), PndFsmResponse::LHPion(), PndFsmResponse::LHProton(), PndFsmResponse::m2(), m2(), PndFsmResponse::m2Err(), PndFsmResponse::MvddEdx(), PndFsmResponse::MvddEdxErr(), p, PndFsmTrack::p4(), PndFsmTrack::pdt(), pid(), PndFsmResponse::RichThtc(), PndFsmResponse::RichThtcErr(), PndFsmResponse::setdE(), PndFsmResponse::setDetected(), PndFsmResponse::setDetector(), PndFsmResponse::setdm(), PndFsmResponse::setdp(), PndFsmResponse::setdphi(), PndFsmResponse::setDrcBarrelThtc(), PndFsmResponse::setDrcDiscThtc(), PndFsmResponse::setdt(), PndFsmResponse::setdtheta(), PndFsmResponse::setdV(), PndFsmResponse::setLHElectron(), PndFsmResponse::setLHKaon(), PndFsmResponse::setLHMuon(), PndFsmResponse::setLHPion(), PndFsmResponse::setLHProton(), PndFsmResponse::setm2(), PndFsmResponse::setMvddEdx(), PndFsmResponse::setRichThtc(), PndFsmResponse::setSttdEdx(), PndFsmResponse::setTpcdEdx(), sqrt(), PndFsmResponse::SttdEdx(), PndFsmResponse::SttdEdxErr(), theta, PndFsmResponse::TpcdEdx(), PndFsmResponse::TpcdEdxErr(), and val.

110  {
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 }
TVector3 dV()
Double_t p
Definition: anasim.C:58
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
void setLHProton(double val)
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
std::map< int, TF1 * > _z0Scale
Definition: PndFsmCmpDet.h:95
std::map< int, TSpline3 * > _phi
Definition: PndFsmCmpDet.h:89
int pid()
FsmAbsDetList fDetList
Definition: PndFsmCmpDet.h:70
TParameter< double > * _tht1
Definition: PndFsmCmpDet.h:93
double MvddEdx()
double charge()
Definition: PndFsmTrack.h:75
double RichThtcErr()
void setm2(double val, double err=0)
double RichThtc()
double DrcDiscThtcErr()
std::map< int, TSpline3 * > _tht
Definition: PndFsmCmpDet.h:88
Double_t dE
Definition: anasim.C:58
std::map< int, TF1 * > _thtScale
Definition: PndFsmCmpDet.h:96
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
double TpcdEdx()
void setDetector(PndFsmAbsDet *detector)
double SttdEdx()
TParameter< double > * _tht0
Definition: PndFsmCmpDet.h:92
void setDrcDiscThtc(double val, double err=0)
std::map< int, TSpline3 * > _z0
Definition: PndFsmCmpDet.h:87
double dtheta
Definition: anaLmdCluster.C:54
void setdp(double val)
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
double _thtResMulti
Definition: PndFsmCmpDet.h:78
double _phiResMulti
Definition: PndFsmCmpDet.h:79
void setdE(double val)
double DrcDiscThtc()
void setRichThtc(double val, double err=0)
double _pidLhMulti
Definition: PndFsmCmpDet.h:84
void setDetected(bool isdet)
double _momResMulti
Definition: PndFsmCmpDet.h:80
void setdtheta(double val)
void setSttdEdx(double val, double err=0)
void setdm(double val)
double TpcdEdxErr()
double DrcBarrelThtcErr()
void setMvddEdx(double val, double err=0)
double DrcBarrelThtc()
double eval(TSpline3 *spline, double theta)
void setLHPion(double val)
void PndFsmAbsDet::setName ( std::string &  name)
inlineinherited

Definition at line 75 of file PndFsmAbsDet.h.

References PndFsmAbsDet::_detName, and name.

Referenced by PndFsmDetFactory::create().

75 {_detName = name;};
TString name
std::string _detName
Definition: PndFsmAbsDet.h:92
bool PndFsmCmpDet::setParameter ( std::string &  name,
std::string &  value 
)
privatevirtual

Reimplemented from PndFsmAbsDet.

bool PndFsmCmpDet::setParameter ( std::string &  name,
double  value 
)
privatevirtual

Reimplemented from PndFsmAbsDet.

Definition at line 378 of file PndFsmCmpDet.cxx.

References _d0ResMulti, _momResMulti, _phiResMulti, _pidLhMulti, _tht0, _tht1, _thtResMulti, and _z0ResMulti.

378  {
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 }
double _d0ResMulti
Definition: PndFsmCmpDet.h:76
double _z0ResMulti
Definition: PndFsmCmpDet.h:77
TParameter< double > * _tht1
Definition: PndFsmCmpDet.h:93
TParameter< double > * _tht0
Definition: PndFsmCmpDet.h:92
TString name
double _thtResMulti
Definition: PndFsmCmpDet.h:78
double _phiResMulti
Definition: PndFsmCmpDet.h:79
double _pidLhMulti
Definition: PndFsmCmpDet.h:84
double _momResMulti
Definition: PndFsmCmpDet.h:80
void PndFsmAbsDet::setStorePid ( Bool_t  doespid = kTRUE)
inlineinherited

Definition at line 77 of file PndFsmAbsDet.h.

References PndFsmAbsDet::_doesPid.

Referenced by PndFsmDetFactory::create().

77 {_doesPid=doespid;};
Bool_t _doesPid
Definition: PndFsmAbsDet.h:96
bool PndFsmCmpDet::SubtractDetector ( std::string  name,
std::string  params = "" 
)

Definition at line 356 of file PndFsmCmpDet.cxx.

References PndFsmDetFactory::create(), fDetFact, and fSubtractDetList.

356  {
357  PndFsmAbsDet *det=fDetFact.create(name,params);
358  if (det)
359  fSubtractDetList.push_back(det);
360  return det;
361 }
FsmAbsDetList fSubtractDetList
Definition: PndFsmCmpDet.h:71
PndFsmAbsDet * create(std::string &name, ArgList &par)
TString name
PndFsmDetFactory fDetFact
Definition: PndFsmCmpDet.h:72

Member Data Documentation

std::map<int, TSpline3*> PndFsmCmpDet::_d0
private

Definition at line 86 of file PndFsmCmpDet.h.

Referenced by readParameters(), and respond().

double PndFsmCmpDet::_d0ResMulti
private

Definition at line 76 of file PndFsmCmpDet.h.

Referenced by initParameters(), respond(), and setParameter().

std::map<int, TF1*> PndFsmCmpDet::_d0Scale
private

Definition at line 94 of file PndFsmCmpDet.h.

Referenced by readParameters(), and respond().

std::string PndFsmAbsDet::_detName
protectedinherited
Bool_t PndFsmAbsDet::_doesPid
protectedinherited
double PndFsmAbsDet::_efficiency
protectedinherited

Definition at line 93 of file PndFsmAbsDet.h.

Referenced by PndFsmDetTemplate::detected(), PndFsmSimpleTracker::detected(), PndFsmMdcFS::detected(), PndFsmMdcTS::detected(), PndFsmTof::detected(), PndFsmSimpleVtx::detected(), PndFsmEmcFS::detected(), PndFsmMvd::detected(), PndFsmEmcBwCap::detected(), PndFsmStt::detected(), PndFsmMvd2::detected(), PndFsmEmcFwCap::detected(), PndFsmSttPid::detected(), PndFsmMvdPid::detected(), PndFsmRich::detected(), PndFsmEmcBarrel::detected(), PndFsmDrcDisc::detected(), PndFsmMdtPid::detected(), PndFsmDrcBarrel::detected(), PndFsmEmcPid::detected(), PndFsmEffTracker::detected(), PndFsmSimpleTracker::initParameters(), PndFsmSimpleVtx::initParameters(), PndFsmDetTemplate::initParameters(), PndFsmMvdPid::initParameters(), PndFsmTof::initParameters(), PndFsmMdtPid::initParameters(), PndFsmEmcPid::initParameters(), PndFsmEmcBwCap::initParameters(), PndFsmEmcFS::initParameters(), PndFsmMvd2::initParameters(), PndFsmEmcFwCap::initParameters(), PndFsmRich::initParameters(), PndFsmMdcFS::initParameters(), PndFsmSttPid::initParameters(), PndFsmMdcTS::initParameters(), PndFsmEmcBarrel::initParameters(), PndFsmDrcDisc::initParameters(), PndFsmDrcBarrel::initParameters(), PndFsmStt::initParameters(), PndFsmMvd::initParameters(), PndFsmEffTracker::initParameters(), PndFsmSimpleTracker::print(), PndFsmSimpleVtx::print(), PndFsmDetTemplate::print(), PndFsmMvdPid::print(), PndFsmTof::print(), PndFsmMdtPid::print(), PndFsmEmcPid::print(), PndFsmEmcFS::print(), PndFsmSttPid::print(), PndFsmMdcTS::print(), PndFsmEmcBwCap::print(), PndFsmMvd2::print(), PndFsmMdcFS::print(), PndFsmEmcFwCap::print(), PndFsmRich::print(), PndFsmDrcDisc::print(), PndFsmEmcBarrel::print(), PndFsmDrcBarrel::print(), PndFsmStt::print(), PndFsmMvd::print(), PndFsmEffTracker::print(), PndFsmSimpleTracker::setParameter(), PndFsmMvdPid::setParameter(), PndFsmDetTemplate::setParameter(), PndFsmSimpleVtx::setParameter(), PndFsmMdtPid::setParameter(), PndFsmTof::setParameter(), PndFsmEmcPid::setParameter(), PndFsmRich::setParameter(), PndFsmMdcFS::setParameter(), PndFsmEmcFS::setParameter(), PndFsmEmcBwCap::setParameter(), PndFsmMvd2::setParameter(), PndFsmMdcTS::setParameter(), PndFsmSttPid::setParameter(), PndFsmEmcFwCap::setParameter(), PndFsmEmcBarrel::setParameter(), PndFsmDrcDisc::setParameter(), PndFsmDrcBarrel::setParameter(), PndFsmStt::setParameter(), PndFsmMvd::setParameter(), and PndFsmEffTracker::setParameter().

TDatabasePDG* PndFsmAbsDet::_fdbPDG
protectedinherited
std::map<int, TSpline3*> PndFsmCmpDet::_mom
private

Definition at line 90 of file PndFsmCmpDet.h.

Referenced by readParameters(), and respond().

std::map<int, TParameter<double>*> PndFsmCmpDet::_mom0
private

Definition at line 91 of file PndFsmCmpDet.h.

Referenced by initParameters(), readParameters(), and respond().

double PndFsmCmpDet::_momResMulti
private

Definition at line 80 of file PndFsmCmpDet.h.

Referenced by initParameters(), respond(), and setParameter().

std::map<int, TF1*> PndFsmCmpDet::_momScale
private

Definition at line 98 of file PndFsmCmpDet.h.

Referenced by readParameters(), and respond().

bool PndFsmCmpDet::_parFile
private

Definition at line 75 of file PndFsmCmpDet.h.

Referenced by initParameters(), readParameters(), and respond().

TString PndFsmCmpDet::_parFileName
private

Definition at line 74 of file PndFsmCmpDet.h.

Referenced by initParameters(), PndFsmCmpDet(), and readParameters().

std::map<int, TSpline3*> PndFsmCmpDet::_phi
private

Definition at line 89 of file PndFsmCmpDet.h.

Referenced by readParameters(), and respond().

double PndFsmCmpDet::_phiResMulti
private

Definition at line 79 of file PndFsmCmpDet.h.

Referenced by initParameters(), respond(), and setParameter().

std::map<int, TF1*> PndFsmCmpDet::_phiScale
private

Definition at line 97 of file PndFsmCmpDet.h.

Referenced by readParameters(), and respond().

double PndFsmCmpDet::_pidLhMulti
private

Definition at line 84 of file PndFsmCmpDet.h.

Referenced by initParameters(), respond(), and setParameter().

TRandom3* PndFsmAbsDet::_rand
protectedinherited
std::map<int, TSpline3*> PndFsmCmpDet::_tht
private

Definition at line 88 of file PndFsmCmpDet.h.

Referenced by readParameters(), and respond().

TParameter<double>* PndFsmCmpDet::_tht0
private

Definition at line 92 of file PndFsmCmpDet.h.

Referenced by initParameters(), readParameters(), respond(), and setParameter().

TParameter<double>* PndFsmCmpDet::_tht1
private

Definition at line 93 of file PndFsmCmpDet.h.

Referenced by initParameters(), readParameters(), respond(), and setParameter().

double PndFsmCmpDet::_thtResMulti
private

Definition at line 78 of file PndFsmCmpDet.h.

Referenced by initParameters(), respond(), and setParameter().

std::map<int, TF1*> PndFsmCmpDet::_thtScale
private

Definition at line 96 of file PndFsmCmpDet.h.

Referenced by readParameters(), and respond().

std::map<int, TSpline3*> PndFsmCmpDet::_z0
private

Definition at line 87 of file PndFsmCmpDet.h.

Referenced by readParameters(), and respond().

double PndFsmCmpDet::_z0ResMulti
private

Definition at line 77 of file PndFsmCmpDet.h.

Referenced by initParameters(), respond(), and setParameter().

std::map<int, TF1*> PndFsmCmpDet::_z0Scale
private

Definition at line 95 of file PndFsmCmpDet.h.

Referenced by readParameters(), and respond().

PndFsmDetFactory PndFsmCmpDet::fDetFact
private

Definition at line 72 of file PndFsmCmpDet.h.

Referenced by AddDetector(), and SubtractDetector().

FsmAbsDetList PndFsmCmpDet::fDetList
private

Definition at line 70 of file PndFsmCmpDet.h.

Referenced by AddDetector(), and respond().

FsmAbsDetList PndFsmCmpDet::fSubtractDetList
private

Definition at line 71 of file PndFsmCmpDet.h.

Referenced by respond(), and SubtractDetector().


The documentation for this class was generated from the following files: