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

#include <PndFsmSttPid.h>

Inheritance diagram for PndFsmSttPid:
PndFsmAbsDet

Public Member Functions

 PndFsmSttPid ()
 
 PndFsmSttPid (ArgList &par)
 
virtual ~PndFsmSttPid ()
 
virtual PndFsmResponserespond (PndFsmTrack *t)
 
const std::string & detName ()
 
void setName (std::string &name)
 
Bool_t doesPid () const
 
void setStorePid (Bool_t doespid=kTRUE)
 

Protected Member Functions

virtual bool setParameter (std::string &name, std::string &value)
 
void parseParameterList (ArgList &par)
 

Protected Attributes

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

Private Member Functions

bool detected (PndFsmTrack *t) const
 
double compdEdx (double p, double M)
 
double gauss (double x, double x0, double s)
 
void initParameters ()
 
void print (std::ostream &o)
 
bool setParameter (std::string &name, double value)
 

Private Attributes

double _thtMin
 
double _thtMax
 
double _ptmin
 
double _dEdxRes
 

Detailed Description

Definition at line 41 of file PndFsmSttPid.h.

Constructor & Destructor Documentation

PndFsmSttPid::PndFsmSttPid ( )

Default ctor.

Definition at line 57 of file PndFsmSttPid.cxx.

References _thtMax, _thtMin, and initParameters().

58 {
60 
61  _thtMin=_thtMin*M_PI/180.0;
62  _thtMax=_thtMax*M_PI/180.0;
63  //print(std::cout);
64 }
double _thtMin
Definition: PndFsmSttPid.h:76
double _thtMax
Definition: PndFsmSttPid.h:77
void initParameters()
PndFsmSttPid::PndFsmSttPid ( ArgList par)

Definition at line 66 of file PndFsmSttPid.cxx.

References _thtMax, _thtMin, initParameters(), and PndFsmAbsDet::parseParameterList().

67 {
69  //set default parameter values and parses a parameter list
70  //i.e. std::list<std::string> of the form
71  //"a=1" "b=2" "c=3"
73 
74  _thtMin=_thtMin*M_PI/180.0;
75  _thtMax=_thtMax*M_PI/180.0;
76  //print(std::cout);
77 }
double _thtMin
Definition: PndFsmSttPid.h:76
double _thtMax
Definition: PndFsmSttPid.h:77
Double_t par[3]
void parseParameterList(ArgList &par)
void initParameters()
PndFsmSttPid::~PndFsmSttPid ( )
virtual

Destructor

Definition at line 83 of file PndFsmSttPid.cxx.

84 {
85 }

Member Function Documentation

double PndFsmSttPid::compdEdx ( double  p,
double  M 
)
private

Definition at line 149 of file PndFsmSttPid.cxx.

References a, C(), dEdX, log(), me, sqrt(), X, Z, and z.

Referenced by respond().

150 {
151  double dEdX;
152 
153  p*=1000;
154  M*=1000;
155 
156  const double Z=10;
157  const double A=20;
158  const double z=1;//charge of incident particle in unit of e
159 
160  double beta;
161  beta=p/sqrt(M*M+p*p);//CalculateBeta(KE,M);
162 
163  double gamma;
164  gamma=1./sqrt(1-beta*beta);
165 
166  const double I=10e-6*Z;//0.000188;//MeV
167  const double me=0.511;//Mev/c2
168 
169  double Wmax;
170  Wmax=(2*me*beta*beta*gamma*gamma) / (1 + 2*gamma*me/M + (me/M)*(me/M));
171 
172  //const double C1=0.1535;//MeV cm2/g
173 
174  double X,X0,X1;
175  double kappa=0.307075;
176  X0=0.201;
177  X1=3;
178  X=log10(beta*gamma);
179  double delta;
180  double C,a;
181  C=-5.217;
182  a=0.196;
183 
184  if(X<=X0)
185  delta=0;
186  else if(X<=X1)
187  delta=2*log(10.)*X+C+a*(X1-X)*(X1-X)*(X1-X);
188  else
189  delta=2*log(10.)*X+C;
190 
191  dEdX= ( kappa * (Z/A) * z*z /(beta*beta)) * (log(2*me*beta*beta*gamma*gamma*Wmax / (I*I)) - 2*beta*beta - delta); //-Dshell??
192 
193  return dEdX;
194 }
Double_t p
Definition: anasim.C:58
static const double me
Definition: mzparameters.h:12
friend F32vec4 sqrt(const F32vec4 &a)
Definition: P4_F32vec4.h:29
friend F32vec4 log(const F32vec4 &a)
Definition: P4_F32vec4.h:110
Double_t dEdX
Definition: anasim.C:58
int Pic_FED Eff_lEE C()
Int_t a
Definition: anaLmdDigi.C:126
Double_t z
double X
Definition: anaLmdDigi.C:68
double Z
Definition: anaLmdDigi.C:68
bool PndFsmSttPid::detected ( PndFsmTrack t) const
private

