~dhis2-devs-core/+junk/dhis2-xml-ng

« back to all changes in this revision

Viewing changes to dhis-2/dhis-services/dhis-service-administration/src/main/java/org/hisp/dhis/outlieranalysis/StdDevOutlierAnalysisService.java

  • Committer: Bob Jolliffe
  • Date: 2009-12-28 00:10:10 UTC
  • mfrom: (1265.1.24 trunk)
  • Revision ID: bobj@bobj-laptop-20091228001010-74keze4t25s96xi0
Merged in changes from trunk (trying to stay in synch)

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
package org.hisp.dhis.outlieranalysis;
2
 
 
3
 
/*
4
 
 * Copyright (c) 2004-${year}, University of Oslo
5
 
 * All rights reserved.
6
 
 *
7
 
 * Redistribution and use in source and binary forms, with or without
8
 
 * modification, are permitted provided that the following conditions are met:
9
 
 * * Redistributions of source code must retain the above copyright notice, this
10
 
 *   list of conditions and the following disclaimer.
11
 
 * * Redistributions in binary form must reproduce the above copyright notice,
12
 
 *   this list of conditions and the following disclaimer in the documentation
13
 
 *   and/or other materials provided with the distribution.
14
 
 * * Neither the name of the HISP project nor the names of its contributors may
15
 
 *   be used to endorse or promote products derived from this software without
16
 
 *   specific prior written permission.
17
 
 *
18
 
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
19
 
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
20
 
 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
21
 
 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
22
 
 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
23
 
 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
24
 
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
25
 
 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26
 
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
27
 
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
 
 */
29
 
 
30
 
import java.util.ArrayList;
31
 
import java.util.Collection;
32
 
import java.util.Map;
33
 
 
34
 
import org.hisp.dhis.dataelement.DataElement;
35
 
import org.hisp.dhis.dataelement.DataElementCategoryOptionCombo;
36
 
import org.hisp.dhis.datavalue.DeflatedDataValue;
37
 
import org.hisp.dhis.organisationunit.OrganisationUnit;
38
 
import org.hisp.dhis.outlieranalysis.OutlierAnalysisStore;
39
 
import org.hisp.dhis.period.Period;
40
 
 
41
 
import static org.hisp.dhis.system.util.MathUtils.isEqual;
42
 
 
43
 
/**
44
 
 * 
45
 
 * @author Dag Haavi Finstad
46
 
 * @author Lars Helge Overland
47
 
 * @version $Id: DefaultStdDevOutlierAnalysisService.java 1020 2009-06-05 01:30:07Z daghf $
48
 
 */
49
 
public class StdDevOutlierAnalysisService
50
 
    extends AbstractOutlierAnalysisService
51
 
{
52
 
    // -------------------------------------------------------------------------
53
 
    // Dependencies
54
 
    // -------------------------------------------------------------------------
55
 
 
56
 
    private OutlierAnalysisStore outlierAnalysisStore;
57
 
 
58
 
    public void setOutlierAnalysisStore( OutlierAnalysisStore outlierAnalysisStore )
59
 
    {
60
 
        this.outlierAnalysisStore = outlierAnalysisStore;
61
 
    }
62
 
 
63
 
    // -------------------------------------------------------------------------
64
 
    // OutlierAnalysisService implementation
65
 
    // -------------------------------------------------------------------------
66
 
 
67
 
    public Collection<OutlierValue> findOutliers( OrganisationUnit organisationUnit, DataElement dataElement, 
68
 
        DataElementCategoryOptionCombo categoryOptionCombo, Collection<Period> periods, Double stdDevFactor,
69
 
        Map<Integer, DataElement> dataElementMap, Map<Integer, Period> periodMap, Map<Integer, OrganisationUnit> organisationUnitMap,
70
 
        Map<Integer, DataElementCategoryOptionCombo> categoryOptionComboMap)
71
 
    {
72
 
        final Collection<OutlierValue> outlierValues = new ArrayList<OutlierValue>();
73
 
 
74
 
        Double stdDev = outlierAnalysisStore.getStandardDeviation( dataElement, categoryOptionCombo, organisationUnit );
75
 
                
76
 
        if ( !isEqual( stdDev, 0.0 ) ) // No values found or no outliers exist when 0.0
77
 
        {
78
 
            Double avg = outlierAnalysisStore.getAverage( dataElement, categoryOptionCombo, organisationUnit );
79
 
            
80
 
            double deviation = stdDev * stdDevFactor;        
81
 
            double lowerBound = avg - deviation;
82
 
            double upperBound = avg + deviation;
83
 
            
84
 
            Collection<DeflatedDataValue> outliers = outlierAnalysisStore.
85
 
                getDeflatedDataValues( dataElement, categoryOptionCombo, periods, organisationUnit, lowerBound, upperBound );
86
 
            
87
 
            for ( DeflatedDataValue outlier : outliers )
88
 
            {
89
 
                outlierValues.add( new OutlierValue( dataElementMap.get( outlier.getDataElementId() ), periodMap.get( outlier.getPeriodId() ),
90
 
                    organisationUnitMap.get( outlier.getSourceId() ), categoryOptionComboMap.get( outlier.getCategoryOptionComboId() ),
91
 
                    Double.valueOf( outlier.getValue() ), lowerBound, upperBound ) );
92
 
            }
93
 
        }
94
 
        
95
 
        return outlierValues;
96
 
    }
97
 
}