Lab-Measurement
view release on metacpan or search on metacpan
lib/Lab/Moose/Instrument/OI_Mercury/Magnet.pm view on Meta::CPAN
);
$value = sprintf( "%.4f", $value );
my $rv = $self->oi_setter(
cmd => "SET:DEV:$channel:PSU:SIG:CSET",
value => $value, %args
);
$rv =~ s/A$//;
return $rv;
}
sub oim_get_current_setpoint {
my ( $self, $channel, %args ) = validated_magnet_getter( \@_ );
my $result
= $self->oi_getter( cmd => "READ:DEV:$channel:PSU:SIG:CSET", %args );
$result =~ s/A$//;
return $result;
}
sub oim_set_field_setpoint {
my $self = shift;
my %args = @_;
my $value = delete $args{value};
$value = $value * $self->ATOB();
my $rv = $self->oim_set_current_setpoint( value => $value, %args );
$rv = $rv / $self->ATOB();
return sprintf( "%.6f", $rv );
}
sub oim_get_field_setpoint {
my $self = shift;
my $rv = $self->oim_get_current_setpoint(@_);
return $rv / $self->ATOB();
}
sub oim_get_fieldconstant {
my ( $self, $channel, %args ) = validated_magnet_getter( \@_ );
return $self->oi_getter( cmd => "READ:DEV:$channel:PSU:ATOB", %args );
}
sub field_step {
my $self = shift;
return 1e-4 / $self->oim_get_fieldconstant(@_);
}
############### XPRESS interface #####################
has device_settings =>
( is => 'ro', isa => 'HashRef', builder => 'build_device_settings' );
has max_field_deviation => ( is => 'ro', isa => 'Num', default => 0.0001 );
sub build_device_settings {
return {
has_switchheater => 0, # for now
};
}
sub get_field {
my $self = shift;
return $self->oim_get_field(@_);
}
sub get_persistent_field {
my $self = shift;
return $self->oim_get_persistent_field(@_);
}
sub sweep_to_field {
my ( $self, %args ) = validated_getter(
\@_,
target => { isa => 'Num' },
rate => { isa => 'Num' },
);
my $point = delete $args{target};
my $rate = delete $args{rate};
$self->config_sweep( point => $point, rate => $rate, %args );
$self->trg(%args);
$self->wait(%args);
return $self->oim_get_field(%args);
}
sub config_sweep {
my ( $self, %args ) = validated_hash(
\@_,
point => { isa => 'Num' },
rate => { isa => 'Num' },
);
my $target = delete $args{point};
my $rate = delete $args{rate};
my $setrate = $self->oim_set_field_sweeprate( value => $rate, %args );
my $setpoint = $self->oim_set_field_setpoint( value => $target, %args );
if ( $self->verbose() ) {
say "config_sweep: setpoint: $setpoint (T), rate: $setrate (T/min)";
}
}
# In go_to_next_step, the XPRESS will call the sequence
# config_sweep(...);
# trg();
# wait();
sub trg {
( run in 3.069 seconds using v1.01-cache-2.11-cpan-75ffa21a3d4 )