diff --git a/inc/LauBlattWeisskopfFactor.hh b/inc/LauBlattWeisskopfFactor.hh --- a/inc/LauBlattWeisskopfFactor.hh +++ b/inc/LauBlattWeisskopfFactor.hh @@ -36,12 +36,13 @@ #define LAU_BLATTWEISSKOPFFACTOR #include "Rtypes.h" +#include "TString.h" class LauParameter; class LauResonanceInfo; -class LauBlattWeisskopfFactor { +class LauBlattWeisskopfFactor final { public: //! Define the allowed types of barrier factors @@ -83,8 +84,8 @@ //! Constructor LauBlattWeisskopfFactor( const LauResonanceInfo& resInfo, const Double_t resRadius, const BarrierType barrierType, const RestFrame restFrame, const BlattWeisskopfCategory category ); - //! Destructor - virtual ~LauBlattWeisskopfFactor(); + //! Constructor + LauBlattWeisskopfFactor( const Int_t spin, const Double_t resRadius, const BarrierType barrierType, const RestFrame restFrame, const BlattWeisskopfCategory category ); //! Method to create a new factor with cloned radius parameter /*! @@ -110,10 +111,6 @@ */ Double_t calcFormFactor( const Double_t p ) const; - protected: - //! Set the name of the radius parameter - TString setRadiusName( const LauResonanceInfo& resInfo, const BlattWeisskopfCategory category ); - private: //! Copy constructor LauBlattWeisskopfFactor( const LauBlattWeisskopfFactor& other, const UInt_t newSpin, const BarrierType newBarrierType ); @@ -121,6 +118,15 @@ //! Copy assignment operator (not implemented) LauBlattWeisskopfFactor& operator=( const LauBlattWeisskopfFactor& other ); + //! Set the name of the radius parameter + TString setRadiusName( const LauResonanceInfo& resInfo, const BlattWeisskopfCategory category ); + + //! Set the name of the radius parameter + TString setRadiusName( const BlattWeisskopfCategory category ); + + //! Set the name of the radius parameter + TString setRadiusName( const TString& categoryName ); + //! 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,8 +58,14 @@ std::cout << "INFO in LauBlattWeisskopfFactor constructor : creating radius parameter for category \"" << categoryName << "\", with initial value " << resRadius << std::endl; } -LauBlattWeisskopfFactor::~LauBlattWeisskopfFactor() +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( const LauBlattWeisskopfFactor& other, const UInt_t newSpin, const BarrierType newBarrierType ) : @@ -72,61 +78,61 @@ TString LauBlattWeisskopfFactor::setRadiusName( const LauResonanceInfo& resInfo, const BlattWeisskopfCategory category ) { - TString name = "BarrierRadius_"; - TString categoryName; + switch (category) { + case Indep : + return this->setRadiusName( resInfo.getSanitisedName() ); + default : + return this->setRadiusName( category ); + } +} +TString LauBlattWeisskopfFactor::setRadiusName( const BlattWeisskopfCategory category ) +{ switch (category) { - case Parent : - categoryName = "Parent"; - break; + case Default : + return this->setRadiusName("Unknown"); case Indep : - categoryName = resInfo.getSanitisedName(); - break; + // We shouldn't ever end up here + return this->setRadiusName("Unknown"); + case Parent : + return this->setRadiusName("Parent"); case Light : - categoryName = "Light"; - break; + return this->setRadiusName("Light"); case Kstar : - categoryName = "Kstar"; - break; + return this->setRadiusName("Kstar"); case Charm : - categoryName = "Charm"; - break; + return this->setRadiusName("Charm"); case StrangeCharm : - categoryName = "StrangeCharm"; - break; + return this->setRadiusName("StrangeCharm"); case Charmonium : - categoryName = "Charmonium"; - break; + return this->setRadiusName("Charmonium"); case Beauty : - categoryName = "Beauty"; - break; + return this->setRadiusName("Beauty"); case StrangeBeauty : - categoryName = "StrangeBeauty"; - break; + return this->setRadiusName("StrangeBeauty"); case CharmBeauty : - categoryName = "CharmBeauty"; - break; + return this->setRadiusName("CharmBeauty"); case Custom1 : - categoryName = "Custom1"; - break; + return this->setRadiusName("Custom1"); case Custom2 : - categoryName = "Custom2"; - break; + return this->setRadiusName("Custom2"); case Custom3 : - categoryName = "Custom3"; - break; + return this->setRadiusName("Custom3"); case Custom4 : - categoryName = "Custom4"; - break; - default : - categoryName = "Unknown"; - break; + return this->setRadiusName("Custom4"); } + // We should never get here but gcc seems to think we can + return this->setRadiusName("Unknown"); +} + +TString LauBlattWeisskopfFactor::setRadiusName( const TString& categoryName ) +{ + TString name = "BarrierRadius_"; + name.Append(categoryName); - name.Append(categoryName); - radius_->name(name); + radius_->name(name); - return categoryName; + return categoryName; } LauBlattWeisskopfFactor* LauBlattWeisskopfFactor::createClone( const UInt_t newSpin, const BarrierType newBarrierType ) diff --git a/src/LauResonanceMaker.cc b/src/LauResonanceMaker.cc --- a/src/LauResonanceMaker.cc +++ b/src/LauResonanceMaker.cc @@ -632,13 +632,35 @@ // Look up the category in the category information map BWFactorCategoryMap::iterator factor_iter = bwFactors_.find( LauBlattWeisskopfFactor::Parent ); - if ( factor_iter != bwFactors_.end() ) { + if ( factor_iter == bwFactors_.end() ) { + // If the category is currently undefined we need to create it + bwFactor = new LauBlattWeisskopfFactor( resSpin, 4.0, bwBarrierType_, bwRestFrame_, LauBlattWeisskopfFactor::Parent ); + std::cerr<<"WARNING in LauResonanceMaker::getParentBWFactor : Default radius 4.0 set for Blatt-Weisskopf factor category: Parent"<getRadiusParameter()->value(); + categoryInfo.radiusFixed_ = kTRUE; + } else { // If it exists, we can check if the factor object has been created BlattWeisskopfCategoryInfo& categoryInfo = factor_iter->second; 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 { + bwFactor = new LauBlattWeisskopfFactor( resSpin, 4.0, bwBarrierType_, bwRestFrame_, LauBlattWeisskopfFactor::Parent ); + std::cerr<<"WARNING in LauResonanceMaker::getParentBWFactor : Default radius 4.0 set for Blatt-Weisskopf factor category: Parent"<getRadiusParameter(); + radius->fixed( categoryInfo.radiusFixed_ ); } }