Changeset 28484 for branches/pap/ippScripts/scripts/automate_stacks.pl
- Timestamp:
- Jun 24, 2010, 2:59:09 PM (16 years ago)
- Location:
- branches/pap
- Files:
-
- 2 edited
-
. (modified) (1 prop)
-
ippScripts/scripts/automate_stacks.pl (modified) (24 diffs)
Legend:
- Unmodified
- Added
- Removed
-
branches/pap
- Property svn:mergeinfo changed
-
branches/pap/ippScripts/scripts/automate_stacks.pl
r27938 r28484 17 17 my $missing_tools = 0; 18 18 my $chiptool = can_run('chiptool') or (warn "Can't find chiptool" and $missing_tools = 1); 19 my $dqstatstool = can_run('dqstatstool') or (warn "Can't find dqstatstool" and $missing_tools = 1); 19 20 my $warptool = can_run('warptool') or (warn "Can't find warptool" and $missing_tools = 1); 20 21 my $stacktool= can_run('stacktool') or (warn "Can't find stacktool" and $missing_tools = 1); 21 22 my $difftool = can_run('difftool') or (warn "Can't find difftool" and $missing_tools = 1); 23 my $dettool = can_run('dettool') or (warn "Can't find dettool" and $missing_tools = 1); 22 24 my $ppConfigDump = can_run('ppConfigDump') or (warn "Can't find ppConfigDump" and $missing_tools = 1); 23 25 my $mkBTpcontrol = can_run('make_burntool_pcontrol.pl') or (warn "Can't find make_burntool_pcontrol.pl" and $missing_tools = 1); … … 27 29 exit($PS_EXIT_CONFIG_ERROR); 28 30 } 29 30 # my @filter_list = ('g.00000','r.00000','i.00000','z.00000','y.00000');31 # my @target_list = ('CMB','M31','MD01','MD02','MD03','MD04','MD05','MD06','MD07','MD08','MD09','MD10',32 # 'STS','SVS','SweetSpot','ThreePi');33 # my %tessID_list = ('CMB' => 'RINGS.V0', 'M31' => 'M31', 'MD01' => 'MD01', 'MD02' => 'MD02',34 # 'MD03' => 'MD03', 'MD04' => 'MD04', 'MD05' => 'MD05', 'MD06' => 'MD06',35 # 'MD07' => 'MD07', 'MD08' => 'MD08', 'MD09' => 'MD09', 'MD10' => 'MD10',36 # 'STS' => 'STS', 'SVS' => 'RINGS.V0', 'SweetSpot' => 'RINGS.V0', 'ThreePi' => 'RINGS.V0');37 # my %comment_list = ('CMB' => 'CMB_Cold%', 'M31' => 'M31%', 'MD01' => 'MD01%', 'MD02' => 'MD02%',38 # 'MD03' => 'MD03%', 'MD04' => 'MD04%', 'MD05' => 'MD05%', 'MD06' => 'MD06%',39 # 'MD07' => 'MD07%', 'MD08' => 'MD08%', 'MD09' => 'MD09%', 'MD10' => 'MD10%',40 # 'STS' => 'Stellar Transit%', 'SVS' => 'SVS%', 'SweetSpot' => 'Sweetspot%', 'ThreePi' => 'ThreePi%');41 # my %stackable_list = ('CMB' => 0, 'M31' => 1, 'MD01' => 1, 'MD02' => 1,42 # 'MD03' => 1, 'MD04' => 1, 'MD05' => 1, 'MD06' => 1,43 # 'MD07' => 1, 'MD08' => 1, 'MD09' => 1, 'MD10' => 1,44 # 'STS' => 1, 'SVS' => 0, 'SweetSpot' => 0, 'ThreePi' => 0);45 # my $retention_time = 9000; # days.46 47 31 48 32 my $db; … … 59 43 my ( $check_registration, $define_burntool, $queue_burntool, $check_chips, $queue_chips); 60 44 my ( $check_stacks, $queue_stacks, $check_diffs, $queue_diffs, $clean_old); 45 my ( $check_detrends, $queue_detrends, $check_dqstats, $queue_dqstats); 61 46 62 47 GetOptions( … … 81 66 'check_stacks' => \$check_stacks, 82 67 'queue_stacks' => \$queue_stacks, 68 'check_detrends' => \$check_detrends, 69 'queue_detrends' => \$queue_detrends, 70 'check_dqstats' => \$check_dqstats, 71 'queue_dqstats' => \$queue_dqstats, 83 72 'check_diffs' => \$check_diffs, 84 73 'queue_diffs' => \$queue_diffs, … … 105 94 --check_stacks Confirm that stacks can be built. 106 95 --queue_stacks Issue stacktool commands to queue stacks. 96 --check_detrends Confirm that detrend verify runs can be built. 97 --queue_detrends Issue dettool commands to queue detrend verify runs. 98 --check_dqstats Confirm that dqstats tables can be built. 99 --queue_dqstats Issue dqstatstool commands to queue dqstat tables. 107 100 --check_diffs Confirm that diffs can be done. 108 101 --queue_diffs Issue difftool commands to queue diffs. … … 115 108 ) unless 116 109 defined $check_registration or defined $define_burntool or defined $queue_burntool or 117 defined $queue_chips or defined $queue_stacks or 118 defined $check_chips or defined $check_stacks or 110 defined $queue_chips or defined $queue_stacks or $queue_detrends or $queue_dqstats or 111 defined $check_chips or defined $check_stacks or $check_detrends or $check_dqstats or 119 112 defined $test_mode or defined $clean_old or defined $check_mode; 120 113 … … 126 119 my %object_list = (); 127 120 my %comment_list= (); 121 my %cleanmods_list = (); 128 122 my %stackable_list = (); 129 123 my %reduction_class = (); 124 my @detrend_list = (); 125 my %dettype_list = (); 126 my %exptype_list = (); 127 my %refID_list = (); 128 my %refIter_list = (); 129 my %detfilter_list = (); 130 my %detmax_list = (); 130 131 my %clean_commands = (); 131 132 my %clean_retention = (); 132 133 my %noclean_list = (); 134 my %clean_alternate = (); 133 135 # Grab the configuration data. 134 136 my $conf_cmd = "$ppConfigDump -dump-recipe NIGHTLY_SCIENCE -"; … … 137 139 unless ($success) { 138 140 $error_code = (($error_code >> 8) or $PS_EXIT_PROG_ERROR); 139 &my_die("Unable to perform ppConfigD Ump: $error_code", $date, $PS_EXIT_SYS_ERROR);141 &my_die("Unable to perform ppConfigDump: $error_code", $date, $PS_EXIT_SYS_ERROR); 140 142 } 141 143 … … 156 158 $clean_retention{$this_mode} = ${ $mentry }{value}; 157 159 } 160 elsif (${ $mentry }{name} eq 'ALTERNATE_CMD') { 161 $clean_alternate{$this_mode} = ${ $mentry }{value}; 162 } 158 163 } 159 164 } 160 # if (${ $entry }{name} eq 'RETENTION_TIME') {161 # $retention_time = ${ $entry }{value};162 # }163 165 elsif (${ $entry }{name} eq 'FILTERS') { 164 166 push @filter_list, ${ $entry }{value}; … … 193 195 $noclean_list{$this_target} = ${ $tentry }{value}; 194 196 } 195 } 196 } 197 } 198 199 200 197 else { 198 if (exists($clean_commands{ ${ $tentry }{name} })) { 199 $cleanmods_list{$this_target}{${ $tentry }{name} } = ${ $tentry }{value}; 200 } 201 } 202 } 203 } 204 elsif (${ $entry }{name} eq 'DETRENDS') { 205 my @detrend_data = @{ ${ $entry }{value} }; 206 my $this_detrend = ''; 207 foreach my $dentry (@detrend_data) { 208 if (${ $dentry }{name} eq 'NAME') { 209 $this_detrend = ${ $dentry }{value}; 210 push @detrend_list, $this_detrend; 211 } 212 elsif (${ $dentry }{name} eq 'DETTYPE') { 213 $dettype_list{$this_detrend} = ${ $dentry }{value}; 214 } 215 elsif (${ $dentry }{name} eq 'EXPTYPE') { 216 $exptype_list{$this_detrend} = ${ $dentry }{value}; 217 } 218 elsif (${ $dentry }{name} eq 'REF_ID') { 219 $refID_list{$this_detrend} = ${ $dentry }{value}; 220 } 221 elsif (${ $dentry }{name} eq 'REF_ITER') { 222 $refIter_list{$this_detrend} = ${ $dentry }{value}; 223 } 224 elsif (${ $dentry }{name} eq 'FILTER') { 225 $detfilter_list{$this_detrend} = ${ $dentry }{value}; 226 } 227 elsif (${ $dentry }{name} eq 'MAX') { 228 $detmax_list{$this_detrend} = ${ $dentry }{value}; 229 } 230 } 231 } 232 } 201 233 202 234 unless(defined($date)) { … … 257 289 unless (defined($test_mode) || defined($check_mode)) { exit(0); } 258 290 } 291 if (defined($check_dqstats) || defined($test_mode)) { 292 $metadata_out{nsState} = 'CHECKDQSTATS'; 293 &execute_dqstats($date,"pretend"); 294 return_metadata($date); 295 unless (defined($test_mode) || defined($check_mode)) { exit(0); } 296 } 297 if (defined($queue_dqstats) || defined($test_mode)) { 298 $metadata_out{nsState} = 'QUEUEDQSTATS'; 299 &execute_dqstats($date); 300 return_metadata($date); 301 unless (defined($test_mode)) { exit(0); } 302 } 303 if (defined($check_detrends) || defined($test_mode) || defined($check_mode)) { 304 $metadata_out{nsState} = 'CHECKDETRENDS'; 305 &execute_detrends($date,"pretend"); 306 return_metadata($date); 307 unless (defined($test_mode) || defined($check_mode)) { exit(0); } 308 } 309 if (defined($queue_detrends)) { 310 $metadata_out{nsState} = 'QUEUEDETRENDS'; 311 &execute_detrends($date); 312 return_metadata($date); 313 exit(0); 314 } 259 315 if (defined($define_burntool) || defined($test_mode)) { 260 316 $metadata_out{nsState} = 'QUEUEBURNING'; … … 347 403 if ($summit_fault) { 348 404 print STDERR "check_summit_copy: $date $exp_name has summit_fault $summit_fault"; 349 if ( $exp_type ne 'OBJECT') {405 if (($exp_type ne 'OBJECT')||($exp_name =~ /^c.*/)) { 350 406 print STDERR " (but I don't care).\n"; 351 407 } … … 357 413 elsif (!$download_state or $download_state eq 'run') { 358 414 print STDERR "check_summit_copy: $date $exp_name has download_state $download_state"; 359 if ( $exp_type ne 'OBJECT') {415 if (($exp_type ne 'OBJECT')||($exp_name =~ /^c.*/)) { 360 416 print STDERR " (but I don't care).\n"; 361 417 } … … 367 423 elsif (!$new_state or $new_state eq 'run' ) { 368 424 print STDERR "check_summit_copy: $date $exp_name has new_state $new_state"; 369 if ( $exp_type ne 'OBJECT') {425 if (($exp_type ne 'OBJECT')||($exp_name =~ /^c.*/)) { 370 426 print STDERR " (but I don't care).\n"; 371 427 } … … 498 554 499 555 my $cmd = "$chiptool"; 500 $cmd .= ' -simple -dbname gpc1 -definebyquery -set_end_stage warp ';556 $cmd .= " -simple -dbname $dbname -definebyquery -set_end_stage warp "; 501 557 $cmd .= " -set_label $label "; 502 558 $cmd .= " -set_workdir $workdir -set_dist_group $dist_group "; … … 612 668 613 669 # 670 # DQstats 671 ################################################################################ 672 673 sub construct_dqstats_cmd { 674 my $date = shift; 675 676 my $select = "-dateobs_end ${date}T23:59:59 "; 677 678 my $cmd = "$dqstatstool"; 679 $cmd .= " -simple -dbname $dbname -definebyquery "; 680 $cmd .= " $select "; 681 $cmd .= " -label %.nightlyscience "; 682 $cmd .= " -set_label dqstats.nightlyscience "; 683 if ($debug == 1) { 684 $cmd .= ' -pretend '; 685 } 686 print STDERR "$cmd\n"; 687 return($cmd); 688 } 689 690 sub pre_dqstats_queue { 691 my $date = shift; 692 693 # my $db = init_gpc_db(); 694 # my $trunc_date = $date; $trunc_date =~ s/-//g; 695 696 # my $where = " label LIKE '%.nightlyscience' AND data_group' "; 697 # my $chip_sth = "SELECT * from chipRun WHERE (state = 'full' OR state = 'new' OR state = 'cleaned') AND $where "; 698 # my $cam_sth = "SELECT * from camRun WHERE state = 'full' AND $where "; 699 700 # my $chip_ref = $db->selectall_arrayref( $chip_sth ); 701 # my $cam_ref = $db->selectall_arrayref( $cam_sth ); 702 703 my $command = construct_dqstats_cmd($date) . ' -pretend '; 704 my ( $success, $error_code, $full_buf, $stdout_buf, $stderr_buf ) = 705 run ( command => $command, verbose => $verbose ); 706 unless ($success) { 707 $error_code = (($error_code >> 8) or $PS_EXIT_PROG_ERROR); 708 &my_die("Unable to perform dqstatstool: $error_code",1,1,,$date, $PS_EXIT_SYS_ERROR); 709 } 710 711 my @input_exposures = split /\n/, (join '', @$stdout_buf); 712 713 return($#input_exposures + 1,1,1); # $#{ $chip_ref } + 1, $#{ $cam_ref } + 1); 714 } 715 716 sub dqstats_queue { 717 my $date = shift; 718 719 my $command = construct_dqstats_cmd($date); 720 my ( $success, $error_code, $full_buf, $stdout_buf, $stderr_buf ) = 721 run ( command => $command, verbose => $verbose ); 722 unless ($success) { 723 $error_code = (($error_code >> 8) or $PS_EXIT_PROG_ERROR); 724 &my_die("Unable to perform dqstatstool: $error_code", 0,0,$date, $PS_EXIT_SYS_ERROR); 725 } 726 return(0); 727 728 } 729 sub execute_dqstats { 730 my $date = shift; 731 my $pretend = shift; 732 my ($Nexposures,$Nchips,$Ncams) = pre_dqstats_queue($date); 733 if ($Nexposures == 0) { 734 print STDERR "execute_dqstats: No exposures on date $date.\n"; 735 } 736 elsif ($Ncams != $Nchips) { 737 print STDERR "execute_dqstats: Not done processing data through camera stage.\n"; 738 } 739 else { 740 unless(defined($pretend)) { 741 dqstats_queue($date); 742 } 743 } 744 } 745 # 746 # Detrend verification 747 ################################################################################ 748 749 sub construct_dettool_cmd { 750 my $date = shift; 751 my $target = shift; 752 753 my ($label,$workdir,$filter,$exp_type,$det_type,$ref_det_id,$ref_iter,$maxN) = get_dettool_parameters($date,$target); 754 755 my $select = "-select_dateobs_begin ${date}T00:00:00 -select_dateobs_end ${date}T23:59:59 "; 756 $date =~ s/-//g; 757 758 my $cmd = "$dettool"; 759 # $cmd .= " -pretend "; 760 $cmd .= " -simple -dbname $dbname -definebyquery -det_type $det_type "; 761 $cmd .= " -mode verify -ref_det_id $ref_det_id -ref_iter $ref_iter "; 762 $cmd .= " $select "; 763 $cmd .= " -inst $camera "; 764 $cmd .= " -select_exp_type $exp_type "; 765 $cmd .= " -select_filter $filter " if defined($filter); 766 $cmd .= " -workdir $workdir "; 767 $cmd .= " -label $label "; 768 if ($maxN > 0) { 769 $cmd .= " -random_subset -random_limit $maxN "; 770 } 771 if ($debug == 1) { 772 $cmd .= ' -pretend '; 773 } 774 print STDERR "$cmd\n"; 775 return($cmd); 776 } 777 778 sub verify_uniqueness_detverify { 779 my $date = shift; 780 my $target = shift; 781 782 my ($label,$workdir,$filter,$exp_type,$det_type,$ref_det_id,$ref_iter,$maxN) = get_dettool_parameters($date,$target); 783 784 my $db = init_gpc_db(); 785 my $sth = "SELECT * FROM detRun WHERE workdir = '$workdir' AND ref_det_id = $ref_det_id AND ref_iter = $ref_iter"; 786 my $data_ref = $db->selectall_arrayref( $sth ); 787 788 return($#{ $data_ref } + 1); 789 } 790 791 sub pre_detrend_queue { 792 my $date = shift; 793 my $target = shift; 794 795 my $command = construct_dettool_cmd($date,$target) . ' -pretend '; 796 my ($success, $error_code, $full_buf, $stdout_buf, $stderr_buf ) = 797 run ( command => $command, verbose => $verbose); 798 unless ($success) { 799 $error_code = (($error_code >> 8) or $PS_EXIT_PROG_ERROR); 800 &my_die("Unable to perform dettool: $error_code", 0,0, $date, $PS_EXIT_SYS_ERROR); 801 } 802 803 my @input_exposures = split /\n/, (join '', @$stdout_buf); 804 return($#input_exposures + 1); 805 } 806 807 sub detrend_queue { 808 my $date = shift; 809 my $target = shift; 810 811 my $command = construct_dettool_cmd($date,$target); 812 my ( $success, $error_code, $full_buf, $stdout_buf, $stderr_buf ) = 813 run ( command => $command, verbose => $verbose); 814 unless ($success) { 815 $error_code = (($error_code >> 8) or $PS_EXIT_PROG_ERROR); 816 &my_die("Unable to perform chiptool: $error_code", 0,0,$date, $PS_EXIT_SYS_ERROR); 817 } 818 $metadata_out{nsState} = 'DETREND_QUEUED'; 819 return(0); 820 821 } 822 sub execute_detrends { 823 my $date = shift; 824 my $pretend = shift; 825 my $exposures = 0; 826 foreach my $target (@detrend_list) { 827 my ($Nexposures) = pre_detrend_queue($date,$target); 828 if ($Nexposures == 0) { 829 print STDERR "execute_detrends: Target $target on $date had no exposures.\n"; 830 next; 831 } 832 $exposures++; 833 unless(defined($pretend)) { 834 detrend_queue($date,$target); 835 } 836 } 837 if ($exposures == 0) { 838 $metadata_out{nsState} = 'DETREND_DROP'; 839 } 840 if (($metadata_out{nsState} eq 'CHECKDETRENDS') && ($exposures > 0)) { 841 $metadata_out{nsState} eq 'QUEUE_DETRENDS'; 842 } 843 } 844 845 # 614 846 # Stacking 615 847 ################################################################################ … … 627 859 my $cmd = "$stacktool"; 628 860 # $cmd .= ' -pretend -simple -dbname gpc1 -definebyquery -min_new 4 '; # Probably silly, but I want to be safe and not overwrite 629 $cmd .= ' -simple -dbname gpc1 -definebyquery ';861 $cmd .= " -simple -dbname $dbname -definebyquery "; 630 862 $cmd .= " -set_label $label -select_label $label "; 631 863 $cmd .= " -set_workdir $workdir -set_dist_group $dist_group "; … … 768 1000 769 1001 my $command = $clean_commands{$mode}; 770 my $retention_time = $clean_retention{$mode}; 1002 my $retention_time; 1003 if (exists($cleanmods_list{$target}{$mode})) { 1004 $retention_time = $cleanmods_list{$target}{$mode}; 1005 } 1006 else { 1007 $retention_time = $clean_retention{$mode}; 1008 } 1009 if ($retention_time <= 0) { 1010 return("no clean","true"); 1011 } 771 1012 772 1013 my ($year,$month,$day) = split /-/,$date; … … 774 1015 hour => 0, minute => 0, second => 0, nanosecond => 0, 775 1016 time_zone => 'Pacific/Honolulu'); 1017 776 1018 $dt->subtract(days => $retention_time); 777 1019 my $cleaning_date = $dt->ymd; … … 779 1021 my ($label,$workdir,$obs_mode,$object,$comment,$tess_id,$dist_group,$data_group,$reduction) = get_tool_parameters($cleaning_date,$target); 780 1022 my $args = $command; 781 $args .= " -dbname gpc1 -updaterun -set_state goto_cleaned -state full -set_label goto_cleaned -label $label -data_group $data_group "; 1023 if ((exists($clean_alternate{$mode})) && ($clean_alternate{$mode})) { 1024 $args .= " -dbname $dbname -updaterun -set_state goto_cleaned -full -set_label goto_cleaned -time_stamp_end $cleaning_date "; 1025 } 1026 else { 1027 $args .= " -dbname $dbname -updaterun -set_state goto_cleaned -state full -set_label goto_cleaned -label $label -data_group $data_group "; 1028 } 782 1029 if ($debug == 1) { 783 1030 $args .= ' -pretend '; … … 790 1037 my $pretend = shift; 791 1038 792 foreach my $mode (keys (%clean_commands)) { 793 foreach my $target (@target_list) { 794 if (exists($noclean_list{$target})) { 1039 foreach my $mode (sort (keys (%clean_commands))) { 1040 if ((exists($clean_alternate{$mode})) && ($clean_alternate{$mode})) { 1041 my ($cleaning_date,$command) = construct_cleantool_args($date,"",$mode); 1042 if ($cleaning_date eq 'no clean') { 795 1043 next; 796 1044 } 797 my ($cleaning_date,$command) = construct_cleantool_args($date,$target,$mode);798 799 1045 print STDERR "$command\n"; 800 1046 if (!(defined($pretend) || $debug == 1)) { … … 808 1054 } 809 1055 } 1056 else { 1057 foreach my $target (@target_list) { 1058 if (exists($noclean_list{$target})) { 1059 next; 1060 } 1061 my ($cleaning_date,$command) = construct_cleantool_args($date,$target,$mode); 1062 if ($cleaning_date eq 'no clean') { 1063 next; 1064 } 1065 print STDERR "$command\n"; 1066 if (!(defined($pretend) || $debug == 1)) { 1067 # print STDERR "BEAR IS DRIVING!?\n"; 1068 my ( $success, $error_code, $full_buf, $stdout_buf, $stderr_buf ) = 1069 run ( command => $command, verbose => $verbose ); 1070 unless ($success) { 1071 $error_code = (($error_code >> 8) or $PS_EXIT_PROG_ERROR); 1072 &my_die("Unable to perform stacktool: $error_code", 0,0,$date, $PS_EXIT_SYS_ERROR); 1073 } 1074 } 1075 } 1076 } 810 1077 } 811 1078 return(0); … … 826 1093 827 1094 my $label = "${target}.nightlyscience"; 828 my $workdir = "neb://\@HOST\@.0/ gpc1/${target}.nt/${workdir_date}";1095 my $workdir = "neb://\@HOST\@.0/${dbname}/${target}.nt/${workdir_date}"; 829 1096 my $obs_mode = $obsmode_list{$target}; 830 1097 my $object = $object_list{$target}; … … 837 1104 } 838 1105 1106 sub get_dettool_parameters { 1107 my $date = shift; 1108 my $target = shift; 1109 my $workdir_date = $date; $workdir_date =~ s%-%/%g; 1110 my $trunc_date = $date; $trunc_date =~ s/-//g; 1111 1112 my $exp_type = $exptype_list{$target}; 1113 my $det_type = $dettype_list{$target}; 1114 my $ref_det_id = $refID_list{$target}; 1115 my $ref_iter = $refIter_list{$target}; 1116 my $det_filter = $detfilter_list{$target}; 1117 my $internal_filter; 1118 if (defined($det_filter)) { 1119 $internal_filter = $det_filter; $internal_filter =~ s/\..*//; 1120 $internal_filter = '.' . $internal_filter; 1121 } 1122 else { 1123 $internal_filter = ''; 1124 } 1125 my $maxN = $detmax_list{$target}; 1126 1127 my $lc_type = lc($exp_type); 1128 my $label = "${lc_type}${internal_filter}.$trunc_date"; 1129 my $workdir = 'neb://@HOST@.0/' . $dbname . "/detverify.nt/${workdir_date}/${lc_type}${internal_filter}"; 1130 return($label,$workdir,$det_filter,$exp_type,$det_type,$ref_det_id,$ref_iter,$maxN); 1131 } 839 1132 840 1133 sub init_gpc_db {
Note:
See TracChangeset
for help on using the changeset viewer.
