diff --git a/inc/LauBlattWeisskopfFactor.hh b/inc/LauBlattWeisskopfFactor.hh --- a/inc/LauBlattWeisskopfFactor.hh +++ b/inc/LauBlattWeisskopfFactor.hh @@ -36,6 +36,7 @@ #define LAU_BLATTWEISSKOPFFACTOR #include "Rtypes.h" +#include "TString.h" class LauParameter; class LauResonanceInfo; @@ -83,6 +84,9 @@ //! Constructor LauBlattWeisskopfFactor( const LauResonanceInfo& resInfo, const Double_t resRadius, const BarrierType barrierType, const RestFrame restFrame, const BlattWeisskopfCategory category ); + //! Constructor + LauBlattWeisskopfFactor( const Int_t spin, const Double_t resRadius, const BarrierType barrierType, const RestFrame restFrame, const BlattWeisskopfCategory category ); + //! Destructor virtual ~LauBlattWeisskopfFactor(); @@ -121,6 +125,9 @@ //! Copy assignment operator (not implemented) LauBlattWeisskopfFactor& operator=( const LauBlattWeisskopfFactor& other ); + //! Set the name of the radius parameter + TString setRadiusName( const BlattWeisskopfCategory category, TString specifiedCategoryName="" ); + //! Resonance spin const UInt_t spin_; diff --git a/src/LauBlattWeisskopfFactor.cc b/src/LauBlattWeisskopfFactor.cc --- a/src/LauBlattWeisskopfFactor.cc +++ b/src/LauBlattWeisskopfFactor.cc @@ -58,6 +58,16 @@ std::cout << "INFO in LauBlattWeisskopfFactor constructor : creating radius parameter for category \"" << categoryName << "\", with initial value " << resRadius << std::endl; } +LauBlattWeisskopfFactor::LauBlattWeisskopfFactor( const Int_t spin, const Double_t resRadius, const BarrierType barrierType, const RestFrame restFrame, const BlattWeisskopfCategory category ) : + spin_(spin), + radius_(new LauParameter("NEED_A_GOOD_NAME",resRadius,0.0,10.0,kTRUE)), + barrierType_(barrierType), + restFrame_(restFrame) +{ + TString categoryName = this->setRadiusName( category ); + std::cout << "INFO in LauBlattWeisskopfFactor constructor : creating radius parameter for category \"" << categoryName << "\", with initial value " << resRadius << std::endl; +} + LauBlattWeisskopfFactor::~LauBlattWeisskopfFactor() { } @@ -72,56 +82,70 @@ TString LauBlattWeisskopfFactor::setRadiusName( const LauResonanceInfo& resInfo, const BlattWeisskopfCategory category ) { - TString name = "BarrierRadius_"; - TString categoryName; - switch (category) { - case Parent : - categoryName = "Parent"; - break; case Indep : - categoryName = resInfo.getSanitisedName(); - break; - case Light : - categoryName = "Light"; - break; - case Kstar : - categoryName = "Kstar"; - break; - case Charm : - categoryName = "Charm"; - break; - case StrangeCharm : - categoryName = "StrangeCharm"; - break; - case Charmonium : - categoryName = "Charmonium"; - break; - case Beauty : - categoryName = "Beauty"; - break; - case StrangeBeauty : - categoryName = "StrangeBeauty"; - break; - case CharmBeauty : - categoryName = "CharmBeauty"; - break; - case Custom1 : - categoryName = "Custom1"; - break; - case Custom2 : - categoryName = "Custom2"; - break; - case Custom3 : - categoryName = "Custom3"; - break; - case Custom4 : - categoryName = "Custom4"; + return this->setRadiusName( category, resInfo.getSanitisedName() ); break; default : - categoryName = "Unknown"; + return this->setRadiusName( category ); break; } +} + +TString LauBlattWeisskopfFactor::setRadiusName( const BlattWeisskopfCategory category, TString specifiedCategoryName ) +{ + TString name = "BarrierRadius_"; + TString categoryName; + + if ( specifiedCategoryName.EqualTo("") ) { + switch (category) { + case Parent : + categoryName = "Parent"; + break; + case Light : + categoryName = "Light"; + break; + case Kstar : + categoryName = "Kstar"; + break; + case Charm : + categoryName = "Charm"; + break; + case StrangeCharm : + categoryName = "StrangeCharm"; + break; + case Charmonium : + categoryName = "Charmonium"; + break; + case Beauty : + categoryName = "Beauty"; + break; + case StrangeBeauty : + categoryName = "StrangeBeauty"; + break; + case CharmBeauty : + categoryName = "CharmBeauty"; + break; + case Custom1 : + categoryName = "Custom1"; + break; + case Custom2 : + categoryName = "Custom2"; + break; + case Custom3 : + categoryName = "Custom3"; + break; + case Custom4 : + categoryName = "Custom4"; + break; + default : + categoryName = "Unknown"; + break; + } + } + else { + categoryName = specifiedCategoryName; + } name.Append(categoryName); radius_->name(name); diff --git a/src/LauResonanceMaker.cc b/src/LauResonanceMaker.cc --- a/src/LauResonanceMaker.cc +++ b/src/LauResonanceMaker.cc @@ -639,6 +639,18 @@ if ( categoryInfo.bwFactor_ != 0 ) { // If so, simply clone it bwFactor = categoryInfo.bwFactor_->createClone( resSpin, barrierType ); + } else { + // Otherwise we need to create it, using the default value if it has been set + if ( categoryInfo.defaultRadius_ >= 0.0 ) { + bwFactor = new LauBlattWeisskopfFactor( resSpin, categoryInfo.defaultRadius_, bwBarrierType_, bwRestFrame_, LauBlattWeisskopfFactor::Parent ); + } else { + std::cerr<<"ERROR in LauResonanceMaker::getParentBWFactor : No default radius set for Blatt-Weisskopf factor category: Parent"<getRadiusParameter(); + radius->fixed( categoryInfo.radiusFixed_ ); } }