33 : _C(ch._C),_ps(ch._ps){
42 double m0,
double gamma,
43 const map<string,pwachannel >& channels)
44 : _name(name), _m0(m0), _m02(m0*m0),_m0min(0),_m0max(5000),_gamma(gamma),_gammamin(0),_gammamax(1000),_fixm(false),_fixgamma(false), _constWidth(false),_channels(channels)
47 map<string,pwachannel >::iterator it=
_channels.begin();
61 map<string,pwachannel >::iterator it=_channels.begin();
62 unsigned int counter=0;
63 while(it!=_channels.end()){
64 it->second.setCoupling(complex<double>(par[counter],par[counter+1]));
71 map<string,pwachannel >::iterator it=_channels.begin();
72 unsigned int counter=0;
73 while(it!=_channels.end()){
74 par[counter]=it->second.C().real();
75 par[counter+1]=it->second.C().imag();
87 std::map<std::string,pwachannel >::const_iterator it=_channels.begin();
88 double n=(double)numChannels();
93 while(it!=_channels.end()){
95 if(it->second.ps()!=NULL){
96 double ps0=it->second.ps(_m0);
97 myps=(it->second.ps(m))/ps0;
108 return _gamma*_m0/complex<double>(_m02-m*m,-gamma*_m0);
117 return a * a + b * b + c * c - 2.0 * (a * b + b * c + c *
a);
126 double lam =
lambda(M * M, m1 * m1, m2 * m2);
129 return complex<double>(0.0, 0.0);
130 return complex<double>(sqrt(lam / (4 * M * M)), 0.0 );
138 if(m<_m1+_m2)
return complex<double>(1,0);
141 return exp(-_gamma*p.real()*p.real());
148 for(
unsigned int i=0;
i<
n();++
i){
149 const map<string,pwachannel >& channellist=_comp[
i]->channels();
150 map<string,pwachannel >::const_iterator it=channellist.begin();
151 while(it!=channellist.end()){
152 if(find(wl.begin(),wl.end(),it->first)==wl.end())
153 wl.push_back(it->first);
165 unsigned int nparPS=_phasespace->GetNpar();
169 for(
unsigned int i=0;
i<nparPS;++
i){
171 _phasespace->GetParLimits(
i,min,max);
173 _freePSpar.push_back(
i);
174 cout <<
"PS parameter "<<
i <<
" floating in ["
175 << min <<
"," << max <<
"]" << endl;
178 _numpar+=_freePSpar.size();
185 vector<string> wlist=wavelist();
186 for(
unsigned int i=0;
i<wlist.size();++
i){
188 _compChannel.push_back(getCompChannel(wlist[
i]));
196 if(i<_freePSpar.size())
197 return _phasespace->GetParameter(_freePSpar[i]);
204 if(i<_freePSpar.size()){
205 _phasespace->GetParLimits(_freePSpar[i],lower,upper);
211 unsigned int parcount=0;
213 for(
unsigned int i=0;
i<
n();++
i){
214 _comp[
i]->setPar(par[parcount],par[parcount+1]);
216 _comp[
i]->setCouplings(&par[parcount]);
217 parcount+=_comp[
i]->numChannels()*2;
220 unsigned int nfreepar=_freePSpar.size();
221 for(
unsigned int ipar=0;ipar<nfreepar;++ipar){
222 _phasespace->SetParameter(_freePSpar[ipar],par[parcount]);
230 unsigned int parcount=0;
232 for(
unsigned int i=0;
i<
n();++
i){
233 par[parcount]=_comp[
i]->m0();
234 par[parcount+1]=_comp[
i]->gamma();
236 _comp[
i]->getCouplings(&par[parcount]);
237 parcount+=_comp[
i]->numChannels()*2;
240 unsigned int nfreepar=_freePSpar.size();
241 for(
unsigned int ipar=0;ipar<nfreepar;++ipar){
242 par[parcount]=_phasespace->GetParameter(_freePSpar[ipar]);
253 complex<double>
rho(0,0);
254 for(
unsigned int ic=0;
ic<
n();++
ic){
255 if(_comp[
ic]->channels().count(wave)==0)
continue;
257 rho+=_comp[
ic]->val(m)*_comp[
ic]->channels().find(wave)->second.C()*sqrt(_comp[
ic]->channels().find(wave)->second.ps(m));
261 return norm(rho)*_phasespace->Eval(m);
267 complex<double>
rho(0,0);
268 for(
unsigned int ic=0;
ic<
n();++
ic){
269 if(_comp[
ic]->channels().count(wave)==0)
continue;
271 rho+=_comp[
ic]->val(m)*_comp[
ic]->channels().find(wave)->second.C();
281 const std::string& wave2,
283 return arg(overlap(wave1,wave2,m));
288 const std::string& wave2,
291 complex<double> rho1(0,0);
292 complex<double> rho2(0,0);
294 for(
unsigned int ic=0;
ic<
n();++
ic){
295 if(_comp[
ic]->channels().count(wave1)!=0){
296 rho1+=_comp[
ic]->val(m)*_comp[
ic]->channels().find(wave1)->second.C()*sqrt(_comp[
ic]->channels().find(wave1)->second.ps(m));
298 if(_comp[
ic]->channels().count(wave2)!=0){
299 rho2+=_comp[
ic]->val(m)*_comp[
ic]->channels().find(wave2)->second.C()*sqrt(_comp[
ic]->channels().find(wave2)->second.ps(m));
302 return rho1*
conj(rho2)*_phasespace->Eval(m);
310 complex<double> rho1(0,0);
311 complex<double> rho2(0,0);
314 vector<pair<unsigned int, unsigned int> > cc1=_compChannel[wave1];
315 vector<pair<unsigned int, unsigned int> > cc2=_compChannel[wave2];
316 unsigned int nc1=cc1.size();
317 unsigned int nc2=cc2.size();
319 for(
unsigned int ic1=0;ic1<nc1;++ic1){
320 unsigned int icomp=cc1[ic1].first;
321 unsigned int ichan=cc1[ic1].second;
322 rho1+=_comp[icomp]->val(m)*_comp[icomp]->getChannel(ichan).CsqrtPS(m);
324 for(
unsigned int ic2=0;ic2<nc2;++ic2){
325 unsigned int icomp=cc2[ic2].first;
326 unsigned int ichan=cc2[ic2].second;
327 rho2+=_comp[icomp]->val(m)*_comp[icomp]->getChannel(ichan).CsqrtPS(m);
329 return rho1*
conj(rho2)*_phasespace->Eval(m);
333 std::vector<std::pair<unsigned int,unsigned int> >
335 cerr <<
"Channel-mapping for wave " << wave << endl;
336 std::vector<std::pair<unsigned int,unsigned int> > result;
337 for(
unsigned int ic=0;
ic<
n();++
ic){
339 unsigned int nch=_comp[
ic]->numChannels();
340 for(
unsigned int ich=0;ich<nch;++ich){
341 if(_comp[
ic]->getChannelName(ich)==wave){
342 result.push_back(pair<unsigned int,unsigned int>(
ic,ich));
343 cerr <<
" comp("<<
ic<<
"): " << _comp[
ic]->name() <<
" ch:"<<ich<<endl;
351 o << c.
name() << endl
352 <<
"Mass= " << c.
m0() <<
" Width="<< c.
gamma() <<
" ConstWidth="<< c. constWidth() << endl
353 <<
"Decay modes: " << endl;
354 std::map<std::string,pwachannel >::const_iterator it=c.
channels().begin();
356 o << it->first <<
" C=" << it->second.C() << endl;
369 for(
unsigned int i=0;
i<cs.
n();++
i){