def create_service_project(request): if request.is_ajax(): import os from pyworkflow.object import Pointer from pyworkflow.em.protocol import ProtUnionSet, ProtImportAverages from pyworkflow.em.packages.xmipp3 import XmippProtRansac, XmippProtReconstructSignificant, XmippProtAlignVolumeForWeb from pyworkflow.em.packages.eman2 import EmanProtInitModel from pyworkflow.em.packages.simple import ProtPrime # Create a new project projectName = request.GET.get('projectName') # Filename to use as test data testDataKey = request.GET.get('testData') #customMenu = os.path.join(os.path.dirname(os.environ['SCIPION_PROTOCOLS']), 'menu_initvolume.conf') manager = getServiceManager('myfirstmap') writeCustomMenu(manager.protocols) project = manager.createProject(projectName, runsView=1, hostsConf=manager.hosts, protocolsConf=manager.protocols ) project.getSettings().setLifeTime(14) project.saveSettings() #copyFile(customMenu, project.getPath('.config', 'protocols.conf')) # 1. Import averages # If using test data execute the import averages run # options are set in 'project_utils.js' dsMDA = DataSet.getDataSet('initial_volume') if testDataKey : fn = dsMDA.getFile(testDataKey) newFn = join(project.uploadPath, basename(fn)) copyFile(fn, newFn) label_import = 'import averages ('+ testDataKey +')' protImport = project.newProtocol(ProtImportAverages, objLabel=label_import) protImport.filesPath.set(newFn) protImport.samplingRate.set(1.) project.launchProtocol(protImport, wait=True) else: protImport = project.newProtocol(ProtImportAverages, objLabel='import averages') project.saveProtocol(protImport) # 2a. Ransac protRansac = project.newProtocol(XmippProtRansac) protRansac.setObjLabel('xmipp - ransac') protRansac.inputSet.set(protImport) protRansac.inputSet.setExtendedAttribute('outputAverages') if testDataKey : setProtocolParams(protRansac, testDataKey) project.saveProtocol(protRansac) # 2b. Eman protEmanInitVol = project.newProtocol(EmanProtInitModel) protEmanInitVol.setObjLabel('eman - initial vol') protEmanInitVol.inputSet.set(protImport) protEmanInitVol.inputSet.setExtendedAttribute('outputAverages') if testDataKey : setProtocolParams(protEmanInitVol, testDataKey) project.saveProtocol(protEmanInitVol) # 2c. Significant protSignificant = project.newProtocol(XmippProtReconstructSignificant) protSignificant.setObjLabel('xmipp - significant') protSignificant.inputSet.set(protImport) protSignificant.inputSet.setExtendedAttribute('outputAverages') if testDataKey : setProtocolParams(protSignificant, testDataKey) project.saveProtocol(protSignificant) # 3. Join result volumes p1 = Pointer() p1.set(protRansac) p1.setExtendedAttribute('outputVolumes') p2 = Pointer() p2.set(protEmanInitVol) p2.setExtendedAttribute('outputVolumes') p3 = Pointer() p3.set(protSignificant) p3.setExtendedAttribute('outputVolume') protJoin = project.newProtocol(XmippProtAlignVolumeForWeb) protJoin.setObjLabel('align volumes') protJoin.inputVolumes.append(p1) protJoin.inputVolumes.append(p2) protJoin.inputVolumes.append(p3) # protJoin.inputVolumes.append(p4) project.saveProtocol(protJoin) protValidate = project.newProtocol(XmippProtValidateNonTilt) protValidate.setObjLabel('validate nontilt') protValidate.inputVolumes.set(protJoin) protValidate.inputVolumes.setExtendedAttribute('outputVolumes') protValidate.inputParticles.set(protImport) protValidate.inputParticles.setExtendedAttribute('outputAverages') protValidate.numberOfMpi.set(8) if testDataKey : setProtocolParams(protValidate, testDataKey) # protJoin.inputVolumes.append(p4) project.saveProtocol(protValidate) return HttpResponse(mimetype='application/javascript')