#!/bin/bash
# www.guomeng.name
# 2011-03-24

dosfile="DOSCAR"
outfile="OUTCAR"

sflag=0
if [ -a PROCAR ]; then
suffix=$(grep 'ion  ' PROCAR | head -n 1 | sed 's/ion//g' | sed 's/tot//g')
sflag=1
fi

Efermi=$(grep E-fermi $outfile | tail -n 1 | awk '{print $3}')
## confirm Efermi
 # read -p "Fermi Level is: $Efermi eV, right or not? [Enter for yes, or input anothor value:] " input
#  input=${input:=y}
  
#  if [ $input == y ]; then
#    echo "Fermi-levle:" $Efermi
#  else
#    Efermi=$input
#    echo "Fermi-levle is set as:" $Efermi
#  fi

ISPIN=$(grep ISPIN $outfile | tail -n 1 | awk '{print $3}')
NEDOS=$(grep NEDOS $outfile | tail -n 1 | awk '{print $6}')
#NIONS=$(grep NIONS $outfile | tail -n 1 | awk '{print $12}')
#LORBIT=$(grep LORBIT $outfile | tail -n 1 | awk '{print $3}')
Pstr=$(head -n 6 $dosfile | tail -n 1)
Nlines=$(grep "$Pstr" $dosfile | wc -l)

###########################
## ISPIN=1
if [ $ISPIN == 1 ]; then
#echo ISPIN is 1
if [ $sflag == 1 ]; then
suffix1=$(echo $suffix | awk '{{printf "%8s", "E(eV)";}for(i=1;i<=NF;i++){printf "%13s", $i;}}')
fi
awk '
    BEGIN{i=0;}
        /'"$Pstr"'/{
        for (j=1;j<='$NEDOS';j++){
          getline;
          printf "%8.4f", $1-('$Efermi');
          for (k=2;k<=NF;k++){printf "%13.4e", $k;} ### ((-1)**(ISPIN-1))*$k
          printf "\n";
        }
        i=i+1;
        }
    ' $dosfile  > dos_all


i=0
  start=$((((NEDOS*i))+1))
  end=$((NEDOS*((i+1))))
  printf "%8s%13s%13s\n"  "E(eV)" "TDOS" "Sum-TDOS" > ./TotalDOS
  sed -n ''$start','$end' p' "dos_all" >> ./TotalDOS
  echo get TotalDOS

i=1
 while [ $i -le $((Nlines-1)) ]; do
   start=$((((NEDOS*i))+1))
   end=$((NEDOS*((i+1))))
   cat /dev/null > ./$i
   if [ $sflag == 1 ]; then
     echo "$suffix1" > ./$i
   fi
   sed -n ''$start','$end' p' "dos_all" >> ./$i
   echo get pdos of atom $i
   i=$((i+1))
 done

fi

##############################
## ISPIN=2
if [ $ISPIN == 2 ]; then
#echo ISPIN is 2
if [ $sflag == 1 ]; then
suffix2=$(echo $suffix | awk '{{printf "%8s", "E(eV)";}for(i=1;i<=NF;i++){printf "%13s%13s", $i"(up)", $i"(down)";}}')
fi
awk '
    BEGIN{i=0;}
	/'"$Pstr"'/{
	for (j=1;j<='$NEDOS';j++){
	  getline;
	  printf "%8.4f", $1-('$Efermi');
	  for (k=2;k<=NF;k++){if(k%2==0){printf "%13.4e", $k;} else{printf "%13.4e", (-1)*$k;}} ### ((-1)**(ISPIN-1))*$k
	  printf "\n";
	#  getline;
	}
	i=i+1;
	}
    ' $dosfile  > dos_all


i=0
  start=$((((NEDOS*i))+1))
  end=$((NEDOS*((i+1))))
  printf "%8s%13s%13s%13s%13s\n"  "E(eV)" "Spin(up)" "Spin(down)" "Sum(up)" "Sum(down)" > ./$i
  sed -n ''$start','$end' p' "dos_all" >> ./$i
  echo get pdos of atom $i

i=1
 while [ $i -le $((Nlines-1)) ]; do
   start=$((((NEDOS*i))+1))
   end=$((NEDOS*((i+1))))
   cat /dev/null > ./$i
   if [ $sflag == 1 ]; then
     echo "$suffix2" > ./$i
   fi
   sed -n ''$start','$end' p' "dos_all" >> ./$i
   echo get pdos of atom $i
   i=$((i+1))
 done

fi

rm dos_all
