Esempio n. 1
0
    def saveToSDDS(self, sddsFileName = None):
        if not sddsFileName:
            sddsFileName = util.getSaveFileName(self, 'sdds')
            if not sddsFileName:
                return

        mySDDS = sdds.SDDS(0)
        mySDDS.description[0] = "RadTrack"
        mySDDS.description[1] = "Copyright 2013-2015 by RadiaBeam Technologies. All rights reserved."
        mySDDS.parameterName = ["designMomentumEV", "totalCharge", "eMassEV"]
        mySDDS.parameterData = [[self.designMomentumEV],
                                [self.totalCharge],
                                [self.eMassEV]]
        mySDDS.parameterDefinition = [["","","","",mySDDS.SDDS_DOUBLE,""],
                                      ["","","","",mySDDS.SDDS_DOUBLE,""],
                                      ["","","","",mySDDS.SDDS_DOUBLE,""]]
        mySDDS.columnName = ["x", "xp", "y", "yp", "t", "p"]

        tmp6 = self.myBunch.getDistribution6D().getPhaseSpace6D().getArray6D()
        if not self.userInputEnabled():
            tmp6 = randomSampleOfBunch(tmp6, int(self.ui.numPtcls.text()))

        mySDDS.columnData = [ [list(tmp6[i,:])] for i in range(6)]

        mySDDS.columnDefinition = [["","m",  "","",mySDDS.SDDS_DOUBLE,0],
                                   ["","","","",mySDDS.SDDS_DOUBLE,0],
                                   ["","m",  "","",mySDDS.SDDS_DOUBLE,0],
                                   ["","","","",mySDDS.SDDS_DOUBLE,0],
                                   ["","s",  "","",mySDDS.SDDS_DOUBLE,0],
                                   ["","m_ec","","",mySDDS.SDDS_DOUBLE,0]]
        mySDDS.save(sddsFileName)
Esempio n. 2
0
    def saveToCSV(self, fileName = None):
        if not fileName:
            fileName = util.getSaveFileName(self, 'csv')
            if not fileName:
                return

        # make sure the top-level parameters are up-to-date
        self.designMomentumEV = util.convertUnitsStringToNumber(self.ui.designMomentum.text(), 'eV')
        self.totalCharge = util.convertUnitsStringToNumber(self.ui.totalCharge.text(), 'C')

        # create a header to identify this as a RadTrack file
        h1 = 'RadTrack,Copyright 2012-2014 by RadiaBeam Technologies LLC - All rights reserved (C)\n '
        # names of the top-level parameters
        h2 = 'p0 [eV],Q [C],mass [eV]\n '
        # values of the top-level parameters
        h3 = str(self.designMomentumEV)+','+str(self.totalCharge)+','+str(self.eMassEV)+'\n '
        # label the columns
        h4 = 'x,xp,y,yp,s,dp\n '
        # specify the units
        h5 = '[m],[rad],[m],[rad],[m],[rad]'
        # assemble the full header
        myHeader = h1 + h2 + h3 + h4 + h5

        # write particle data into the file
        
        # create local pointer to particle array
        userNumberOfParticles = int(self.ui.numPtcls.text())
        tmp6 = randomSampleOfBunch(self.myBunch.getDistribution6D().getPhaseSpace6D().getArray6D(), userNumberOfParticles)
        np.savetxt(fileName, tmp6.transpose(), fmt=str('%1.12e'), delimiter=',', comments='', header=myHeader)
Esempio n. 3
0
    def exportToFile(self, fileName = None):
        if not fileName:
            fileName = util.getSaveFileName(self, ['sdds', 'csv'])
            if not fileName:
                return

        if os.path.basename(fileName).startswith(self.parent.tabPrefix):
            name, ext = os.path.splitext(fileName)
            fileName = name + '+' + str(self.userInputEnabled()) + ext
            with open(fileName, 'w'):
                pass # create file in case no data to be saved

        if self.userInputEnabled():
            self.generateBunch() # save all particles

        if fileName.lower().endswith('csv'):
            self.saveToCSV(fileName)
        else:
            self.saveToSDDS(fileName)
Esempio n. 4
0
    def exportToFile(self, fileName = None):
        if not fileName:
            fileName = util.getSaveFileName(self)
            if not fileName:
                return

        fileLines = []
        for box in self.textBox.values():
            try:
                try:
                    _, unit = util.separateNumberUnit(box.text())
                    value = util.convertUnitsNumberToString(self.valueFromTextBox[box], box.unit, unit)
                except (ValueError, KeyError):
                    value = box.text()
                fileLines.append(box.objectName() + ':' + value) # text box
            except AttributeError:
                fileLines.append(box.objectName() + ':' + box.currentText()) # combo box

        with open(fileName, 'w') as f:
            f.write('\n'.join(sorted(fileLines)))