Skip to content
Snippets Groups Projects
Commit d7653589 authored by Bertram Kopf's avatar Bertram Kopf
Browse files

added protected method in LSDecAmps

parent c3bf881a
No related branches found
No related tags found
No related merge requests found
...@@ -71,28 +71,7 @@ complex<double> LSDecAmps::XdecPartAmp(Spin lamX, Spin lamDec, short fixDaughter ...@@ -71,28 +71,7 @@ complex<double> LSDecAmps::XdecPartAmp(Spin lamX, Spin lamDec, short fixDaughter
lam2Max=lamFs; lam2Max=lamFs;
} }
complex<double> result(0.,0.); complex<double> result=lsLoop(lamX, theData, lam1Min, lam1Max, lam2Min, lam2Max, false);
std::vector< boost::shared_ptr<const JPCLS> >::iterator it;
for (it=_JPCLSs.begin(); it!=_JPCLSs.end(); ++it){
if( fabs(lamX) > (*it)->J ) continue;
double theMag=_currentParamMags[*it];
double thePhi=_currentParamPhis[*it];
complex<double> expi(cos(thePhi), sin(thePhi));
for(Spin lambda1=lam1Min; lambda1<=lam1Max; lambda1++){
for(Spin lambda2=lam2Min; lambda2<=lam2Max; lambda2++){
Spin lambda = lambda1-lambda2;
if( fabs(lambda)>(*it)->J || fabs(lambda)>(*it)->S) continue;
complex<double> amp = theMag*expi*sqrt(2.*(*it)->L+1)
*Clebsch((*it)->L, 0, (*it)->S, lambda, (*it)->J, lambda)
*Clebsch(_Jdaughter1, lambda1, _Jdaughter2, -lambda2, (*it)->S, lambda )
*conj( theData->WignerDsString[_wignerDKey][(*it)->J][lamX][lambda]);
result+=amp;
}
}
}
return result; return result;
} }
...@@ -126,6 +105,27 @@ complex<double> LSDecAmps::XdecAmp(Spin lamX, EvtData* theData, Spin lamFs){ ...@@ -126,6 +105,27 @@ complex<double> LSDecAmps::XdecAmp(Spin lamX, EvtData* theData, Spin lamFs){
lam2Max=lamFs; lam2Max=lamFs;
} }
result=lsLoop(lamX, theData, lam1Min, lam1Max, lam2Min, lam2Max, true, lamFs );
result*=_absDyn->eval(theData);
if ( _cacheAmps){
#ifdef _OPENMP
#pragma omp critical
{
#endif
_cachedAmpMap[evtNo][lamX][lamFs]=result;
#ifdef _OPENMP
}
#endif
}
return result;
}
complex<double> LSDecAmps::lsLoop(Spin lamX, EvtData* theData, Spin lam1Min, Spin lam1Max, Spin lam2Min, Spin lam2Max, bool withDecs, Spin lamFs ){
complex<double> result(0.,0.);
std::vector< boost::shared_ptr<const JPCLS> >::iterator it; std::vector< boost::shared_ptr<const JPCLS> >::iterator it;
for (it=_JPCLSs.begin(); it!=_JPCLSs.end(); ++it){ for (it=_JPCLSs.begin(); it!=_JPCLSs.end(); ++it){
// if( fabs(lamX) > (*it)->J ) continue; // if( fabs(lamX) > (*it)->J ) continue;
...@@ -137,35 +137,16 @@ complex<double> LSDecAmps::XdecAmp(Spin lamX, EvtData* theData, Spin lamFs){ ...@@ -137,35 +137,16 @@ complex<double> LSDecAmps::XdecAmp(Spin lamX, EvtData* theData, Spin lamFs){
for(Spin lambda2=lam2Min; lambda2<=lam2Max; ++lambda2){ for(Spin lambda2=lam2Min; lambda2<=lam2Max; ++lambda2){
Spin lambda = lambda1-lambda2; Spin lambda = lambda1-lambda2;
if( fabs(lambda)>(*it)->J || fabs(lambda)>(*it)->S) continue; if( fabs(lambda)>(*it)->J || fabs(lambda)>(*it)->S) continue;
// complex<double> amp = theMag*expi*sqrt(2*(*it)->L+1)
// *Clebsch((*it)->L, 0, (*it)->S, lambda, (*it)->J, lambda)
// *Clebsch(_Jdaughter1, lambda1, _Jdaughter2, -lambda2, (*it)->S, lambda )
// *conj( theData->WignerDsString[_wignerDKey][(*it)->J][lamX][lambda]);
complex<double> amp = theMag*expi*_cgPreFactor[*it][lambda1][lambda2]*conj( theData->WignerDsString[_wignerDKey][(*it)->J][lamX][lambda]); complex<double> amp = theMag*expi*_cgPreFactor[*it][lambda1][lambda2]*conj( theData->WignerDsString[_wignerDKey][(*it)->J][lamX][lambda]);
amp *=daughterAmp(lambda1, lambda2, theData, lamFs); if(withDecs) amp *=daughterAmp(lambda1, lambda2, theData, lamFs);
result+=amp; result+=amp;
} }
} }
} }
result*=_absDyn->eval(theData);
if ( _cacheAmps){
#ifdef _OPENMP
#pragma omp critical
{
#endif
_cachedAmpMap[evtNo][lamX][lamFs]=result;
#ifdef _OPENMP
}
#endif
}
return result; return result;
} }
void LSDecAmps::getDefaultParams(fitParams& fitVal, fitParams& fitErr){ void LSDecAmps::getDefaultParams(fitParams& fitVal, fitParams& fitErr){
...@@ -258,7 +239,7 @@ void LSDecAmps::fillCgPreFactor(){ ...@@ -258,7 +239,7 @@ void LSDecAmps::fillCgPreFactor(){
Spin lambda = lambda1-lambda2; Spin lambda = lambda1-lambda2;
if( fabs(lambda)>(*it)->J || fabs(lambda)>(*it)->S) continue; if( fabs(lambda)>(*it)->J || fabs(lambda)>(*it)->S) continue;
_cgPreFactor[*it][lambda1][lambda2]=sqrt(2*(*it)->L+1) _cgPreFactor[*it][lambda1][lambda2]=sqrt(2.*(*it)->L+1)
*Clebsch((*it)->L, 0, (*it)->S, lambda, (*it)->J, lambda) *Clebsch((*it)->L, 0, (*it)->S, lambda, (*it)->J, lambda)
*Clebsch(_Jdaughter1, lambda1, _Jdaughter2, -lambda2, (*it)->S, lambda ); *Clebsch(_Jdaughter1, lambda1, _Jdaughter2, -lambda2, (*it)->S, lambda );
} }
......
...@@ -50,7 +50,7 @@ protected: ...@@ -50,7 +50,7 @@ protected:
std::map< boost::shared_ptr<const JPCLS>, map<Spin,map<Spin, double > > > _cgPreFactor; std::map< boost::shared_ptr<const JPCLS>, map<Spin,map<Spin, double > > > _cgPreFactor;
void fillCgPreFactor(); void fillCgPreFactor();
virtual complex<double> lsLoop(Spin lamX, EvtData* theData, Spin lam1Min, Spin lam1Max, Spin lam2Min, Spin lam2Max, bool withDecs, Spin lamFs=0 );
private: private:
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment