`To represent each set of measurements, we choose the structure
`

type meas_set real, dimension(:), pointer :: data integer :: dim real :: mean, dev end type meas_set

`Suppose we have a total of N_Meas data sets.
For reasons that will become clear later, we want to work with pointers
to objects of type Meas_Set; thus, we construct
`

type ptr_meas_set type(meas_set), pointer :: v end type ptr_meas_set type(ptr_meas_set), dimension(n_meas) :: mx type(ptr_meas_set) :: tmp

`We can read in the N_Meas measurement sets as follows.
If there are still measured
data sets to be read in, we allocate an object of the type
Ptr_Meas_Set, then read in the number of points dim,
allocate the vector data of dimension dim, read
the measured values and store them in data.
`

do i=1,n_meas allocate( mx(i)%v ) if (ierr.ne.0) .... ! some action read(10,10) mx(i)%v%dim ! no. of data points allocate( mx(i)%v%data(mx(i)%v%dim), stat=ierr) ! allocate data vector if (ierr.ne.0) .... ! some action read(10,10) mx(i)%v%data ! read data end do

`After creating the storage and reading in the data, we
can compute the mean and the deviation for each data set
`

do i=1,n_meas ! compute the mean mx(i)%v%mean = 0.0 do j=1,mx(i)%v%dim mx(i)%v%mean = mx(i)%v%mean + mx(i)%v%data(j) end do mx(i)%v%mean = mx(i)%v%mean/mx(i)%v%dim ! compute the deviation mx(i)%v%dev = 0.0 do j=1,mx(i)%v%dim mx(i)%v%dev = mx(i)%v%dev + (mx(i)%v%data(j)-mx(i)%v%mean)**2 end do mx(i)%v%dev = sqrt(mx(i)%v%dev/mx(i)%v%dim) end do

`The simplest sorting algorithm might look like
`

do k=1,n_meas do i=1,n_meas-1 if( mx(i)%v%mean > mx(i+1)%v%mean ) then tmp = mx(i+1) mx(i+1) = mx(i) mx(i) = tmp end if end do end do