File: create_mars_struct.pl

package info (click to toggle)
eccodes 2.44.2-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 150,248 kB
  • sloc: cpp: 163,056; ansic: 26,308; sh: 21,602; f90: 6,854; perl: 6,363; python: 5,087; java: 2,226; javascript: 1,427; yacc: 854; fortran: 543; lex: 359; makefile: 285; xml: 183; awk: 66
file content (87 lines) | stat: -rwxr-xr-x 2,556 bytes parent folder | download | duplicates (7)
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
#!/usr/local/bin/perl56 -I/usr/local/lib/metaps/perl
use strict;
use File::Path ;
use File::Copy;
use DBI;
use Data::Dumper;

my $db="param";
my $host="grib-param-db-prod.ecmwf.int";
my $user="ecmwf_ro";
my $pass="ecmwf_ro";
my $filename; my $filebase; my $out; my $conceptDir;
my $query; my $q; my $qh;

my $dbh  = DBI->connect("dbi:mysql(RaiseError=>1):database=$db;host=$host",$user,$pass) or die $DBI::errstr;

my $table;
my $number;
my $query="select id,shortName from param";
my %grib1=();
my $name; my $value; my $centre;

my $qh=$dbh->prepare($query);
$qh->execute();
$query="select grib.centre,attribute.name,grib.attribute_value,param_version 
		from grib,attribute where edition=1 and grib.param_id=? 
		 and ( grib.attribute_id=3 or grib.attribute_id=1) and attribute.id=grib.attribute_id  
		order by grib.centre,param_version,attribute_id";
my $qh1=$dbh->prepare($query);
my %values;
my %pvalues;
my $mars;

while (my ($paramId,$shortName)=$qh->fetchrow_array )
{
	die "$paramId" unless($shortName);
	if ($shortName =~ /\w+/ ) {
		push @{$values{$shortName}},$paramId;
		push @{$pvalues{$paramId}},$shortName;
	}

	$qh1->execute($paramId);
	%grib1=();
	my $centre_last="";
	my $param_version;

	while ( ($centre,$name,$value,$param_version)=$qh1->fetchrow_array ) {
		if (join(":",$centre,$param_version) ne $centre_last) {
			$centre_last=join(":",$centre,$param_version);
			if (exists $grib1{"indicatorOfParameter"} && exists $grib1{"table2Version"}) {
				my $mars=$grib1{"indicatorOfParameter"}.".".$grib1{"table2Version"};
				push @{$values{$mars}},$paramId;
				push @{$pvalues{$paramId}},$mars;
				%grib1=();
			}
		}
		$grib1{$name}=$value;	
	}

	if (exists $grib1{"indicatorOfParameter"} && exists $grib1{"table2Version"}) {
		my $mars=$grib1{"indicatorOfParameter"}.".".$grib1{"table2Version"};
		push @{$values{$mars}},$paramId;
		push @{$pvalues{$paramId}},$mars;
	}
}

open(my $mars_param_out,"> mars_param.table")
                or die "unable to open mars_param.table: $!";

foreach my $k ( sort keys %values ) {
	print $mars_param_out "$k ";
	print $mars_param_out join(" ", sort { $a <=> $b } @{$values{$k}});
	print $mars_param_out " | \n";
}

close $mars_param_out or die " mars_param.table: $!";
 
open(my $param_id_out,"> param_id.table")
                or die "unable to open param_id.table: $!";

foreach my $k ( sort keys %pvalues ) {
	print $param_id_out "$k ";
	print $param_id_out join(" ", sort { $a <=> $b } @{$pvalues{$k}});
	print $param_id_out " | \n";
}

close $param_id_out or die "param_id.table: $!";