Skip to content

implement match stats at first wire #65

@github-actions

Description

@github-actions

if 'bmag_x' in self.output and 'bmag_y' in self.output:

nbmag = np.sqrt( self.output['bmag_x'] * self.output['bmag_y'] )

bmag_emit_err = nemit*nbmag * (

(self.output['norm_emit_x_err']/self.output['norm_emit_x'])**2 +

(self.output['norm_emit_y_err']/self.output['norm_emit_y'])**2 +

(self.output['bmag_x_err']/self.output['bmag_x'])**2 +

(self.output['bmag_y_err']/self.output['bmag_y'])**2)**0.5

self.output['bmag_emit'] = nemit * nbmag

self.output['bmag_emit_err'] = bmag_emit_err

# TODO: implement match stats at first wire

            res = estimate_sigma_mat_multiwire(self.wire_rmat, bs, bs_err, weights, self.out_dict[f'locations'],
                                               dim=dim, plot=self.plot, verbose=self.verbose)

            # Add all results
            print(res)
            self.output.update(res)

            # Skip further calcs if there was an error
            if res[f'error_{dim}']:
                continue

            if self.calc_bmag:
                # TODO: implement match at first wire
                # if dim == 'x':
                #     sig_11 = res['screen_sigma_11']
                #     sig_12 = res['screen_sigma_12']
                #     sig_22 = res['screen_sigma_22']
                #
                # else:
                #     sig_11 = res['screen_sigma_33']
                #     sig_12 = res['screen_sigma_34']
                #     sig_22 = res['screen_sigma_44']
                # self.sig_mat_screen[dim] = [sig_11, sig_12, sig_22]
                #
                # beta_rel_err = res[f'beta_{dim}_rel_err']
                # alpha_rel_err = res[f'alpha_{dim}_rel_err']
                #
                # self.beta_err = beta_rel_err
                # self.alpha_err = alpha_rel_err
                #
                # bmag_calc_res = self.get_twiss_bmag(dim=dim)
                # # Get bmag and bmag_err
                # self.output[f'screen_bmag{dim}'] = bmag_calc_res[0]
                # self.output[f'screen_bmag{dim}_err'] = bmag_calc_res[1]
                print("Match not implemented for multiwire scan yet.")
                pass

        # get geometric mean if possible
        if (not self.output['error_x']) and (not self.output['error_y']) :
            self.get_gmean_emit()

        if self.save_runs:
            self.save_run()

        return self.out_dict

    def get_twiss_bmag(self, dim='x'):
        '''Not Implemented'''
        # TODO: implement match at first wire
        # sig_11 = self.sig_mat_screen[dim][0]
        # sig_12 = self.sig_mat_screen[dim][1]
        # sig_22 = self.sig_mat_screen[dim][2]
        #
        # # twiss0 in x or y AT THE SCREEN
        # beta0, alpha0 = self.twiss0[dim][1], self.twiss0[dim][2]
        #
        # # return dict of emit, beta, alpha, bmag
        # twiss = twiss_and_bmag(sig_11, sig_12, sig_22,
        #                        self.beta_err, self.alpha_err,
        #                        beta0=beta0, alpha0=alpha0)
        # # Save twiss at screen
        # self.twiss_screen[dim] = [twiss['emit'], twiss['beta'], twiss['alpha']]
        #
        # return twiss['bmag'], twiss['bmag_err'], twiss['min_idx']
        pass

    def get_gmean_emit(self):

        try:
            nemit = np.sqrt( self.output['norm_emit_x'] * self.output['norm_emit_y'] )
            nemit_err = nemit * ( (self.output['norm_emit_x_err']/self.output['norm_emit_x'])**2 +
                                  (self.output['norm_emit_y_err']/self.output['norm_emit_y'])**2 )**0.5

            self.output['sqrt_norm_emit_4d'] = nemit
            self.output['sqrt_norm_emit_4d_err'] = nemit_err

            # TODO: implement match stats at first wire
            # if 'bmag_x' in self.output and 'bmag_y' in self.output:
            #     nbmag = np.sqrt( self.output['bmag_x'] * self.output['bmag_y'] )
            #     bmag_emit_err = nemit*nbmag * (
            #         (self.output['norm_emit_x_err']/self.output['norm_emit_x'])**2 +
            #         (self.output['norm_emit_y_err']/self.output['norm_emit_y'])**2 +
            #         (self.output['bmag_x_err']/self.output['bmag_x'])**2 +
            #         (self.output['bmag_y_err']/self.output['bmag_y'])**2)**0.5
            #     self.output['bmag_emit'] = nemit * nbmag
            #     self.output['bmag_emit_err'] = bmag_emit_err

        except TypeError:
            self.output['sqrt_norm_emit_4d'] = np.nan
            self.output['sqrt_norm_emit_4d_err'] = np.nan
            self.output['bmag_emit'] = np.nan
            self.output['bmag_emit_err'] = np.nan

    def save_run(self):
        save_emit_run(self.out_dict, path=self.config_dict['savepaths']['fits'])

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions