docs: def align_images(self, n_particles=10, n_iterations=10, lowerLimit=-0.2, upperLimit=0.2, threadCount=1,
                       compute_bands=None):
          """
          aligns the coordinate systems of different exposures within a fixed model parameterisation by executing a PSO
          with relative coordinate shifts as free parameters
  
          :param n_particles: number of particles in the Particle Swarm Optimization
          :param n_iterations: number of iterations in the optimization process
          :param lowerLimit: lower limit of relative shift
          :param upperLimit: upper limit of relative shift
          :param verbose: bool, print statements
          :param compute_bands: bool list, if multiple bands, this process can be limited to a subset of bands
          :return:
          """
          kwargs_model = self._updateManager.kwargs_model
          param_class = self._updateManager.param_class(self._lens_temp)
          lens_updated = param_class.update_lens_scaling(self._cosmo_temp, self._lens_temp)
          source_updated = param_class.image2source_plane(self._source_temp, lens_updated)
          if compute_bands is None:
              compute_bands = [True] * len(self.multi_band_list)
  
          for i in range(len(self.multi_band_list)):
              if compute_bands[i] is True:
                  kwargs_data = self.multi_band_list[i][0]
                  kwargs_psf = self.multi_band_list[i][1]
                  kwargs_numerics = self.multi_band_list[i][2]
                  alignmentFitting = AlignmentFitting(kwargs_data, kwargs_psf, kwargs_numerics, kwargs_model, lens_updated, source_updated,
                                                          self._lens_light_temp, self._ps_temp)
  
                  kwargs_data, chain = alignmentFitting.pso(n_particles=n_particles, n_iterations=n_iterations,
                                                            lowerLimit=lowerLimit, upperLimit=upperLimit,
                                                            threadCount=threadCount, mpi=self._mpi,
                                                            print_key='Alignment fitting for band %s ...' % i)
                  print('Align completed for band %s.' % i)
                  print('ra_shift: %s,  dec_shift: %s' %(kwargs_data['ra_shift'], kwargs_data['dec_shift']))
                  self.multi_band_list[i][0] = kwargs_data
          return 0