### TABLE OF CONTENTS

- 1. /histMC
- 1.1. histMC/histogramMC
- 1.2. histMC/ClearHistMC
- 1.3. histMC/CreateHistMC
- 1.4. histMC/RemoveHistMC
- 1.5. histMC/AddHistMC
- 1.6. histMC/RebinHistMC
- 1.7. histMC/CopyDesc
- 1.8. histMC/WriteHeaderMC
- 1.9. histMC/WriteHistMC
- 1.10. histMC/WriteHistMC_Integrated
- 1.11. histMC/WriteHistMC_Spline
- 1.12. histMC/WriteHistMC_Gauss
- 1.13. histMC/ReadHistMC
- 1.14. histMC/sumHistMC
- 1.15. histMC/DumpHistMC
- 1.16. histMC/FetchHistMC

## /histMC [ Modules ]

NAME

module **histMC**

PURPOSE

Encapsulate all routines and data for 1D Histograms with multiple channels.

Features of Histograms provided by this module:

- store parameters of the x-binning
- enable multiple y-values
- track keeping of under-/over-score the given extreme values of x.
- provide simple-to-understand output routines (cf. WriteHist)
- provide simple histogram arithmetic (not yet implemented)
- many others...

Every Histogram prints its own multicolumn output. A multicolumn output of many different histograms for the same x-value is not implemented. This is done by the module "histMPf90".

INPUTS

...(This module needs no input)

## histMC/histogramMC [ Types ]

NAME

type **histogramMC**

PURPOSE

Type definition to store all information for a multi-channel 1D Histogram.

SOURCE

type, public ::histogramMCreal :: xMin ! smallest x-value real :: xMax ! largest x-value real :: xBin ! width of x-Bin real :: xExtreme(2) ! extremes of used x-values ! (min,max) character*(NameLength) :: Name ! name to be written character*(NameLength) :: xDesc ! description of x-value character*(NameLength),allocatable :: yDesc(:) ! description of y-channels real,allocatable :: yVal(:,:) ! histogramm values: ! (x), (yy1,yy2,yy3...) ! bin 0,-1 : underflow/overflow !!! logical :: initialized = .false.! flag to indicate whether the histogram has been initialized end typehistogramMC

## histMC/ClearHistMC [ Subroutines ]

[ Top ] [ histMC ] [ Subroutines ]

NAME

subroutine **ClearHistMC** (H)

PURPOSE

Sets the histogram to zero again

INPUTS

- type(histogramMC) :: H -- Histogramm to be cleared

OUTPUT

H is changed

## histMC/CreateHistMC [ Subroutines ]

[ Top ] [ histMC ] [ Subroutines ]

NAME

subroutine **CreateHistMC** (H, HName, x1, x2, bin, nCh)

PURPOSE

This is the Constructor of a multi-channel 1D-Histogram! Allocate Memory for the entries and put additional variables to their default.

INPUTS

- type(histogramMC):: H -- Histogramm to be created
- character*(*) :: HName -- Name of Histogram
- real :: x1,x2,bin -- Minimal/maximal value for x-coordinate to be considered, bin-width
- integer :: nCh -- Number of Channels

OUTPUT

H is changed

## histMC/RemoveHistMC [ Subroutines ]

[ Top ] [ histMC ] [ Subroutines ]

NAME

subroutine **RemoveHistMC**(H)

PURPOSE

Free the allocated memory

INPUTS

- type(histogramMC) :: H -- Histogramm to be used

OUTPUT

H is changed

## histMC/AddHistMC [ Subroutines ]

[ Top ] [ histMC ] [ Subroutines ]

NAME

subroutine **AddHistMC** (H, x, nCh, y)

PURPOSE

Add to the given histogram at the given x-value the weight y (y2). If y2 is given, also the second column is filled.

INPUTS

- type(histogram) :: H -- Histogramm to be used
- real :: x -- x-value
- integer :: nCh-- number of Channel
- real :: y -- weight to be added

OUTPUT

H is changed

## histMC/RebinHistMC [ Subroutines ]

[ Top ] [ histMC ] [ Subroutines ]

NAME

subroutine **RebinHistMC** (H, N)

PURPOSE

Perform a rebinning of a present histogram, i.e. increase the bin size by an integer factor.

INPUTS

- type(histogramMC),intent(inout) :: H -- histogram to be rebinned
- integer, intent(in) :: N -- rebinning factor

OUTPUT

H is changed

## histMC/CopyDesc [ Subroutines ]

[ Top ] [ histMC ] [ Subroutines ]

NAME

subroutine **CopyDesc**(H_dest,H_src)

PURPOSE

Copy the channel descriptions from one histogram to another.

INPUTS

OUTPUT

H_dest is changed

## histMC/WriteHeaderMC [ Subroutines ]

[ Top ] [ histMC ] [ Subroutines ]

NAME

logical function **WriteHeaderMC** (H, iFile, mul, FinalLineBreak)

PURPOSE

A header is written to the file:

- Underflow: sum of all calls with a x-value less than x-min
- Entries: sum of all entries listed in section "Data" below
- Overflow: sum of all calls with a x-value above x-max
- Extrema: the smallest/biggest x-values which had been added
- counted: the range of x-values, which is considered in "Entries"
- descriptions of x-value and all y-channels

Summing "Underflow"+"Entries"+"Overflow" gives the number of ALL calls, i.e. the integral from -infty upto +infty.

