#! /bin/sh # This is the LHEA perl script: /cvmfs/extras-fp7.egi.eu/extras/heasoft/suzaku/x86_64-unknown-linux-gnu-libc2.19-0/bin/hxdmkgainhist_gso # The purpose of this special block is to make this script work with # the user's local perl, regardless of where that perl is installed. # The variable LHEAPERL is set by the initialization script to # point to the local perl installation. #------------------------------------------------------------------------------- eval ' if [ "x$LHEAPERL" = x ]; then echo "Please run standard LHEA initialization before attempting to run /cvmfs/extras-fp7.egi.eu/extras/heasoft/suzaku/x86_64-unknown-linux-gnu-libc2.19-0/bin/hxdmkgainhist_gso." exit 3 elif [ "$LHEAPERL" = noperl ]; then echo "During LHEA initialization, no acceptable version of Perl was found." echo "Cannot execute script /cvmfs/extras-fp7.egi.eu/extras/heasoft/suzaku/x86_64-unknown-linux-gnu-libc2.19-0/bin/hxdmkgainhist_gso." exit 3 elif [ `$LHEAPERL -v < /dev/null 2> /dev/null | grep -ic "perl"` -eq 0 ]; then echo "LHEAPERL variable does not point to a usable perl." exit 3 else # Force Perl into 32-bit mode (to match the binaries) if necessary: if [ "x$HD_BUILD_ARCH_32_BIT" = xyes ]; then if [ `$LHEAPERL -V 2> /dev/null | grep -ic "USE_64_BIT"` -ne 0 ]; then VERSIONER_PERL_PREFER_32_BIT=yes export VERSIONER_PERL_PREFER_32_BIT fi fi exec $LHEAPERL -x $0 ${1+"$@"} fi ' if(0); # Do not delete anything above this comment from an installed LHEA script! #------------------------------------------------------------------------------- #! /usr/local/bin/perl ############################################## # sub routine "input" : fetch FFF file name # # # # argument = FFF file name; # # set FFF ($fff) and HK ($hk) file names # ############################################## sub input { my $status = 0; $fffile = `pquery2 hxdmkgainhist_gso input_name $invokestring`; chop($fffile); $hkfile = `pquery2 hxdmkgainhist_gso hk_name $invokestring`; chop($hkfile); ${fitresults_gd} = `pquery2 hxdmkgainhist_gso gso_gd_fitlog_name $invokestring`; chop(${fitresults_gd}); ${fitresults_511} = `pquery2 hxdmkgainhist_gso gso_511_fitlog_name $invokestring`; chop(${fitresults_511}); ${fitresults_152gd} = `pquery2 hxdmkgainhist_gso gso_152gd_fitlog_name $invokestring`; chop(${fitresults_152gd}); ${HV_W0_VOLT_MIN} = `pquery2 hxdmkgainhist_gso hv_w0_volt_min $invokestring`; chop(${HV_W0_VOLT_MIN}); ${HV_W1_VOLT_MIN} = `pquery2 hxdmkgainhist_gso hv_w1_volt_min $invokestring`; chop(${HV_W1_VOLT_MIN}); ${HV_W2_VOLT_MIN} = `pquery2 hxdmkgainhist_gso hv_w2_volt_min $invokestring`; chop(${HV_W2_VOLT_MIN}); ${HV_W3_VOLT_MIN} = `pquery2 hxdmkgainhist_gso hv_w3_volt_min $invokestring`; chop(${HV_W3_VOLT_MIN}); ${fit_start_gd_s} = `pquery2 hxdmkgainhist_gso fit_start_gd_s $invokestring`; chop(${fit_start_gd_s}); ${fit_end_gd_s} = `pquery2 hxdmkgainhist_gso fit_end_gd_s $invokestring`; chop(${fit_end_gd_s}); ${fit_start_gd_f} = `pquery2 hxdmkgainhist_gso fit_start_gd_f $invokestring`; chop(${fit_start_gd_f}); ${fit_end_gd_f} = `pquery2 hxdmkgainhist_gso fit_end_gd_f $invokestring`; chop(${fit_end_gd_f}); ${fit_start_511_s} = `pquery2 hxdmkgainhist_gso fit_start_511_s $invokestring`; chop(${fit_start_511_s}); ${fit_end_511_s} = `pquery2 hxdmkgainhist_gso fit_end_511_s $invokestring`; chop(${fit_end_511_s}); ${fit_start_511_f} = `pquery2 hxdmkgainhist_gso fit_start_511_f $invokestring`; chop(${fit_start_511_f}); ${fit_end_511_f} = `pquery2 hxdmkgainhist_gso fit_end_511_f $invokestring`; chop(${fit_end_511_f}); ${fit_start_152gd_s} = `pquery2 hxdmkgainhist_gso fit_start_152gd_s $invokestring`; chop(${fit_start_152gd_s}); ${fit_end_152gd_s} = `pquery2 hxdmkgainhist_gso fit_end_152gd_s $invokestring`; chop(${fit_end_152gd_s}); ${fit_start_152gd_f} = `pquery2 hxdmkgainhist_gso fit_start_152gd_f $invokestring`; chop(${fit_start_152gd_f}); ${fit_end_152gd_f} = `pquery2 hxdmkgainhist_gso fit_end_152gd_f $invokestring`; chop(${fit_end_152gd_f}); $EXPOSURE = `pquery2 hxdmkgainhist_gso exposure $invokestring`; chop($EXPOSURE); $process_id = `pquery2 hxdmkgainhist_gso process_id $invokestring`; chop(${process_id}); $save_tmpfiles = `pquery2 hxdmkgainhist_gso save_tmpfiles $invokestring`; chop($save_tmpfiles); return $status; } ############################################### # sub routine "maketime" : # # process "hk" file to "maketime" # # # # input HK file ($hk) # ############################################### sub maketime { local($hk_file)="${hkfile}"; ## make HK dump ## local($total_gti)="${totalgti}"; local($maketime) = "maketime infile=\"${hk_file}+1\" outfile=\"${total_gti}\" expr=\"(HXD_HV_W0_CAL >= ${HV_W0_VOLT_MIN}) && (HXD_HV_W1_CAL >= ${HV_W1_VOLT_MIN}) && (HXD_HV_W2_CAL >= ${HV_W2_VOLT_MIN}) && (HXD_HV_W3_CAL >= ${HV_W3_VOLT_MIN})\" name=anything value=anything time=TIME compact=no prefr=0.5 postfr=0.5\n"; print $maketime; system($maketime); } ############################################### # sub routine "makefdump" : # # process "hk" file to "makegti" # # # # input HK file ($hk) # # make fdump log file name ($fdump_log) # ############################################### sub makefdump { local($gti)="${totalgti}"; ## make HK dump ## local($fdump) = "fdump infile=\"${gti}\" outfile=\"${fdump_log}\" columns='START,STOP' rows=- prhead=no pagewidth=100 showrow=no\n"; print $fdump; system($fdump); } ######################## ## maketime routine ## ######################## sub makegti{ #### read HK dump #### local(${start_time})=0.0; # initialize gti start time local(${end_time})=0.0; # initialize gti end time local(${rest_time})=$EXPOSURE; # initialize exposure time counter local(${g_num})=0; # initialize gti file ID local(${g_flg})=0; open(FDUMP,"${fdump_log}") || die "Cannot open fdump.log (${fdump_log}).: $!\n"; while(){ # read new line from fdump.log if(/\d+/){ ${g_flg} = 1; chomp; s/^\s+//g; ($start,$stop) = split(/\s+/,"$_"); ${start_time}=${start}; while((${start_time}+${rest_time}) <= $stop){ ${end_time}=${start_time}+${rest_time}; open(GTI,">> ${working_dir}/${process_id}_gti_${g_num}.gti") || die "Cannot open gti_${g_num}(${process_id}_gti_${g_num}.gti).: $!\n"; print GTI "${start_time} ${end_time}\n"; close GTI; open(GTILIST,">> ${gti_list}") || die "Cannot open gti_log(${gti_list}).: $!\n"; print GTILIST "${working_dir}/${process_id}_gti_${g_num}.gti\n"; close GTILIST; ${g_num}++; ${start_time}=${end_time}; ${rest_time} = ${EXPOSURE}; } open(GTI,">> ${working_dir}/${process_id}_gti_${g_num}.gti") || die "Cannot open gti_${g_num}(${process_id}_gti_${g_num}.gti).: $!\n"; print GTI "${start_time} ${stop}\n"; ${rest_time} -= $stop - ${start_time}; } else{;} } if(${g_flg} == 1){ open(GTILIST,">> ${gti_list}") || die "Cannot open gti_log(${gti_list}).: $!\n"; print GTILIST "${working_dir}/${process_id}_gti_${g_num}.gti\n"; close GTILIST; } else{;} } ###################### # SORT OUT UNITs # ###################### sub sort { local($wpu); local($wid); local($unit); for($unit=0;$unit<16;$unit++){ $wpu = int($unit/4); $wid = $unit - 4*$wpu; $unit_s = $unit; $unit_f = $unit + 16; $phagsow[$unit_s] = "${process_id}_gso_w${wpu}${wid}_gti_${loop_gti}_slow.pha"; $phagsow[$unit_f] = "${process_id}_gso_w${wpu}${wid}_gti_${loop_gti}_fast.pha"; ${phagsow_hitpat8[$unit_s]} = "${process_id}_gso_w${wpu}${wid}_gti_${loop_gti}_hitpat8_slow.pha"; ${phagsow_hitpat8[$unit_f]} = "${process_id}_gso_w${wpu}${wid}_gti_${loop_gti}_hitpat8_fast.pha"; ${phagsow_rbn16[$unit_s]} = "${process_id}_gso_w${wpu}${wid}_reb16_gti_${loop_gti}_slow.pha"; ${phagsow_rbn16[$unit_f]} = "${process_id}_gso_w${wpu}${wid}_reb16_gti_${loop_gti}_fast.pha"; ${phagsow_hitpat8_rbn16[$unit_s]} = "${process_id}_gso_w${wpu}${wid}_reb16_gti_${loop_gti}_hitpat8_slow.pha"; ${phagsow_hitpat8_rbn16[$unit_f]} = "${process_id}_gso_w${wpu}${wid}_reb16_gti_${loop_gti}_hitpat8_fast.pha"; } } ##################################### # sub rutine "makeselect" # # # # select PMT events every unit # # make "fits.pha" # ##################################### sub eventselect{ local($unit); local($wpu); local($wid); #### Non Selection #### print "\nMaking Non-selection fits file now.\n"; for($unit=0;$unit<16;$unit++){ $wpu = int($unit/4); $wid = $unit - 4*$wpu; local($fselect[$unit]) = "fselect infile=\"${fffile}\" outfile=\"${working_dir}/tmp_${process_id}_${unit}.fff\" expr=\"(UNITID==\"${unit}\")&&(TRIG==b0100000)&&(QUALITY_FLAGS==bxxxxxx1)\"\n"; print $fselect[$unit]; system($fselect[$unit]); } #### Hit Pattern 8 #### print "\nMaking Hit Pattern 8 fits file now.\n"; local(${fselect_hitpat8[0]}) = "fselect infile=\"${fffile}\" outfile=\"${working_dir}/tmp_${process_id}_0_hitpat8.fff\" expr=\"(UNITID==0) && (TRIG==b0100000) && (QUALITY_FLAGS==bxxxxxx1) && (((HIT_PATTERN_WELL & b0111000000000000) == (b0000000000000000)) && ((HIT_PATTERN_ANTI & b11100000000000000011) == (b00000000000000000000)))\"\n"; local(${fselect_hitpat8[1]}) = "fselect infile=\"${fffile}\" outfile=\"${working_dir}/tmp_${process_id}_1_hitpat8.fff\" expr=\"(UNITID==1) && (TRIG==b0100000) && (QUALITY_FLAGS==bxxxxxx1) && (((HIT_PATTERN_WELL & b1011100100000000) == (b0000000000000000)) && ((HIT_PATTERN_ANTI & b01110000000000000000) == (b00000000000000000000)))\"\n"; local(${fselect_hitpat8[2]}) = "fselect infile=\"${fffile}\" outfile=\"${working_dir}/tmp_${process_id}_2_hitpat8.fff\" expr=\"(UNITID==2) && (TRIG==b0100000) && (QUALITY_FLAGS==bxxxxxx1) && (((HIT_PATTERN_WELL & b1101100110001100) == (b0000000000000000)) && ((HIT_PATTERN_ANTI & b00000000000000000000) == (b00000000000000000000)))\"\n"; local(${fselect_hitpat8[3]}) = "fselect infile=\"${fffile}\" outfile=\"${working_dir}/tmp_${process_id}_3_hitpat8.fff\" expr=\"(UNITID==3) && (TRIG==b0100000) && (QUALITY_FLAGS==bxxxxxx1) && (((HIT_PATTERN_WELL & b1110000000001100) == (b0000000000000000)) && ((HIT_PATTERN_ANTI & b00000000000000000111) == (b00000000000000000000)))\"\n"; local(${fselect_hitpat8[4]}) = "fselect infile=\"${fffile}\" outfile=\"${working_dir}/tmp_${process_id}_4_hitpat8.fff\" expr=\"(UNITID==4) && (TRIG==b0100000) && (QUALITY_FLAGS==bxxxxxx1) && (((HIT_PATTERN_WELL & b0110011100000000) == (b0000000000000000)) && ((HIT_PATTERN_ANTI & b00111000000000000000) == (b00000000000000000000)))\"\n"; local(${fselect_hitpat8[5]}) = "fselect infile=\"${fffile}\" outfile=\"${working_dir}/tmp_${process_id}_5_hitpat8.fff\" expr=\"(UNITID==5) && (TRIG==b0100000) && (QUALITY_FLAGS==bxxxxxx1) && (((HIT_PATTERN_WELL & b0000101100000000) == (b0000000000000000)) && ((HIT_PATTERN_ANTI & b00011111000000000000) == (b00000000000000000000)))\"\n"; local(${fselect_hitpat8[6]}) = "fselect infile=\"${fffile}\" outfile=\"${working_dir}/tmp_${process_id}_6_hitpat8.fff\" expr=\"(UNITID==6) && (TRIG==b0100000) && (QUALITY_FLAGS==bxxxxxx1) && (((HIT_PATTERN_WELL & b0000110111000000) == (b0000000000000000)) && ((HIT_PATTERN_ANTI & b00000011100000000000) == (b00000000000000000000)))\"\n"; local(${fselect_hitpat8[7]}) = "fselect infile=\"${fffile}\" outfile=\"${working_dir}/tmp_${process_id}_7_hitpat8.fff\" expr=\"(UNITID==7) && (TRIG==b0100000) && (QUALITY_FLAGS==bxxxxxx1) && (((HIT_PATTERN_WELL & b0110111011000100) == (b0000000000000000)) && ((HIT_PATTERN_ANTI & b00000000000000000000) == (b00000000000000000000)))\"\n"; local(${fselect_hitpat8[8]}) = "fselect infile=\"${fffile}\" outfile=\"${working_dir}/tmp_${process_id}_8_hitpat8.fff\" expr=\"(UNITID==8) && (TRIG==b0100000) && (QUALITY_FLAGS==bxxxxxx1) && (((HIT_PATTERN_WELL & b0010001101110110) == (b0000000000000000)) && ((HIT_PATTERN_ANTI & b00000000000000000000) == (b00000000000000000000)))\"\n"; local(${fselect_hitpat8[9]}) = "fselect infile=\"${fffile}\" outfile=\"${working_dir}/tmp_${process_id}_9_hitpat8.fff\" expr=\"(UNITID==9) && (TRIG==b0100000) && (QUALITY_FLAGS==bxxxxxx1) && (((HIT_PATTERN_WELL & b0000001110110000) == (b0000000000000000)) && ((HIT_PATTERN_ANTI & b00000001110000000000) == (b00000000000000000000)))\"\n"; local(${fselect_hitpat8[10]}) = "fselect infile=\"${fffile}\" outfile=\"${working_dir}/tmp_${process_id}_10_hitpat8.fff\" expr=\"(UNITID==10) && (TRIG==b0100000) && (QUALITY_FLAGS==bxxxxxx1) && (((HIT_PATTERN_WELL & b0000000011010000) == (b0000000000000000)) && ((HIT_PATTERN_ANTI & b00000000111110000000) == (b00000000000000000000)))\"\n"; local(${fselect_hitpat8[11]}) = "fselect infile=\"${fffile}\" outfile=\"${working_dir}/tmp_${process_id}_11_hitpat8.fff\" expr=\"(UNITID==11) && (TRIG==b0100000) && (QUALITY_FLAGS==bxxxxxx1) && (((HIT_PATTERN_WELL & b0000000011100110) == (b0000000000000000)) && ((HIT_PATTERN_ANTI & b00000000000111000000) == (b00000000000000000000)))\"\n"; local(${fselect_hitpat8[12]}) = "fselect infile=\"${fffile}\" outfile=\"${working_dir}/tmp_${process_id}_12_hitpat8.fff\" expr=\"(UNITID==12) && (TRIG==b0100000) && (QUALITY_FLAGS==bxxxxxx1) && (((HIT_PATTERN_WELL & b0011000000000111) == (b0000000000000000)) && ((HIT_PATTERN_ANTI & b00000000000000001110) == (b00000000000000000000)))\"\n"; local(${fselect_hitpat8[13]}) = "fselect infile=\"${fffile}\" outfile=\"${working_dir}/tmp_${process_id}_13_hitpat8.fff\" expr=\"(UNITID==13) && (TRIG==b0100000) && (QUALITY_FLAGS==bxxxxxx1) && (((HIT_PATTERN_WELL & b0011000110011011) == (b0000000000000000)) && ((HIT_PATTERN_ANTI & b00000000000000000000) == (b00000000000000000000)))\"\n"; local(${fselect_hitpat8[14]}) = "fselect infile=\"${fffile}\" outfile=\"${working_dir}/tmp_${process_id}_14_hitpat8.fff\" expr=\"(UNITID==14) && (TRIG==b0100000) && (QUALITY_FLAGS==bxxxxxx1) && (((HIT_PATTERN_WELL & b0000000010011101) == (b0000000000000000)) && ((HIT_PATTERN_ANTI & b00000000000011100000) == (b00000000000000000000)))\"\n"; local(${fselect_hitpat8[15]}) = "fselect infile=\"${fffile}\" outfile=\"${working_dir}/tmp_${process_id}_15_hitpat8.fff\" expr=\"(UNITID==15) && (TRIG==b0100000) && (QUALITY_FLAGS==bxxxxxx1) && (((HIT_PATTERN_WELL & b0000000000001110) == (b0000000000000000)) && ((HIT_PATTERN_ANTI & b00000000000001111100) == (b00000000000000000000)))\"\n"; print ${fselect_hitpat8[0]}; system(${fselect_hitpat8[0]}); print ${fselect_hitpat8[1]}; system(${fselect_hitpat8[1]}); print ${fselect_hitpat8[2]}; system(${fselect_hitpat8[2]}); print ${fselect_hitpat8[3]}; system(${fselect_hitpat8[3]}); print ${fselect_hitpat8[4]}; system(${fselect_hitpat8[4]}); print ${fselect_hitpat8[5]}; system(${fselect_hitpat8[5]}); print ${fselect_hitpat8[6]}; system(${fselect_hitpat8[6]}); print ${fselect_hitpat8[7]}; system(${fselect_hitpat8[7]}); print ${fselect_hitpat8[8]}; system(${fselect_hitpat8[8]}); print ${fselect_hitpat8[9]}; system(${fselect_hitpat8[9]}); print ${fselect_hitpat8[10]}; system(${fselect_hitpat8[10]}); print ${fselect_hitpat8[11]}; system(${fselect_hitpat8[11]}); print ${fselect_hitpat8[12]}; system(${fselect_hitpat8[12]}); print ${fselect_hitpat8[13]}; system(${fselect_hitpat8[13]}); print ${fselect_hitpat8[14]}; system(${fselect_hitpat8[14]}); print ${fselect_hitpat8[15]}; system(${fselect_hitpat8[15]}); } #################################### # make slow and fast pha files # #################################### sub extractor { local($unit); for($unit=0;$unit<16;$unit++){ local($unit_s) = $unit; local($unit_f) = $unit + 16; local($extractor[$unit_s]) = "extractor filename=\"${working_dir}/tmp_${process_id}_${unit}.fff\" eventsout=\"NONE\" imgfile=\"NONE\" fitsbinlc=\"NONE\" regionfile=\"NONE\" phafile=\"${working_dir}/${phagsow[$unit_s]}\" timefile=\"${working_dir}/${process_id}_gti_${loop_gti}.gti\" gtinam=\"GTI\" tcol=\"TIME\" ecol=\"PHA_SLOW\" xcolh=\"UNITID\" ycolh=\"DET_TYPE\" xcolf=\"UNITID\" ycolf=\"UNITID\"\n"; local($extractor[$unit_f]) = "extractor filename=\"${working_dir}/tmp_${process_id}_${unit}.fff\" eventsout=\"NONE\" imgfile=\"NONE\" fitsbinlc=\"NONE\" regionfile=\"NONE\" phafile=\"${working_dir}/${phagsow[$unit_f]}\" timefile=\"${working_dir}/${process_id}_gti_${loop_gti}.gti\" gtinam=\"GTI\" tcol=\"TIME\" ecol=\"PHA_FAST\" xcolh=\"UNITID\" ycolh=\"DET_TYPE\" xcolf=\"UNITID\" ycolf=\"UNITID\"\n"; print $extractor[$unit_s]; system($extractor[$unit_s]); print $extractor[$unit_f]; system($extractor[$unit_f]); local(${extractor_hitpat8[$unit_s]}) = "extractor filename=\"${working_dir}/tmp_${process_id}_${unit}_hitpat8.fff\" eventsout=\"NONE\" imgfile=\"NONE\" fitsbinlc=\"NONE\" regionfile=\"NONE\" phafile=\"${working_dir}/${phagsow_hitpat8[$unit_s]}\" timefile=\"${working_dir}/${process_id}_gti_${loop_gti}.gti\" gtinam=\"GTI\" tcol=\"TIME\" ecol=\"PHA_SLOW\" xcolh=\"UNITID\" ycolh=\"DET_TYPE\" xcolf=\"UNITID\" ycolf=\"UNITID\"\n"; local(${extractor_hitpat8[$unit_f]}) = "extractor filename=\"${working_dir}/tmp_${process_id}_${unit}_hitpat8.fff\" eventsout=\"NONE\" imgfile=\"NONE\" fitsbinlc=\"NONE\" regionfile=\"NONE\" phafile=\"${working_dir}/${phagsow_hitpat8[$unit_f]}\" timefile=\"${working_dir}/${process_id}_gti_${loop_gti}.gti\" gtinam=\"GTI\" tcol=\"TIME\" ecol=\"PHA_FAST\" xcolh=\"UNITID\" ycolh=\"DET_TYPE\" xcolf=\"UNITID\" ycolf=\"UNITID\"\n"; print ${extractor_hitpat8[$unit_s]}; system(${extractor_hitpat8[$unit_s]}); print ${extractor_hitpat8[$unit_f]}; system(${extractor_hitpat8[$unit_f]}); } } ######################################## # rebin pha files # ######################################## sub rebin{ local($unit); for($unit=0;$unit<32;$unit++){ local($rbnpha[$unit]) = "rbnpha infile=\"${working_dir}/${phagsow[$unit]}\" outfile=\"${working_dir}/${phagsow_rbn16[$unit]}\" cmpmode=linear finchan=256\n"; local(${rbnpha_hitpat8[$unit]}) = "rbnpha infile=\"${working_dir}/${phagsow_hitpat8[$unit]}\" outfile=\"${working_dir}/${phagsow_hitpat8_rbn16[$unit]}\" cmpmode=linear finchan=256\n"; print $rbnpha[$unit]; system($rbnpha[$unit]); print ${rbnpha_hitpat8[$unit]}; system(${rbnpha_hitpat8[$unit]}); } } ############################################### # sub routine " makedummyrsp" : # # make dummy response with 256 ch # # no input # ############################################### sub makedummyrsp { ##### HEADAS 6.0.x version # $makedummyrsp_exe = "genrsp inrfil=\"none\" rmffil=\"${rmf}\" res_reln=\"constant\" fwhm=0 disperse=no tlscpe=\"SUZAKU\" instrm=\"HXD\" low=-0.5 high=255.5 delta=1.0 break=-1.0 delta2=0.1 chan_low=-0.5 chan_high=255.5 chan_delta=1.0 chan_break=-1.0 chan_delta2=0.1 efffil=\"none\" detfil=\"none\" filfil=\"none\" max_elements=100000 rsp_min=1.e-6 clobber=yes mode=ql \n"; ##### HEADAS new version $makedummyrsp_exe = "genrsp inrfil=\"none\" rmffil=\"${rmf}\" resol_reln=\"constant\" resol_file=\"none\" fwhm=0 disperse=no tlscpe=\"SUZAKU\" instrm=\"HXD\" resp_reln=\"linear\" resp_file=\"none\" resp_low=-0.5 resp_high=255.5 resp_number=256 resp_break=-1.0 resp_bnumber=0 chan_reln=\"linear\" chan_low=-0.5 chan_high=255.5 chan_number=256 chan_break=-1.0 chan_bnumber=0 efffil=\"none\" detfil=\"none\" filfil=\"none\" max_elements=100000 rsp_min=1.e-6 clobber=yes mode=ql \n"; print $makedummyrsp_exe; system($makedummyrsp_exe); } ######################################## # drive XSPEC version 11.xx # ######################################## sub drivexspec{ local(${unit_id}); $fit_model_id = 1; # Fit mode ID : gauss + powerlaw for ($unit_id=0;$unit_id<16;$unit_id++){ local($wpu) = int($unit_id/4); local($wid) = ($unit_id - 4*$wpu); local($num_s) = ${unit_id}; local($num_f) = ${unit_id} + 16; local(${log_gd}) = "${working_dir}/${process_id}_xspec_w${wpu}${wid}_Gd_gti_${loop_gti}.log"; local(${log_511}) = "${working_dir}/${process_id}_xspec_w${wpu}${wid}_511_gti_${loop_gti}.log"; local(${log_152gd}) = "${working_dir}/${process_id}_xspec_w${wpu}${wid}_152gd_gti_${loop_gti}.log"; local(${fit_gd_ps}) = "${working_dir}/${process_id}_hxd_w${wpu}${wid}_Gd_gti_${loop_gti}.ps"; local(${fit_511_ps}) = "${working_dir}/${process_id}_hxd_w${wpu}${wid}_511_gti_${loop_gti}.ps"; local(${fit_152gd_ps}) = "${working_dir}/${process_id}_hxd_w${wpu}${wid}_152gd_gti_${loop_gti}.ps"; open(COM20, "> xspec_gd_${wpu}${wid}_${loop_gti}.xcm") || die "Cannot open xspec_gd.xcm.: $!\n"; print COM20 "query yes\n"; print COM20 "data 1:1 ${working_dir}/${phagsow_hitpat8_rbn16[$num_s]} 2:2 ${working_dir}/${phagsow_hitpat8_rbn16[$num_f]}\n"; print COM20 "response 1 ${rmf} 2 ${rmf}\n"; print COM20 "setplot energy\n"; print COM20 "ignore bad\n"; print COM20 "ignore 1:**-${fit_start_gd_s} 1:${fit_end_gd_s}-** 2:**-${fit_start_gd_f} 2:${fit_end_gd_f}-**\n"; print COM20 "model gauss + powerlaw\n"; # $fit_model_id = 1 print COM20 "70.0\n"; # Gd slow:initial K alpha line energy in ch print COM20 "14.0\n"; # Gd slow:initial sigma in ch print COM20 "\n"; # Gd slow:gauss normalization print COM20 "0.9\n"; # Gd slow:powerlaw PhoIndex print COM20 "\n"; # Gd slow:powerlaw normalization print COM20 "70.0\n"; # Gd fast:initial K alpha line energy in ch print COM20 "14.0\n"; # Gd fast:initial sigma in ch print COM20 "\n"; # Gd fast:gauss normalization print COM20 "0.9\n"; # Gd fast:powerlaw PhoIndex print COM20 "\n"; # Gd fast:powerlaw normalization print COM20 "renorm\n"; print COM20 "log ${log_gd}\n"; print COM20 "fit 200\n"; print COM20 "chatter 0 0\nfreeze 2 3 4 5 6 7 9\nchatter 10 10\n"; print COM20 "chatter 0 0\nfit\nchatter 10 10\n"; print COM20 "query no\n"; print COM20 "error 1\n"; print COM20 "query yes\n"; print COM20 "chatter 0 0\nfreeze 1\nchatter 10 10\n"; print COM20 "chatter 0 0\nthaw 6\nchatter 10 10\n"; print COM20 "chatter 0 0\nfit\nchatter 10 10\n"; print COM20 "query no\n"; print COM20 "error 6\n"; print COM20 "query yes\n"; print COM20 "chatter 0 0\nthaw 1 2 3 4 5 7 9\nchatter 10 10\n"; print COM20 "chatter 0 0\nfit\nchatter 10 10\n"; print COM20 "flux ${fit_start_gd_s} ${fit_end_gd_s}\n"; print COM20 "puts \"exposure_time=[format \"\%E\" [tcloutr expos 1]]\"\n"; print COM20 "show files\n"; print COM20 "setplot add\n"; print COM20 "plot ldata delchi\n"; print COM20 "iplot\n"; print COM20 "r y 0.001 0.025\n"; print COM20 "hardcopy ${fit_gd_ps}/cps\n"; print COM20 "plot\n"; print COM20 "quit\n"; print COM20 "exit\n"; print COM20 "\n"; close COM20; ${xspec_gd} = "xspec < xspec_gd_${wpu}${wid}_${loop_gti}.xcm"; print ${xspec_gd}; system(${xspec_gd}); #unlink COM20; open(COM21, "> xspec_511_${wpu}${wid}_${loop_gti}.xcm") || die "Cannot open xspec_511.xcm.: $!\n"; print COM21 "query yes\n"; print COM21 "data 1:1 ${working_dir}/${phagsow_rbn16[$num_s]} 2:2 ${working_dir}/${phagsow_rbn16[$num_f]}\n"; print COM21 "backgrnd 1:1 ${working_dir}/${phagsow_hitpat8_rbn16[$num_s]} 2:2 ${working_dir}/${phagsow_hitpat8_rbn16[$num_f]}\n"; print COM21 "response 1 ${rmf} 2 ${rmf}\n"; print COM21 "setplot energy\n"; print COM21 "ignore bad\n"; print COM21 "ignore 1:**-${fit_start_511_s} 1:${fit_end_511_s}-** 2:**-${fit_start_511_f} 2:${fit_end_511_f}-**\n"; print COM21 "model gauss + powerlaw\n"; # $fit_model_id = 1 print COM21 "130.0\n"; # 511 slow:initial K alpha line energy in ch print COM21 "5.0\n"; # 511 slow:initial sigma in ch print COM21 "\n"; # 511 slow:gauss normalization print COM21 "0.9\n"; # 511 slow:powerlaw PhoIndex print COM21 "\n"; # 511 slow:powerlaw normalization print COM21 "130.0\n"; # 511 fast:initial K alpha line energy in ch print COM21 "5.0\n"; # 511 fast:initial sigma in ch print COM21 "\n"; # 511 fast:gauss normalization print COM21 "0.9\n"; # 511 fast:powerlaw PhoIndex print COM21 "\n"; # 511 fast:powerlaw normalization print COM22 "renorm\n"; print COM21 "log ${log_511}\n"; print COM21 "fit 200\n"; print COM21 "chatter 0 0\nfreeze 2 3 4 5 6 7 9\nchatter 10 10\n"; print COM21 "chatter 0 0\nfit\nchatter 10 10\n"; print COM21 "query no\n"; print COM21 "error 1\n"; print COM21 "query yes\n"; print COM21 "chatter 0 0\nfreeze 1\nchatter 10 10\n"; print COM21 "chatter 0 0\nthaw 6\nchatter 10 10\n"; print COM21 "chatter 0 0\nfit\nchatter 10 10\n"; print COM21 "query no\n"; print COM21 "error 6\n"; print COM21 "query yes\n"; print COM21 "chatter 0 0\nthaw 1 2 3 4 5 7 9\nchatter 10 10\n"; print COM21 "chatter 0 0\nfit\nchatter 10 10\n"; print COM21 "flux ${fit_start_511_s} ${fit_end_511_s}\n"; print COM21 "puts \"exposure_time=[format \"\%E\" [tcloutr expos 1]]\"\n"; print COM21 "show files\n"; print COM21 "setplot add\n"; print COM21 "plot ldata delchi\n"; print COM21 "iplot\n"; print COM21 "r y 0.005 0.03\n"; print COM21 "hardcopy ${fit_511_ps}/cps\n"; print COM21 "plot\n"; print COM21 "quit\n"; print COM21 "exit\n"; print COM21 "\n"; close COM21; ${xspec_511} = "xspec < xspec_511_${wpu}${wid}_${loop_gti}.xcm"; print ${xspec_511}; system(${xspec_511}); # unlink COM21; open(COM22, "> xspec_152gd_${wpu}${wid}_${loop_gti}.xcm") || die "Cannot open xspec_gd.xcm.: $!\n"; print COM22 "query yes\n"; print COM22 "data 1:1 ${working_dir}/${phagsow_hitpat8_rbn16[$num_s]} 2:2 ${working_dir}/${phagsow_hitpat8_rbn16[$num_f]}\n"; print COM22 "response 1 ${rmf} 2 ${rmf}\n"; print COM22 "setplot energy\n"; print COM22 "ignore bad\n"; print COM22 "ignore 1:**-${fit_start_152gd_s} 1:${fit_end_152gd_s}-** 2:**-${fit_start_152gd_f} 2:${fit_end_152gd_f}-**\n"; print COM22 "model gauss + powerlaw\n"; # $fit_model_id = 1 print COM22 "70.0\n"; # 152Gd slow:initial K alpha line energy in ch print COM22 "10.0\n"; # 152Gd slow:initial sigma in ch print COM22 "\n"; # 152Gd slow:gauss normalization print COM22 "0.9\n"; # 152Gd slow:powerlaw PhoIndex print COM22 "\n"; # 152Gd slow:powerlaw normalization print COM22 "70.0\n"; # 152Gd fast:initial K alpha line energy in ch print COM22 "10.0\n"; # 152Gd fast:initial sigma in ch print COM22 "\n"; # 152Gd fast:gauss normalization print COM22 "0.9\n"; # 152Gd fast:powerlaw PhoIndex print COM22 "\n"; # 152Gd fast:powerlaw normalization print COM22 "renorm\n"; print COM22 "log ${log_152gd}\n"; print COM22 "fit 200\n"; print COM22 "chatter 0 0\nfreeze 2 3 4 5 6 7 9\nchatter 10 10\n"; print COM22 "chatter 0 0\nfit\nchatter 10 10\n"; print COM22 "query no\n"; print COM22 "error 1\n"; print COM22 "query yes\n"; print COM22 "chatter 0 0\nfreeze 1\nchatter 10 10\n"; print COM22 "chatter 0 0\nthaw 6\nchatter 10 10\n"; print COM22 "chatter 0 0\nfit\nchatter 10 10\n"; print COM22 "query no\n"; print COM22 "error 6\n"; print COM22 "query yes\n"; print COM22 "chatter 0 0\nthaw 1 2 3 4 5 7 9\nchatter 10 10\n"; print COM22 "chatter 0 0\nfit\nchatter 10 10\n"; print COM22 "flux ${fit_start_152gd_s} ${fit_end_152gd_s}\n"; print COM22 "puts \"exposure_time=[format \"\%E\" [tcloutr expos 1]]\"\n"; print COM22 "show files\n"; print COM22 "setplot add\n"; print COM22 "plot ldata delchi\n"; print COM22 "iplot\n"; print COM22 "r y 0.001 0.02\n"; print COM22 "hardcopy ${fit_152gd_ps}/cps\n"; print COM22 "plot\n"; print COM22 "quit\n"; print COM22 "exit\n"; print COM22 "\n"; close COM22; ${xspec_152gd} = "xspec < xspec_152gd_${wpu}${wid}_${loop_gti}.xcm"; print ${xspec_152gd}; system(${xspec_152gd}); # unlink COM22; ####################################### # Parse the sdtout to get fit results # ####################################### #### Write gti #### local($start); local($end); open(RGTI,"${working_dir}/${process_id}_gti_${loop_gti}.gti") || die "Cannot open ${process_id}_gti_${loop_gti}.gti: $!\n"; while(){ #read gti log file if(/\d+/){ s/^\s+//g; chomp; ($start,$end) = split(" +",$_); push(@START, $start); } } $start=@START[0]; @RES_GD = ($start, $end, ${unit_id}, ${fit_model_id}); @RES_511 = ($start, $end, ${unit_id}, ${fit_model_id}); @RES_152GD = ($start, $end, ${unit_id}, ${fit_model_id}); # print "=====gti1=====\n@RES \n @START\n"; print "=====gti1=====\n", (join ' ',@RES) , "\n", (join ' ',@START), "\n"; undef @START; close RGTI; # print "=====gti=====\n@RES \n @START\n"; print "=====gti=====\n", (join ' ',@RES) , "\n", (join ' ',@START), "\n"; #### Write Gd fit result #### $dtset_2_flg = 0; open(FLOG1,"${log_gd}") || die "Cannot open ${log_gd}: $!\n"; while() { #read xspec fit log file open(RES1,">>${fitresults_gd}"); if(/gaussian/ && /LineE/){ s/^\s+//g; chomp; ($dum00,$dum01,$dum02,$dum03,$dum04,$dum05,${best_line},$dum06,${line_error}) = split(" +",$_); print "=====best line=====\n ${best_line} ${line_error}\n"; ${best_line_16} = ${best_line} * 16; ${line_error_16} = ${line_error} * 16; push(@RES_GD, ${best_line_16}, ${line_error_16}); } elsif(/gaussian/ && /Sigma/){ s/^\s+//g; chomp; ($dum10,$dum11,$dum12,$dum13,$dum14,$dum15,${best_sigma},$dum16,${sigma_error}) = split(" +",$_); print "=====best sigma=====\n ${best_sigma} ${sigma_error}\n"; ${best_sigma_16} = ${best_sigma} * 16; ${sigma_error_16} = ${sigma_error} * 16; push(@RES_GD, ${best_sigma}, ${sigma_error}); } elsif(/gaussian/ && /norm/){ s/^\s+//g; chomp; ($dum20,$dum21,$dum22,$dum23,$dum24,${best_norm},$dum25,${norm_error}) = split(" +",$_); print "=====norm=====\n ${best_norm} ${norm_error}\n"; push(@RES_GD, ${best_norm}, ${norm_error}); } elsif(/powerlaw/ && /PhoIndex/){ s/^\s+//g; chomp; ($dum30,$dum31,$dum32,$dum33,$dum34,${phoindex},$dum35,${pho_error}) = split(" +",$_); print "=====phoindx=====\n${phoindex} ${pho_error}\n"; push(@RES_GD, ${phoindex}, ${pho_error}); } elsif(/powerlaw/ && /norm/){ s/^\s+//g; chomp; ($dum40,$dum41,$dum42,$dum43,$dum44,${pow_norm},$dum45,${pow_norm_error}) = split(" +",$_); print "=====pow_norm=====\n ${pow_norm} ${pow_norm_error}\n"; push(@RES_GD, ${pow_norm}, ${pow_norm_error}); } elsif(/Reduced/ && /chi-squared/){ s/^\s+//g; chomp; ($dum50,$dum51,$dum52,$dum52a,${redu_chi},$dum53,$dum54,$dum55,$dum56,$dum57) = split(" +",$_); print "=====redu_chi=====\n ${redu_chi}\n"; } elsif(/Model/ && /Flux/ && $dtset_2_flg == 0){ $dtset_2_flg = 1; s/^\s+//g; chomp; ($dum60,$dum61,$dum62,${area_flux_s},$dum63,$dum64,$dum65,$dum66,$dum67,$dum68,$dum69) = split(" +",$_); print "=====area_flux=====\n ${area_flux_s}\n "; splice(@RES_GD, 14, 0, ${area_flux_s}); } elsif(/Model/ && /Flux/){ s/^\s+//g; chomp; ($dum70,$dum71,$dum72,${area_flux_f},$dum73,$dum74,$dum75,$dum76,$dum77,$dum78,$dum79) = split(" +",$_); print "=====area_flux_f=====\n ${area_flux_f}\n "; push(@RES_GD, ${area_flux_f}); } elsif(/XSPEC12> error 1/){ $err_flg=1; } elsif(/XSPEC12> error 6/){ $err_flg=6; } elsif(/XSPEC12>/){ $err_flg=0; } elsif($err_flg==1 && /^#\s+1\s+\S+\s+\S+\s+\(\s*(\S+?)\s*,\s*(\S+?)\s*\)/ ){ ${slow_err_low} = $1; ${slow_err_hi} = $2; print "=====slow error=====\n${slow_err_low} ${slow_err_hi}\n"; } elsif($err_flg==6 && /^#\s+6\s+\S+\s+\S+\s+\(\s*(\S+?)\s*,\s*(\S+?)\s*\)/ ){ ${fast_err_low} = $1; ${fast_err_hi} = $2; print "=====fast error=====\n ${fast_err_low} ${fast_err_hi}\n"; } elsif(/^#exposure_time=/){ s/^\s+//g; chomp; ($duma0,${exp}) = split("=",$_); print "=====exp=====\n ${exp}\n"; } } # these were the default bad errors in xspec11 if ( !defined $slow_err_low && !defined $slow_err_hi ) { $slow_err_low = -90.0000; $slow_err_hi = 999910.; print "=====slow error=====\n${slow_err_low} ${slow_err_hi}\n"; } if ( !defined $fast_err_low && !defined $fast_err_hi ) { $fast_err_low = -90.0000; $fast_err_hi = 999910.; print "=====fast error=====\n ${fast_err_low} ${fast_err_hi}\n"; } ${slow_err} = ((${slow_err_hi} - ${slow_err_low})/2) * 16; ${fast_err} = ((${fast_err_hi} - ${fast_err_low})/2) * 16; print "=====slow_fast error=====\n ${slow_err} ${fast_err} \n"; # undefine the slow/fast error $slow_err_low = $slow_err_hi = $fast_err_low = $fast_err_hi = undef; splice(@RES_GD, 5, 1, ${slow_err}); splice(@RES_GD, 16, 1, ${fast_err}); ${fit_start_gd_s_16} = ${fit_start_gd_s} * 16; ${fit_start_gd_f_16} = ${fit_start_gd_f} * 16; ${fit_end_gd_s_16} = ${fit_end_gd_s} * 16; ${fit_end_gd_f_16} = ${fit_end_gd_f} * 16; splice(@RES_GD, 4, 0, ${fit_start_gd_s_16}, ${fit_end_gd_s_16}); splice(@RES_GD, 17, 0, ${fit_start_gd_f_16}, ${fit_end_gd_f_16}); push(@RES_GD, ${redu_chi}); splice(@RES_GD,2, 0, $exp); # print "=====pre RES_GDULT=====\n@RES_GD \n"; @SLOW_SIGMA = splice(@RES_GD, 9, 2 ); splice(@RES_GD, 11, 0, @SLOW_SIGMA); @FAST_SIGMA = splice(@RES_GD, 22, 2); splice(@RES_GD, 24, 0, @FAST_SIGMA); splice(@RES_GD, 23, 1, $RES_GD[10]); splice(@RES_GD, 29, 1, $RES_GD[16]); if($RES_GD[7]>$RES_GD[5] && $RES_GD[7]<$RES_GD[6] && $RES_GD[8]<($RES_GD[6]-$RES_GD[5]) && $RES_GD[11]<($RES_GD[7]*0.5/2.35) && $RES_GD[20]>$RES_GD[18] && $RES_GD[20]<$RES_GD[19] && $RES_GD[21]<($RES_GD[19]-$RES_GD[18]) && $RES_GD[24]<($RES_GD[20]*0.5/2.35) && (0 < $RES_GD[31] && $RES_GD[31] < 3.0)){ ${quality_flg} = 0; } else{ print "GDULT:Bad Quality\n"; ${quality_flg} = 1; } push(@RES_GD,${quality_flg}); # print "=====RES_GDULT=====\n@RES_GD \n"; print "=====RES_GDULT=====\n", (join ' ',@RES_GD), "\n"; print RES1 join(" ", @RES_GD),"\n"; close RES1; close FLOG1; #### Write 511keV fit result #### $dtset_2_flg = 0; open(FLOG2,"${log_511}") || die "Cannot open ${log_511}: $!\n"; while() { #read xspec fit log file open(RES2,">>${fitresults_511}"); if(/gaussian/ && /LineE/){ s/^\s+//g; chomp; ($dum00,$dum01,$dum02,$dum03,$dum04,$dum05,${best_line},$dum06,${line_error}) = split(" +",$_); print "=====best line=====\n ${best_line} ${line_error}\n"; ${best_line_16} = ${best_line} * 16; ${line_error_16} = ${line_error} * 16; push(@RES_511, ${best_line_16}, ${line_error_16}); } elsif(/gaussian/ && /Sigma/){ s/^\s+//g; chomp; ($dum10,$dum11,$dum12,$dum13,$dum14,$dum15,${best_sigma},$dum16,${sigma_error}) = split(" +",$_); print "=====best sigma=====\n ${best_sigma} ${sigma_error}\n"; ${best_sigma_16} = ${best_sigma} * 16; ${sigma_error_16} = ${sigma_error}* 16; push(@RES_511, ${best_sigma_16}, ${sigma_error_16}); } elsif(/gaussian/ && /norm/){ s/^\s+//g; chomp; ($dum20,$dum21,$dum22,$dum23,$dum24,${best_norm},$dum25,${norm_error}) = split(" +",$_); print "=====norm=====\n ${best_norm} ${norm_error}\n"; push(@RES_511, ${best_norm}, ${norm_error}); } elsif(/powerlaw/ && /PhoIndex/){ s/^\s+//g; chomp; ($dum30,$dum31,$dum32,$dum33,$dum34,${phoindex},$dum35,${pho_error}) = split(" +",$_); print "=====phoindx=====\n${phoindex} ${pho_error}\n"; push(@RES_511, ${phoindex}, ${pho_error}); } elsif(/powerlaw/ && /norm/){ s/^\s+//g; chomp; ($dum40,$dum41,$dum42,$dum43,$dum44,${pow_norm},$dum45,${pow_norm_error}) = split(" +",$_); print "=====pow_norm=====\n ${pow_norm} ${pow_norm_error}\n"; push(@RES_511, ${pow_norm}, ${pow_norm_error}); } elsif(/Reduced/ && /chi-squared/){ s/^\s+//g; chomp; ($dum50,$dum51,$dum52,$dum52a,${redu_chi},$dum53,$dum54,$dum55,$dum56,$dum57) = split(" +",$_); print "=====redu_chi=====\n ${redu_chi}\n"; } elsif(/Model/ && /Flux/ && $dtset_2_flg == 0){ $dtset_2_flg = 1; s/^\s+//g; chomp; ($dum60,$dum61,$dum62,${area_flux_s},$dum63,$dum64,$dum65,$dum66,$dum67,$dum68,$dum69) = split(" +",$_); print "=====area_flux=====\n ${area_flux_s}\n "; splice(@RES_511, 14, 0, ${area_flux_s}); } elsif(/Model/ && /Flux/){ s/^\s+//g; chomp; ($dum70,$dum71,$dum72,${area_flux_f},$dum73,$dum74,$dum75,$dum76,$dum77,$dum78,$dum79) = split(" +",$_); print "=====area_flux_f=====\n ${area_flux_f}\n "; push(@RES_511, ${area_flux_f}); } elsif(/XSPEC12> error 1/){ $err_flg=1; } elsif(/XSPEC12> error 6/){ $err_flg=6; } elsif(/XSPEC12>/){ $err_flg=0; } elsif($err_flg==1 && /^#\s+1\s+\S+\s+\S+\s+\(\s*(\S+?)\s*,\s*(\S+?)\s*\)/ ){ ${slow_err_low} = $1; ${slow_err_hi} = $2; print "=====slow error=====\n${slow_err_low} ${slow_err_hi}\n"; } elsif($err_flg==6 && /^#\s+6\s+\S+\s+\S+\s+\(\s*(\S+?)\s*,\s*(\S+?)\s*\)/ ){ ${fast_err_low} = $1; ${fast_err_hi} = $2; print "=====fast error=====\n ${fast_err_low} ${fast_err_hi}\n"; } elsif(/^#exposure_time=/){ s/^\s+//g; chomp; ($duma0,${exp}) = split("=",$_); print "=====exp=====\n ${exp}\n"; } } # these were the default bad errors in xspec11 if ( !defined $slow_err_low && !defined $slow_err_hi ) { $slow_err_low = -130.000; $slow_err_hi = 999870.; print "=====slow error=====\n${slow_err_low} ${slow_err_hi}\n"; } if ( !defined $fast_err_low && !defined $fast_err_hi ) { $fast_err_low = -130.000; $fast_err_hi = 999870.; print "=====fast error=====\n ${fast_err_low} ${fast_err_hi}\n"; } ${slow_err} = ((${slow_err_hi} - ${slow_err_low})/2) * 16; ${fast_err} = ((${fast_err_hi} - ${fast_err_low})/2) * 16; print "=====slow_fast error=====\n ${slow_err} ${fast_err} \n"; # undefine the slow/fast error $slow_err_low = $slow_err_hi = $fast_err_low = $fast_err_hi = undef; splice(@RES_511, 5, 1, ${slow_err}); splice(@RES_511, 16, 1, ${fast_err}); ${fit_start_511_s_16} = ${fit_start_511_s} * 16; ${fit_start_511_f_16} = ${fit_start_511_f} * 16; ${fit_end_511_s_16} = ${fit_end_511_s} * 16; ${fit_end_511_f_16} = ${fit_end_511_f} * 16; splice(@RES_511, 4, 0, ${fit_start_511_s_16}, ${fit_end_511_s_16}); splice(@RES_511, 17, 0, ${fit_start_511_f_16}, ${fit_end_511_f_16}); push(@RES_511, ${redu_chi}); splice(@RES_511,2, 0, $exp); # print "=====pre RES_511ULT=====\n@RES_511 \n"; @SLOW_SIGMA = splice(@RES_511, 9, 2 ); splice(@RES_511, 11, 0, @SLOW_SIGMA); @FAST_SIGMA = splice(@RES_511, 22, 2); splice(@RES_511, 24, 0, @FAST_SIGMA); splice(@RES_511, 23, 1, $RES_511[10]); splice(@RES_511, 29, 1, $RES_511[16]); if($RES_511[7]>$RES_511[5] && $RES_511[7]<$RES_511[6] && $RES_511[8]<($RES_511[6]-$RES_511[5]) && $RES_511[11]<($RES_511[7]*0.5/2.35) && $RES_511[20]>$RES_511[18] && $RES_511[20]<$RES_511[19] && $RES_511[21]<($RES_511[19]-$RES_511[18]) && $RES_511[24]<($RES_511[20]*0.5/2.35) && (0 < $RES_511[31] && $RES_511[31] < 3.0)){ ${quality_flg} = 0; } else{ print "511ULT:Bad Quality\n"; ${quality_flg} = 1; } push(@RES_511,${quality_flg}); # print "=====RES_511ULT=====\n@RES_511 \n"; print "=====RES_511ULT=====\n", (join ' ',@RES_511), "\n"; print RES2 join(" ", @RES_511),"\n"; close RES2; close FLOG2; #### Write 152Gd fit result #### $dtset_2_flg = 0; open(FLOG3,"${log_152gd}") || die "Cannot open ${log_152gd}: $!\n"; while() { #read xspec fit log file open(RES3,">>${fitresults_152gd}"); if(/gaussian/ && /LineE/){ s/^\s+//g; chomp; ($dum00,$dum01,$dum02,$dum03,$dum04,$dum05,${best_line},$dum06,${line_error}) = split(" +",$_); print "=====best line=====\n ${best_line} ${line_error}\n"; ${best_line_16} = ${best_line} * 16; ${line_error_16} = ${line_error} * 16; push(@RES_152GD, ${best_line_16}, ${line_error_16}); } elsif(/gaussian/ && /Sigma/){ s/^\s+//g; chomp; ($dum10,$dum11,$dum12,$dum13,$dum14,$dum15,${best_sigma},$dum16,${sigma_error}) = split(" +",$_); print "=====best sigma=====\n ${best_sigma} ${sigma_error}\n"; ${best_sigma_16} = ${best_sigma} * 16; ${sigma_error_16} = ${sigma_error}* 16; push(@RES_152GD, ${best_sigma}, ${sigma_error}); } elsif(/gaussian/ && /norm/){ s/^\s+//g; chomp; ($dum20,$dum21,$dum22,$dum23,$dum24,${best_norm},$dum25,${norm_error}) = split(" +",$_); print "=====norm=====\n ${best_norm} ${norm_error}\n"; push(@RES_152GD, ${best_norm}, ${norm_error}); } elsif(/powerlaw/ && /PhoIndex/){ s/^\s+//g; chomp; ($dum30,$dum31,$dum32,$dum33,$dum34,${phoindex},$dum35,${pho_error}) = split(" +",$_); print "=====phoindx=====\n${phoindex} ${pho_error}\n"; push(@RES_152GD, ${phoindex}, ${pho_error}); } elsif(/powerlaw/ && /norm/){ s/^\s+//g; chomp; ($dum40,$dum41,$dum42,$dum43,$dum44,${pow_norm},$dum45,${pow_norm_error}) = split(" +",$_); print "=====pow_norm=====\n ${pow_norm} ${pow_norm_error}\n"; push(@RES_152GD, ${pow_norm}, ${pow_norm_error}); } elsif(/Reduced/ && /chi-squared/){ s/^\s+//g; chomp; ($dum50,$dum51,$dum52,$dum52a,${redu_chi},$dum53,$dum54,$dum55,$dum56,$dum57) = split(" +",$_); print "=====redu_chi=====\n ${redu_chi}\n"; } elsif(/Model/ && /Flux/ && $dtset_2_flg == 0){ $dtset_2_flg = 1; s/^\s+//g; chomp; ($dum60,$dum61,$dum62,${area_flux_s},$dum63,$dum64,$dum65,$dum66,$dum67,$dum68,$dum69) = split(" +",$_); print "=====area_flux=====\n ${area_flux_s}\n "; splice(@RES_152GD, 14, 0, ${area_flux_s}); } elsif(/Model/ && /Flux/){ s/^\s+//g; chomp; ($dum70,$dum71,$dum72,${area_flux_f},$dum73,$dum74,$dum75,$dum76,$dum77,$dum78,$dum79) = split(" +",$_); print "=====area_flux_f=====\n ${area_flux_f}\n "; push(@RES_152GD, ${area_flux_f}); } elsif(/XSPEC12> error 1/){ $err_flg=1; } elsif(/XSPEC12> error 6/){ $err_flg=6; } elsif(/XSPEC12>/){ $err_flg=0; } elsif($err_flg==1 && /^#\s+1\s+\S+\s+\S+\s+\(\s*(\S+?)\s*,\s*(\S+?)\s*\)/ ){ ${slow_err_low} = $1; ${slow_err_hi} = $2; print "=====slow error=====\n${slow_err_low} ${slow_err_hi}\n"; } elsif($err_flg==6 && /^#\s+6\s+\S+\s+\S+\s+\(\s*(\S+?)\s*,\s*(\S+?)\s*\)/ ){ ${fast_err_low} = $1; ${fast_err_hi} = $2; print "=====fast error=====\n ${fast_err_low} ${fast_err_hi}\n"; } elsif(/^#exposure_time=/){ s/^\s+//g; chomp; ($duma0,${exp}) = split("=",$_); print "=====exp=====\n ${exp}\n"; } } # these were the default bad errors in xspec11 if ( !defined $slow_err_low && !defined $slow_err_hi ) { $slow_err_low = -90.0000; $slow_err_hi = 999910.; print "=====slow error=====\n${slow_err_low} ${slow_err_hi}\n"; } if ( !defined $fast_err_low && !defined $fast_err_hi ) { $fast_err_low = -90.0000; $fast_err_hi = 999910.; print "=====fast error=====\n ${fast_err_low} ${fast_err_hi}\n"; } ${slow_err} = ((${slow_err_hi} - ${slow_err_low})/2) * 16; ${fast_err} = ((${fast_err_hi} - ${fast_err_low})/2) * 16; print "=====slow_fast error=====\n ${slow_err} ${fast_err} \n"; # undefine the slow/fast error $slow_err_low = $slow_err_hi = $fast_err_low = $fast_err_hi = undef; splice(@RES_152GD, 5, 1, ${slow_err}); splice(@RES_152GD, 16, 1, ${fast_err}); ${fit_start_152gd_s_16} = ${fit_start_152gd_s} * 16; ${fit_start_152gd_f_16} = ${fit_start_152gd_f} * 16; ${fit_end_152gd_s_16} = ${fit_end_152gd_s} * 16; ${fit_end_152gd_f_16} = ${fit_end_152gd_f} * 16; splice(@RES_152GD, 4, 0, ${fit_start_152gd_s_16}, ${fit_end_152gd_s_16}); splice(@RES_152GD, 17, 0, ${fit_start_152gd_f_16}, ${fit_end_152gd_f_16}); push(@RES_152GD, ${redu_chi}); splice(@RES_152GD,2, 0, $exp); # print "=====pre RES_152GDULT=====\n@RES_152GD \n"; @SLOW_SIGMA = splice(@RES_152GD, 9, 2 ); splice(@RES_152GD, 11, 0, @SLOW_SIGMA); @FAST_SIGMA = splice(@RES_152GD, 22, 2); splice(@RES_152GD, 24, 0, @FAST_SIGMA); splice(@RES_152GD, 23, 1, $RES_152GD[10]); splice(@RES_152GD, 29, 1, $RES_152GD[16]); if($RES_152GD[7]>$RES_152GD[5] && $RES_152GD[7]<$RES_152GD[6] && $RES_152GD[8]<($RES_152GD[6]-$RES_152GD[5]) && $RES_152GD[11]<($RES_152GD[7]*0.5/2.35) && $RES_152GD[20]>$RES_152GD[18] && $RES_152GD[20]<$RES_152GD[19] && $RES_152GD[21]<($RES_152GD[19]-$RES_152GD[18]) && $RES_152GD[24]<($RES_152GD[20]*0.5/2.35) && (0 < $RES_GD[31] && $RES_GD[31] < 3.0)){ ${quality_flg} = 0; } else{ print "152GdULT:Bad Quality\n"; ${quality_flg} = 1; } push(@RES_152GD,${quality_flg}); # print "=====RES_152GDULT=====\n@RES_152GD \n"; print "=====RES_152GDULT=====\n", (join ' ',@RES_152GD),"\n"; print RES3 join(" ", @RES_152GD),"\n"; close RES3; close FLOG3; } } ########## ## MAIN ## ########## if(@ARGV) { foreach $i (0 .. $#ARGV) { $ARGV[$i] = "\"".$ARGV[$i]."\""; } $invokestring = join(' ',@ARGV); } &input($ARGV[0]); print "FFF = ${fffile}, HK = ${hkfile}\n"; ## set file name ## ${working_dir}="${process_id}_hxdmkgainhist_tmp"; ${totalgti}="${working_dir}/total.gti"; # original GTI,maketime out put ${fdump_log}="${working_dir}/fdump.log"; ${gti_list}="${working_dir}/gtilist"; # List of GTI ${rmf}="${working_dir}/${process_id}dmy.rsp"; # response file #### data dir #### $mkworkdir = "rm -rf ${working_dir}; mkdir ${working_dir} \n"; print $mkworkdir; system($mkworkdir); &maketime; print "original GTI = ${totalgti}\n"; &makefdump; print "fdump log = ${fdump_log}\n"; &makegti; print "GTI LIST = ${gti_list}\n"; print "Exposure = $EXPOSURE\n"; &eventselect; print "EVENT SELECTION\n"; &makedummyrsp; ${loop_gti}=0; open(LOOP,"${gti_list}") || warn "Cannot open gtilist (${gti_list}): $!\n"; while() { &sort; &extractor; &rebin; &drivexspec; ${loop_gti}++; } close LOOP; $rmxspeclog = "rm -rf ${process_id}_xspec*.log xspec*.xcm xautosav.xcm ${rmf} \n"; print $rmxspeclog; system($rmxspeclog); if($save_tmpfiles eq 'no') { $rmtmpfiles = "rm -rf ${working_dir}\n"; print $rmtmpfiles; system($rmtmpfiles); }