Something went wrong on our end
-
Matthias Steinke authoredbbabc64f
pbarpStates.cc 4.72 KiB
#include "PwaUtils/pbarpStates.hh"
#include "Utils/MathUtils.hh"
#include "ErrLogger/ErrLogger.hh"
pbarpStates::pbarpStates():
AbsStates(),
_jmax(10),
_pbarJPC(0.5, -1),
_pJPC(0.5, 1)
{
calcJPCs();
}
pbarpStates::pbarpStates(int jmax):
AbsStates(),
_jmax(jmax),
_pbarJPC(0.5, -1),
_pJPC(0.5, 1)
{
calcJPCs();
}
pbarpStates::~pbarpStates(){
}
bool pbarpStates::calcJPCs(){
for (int j=0; j<=_jmax; j++)
{
for (int p=-1; p<=1; p+=2){
vector<LS> motherLSs=GetValidLS(j, p, _pbarJPC.J,_pbarJPC.P, _pJPC.J, _pJPC.P);
int num_ls = (int) motherLSs.size();
DebugMsg << "valid LS combinations for JP(pbar p)=" << j <<" " << p << endmsg;
for(int ls = 0; ls < num_ls; ls++){
Spin L= motherLSs[ls].L;
Spin S= motherLSs[ls].S;
int cparity(pow(-1,int(L+S)));
DebugMsg << "L=" << L <<" S=" << S << " ==> C=" << cparity << endmsg;
boost::shared_ptr<const jpcRes> jpcPtr(new jpcRes(j,p,cparity));
std::vector<Spin> theMs;
for(Spin M = -S; M <= S; M++){
double Clebschg=Clebsch(L,0,S,M, j,M);
DebugMsg << "Clebsch(L,0,S,M=" << M << ", j,M=" << M << "): " << Clebschg << endmsg;
if (fabs(Clebschg)>1e-8) theMs.push_back(M);
}
if (theMs.size()>0){
fillVec(jpcPtr, _jpcStates);
boost::shared_ptr<const JPCLS> tmpJPCLS(new JPCLS(jpcPtr, L, S) );
_allJPCLS.push_back(tmpJPCLS);
std::vector<Spin>::const_iterator itM;
for ( itM=theMs.begin(); itM!=theMs.end(); ++itM){
boost::shared_ptr<const JPCSM> tmpJPCSM( new JPCSM(jpcPtr, S, (*itM) ));
_allJPCSM .push_back(tmpJPCSM);
double Clebschg1=Clebsch(L,0,S,(*itM), j, (*itM));
boost::shared_ptr<const JPCLSM> tmpJPCLSM(new JPCLSM(tmpJPCLS, (*itM), Clebschg1) );
_allStates.push_back(tmpJPCLSM);
if (S==0) fillVec(jpcPtr, _singletStates);
else if (S==1){
if ((*itM)==0) fillVec(jpcPtr, _tripletM0States);
else if ((*itM)==1) fillVec(jpcPtr, _tripletMp1States);
else if ((*itM)==-1) fillVec(jpcPtr, _tripletMm1States);
else {
Alert << "pbar p state with S=" << S << " and M="<< (*itM) <<" cannot exitst!!!"
<< cparity << endmsg;
exit(1);
}
}
else {
Alert << "pbar p state with S=" << S << " cannot exitst!!!" << cparity << endmsg;
exit(1);
}
}
}
}
}
DebugMsg << "\n" << endmsg;
}
return true;
}
void pbarpStates::fillVec(boost::shared_ptr<const jpcRes> currentRes,
std::vector< boost::shared_ptr<const jpcRes> >& theVec){
const jpcRes* jpcCurrent=currentRes.get();
if (0==jpcCurrent) {
Alert << "shared object containss 0 pointer!!!" << endmsg;
exit(1);
}
std::vector< boost::shared_ptr<const jpcRes> >::const_iterator it;
bool found=false;
for (it=theVec.begin(); it!=theVec.end(); ++it){
const jpcRes* jpcIt=(*it).get();
if (0==jpcIt) {
Alert << "shared object containss 0 pointer!!!" << endmsg;
exit(1);
}
if ( (*jpcIt) == (*jpcCurrent) ){
found=true;
continue;
}
}
if (!found) theVec.push_back(currentRes);
}
std::vector< boost::shared_ptr<const jpcRes> > pbarpStates::extractSingletStates(std::vector< boost::shared_ptr<const jpcRes> >& theJPCStates) const{
return extractJPCStates(theJPCStates,_singletStates);
}
std::vector< boost::shared_ptr<const jpcRes> > pbarpStates::extractTripletM0States(std::vector< boost::shared_ptr<const jpcRes> >& theJPCStates) const{
return extractJPCStates(theJPCStates, _tripletM0States);
}
std::vector< boost::shared_ptr<const jpcRes> > pbarpStates::extractTripletM1States(std::vector< boost::shared_ptr<const jpcRes> >& theJPCStates) const{
return extractJPCStates(theJPCStates, _tripletMp1States);
}
std::vector< boost::shared_ptr<const jpcRes> > pbarpStates::extractJPCStates(std::vector< boost::shared_ptr<const jpcRes> > theJPCRequests, std::vector< boost::shared_ptr<const jpcRes> > jpcStatesAll) const{
std::vector< boost::shared_ptr<const jpcRes> > result;
std::vector< boost::shared_ptr<const jpcRes> >::const_iterator itJPC;
std::vector< boost::shared_ptr<const jpcRes> >::const_iterator itAllStates;
for ( itJPC=theJPCRequests.begin(); itJPC!=theJPCRequests.end(); ++itJPC){
const jpcRes* jpcRequest=(*itJPC).get();
for ( itAllStates=jpcStatesAll.begin(); itAllStates!=jpcStatesAll.end(); ++itAllStates){
const jpcRes* jpcCurrent=(*itAllStates).get();
if (( *jpcCurrent) == (*jpcRequest)){
result.push_back(*itAllStates);
continue;
}
}
}
return result;
}
void pbarpStates::print(std::ostream& os) const{
os << "initital states of the pbar p annihilation for Jmax = " << _jmax << " are: " << std::endl;
AbsStates::print(os);
}