Definition at line 197 of file PndFsmSttPid.cxx.

References PndFsmAbsDet::_efficiency, _ptmin, PndFsmAbsDet::_rand, _thtMin, PndFsmTrack::charge(), PndFsmTrack::p4(), and theta.

Referenced by respond().

198 {
199  double theta = t->p4().Theta();
200  double p_t=t->p4().Vect().Perp(TVector3(0.,0.,1.));
201  double charge=t->charge();
202 
203  return ( charge!=0.0 && theta>=_thtMin && theta<=_thtMax && p_t>_ptmin && _rand->Rndm()<=_efficiency);
204 }
double _thtMin
Definition: PndFsmSttPid.h:76
double _efficiency
Definition: PndFsmAbsDet.h:93
double _ptmin
Definition: PndFsmSttPid.h:78
double charge()
Definition: PndFsmTrack.h:75
TRandom3 * _rand
Definition: PndFsmAbsDet.h:94
TLorentzVector p4()
Definition: PndFsmTrack.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 PndFsmSttPid::gauss ( double  x,
double  x0,
double  s 
)
private

Definition at line 142 of file PndFsmSttPid.cxx.

References exp(), and sqrt().

Referenced by respond().

143 {
144  return (1.0/(sqrt(2.0*M_PI)*s))*
145  exp(-(x-x0)*(x-x0)/(2.0*s*s));
146 }
Double_t x0
Definition: checkhelixhit.C:70
friend F32vec4 exp(const F32vec4 &a)
Definition: P4_F32vec4.h:109
friend F32vec4 sqrt(const F32vec4 &a)
Definition: P4_F32vec4.h:29
TLorentzVector s
Definition: Pnd2DStar.C:50
Double_t x
void PndFsmSttPid::initParameters ( )
privatevirtual

Reimplemented from PndFsmAbsDet.

Definition at line 218 of file PndFsmSttPid.cxx.

References _dEdxRes, PndFsmAbsDet::_detName, PndFsmAbsDet::_efficiency, _ptmin, _thtMax, and _thtMin.

Referenced by PndFsmSttPid().

219 {
220  _detName = "SttPid";
221  _thtMin = 7.765;
222  _thtMax = 159.44;
223  _ptmin = 0.15;
224  _dEdxRes = 0.2; // 20% dEdx resolution
225  _efficiency = 1.0;
226 
227 }
double _thtMin
Definition: PndFsmSttPid.h:76
double _efficiency
Definition: PndFsmAbsDet.h:93
double _thtMax
Definition: PndFsmSttPid.h:77
double _ptmin
Definition: PndFsmSttPid.h:78
double _dEdxRes
Definition: PndFsmSttPid.h:79
std::string _detName
Definition: PndFsmAbsDet.h:92
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::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(), 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 PndFsmSttPid::print ( std::ostream o)
privatevirtual

Reimplemented from PndFsmAbsDet.

Definition at line 207 of file PndFsmSttPid.cxx.

References _dEdxRes, PndFsmAbsDet::_efficiency, _ptmin, _thtMax, _thtMin, and PndFsmAbsDet::detName().

