def process(self, _edObject=None): EDPluginControl.process(self) self.DEBUG("EDPluginBioSaxsSmartMergev1_7.process") xsdwf = XSDataInputWaitMultiFile( timeOut=XSDataTime(30), expectedSize=XSDataInteger(self.minimumCurveFileSize), expectedFile=[XSDataFile(i.path) for i in self.lstInput]) self.__edPluginExecWaitFile.setDataInput(xsdwf) self.__edPluginExecWaitFile.connectFAILURE(self.doFailureExecWait) self.__edPluginExecWaitFile.connectSUCCESS(self.doSuccessExecWait) self.__edPluginExecWaitFile.executeSynchronous() if self.isFailure(): return if len(self.lstInput) == 1: inp = self.lstInput[0].path.value dst = self.dataInput.mergedCurve.path.value if not os.path.isdir(os.path.dirname(dst)): self.error("Output directory for %s does not exist" % dst) os.makedirs(os.path.dirname(dst)) if not os.path.exists(inp): self.warning("Input %s does not (yet?) exist" % inp) time.sleep(1.0) shutil.copyfile(inp, dst) self.addExecutiveSummaryLine( "Got only one frame ... nothing to merge !!!") else: self.lstMerged = [] if (self.absoluteFidelity is not None) or (self.relativeFidelity is not None): if self.absoluteFidelity is not None: for idx, oneFile in enumerate(self.lstInput[1:]): self.DEBUG("Calculating similarity of 0 and %s" % idx) self.datcmp(self.lstInput[0], oneFile) # edPluginExecAbsoluteFidelity = self.loadPlugin(self.__strControlledPluginDatcmp) # xsd = XSDataInputDatcmp(inputCurve=[self.lstInput[0], oneFile]) # edPluginExecAbsoluteFidelity.setDataInput(xsd) # edPluginExecAbsoluteFidelity.connectFAILURE(self.doFailureExecDatcmp) # edPluginExecAbsoluteFidelity.connectSUCCESS(self.doSuccessExecDatcmp) # edPluginExecAbsoluteFidelity.execute() if (self.relativeFidelity is not None): if (self.absoluteFidelity is None): self.DEBUG("Calculating similarity of 0 and 1") self.datcmp(self.lstInput[0], self.lstInput[1]) # edPluginExecAbsoluteFidelity = self.loadPlugin(self.__strControlledPluginDatcmp) # xsd = XSDataInputDatcmp(inputCurve=[self.lstInput[0], self.lstInput[1] ]) # edPluginExecAbsoluteFidelity.setDataInput(xsd) # edPluginExecAbsoluteFidelity.connectFAILURE(self.doFailureExecDatcmp) # edPluginExecAbsoluteFidelity.connectSUCCESS(self.doSuccessExecDatcmp) # edPluginExecAbsoluteFidelity.execute() if (len(self.lstInput) > 2): for idx, oneFile in enumerate(self.lstInput[2:]): self.DEBUG("Calculating similarity of %s and %s" % (idx, idx + 1)) self.datcmp(self.lstInput[idx + 1], oneFile) # edPluginExecRelativeFidelity = self.loadPlugin(self.__strControlledPluginDatcmp) # xsd = XSDataInputDatcmp(inputCurve=[self.lstInput[idx + 1], oneFile]) # edPluginExecRelativeFidelity.setDataInput(xsd) # edPluginExecRelativeFidelity.connectFAILURE(self.doFailureExecDatcmp) # edPluginExecRelativeFidelity.connectSUCCESS(self.doSuccessExecDatcmp) # edPluginExecRelativeFidelity.execute() self.synchronizePlugins() for idx, oneFile in enumerate(self.lstInput): if idx == 0: self.lstMerged.append(oneFile) elif (self.absoluteFidelity is not None) and (self.relativeFidelity is not None): if (idx - 1, idx) not in self.dictSimilarities: self.ERROR("dict missing %i,%i: \n" % (idx - 1, idx) + "\n".join([ "%s: %s" % (key, self.dictSimilarities[key]) for key in self.dictSimilarities ])) self.resynchronize() if (0, idx) not in self.dictSimilarities: self.ERROR("dict missing %i,%i: \n" % (0, idx) + "\n".join([ "%s: %s" % (key, self.dictSimilarities[key]) for key in self.dictSimilarities ])) self.resynchronize() if (self.dictSimilarities[(0, idx)] >= self.absoluteFidelity) and (self.dictSimilarities[ (idx - 1, idx)] >= self.relativeFidelity): self.lstMerged.append(oneFile) elif (self.absoluteFidelity is not None): if (0, idx) not in self.dictSimilarities: self.ERROR("dict missing %i,%i: \n" % (0, idx) + "\n".join([ "%s: %s" % (key, self.dictSimilarities[key]) for key in self.dictSimilarities ])) self.resynchronize() if (self.dictSimilarities[(0, idx)] >= self.absoluteFidelity): self.lstMerged.append(oneFile) elif (self.relativeFidelity is not None): if (idx - 1, idx) not in self.dictSimilarities: self.ERROR("dict missing %i,%i: \n" % (idx - 1, idx) + "\n".join([ "%s: %s" % (key, self.dictSimilarities[key]) for key in self.dictSimilarities ])) self.resynchronize() if (self.dictSimilarities[(idx - 1, idx)] >= self.relativeFidelity): self.lstMerged.append(oneFile) else: self.lstMerged.append(oneFile) self.lstMerged.sort(cmp) if len(self.lstMerged) != len(self.lstInput): self.strRadiationDamage = "Radiation damage detected, merged %i curves" % len( self.lstMerged) self.WARNING(self.strRadiationDamage) self.addExecutiveSummaryLine("WARNING: " + self.strRadiationDamage) self.addExecutiveSummaryLine("Merging files: " + " ".join( [os.path.basename(i.path.value) for i in self.lstMerged])) if len(self.lstMerged) == 1: self.rewriteHeader(self.lstMerged[0].path.value, self.strMergedFile) else: self.__edPluginExecDataver = self.loadPlugin( self.__strControlledPluginDataver) xsd = XSDataInputDataver(inputCurve=self.lstMerged) # outputCurve=self.dataInput.mergedCurve, self.__edPluginExecDataver.setDataInput(xsd) self.__edPluginExecDataver.connectSUCCESS( self.doSuccessExecDataver) self.__edPluginExecDataver.connectFAILURE( self.doFailureExecDataver) self.__edPluginExecDataver.executeSynchronous() if (self.fConcentration == 0) and (self.strSubFile is not None): if (self.__class__.lastBuffer is not None) and (self.__class__.lastSample is not None): self.__edPluginExecAutoSub = self.loadPlugin( self.__strControlledPluginAutoSub) base = "_".join( os.path.basename( self.__class__.lastSample.path.value).split("_")[:-1]) suff = os.path.basename(self.strSubFile).split("_")[-1] sub = os.path.join(os.path.dirname(self.strSubFile), base + "_" + suff) self.xsdSubtractedCurve = XSDataFile(XSDataString(sub)) #self.curves.append(xsdSubtractedCurve) self.__edPluginExecAutoSub.dataInput = XSDataInputAutoSub( sampleCurve=self.__class__.lastSample, buffers=[ self.__class__.lastBuffer, self.dataInput.mergedCurve ], subtractedCurve=self.xsdSubtractedCurve) self.__edPluginExecAutoSub.connectSUCCESS( self.doSuccessExecAutoSub) self.__edPluginExecAutoSub.connectFAILURE( self.doFailureExecAutoSub) self.__edPluginExecAutoSub.executeSynchronous() if self.isFailure(): return self.__edPluginSaxsAnalysis = self.loadPlugin( self.__strControlledPluginSaxsAnalysis) self.__edPluginSaxsAnalysis.dataInput = XSDataInputSaxsAnalysis( scatterCurve=self.xsdSubtractedCurve, autoRg=self.autoRg, graphFormat=XSDataString("png")) self.__edPluginSaxsAnalysis.connectSUCCESS( self.doSuccessSaxsAnalysis) self.__edPluginSaxsAnalysis.connectFAILURE( self.doFailureSaxsAnalysis) self.__edPluginSaxsAnalysis.executeSynchronous() self.__class__.lastBuffer = self.dataInput.mergedCurve #self.__class__.lastSample = None #Information neededfor transfer to ISPyB self.forgetLastSample = True else: self.__class__.lastSample = self.dataInput.mergedCurve if self.dataInput.sample and self.dataInput.sample.login and self.dataInput.sample.passwd and self.dataInput.sample.measurementID: self.addExecutiveSummaryLine("Registering to ISPyB") self.lstDiscarded = list(set(self.lstInput) - set(self.lstMerged)) self.__class__.dictFrames[self.dataInput.mergedCurve] = { 'averaged': self.lstMerged, 'discarded': self.lstDiscarded } self.__edPluginSaxsISPyB = self.loadPlugin( self.__strControlledPluginSaxsISPyB) if len(self.lstInput) > 1: frameAverage = XSDataInteger(len(self.lstInput)) frameMerged = XSDataInteger(len(self.lstMerged)) else: frameMerged = frameAverage = XSDataInteger(1) self.curves = [XSDataFile(i.path) for i in self.lstInput] self.discardedCurves = [ XSDataFile(i.path) for i in self.lstDiscarded ] self.mergedCurves = [XSDataFile(i.path) for i in self.lstMerged] averageFilePath = None if self.strMergedFile is not None: averageFilePath = XSDataFile(XSDataString(self.strMergedFile)) self.sampleFrames = self.getAveragedFrameByFilename( self.__class__.lastSample) lastSample = None if self.__class__.lastSample is not None: lastSample = self.__class__.lastSample subtractedCurve = None if self.xsdSubtractedCurve is not None: subtractedCurve = self.xsdSubtractedCurve else: subtractedCurve = None xsdin = XSDataInputBioSaxsISPyBv1_0( sample=self.dataInput.sample, autoRg=self.autoRg, gnom=self.gnom, volume=self.volume, frameAverage=frameAverage, frameMerged=frameMerged, curves=self.curves, discardedFrames=self.discardedCurves, averagedFrames=self.mergedCurves, averageFilePath=averageFilePath, bufferFrames=self.bufferFrames, sampleFrames=self.sampleFrames, bestBuffer=self.xsBestBuffer, averageSample=lastSample, scatterPlot=self.xsScatterPlot, guinierPlot=self.xsGuinierPlot, kratkyPlot=self.xsKratkyPlot, densityPlot=self.xsDensityPlot, subtractedFilePath=subtractedCurve # destination=self.dataInput.sample.ispybDestination #duplicate, already in sample ) self.__edPluginSaxsISPyB.dataInput = xsdin self.__edPluginSaxsISPyB.connectSUCCESS(self.doSuccessISPyB) self.__edPluginSaxsISPyB.connectFAILURE(self.doFailureISPyB) self.__edPluginSaxsISPyB.execute() # transfer analysis data to correct location on nice if self.gnom is not None: self.outdir = os.path.join( os.path.dirname(os.path.dirname(self.lstStrInput[0])), "ednaAnalysis") basename = os.path.basename( os.path.splitext(self.gnom.gnomFile.path.value)[0]) self.outdir = os.path.join(self.outdir, basename) if not os.path.isdir(self.outdir): os.makedirs(self.outdir) #self.outFile = os.path.join(outdir, "NoResults.html") workingdir = os.path.dirname(self.gnom.gnomFile.path.value) self.pluginRsync = self.loadPlugin(self.cpRsync) self.pluginRsync.dataInput = XSDataInputRsync( source=XSDataFile(XSDataString(workingdir)), destination=XSDataFile(XSDataString(self.outdir)), options=XSDataString("-avx")) self.pluginRsync.connectSUCCESS(self.doSuccessExecRsync) self.pluginRsync.connectFAILURE(self.doFailureExecRsync) self.pluginRsync.executeSynchronous() if self.forgetLastSample: #Also redefine dictionary to contain the buffer just processed? self.__class__.lastSample = None
def processMerges(self, run): # run analysis of merges for merge in run.merge_curves: if os.path.exists(merge): xsdSubtractedCurve = XSDataFile(XSDataString(merge)) self.__edPluginSaxsAnalysis = self.loadPlugin( self.__strControlledPluginSaxsAnalysis) self.__edPluginSaxsAnalysis.dataInput = XSDataInputSaxsAnalysis( scatterCurve=xsdSubtractedCurve, autoRg=run.merge_Rg[merge], graphFormat=XSDataString("png")) self.__edPluginSaxsAnalysis.connectSUCCESS( self.doSuccessSaxsAnalysis) self.__edPluginSaxsAnalysis.connectFAILURE( self.doFailureSaxsAnalysis) self.__edPluginSaxsAnalysis.executeSynchronous() xsdBuffer = XSDataFile(XSDataString(run.buffer)) xsdStartFrame = XSDataString(run.merge_framesDIC[merge][0]) xsdEndFrame = XSDataString(run.merge_framesDIC[merge][-1]) self.__edPluginISPyBAnalysis = self.loadPlugin( self.__strControlledPluginISPyBAnalysis) try: inputBioSaxsISPyB = XSDataInputBioSaxsISPyBv1_0( sample=self.dataOutputBioSaxsISPyB_HPLC.getSample(), autoRg=run.merge_analysis[merge].autoRg, gnom=run.merge_analysis[merge].gnom, volume=run.merge_analysis[merge].volume, bestBuffer=xsdBuffer, scatterPlot=run.merge_analysis[merge].scatterPlot, guinierPlot=run.merge_analysis[merge].guinierPlot, kratkyPlot=run.merge_analysis[merge].kratkyPlot, densityPlot=run.merge_analysis[merge].densityPlot) xsdISPyBin = XSDataInputBioSaxsISPyBHPLCv1_0( experimentId=self.dataOutputBioSaxsISPyB_HPLC. getExperimentId(), startFrame=xsdStartFrame, endFrame=xsdEndFrame, dataInputBioSaxs=inputBioSaxsISPyB) self.__edPluginISPyBAnalysis.dataInput = xsdISPyBin self.__edPluginISPyBAnalysis.connectSUCCESS( self.doSuccessISPyBAnalysis) self.__edPluginISPyBAnalysis.connectFAILURE( self.doFailureISPyBAnalysis) self.__edPluginISPyBAnalysis.executeSynchronous() except Exception as error: traceback.print_stack() self.ERROR( "EDPluginBioSaxsFlushHPLCv1_3 calling to EDPluginHPLCPrimayDataISPyBv1_0: %s" % error) # There were some recurring issues with dammin slowing down slavia, therefore I commented this out for the time being # Martha, 11.7.2014 # mergeNumber = 1 # for merge in run.merge_curves: # try: # xsdSubtractedCurve = XSDataFile(XSDataString(merge)) # xsdGnomFile = XSDataFile(XSDataString(run.merge_analysis[merge].gnom.gnomFile.path.value)) # destination = XSDataFile(XSDataString(os.path.join(os.path.dirname(os.path.dirname(merge)), "ednaSAS"))) # self.__edPluginSaxsToSAS = self.loadPlugin(self.__strControlledPluginSaxsModeling) # print "Changing measurentID by runMerge" # #In order to keep dammin models in different folder a measurementId should be given # self.__edPluginISPyBAnalysis.xsDataResult.dataInputBioSaxs.sample.measurementID.value = mergeNumber # print "------------> MeasurementId changed " + str(self.__edPluginISPyBAnalysis.xsDataResult.dataInputBioSaxs.sample.measurementID.value) # self.__edPluginSaxsToSAS.dataInput = XSDataInputBioSaxsToSASv1_0( # sample=self.__edPluginISPyBAnalysis.xsDataResult.dataInputBioSaxs.sample, # subtractedCurve=xsdSubtractedCurve, # gnomFile=xsdGnomFile, # destinationDirectory=destination) # self.__edPluginSaxsToSAS.connectSUCCESS(self.doSuccessSaxsToSAS) # self.__edPluginSaxsToSAS.connectFAILURE(self.doFailureSaxsToSAS) # mergeNumber = mergeNumber + 1; # self.__edPluginSaxsToSAS.executeSynchronous() # except Exception as error: # traceback.print_stack() # self.ERROR("EDPluginBioSaxsFlushHPLCv1_3 calling to EDPluginBioSaxsToSASv1_1: %s" % error) self.synchronizePlugins()
def process(self, _edObject=None): EDPluginControl.process(self) self.DEBUG("EDPluginBioSaxsSmartMergev1_5.process") xsdwf = XSDataInputWaitMultiFile(timeOut=XSDataTime(30), expectedSize=XSDataInteger(10000), expectedFile=[XSDataFile(i.path) for i in self.lstInput]) self.__edPluginExecWaitFile.setDataInput(xsdwf) self.__edPluginExecWaitFile.connectFAILURE(self.doFailureExecWait) self.__edPluginExecWaitFile.connectSUCCESS(self.doSuccessExecWait) self.__edPluginExecWaitFile.executeSynchronous() if self.isFailure(): return if len(self.lstInput) == 1: inp = self.lstInput[0].path.value dst = self.dataInput.mergedCurve.path.value if not os.path.isdir(os.path.dirname(dst)): self.error("Output directory for %s does not exist" % dst) os.makedirs(os.path.dirname(dst)) if not os.path.exists(inp): self.warning("Input %s does not (yet?) exist" % inp) time.sleep(1.0) shutil.copyfile(inp, dst) self.lstSummary.append("Got only one frame ... nothing to merge !!!") else: self.lstMerged = [] if (self.absoluteFidelity is not None) or (self.relativeFidelity is not None): if self.absoluteFidelity is not None : for idx, oneFile in enumerate(self.lstInput[1:]): self.DEBUG("Calculating similarity of 0 and %s" % idx) edPluginExecAbsoluteFidelity = self.loadPlugin(self.__strControlledPluginDatcmp) xsd = XSDataInputDatcmp(inputCurve=[self.lstInput[0], oneFile]) edPluginExecAbsoluteFidelity.setDataInput(xsd) edPluginExecAbsoluteFidelity.connectFAILURE(self.doFailureExecDatcmp) edPluginExecAbsoluteFidelity.connectSUCCESS(self.doSuccessExecDatcmp) edPluginExecAbsoluteFidelity.execute() if (self.relativeFidelity is not None): if (self.absoluteFidelity is None): self.DEBUG("Calculating similarity of 0 and 1") edPluginExecAbsoluteFidelity = self.loadPlugin(self.__strControlledPluginDatcmp) xsd = XSDataInputDatcmp(inputCurve=[self.lstInput[0], self.lstInput[1] ]) edPluginExecAbsoluteFidelity.setDataInput(xsd) edPluginExecAbsoluteFidelity.connectFAILURE(self.doFailureExecDatcmp) edPluginExecAbsoluteFidelity.connectSUCCESS(self.doSuccessExecDatcmp) edPluginExecAbsoluteFidelity.execute() if (len(self.lstInput) > 2): for idx, oneFile in enumerate(self.lstInput[2:]): self.DEBUG("Calculating similarity of %s and %s" % (idx, idx + 1)) edPluginExecRelativeFidelity = self.loadPlugin(self.__strControlledPluginDatcmp) xsd = XSDataInputDatcmp(inputCurve=[self.lstInput[idx + 1], oneFile]) edPluginExecRelativeFidelity.setDataInput(xsd) edPluginExecRelativeFidelity.connectFAILURE(self.doFailureExecDatcmp) edPluginExecRelativeFidelity.connectSUCCESS(self.doSuccessExecDatcmp) edPluginExecRelativeFidelity.execute() self.synchronizePlugins() for idx, oneFile in enumerate(self.lstInput): if idx == 0: self.lstMerged.append(oneFile) elif (self.absoluteFidelity is not None) and (self.relativeFidelity is not None): if (idx - 1, idx) not in self.dictSimilarities: self.ERROR("dict missing %i,%i: \n" % (idx - 1, idx) + "\n".join([ "%s: %s" % (key, self.dictSimilarities[key]) for key in self.dictSimilarities])) self.resynchronize() if (0, idx) not in self.dictSimilarities: self.ERROR("dict missing %i,%i: \n" % (0, idx) + "\n".join([ "%s: %s" % (key, self.dictSimilarities[key]) for key in self.dictSimilarities])) self.resynchronize() if (self.dictSimilarities[(0, idx)] >= self.absoluteFidelity) and (self.dictSimilarities[(idx - 1, idx)] >= self.relativeFidelity): self.lstMerged.append(oneFile) else: break elif (self.absoluteFidelity is not None) : if (0, idx) not in self.dictSimilarities: self.ERROR("dict missing %i,%i: \n" % (0, idx) + "\n".join([ "%s: %s" % (key, self.dictSimilarities[key]) for key in self.dictSimilarities])) self.resynchronize() if (self.dictSimilarities[(0, idx)] >= self.absoluteFidelity): self.lstMerged.append(oneFile) else: break elif (self.relativeFidelity is not None) : if (idx - 1, idx) not in self.dictSimilarities: self.ERROR("dict missing %i,%i: \n" % (idx - 1, idx) + "\n".join([ "%s: %s" % (key, self.dictSimilarities[key]) for key in self.dictSimilarities])) self.resynchronize() if (self.dictSimilarities[(idx - 1, idx)] >= self.relativeFidelity): self.lstMerged.append(oneFile) else: break else: self.lstMerged.append(oneFile) self.lstMerged.sort(cmp) if len(self.lstMerged) != len(self.lstInput): self.strRadiationDamage = "Radiation damage detected, merged %i curves" % len(self.lstMerged) self.WARNING(self.strRadiationDamage) self.lstSummary.append("WARNING: " + self.strRadiationDamage) self.lstSummary.append("Merging files: " + " ".join([os.path.basename(i.path.value) for i in self.lstMerged])) if len(self.lstMerged) == 1: self.rewriteHeader(self.lstMerged[0].path.value, self.strMergedFile) else: self.__edPluginExecDataver = self.loadPlugin(self.__strControlledPluginDataver) xsd = XSDataInputDataver(inputCurve=self.lstMerged) # outputCurve=self.dataInput.mergedCurve, self.__edPluginExecDataver.setDataInput(xsd) self.__edPluginExecDataver.connectSUCCESS(self.doSuccessExecDataver) self.__edPluginExecDataver.connectFAILURE(self.doFailureExecDataver) self.__edPluginExecDataver.executeSynchronous() if (self.fConcentration == 0) and (self.strSubFile is not None): if (self.__class__.lastBuffer is not None) and (self.__class__.lastSample is not None): self.__edPluginExecAutoSub = self.loadPlugin(self.__strControlledPluginAutoSub) base = "_".join(os.path.basename(self.__class__.lastSample.path.value).split("_")[:-1]) suff = os.path.basename(self.strSubFile).split("_")[-1] sub = os.path.join(os.path.dirname(self.strSubFile), base + "_" + suff) xsdSubtractedCurve = XSDataFile(XSDataString(sub)) self.curves.append(xsdSubtractedCurve) self.__edPluginExecAutoSub.dataInput = XSDataInputAutoSub(sampleCurve=self.__class__.lastSample, buffers=[self.__class__.lastBuffer, self.dataInput.mergedCurve], subtractedCurve=xsdSubtractedCurve) self.__edPluginExecAutoSub.connectSUCCESS(self.doSuccessExecAutoSub) self.__edPluginExecAutoSub.connectFAILURE(self.doFailureExecAutoSub) self.__edPluginExecAutoSub.executeSynchronous() if self.isFailure(): return self.__edPluginSaxsAnalysis = self.loadPlugin(self.__strControlledPluginSaxsAnalysis) self.__edPluginSaxsAnalysis.dataInput = XSDataInputSaxsAnalysis(scatterCurve=xsdSubtractedCurve, autoRg=self.autoRg) self.__edPluginSaxsAnalysis.connectSUCCESS(self.doSuccessSaxsAnalysis) self.__edPluginSaxsAnalysis.connectFAILURE(self.doFailureSaxsAnalysis) self.__edPluginSaxsAnalysis.executeSynchronous() self.__class__.lastBuffer = self.dataInput.mergedCurve self.__class__.lastSample = None else: self.__class__.lastSample = self.dataInput.mergedCurve if self.dataInput.sample.login and self.dataInput.sample.passwd and self.dataInput.sample.measurementID: self.lstSummary.append("Registering to ISPyB") self.__edPluginSaxsISPyB = self.loadPlugin(self.__strControlledPluginSaxsISPyB) if len(self.lstInput) > 1: frameAverage = XSDataInteger(len(self.lstInput)) frameMerged = XSDataInteger(len(self.lstMerged)) else: frameMerged = frameAverage = XSDataInteger(1) self.curves = [XSDataFile(i.path) for i in self.lstInput] if self.strMergedFile is not None: self.curves.append(XSDataFile(XSDataString(self.strMergedFile))) xsdin = XSDataInputBioSaxsISPyBv1_0(sample=self.dataInput.sample, autoRg=self.autoRg, gnom=self.gnom, volume=self.volume, frameAverage=frameAverage, frameMerged=frameMerged, curves=self.curves, bestBuffer=self.xsBestBuffer # destination=self.dataInput.sample.ispybDestination #duplicate, already in sample ) self.__edPluginSaxsISPyB.dataInput = xsdin self.__edPluginSaxsISPyB.connectSUCCESS(self.doSuccessISPyB) self.__edPluginSaxsISPyB.connectFAILURE(self.doFailureISPyB) self.__edPluginSaxsISPyB.execute()