#! /usr/bin/perl # #/usr1/cds/alamgr/bin/splitfits2pgm -i d000672867.fits > /dev/null #fold -80 datain.hed > d000672867.hed $rep = $ARGV[0] ; $extr = "" ; # convert xml file in a string open(FILE,$rep); while ($_=) { $extr=$extr.$_ ; } close(FILE) ; shift ; # Loop on fits header files @HedList = `dir/b *.hed` ; foreach $i (@HedList) { chomp($i) ; #print $i , "\n" ; #$rep = ; #chomp($rep); #print $rep , "\n" ; ($fil,$dum) = split(".hed",$i) ; ($on,$dum) = split(/\./,$fil); open(FILE,$i); open(STDOUT,"> ".${i}.".xml") ; # Loop on FiTS headers keywords looking for interesting metadata while ($_=) { if( /RA_TARG/ ) { $alpha = $_ ; $alpha =~s/RA_TARG = +// ; ($dum,$dum1) = split(/ +\//,$alpha) ; $alpha = $dum ; #print "RA_TARG", $alpha, "\n" ; } if( /DEC_TARG/ ) { $decl = $_ ; $decl =~s/DEC_TARG= +// ; ($dum,$dum1) = split(/ +\//,$decl) ; $decl = $dum ; #print "DEC_TARG", $decl , "\n" ; } if ( /DATE-OBS/ ) { #print $_ , "\n" ; $da = $_ ; $da =~ s/DATE-OBS= \'// ; ($dum,$dum1) = split(/\' /,$da); $dum =~ s/ +// ; $da = $dum ; #print "DATE-OBS", $da , "\n" ; } if ( /TIME-OBS/ ) { #print $_ , "\n" ; $hb = $_ ; $hb =~ s/TIME-OBS= \'// ; ($dum,$dum1) = split(/\' /,$hb); $dum =~ s/ +// ; $hb = $dum ; #print "TIME-OBS", $hb, "\n" ; } if ( /TARGNAME/ ) { #print $_ , "\n" ; $obj = $_ ; $obj =~ s/TARGNAME= \'// ; ($dum,$dum1) = split(/\' /,$obj); $dum =~ s/ +// ; $dum =~ s/_/-/ ; $dum =~ s/-GOODS// ; $obj =$dum ; $obj =$obj."-EPOCH5"; #print "TARGNAME",$obj,"\n" ; } if ( /INSTRUME=/ ) { #print $_ , "\n" ; $ins = $_ ; $ins =~ s/INSTRUME= \'// ; ($dum,$dum1) = split(/\' /,$ins); $dum =~ s/ +// ; $ins = $dum ; #print "INSTRUME",$ins,"\n" ; } if ( /FILTER1 =/ ) { #print $_ , "\n" ; $co = $_ ; $co =~ s/FILTER1 = \'// ; ($dum,$dum1) = split(/\' /,$co); $dum =~ s/ +// ; $co1 = $dum ; #print "FILTER", $co, "\n" ; } if ( /FILTER2 =/ ) { #print $_ , "\n" ; $co = $_ ; $co =~ s/FILTER2 = \'// ; ($dum,$dum1) = split(/\' /,$co); $dum =~ s/ +// ; $co2 = $dum ; #print "FILTER", $co, "\n" ; } if ( /EXPSTART/ ) { #print $_ , "\n" ; $jd = $_ ; $jd =~ s/EXPSTART= // ; ($dum,$dum1) = split(/\//,$jd); $dum =~ s/ +// ; $jd = $dum ; #print "EXPSTART",$jd,"\n" ; } if ( /EXPEND =/ ) { #print $_ , "\n" ; $jd_end = $_ ; $jd_end =~ s/EXPEND = // ; ($dum,$dum1) = split(/\//,$jd_end); $dum =~ s/ +// ; $jd_end = $dum ; #print "EXPEND",$jd_end,"\n" ; } if ( /EXPTIME =/ ) { #print $_ , "\n" ; $jd_time = $_ ; $jd_time =~ s/EXPTIME = // ; ($dum,$dum1) = split(/\//,$jd_time); $dum =~ s/ +// ; $jd_time = $dum ; #print "EXPTIME",$jd_time,"\n" ; } if( /CRPIX1 =/) { #print $_ , "\n" ; $p1 = $_ ; $p1 =~ s/CRPIX1 = +// ; ($dum,$dum1) = split(/\//,$p1) ; #print $dum, "\n" ; #print $dum1, "\n" ; $p1 = $dum ; #print "CRPIX1", $p1,"\n" ; } if( /CRPIX2 =/) { #print $_ , "\n" ; $p2 = $_ ; $p2 =~ s/CRPIX2 = +// ; ($dum,$dum1) = split(/\//,$p2) ; #print $dum, "\n" ; #print $dum1, "\n" ; $p2 = $dum ; #print "CRPIX2", $p2,"\n" ; } if( /CD1_1 =/) { #print $_ , "\n" ; $cd11 = $_ ; $cd11 =~ s/CD1_1 = +// ; ($dum,$dum1) = split(/\//,$cd11) ; #print $dum, "\n" ; #print $dum1, "\n" ; $cd11 = $dum ; #print "CD1_1", $cd11,"\n" ; } if( /CD1_2 =/) { #print $_ , "\n" ; $cd12 = $_ ; $cd12 =~ s/CD1_2 = +// ; ($dum,$dum1) = split(/\//,$cd12) ; #print $dum, "\n" ; #print $dum1, "\n" ; $cd12 = $dum ; #print "CD1_2", $cd12,"\n" ; } if( /CD2_1 =/) { #print $_ , "\n" ; $cd21 = $_ ; $cd21 =~ s/CD2_1 = +// ; ($dum,$dum1) = split(/\//,$cd21) ; #print $dum, "\n" ; #print $dum1, "\n" ; $cd21 = $dum ; #print "CD2_1", $cd21,"\n" ; } if( /CD2_2 =/) { #print $_ , "\n" ; $cd22 = $_ ; $cd22 =~ s/CD2_2 = +// ; ($dum,$dum1) = split(/\//,$cd22) ; #print $dum, "\n" ; #print $dum1, "\n" ; $cd22 = $dum ; #print "CD2_2", $cd22,"\n" ; } if( /CRVAL1/) { #print $_ , "\n" ; $c1 = $_ ; $c1 =~ s/CRVAL1 = +// ; ($dum,$dum1) = split(/\//,$c1) ; #print $dum, "\n" ; #print $dum1, "\n" ; $c1 = $dum ; #print "CRVAL1", $c1,"\n" ; } if( /CRVAL2/) { #print $_ , "\n" ; $c2 = $_ ; $c2 =~ s/CRVAL2 = +// ; ($dum,$dum1) = split(/\//,$c2) ; #print $dum, "\n" ; #print $dum1, "\n" ; $c2 = $dum ; #print "CRVAL2", $c2,"\n" ; } if( /NAXIS1 =/) { #print $_ , "\n" ; $n1 = $_ ; $n1 =~ s/NAXIS1 = +// ; ($dum,$dum1) = split(/\//,$n1) ; #print $dum, "\n" ; #print $dum1, "\n" ; $n1 = $dum ; #print "NAXIS1",$n1,"\n" ; } if( /NAXIS2 =/) { #print $_ , "\n" ; $n2 = $_ ; $n2 =~ s/NAXIS2 = +// ; ($dum,$dum1) = split(/\//,$n2) ; #print $dum, "\n" ; #print $dum1, "\n" ; $n2 = $dum ; #print "NAXIS2",$n2,"\n" ; } if( /EQUINOX/) { #print $_ , "\n" ; $eq = $_ ; $eq =~ s/EQUINOX = +// ; ($dum,$dum1) = split(/\//,$eq) ; #print $dum, "\n" ; #print $dum1, "\n" ; $eq = $dum ; #print "EQUINOX",$eq,"\n" ; } if( /CTYPE1/) { #print $_ , "\n" ; $ra = $_ ; $ra =~ s/CTYPE1 = \'// ; ($dum,$dum1) = split(/\' +\//,$ra) ; #print $dum, "\n" ; #print $dum1, "\n" ; ($ra,$pr) =split(/-+/, $dum) ; #print "CTYPE1",$ra,"\n" ; #print "PROJ",$pr,"\n" ; } if( /CTYPE2/) { #print $_ , "\n" ; $dec = $_ ; $dec =~ s/CTYPE2 = \'// ; ($dum,$dum1) = split(/\' +\//,$dec) ; #print $dum, "\n" ; #print $dum1, "\n" ; ($dec,$pr) =split(/-+/, $dum) ; #print "CTYPE2",$dec,"\n" ; #print "PROJ",$pr,"\n" ; } if( /GOODMEAN/) { #print $_ , "\n" ; $goodmean = $_ ; $goodmean =~ s/GOODMEAN= +// ; ($dum,$dum1) = split(/\//,$goodmean) ; #print $dum, "\n" ; #print $dum1, "\n" ; $goodmean = $dum ; #print "GOODMEAN",$goodmean,"\n" ; } if( /GOODMIN/) { #print $_ , "\n" ; $goodmin = $_ ; $goodmin =~ s/GOODMIN = +// ; ($dum,$dum1) = split(/\//,$goodmin) ; #print $dum, "\n" ; #print $dum1, "\n" ; $goodmin = $dum ; #print "GOODMIN",$goodmin,"\n" ; } if( /GOODMAX/) { #print $_ , "\n" ; $goodmax = $_ ; $goodmax =~ s/GOODMAX = +// ; ($dum,$dum1) = split(/\//,$goodmax) ; #print $dum, "\n" ; #print $dum1, "\n" ; $goodmax = $dum ; #print "GOODMAX",$goodmax,"\n" ; } } # computing Bounds Position intervals $sz1 = sqrt($cd11*$cd11 +$cd12*$cd12) ; $sz2 = sqrt($cd22*$cd22 +$cd21*$cd21) ; $cll1 = $cd11*(0 -$p1)+$cd12*(0 -$p2) +$c1 ; $cll2 = $cd21*(0 -$p1)+$cd22*(0 -$p2) +$c2 ; #print $cll1,$cll2,"\n" ; $cul1 = $cd11*(0 -$p1)+$cd12*($n2 -$p2) +$c1 ; $cul2 = $cd21*(0 -$p1)+$cd22*($n2 -$p2) +$c2 ; #print $cul1,$cul2,"\n" ; $clr1 = $cd11*($n1 -$p1)+$cd12*(0 -$p2) +$c1 ; $clr2 = $cd21*($n1 -$p1)+$cd22*(0 -$p2) +$c2 ; #print $clr1,$clr2,"\n" ; $cur1 = $cd11*($n1 -$p1)+$cd12*($n2 -$p2) +$c1 ; $cur2 = $cd21*($n2 -$p1)+$cd22*($n2 -$p2) +$c2 ; #print $cur1,$cur2,"\n" ; $cmin1 = $cll1 ; $cmin2 = $cll2 ; $cmax1 = $cll1 ; $cmax2 = $cll2 ; if ($cul1 < $cmin1) { $cmin1 = $cul1 ;} if ($cul1 > $cmax1) { $cmax1 = $cul1 ;} if ($cul2 < $cmin2) { $cmin2 = $cul2 ;} if ($cul2 > $cmax2) { $cmax2 = $cul2 ;} if ($clr1 < $cmin1) { $cmin1 = $clr1 ;} if ($clr1 > $cmax1) { $cmax1 = $clr1 ;} if ($clr2 < $cmin2) { $cmin2 = $clr2 ;} if ($clr2 > $cmax2) { $cmax2 = $clr2 ;} if ($cur1 < $cmin1) { $cmin1 = $cur1 ;} if ($cur1 > $cmax1) { $cmax1 = $cur1 ;} if ($cur2 < $cmin2) { $cmin2 = $cur2 ;} if ($cur2 > $cmax2) { $cmax2 = $cur2 ;} #print $cmin1,$cmin2,"\n" ; #print $cmax1,$cmax2,"\n" ; # compute the Spatial sampling if( $sz1 < 0) { $sz1 = - $sz1 ; $pc11 = -$pc11 ; $pc21 = -$pc21 ; } if( $sz2 < 0) { $sz2 = - $sz2 ; $pc22 = -$pc22 ; $pc12 = -$pc12 ; } $sz1 *= 3600.0 ; # compute the mean observing time $jd_start = $jd ; $jd = ($jd_start + $jd_end)/2.0 ; #compute Spectral characterisation if ( ($co1 =~ /F435W/) or ($co2 =~ /F435W/)) { $wl = 0.435 ; $wll = 0.385 ; $wlh = 0.485 ; $res = 0.05}; if ( ($co1 =~ /F606W/) or ($co2 =~ /F606W/)) { $wl = 0.606 ; $wll = 0.556 ; $wlh = 0.656 ; $res = 0.05}; if ( ($co1 =~ /F775W/) or ($co2 =~ /F775W/)) { $wl = 0.775 ; $wll = 0.725 ; $wlh = 0.825 ; $res = 0.05}; if ( ($co1 =~ /F850LP/) or ($co2 =~ /F850LP/)) { $wl = 0.850 ; $wll = 0.800 ; $wlh = 0.900 ; $res = 0.1}; print $co1,$co2,$wl,$wll,$wlh ; # "xpath" the xml in order to modify the corresponding elements fore each Fits file $path = "char:characterisationAxis/[char:ucd=pos]/char:numBins2/char:I1" ; $extrout{NUMBINS1} = Xpath(${path},${extr}) ; $path = "char:characterisationAxis/[char:ucd=pos]/char:numBins2/char:I2" ; $extrout{NUMBINS2} = Xpath(${path},${extr}) ; $path = "char:characterisationAxis/[char:ucd=pos]/char:coverage/char:location/char:coord/stc:Position2D/stc:Value2/stc:C1" ; $extrout{LOCATION1} = Xpath(${path},${extr}) ; $path = "char:characterisationAxis/[char:ucd=pos]/char:coverage/char:location/char:coord/stc:Position2D/stc:Value2/stc:C2" ; $extrout {LOCATION2}= Xpath(${path},${extr}) ; $path = "char:characterisationAxis/[char:ucd=pos]/char:coverage/char:bounds/char:limits/char:Coord2VecInterval/stc:LoLimit2Vec/stc:C1" ; $extrout{BOUNDSL1} = Xpath(${path},${extr}) ; $path = "char:characterisationAxis/[char:ucd=pos]/char:coverage/char:bounds/char:limits/char:Coord2VecInterval/stc:LoLimit2Vec/stc:C2" ; $extrout{BOUNDSL2} = Xpath(${path},${extr}) ; $path = "char:characterisationAxis/[char:ucd=pos]/char:coverage/char:bounds/char:limits/char:Coord2VecInterval/stc:HiLimit2Vec/stc:C1" ; $extrout{BOUNDSH1} = Xpath(${path},${extr}) ; $path = "char:characterisationAxis/[char:ucd=pos]/char:coverage/char:bounds/char:limits/char:Coord2VecInterval/stc:HiLimit2Vec/stc:C2" ; $extrout{BOUNDSH2} = Xpath(${path},${extr}) ; $path = "char:characterisationAxis/[char:ucd=pos]/char:rsolution/char:resolutionRefVal/stc:Resolution" ; $extrout{SAMPLING} = Xpath(${path},${extr}) ; $path = "char:characterisationAxis/[char:ucd=pos]/char:samplingPrecision/char:samplingPrecisionRefVal/char:samplingPeriod/stc:PixSize" ; $extrout{SAMPLING} = Xpath(${path},${extr}) ; $path = "char:characterisationAxis/[char:ucd=time]/char:coverage/char:location/char:coord/stc:Time/stc:TimeInstant/stc:MJDTime"; $extrout{TIME} = Xpath(${path},${extr}) ; $path = "char:characterisationAxis/[char:ucd=time]/char:coverage/char:bounds/char:limits/char:CoordScalarInterval/stc:LoLimit"; $extrout{LOWTIME} = Xpath(${path},${extr}) ; $path = "char:characterisationAxis/[char:ucd=time]/char:coverage/char:bounds/char:limits/char:CoordScalarInterval/stc:HiLimit" ; $extrout{HITIME} = Xpath(${path},${extr}) ; $path = "char:characterisationAxis/[char:ucd=em]/char:coverage/char:location/char:coord/stc:Spectral/stc:Value" ; $extrout{MIDWL} = Xpath(${path},${extr}) ; $path = "char:characterisationAxis/[char:ucd=em]/char:coverage/char:bounds/char:limits/char:CoordScalarInterval/stc:LoLimit" ; $extrout{MINWL} = Xpath(${path},${extr}) ; $path = "char:characterisationAxis/[char:ucd=em]/char:coverage/char:bounds/char:limits/char:CoordScalarInterval/stc:HiLimit" ; $extrout{MAXWL} = Xpath(${path},${extr}) ; # modify the xml file for the given fits file open(FILE,$rep); $match = 0 ; while ($_=) { #if ($_ =~ $extrout{NUMBINS1}) {print "".$n1."\n"; $match = 1 ;} #if ($_ =~ $extrout{NUMBINS2}) {print "".$n2."\n"; $match = 1 ;} if ($_ =~ $extrout{LOCATION1}) {print "".$alpha."\n"; $match = 1 ;} if ($_ =~ $extrout{LOCATION2}) {print "".$decl."\n"; $match = 1 ;} #if ($_ =~ $extrout{BOUNDSL1}) {print "".${cmin1}."\n"; $match = 1 ;} #if ($_ =~ $extrout{BOUNDSL2}) {print "".${cmin2}."\n"; $match = 1 ;} #if ($_ =~ $extrout{BOUNDSH1}) {print "".${cmax1}."\n"; $match = 1 ;} #if ($_ =~ $extrout{BOUNDSH2}) {print "".${cmax2}."\n"; $match = 1 ;} #if ($_ =~ $extrout{RESOLUTION}) {print "".${res}."\n"; $match = 1 ;} #if ($_ =~ $extrout{SAMPLING}) {print "".${sz1}."\n"; $match = 1 ;} #if ($_ =~ $extrout{TIME}) {print "".${jd}."\n"; $match = 1 ;} #if ($_ =~ $extrout{LOWTIME}) {print "".${jd_start}."\n"; $match = 1 ;} #if ($_ =~ $extrout{HITIME}) {print "".${jd_end}."\n"; $match = 1 ;} if ($_ =~ $extrout{MIDWL}) {print "".${wl}."\n"; $match = 1 ;} if ($_ =~ $extrout{MINWL}) {print "".${wll}."\n"; $match = 1 ;} if ($_ =~ $extrout{MAXWL}) {print "".${wlh}."\n"; $match = 1 ;} if($match==0) {print $_ ;} $match = 0 ; } close(FILE) ; close(STDOUT) ; } # Subroutine to extract the xpathed element( sub Xpath { local($extra) ; local($extr) = $_[1]; local($path) = $_[0]; local($cons) = 0; local($constraint) = "" ; local($prevextr) = "" ; local($prevelem) = "" ; for (split(/\//,$path)) { if (/\[/) { #print "OK\n" ; $constraint = $_ ; $constraint =~ s/\[// ; $constraint =~ s/\]// ; $cons=1; } $elem = $_ ; $flag=0 ; $extra = $prevextr ; if ($cons == 2) { $extra = Element(${elem},${prevextr},${constraint}) ; $cons = 0 ; } else { if ($cons ==1) { $cons = 2 ;} else { $extra = Element(${elem},${extr},${constraint}) ;} } $prevextr = $extr ; $extr = $extra ; } $extr ; } # subroutine extracting one level of the xml tree with xpath constraints sub Element { local($extra) =$_[1] ; local($extr1) = "" ; local($extr2) = "" ; local($elem) = $_[0]; local($constraint) = $_[2] ; local($cons) = 0; local($constr) = 0 ; local($flag) = 0 ; ($conselem,$consvalue) = split (/=/,$constraint) ; if (${constraint}=~ /char/ ) {$cons =1 ;} chomp($elem) ; for(split(/^/,$extra)) { if ((/${conselem}/) and (/${consvalue}/)) { $constr = 1 ;} if ($flag == 1 ) {$extr2=$extr2.$_ ; } if (/<$elem[ >]/) {$extr2=$extr2.$_ ; $flag=1 ; } if (/<\/$elem>/){if((($cons == 1)and($constr == 1))or($cons == 0)) { $flag=0 ;$extr1 = $extr1.$extr2 ; $extr2 = "" ; $constr = 0 ;} else { $flag = 0 ; $extr2 = "" ; }} } $_[2] = "" ; $extr1 ; }