### TABLE OF CONTENTS

- 1. /histMC_avg
- 1.1. histMC_avg/histMC_avg
- 1.1.1. histMC_avg/histogramMC_avg
- 1.1.2. histMC_avg/CreateHistMC_avg
- 1.1.3. histMC_avg/AddHistMC_avg
- 1.1.4. histMC_avg/CopyDesc_avg
- 1.1.5. histMC_avg/WriteHeader
- 1.1.6. histMC_avg/WriteHistMC_avg
- 1.1.7. histMC_avg/ReadHistMC_avg
- 1.1.8. histMC_avg/sumHistMC_avg

## /histMC_avg [ Modules ]

NAME

module **histMC_avg**

PURPOSE

This module implements a type 'histogramMC_avg' for 1D Histograms with multiple channels. It is similar to the type 'histogramMC' but in addition stores event counts for each bin and channel. In the end it outputs the average of the stored quantity over all entries in a particular bin. This is useful e.g. for the flow analysis in the module 'HeavyIonAnalysis'.

## histMC_avg/histogramMC_avg [ Types ]

[ Top ] [ histMC_avg ] [ Types ]

NAME

type **histogramMC_avg**

PURPOSE

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

SOURCE

type, public ::histogramMC_avgreal :: xMin, xMax, xBin ! smallest/largest x-value & bin width real :: xExtreme(2) ! extremes of used x-values (min,max) character*(NameLength) :: Name, xDesc ! histogram name and description of x-value character*(NameLength), allocatable :: yDesc(:) ! description of y-channels real, allocatable :: yVal(:,:) ! histogramm values: (x), (y1,y2,y3,...) ! bin 0,-1 : underflow/overflow !!! integer, allocatable :: counts(:,:) ! counts: (x), (count1,count2,count3,...) ! bin 0,-1 : underflow/overflow counts !!! logical :: initialized = .false. ! flag to indicate whether the histogram has been initialized end typehistogramMC_avg

## histMC_avg/CreateHistMC_avg [ Subroutines ]

[ Top ] [ histMC_avg ] [ Subroutines ]

NAME

subroutine **CreateHistMC_avg** (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_avg):: 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_avg/histMC_avg [ Subroutines ]

[ Top ] [ histMC_avg ] [ Subroutines ]

NAME

subroutine RemoveHistMC_avg(H)

PURPOSE

Free the allocated memory.

INPUTS

- type(histogramMC_avg) :: H -- Histogram to be used

OUTPUT

H is changed.

## histMC_avg/AddHistMC_avg [ Subroutines ]

[ Top ] [ histMC_avg ] [ Subroutines ]

NAME

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

PURPOSE

Add the weight y to the given histogram at the given x-value and channel number, and increment the count for that bin.

INPUTS

- type(histogramMC_avg) :: 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_avg/CopyDesc_avg [ Subroutines ]

[ Top ] [ histMC_avg ] [ Subroutines ]

NAME

subroutine **CopyDesc_avg** (H_dest, H_src)

PURPOSE

Copy the channel descriptions from one histogram to another.

INPUTS

- type(histogramMC_avg) :: H_dest -- destination Histogramm
- type(histogramMC_avg) :: H_src -- source Histogram

OUTPUT

H_dest is changed

## histMC_avg/WriteHeader [ Subroutines ]

[ Top ] [ histMC_avg ] [ Subroutines ]

NAME

logical function **WriteHeader** (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_avg) :: H -- Histogramm
- integer :: iFile -- file number to write to
- real, optional :: mul
- logical,optional :: FinalLineBreak -- .false.= No line break after the header

OUTPUT

## histMC_avg/WriteHistMC_avg [ Subroutines ]

[ Top ] [ histMC_avg ] [ Subroutines ]

NAME

subroutine **WriteHistMC_avg**(H,file,mul)

PURPOSE

Write out the histogram. The entries are multiplied by 'mul'.

INPUTS

- type(histogramMC_avg) :: H -- Histogramm to be used
- character*(*) :: file -- name of file to open and close
- real :: mul -- factor to multiply [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 (followed by their counts)

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

NOTES

The Histogram data is not affected.

## histMC_avg/ReadHistMC_avg [ Functions ]

[ Top ] [ histMC_avg ] [ Functions ]

NAME

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

PURPOSE

Read in a histogram from a file.

INPUTS

- type(histogramMC_avg) :: 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_avg/sumHistMC_avg [ Subroutines ]

[ Top ] [ histMC_avg ] [ Subroutines ]

NAME

subroutine **sumHistMC_avg** (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_avg) :: A, B -- Histograms to be used
- real, optional, intent(in) :: w -- optional weighting factor

OUTPUT

A is changed.