void sortArray(int *numbers) { int i, maxInd; for (i = size - 1; i > 0; i--) { maxInd = indexMax(numbers, 0, i); swap(&numbers[maxInd], &numbers[i]); } }
void FakeMDEventData::addFakeRegularData( const std::vector<double> ¶ms, typename MDEventWorkspace<MDE, nd>::sptr ws) { // the parameters for regular distribution of events over the box std::vector<double> startPoint(nd), delta(nd); std::vector<size_t> indexMax(nd); size_t gridSize(0); // bool RandomizeSignal = getProperty("RandomizeSignal"); size_t num = size_t(params[0]); if (num == 0) throw std::invalid_argument( " number of distributed events can not be equal to 0"); Progress prog(this, 0.0, 1.0, 100); size_t progIncrement = num / 100; if (progIncrement == 0) progIncrement = 1; // Inserter to help choose the correct event type auto eventHelper = MDEvents::MDEventInserter<typename MDEventWorkspace<MDE, nd>::sptr>(ws); gridSize = 1; for (size_t d = 0; d < nd; ++d) { double min = ws->getDimension(d)->getMinimum(); double max = ws->getDimension(d)->getMaximum(); double shift = params[d * 2 + 1]; double step = params[d * 2 + 2]; if (shift < 0) shift = 0; if (shift >= step) shift = step * (1 - FLT_EPSILON); startPoint[d] = min + shift; if ((startPoint[d] < min) || (startPoint[d] >= max)) throw std::invalid_argument("RegularData: starting point must be within " "the box for all dimensions."); if (step <= 0) throw(std::invalid_argument( "Step of the regular grid is less or equal to 0")); indexMax[d] = size_t((max - min) / step); if (indexMax[d] == 0) indexMax[d] = 1; // deal with round-off errors while ((startPoint[d] + double(indexMax[d] - 1) * step) >= max) step *= (1 - FLT_EPSILON); delta[d] = step; gridSize *= indexMax[d]; } // Create all the requested events std::vector<size_t> indexes; size_t cellCount(0); for (size_t i = 0; i < num; ++i) { coord_t centers[nd]; Kernel::Utils::getIndicesFromLinearIndex(cellCount, indexMax, indexes); ++cellCount; if (cellCount >= gridSize) cellCount = 0; for (size_t d = 0; d < nd; d++) { centers[d] = coord_t(startPoint[d] + delta[d] * double(indexes[d])); } // Default or randomized error/signal float signal = 1.0; float errorSquared = 1.0; // if (RandomizeSignal) //{ // signal = float(0.5 + genUnit()); // errorSquared = float(0.5 + genUnit()); //} // Create and add the event. eventHelper.insertMDEvent(signal, errorSquared, 1, pickDetectorID(), centers); // 1 = run number // Progress report if ((i % progIncrement) == 0) prog.report(); } }