Changeset 8626 for trunk/MagicSoft/Mars/scripts
- Timestamp:
- 06/29/07 15:33:20 (18 years ago)
- Location:
- trunk/MagicSoft/Mars/scripts
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/MagicSoft/Mars/scripts/dospectrum
r8482 r8626 1 1 #!/bin/sh 2 # 2 # 3 3 # ======================================================================== 4 4 # … … 18 18 # 19 19 # 20 # Author(s): Daniela Dorner 0 5/2006<mailto:dorner@astro.uni-wuerzburg.de>21 # 22 # Copyright: MAGIC Software Development, 2000-200 620 # Author(s): Daniela Dorner 06/2007 <mailto:dorner@astro.uni-wuerzburg.de> 21 # 22 # Copyright: MAGIC Software Development, 2000-2007 23 23 # 24 24 # 25 25 # ======================================================================== 26 26 # 27 #28 #29 27 ############################################################################## 30 28 # 31 # This script creates the ganymed.rc files with different parameter sets (the32 # parameters 1 and 3 are changed in steps). Then the script runs ganymed and33 # sponde for this different parameter sets.34 # 35 # variables, that have to be set by the user:36 # 37 # - path directory, where the files are stored38 # - mars directory, where your Mars version is stored39 # - dataset dataset file, which shall be used (filename without path)40 # the file has to be stored in the dataset directory in the41 # path42 # - par*step step width for changing the parameter *43 # - par*numminus number of steps going to smaller values of the parameter *44 # - par*num number of steps for changing the parameter *45 # - spondenum number of sponde rc file (also of the root and log file)46 # - ganymednum number of ganymed root file47 # 48 # Please make sure, that you provide the following files:49 # - $path/setup/ganymed$ganymednum.rc50 # - $path/setup/sponde$spondenum.rc51 # - $path/datasets/mcdataset-for-sponde.txt (if you use the script preparemc,52 # this file is produced automatically)53 # - $path/datasets/$datasetfilename (you give the datasetfilename below, but54 # you have to make sure, that it is in the directory $path/datasets55 # 56 # To re-run ganymed (e.g. with new Software-Version), you have to delete57 # the ganymed*.root files or set a new ganymednum.58 # 29 # This script is: 30 # - writing rc-files with different sets of cuts 31 # the set of cuts can be steered with the variables 32 # $par3step, $par3numminus, $par3num and 33 # $par1step, $par1numminus, $par1num 34 # par*step step width for changing the parameter * 35 # (suggested value: 0.005) 36 # par*numminus number of steps going to smaller values of the parameter * 37 # (starting value in your ganymed.rc file) 38 # par*num number of steps for changing the parameter * 39 # par3: Cut1.Param3 from the ganymed.rc file 40 # par1: Cut1.Param1 from the ganymed.rc file 41 # - writing a condor dag file for spectrum study 42 # With submitting this dag file with condor_submit_dag to condor from your 43 # Mars directroy you are running ganymed and sponde for all different rc 44 # files. The condor dag man is taking care of the order of the jobs, 45 # i.e. that sponde is started just when ganymed has been finished. 46 # 47 # To start several spondes please set the arrays $spondes. 48 # It is also possible to start new spondes without rerunning 49 # ganymed and/or the other spondes. To do so, please set the 50 # variables $doganymed and $spondedones accordingly 51 # 52 # Remark: You have to submit the condor dag file from your Mars directory. 53 # 54 # For more detailed information read the comments directly before 55 # each variable. 56 # 59 57 ############################################################################## 60 61 62 # to be set by the user 63 path=/home/dorner/crabspectrum 64 mars=/home/dorner/mars.cvs 65 datasetfilename=datasetcrab2005-2.txt 66 spondenum=0 67 ganymednum=1 68 # settings for parameter 3 58 # 59 60 # 61 # instructions and setup of the script 62 # please set the variables according to your analysis 63 # 64 65 # path for you analysis 66 path=/home/dorner/final_analysis 67 # path where your condor dagfile is stored and where you need 68 # the files processds.submit and processsponde.submit 69 condorpath=$path/condor 70 # path to store your resourcefiles 71 # you should have there the ganymed.rc, which you want to use 72 # and your sponde.rc files 73 rcpath=$path/resources 74 ganymedrc=$rcpath/ganymed_onoff.rc 75 # outpath for your spectrum results 76 # a directory for each set of cuts will be created there and 77 # the ganymed and sponde output will be stored in these directories 78 specpath=/results/spectrumSet2 79 # name of your dataset 80 # it has to be stored as dataset$dataset.txt in the directory 81 # $path/datasets 82 dataset="20060002" 83 # this is the name of the condor-dag file, which you have to submit 84 # with condor_submit_dag from your Mars directory 85 dagfile=$condorpath/set2spectrum.dag3 86 # here you define whether ganymed still has to be done 87 # if yes, set the variable $doganymed to "yes" 88 #doganymed="yes" 89 doganymed="no" 90 # sponde.rc files have to be in the directory $rcpath 91 # they need to have the naming sponde1.rc, sponde2.rc, sponde3.rc 92 # (numbers in the following array) 93 # the sponde.root files will be named in the same way (sponde(num).root) 94 spondes=( 1 2 ) 95 # in this array you define whether the sponde is already done 96 spondedones=( "done" "" ) 97 98 # this is the mc dataset, which has been created with the script 99 # preparemc 100 mcdataset=$path/mc/mcdataset2.txt 101 102 # values for par3 69 103 par3step=0.005 70 104 par3numminus=10 71 105 par3num=13 72 # settings for parameter1106 # values for par1 73 107 par1step=0.005 74 108 par1numminus=1 75 par1num=7 76 77 78 function printsetup() 79 { 80 echo "you set the following parameters: " 81 echo " path: $path " 82 echo " ganymedrc: $ganymedrc" 83 echo " sponderc: $sponderc" 84 echo " dataset: $dataset" 85 echo " mcdataset: $mcdataset" 86 echo " spondenum: $spondenum" 87 echo " ganymednum: $ganymednum" 88 echo " par1: -$par1numminus to $par1num in $par1step steps" 89 echo " par3: -$par3numminus to $par3num in $par3step steps" 90 } 91 92 #general variables 93 datasetpath=$path/datasets 94 setuppath=$path/setup 95 #resultpath=$path/ganyspec 96 resultpath=$path/ganyspec`echo $datasetfilename | sed -e 's/[.]txt//'` 97 dataset=$datasetpath/$datasetfilename 98 mcdataset=$datasetpath/mcdataset-for-sponde.txt 99 ganymedrc=$setuppath/ganymed$ganymednum.rc 100 sponderc=$setuppath/sponde$spondenum.rc 101 setuplog=$setuppath/setup`date +%F-%H-%M-%S`.log 102 103 if ! ls $ganymedrc >/dev/null 2>&1 104 then 105 echo "couldn't find $ganymedrc." 106 echo "please provide the file $ganymedrc and re-run the script" 107 exit 108 fi 109 110 if ! ls $sponderc >/dev/null 2>&1 111 then 112 echo "couldn't find $sponderc." 113 echo "do you want to continue anyhow? (ganymed will be done)" 114 echo "please insert y, if you want continue" 115 echo " n, if you want quit" 116 117 answer=`head -n 1` 118 case $answer in 119 y) echo "continue creating rc files and running ganymed" 120 ;; 121 n) echo "please provide the file $ganymedrc and re-run the script" 122 exit 123 ;; 124 *) echo "your answer is not clear -> exit" 125 exit 126 ;; 127 esac 128 129 fi 130 131 #start of the script 132 printsetup 133 printsetup > $setuplog 134 135 mkdir -pv $resultpath 136 137 echo "generating the ganymed.rc files with different parameter sets" 138 # generating the ganymed.rc files with different parameter sets 109 par1num=7 110 111 # 112 # end of setup 113 # beginning of script 114 # 115 116 # some checks 117 # checking if the given files and paths are existing 118 if ! [ -e $mcdataset ] 119 then 120 echo "Your mc dataset file $mcdataset does not exist." 121 exit 122 fi 123 if ! [ -e $path$specpath ] 124 then 125 echo "Your output path $path$specpath does not exist." 126 exit 127 fi 128 if ! [ -e $path/datasets/dataset$dataset.txt ] 129 then 130 echo "Your dataset file $path/datasets/dataset$dataset.txt does not exist." 131 exit 132 fi 133 if ! [ -e $ganymedrc ] 134 then 135 echo "Your ganymed rc file $ganymedrc does not exist." 136 exit 137 fi 138 for (( l=0 ; l < ${#spondes[@]} ; l++ )) 139 do 140 if ! [ -e $rcpath/sponde${spondes[$l]}.rc ] 141 then 142 echo "Your sponde rc file $rcpath/sponde${spondes[$l]}.rc does not exist." 143 exit 144 fi 145 done 146 147 # get the parameters 139 148 par3=`cat $ganymedrc | grep 'Cut1.Param3' | cut -d: -f2` 140 149 par1=`cat $ganymedrc | grep 'Cut1.Param1' | cut -d: -f2` 141 142 echo "parameter: 3 $par3 , 1 $par1" 143 150 echo "parameters: " 151 echo " par3= $par3" 152 echo " par1= $par1" 153 echo "" 154 155 # calculate the parameters with which you start 144 156 start3=`echo $par3 - \( $par3numminus*$par3step \) | bc ` 145 157 start1=`echo $par1 - \( $par1numminus*$par1step \) | bc ` 146 echo "start: 1: $start1 3: $start3" 147 158 echo "start: " 159 echo " par1: $start1 " 160 echo " par3: $start3" 161 echo "" 162 163 164 # function to print the lines for ganymed to the dag file 165 function printganydagentry() 166 { 167 if [ "$doganymed" = "yes" ] 168 then 169 echo "JOB gany$name $condorpath/processds.submit" 170 else 171 echo "JOB gany$name $condorpath/processds.submit DONE" 172 fi 173 echo "VARS gany$name path=\"$path\"" 174 echo "VARS gany$name out=\"$dir\"" 175 echo "VARS gany$name ds=\"$dataset\"" 176 echo "VARS gany$name num=\"$dataset\"" 177 echo "VARS gany$name rc=\"$rcfile\"" 178 echo "" 179 } 180 181 # function to print the lines for sponde to the dag file 182 function printspecdagentry() 183 { 184 sponderc=$rcpath/sponde$1.rc 185 if [ "$2" = "done" ] 186 then 187 echo "JOB spec$1_$name $condorpath/processsponde.submit DONE" 188 else 189 echo "JOB spec$1_$name $condorpath/processsponde.submit" 190 fi 191 echo "VARS spec$1_$name path=\"/home/dorner/final_analysis\"" 192 echo "VARS spec$1_$name out=\"$outpath\"" 193 echo "VARS spec$1_$name rc=\"$sponderc\"" 194 echo "VARS spec$1_$name spondenum=\"$1\"" 195 echo "VARS spec$1_$name mcds=\"$mcdataset\"" 196 echo "VARS spec$1_$name num=\"$dataset\"" 197 echo "" 198 echo "PARENT gany$name CHILD spec$1_$name " 199 echo "" 200 } 201 202 echo "writing dag file $dagfile for dataset $dataset" 203 echo "# dag file for dataset $dataset" > $dagfile 204 echo "" >> $dagfile 148 205 val1=$start1 149 206 val3=$start3 150 207 count=0 151 208 for (( i=0 ; i < $par3num ; i++ )) 152 209 do 153 210 for (( j=0 ; j < $par1num ; j++ )) 154 211 do 155 # echo "i: $i - j: $j ------- par1: $val1 and par3: $val3" 156 dir=$resultpath/set${val1}_${val3} 157 if ! ls $dir >/dev/null 2>&1 212 name=${val1}_${val3} 213 dir=$specpath/ganyspec$name 214 outpath=$path$dir 215 rcfile=$outpath/ganymed_${name}_onoff.rc 216 if ! [ -d $outpath ] 158 217 then 159 mkdir - pv $dir218 mkdir -v $outpath 160 219 fi 161 # rcfile=$dir/ganymed_${val1}_${val3}_onoff.rc 162 rcfile=$dir/`basename $ganymedrc` 163 if ! ls $rcfile >/dev/null 2>&1 164 then 165 cat $ganymedrc | sed -e s/"${par1}"/" ${val1}"/ -e s/"${par3}"/" ${val3}"/ > $rcfile 166 else 167 echo "rcfile $rcfile already exists" 168 fi 220 cat $ganymedrc | sed -e s/"${par1}"/" ${val1}"/ -e s/"${par3}"/" ${val3}"/ > $rcfile 169 221 val1=`echo $val1 + $par1step | bc` 222 echo " writing dag entry for set of cuts par1: $val1, par3: $val3" 223 echo "# ganymed and sponde for dataset $dataset with cuts $name" >> $dagfile 224 echo "" >> $dagfile 225 printganydagentry >> $dagfile 226 for (( k=0 ; k < ${#spondes[@]} ; k++ )) 227 do 228 printspecdagentry ${spondes[$k]} ${spondedones[$k]} >> $dagfile 229 done 230 echo "" >> $dagfile 231 count=`echo $count + 1 | bc` 170 232 done 171 233 val3=`echo $val3 + $par3step | bc` … … 173 235 done 174 236 175 176 # running ganymed and sponde for different parameter sets 177 178 # function running ganymed and sponde for a set of cuts 179 function dospec() 180 { 181 cd $mars 182 183 name=$set/ganymed`printf %08d $ganymednum` 184 ganymedfile=$name.root 185 if ! ls $ganymedfile >/dev/null 2>&1 186 then 187 cd $mars 188 # rc=`ls $set/ganymed_*onoff.rc` 189 ganymedlog=$name.log 190 echo "starting ganymed for set $set ..." 191 if ! condor_run ./ganymed -b -f --n=$ganymednum --log=$ganymedlog --out=$set --config=$set/`basename $ganymedrc` $dataset >/dev/null 192 then 193 echo "condor is not working " 194 return 195 fi 196 else 197 echo "ganymed for set $set already done => continue with sponde" 198 fi 199 200 if ! ls $sponderc >/dev/null 2>&1 201 then 202 echo "ERROR: spondercfile $sponderc is missing" 203 return 204 fi 205 spondefile=$set/sponde$spondenum-g$ganymednum.root 206 spondelog=$set/sponde$spondenum-g$ganymednum.log 207 if ! ls $spondefile >/dev/null 2>&1 208 then 209 echo "starting sponde for set $set ..." 210 if ! condor_run ./sponde -b -f --log=$spondelog --config=$sponderc -f $ganymedfile $mcdataset $spondefile >/dev/null 211 then 212 echo "condor is not working " 213 return 214 fi 215 echo "finished sponde for set $set ..." 216 else 217 echo "sponde $spondenum for set $set already done => please remove sponde files or give new spondenum" 218 fi 219 } 220 221 222 sets=`find $resultpath -type d` 223 for set in ${sets[@]} 224 do 225 # echo "set: "$set 226 if [ "$set" == "$resultpath" ] 227 then 228 continue 229 fi 230 dospec & 231 sleep 3 232 done 233 234 237 echo "" 238 echo "finished writing condor dag file "$dagfile 239 echo "in total $count different sets of cuts are used" 240 echo "" 241 echo "you can submit it now with \"condor_submit_dag -f $dagfile\" from your Mars directory" 242 echo "" 243 -
trunk/MagicSoft/Mars/scripts/preparemc
r8227 r8626 1 1 #!/bin/sh 2 #3 2 # ======================================================================== 4 3 # … … 20 19 # Author(s): Daniela Dorner 05/2006 <mailto:dorner@astro.uni-wuerzburg.de> 21 20 # 22 # Copyright: MAGIC Software Development, 2000-200 621 # Copyright: MAGIC Software Development, 2000-2007 23 22 # 24 23 # … … 33 32 # 34 33 # variables, that have to be set by the user: 35 # - dirdirectory, where the mc sequence and dataset files are stored34 # - path directory, where the mc sequence and dataset files are stored 36 35 # be careful: don't move the sequence files afterwards, as the 37 36 # paths are stored in the datasetfiles 38 # - mars directory, where your Mars version is stored39 # only needed, if you want to create a rf-root-file for the40 # energy estimation41 37 # - zdmin minimum zenith distance 42 38 # - zdmax maximum zenith distance … … 48 44 # - numruns num of runs, that are in the sequence file, which are used 49 45 # for training (SequencesOn in $mcdataset) 50 # - trainenergy if set to 'yes', the rf for energy estimation is trained 46 # 47 # Remark: For the training of the RF for the energy estimation you need the 48 # macro trainengery.C in the path $path/macros in a modified version, i.e. the 49 # inputfile (mcdataset) and the outputfile (rf-root file) are given as 50 # options: $macrospath/trainenergy.C+\("\"$mcdataset\""\,"\"$rffile\""\) 51 51 # 52 # Remark: You have to run the script in your Mars directory. 52 53 # 53 54 ############################################################################## 54 55 55 56 57 path=/home/dorner/final_analysis 58 mcoutpath=$path/mc 59 macrospath=$path/macros 60 mcdataset=$mcoutpath/mcdataset.txt 61 mcdataset2=$mcoutpath/mcdataset2.txt 56 62 57 #to be set by the user 58 dir=/home/dorner/crabspectrum 59 mars=/home/dorner/mars.cvs 60 zdmin=5 63 zdmin=17 61 64 zdmax=35 62 65 psf=14 63 modes=( "02" "04" ) # e.g. nowobble 64 numruns=5 65 # set here if you want to train a rf-engery-estimator 66 #trainenergy= 67 trainenergy="yes" 66 modes=( "02" ) # nowobble 67 numruns=3 68 68 69 # be careful with $date, when path changes 70 mcpath=/magic/montecarlo 69 71 70 # begin of script71 datasetdir=$dir/datasets72 sequencedir=$dir/sequences73 setupdir=$dir/setup74 mcdir=/magic/montecarlo75 mcrawdir=$mcdir/rawfiles76 mcstardir=$mcdir/star77 mcdataset=$datasetdir/mcdataset-test-train.txt78 mcdataset2=$datasetdir/mcdataset-for-sponde.txt79 80 # make directories81 mkdir -pv $dir82 mkdir -v $sequencedir83 mkdir -v $datasetdir84 85 #calculation of the zbin86 72 zbinmin=`echo "scale=2 ; 100*(1 - c($zdmin*3.14/180))+1" | bc -l` 87 73 zbinmax=`echo "scale=2 ; 100*(1 - c($zdmax*3.14/180))+1" | bc -l` 74 88 75 zbinmin=`echo $zbinmin | cut -d. -f1` 89 76 zbinmax=`echo $zbinmax | cut -d. -f1` 90 echo "zd: min: $zbinmin max: $zbinmax" 91 echo "numruns: $numruns" 77 78 echo "zd: min: $zdmin max: $zdmax" 79 echo "zbin: min: $zbinmin max: $zbinmax" 80 echo "$numruns runs are classified as test the rest as train" 92 81 93 82 j=0 94 for mode in $ {modes[@]}83 for mode in $modes 95 84 do 96 echo "mode: "$mode97 85 for (( i=$zbinmin ; i < $zbinmax ; i++ )) 98 86 do 99 87 zbin=`printf %02d $i` 100 echo "zbin: $zbin" 101 path=$mcrawdir/19$zbin/$mode/$psf 102 runsforfirst= 103 104 runs=(`ls $path 2>/dev/null | grep Gamma | cut -d_ -f2 | sed -e 's/^0//g' -e 's/^0//g' -e 's/^0//g' -e 's/^0//g' | tr "\n" " "`) 88 path=$mcpath/rawfiles/19$zbin/$mode/$psf 89 runs=(`ls $path | grep Gamma | cut -d_ -f2 | sed -e 's/^0//g' -e 's/^0//g' -e 's/^0//g' -e 's/^0//g' -e 's/^0//g' -e 's/^0//g' | tr "\n" " "`) 105 90 if [ "$runs" = "" ] 106 91 then … … 108 93 continue 109 94 fi 95 echo "found ${#runs[@]} Gamma MC files in path "$path 110 96 97 runsforfirst="" 111 98 firstrun=${runs[0]} 112 99 secondrun=${runs[${numruns}]} … … 119 106 unset runs[$k] 120 107 done 121 mcrawdir2=`echo $mcrawdir | sed -e 's/\//\\\\\//g'` 122 date=`echo $path | sed -e "s/$mcrawdir2\///" -e 's/\//-/g'` 123 # date=`echo $path | cut -c 22-31 | sed -e 's/\//-/g'` 108 date=`echo $path | cut -d/ -f5-7 | sed -e 's/\//-/g'` 124 109 125 trainsequfile=$ sequencedir/sequence$firstrunno.txt110 trainsequfile=$mcoutpath/sequence$firstrunno.txt 126 111 trainsequences[$j]=$firstrunno 127 112 echo " writing train-sequfile "$trainsequfile … … 133 118 echo "DatRuns: $firstrun$runsforfirst" >> $trainsequfile 134 119 echo "" >> $trainsequfile 120 echo "MonteCarlo: Yes" >> $trainsequfile 121 echo "" >> $trainsequfile 135 122 136 testsequfile=$ sequencedir/sequence$secondrunno.txt123 testsequfile=$mcoutpath/sequence$secondrunno.txt 137 124 testsequences[$j]=$secondrunno 138 echo "writing test-sequfile "$testsequfile125 # echo "writing test-sequfile "$testsequfile 139 126 echo "Sequence: $secondrun" > $testsequfile 140 127 echo "Night: $date" >> $testsequfile … … 144 131 echo "DatRuns: ${runs[@]}" >> $testsequfile 145 132 echo "" >> $testsequfile 133 echo "MonteCarlo: Yes" >> $testsequfile 134 echo "" >> $testsequfile 146 135 147 136 j=$j+1 … … 149 138 done 150 139 151 152 140 echo "# test sequences: ${#testsequences[@]}" 153 141 echo "# train sequences: ${#trainsequences[@]}" 154 155 echo "writing dataset files $mcdataset and $mcdataset2"156 142 157 143 echo "AnalysisNumber: 1 " > $mcdataset … … 173 159 numtrain=${trainsequences[$i]} 174 160 notrain=`echo $numtrain | cut -c 0-4` 175 echo "Sequence$numtrain.File: $ sequencedir/sequence$numtrain.txt" >> $mcdataset176 echo "Sequence$numtrain.Dir: $mc stardir/$notrain/$numtrain" >> $mcdataset177 echo "Sequence$numtrain.File: $ sequencedir/sequence$numtrain.txt" >> $mcdataset2178 echo "Sequence$numtrain.Dir: $mc stardir/$notrain/$numtrain" >> $mcdataset2161 echo "Sequence$numtrain.File: $mcoutpath/sequence$numtrain.txt" >> $mcdataset 162 echo "Sequence$numtrain.Dir: $mcpath/star/$notrain/$numtrain" >> $mcdataset 163 echo "Sequence$numtrain.File: $mcoutpath/sequence$numtrain.txt" >> $mcdataset2 164 echo "Sequence$numtrain.Dir: $mcpath/star/$notrain/$numtrain" >> $mcdataset2 179 165 180 166 numtest=${testsequences[$i]} 181 167 notest=`echo $numtest | cut -c 0-4` 182 echo "Sequence$numtest.File: $ sequencedir/sequence$numtest.txt" >> $mcdataset183 echo "Sequence$numtest.Dir: $mc stardir/$notrain/$numtrain" >> $mcdataset184 echo "Sequence$numtest.File: $ sequencedir/sequence$numtest.txt" >> $mcdataset2185 echo "Sequence$numtest.Dir: $mc stardir/$notrain/$numtrain" >> $mcdataset2168 echo "Sequence$numtest.File: $mcoutpath/sequence$numtest.txt" >> $mcdataset 169 echo "Sequence$numtest.Dir: $mcpath/star/$notrain/$numtrain" >> $mcdataset 170 echo "Sequence$numtest.File: $mcoutpath/sequence$numtest.txt" >> $mcdataset2 171 echo "Sequence$numtest.Dir: $mcpath/star/$notrain/$numtrain" >> $mcdataset2 186 172 done 187 173 188 174 189 if [ "$trainenergy" == "yes" ] 190 then 191 echo "creating rf-root-file for energy-estimation..." 192 cd $mars 193 logfile=$setupdir/trainenergy.log 175 logfile=$mcoutpath/trainenergy.log 176 rffile=$mcoutpath/rf-energy.root 194 177 195 root -q -b $mars/datacenter/macros/trainenergy.C+\("\"$mcdataset\""\,"\"$setupdir/\""\) | tee $logfile 196 fi 178 echo "mcdataset: $mcdataset" 179 echo "rffile: $rffile" 180 echo "macrospath: $macrospath" 181 root -q -b $macrospath/trainenergy.C+\("\"$mcdataset\""\,"\"$rffile\""\) | tee $logfile 182
Note:
See TracChangeset
for help on using the changeset viewer.