def buildChildren(self, child_, nodeName_): if child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'mxv1ResultCharacterisation': obj_ = XSDataResultCharacterisation() obj_.build(child_) self.setMxv1ResultCharacterisation(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'mxv1ResultCharacterisation_Reference': obj_ = XSDataResultCharacterisation() obj_.build(child_) self.setMxv1ResultCharacterisation_Reference(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'mxv2DataCollection': obj_ = XSDataCollection() obj_.build(child_) self.setMxv2DataCollection(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'mxv2DataCollection_Reference': obj_ = XSDataCollection() obj_.build(child_) self.setMxv2DataCollection_Reference(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'suggestedStrategy': obj_ = XSDataResultStrategy() obj_.build(child_) self.setSuggestedStrategy(obj_) elif child_.nodeType == Node.ELEMENT_NODE and \ nodeName_ == 'possibleOrientations': obj_ = kappa_alignment_response() obj_.build(child_) self.setPossibleOrientations(obj_) XSDataResultInterface.buildChildren(self, child_, nodeName_)
def testGenerateStrategyShortSummary(self): edPluginStrategy = self.createPlugin() strReferenceOutputFile = os.path.join(self.getPluginTestsDataHome(), "XSDataResultStrategy_2_sweep.xml") strXML = self.readAndParseFile(strReferenceOutputFile) xsDataStrategyResult = XSDataResultStrategy.parseString(strXML) edPluginStrategy.generateStrategyShortSummary(xsDataStrategyResult) for strLine in edPluginStrategy.getDataOutput("strategyShortSummary")[0].getValue().split("\n"): EDVerbose.unitTest(strLine)
def testGenerateStrategyShortSummary(self): edPluginStrategy = self.createPlugin() strReferenceOutputFile = os.path.join(self.getPluginTestsDataHome(), "XSDataResultStrategy_2_sweep.xml") strXML = self.readAndParseFile(strReferenceOutputFile) xsDataStrategyResult = XSDataResultStrategy.parseString(strXML) edPluginStrategy.generateStrategyShortSummary(xsDataStrategyResult) for strLine in edPluginStrategy.getDataOutput("strategyShortSummary")[0].getValue().split("\n"): self.unitTest(strLine)
def getXSDataResultStrategy(self, _xsDataResultBest, _xsDataExperimentalCondition, _xsDataSample): xsDataResultStrategy = XSDataResultStrategy() #xsDataCollectionRunsBest = _xsDataResultBest.getCollectionRun() xsDataCollectionPlansBest = _xsDataResultBest.getCollectionPlan() for xsDataCollectionPlanBest in xsDataCollectionPlansBest: xsDataCollectionPlan = XSDataCollectionPlan() xsDataCollectionStrategy = XSDataCollection() xsDataDoubleTransmission = xsDataCollectionPlanBest.getStrategySummary().getAttenuation() for xsDataCollectionRunBest in xsDataCollectionPlanBest.getCollectionRun(): xsDataSubWedge = XSDataSubWedge() strXmlStringDataExperimentalCondition = _xsDataExperimentalCondition.marshal() xsDataExperimentalCondition = XSDataExperimentalCondition.parseString(strXmlStringDataExperimentalCondition) xsDataExperimentalCondition.getBeam().setExposureTime(xsDataCollectionRunBest.getExposureTime()) xsDataExperimentalCondition.getBeam().setTransmission(xsDataDoubleTransmission) xsDataExperimentalCondition.getDetector().setDistance(xsDataCollectionRunBest.getDistance()) xsDataExperimentalCondition.getGoniostat().setRotationAxisStart(xsDataCollectionRunBest.getPhiStart()) xsDataExperimentalCondition.getGoniostat().setOscillationWidth(xsDataCollectionRunBest.getPhiWidth()) fRotationAxisEnd = xsDataCollectionRunBest.getPhiStart().getValue() + xsDataCollectionRunBest.getNumberOfImages().getValue() * xsDataCollectionRunBest.getPhiWidth().getValue() xsDataExperimentalCondition.getGoniostat().setRotationAxisEnd(XSDataAngle(fRotationAxisEnd)) xsDataSubWedge.setExperimentalCondition(xsDataExperimentalCondition) xsDataSubWedge.setSubWedgeNumber(xsDataCollectionRunBest.getCollectionRunNumber()) xsDataCollectionStrategy.addSubWedge(xsDataSubWedge) xsDataCollectionStrategy.setSample(_xsDataSample) xsDataCollectionPlan.setCollectionStrategy(xsDataCollectionStrategy) xsDataStrategySummary = xsDataCollectionPlanBest.getStrategySummary() xsDataCollectionPlan.setStrategySummary(xsDataStrategySummary) xsDataStatistics = xsDataCollectionPlanBest.getStatisticalPrediction() xsDataCollectionPlan.setStatistics(xsDataStatistics) xsDataCollectionPlan.setCollectionPlanNumber(xsDataCollectionPlanBest.getCollectionPlanNumber()) xsDataResultStrategy.addCollectionPlan(xsDataCollectionPlan) return xsDataResultStrategy
def mergeStrategyToNewOrientation(_xsDataResultStrategy, _xsDataCollection, _fOmega, _fKappa, _fPhi): ''' _xsDataResultStrategy: reference strategy results as the template for the new strategy _xsDataCollection: The data collection that will be merged in result: suggestedStrategy(XSDataResultStrategy): the strategy resulted from the merge ''' # suggestedStrategy = None # try: # newpossibleOrientations=XSDataSTACv01.kappa_alignment_response.parseString(_possible_orientation.marshal()) # except: # newpossibleOrientations=None #so we will copy the strategy of collecting the reference images inputed to here but at the new orientation #get the full strategy from the Reference EDFactoryPluginStatic.loadModule("XSDataMXv1") from XSDataMXv1 import XSDataResultStrategy suggestedStrategy = XSDataResultStrategy.parseString(_xsDataResultStrategy.marshal()) #take only the first CollectionPlan if len(suggestedStrategy.getCollectionPlan()) > 0: suggestedStrategy.setCollectionPlan([suggestedStrategy.getCollectionPlan()[0]]) #modify the DC part taking it from the input suggestedStrategy.getCollectionPlan()[0].setCollectionStrategy(_xsDataCollection) #and modify the Orientation # dc = XSDataMXv2.XSDataCollection() # dc = self.getDataInput("mxv2DataCollection_Reference")[0] # Orients = _possible_orientation.getPossible_orientation() # omega = Orients[0].getOmega() # kappa = Orients[0].getKappa() # phi = Orients[0].getPhi() suggestedStrategy = EDHandlerXSDataMXv1v1_0.copyStrategyToNewOrientation(suggestedStrategy, _fOmega, _fKappa, _fPhi, "MERGED") # for dcplan in suggestedStrategy.getCollectionPlan(): # dcplan.setComment(EDHandlerXSDataMXv1v1_0().replaceElements(dcplan.getComment(), "OMEGA=", omega)) # dcplan.setComment(EDHandlerXSDataMXv1v1_0().replaceElements(dcplan.getComment(), "KAPPA=", kappa)) # dcplan.setComment(EDHandlerXSDataMXv1v1_0().replaceElements(dcplan.getComment(), "PHI=", phi)) #finally take the suggested new orientation out of the list of further possible ones # if newpossibleOrientations is not None: # newpossibleOrientations.setPossible_orientation([]) # for i in range(1, Orients.__len__()): # if (math.fabs(float(Orients[i].getKappa())-float(kappa))<tol and math.fabs(float(Orients[i].getPhi())-float(phi))<tol): # newpossibleOrientations.addPossible_orientation(Orients[i]) # return [suggestedStrategy,newpossibleOrientations] return suggestedStrategy
def copyStrategyToNewOrientation(_xsDataResultStrategy, _fOmega, _fKappa, _fPhi, _strategy = "COPIED"): ''' _xsDataResultStrategy: the strategy results in which the orientation should be changed omega,kappa,phi: the new orientation result: suggestedStrategy(XSDataResultStrategy): the strategy in which the orientation is changed ''' #we suggest the currently calculated strategy EDFactoryPluginStatic.loadModule("XSDataMXv1") from XSDataMXv1 import XSDataResultStrategy suggestedStrategy = XSDataResultStrategy.parseString(_xsDataResultStrategy.marshal()) #and we have to add the actual orientation EDFactoryPluginStatic.loadModule("EDHandlerXSDataCommon") from EDHandlerXSDataCommon import EDHandlerXSDataCommon for dcplan in suggestedStrategy.getCollectionPlan(): dcplan.setComment(EDHandlerXSDataCommon.replaceElements(dcplan.getComment(), "OMEGA=", str(_fOmega))) dcplan.setComment(EDHandlerXSDataCommon.replaceElements(dcplan.getComment(), "KAPPA=", str(_fKappa))) dcplan.setComment(EDHandlerXSDataCommon.replaceElements(dcplan.getComment(), "PHI=", str(_fPhi))) dcplan.setComment(EDHandlerXSDataCommon.replaceElements(dcplan.getComment(), "STRATEGY=", str(_strategy))) return suggestedStrategy
from EDFactoryPluginStatic import EDFactoryPluginStatic EDFactoryPluginStatic.loadModule("XSDataMXv1") from XSDataMXv1 import XSDataResultStrategy xsDataResultStrategy = XSDataResultStrategy.parseString(mxv1StrategyResult) xsDataCollectionPlan = xsDataResultStrategy.getCollectionPlan()[0] xsDataCollectionStrategy = xsDataCollectionPlan.getCollectionStrategy() xsDataSubWedge = xsDataCollectionStrategy.getSubWedge()[0] xsDataExperimentalCondition = xsDataSubWedge.getExperimentalCondition() exposureTime = xsDataExperimentalCondition.getBeam().getExposureTime( ).getValue() detectorDistance = xsDataExperimentalCondition.getDetector().getDistance( ).getValue() oscillationWidth = xsDataExperimentalCondition.getGoniostat( ).getOscillationWidth().getValue() rotationAxisStart = xsDataExperimentalCondition.getGoniostat( ).getRotationAxisStart().getValue() rotationAxisEnd = xsDataExperimentalCondition.getGoniostat( ).getRotationAxisEnd().getValue() noImages = int((rotationAxisEnd - rotationAxisStart) / oscillationWidth) runNumberDataCollection = run_number print "Suggested strategy:" print "Oscillation start: %.2f" % rotationAxisStart print "Oscillation width: %.2f" % oscillationWidth print "No images: %d" % noImages print "Exposure time: %.2f" % exposureTime print "Detector distance: %.2f" % detectorDistance print "Run number: %d " % runNumberDataCollection
def getXSDataResultStrategy(self, _xsDataResultBest, _xsDataExperimentalCondition, _xsDataSample): xsDataResultStrategy = XSDataResultStrategy() listXSDataBestCollectionPlan = _xsDataResultBest.getCollectionPlan() for xsDataBestCollectionPlan in listXSDataBestCollectionPlan: xsDataCollectionPlan = XSDataCollectionPlan() xsDataCollectionStrategy = XSDataCollection() xsDataBestStrategySummary = xsDataBestCollectionPlan.getStrategySummary( ) xsDataDoubleTransmission = xsDataBestStrategySummary.getTransmission( ) for xsDataBestCollectionRun in xsDataBestCollectionPlan.getCollectionRun( ): xsDataSubWedge = XSDataSubWedge() strXmlStringDataExperimentalCondition = _xsDataExperimentalCondition.marshal( ) xsDataExperimentalCondition = XSDataExperimentalCondition.parseString( strXmlStringDataExperimentalCondition) xsDataExperimentalCondition.getBeam().setExposureTime( xsDataBestCollectionRun.getExposureTime()) if (xsDataBestCollectionRun.getTransmission() is None): xsDataExperimentalCondition.getBeam().setTransmission( xsDataDoubleTransmission) else: xsDataExperimentalCondition.getBeam().setTransmission( xsDataBestCollectionRun.getTransmission()) xsDataExperimentalCondition.getDetector().setDistance( xsDataBestStrategySummary.getDistance()) xsDataExperimentalCondition.getGoniostat( ).setRotationAxisStart(xsDataBestCollectionRun.getPhiStart()) xsDataExperimentalCondition.getGoniostat().setOscillationWidth( xsDataBestCollectionRun.getPhiWidth()) fRotationAxisEnd = xsDataBestCollectionRun.getPhiStart( ).getValue( ) + xsDataBestCollectionRun.getNumberOfImages().getValue( ) * xsDataBestCollectionRun.getPhiWidth().getValue() xsDataExperimentalCondition.getGoniostat().setRotationAxisEnd( XSDataAngle(fRotationAxisEnd)) xsDataSubWedge.setExperimentalCondition( xsDataExperimentalCondition) xsDataSubWedge.setSubWedgeNumber( xsDataBestCollectionRun.getCollectionRunNumber()) if xsDataBestCollectionRun.getCrystalPosition(): xsDataSubWedge.setAction( XSDataString("Crystal position: %d" % xsDataBestCollectionRun. getCrystalPosition().getValue())) else: xsDataSubWedge.setAction( xsDataBestCollectionRun.getAction()) xsDataCollectionStrategy.addSubWedge(xsDataSubWedge) xsDataCollectionStrategy.setSample(_xsDataSample) xsDataCollectionPlan.setCollectionStrategy( xsDataCollectionStrategy) xsDataStrategySummary = XSDataStrategySummary() xsDataStrategySummary.setCompleteness( xsDataBestStrategySummary.getCompleteness()) xsDataStrategySummary.setISigma( xsDataBestStrategySummary.getISigma()) xsDataStrategySummary.setRankingResolution( xsDataBestStrategySummary.getRankingResolution()) xsDataStrategySummary.setRedundancy( xsDataBestStrategySummary.getRedundancy()) xsDataStrategySummary.setResolution( xsDataBestStrategySummary.getResolution()) xsDataStrategySummary.setResolutionReasoning( xsDataBestStrategySummary.getResolutionReasoning()) xsDataStrategySummary.setTotalDataCollectionTime( xsDataBestStrategySummary.getTotalDataCollectionTime()) xsDataStrategySummary.setTotalExposureTime( xsDataBestStrategySummary.getTotalExposureTime()) xsDataCollectionPlan.setStrategySummary(xsDataStrategySummary) if xsDataBestCollectionPlan.getStatisticalPrediction() is not None: xsDataStatisticsStrategy = XSDataStatisticsStrategy.parseString( xsDataBestCollectionPlan.getStatisticalPrediction( ).marshal()) xsDataCollectionPlan.setStatistics(xsDataStatisticsStrategy) xsDataCollectionPlan.setCollectionPlanNumber( xsDataBestCollectionPlan.getCollectionPlanNumber()) xsDataResultStrategy.addCollectionPlan(xsDataCollectionPlan) if _xsDataResultBest.getPathToLogFile() != None: xsDataResultStrategy.setBestLogFile( _xsDataResultBest.getPathToLogFile()) return xsDataResultStrategy
def finallyProcess(self, _edObject=None): EDPluginControl.finallyProcess(self, _edObject) EDVerbose.DEBUG("EDPluginControlStrategyv1_2.finallyProcess") if not self.hasDataOutput(): self.setDataOutput(XSDataResultStrategy())
def getXSDataResultStrategy(self, _xsDataResultBest, _xsDataExperimentalCondition, _xsDataSample): xsDataResultStrategy = XSDataResultStrategy() listXSDataBestCollectionPlan = _xsDataResultBest.getCollectionPlan() for xsDataBestCollectionPlan in listXSDataBestCollectionPlan: xsDataCollectionPlan = XSDataCollectionPlan() xsDataCollectionStrategy = XSDataCollection() xsDataBestStrategySummary = xsDataBestCollectionPlan.getStrategySummary() xsDataDoubleTransmission = xsDataBestStrategySummary.getTransmission() for xsDataBestCollectionRun in xsDataBestCollectionPlan.getCollectionRun(): xsDataSubWedge = XSDataSubWedge() strXmlStringDataExperimentalCondition = _xsDataExperimentalCondition.marshal() xsDataExperimentalCondition = XSDataExperimentalCondition.parseString( strXmlStringDataExperimentalCondition ) xsDataExperimentalCondition.getBeam().setExposureTime(xsDataBestCollectionRun.getExposureTime()) if xsDataBestCollectionRun.getTransmission() is None: xsDataExperimentalCondition.getBeam().setTransmission(xsDataDoubleTransmission) else: xsDataExperimentalCondition.getBeam().setTransmission(xsDataBestCollectionRun.getTransmission()) xsDataExperimentalCondition.getDetector().setDistance(xsDataBestStrategySummary.getDistance()) xsDataExperimentalCondition.getGoniostat().setRotationAxisStart(xsDataBestCollectionRun.getPhiStart()) xsDataExperimentalCondition.getGoniostat().setOscillationWidth(xsDataBestCollectionRun.getPhiWidth()) fRotationAxisEnd = ( xsDataBestCollectionRun.getPhiStart().getValue() + xsDataBestCollectionRun.getNumberOfImages().getValue() * xsDataBestCollectionRun.getPhiWidth().getValue() ) xsDataExperimentalCondition.getGoniostat().setRotationAxisEnd(XSDataAngle(fRotationAxisEnd)) xsDataSubWedge.setExperimentalCondition(xsDataExperimentalCondition) xsDataSubWedge.setSubWedgeNumber(xsDataBestCollectionRun.getCollectionRunNumber()) if xsDataBestCollectionRun.getCrystalPosition(): xsDataSubWedge.setAction( XSDataString("Crystal position: %d" % xsDataBestCollectionRun.getCrystalPosition().getValue()) ) else: xsDataSubWedge.setAction(xsDataBestCollectionRun.getAction()) xsDataCollectionStrategy.addSubWedge(xsDataSubWedge) xsDataCollectionStrategy.setSample(_xsDataSample) xsDataCollectionPlan.setCollectionStrategy(xsDataCollectionStrategy) xsDataStrategySummary = XSDataStrategySummary() xsDataStrategySummary.setCompleteness(xsDataBestStrategySummary.getCompleteness()) xsDataStrategySummary.setISigma(xsDataBestStrategySummary.getISigma()) xsDataStrategySummary.setRankingResolution(xsDataBestStrategySummary.getRankingResolution()) xsDataStrategySummary.setRedundancy(xsDataBestStrategySummary.getRedundancy()) xsDataStrategySummary.setResolution(xsDataBestStrategySummary.getResolution()) xsDataStrategySummary.setResolutionReasoning(xsDataBestStrategySummary.getResolutionReasoning()) xsDataStrategySummary.setTotalDataCollectionTime(xsDataBestStrategySummary.getTotalDataCollectionTime()) xsDataStrategySummary.setTotalExposureTime(xsDataBestStrategySummary.getTotalExposureTime()) xsDataCollectionPlan.setStrategySummary(xsDataStrategySummary) if xsDataBestCollectionPlan.getStatisticalPrediction() is not None: xsDataStatisticsStrategy = XSDataStatisticsStrategy.parseString( xsDataBestCollectionPlan.getStatisticalPrediction().marshal() ) xsDataCollectionPlan.setStatistics(xsDataStatisticsStrategy) xsDataCollectionPlan.setCollectionPlanNumber(xsDataBestCollectionPlan.getCollectionPlanNumber()) xsDataResultStrategy.addCollectionPlan(xsDataCollectionPlan) if _xsDataResultBest.getPathToLogFile() != None: xsDataResultStrategy.setBestLogFile(_xsDataResultBest.getPathToLogFile()) return xsDataResultStrategy
from EDFactoryPluginStatic import EDFactoryPluginStatic EDFactoryPluginStatic.loadModule("XSDataMXv1") from XSDataMXv1 import XSDataResultStrategy xsDataResultStrategy = XSDataResultStrategy.parseString(suggestedStrategy) for xsDataCollectionPlan in xsDataResultStrategy: if xsDataCollectionPlan.getCollectionPlanNumber().getValue() == collectionPlanIndex: break
from EDFactoryPluginStatic import EDFactoryPluginStatic EDFactoryPluginStatic.loadModule("XSDataMXv1") from XSDataMXv1 import XSDataResultStrategy xsDataResultStrategy = XSDataResultStrategy.parseString(suggestedStrategy) for xsDataCollectionPlan in xsDataResultStrategy: if xsDataCollectionPlan.getCollectionPlanNumber().getValue( ) == collectionPlanIndex: break
def getXSDataResultStrategy(self, _xsDataResultBest, _xsDataExperimentalCondition, _xsDataSample): xsDataResultStrategy = XSDataResultStrategy() #xsDataCollectionRunsBest = _xsDataResultBest.getCollectionRun() xsDataCollectionPlansBest = _xsDataResultBest.getCollectionPlan() for xsDataCollectionPlanBest in xsDataCollectionPlansBest: xsDataCollectionPlan = XSDataCollectionPlan() xsDataCollectionStrategy = XSDataCollection() xsDataDoubleTransmission = xsDataCollectionPlanBest.getStrategySummary( ).getAttenuation() for xsDataCollectionRunBest in xsDataCollectionPlanBest.getCollectionRun( ): xsDataSubWedge = XSDataSubWedge() strXmlStringDataExperimentalCondition = _xsDataExperimentalCondition.marshal( ) xsDataExperimentalCondition = XSDataExperimentalCondition.parseString( strXmlStringDataExperimentalCondition) xsDataExperimentalCondition.getBeam().setExposureTime( xsDataCollectionRunBest.getExposureTime()) xsDataExperimentalCondition.getBeam().setTransmission( xsDataDoubleTransmission) xsDataExperimentalCondition.getDetector().setDistance( xsDataCollectionRunBest.getDistance()) xsDataExperimentalCondition.getGoniostat( ).setRotationAxisStart(xsDataCollectionRunBest.getPhiStart()) xsDataExperimentalCondition.getGoniostat().setOscillationWidth( xsDataCollectionRunBest.getPhiWidth()) fRotationAxisEnd = xsDataCollectionRunBest.getPhiStart( ).getValue( ) + xsDataCollectionRunBest.getNumberOfImages().getValue( ) * xsDataCollectionRunBest.getPhiWidth().getValue() xsDataExperimentalCondition.getGoniostat().setRotationAxisEnd( XSDataAngle(fRotationAxisEnd)) xsDataSubWedge.setExperimentalCondition( xsDataExperimentalCondition) xsDataSubWedge.setSubWedgeNumber( xsDataCollectionRunBest.getCollectionRunNumber()) xsDataCollectionStrategy.addSubWedge(xsDataSubWedge) xsDataCollectionStrategy.setSample(_xsDataSample) xsDataCollectionPlan.setCollectionStrategy( xsDataCollectionStrategy) xsDataStrategySummary = xsDataCollectionPlanBest.getStrategySummary( ) xsDataCollectionPlan.setStrategySummary(xsDataStrategySummary) xsDataStatistics = xsDataCollectionPlanBest.getStatisticalPrediction( ) xsDataCollectionPlan.setStatistics(xsDataStatistics) xsDataCollectionPlan.setCollectionPlanNumber( xsDataCollectionPlanBest.getCollectionPlanNumber()) xsDataResultStrategy.addCollectionPlan(xsDataCollectionPlan) return xsDataResultStrategy
from EDFactoryPluginStatic import EDFactoryPluginStatic EDFactoryPluginStatic.loadModule("XSDataMXv1") from XSDataMXv1 import XSDataResultStrategy xsDataResultStrategy = XSDataResultStrategy.parseString(mxv1StrategyResult) xsDataCollectionPlan = xsDataResultStrategy.getCollectionPlan()[0] xsDataCollectionStrategy = xsDataCollectionPlan.getCollectionStrategy() xsDataSubWedge = xsDataCollectionStrategy.getSubWedge()[0] xsDataExperimentalCondition = xsDataSubWedge.getExperimentalCondition() exposureTime = xsDataExperimentalCondition.getBeam().getExposureTime().getValue() detectorDistance = xsDataExperimentalCondition.getDetector().getDistance().getValue() oscillationWidth = xsDataExperimentalCondition.getGoniostat().getOscillationWidth().getValue() rotationAxisStart = xsDataExperimentalCondition.getGoniostat().getRotationAxisStart().getValue() rotationAxisEnd = xsDataExperimentalCondition.getGoniostat().getRotationAxisEnd().getValue() noImages = int( (rotationAxisEnd - rotationAxisStart) / oscillationWidth) runNumberDataCollection = run_number print "Suggested strategy:" print "Oscillation start: %.2f" % rotationAxisStart print "Oscillation width: %.2f" % oscillationWidth print "No images: %d" % noImages print "Exposure time: %.2f" % exposureTime print "Detector distance: %.2f" % detectorDistance print "Run number: %d " % runNumberDataCollection