Newer
Older
// DataUtils class definition file. -*- C++ -*-
// Copyright 2012 Bertram Kopf
#include "PwaUtils/DataUtils.hh"
#include "ErrLogger/ErrLogger.hh"
#include "Utils/PawianCollectionUtils.hh"
#include "PwaUtils/FitParamsBase.hh"
#include "ErrLogger/ErrLogger.hh"
#include "Particle/Particle.hh"
#include <boost/archive/text_oarchive.hpp>
#include <boost/archive/text_iarchive.hpp>
#include "Minuit2/MnUserCovariance.h"
void validJPCLS(boost::shared_ptr<const jpcRes> motherRes, boost::shared_ptr<const jpcRes> daughterRes1, boost::shared_ptr<const jpcRes> daughterRes2, std::vector< boost::shared_ptr<const JPCLS> >& theJPCLSVec)
{
// first: check C-parity
if ( motherRes->C != daughterRes1->C*daughterRes2->C){
Warning << "C-Parity not valid for the reaction: JPC= "
<< motherRes->J << " " << motherRes->P << " " << motherRes->C
<< " --> "
<< " JPC= " << daughterRes1->J << " " << daughterRes1->P << " " << daughterRes1->C
<< " and "
<< " JPC= " << daughterRes2->J << " " << daughterRes2->P << " " << daughterRes2->C
; // << endmsg;
if( fabs(motherRes->C)==1 && fabs(daughterRes1->C)==1 && fabs(daughterRes2->C)==1) return;
}
vector<LS> LSs=GetValidLS(motherRes->J, motherRes->P, daughterRes1->J, daughterRes1->P, daughterRes2->J, daughterRes2->P);
int num_LS = (int) LSs.size();
for(int ls = 0; ls < num_LS; ls++){
Spin L= LSs[ls].L;
Spin S= LSs[ls].S;
boost::shared_ptr<const JPCLS> tmpJPCLS(new JPCLS(motherRes, L, S));
theJPCLSVec.push_back(tmpJPCLS);
}
}
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
void validJPClamlam(boost::shared_ptr<const jpcRes> motherRes, Particle* daughter1, Particle* daughter2, std::vector< boost::shared_ptr<const JPClamlam> >& theJPClamlamVec){
std::vector< boost::shared_ptr<const JPCLS> > currentJPCLSDecAmps;
boost::shared_ptr<const jpcRes> daughterRes1=getJPCPtr(daughter1);
boost::shared_ptr<const jpcRes> daughterRes2=getJPCPtr(daughter2);
validJPCLS(motherRes, daughterRes1, daughterRes2, currentJPCLSDecAmps);
if(currentJPCLSDecAmps.size()==0){
Alert << "decay JPC= "
<< motherRes->J << " " << motherRes->P << " " << motherRes->C
<< " --> "
<< " JPC= " << daughterRes1->J << " " << daughterRes1->P << " " << daughterRes1->C
<< " and "
<< " JPC= " << daughterRes2->J << " " << daughterRes2->P << " " << daughterRes2->C
<< " not allowed!!!"
<< endmsg;
exit(1);
}
Spin Smax=0;
std::vector< boost::shared_ptr<const JPCLS> >::const_iterator it;
std::vector<Spin> itSpin;
for (it=currentJPCLSDecAmps.begin(); it!=currentJPCLSDecAmps.end(); ++it){
Spin currentSpin=(*it)->S;
if (currentSpin>Smax) Smax=currentSpin;
}
Spin Jmother=motherRes->J;
Spin Jdaughter1=daughterRes1->J;
Spin Jdaughter2=daughterRes2->J;
bool isDaughter1Photon=false;
if(daughter1->name()=="photon") isDaughter1Photon=true;
bool isDaughter2Photon=false;
if(daughter2->name()=="photon") isDaughter2Photon=true;
for (Spin lam1=-Jdaughter1; lam1<=Jdaughter1; ++lam1){
for (Spin lam2=lam1; lam2<=Jdaughter2; ++lam2){
if(isDaughter2Photon && lam2==0) continue;
Spin lambda=lam1-lam2;
if (fabs(lambda)>Smax) continue;
boost::shared_ptr<const JPClamlam> tmpJPClamlam(new JPClamlam(motherRes, lam1, lam2));
theJPClamlamVec.push_back(tmpJPClamlam);
}
}
}
boost::shared_ptr<jpcRes> getJPCPtr(Particle* theParticle){
boost::shared_ptr<jpcRes> result(new jpcRes((int) theParticle->J(), theParticle->theParity(), theParticle->theCParity()));
return result;
}
PwaCovMatrix::PwaCovMatrix(unsigned short n) :
n(n)
{
}
PwaCovMatrix::PwaCovMatrix(ROOT::Minuit2::MnUserCovariance &theMinuitCovMatrix, fitParams &theFitParams){
int n = theMinuitCovMatrix.Nrow();
}