208 {
209  o <<"Parameters for detector <"<<detName()<<">"<<endl;
210  o <<" _thtMin = "<<_thtMin<<endl;
211  o <<" _thtMax = "<<_thtMax<<endl;
212  o <<" _ptmin = "<<_ptmin<<endl;
213  o <<" _dEdxRes = "<<_dEdxRes << " (rel)"<< endl;
214  o <<" _efficiency = "<<_efficiency<<endl;
215 }
double _thtMin
Definition: PndFsmSttPid.h:76
double _efficiency
Definition: PndFsmAbsDet.h:93
double _thtMax
Definition: PndFsmSttPid.h:77
double _ptmin
Definition: PndFsmSttPid.h:78
const std::string & detName()
Definition: PndFsmAbsDet.h:74
double _dEdxRes
Definition: PndFsmSttPid.h:79
PndFsmResponse * PndFsmSttPid::respond ( PndFsmTrack t)
virtual

Accessors to contained information

Implements PndFsmAbsDet.

Definition at line 92 of file PndFsmSttPid.cxx.

References _dEdxRes, PndFsmAbsDet::_fdbPDG, PndFsmAbsDet::_rand, PndFsmTrack::charge(), compdEdx(), detected(), fabs(), gauss(), p, PndFsmTrack::p4(), PndFsmTrack::pdt(), PndFsmResponse::setDetected(), PndFsmResponse::setDetector(), PndFsmResponse::setLHElectron(), PndFsmResponse::setLHKaon(), PndFsmResponse::setLHMuon(), PndFsmResponse::setLHPion(), PndFsmResponse::setLHProton(), and PndFsmResponse::setSttdEdx().

93 {
94  PndFsmResponse *result=new PndFsmResponse();
95 
96  result->setDetector(this);
97  bool wasDetected=detected(t);
98  result->setDetected(wasDetected);
99 
100  if (wasDetected && fabs(t->charge())>1e-8)
101  {
102  // now the dEdx information
103  TParticlePDG* part = _fdbPDG->GetParticle(t->pdt());
104  double mass = (part) ? part->Mass() : t->p4().M();
105  double p=t->p4().Vect().Mag();
106 
107  // overall resolution for the dEdx measurement
108  double dEdx = compdEdx(p,mass);
109  double sig = _dEdxRes*dEdx;
110 
111  double m_e = _fdbPDG->GetParticle(11)->Mass();
112  double m_mu = _fdbPDG->GetParticle(13)->Mass();
113  double m_pi = _fdbPDG->GetParticle(211)->Mass();
114  double m_K = _fdbPDG->GetParticle(321)->Mass();
115  double m_p = _fdbPDG->GetParticle(2212)->Mass();
116 
117  // compute the expected dEdx values for all particle types
118  // we need these to determine the pdf's (gaussian around nominal dEdx with res sig)
119 
120  double dEdx_e = compdEdx(p,m_e);
121  double dEdx_mu = compdEdx(p,m_mu);
122  double dEdx_pi = compdEdx(p,m_pi);
123  double dEdx_K = compdEdx(p,m_K);
124  double dEdx_p = compdEdx(p,m_p);
125 
126  double measdEdx = _rand->Gaus(dEdx,sig);
127 
128  result ->setSttdEdx(measdEdx,sig);
129 
130  if (dEdx_e) result->setLHElectron( gauss(measdEdx,dEdx_e,sig) );
131  if (dEdx_mu) result->setLHMuon( gauss(measdEdx,dEdx_mu,sig) );
132  if (dEdx_pi) result->setLHPion( gauss(measdEdx,dEdx_pi,sig) );
133  if (dEdx_K) result->setLHKaon( gauss(measdEdx,dEdx_K,sig) );
134  if (dEdx_p) result->setLHProton(gauss(measdEdx,dEdx_p,sig) );
135  }
136 
137 
138  return result;
139 }
double compdEdx(double p, double M)
Double_t p
Definition: anasim.C:58
void setLHElectron(double val)
TDatabasePDG * _fdbPDG
Definition: PndFsmAbsDet.h:95
void setLHProton(double val)
bool detected(PndFsmTrack *t) const
void setLHMuon(double val)
double charge()
Definition: PndFsmTrack.h:75
TRandom3 * _rand
Definition: PndFsmAbsDet.h:94
TLorentzVector p4()
Definition: PndFsmTrack.h:72
void setDetector(PndFsmAbsDet *detector)
double _dEdxRes
Definition: PndFsmSttPid.h:79
void setLHKaon(double val)
friend F32vec4 fabs(const F32vec4 &a)
Definition: P4_F32vec4.h:47
double gauss(double x, double x0, double s)
void setDetected(bool isdet)
void setSttdEdx(double val, double err=0)
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 PndFsmSttPid::setParameter ( std::string &  name,
double  value 
)
privatevirtual

