#################################################################################################
#
#
# File
#
#    utilities.sh
#
# Contenuto
#
#   definizione delle utility utilizzate nella costruzione dell'ambiente necessario alle
#   elaborazioni dei dati ibis
#
#################################################################################################

#################################################################################################
#
# checkForFitsCompliance()
#
#    Verifica la corripondenza del contenuto delle scw agli standard fix 
#
# Parametri
#
#    listOfScwsAbsolutePath:      path assoluto del file delle science windows da elaborare
#    exeLogAbsolutePath:          path assoluto del file di log per l'elsborzione dei dati
#    qualityCheckLogAbsolutePath: assoluto del file di log per il controllo di qualita' sui
#                                 dati
#
# Valore restituito
#
#    SUCCESS (0): se il controllo termina con successo
#    FAILURE (1): altrimenti
#
#################################################################################################

function checkForFitsCompliance () 
  {
  # Inizializza le variabili mnemoniche per i parametri
  listOfScwsAbsolutePath=$1
  exeLogAbsolutePath=$2
  qualityCheckLogAbsolutePath=$3
  
  #
  # Debug
  #
  # Verificare il corretto passaggio dei parametri 
  #
  # echo -e "\n######### Debug - Inizio ############################################\n"
  #
  # echo "listOfScwsAbsolutePath: $listOfScwsAbsolutePath"
  # echo "exeLogAbsolutePath: $exeLogAbsolutePath"
  # echo "qualityCheckLogAbsolutePath: $qualityCheckLogAbsolutePath"
  #
  # echo -e "\n######### Debug - Fine ##############################################\n"
  #
  # exit
  #
  
  # Traccia l'ingresso nella funzione
  appendToLog "$(dateTime)  ${FUNCNAME[0]}() - $MSG_INTO" \
              "$exeLogAbsolutePath"
			  
  #
  # Debug
  #
  #
  # Visualizzare il contenuto del file di log
  #
  # echo -e "\n######### Debug - Inizio ############################################\n"
  #
  # cat $exeLogAbsolutePath
  #
  # echo -e "\n######### Debug - Fine ##############################################\n"
  #
  # exit
  #
			  
  # Inizializza a 0 il contatore per il numero dei file compton_events.fits.gz, 
  # isgri_events.fits.gz o swg.fits mancanti
  noOfMissingFiles=0
  
  # Inizializza a 0 il contatore per il numero totale di file non conformi allo standard fits
  noOfNonCompliantFiles=0
  
  # Definisce l'array dei nomi dei file da verificare all'interno di una scw
  fileNamesArray=( \
                 "compton_events.fits.gz" \
  				 "isgri_events.fits.gz" \
  				 "swg.fits" \
                 )
  
  # Scandisce il file delle scw riga per riga
  while read line; do
    # Se la riga delimita una run passa alla successiva
	if test $line == "end_of_run"
	then
	   continue
	fi 
	
	# Scandisce i nomi dei file da verificare all'interno di una scw
	for fileName in ${fileNamesArray[@]};
	   do
       # Costruisce il path assoluto del file
	   fileAbsolutePath=$(dirname "$line")/"$fileName"
	
       # Verifica l'esistenza del file
	   checkFileExistence $fileAbsolutePath
	
	   if test $? -eq $FAILURE
	   then
	      # Se il file e' mancante traccia l'evento
          appendToLog "$(dateTime)  ${FUNCNAME[0]}() - $MISSING_FILE $fileAbsolutePath" \
                      "$qualityCheckLogAbsolutePath"
					  
          #
          # Debug
          #
          #
          # Visualizzare il contenuto del file di log
          #
          # echo -e "\n######### Debug - Inizio ############################################\n"
          #
          # cat $qualityCheckLogAbsolutePath
          #
          # echo -e "\n######### Debug - Fine ##############################################\n"
          #
          # exit
          #

          # aggiorna il numero dei file mancanti
	      noOfMissingFiles=$(expr $noOfMissingFiles + 1)
       else
	      # Verifica la conformita' allo standard fits del file compton_events.fits.gz
	      fitsverify -q $fileAbsolutePath > /dev/null 2> /dev/null
	   
	      if test $? == $FAILURE
	      then
	         # Se il file non e' conforme traccia l'evento
		     appendToLog "$(dateTime)  ${FUNCNAME[0]}() - $FITS_NON_COMPLIANT_FILE $fileAbsolutePath" \
                         "$qualityCheckLogAbsolutePath"
						 
             #
             # Debug
             #
             #
             # Visualizzare il contenuto del file di log
             #
             # echo -e "\n######### Debug - Inizio ############################################\n"
             #
             # cat $qualityCheckLogAbsolutePath
             #
             # echo -e "\n######### Debug - Fine ##############################################\n"
             #
             # exit
             #
					  
	         # aggiorna il numero dei file non conformi
	         noOfNonCompliantFiles=$(expr $noOfNonCompliantFiles + 1)
	      fi
	   fi
	   done
  done < $listOfScwsAbsolutePath
  
  # Traccia il numero di file mancanti
  appendToLog "$(dateTime)  ${FUNCNAME[0]}() - $NO_OF_MISSING_FILES $noOfMissingFiles" \
              "$qualityCheckLogAbsolutePath"
		
  # Traccia il numero di file non conformi
  appendToLog "$(dateTime)  ${FUNCNAME[0]}() - $NO_OF_FITS_NON_COMPLIANT_FILES $noOfNonCompliantFiles" \
              "$qualityCheckLogAbsolutePath"

  #
  # Debug
  #
  #
  # Visualizzare il contenuto del file di log
  #
  # echo -e "\n######### Debug - Inizio ############################################\n"
  #
  # cat $qualityCheckLogAbsolutePath
  #
  # echo -e "\n######### Debug - Fine ##############################################\n"
  #
  # exit
  #				 				      
  
  # Traccia l'uscita dalla funzione
  appendToLog "$(dateTime) ${FUNCNAME[0]}() - $MSG_OUT_OF" \
              "$exeLogAbsolutePath"
			  
  #
  # Debug
  #
  #
  # Visualizzare il contenuto del file di log
  #
  # echo -e "\n######### Debug - Inizio ############################################\n"   #
  # cat $exeLogAbsolutePath
  #
  # echo -e "\n######### Debug - Fine ##############################################\n"
  #
  # exit
  #		
			  
  # se il numero complessivo degli errori e' 0, termina con successo,
  # altrimenti con fallimento
  if test $(expr $noOfNonCompliantFiles + $noOfMissingFiles) == 0
  then
     return $SUCCESS
  else
     return $FAILURE
  fi
  }


#################################################################################################
#
# countScwsToBeProcessed()
#
#    conta le scw da elaborare all'interno del file che le contiene 
#
# Parametri
#
#    listOfScwsAbsolutePath:      path assoluto del file delle science windows da elaborare
#
# Valore restituito
#
#    scwsToBeProcessed: numero delle scw da elaborare all'interno del file che le contiene
#
#################################################################################################

function countScwsToBeProcessed ()
   {
   # Inizializza le variabili mnemoniche per i parametri
   listOfScwsAbsolutePath=$1
   
   #
   # Debug
   #
   # Verificare il corretto passaggio dei parametri 
   #
   # echo -e "\n######### Debug - Inizio ############################################\n"
   #
   # echo "listOfScwsAbsolutePath: $listOfScwsAbsolutePath"
   #
   # echo -e "\n######### Debug - Fine ##############################################\n"
   #
   # exit
   #
   
   # Conta le scw da elaborare all'interno del file che le contiene
   scwsToBeProcessed=$(grep -o -i $SCWS_IDENTIFYING_SUBSTRING $listOfScwsAbsolutePath | wc -l)
   
   return $scwsToBeProcessed
   }
  
