# Setup logger
try:
  reconstruction.logger_created
except AttributeError:
  if not os.path.exists(io.log_dir):
    os.mkdir(io.log_dir)
    open(io.log_dir+'/CXP.log', 'w')
    close(io.log_dir+'/CXP.log')
    os.chown(io.log_dir+'/CXP.log', os.getlogin())
  log = logging.getLogger('CXPhasing')
  log.setLevel(logging.DEBUG)
  # Create a file handler for debug level and above
  fh = logging.handlers.RotatingFileHandler(io.log_dir+'/CXP.log', maxBytes = 1e6, backupCount=5)
  fh.setLevel(logging.DEBUG)
  # Create console handler with higher log level
  ch = logging.StreamHandler()
  ch.setLevel(logging.INFO)
  # create formatter and add it to the handlers
  file_formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
  console_formatter = logging.Formatter('%(name)-12s: %(levelname)-8s %(message)s')
  ch.setFormatter(console_formatter)
  fh.setFormatter(file_formatter)
  reconstruction.logger_created = True

# Derived quanitites
p = preprocessing.desired_array_shape
ob_p = preprocessing.object_array_shape
dx_s = CXU.energy_to_wavelength(experiment.energy)*experiment.z/(p*experiment.dx_d)
if not os.path.exists(io.log_dir):
    os.mkdir(io.log_dir)
    open(io.log_dir + '/CXP.log', 'w')
    close(io.log_dir + '/CXP.log')
    os.chown(io.log_dir + '/CXP.log', os.getlogin())
log = logging.getLogger('CXPhasing')
log.setLevel(logging.DEBUG)
# Create a file handler for debug level and above
fh = logging.handlers.RotatingFileHandler(io.log_dir + '/CXP.log',
                                          maxBytes=1e6,
                                          backupCount=5)
fh.setLevel(logging.DEBUG)
# Create console handler with higher log level
ch = logging.StreamHandler()
ch.setLevel(logging.INFO)
# create formatter and add it to the handlers
file_formatter = logging.Formatter(
    '%(asctime)s - %(name)s - %(levelname)s - %(message)s')
console_formatter = logging.Formatter(
    '%(name)-12s: %(levelname)-8s %(message)s')
ch.setFormatter(console_formatter)
fh.setFormatter(file_formatter)
log.addHandler(ch)
log.addHandler(fh)

# Derived quanitites
p = preprocessing.desired_array_shape
ob_p = preprocessing.object_array_shape
dx_s = CXU.energy_to_wavelength(
    experiment.energy) * experiment.z / (p * experiment.dx_d)