19 #ifndef viskores_worklet_NDimsHistMarginalization_h
20 #define viskores_worklet_NDimsHistMarginalization_h
28 #include <viskores/filter/density_estimate/worklet/histogram/ComputeNDHistogram.h>
29 #include <viskores/filter/density_estimate/worklet/histogram/MarginalizeNDHistogram.h>
61 template <
typename BinaryCompare>
66 BinaryCompare conditionFunc,
81 const auto marginalPortal = marginalVariables.
ReadPortal();
82 const auto numBinsPortal = numberOfBins.
ReadPortal();
85 if (marginalPortal.Get(i) ==
true)
88 numMarginalVariables++;
90 viskores::worklet::histogram::To1DIndex binWorklet(nFieldBins);
92 to1DIndexDispatcher(binWorklet);
93 size_t vecIndex =
static_cast<size_t>(i);
94 to1DIndexDispatcher.Invoke(binId[vecIndex], bin1DIndex, bin1DIndex);
100 viskores::worklet::histogram::ConditionalFreq<BinaryCompare> conditionalFreqWorklet{
103 conditionalFreqWorklet.setVar(i);
105 viskores::worklet::histogram::ConditionalFreq<BinaryCompare>>
106 cfDispatcher(conditionalFreqWorklet);
107 size_t vecIndex =
static_cast<size_t>(i);
108 cfDispatcher.Invoke(binId[vecIndex], freqs, freqs);
119 bin1DIndex, freqs, bin1DIndex, nonSparseMarginalFreqs,
viskores::Add());
125 nonSparseMarginalFreqs, nonSparseMarginalFreqs, marginalFreqs);
128 marginalBinId.resize(
static_cast<size_t>(numMarginalVariables));
132 if (marginalPortal.Get(i) ==
true)
135 viskores::worklet::histogram::ConvertHistBinToND binWorklet(nFieldBins);
137 convertHistBinToNDDispatcher(binWorklet);
138 size_t vecIndex =
static_cast<size_t>(marginalVarIdx);
139 convertHistBinToNDDispatcher.Invoke(
140 sparseMarginal1DBinId, sparseMarginal1DBinId, marginalBinId[vecIndex]);
166 const auto marginalPortal = marginalVariables.
ReadPortal();
167 const auto numBinsPortal = numberOfBins.
ReadPortal();
170 if (marginalPortal.Get(i) ==
true)
173 numMarginalVariables++;
175 viskores::worklet::histogram::To1DIndex binWorklet(nFieldBins);
177 to1DIndexDispatcher(binWorklet);
178 size_t vecIndex =
static_cast<size_t>(i);
179 to1DIndexDispatcher.Invoke(binId[vecIndex], bin1DIndex, bin1DIndex);
188 bin1DIndex, freqs, bin1DIndex, marginalFreqs,
viskores::Add());
191 marginalBinId.resize(
static_cast<size_t>(numMarginalVariables));
195 if (marginalPortal.Get(i) ==
true)
198 viskores::worklet::histogram::ConvertHistBinToND binWorklet(nFieldBins);
200 convertHistBinToNDDispatcher(binWorklet);
201 size_t vecIndex =
static_cast<size_t>(marginalVarIdx);
202 convertHistBinToNDDispatcher.Invoke(bin1DIndex, bin1DIndex, marginalBinId[vecIndex]);
211 #endif // viskores_worklet_NDimsHistMarginalization_h