Reimplemented from PndFsmAbsDet.

Definition at line 230 of file PndFsmSttPid.cxx.

References _dEdxRes, PndFsmAbsDet::_efficiency, _ptmin, _thtMax, and _thtMin.

231 {
232  // *****************
233  // include here all parameters which should be settable via tcl
234  // *****************
235 
236  bool knownName=true;
237 
238  if (name == "thtMin")
239  _thtMin=value;
240  else
241  if (name == "thtMax")
242  _thtMax=value;
243  else
244  if (name == "ptmin")
245  _ptmin=value;
246  else
247  if (name == "dEdxRes")
248  _dEdxRes=value;
249  else
250  if (name == "efficiency")
251  _efficiency=value;
252  else
253  knownName=false;
254 
255  return knownName;
256 }
double _thtMin
Definition: PndFsmSttPid.h:76
double _efficiency
Definition: PndFsmAbsDet.h:93
double _thtMax
Definition: PndFsmSttPid.h:77
double _ptmin
Definition: PndFsmSttPid.h:78
double _dEdxRes
Definition: PndFsmSttPid.h:79
TString name
bool PndFsmAbsDet::setParameter ( std::string &  name,
std::string &  value 
)
protectedvirtualinherited

Reimplemented in PndFsmDrcBarrel, PndFsmDrcDisc, PndFsmCombiDet, and PndFsmCmpDet.

Definition at line 99 of file PndFsmAbsDet.cxx.

100 {
101  return false;
102 }
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

Member Data Documentation

double PndFsmSttPid::_dEdxRes
private

Definition at line 79 of file PndFsmSttPid.h.

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

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(), 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(), PndFsmMvd2::initParameters(), PndFsmEmcFwCap::initParameters(), PndFsmRich::initParameters(), PndFsmMdcFS::initParameters(), initParameters(), PndFsmMdcTS::initParameters(), PndFsmEmcBwCap::initParameters(), PndFsmEmcFS::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(), PndFsmMdcFS::print(), PndFsmEmcFS::print(), PndFsmMdcTS::print(), PndFsmEmcBwCap::print(), PndFsmMvd2::print(), 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(), PndFsmEmcFS::setParameter(), PndFsmEmcBwCap::setParameter(), PndFsmMdcTS::setParameter(), PndFsmMvd2::setParameter(), setParameter(), PndFsmEmcFwCap::setParameter(), PndFsmMdcFS::setParameter(), PndFsmRich::setParameter(), PndFsmEmcBarrel::setParameter(), PndFsmDrcDisc::setParameter(), PndFsmDrcBarrel::setParameter(), PndFsmStt::setParameter(), PndFsmMvd::setParameter(), and PndFsmEffTracker::setParameter().

TDatabasePDG* PndFsmAbsDet::_fdbPDG
protectedinherited
double PndFsmSttPid::_ptmin
private

Definition at line 78 of file PndFsmSttPid.h.

Referenced by detected(), initParameters(), print(), and setParameter().

TRandom3* PndFsmAbsDet::_rand
protectedinherited
double PndFsmSttPid::_thtMax
private

Definition at line 77 of file PndFsmSttPid.h.

Referenced by initParameters(), PndFsmSttPid(), print(), and setParameter().

double PndFsmSttPid::_thtMin
private

Definition at line 76 of file PndFsmSttPid.h.

Referenced by detected(), initParameters(), PndFsmSttPid(), print(), and setParameter().


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