step = args.step #Only calculate once all particles are present.
in_loop = True
with open(args.list_of_directories) as f:
  directories = [line.rstrip() for line in f]

trials_step_size = 10
last_trials_step = int(math.floor(len(directories)/trials_step_size))
for i in range(1,last_trials_step):
  number_trials = i*trials_step_size
  trial_dirs = random.sample(directories,number_trials)
  sum_covariance_matrix = MyEditableCovarianceMatrix()
  mean_phase_volume=Phase6DVolume(mass=mass_of_macroparticle)
  for directory in trial_dirs:
    cov_matrix = MyEditableCovarianceMatrix()
    cov_matrix.readCovarianceMatrix(os.path.join(directory,str(args.step)+"_cov_matrix.txt"))
    sum_covariance_matrix.cov_matrix += cov_matrix.cov_matrix
    mean_phase_volume.injectFile(os.path.join(directory,str(args.step)+"_mean.txt"),mass=mass_of_macroparticle)
  sum_covariance_matrix.cov_matrix = sum_covariance_matrix.cov_matrix/len(mean_phase_volume)
  #sum_covariance_matrix.printCovarianceMatrix()
  det_cov_matrix = sum_covariance_matrix.getSubDeterminant()
  ref_cov_matrix = mean_phase_volume.getCovarianceMatrix()
  det_ref_cov_matrix = ref_cov_matrix.getSubDeterminant()
  #ref_cov_matrix.printCovarianceMatrix()
  log_emittance = np.log10(det_ref_cov_matrix) + (args.number_of_particles-1)*np.log10(det_cov_matrix)
  output = []
  output.append(number_trials)
  output.append(det_ref_cov_matrix)
  output.append(det_cov_matrix)
  output.append(log_emittance)
  print ",".join([str(o) for o in output])