#!/bin/tcsh -f

# bomrun
# A script to find particle orientations using distributed processing
# Usage:
#       psubmit bomrun -symmetry <symbol> -angles <theta_phi> -side <degrees> -annuli <annuli> 
#			-resolution <resolution> -reference <file> -sets <number> <files> -ss
# Example:
#       psubmit bomrun -sym D5 -ang 2 -ann 10,100 -res 30,500 -ref map.pif -sets 30 "*.star" -ss
# Bernard Heymann
# 20031104 - 20070711

set SYM = "C1"
set ANG = "2,2"
set ANN = "10,200"
set RES = "20,200"
set SAM = 1
set SET_SIZE = 20
set SIDE = ""
set SIDE_ANG = 0

# Interpret options
set a = 1
while ( "x$argv[$a]" =~ x-* )
#	echo $a $argv[$a]
	if ( "x$argv[$a]" =~ x-sym* ) then
		@ a++
		set SYM = $argv[$a]
	endif
	if ( "x$argv[$a]" =~ x-ang* ) then
		@ a++
		set ANG = $argv[$a]
	endif
	if ( "x$argv[$a]" =~ x-ann* ) then
		@ a++
		set ANN = $argv[$a]
	endif
	if ( "x$argv[$a]" =~ x-res* ) then
		@ a++
		set RES = $argv[$a]
	endif
	if ( "x$argv[$a]" =~ x-sam* ) then
		@ a++
		set SAM = $argv[$a]
	endif
	if ( "x$argv[$a]" =~ x-ref* ) then
		@ a++
		set REF = $argv[$a]
	endif
	if ( "x$argv[$a]" =~ x-set* ) then
		@ a++
		set SET_SIZE = $argv[$a]
	endif
	if ( "x$argv[$a]" =~ x-sid* ) then
		@ a++
		set SIDE_ANG = $argv[$a]
		set SIDE = "-side $SIDE_ANG"
	endif
	@ a++
end

set INSTAR = $argv[$a]


echo bpartsel -v 3 -all -sets $SET_SIZE -out sets.star $INSTAR
bpartsel -v 3 -all -sets $SET_SIZE -out sets.star $INSTAR > t.t
set SETS = `grep "Number of sets" t.t | cut -f2 -d":"`
rm t.t


echo "Setup for orientation-finding:"
echo "-----------------------------"
date
echo "Symmetry    = $SYM"
echo "Sampling    = $SAM"
echo "Angles      = $ANG"
echo "Side angle  = $SIDE_ANG"
echo "Annuli      = $ANN"
echo "Resolution  = $RES"
echo "Reference   = $REF"
echo "Set size    = $SET_SIZE"
echo "Sets        = $SETS"
echo "Parameters  = $INSTAR"

if ( ! -e temp_proj0000.spi ) then
	borient -v 1 -sym $SYM -ang $ANG $SIDE -mult -ref $REF
endif

set N = 1
while ( $N <= $SETS )
	set ST = `printf %04d $N`
	set JN = set_$ST
	set OUTSTAR = out_${ST}.star
	if ( ! -e $OUTSTAR ) then
		echo $JN
#		echo borient -v 1 -sym $SYM -ang $ANG $SIDE -resol $RES -ann $ANN -mode ccc -select $N -mult -out $OUTSTAR sets.star
#		borient -v 1 -sym $SYM -ang $ANG $SIDE -resol $RES -ann $ANN -mode ccc -select $N -mult -out $OUTSTAR sets.star >& ${JN}.log &
		psubmit borient -v 1 -sym $SYM -ang $ANG $SIDE -resol $RES -ann $ANN -mode ccc -select $N -mult -out $OUTSTAR sets.star -jn $JN
		sleep 5
	endif
	@ N++
end