package main_config ; sub get_commands { my $key = "" ; my $word ; my %c_line = () ; my @arg_char = () ; foreach $word ( @_ ) { @arg_char = split( '', $word ) ; # print "word: $word \n" ; if ( length($word) <= 0 ) { next ; } if ( $word !~ m"[a-zA-F]" ) { } #print "word: $word is a number\n" ; } else { # print "word: $word is a NON-number\n" ; if ( $arg_char[0] eq '-' ) { if ( $arg_char[1] eq "-" ) { my $num = scalar(@arg_char) - 1; $key = join ( "", @arg_char[2 .. $num] ); push ( @{$c_line{$key}}, ' ' ) ; } else { $key = $arg_char[1] ; push ( @{$c_line{$key}}, ' ' ) ; } next ; } } if ( $key ne '' ) { $key = lc ( $key ) ; # print "$key: \n" ; my $tmp = join ( '', @{$c_line{$key}} ) ; if ( $tmp eq ' ' ) { delete $c_line{$key} ; } push ( @{$c_line{$key}}, $word ); } } return ( %c_line ) ; } sub read_main_config_file { my $file_name = $_[0] ; my $key ; my @words = () ; my $np_line = 0; my %whole_file = () ; open ( TXT, $file_name ) || die "READ FILE OPEN ERROR: >$file_name< \n" ; # print " read para_file: >$file_name<\n" ; my $nc ; while() { chomp ; my $line = $_ ; my @values = () ; my $value ; $nc = length($line) ; # print " $nc.) > $line \n" ; if ( $nc > 0 ) { @words = split( "=", $line ) ; $key = substr( $words[0], 8, length($words[0]) ) ; # print " $key " ; # @values = split( " ", substr ($words[1], 1,-1) ) ; $words[1] =~ s/\"//g ; $words[1] =~ s/\'//g ; @values = split( " ", $words[1] ) ; foreach $value ( @values ) { # print " :: $value " ; push ( @{$whole_file{$key}}, $value ) ; } # print " \n" ; } } close(TXT) ; #print " read >$file_name< done. \n" ; return ( %whole_file ) ; } sub write_main_config_file { my $file_name = shift (@_) ; my %save_list = @_ ; my $key ; my $value ; if ( !-f $file_name ) { goto WRITEIT } my %my_test = read_main_config_file ( $file_name ) ; foreach $key ( sort keys (%save_list) ) { # print "WRITE> TEST key $key \n"; if ( !exists($my_test{$key} ) ) { goto WRITEIT } my $xx = scalar(@{$save_list{$key}}) ; # print "WRITE> TEST scalar $xx \n"; if ( scalar(@{$save_list{$key}}) != scalar(@{$my_test{$key}}) ) { goto WRITEIT } for ( $xx = 0; $xx < scalar( @{$save_list{$key}} ) ; $xx++ ) { # print "WRITE> TEST $xx ${@{$save_list{$key}}}[$xx] ${@{$my_test{$key}}}[$xx] \n"; if ( ${@{$save_list{$key}}}[$xx] ne ${@{$my_test{$key}}}[$xx] ) { goto WRITEIT } } } # print "WRITE>>>> $file_name NO WRITE \n" ; return ; WRITEIT: if ( -f $file_name ) { my $back = join ('', $file_name, ".old" ) ; if ( -f $back ) { my $back2 = join ('', $file_name, ".old2" ) ; system ( "mv $back $back2" ) ; } system ( "mv $file_name $back" ) ; } # print "WRITE>>>> $file_name TO WRITE \n" ; open( LIT, "> $file_name" ) || die "WRITE FILE OPEN ERROR: >$file_name< \n" ; foreach $key ( sort keys (%save_list) ) { if ( exists($save_list{$key}) && length( ${$save_list{$key}}[0]) > 0 ) { # print "MY_MAIN $key= @{$save_list{$key}} \n"; # , " @{$save_list{$key}} \n\n"; my $val = join (' ', @{$save_list{$key}}) ; my $line = join( '', "MY_MAIN_", $key, '="', $val, '"' ) ; print LIT "$line\n" ; } # else # { print ">>>>>>>>> $key IS EMPTY \n"; # } } close (LIT) ; } sub write_get_diffr_data { my ( $fh, $in_sub, $CRYST ) = @_ ; my %my_main = %$in_sub ; # print $my_main{"DFR_FORMAT"}[0] ; # print $fh " MAIN_CONFIG_FILE_TEST> HERE I AM \n" ; my $STR ; my @lines = ("! CRYSTAL FORM ", $CRYST+1, "\n" ) ; @lines = ( @lines, "set vari FILE_CELL = ", ${$my_main{"FILE_CELL"}}[$CRYST], "\n" ) ; push( @lines, "set vari FILE_SYMM = " ) ; push( @lines, join( '', '"?MAIN_SYMM:', ${$my_main{"FILE_SYMM"}}[$CRYST], '.symm"' ) ); push( @lines, "\n") ; @lines = ( @lines, "set vari FILE_FOBS = ", ${$my_main{"FILE_REFL"}}[$CRYST], "\n" ) ; @lines = ( @lines, "set vari RESOL_MIN global real = ", ${$my_main{"DFR_RES_MIN"}}[0], "\n") ; @lines = ( @lines, "set vari RESOL_MAX global real = ", ${$my_main{"DFR_RES_MAX"}}[0], "\n") ; # set vari RESOL_MIN global real = $RESOL_MIN # set vari RESOL_MAX global real = $RESOL_MAX push( @lines, "\n") ; push( @lines, "read file FILE_CELL cell \n") ; push( @lines, "read file FILE_SYMM symm \n" ) ; push( @lines, "read file FILE_FOBS refl init " ) ; push( @lines, $my_main{"DFR_FORMAT"}[0] ) ; push( @lines, " limit " ) ; @lines = ( @lines, $my_main{"DFR_LIMIT_H"}[0], " ", $my_main{"DFR_LIMIT_K"}[0], " ", $my_main{"DFR_LIMIT_L"}[0] ) ; push( @lines, " \\" ) ; push( @lines, "\n") ; push( @lines, " reso RESOL_MIN RESOL_MAX friedel re_read \n") ; push( @lines, "\n") ; if ( $my_main{"DFR_RFREE"}[0] eq "ON" ) { push( @lines, "set vari IRESULT_0 global = -1 \n" ) ; push( @lines, "refl show key TEST\n" ) ; push( @lines, "if ( IRESULT_0 .le. 0 ) then \n" ) ; push( @lines, "refl key TEST sele random 20 1 end \n" ) ; push( @lines, "end_if\n" ) ; push( @lines, "refl key WORK_REFL sele defined .a .not TEST end\n" ) ; } else { push( @lines, "refl key TEST sele .n all end \n" ) ; push( @lines, "refl key WORK_REFL sele defined end \n" ) ; } print $fh @lines ; } 1;