Example #1
0
    def _setup(self, name, min_t, max_t, tag, swap = False):
        """
        Setup experiment
        
        @string name: name of experiment
        @float min_t: min temperature
        @float max_t: max temperature
        @int tag: tag for mpi communication
        @bool swap: perform swap?

        """
        settings.EXPERIMENT_NAME = name
        settings.EXPERIMENT_ROOT_NAME = self.name

        settings.PERFORM_SWAP = swap
        PT.min_temp = settings.MIN_T = min_t
        PT.max_temp = settings.MAX_T = max_t
        if self.temp_list is None:
            self.pt = PT()
        else:
            self.pt = PT(self.temp_list)

        if self.pt.size > 0:
            settings.PT = True

        settings.LOCAL_T = self.pt.get_temperature()
        logging.info("Local T: %f" % settings.LOCAL_T)
        
        settings.TAG = self.global_tag + tag
        settings.DELTA_STEP = 0
        settings.PT_MODULE = self.pt
        self.create_dir_structure("%s_%d_%d_%d" % ((name, ) + self.box_size), settings.EXPERIMENT_COPY)
        
        self.update_settings_files()
        self.current_exp_name = name
        
        temp_file = "%stemperature" % settings.EXPERIMENTAL_ROOT_DIR
        if not os.path.exists(temp_file):
            temp_file_mode = "w+"
        else:
            temp_file_mode = "a+"

        open(temp_file, temp_file_mode).writelines("%s;%f\n" % (name, settings.LOCAL_T))
Example #2
0
class Experiment(object):
    current_exp_name = None
    box_size = None
    temp_list = None
    
    def __init__(self):
        
        settings.BOX_SIZE = self.box_size

        Lattice.box_size = self.box_size
        self.init()

    def get_base_dir(self, extra = None):
        """
        Build base structure
        """
        
        exp_dir_name = "%s_%d" % (self.name, settings.RANK)
        dir = "%s/%s%s/%s" % (os.getcwdu(), settings.EXPERIMENT_DIR, exp_dir_name, extra if extra else "")
        ## sometimes we need a copy of experiment, additional one will be put in _1, _2 dirs
        return dir

    def create_dir_structure(self, name, index = None):
        """
        @name string: name of dir above base_dir
        @make_copy int: index of dir, if exists create max(index)+1
        Create dir structure
        """
        if index != None:
            base_dir = self.get_base_dir()
            if settings.CREATE_DIR_STRUCTURE:
                while os.path.exists(base_dir + (name + "_%d" % index)):
                    max_index = max([ int(p.split('_')[-1]) for p in os.listdir(base_dir) if name in p ])
                    index = max_index + 1
             
            name_with_index = (name + "_%d") % index
            settings.BASE_DIR = self.get_base_dir(name_with_index)
        else:
            settings.BASE_DIR = self.get_base_dir(name)

        for name,dir in settings.DIRS.iteritems():
            settings.DIRS[name] = settings.BASE_DIR + "/" + settings.DIRS[name]
            if settings.CREATE_DIR_STRUCTURE: tools.create_dir(settings.DIRS[name])

    def update_settings_files(self):
        """
        Update FILES dict in settings
        """
        for name, dir in settings.FILES_TEMPLATE.iteritems():
            if settings.DIRS.has_key(name) and settings.FILES_TEMPLATE.has_key(name):
                settings.FILES[name] = settings.DIRS[name] + settings.FILES_TEMPLATE[name]
    
    def _setup(self, name, min_t, max_t, tag, swap = False):
        """
        Setup experiment
        
        @string name: name of experiment
        @float min_t: min temperature
        @float max_t: max temperature
        @int tag: tag for mpi communication
        @bool swap: perform swap?

        """
        settings.EXPERIMENT_NAME = name
        settings.EXPERIMENT_ROOT_NAME = self.name

        settings.PERFORM_SWAP = swap
        PT.min_temp = settings.MIN_T = min_t
        PT.max_temp = settings.MAX_T = max_t
        if self.temp_list is None:
            self.pt = PT()
        else:
            self.pt = PT(self.temp_list)

        if self.pt.size > 0:
            settings.PT = True

        settings.LOCAL_T = self.pt.get_temperature()
        logging.info("Local T: %f" % settings.LOCAL_T)
        
        settings.TAG = self.global_tag + tag
        settings.DELTA_STEP = 0
        settings.PT_MODULE = self.pt
        self.create_dir_structure("%s_%d_%d_%d" % ((name, ) + self.box_size), settings.EXPERIMENT_COPY)
        
        self.update_settings_files()
        self.current_exp_name = name
        
        temp_file = "%stemperature" % settings.EXPERIMENTAL_ROOT_DIR
        if not os.path.exists(temp_file):
            temp_file_mode = "w+"
        else:
            temp_file_mode = "a+"

        open(temp_file, temp_file_mode).writelines("%s;%f\n" % (name, settings.LOCAL_T))

    def set_collect(self, mc_steps, collect, calc, data = None, snapshot = None, pt = 200, athermal=500000, cooling = 0):
        
        if collect is False: 
            collect = mc_steps*2
        elif collect is None: 
            collect = self.freq['collect']

        if calc is False: 
            calc = mc_steps*2
        elif calc is None:
            calc = self.freq['calc']

        if data is False: 
            data = mc_steps*2
        elif data is None:
            data = self.freq['data']

        if snapshot is False: 
            snapshot = mc_steps*2
        elif snapshot is None:
            snapshot = self.freq['snapshot']

        if pt is False: 
            pt = mc_steps * 2
        elif pt is None:
            pt = self.freq['pt']

        if athermal is False:
            athermal = 0
        elif athermal is None:
            athermal = self.freq['athermal']

        if cooling is False:
            cooling = 0
        elif cooling is None:
            cooling = self.freq['cooling']
        
        settings.MC_STEPS = mc_steps
        settings.FREQ_COLLECT = collect
        settings.FREQ_DATA = data
        settings.FREQ_SNAPSHOT = snapshot
        settings.FREQ_CALC = calc
        settings.FREQ_SWAP = pt
        settings.FREQ_ATHERMAL = athermal
        settings.FREQ_COOLING = cooling