File indexing completed on 2023-03-17 11:01:31
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013 #include <stdexcept>
0014 #include <iostream>
0015 #include <functional>
0016
0017 #include "Rtypes.h"
0018 #include "TMath.h"
0019 #include "Fireworks/Core/interface/FWEveView.h"
0020 #include "Fireworks/Core/interface/FWViewEnergyScale.h"
0021 #include "Fireworks/Core/interface/Context.h"
0022 #include "Fireworks/Core/interface/CmsShowCommon.h"
0023
0024 FWViewEnergyScale::FWViewEnergyScale(std::string name, int version)
0025 : FWConfigurableParameterizable(version),
0026 m_scaleMode(this, "ScaleMode", 1l, 1l, 2l),
0027 m_fixedValToHeight(this, "EnergyToLength [GeV/m]", 50.0, 1.0, 1000.0),
0028 m_maxTowerHeight(this, "MaximumLength [m]", 3.0, 0.01, 30.0),
0029 m_plotEt(this, "PlotEt", true),
0030 m_name(name),
0031 m_scaleFactor3D(1.f),
0032 m_scaleFactorLego(0.05f) {
0033 m_scaleMode.addEntry(kFixedScale, "FixedScale");
0034 m_scaleMode.addEntry(kAutoScale, "AutomaticScale");
0035 m_scaleMode.addEntry(kCombinedScale, "CombinedScale");
0036
0037 m_scaleMode.changed_.connect(std::bind(&FWViewEnergyScale::scaleParameterChanged, this));
0038 m_fixedValToHeight.changed_.connect(std::bind(&FWViewEnergyScale::scaleParameterChanged, this));
0039 m_maxTowerHeight.changed_.connect(std::bind(&FWViewEnergyScale::scaleParameterChanged, this));
0040 m_plotEt.changed_.connect(std::bind(&FWViewEnergyScale::scaleParameterChanged, this));
0041 }
0042
0043 FWViewEnergyScale::~FWViewEnergyScale() {}
0044
0045
0046
0047 void FWViewEnergyScale::scaleParameterChanged() const { parameterChanged_.emit(); }
0048
0049 float FWViewEnergyScale::calculateScaleFactor(float iMaxVal, bool isLego) const {
0050
0051 int mode = m_scaleMode.value();
0052 if (mode == kCombinedScale) {
0053 mode = (m_maxTowerHeight.value() > 100 * iMaxVal / m_fixedValToHeight.value()) ? kFixedScale : kAutoScale;
0054
0055 }
0056
0057
0058 if (mode == kFixedScale) {
0059
0060
0061 float length = isLego ? TMath::Pi() : 100;
0062 return length / m_fixedValToHeight.value();
0063 } else {
0064 float length = isLego ? TMath::Pi() : (100 * m_maxTowerHeight.value());
0065
0066 return length / iMaxVal;
0067 }
0068 }
0069
0070 void FWViewEnergyScale::updateScaleFactors(float iMaxVal) {
0071 m_scaleFactor3D = calculateScaleFactor(iMaxVal, false);
0072 m_scaleFactorLego = calculateScaleFactor(iMaxVal, true);
0073 }
0074
0075 void FWViewEnergyScale::setFrom(const FWConfiguration& iFrom) {
0076 for (const_iterator it = begin(), itEnd = end(); it != itEnd; ++it) {
0077 (*it)->setFrom(iFrom);
0078 }
0079 }
0080
0081 void FWViewEnergyScale::SetFromCmsShowCommonConfig(long mode, float convert, float maxH, bool et) {
0082 m_scaleMode.set(mode);
0083 m_fixedValToHeight.set(convert);
0084 m_maxTowerHeight.set(maxH);
0085 m_plotEt.set(et > 0);
0086 }