1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136
|
package Demeter::Plugins::Beamlines::X11A;
use File::Basename;
use File::Spec;
use Demeter::Constants qw($HC);
my %months = (Jan=>1, Feb=>2, Mar=>3, Apr=>4, May=>5, Jun=>6, Jul=>7, Aug=>8, Sep=>9, Oct=>10, Nov=>11, Dec=>12);
sub is {
my ($class, $data, $file) = @_;
return 0 if not ($INC{'Xray/XDI.pm'});
open(my $fh, '<', $file);
my $first = <$fh>;
## this IS an XDAC file
if ($first =~ m{NSLS/X11 EDC-(\d+)\.(\d+)}) {
$data->xdi(Xray::XDI->new()) if not $data->xdi;
if (exists $INC{'Xray/XDI.pm'}) {
my $ver = (defined($Xray::XDI::VERSION)) ? $Xray::XDI::VERSION : '0';
$data->xdi->xdi_version($ver);
} else {
$data->xdi->xdi_version('-1');
};
$data->xdi->extra_version(sprintf("EDC/%s.%s", $1, $2));
$data->xdi->set_item('Facility', 'name', 'NSLS');
$data->xdi->set_item('Facility', 'xray_source', 'bend magnet');
$data->xdi->set_item('Beamline', 'collimation', 'none');
$data->xdi->set_item('Beamline', 'focusing', 'none');
$data->xdi->set_item('Beamline', 'harmonic_rejection', 'detuned mono');
$data->xdi->set_item('Beamline', 'name', 'X11A');
$data->xdi->set_item('Mono', 'name', 'Si(111)');
$data->xdi->set_item('Mono', 'd_spacing', 3.134542);
$data->xdi->set_item('Mono', 'stpdeg', 6400);
if ($first =~ m{(\d+)-(\w{3})-(\d+)\s+(\d+):(\d+):(\d+)}) {
my $year = 1900+$3;
my $month = $months{$2};
my $day = $1;
my $time = sprintf("%d-%2.2d-%2.2d%s%2.2d:%2.2d:%2.2d", $year, $month, $day, 'T', $4, $5, $6);
$data->xdi->set_item('Scan', 'start_time', $time); # #1
};
if ($first =~ m{ENERGY=(\d)\.(\d+)}) {
$data->xdi->set_item('Facility', 'energy', sprintf("%d.%d GeV", $1, $2));
};
my $second = <$fh>;
chomp $second;
$data->xdi->push_comment($second);
my $flag = 0;
my $remove_ifeffit_comments = 0;
FILE: foreach my $li (<$fh>) {
chomp $li;
next if ($li =~ m{\A\s*\z});
my @line = split(" ", $li);
SWITCH: {
($li =~ m{\AE0=\s+([\d.]+)}) and do {
$data->xdi->set_item('Scan', 'edge_energy', $1);
last SWITCH;
};
($li =~ m{HC/2D=\s+([\d.]+)\s+STPDEG=(\d+).*FOCUS=(\w)\s+TRANSLT=(\w)}) and do {
$data->xdi->set_item('Mono', 'd_spacing', sprintf("%.6f", $HC/$1/2));
$data->xdi->set_item('Mono', 'stpdeg', $2);
$data->xdi->set_item('Beamline', 'focusing', Demeter->yesno($3));
$data->xdi->set_item('Beamline', 'table_translation', Demeter->yesno($4));
last SWITCH;
};
## put several useful and readily intepretable parts of the header into the EDC family
($li =~ m{\ASRB=}) and do {
$data->xdi->set_item('EDC', 'SRB', join(" ", @line[1..$#line]));
last SWITCH;
};
($li =~ m{\ADEL=}) and do {
$data->xdi->set_item('EDC', 'DEL', join(" ", @line[1..$#line]));
last SWITCH;
};
($li =~ m{\AGAINS}) and do {
$data->xdi->set_item('EDC', 'GAINS', join(" ", @line[1..$#line]));
last SWITCH;
};
($li =~ m{\AOFFSETS}) and do {
$data->xdi->set_item('EDC', 'OFFSETS', join(" ", @line[1..$#line]));
last FILE;
};
};
};
close $fh;
$data->clear_ifeffit_titles if ($remove_ifeffit_comments);
$data->beamline_identified(1);
return 1;
## this IS NOT an X11A file
} else {
close $fh;
return 0;
};
};
1;
=head1 NAME
Demeter::Plugin::Beamlines::X11A - beamline recognition plugin for files from pre-XDAC X11A
=head1 VERSION
This documentation refers to Demeter version 0.9.26.
=head1 SYNOPSIS
This plugin recognizes files measured using EDC, the long-lost data
acquisition program at NSLS X11A.
For details about Demeter beamline recognition plugins, see
L<Demeter::Data::Beamlines>.
For information about the XAS Data Interchange format, see
L<https://github.com/XraySpectroscopy/XAS-Data-Interchange>
=head1 AUTHOR
Bruce Ravel, L<http://bruceravel.github.io/home>
http://bruceravel.github.io/demeter
=cut
|