#!/usr/bin/python
import os,sys
from program import program
import common

class truncate(program):
  name="TRUNCATE"
  binary="truncate"
  modif=''

  def Init(self):
    self.outfilename = { 'mtz': self.name+'.mtz' }

  def TreatInput(self):
    obj,N=self.inp.GetTargetObjects('SAD', no_model=True, inten=True, fsftyp='mtz', no_warn=True)
    if obj is None:
      # convert only I->F
      obj = self.inp.Get('fsigf', filetype='mtz', typ='average', col='i')
      if not obj:
        common.Error('Nothing (suitable) inputted for I->F conversion by {0}'.format(self.name))
      self.SetKey('labin', ('IMEAN='+obj.GetLabel('i'),'SIGIMEAN='+obj.GetLabel('sigi')) )
      self.objs=(obj,)
    else:
      # convert I+/I->F+/F-
      self.SetKey('labin', ('I(+)='+obj['f+'].GetLabel('i'),'SIGI(+)='+obj['f+'].GetLabel('sigi')) )
      self.AddToKey('labin', ('I(-)='+obj['f-'].GetLabel('i'),'SIGI(-)='+obj['f-'].GetLabel('sigi')) )
      self.SetKey('anomalous','yes')
      self.objs=(obj['f+'],obj['f-'])
    self.SetArg('hklin', self.objs[0].GetFileName('mtz'))

  def DefineOutput(self):
    for obj in self.objs:
      outo=self.out.AddCopy(obj)
      self.out.SetFileToChild(outo, self.outfilename['mtz'], 'mtz')
      outo.SetLabel( ['f','sigf'] )

  def TreatOutput(self):
    self.SetArg('hklout', self.out.Get('fsigf').GetFileName('mtz'))
    for outo in self.out.GetAll('fsigf'):
      if outo.GetType()=='average':
        self.SetKey( 'labout', ('F='+outo.GetLabel('f'),'SIGF='+outo.GetLabel('sigf')) )
      elif outo.GetType()=='plus':
        self.AddToKey( 'labout', ('F(+)='+outo.GetLabel('f'),'SIGF(+)='+outo.GetLabel('sigf')) )
      elif outo.GetType()=='minus':
        self.AddToKey( 'labout', ('F(-)='+outo.GetLabel('f'),'SIGF(-)='+outo.GetLabel('sigf')) )
      else:
        common.Error('Unexpected data type for {0}.'.format(self.name))
