ENH: autoLayerDriver: better layering information message
[OpenFOAM-2.0.x.git] / src / lagrangian / molecularDynamics / molecularMeasurements / distribution / distribution.H
blob7897c034ec3461ed0ceb2278ecd84c12e7ed33f9
1 /*---------------------------------------------------------------------------*\
2   =========                 |
3   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
4    \\    /   O peration     |
5     \\  /    A nd           | Copyright (C) 2011 OpenFOAM Foundation
6      \\/     M anipulation  |
7 -------------------------------------------------------------------------------
8 License
9     This file is part of OpenFOAM.
11     OpenFOAM is free software: you can redistribute it and/or modify it
12     under the terms of the GNU General Public License as published by
13     the Free Software Foundation, either version 3 of the License, or
14     (at your option) any later version.
16     OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
17     ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
18     FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
19     for more details.
21     You should have received a copy of the GNU General Public License
22     along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
24 Class
25     Foam::distribution
27 Description
28     Accumulating histogram of values.  Specified bin resolution
29     automatic generation of bins.
31 SourceFiles
32     distributionI.H
33     distribution.C
35 \*---------------------------------------------------------------------------*/
37 #ifndef distribution_H
38 #define distribution_H
40 #include "Map.H"
41 #include "Pair.H"
43 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
45 namespace Foam
48 /*---------------------------------------------------------------------------*\
49                         Class distribution Declaration
50 \*---------------------------------------------------------------------------*/
52 class distribution
54     public Map<label>
56     // Private data
58         scalar binWidth_;
61 public:
63     //- Runtime type information
65         TypeName("distribution");
67     // Static functions
69         //- write to file
71             static void write
72             (
73                 const fileName& file,
74                 const List<Pair<scalar> >& pairs
75             );
78     // Constructors
80         //- Construct null
81         distribution();
83         //- Construct from binWidth
84         distribution(const scalar binWidth);
86         //- Construct as copy
87         distribution(const distribution&);
90     //- Destructor
91     virtual ~distribution();
94     // Member Functions
96         label totalEntries() const;
98         scalar approxTotalEntries() const;
100         scalar mean() const;
102         scalar median();
104         //- Add a value to the appropriate bin of the distribution.
105         void add(const scalar valueToAdd);
107         void add(const label valueToAdd);
109         void insertMissingKeys();
111         List<Pair<scalar> > normalised();
113         List<Pair<scalar> > normalisedMinusMean();
115         List<Pair<scalar> > normalisedShifted(scalar shiftValue);
117         List<Pair<scalar> > raw();
120         // Access
122             inline scalar binWidth() const;
125     // Member Operators
127         void operator=(const distribution&);
130     // IOstream Operators
132         friend Ostream& operator<<(Ostream&, const distribution&);
136 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
138 } // End namespace Foam
140 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
142 #include "distributionI.H"
144 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
146 #endif
148 // ************************************************************************* //