Output of "Underflow","Entries","Overflow" shows only the sum of all channels.

INPUTS

- type(histogramMC) :: H -- Histogramm
- integer :: iFile -- file number to write to
- real, optional :: mul
- logical,optional :: FinalLineBreak -- .false.= No line break after the header

OUTPUT

## histMC/WriteHistMC [ Subroutines ]

[ Top ] [ histMC ] [ Subroutines ]

NAME

subroutine **WriteHistMC**(H,file,div,add,mul,dump)

PURPOSE

Write out the histogram.

The entries are multiplied by 'mul'.

INPUTS

- type(histogram) :: H -- Histogramm to be used
- character*(*) :: file -- name of file to open and close
- real :: div -- if true, divide data by the bin width [OPTIONAL]
- real :: add -- factor to add [OPTIONAL]
- real :: mul -- factor to multiply [OPTIONAL]
- logical :: dump -- if true, also dump it binary to file [OPTIONAL]

OUTPUT

write to file

Several columns are written in the data section:

- 1) x-value (i.e. middle of bin)
- 2) total sum of all y-values
- 3...) all single y-values

Columns are divided by the bin-width, if "div" is true (or omitted). (Default: div = .true.)

In addition a header with additional info is written to the file (see "WriteHeaderMC")

NOTES

The Histogram Data is not affected!!!

## histMC/WriteHistMC_Integrated [ Subroutines ]

[ Top ] [ histMC ] [ Subroutines ]

NAME

subroutine **WriteHistMC_Integrated**(H,file,div)

PURPOSE

Write out the histogram, integrating the data over x.

INPUTS

- type(histogram) :: H -- Histogramm to be used
- character*(*) :: file -- name of file to open and close
- logical :: div -- if true, divide data by the bin width [OPTIONAL]

OUTPUT

write to file

## histMC/WriteHistMC_Spline [ Subroutines ]

[ Top ] [ histMC ] [ Subroutines ]

NAME

subroutine **WriteHistMC_Spline**(H,file,nPoints)

PURPOSE

Write out the histogram.

The binning is subdivided into "nPoints" points per bin, where every point is calculated via cubic spline interpolation. (Default: nPoints=5)

INPUTS

- type(histogram) :: H -- Histogramm to be used
- integer :: iFile -- File number output to redirect
- integer :: nPoints -- number of sub-points [OPTIONAL]

OUTPUT

write to file number

cf. WriteHist

NOTES

The Histogram Data is not affected!!!

## histMC/WriteHistMC_Gauss [ Subroutines ]

[ Top ] [ histMC ] [ Subroutines ]

NAME

subroutine **WriteHistMC_Gauss** (H, file, width_in, mul)

PURPOSE

Write out the histogram, convoluted with a gaussian distribution.

INPUTS

- type(histogram) :: H -- Histogramm to be used
- character*(*) :: file -- name of file to open and close
- real, optional :: width_in -- width of gaussian
- real, optional :: mul -- factor to multiply

OUTPUT

write to file

NOTES

The histogram data is not affected!!!

## histMC/ReadHistMC [ Functions ]

[ Top ] [ histMC ] [ Functions ]

NAME

function **ReadHistMC** (H, file, w) result (success)

PURPOSE

Read in a histogram from a file.

INPUTS

- type(histogramMC) :: H -- Histogram to be used
- character*(*) :: file -- name of file to read
- real, optional, intent(in) :: w -- optional weigting factor

OUTPUT

- H is changed
- return value indicates success or failure

NOTES

Only data points are read (no under-/overflow etc).

## histMC/sumHistMC [ Subroutines ]

[ Top ] [ histMC ] [ Subroutines ]

NAME

subroutine **sumHistMC** (A, B, w)

PURPOSE

Perform a summation of two histograms: A = A + B. If a weight 'w' is given, do a weighted summation: A = A + w*B

INPUTS

- type(histogramMC) :: A, B -- Histograms to be used
- real, optional, intent(in) :: w -- optional weighting factor

OUTPUT

A is changed.

## histMC/DumpHistMC [ Subroutines ]

[ Top ] [ histMC ] [ Subroutines ]

NAME

subroutine **DumpHistMC**(H,file,iFile, add,mul)

PURPOSE

Write all the histogram information unformatted (i.e. binary) to a file

INPUTS

- type(histogramMC) :: H -- Histogramm to be used
- character*(*) :: file -- name of file to open and close
- integer,OPTIONAL :: iFile -- File number output to redirect [OPTIONAL]
- real :: add -- factor to add [OPTIONAL]
- real :: mul -- factor to multiply [OPTIONAL]

OUTPUT

H is written UNFORMATTED to the given file

## histMC/FetchHistMC [ Subroutines ]

[ Top ] [ histMC ] [ Subroutines ]

NAME

subroutine **FetchHistMC**(H,file,iFile, add,mul,flagOK)

PURPOSE

Read in all the histogram information previously dumped unformatted (i.e. binary) to a file

INPUTS

- character*(*) :: file -- name of file to open and close
- integer,OPTIONAL:: iFile -- File number input to redirect [OPTIONAL]

OUTPUT

- type(histogramMC) :: H -- Histogramm to be used
- real :: add -- factor to add [OPTIONAL]
- real :: mul -- factor to multiply [OPTIONAL]
- logical :: flagOK -- flag, if reading was okay [OPTIONAL]

H is read UNFORMATTED from the given file. Sizes are calculated as in CreateHist, also memory is allocated.

NOTES