1 /*
2 * Licensed to the Apache Software Foundation (ASF) under one or more
3 * contributor license agreements. See the NOTICE file distributed with
4 * this work for additional information regarding copyright ownership.
5 * The ASF licenses this file to You under the Apache License, Version 2.0
6 * (the "License"); you may not use this file except in compliance with
7 * the License. You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17 package org.apache.commons.math4.legacy.fitting;
18
19 import java.util.List;
20 import java.util.ArrayList;
21
22 /**
23 * Simple container for weighted observed points used
24 * in {@link AbstractCurveFitter curve fitting} algorithms.
25 *
26 * @since 3.3
27 */
28 public class WeightedObservedPoints {
29 /** Observed points. */
30 private final List<WeightedObservedPoint> observations
31 = new ArrayList<>();
32
33 /**
34 * Adds a point to the sample.
35 * Calling this method is equivalent to calling
36 * {@code add(1.0, x, y)}.
37 *
38 * @param x Abscissa of the point.
39 * @param y Observed value at {@code x}. After fitting we should
40 * have {@code f(x)} as close as possible to this value.
41 *
42 * @see #add(double, double, double)
43 * @see #add(WeightedObservedPoint)
44 * @see #toList()
45 */
46 public void add(double x, double y) {
47 add(1d, x, y);
48 }
49
50 /**
51 * Adds a point to the sample.
52 *
53 * @param weight Weight of the observed point.
54 * @param x Abscissa of the point.
55 * @param y Observed value at {@code x}. After fitting we should
56 * have {@code f(x)} as close as possible to this value.
57 *
58 * @see #add(double, double)
59 * @see #add(WeightedObservedPoint)
60 * @see #toList()
61 */
62 public void add(double weight, double x, double y) {
63 observations.add(new WeightedObservedPoint(weight, x, y));
64 }
65
66 /**
67 * Adds a point to the sample.
68 *
69 * @param observed Observed point to add.
70 *
71 * @see #add(double, double)
72 * @see #add(double, double, double)
73 * @see #toList()
74 */
75 public void add(WeightedObservedPoint observed) {
76 observations.add(observed);
77 }
78
79 /**
80 * Gets a <em>snapshot</em> of the observed points.
81 * The list of stored points is copied in order to ensure that
82 * modification of the returned instance does not affect this
83 * container.
84 * Conversely, further modification of this container (through
85 * the {@code add} or {@code clear} methods) will not affect the
86 * returned list.
87 *
88 * @return the observed points, in the order they were added to this
89 * container.
90 *
91 * @see #add(double, double)
92 * @see #add(double, double, double)
93 * @see #add(WeightedObservedPoint)
94 */
95 public List<WeightedObservedPoint> toList() {
96 // The copy is necessary to ensure thread-safety because of the
97 // "clear" method (which otherwise would be able to empty the
98 // list of points while it is being used by another thread).
99 return new ArrayList<>(observations);
100 }
101
102 /**
103 * Removes all observations from this container.
104 */
105 public void clear() {
106 observations.clear();
107 }
108 }