{"action":"created","comment":{"url":"https://api.github.com/repos/I2PC/scipion/pulls/comments/221266433","pull_request_review_id":159877213,"id":221266433,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIyMTI2NjQzMw==","diff_hunk":"@@ -1297,41 +1545,866 @@ def testEMRingerValidationAfterMultipleCootAndRefmacFit(self):\n         self.launchProtocol(protEMRinger)\n \n         # check EMRinger results\n-        self.checkResults(optThresh=0.6395777794584399,\n-                          rotRatio=0.8089887640449438,\n-                          maxZscore=5.061428266922506,\n+        self.checkResults(optThresh=0.6134629219492418,\n+                          rotRatio=0.8247422680412371,\n+                          maxZscore=5.59540502751673,\n                           modLength=121,\n-                          EMScore=4.601298424475005,\n+                          EMScore=5.086731843197027,\n                           protEMRinger=protEMRinger)\n \n-    def testEMRingerValidationSeveralChains(self):\n-        \"\"\" This test checks that EMRinger validation protocol runs with a\n-        volume provided directly as inputVol, the input PDB was fitted to\n-        the volume and refined previously by coot and refmac in another project\n-         \"\"\"\n-        print \"Run EMRinger validation from imported volume and pdb file \" \\\n-              \"already refined by Coot and Refmac in another project\"\n+    def testEMRingerValidationAfterMultipleCootAndRefmacFitWithMask(self):\n+        # This test checks that EMRinger runs when a volume provided\n+        # by Chimera workflow; the PDB is provided by Coot/Refmac with mask\n+        # starting volume with a different coordinate origin\n+        print \"Run EMRinger validation from PDB file saved from \" \\\n+              \"Chimera_2/Coot/Refmac with mask\"\n \n-        # Import Volume\n-        volume3 = self._importVolume3()\n+        volume2 = self._importVolume2()\n+        structure1_PDB = self._importStructurePDBWoVol()\n \n-        # import PDB\n-        structure5_PDB = self._importStructurePDBWoVol2()\n+        # chimera fit\n \n-        #EMRinger\n-        args = {'inputVolume': volume3,\n-                'inputStructure': structure5_PDB,\n-                'doTest': True\n+        extraCommands = \"\"\n+        extraCommands += \"runCommand('fitmap #2 #1')\\n\"\n+        extraCommands += \"runCommand('scipionwrite model #2 refmodel #1 \" \\\n+                         \"saverefmodel 1')\\n\"\n+        extraCommands += \"runCommand('stop')\\n\"\n+\n+        args = {'extraCommands': extraCommands,\n+                'inputVolume': volume2,\n+                'pdbFileToBeRefined': structure1_PDB\n                 }\n-        protEMRinger = self.newProtocol(PhenixProtRunEMRinger, **args)\n-        protEMRinger.setObjLabel('EMRinger validation\\n volume and pdb\\n')\n-        self.launchProtocol(protEMRinger)\n \n-        # check EMRinger results\n-        self.checkResults(optThresh=0.016682716149338486,\n-                          rotRatio=0.8158347676419966,\n-                          maxZscore=26.526393559321498,\n-                          modLength=2587,\n-                          EMScore=5.21530839370391,\n-                          protEMRinger=protEMRinger)\n+        protChimera = self.newProtocol(ChimeraProtRigidFit, **args)\n+        protChimera.setObjLabel('chimera fit\\n volume associated '\n+                                    'to pdb\\n save volume and model')\n+        self.launchProtocol(protChimera)\n+\n+        volume = protChimera.output3Dmap\n+        structure3_PDB = protChimera.outputPdb_01\n+\n+        # coot\n+        label = 'testLabel6'\n+        listVolCoot = [volume]\n+        args = {'extraCommands': self._createExtraCommandLine(0., 0., 0.,\n+                                                              label),\n+                'inputVolumes': listVolCoot,\n+                'pdbFileToBeRefined': structure3_PDB,\n+                'doInteractive': True\n+                }\n+        protCoot = self.newProtocol(CootRefine, **args)\n+        protCoot.setObjLabel('coot refinement\\n volume and pdb\\n 2 runs\\n '\n+                             'save model')\n+        try:\n+            self.launchProtocol(protCoot)\n+        except:\n+            print \"first call to coot ended\"\n+        self.assertIsNotNone(protCoot.testLabel6.getFileName(),\n+                             \"There was a problem with the alignment\")\n+        self.assertTrue(\n+            os.path.exists(protCoot.testLabel6.getFileName()))\n+        self.assertTrue(\n+            os.path.exists(protCoot.output3DMap_0001.getFileName()))\n+\n+        protCoot.doInteractive.set(False)\n+        newExtraCommands = self._createExtraCommandLine(0., 0., 0.)\n+        protCoot.extraCommands.set(newExtraCommands)\n+        self.launchProtocol(protCoot)\n+\n+        # EMRinger\n+        coot_PDB = protCoot.cootOut0001\n+        args = {'inputVolume': volume,\n+                'inputStructure': coot_PDB,\n+                'doTest': True\n+                }\n+        protEMRinger = self.newProtocol(PhenixProtRunEMRinger, **args)\n+        protEMRinger.setObjLabel('EMRinger validation\\n volume and pdb\\n')\n+        self.launchProtocol(protEMRinger)\n+\n+        # check EMRinger results\n+        self.checkResults(optThresh=0.671007165163965,\n+                          rotRatio=0.6756756756756757,\n+                          maxZscore=2.313625586144688,\n+                          modLength=121,\n+                          EMScore=2.103295987404262,\n+                          protEMRinger=protEMRinger)\n+\n+        # refmac with mask\n+        coot_PDB = protCoot.cootOut0001\n+        args = {'inputVolume': volume,\n+                'inputStructure': coot_PDB,\n+                'generateMaskedVolume': True\n+                }\n+        protRefmac = self.newProtocol(CCP4ProtRunRefmac, **args)\n+        protRefmac.setObjLabel('MASK refmac refinement\\n volume and pdb\\n save '\n+                               'model')\n+        self.launchProtocol(protRefmac)\n+        self.assertIsNotNone(protRefmac.outputPdb.getFileName(),\n+                             \"There was a problem with the alignment\")\n+        self.assertTrue(os.path.exists(protRefmac.outputPdb.getFileName()))\n+\n+        # EMRinger\n+        refmac_PDB = protRefmac.outputPdb\n+        args = {'inputVolume': volume,\n+                'inputStructure': refmac_PDB,\n+                'doTest': True\n+                }\n+        protEMRinger = self.newProtocol(PhenixProtRunEMRinger, **args)\n+        protEMRinger.setObjLabel('EMRinger validation\\n volume and pdb\\n')\n+        self.launchProtocol(protEMRinger)\n+\n+        # check EMRinger results\n+        self.checkResults(optThresh=0.6428403430931879,\n+                          rotRatio=0.8202247191011236,\n+                          maxZscore=5.2741678087896515,\n+                          modLength=121,\n+                          EMScore=4.7946980079905925,\n+                          protEMRinger=protEMRinger)\n+\n+    def testEMRingerValidationSeveralChains(self):\n+        \"\"\" This test checks that EMRinger validation protocol runs with a\n+        volume provided directly as inputVol, the input PDB was fitted to\n+        the volume and refined previously by coot and refmac in another project\n+         \"\"\"\n+        print \"Run EMRinger validation from imported volume and pdb file \" \\\n+              \"already refined by Coot and Refmac in another project\"\n+\n+        # Import Volume\n+        volume3 = self._importVolume3()\n+\n+        # import PDB\n+        structure5_PDB = self._importStructurePDBWoVol2()\n+\n+        # EMRinger\n+        args = {'inputVolume': volume3,\n+                'inputStructure': structure5_PDB,\n+                'doTest': True\n+                }\n+        protEMRinger = self.newProtocol(PhenixProtRunEMRinger, **args)\n+        protEMRinger.setObjLabel('EMRinger validation\\n volume and pdb\\n')\n+        self.launchProtocol(protEMRinger)\n+\n+        # check EMRinger results\n+        self.checkResults(optThresh=0.016682716149338486,\n+                          rotRatio=0.8158347676419966,\n+                          maxZscore=26.526393559321498,\n+                          modLength=2587,\n+                          EMScore=5.21530839370391,\n+                          protEMRinger=protEMRinger)\n+\n+class TestMolprobityValidation(TestImportData):\n+    \"\"\" Test the protocol of MolProbity validation\n+    \"\"\"\n+    def checkResults(self, ramOutliers, ramFavored, rotOutliers, cbetaOutliers,\n+                     clashScore, overallScore, protMolProbity, places=2):\n+        # method to check MolProbity statistic results of the Final Results\n+        # Table\n+        self.assertAlmostEqual(protMolProbity.ramachandranOutliers,\n+                               ramOutliers, places)\n+        self.assertAlmostEqual(protMolProbity.ramachandranFavored,\n+                               ramFavored, places)\n+        self.assertAlmostEqual(protMolProbity.rotamerOutliers,\n+                               rotOutliers, places)\n+        self.assertAlmostEqual(protMolProbity.cbetaOutliers,\n+                               cbetaOutliers, places)\n+        self.assertAlmostEqual(protMolProbity.clashscore,\n+                               clashScore, places)\n+        self.assertAlmostEqual(protMolProbity.overallScore,\n+                               overallScore, places)\n+\n+    def testMolProbityValidationFromPDB(self):\n+        \"\"\" This test checks that EMRinger validation protocol runs with an\n+        atomic structure; No Volume was provided and no error message is\n+        expected\"\"\"\n+        print \"Run MolProbity validation protocol from imported pdb file \" \\\n+              \"without imported or pdb-associated volume\"\n+\n+        # import PDB\n+        structure_PDB = self._importStructurePDBWoVol()\n+        self.assertTrue(structure_PDB.getFileName())\n+        self.assertFalse(structure_PDB.getVolume())\n+        args = {'inputStructure': structure_PDB\n+               }\n+\n+        protMolProbity = self.newProtocol(PhenixProtRunMolprobity, **args)\n+        protMolProbity.setObjLabel('PhenixProtRunMolprobity validation\\n '\n+                                   'no volume associated to pdb\\n')\n+        self.launchProtocol(protMolProbity)\n+\n+        # check MolProbity results\n+        self.checkResults(ramOutliers=0.94,\n+                          ramFavored=81.60,\n+                          rotOutliers=3.98,\n+                          cbetaOutliers=0,\n+                          clashScore=4.77,\n+                          overallScore=2.42,\n+                          protMolProbity=protMolProbity)\n+\n+    def testMolProbityValidationFromVolume(self):\n+        \"\"\" This test checks that MolProbity validation protocol runs with a\n+        density volume; No atomic structure was provided and a error message is\n+        expected\"\"\"\n+\n+        print \"Run MolProbity validation protocol from imported volume file \" \\\n+          \"without imported pdb\"\n+\n+        # import volume\n+        volume = self._importVolume()\n+        self.assertTrue(volume.getFileName())\n+\n+        args = {'inputVolume': volume,\n+                'resolution': 3.5\n+               }\n+\n+        protMolProbity = self.newProtocol(PhenixProtRunMolprobity, **args)\n+        protMolProbity.setObjLabel(\n+        'PhenixProtRunMolprobity validation\\n volume and no pdb\\n')\n+\n+        try:\n+            self.launchProtocol(protMolProbity)\n+        except Exception as e:\n+            self.assertTrue(True)\n+            print \"This test should return a error message as '\" \\\n+              \" Input atomic structure cannot be EMPTY.\\n\"\n+\n+            return\n+        self.assertTrue(False)\n+\n+    def testMolprobityValidationAfterRefmacNoMask(self):\n+        \"\"\" This test checks that MolProbity validation protocol runs with a\n+        volume provided directly as inputVol, the input PDB was fitted to\n+        the volume and refined previously by coot and refmac without mask\n+         \"\"\"\n+        print \"Run MolProbity validation from imported volume and pdb file \" \\\n+              \"fitted and refined by Coot/Refmac\"\n+\n+        # Import Volume\n+        volume = self._importVolume()\n+\n+        # import PDB\n+        structure_PDB = self._importStructurePDBWoVol()\n+\n+        # coot\n+        label = 'testLabel1'\n+        listVolCoot = [volume]\n+        args = {'extraCommands': self._createExtraCommandLine(-24.11, -45.76,\n+                                                              -24.60, label),\n+                'inputVolumes': listVolCoot,\n+                'pdbFileToBeRefined': structure_PDB,\n+                'doInteractive': False\n+                }\n+        protCoot = self.newProtocol(CootRefine, **args)\n+        protCoot.setObjLabel('coot refinement\\n volume and pdb\\n save model')\n+        self.launchProtocol(protCoot)\n+\n+        # refmac withouth mask\n+        coot_PDB = protCoot.testLabel1\n+        args = {'inputVolume': volume,\n+                'inputStructure': coot_PDB,\n+                'generateMaskedVolume': False\n+                }\n+        protRefmac = self.newProtocol(CCP4ProtRunRefmac, **args)\n+        protRefmac.setObjLabel('refmac refinement\\n volume and pdb\\n save '\n+                               'model')\n+        self.launchProtocol(protRefmac)\n+        self.assertIsNotNone(protRefmac.outputPdb.getFileName(),\n+                             \"There was a problem with the alignment\")\n+        self.assertTrue(os.path.exists(protRefmac.outputPdb.getFileName()))\n+\n+        # MolProbity\n+        refmac_PDB = protRefmac.outputPdb\n+        args = {'inputVolume': volume,\n+                'resolution': 3.5,\n+                'inputStructure': refmac_PDB\n+                }\n+        protMolProbity = self.newProtocol(PhenixProtRunMolprobity, **args)\n+        protMolProbity.setObjLabel('MolProbity validation\\n volume and pdb\\n')\n+        self.launchProtocol(protMolProbity)\n+\n+        # check MolProbity results\n+        self.checkResults(ramOutliers=0.47,\n+                          ramFavored=83.96,\n+                          rotOutliers=5.68,\n+                          cbetaOutliers=1,\n+                          clashScore=4.77,\n+                          overallScore=2.50,\n+                          protMolProbity=protMolProbity)\n+\n+    def testMolprobityValidationAfterRefmacWithMask(self):\n+        \"\"\" This test checks that MolProbity validation protocol runs with a\n+        volume provided directly as inputVol, the input PDB was fitted to\n+        the volume and refined previously by coot and refmac with mask\n+         \"\"\"\n+        print \"Run MolProbity validation from imported volume and pdb file \" \\\n+              \"fitted and refined by Coot/Refmac with mask\"\n+\n+        # Import Volume\n+        volume = self._importVolume()\n+\n+        # import PDB\n+        structure_PDB = self._importStructurePDBWoVol()\n+\n+        # coot\n+        label = 'testLabel2'\n+        listVolCoot = [volume]\n+        args = {'extraCommands': self._createExtraCommandLine(-24.11, -45.76,\n+                                                              -24.60, label),\n+                'inputVolumes': listVolCoot,\n+                'pdbFileToBeRefined': structure_PDB,\n+                'doInteractive': False\n+                }\n+        protCoot = self.newProtocol(CootRefine, **args)\n+        protCoot.setObjLabel('coot refinement\\n volume and pdb\\n save model')\n+        self.launchProtocol(protCoot)\n+\n+        # refmac with mask\n+        coot_PDB = protCoot.testLabel2\n+        args = {'inputVolume': volume,\n+                'inputStructure': coot_PDB,\n+                'generateMaskedVolume': True\n+                }\n+        protRefmac = self.newProtocol(CCP4ProtRunRefmac, **args)\n+        protRefmac.setObjLabel('MASK refmac refinement\\n volume and pdb\\n save '\n+                               'model')\n+        self.launchProtocol(protRefmac)\n+        self.assertIsNotNone(protRefmac.outputPdb.getFileName(),\n+                             \"There was a problem with the alignment\")\n+        self.assertTrue(os.path.exists(protRefmac.outputPdb.getFileName()))\n+\n+        # MolProbity\n+        refmac_PDB = protRefmac.outputPdb\n+        args = {'inputVolume': volume,\n+                'resolution': 3.5,\n+                'inputStructure': refmac_PDB\n+                }\n+        protMolProbity = self.newProtocol(PhenixProtRunMolprobity, **args)\n+        protMolProbity.setObjLabel('MolProbity validation\\n volume and pdb\\n')\n+        self.launchProtocol(protMolProbity)\n+\n+        # check MolProbity results\n+        self.checkResults(ramOutliers=0.47,\n+                          ramFavored=83.49,\n+                          rotOutliers=5.68,\n+                          cbetaOutliers=0,\n+                          clashScore=5.07,\n+                          overallScore=2.53,\n+                          protMolProbity=protMolProbity)\n+\n+    def testMolProbityValidationAfterChimeraAndCootAndRefmacNoMask(self):\n+        \"\"\" This test checks that MolProbity validation protocol runs with a\n+        volume provided by Chimera, the input PDB is provided by Coot \"\"\"\n+        print \"Run MolProbity validation from volume provided by Chimera \" \\\n+              \"and pdb file provided by Coot/Refmac without mask\"\n+\n+        # Import Volume\n+        volume = self._importVolume()\n+\n+        # import PDB\n+        structure_PDB = self._importStructurePDBWoVol()\n+\n+        # create auxiliary CMD file for chimera fit\n+        extraCommands = \"\"\n+        extraCommands += \"runCommand('move -24.11,-45.76,-24.60 model #2 \" \\\n+                         \"coord #1')\\n\"\n+        extraCommands += \"runCommand('fitmap #2 #1')\\n\"\n+        extraCommands += \"runCommand('scipionwrite model #2 refmodel #1 \" \\\n+                         \"saverefmodel 1')\\n\"\n+        extraCommands += \"runCommand('stop')\\n\"\n+\n+        args = {'extraCommands': extraCommands,\n+                'inputVolume': volume,\n+                'pdbFileToBeRefined': structure_PDB\n+                }\n+        protChimera = self.newProtocol(ChimeraProtRigidFit, **args)\n+        protChimera.setObjLabel('chimera fit\\n volume and pdb\\n save volume '\n+                                'and model')\n+        self.launchProtocol(protChimera)\n+\n+        structure2_PDB = protChimera.outputPdb_01\n+        volume2 = protChimera.output3Dmap\n+\n+        # coot\n+        label = 'testLabel3'\n+        listVolCoot = [volume2]\n+        args = {'extraCommands': self._createExtraCommandLine(0., 0., 0.,\n+                                                              label),\n+                'inputVolumes': listVolCoot,\n+                'pdbFileToBeRefined': structure2_PDB,\n+                'doInteractive': False\n+                }\n+        protCoot = self.newProtocol(CootRefine, **args)\n+        protCoot.setObjLabel('coot refinement\\n volume and pdb\\n save model')\n+        self.launchProtocol(protCoot)\n+        self.assertIsNotNone(protCoot.testLabel3.getFileName(),\n+                             \"There was a problem with the alignment\")\n+        self.assertTrue(os.path.exists(protCoot.testLabel3.getFileName()))\n+\n+        # MolProbity\n+        coot_PDB = protCoot.testLabel3\n+        args = {'inputVolume': volume2,\n+                'resolution': 3.5,\n+                'inputStructure': coot_PDB\n+                }\n+\n+        protMolProbity = self.newProtocol(PhenixProtRunMolprobity, **args)\n+        protMolProbity.setObjLabel('MolProbity validation\\n volume and pdb\\n')\n+        self.launchProtocol(protMolProbity)\n+\n+        # check MolProbity results\n+        self.checkResults(ramOutliers=0.94,\n+                          ramFavored=81.60,\n+                          rotOutliers=3.98,\n+                          cbetaOutliers=0,\n+                          clashScore=4.77,\n+                          overallScore=2.42,\n+                          protMolProbity=protMolProbity)\n+\n+        # refmac withouth mask\n+        coot_PDB = protCoot.testLabel3\n+        args = {'inputVolume': volume2,\n+                'inputStructure': coot_PDB,\n+                'generateMaskedVolume': False\n+                }\n+\n+        protRefmac = self.newProtocol(CCP4ProtRunRefmac, **args)\n+        protRefmac.setObjLabel('refmac refinement\\n volume and pdb\\n save '\n+                               'model')\n+        self.launchProtocol(protRefmac)\n+        self.assertIsNotNone(protRefmac.outputPdb.getFileName(),\n+                             \"There was a problem with the alignment\")\n+        self.assertTrue(os.path.exists(protRefmac.outputPdb.getFileName()))\n+\n+        # MolProbity\n+        refmac_PDB = protRefmac.outputPdb\n+        args = {'inputVolume': volume2,\n+                'resolution': 3.5,\n+                'inputStructure': refmac_PDB\n+                }\n+\n+        protMolProbity = self.newProtocol(PhenixProtRunMolprobity, **args)\n+        protMolProbity.setObjLabel('MolProbity validation\\n volume and pdb\\n')\n+        self.launchProtocol(protMolProbity)\n+\n+        # check MolProbity results\n+        self.checkResults(ramOutliers=0.47,\n+                          ramFavored=84.43,\n+                          rotOutliers=6.25,\n+                          cbetaOutliers=1,\n+                          clashScore=4.77,\n+                          overallScore=2.52,\n+                          protMolProbity=protMolProbity)\n+\n+    def testMolProbityValidationAfterChimeraAndCootAndRefmacWithMask(self):\n+        \"\"\" This test checks that MolProbity validation protocol runs with a\n+        volume provided by Chimera, the input PDB is provided by Coot \"\"\"\n+        print \"Run MolProbity validation from volume provided by Chimera \" \\\n+              \"and pdb file provided by Coot/Refmac with mask\"\n+\n+        # Import Volume\n+        volume = self._importVolume()\n+\n+        # import PDB\n+        structure_PDB = self._importStructurePDBWoVol()\n+\n+        # create auxiliary CMD file for chimera fit\n+        extraCommands = \"\"\n+        extraCommands += \"runCommand('move -24.11,-45.76,-24.60 model #2 \" \\\n+                         \"coord #1')\\n\"\n+        extraCommands += \"runCommand('fitmap #2 #1')\\n\"\n+        extraCommands += \"runCommand('scipionwrite model #2 refmodel #1 \" \\\n+                         \"saverefmodel 1')\\n\"\n+        extraCommands += \"runCommand('stop')\\n\"\n+\n+        args = {'extraCommands': extraCommands,\n+                'inputVolume': volume,\n+                'pdbFileToBeRefined': structure_PDB\n+                }\n+        protChimera = self.newProtocol(ChimeraProtRigidFit, **args)\n+        protChimera.setObjLabel('chimera fit\\n volume and pdb\\n save volume '\n+                                'and model')\n+        self.launchProtocol(protChimera)\n+\n+        structure2_PDB = protChimera.outputPdb_01\n+        volume2 = protChimera.output3Dmap\n+\n+        # coot\n+        label = 'testLabel4'\n+        listVolCoot = [volume2]\n+        args = {'extraCommands': self._createExtraCommandLine(0., 0., 0.,\n+                                                              label),\n+                'inputVolumes': listVolCoot,\n+                'pdbFileToBeRefined': structure2_PDB,\n+                'doInteractive': False\n+                }\n+        protCoot = self.newProtocol(CootRefine, **args)\n+        protCoot.setObjLabel('coot refinement\\n volume and pdb\\n save model')\n+        self.launchProtocol(protCoot)\n+        self.assertIsNotNone(protCoot.testLabel4.getFileName(),\n+                             \"There was a problem with the alignment\")\n+        self.assertTrue(os.path.exists(protCoot.testLabel4.getFileName()))\n+\n+        # MolProbity\n+        coot_PDB = protCoot.testLabel4\n+        args = {'inputVolume': volume2,\n+                'resolution': 3.5,\n+                'inputStructure': coot_PDB\n+                }\n+\n+        protMolProbity = self.newProtocol(PhenixProtRunMolprobity, **args)\n+        protMolProbity.setObjLabel('MolProbity validation\\n volume and pdb\\n')\n+        self.launchProtocol(protMolProbity)\n+\n+        # check MolProbity results\n+        self.checkResults(ramOutliers=0.94,\n+                          ramFavored=81.60,\n+                          rotOutliers=3.98,\n+                          cbetaOutliers=0,\n+                          clashScore=4.77,\n+                          overallScore=2.42,\n+                          protMolProbity=protMolProbity)\n+\n+        # refmac with mask\n+        coot_PDB = protCoot.testLabel4\n+        args = {'inputVolume': volume2,\n+                'inputStructure': coot_PDB,\n+                'generateMaskedVolume': True\n+                }\n+\n+        protRefmac = self.newProtocol(CCP4ProtRunRefmac, **args)\n+        protRefmac.setObjLabel('MASK refmac refinement\\n volume and pdb\\n save '\n+                               'model')\n+        self.launchProtocol(protRefmac)\n+        self.assertIsNotNone(protRefmac.outputPdb.getFileName(),\n+                             \"There was a problem with the alignment\")\n+        self.assertTrue(os.path.exists(protRefmac.outputPdb.getFileName()))\n+\n+        # MolProbity\n+        refmac_PDB = protRefmac.outputPdb\n+        args = {'inputVolume': volume2,\n+                'resolution': 3.5,\n+                'inputStructure': refmac_PDB\n+                }\n+\n+        protMolProbity = self.newProtocol(PhenixProtRunMolprobity, **args)\n+        protMolProbity.setObjLabel('MolProbity validation\\n volume and pdb\\n')\n+        self.launchProtocol(protMolProbity)\n+\n+        # check MolProbity results\n+        self.checkResults(ramOutliers=0.47,\n+                          ramFavored=83.02,\n+                          rotOutliers=5.68,\n+                          cbetaOutliers=0,\n+                          clashScore=5.37,\n+                          overallScore=2.55,\n+                          protMolProbity=protMolProbity)\n+\n+    def testMolProbityValidationAfterMultipleCootAndRefmacFitNoMask(self):\n+        # This test checks that MolProbity runs when a volume provided\n+        # by Chimera workflow; the PDB is provided by Coot/Refmac\n+        # starting volume with a different coordinate origin\n+        print \"Run MolProbity validation from PDB file saved from \" \\\n+              \"Chimera_2/Coot/Refmac withouth mask\"\n+\n+        volume2 = self._importVolume2()\n+        structure1_PDB = self._importStructurePDBWoVol()\n+\n+        # chimera fit\n+\n+        extraCommands = \"\"\n+        extraCommands += \"runCommand('fitmap #2 #1')\\n\"\n+        extraCommands += \"runCommand('scipionwrite model #2 refmodel #1 \" \\\n+                         \"saverefmodel 1')\\n\"\n+        extraCommands += \"runCommand('stop')\\n\"\n+\n+        args = {'extraCommands': extraCommands,\n+                'inputVolume': volume2,\n+                'pdbFileToBeRefined': structure1_PDB\n+                }\n+\n+        protChimera = self.newProtocol(ChimeraProtRigidFit, **args)\n+        protChimera.setObjLabel('chimera fit\\n volume associated '\n+                               'to pdb\\n save volume and model')\n+        self.launchProtocol(protChimera)\n+\n+        volume = protChimera.output3Dmap\n+        structure3_PDB = protChimera.outputPdb_01\n+\n+        # coot\n+        label = 'testLabel5'\n+        listVolCoot = [volume]\n+        args = {'extraCommands': self._createExtraCommandLine(0., 0., 0.,\n+                                                              label),\n+                'inputVolumes': listVolCoot,\n+                'pdbFileToBeRefined': structure3_PDB,\n+                'doInteractive': True\n+                }\n+        protCoot = self.newProtocol(CootRefine, **args)\n+        protCoot.setObjLabel('coot refinement\\n volume and pdb\\n 2 runs\\n '\n+                             'save model')\n+        try:\n+            self.launchProtocol(protCoot)\n+        except:\n+            print \"first call to coot ended\"\n+        self.assertIsNotNone(protCoot.testLabel5.getFileName(),\n+                             \"There was a problem with the alignment\")\n+        self.assertTrue(os.path.exists(protCoot.testLabel5.getFileName()))\n+        self.assertTrue(\n+            os.path.exists(protCoot.output3DMap_0001.getFileName()))\n+\n+        protCoot.doInteractive.set(False)\n+        newExtraCommands = self._createExtraCommandLine(0., 0., 0.)\n+        protCoot.extraCommands.set(newExtraCommands)\n+        self.launchProtocol(protCoot)\n+\n+        # MolProbity\n+        coot_PDB = protCoot.cootOut0001\n+        args = {'inputVolume': volume,\n+                'resolution': 3.5,\n+                'inputStructure': coot_PDB\n+                }\n+        protMolProbity = self.newProtocol(PhenixProtRunMolprobity, **args)\n+        protMolProbity.setObjLabel('MolProbity validation\\n volume and pdb\\n')\n+        self.launchProtocol(protMolProbity)\n+\n+        # check MolProbity results\n+        self.checkResults(ramOutliers=0.94,\n+                          ramFavored=81.60,\n+                          rotOutliers=3.98,\n+                          cbetaOutliers=0,\n+                          clashScore=4.77,\n+                          overallScore=2.42,\n+                          protMolProbity=protMolProbity)\n+\n+        # refmac withouth mask\n+        coot_PDB = protCoot.cootOut0001\n+        args = {'inputVolume': volume,\n+                'inputStructure': coot_PDB,\n+                'generateMaskedVolume': False\n+                }\n+\n+        protRefmac = self.newProtocol(CCP4ProtRunRefmac, **args)\n+        protRefmac.setObjLabel('refmac refinement\\n volume and '\n+                               'pdb\\n save model')\n+        self.launchProtocol(protRefmac)\n+        self.assertIsNotNone(protRefmac.outputPdb.getFileName(),\n+                             \"There was a problem with the alignment\")\n+        self.assertTrue(os.path.exists(protRefmac.outputPdb.getFileName()))\n+\n+        # MolProbity\n+        refmac_PDB = protRefmac.outputPdb\n+        args = {'inputVolume': volume,\n+                'resolution': 3.5,\n+                'inputStructure': refmac_PDB\n+                }\n+        protMolProbity = self.newProtocol(PhenixProtRunMolprobity, **args)\n+        protMolProbity.setObjLabel('MolProbity validation\\n volume and pdb\\n')\n+        self.launchProtocol(protMolProbity)\n+\n+        # check MolProbity results\n+        self.checkResults(ramOutliers=0.47,\n+                          ramFavored=83.49,\n+                          rotOutliers=5.11,\n+                          cbetaOutliers=1,\n+                          clashScore=5.07,\n+                          overallScore=2.49,\n+                          protMolProbity=protMolProbity)\n+\n+    def testMolProbityValidationAfterMultipleCootAndRefmacFitWithMask(self):\n+        # This test checks that MolProbity runs when a volume provided\n+        # by Chimera workflow; the PDB is provided by Coot/Refmac\n+        # starting volume with a different coordinate origin\n+        print \"Run MolProbity validation from PDB file saved from \" \\\n+              \"Chimera_2/Coot/Refmac with mask\"\n+\n+        volume2 = self._importVolume2()\n+        structure1_PDB = self._importStructurePDBWoVol()\n+\n+        # chimera fit\n+\n+        extraCommands = \"\"\n+        extraCommands += \"runCommand('fitmap #2 #1')\\n\"\n+        extraCommands += \"runCommand('scipionwrite model #2 refmodel #1 \" \\\n+                         \"saverefmodel 1')\\n\"\n+        extraCommands += \"runCommand('stop')\\n\"\n+\n+        args = {'extraCommands': extraCommands,\n+                'inputVolume': volume2,\n+                'pdbFileToBeRefined': structure1_PDB\n+                }\n+\n+        protChimera = self.newProtocol(ChimeraProtRigidFit, **args)\n+        protChimera.setObjLabel('chimera fit\\n volume associated '\n+                               'to pdb\\n save volume and model')\n+        self.launchProtocol(protChimera)\n+\n+        volume = protChimera.output3Dmap\n+        structure3_PDB = protChimera.outputPdb_01\n+\n+        # coot\n+        label = 'testLabel6'\n+        listVolCoot = [volume]\n+        args = {'extraCommands': self._createExtraCommandLine(0., 0., 0.,\n+                                                              label),\n+                'inputVolumes': listVolCoot,\n+                'pdbFileToBeRefined': structure3_PDB,\n+                'doInteractive': True\n+                }\n+        protCoot = self.newProtocol(CootRefine, **args)\n+        protCoot.setObjLabel('coot refinement\\n volume and pdb\\n 2 runs\\n '\n+                             'save model')\n+        try:\n+            self.launchProtocol(protCoot)\n+        except:\n+            print \"first call to coot ended\"\n+        self.assertIsNotNone(protCoot.testLabel6.getFileName(),\n+                             \"There was a problem with the alignment\")\n+        self.assertTrue(os.path.exists(protCoot.testLabel6.getFileName()))\n+        self.assertTrue(\n+            os.path.exists(protCoot.output3DMap_0001.getFileName()))\n+\n+        protCoot.doInteractive.set(False)\n+        newExtraCommands = self._createExtraCommandLine(0., 0., 0.)\n+        protCoot.extraCommands.set(newExtraCommands)\n+        self.launchProtocol(protCoot)\n+\n+        # MolProbity\n+        coot_PDB = protCoot.cootOut0001\n+        args = {'inputVolume': volume,\n+                'resolution': 3.5,\n+                'inputStructure': coot_PDB\n+                }\n+        protMolProbity = self.newProtocol(PhenixProtRunMolprobity, **args)\n+        protMolProbity.setObjLabel('MolProbity validation\\n volume and pdb\\n')\n+        self.launchProtocol(protMolProbity)\n+\n+        # check MolProbity results\n+        self.checkResults(ramOutliers=0.94,\n+                          ramFavored=81.60,\n+                          rotOutliers=3.98,\n+                          cbetaOutliers=0,\n+                          clashScore=4.77,\n+                          overallScore=2.42,\n+                          protMolProbity=protMolProbity)\n+\n+        # refmac with mask\n+        coot_PDB = protCoot.cootOut0001\n+        args = {'inputVolume': volume,\n+                'inputStructure': coot_PDB,\n+                'generateMaskedVolume': True\n+                }\n+\n+        protRefmac = self.newProtocol(CCP4ProtRunRefmac, **args)\n+        protRefmac.setObjLabel('MASK refmac refinement\\n volume and '\n+                               'pdb\\n save model')\n+        self.launchProtocol(protRefmac)\n+        self.assertIsNotNone(protRefmac.outputPdb.getFileName(),\n+                             \"There was a problem with the alignment\")\n+        self.assertTrue(os.path.exists(protRefmac.outputPdb.getFileName()))\n+\n+        # MolProbity\n+        refmac_PDB = protRefmac.outputPdb\n+        args = {'inputVolume': volume,\n+                'resolution': 3.5,\n+                'inputStructure': refmac_PDB\n+                }\n+        protMolProbity = self.newProtocol(PhenixProtRunMolprobity, **args)\n+        protMolProbity.setObjLabel('MolProbity validation\\n volume and pdb\\n')\n+        self.launchProtocol(protMolProbity)\n+\n+        # check MolProbity results\n+        self.checkResults(ramOutliers=0.47,\n+                          ramFavored=83.02,\n+                          rotOutliers=5.68,\n+                          cbetaOutliers=1,\n+                          clashScore=5.07,\n+                          overallScore=2.53,\n+                          protMolProbity=protMolProbity)\n+\n+    def testMolProbityValidationSeveralChains(self):\n+        \"\"\" This test checks that MolProbity validation protocol runs with a\n+        volume provided directly as inputVol, the input PDB was fitted to\n+        the volume and refined previously by coot and refmac in another project\n+         \"\"\"\n+        print \"Run MolProbity validation from imported volume and pdb file \" \\","path":"pyworkflow/tests/em/workflows/test_workflow_modeling.py","position":1571,"original_position":1571,"commit_id":"6a8cad9f937c7d1280513fb1601ea69a25c3c7c1","original_commit_id":"6a8cad9f937c7d1280513fb1601ea69a25c3c7c1","user":{"login":"sonarcloud[bot]","id":39514782,"node_id":"MDM6Qm90Mzk1MTQ3ODI=","avatar_url":"https://avatars2.githubusercontent.com/in/12526?v=4","gravatar_id":"","url":"https://api.github.com/users/sonarcloud%5Bbot%5D","html_url":"https://github.com/apps/sonarcloud","followers_url":"https://api.github.com/users/sonarcloud%5Bbot%5D/followers","following_url":"https://api.github.com/users/sonarcloud%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/sonarcloud%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/sonarcloud%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sonarcloud%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/sonarcloud%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/sonarcloud%5Bbot%5D/repos","events_url":"https://api.github.com/users/sonarcloud%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/sonarcloud%5Bbot%5D/received_events","type":"Bot","site_admin":false},"body":"![Code Smell](https://sonarsource.github.io/sonar-github/code_smell.png 'Code Smell') Code Smell: Replace print statement by built-in function. ([python:PrintStatementUsage](https://sonarcloud.io/organizations/i2pc/rules#rule_key=python%3APrintStatementUsage))\n\n[See it in SonarCloud](https://sonarcloud.io/project/issues?id=Scipion&pullRequest=1784&issues=AWYghZ9xM63is4RDmCvU&open=AWYghZ9xM63is4RDmCvU)\n\n[ISSUE_KEY]: AWYghZ9xM63is4RDmCvU","created_at":"2018-09-28T14:12:06Z","updated_at":"2018-09-28T14:12:08Z","html_url":"https://github.com/I2PC/scipion/pull/1784#discussion_r221266433","pull_request_url":"https://api.github.com/repos/I2PC/scipion/pulls/1784","author_association":"NONE","_links":{"self":{"href":"https://api.github.com/repos/I2PC/scipion/pulls/comments/221266433"},"html":{"href":"https://github.com/I2PC/scipion/pull/1784#discussion_r221266433"},"pull_request":{"href":"https://api.github.com/repos/I2PC/scipion/pulls/1784"}}},"pull_request":{"url":"https://api.github.com/repos/I2PC/scipion/pulls/1784","id":218664704,"node_id":"MDExOlB1bGxSZXF1ZXN0MjE4NjY0NzA0","html_url":"https://github.com/I2PC/scipion/pull/1784","diff_url":"https://github.com/I2PC/scipion/pull/1784.diff","patch_url":"https://github.com/I2PC/scipion/pull/1784.patch","issue_url":"https://api.github.com/repos/I2PC/scipion/issues/1784","number":1784,"state":"closed","locked":false,"title":"Devel to pluginization","user":{"login":"pconesa","id":785633,"node_id":"MDQ6VXNlcjc4NTYzMw==","avatar_url":"https://avatars2.githubusercontent.com/u/785633?v=4","gravatar_id":"","url":"https://api.github.com/users/pconesa","html_url":"https://github.com/pconesa","followers_url":"https://api.github.com/users/pconesa/followers","following_url":"https://api.github.com/users/pconesa/following{/other_user}","gists_url":"https://api.github.com/users/pconesa/gists{/gist_id}","starred_url":"https://api.github.com/users/pconesa/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pconesa/subscriptions","organizations_url":"https://api.github.com/users/pconesa/orgs","repos_url":"https://api.github.com/users/pconesa/repos","events_url":"https://api.github.com/users/pconesa/events{/privacy}","received_events_url":"https://api.github.com/users/pconesa/received_events","type":"User","site_admin":false},"body":"Bringing changes from devel, which has just accepted changes from release-1.2.1","created_at":"2018-09-27T14:02:36Z","updated_at":"2018-09-28T14:12:07Z","closed_at":"2018-09-28T14:08:02Z","merged_at":"2018-09-28T14:08:02Z","merge_commit_sha":"69fe4c2b1cb998786cdfa9afadcea84f2fbd77db","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/I2PC/scipion/pulls/1784/commits","review_comments_url":"https://api.github.com/repos/I2PC/scipion/pulls/1784/comments","review_comment_url":"https://api.github.com/repos/I2PC/scipion/pulls/comments{/number}","comments_url":"https://api.github.com/repos/I2PC/scipion/issues/1784/comments","statuses_url":"https://api.github.com/repos/I2PC/scipion/statuses/6a8cad9f937c7d1280513fb1601ea69a25c3c7c1","head":{"label":"I2PC:devel-to-pluginization","ref":"devel-to-pluginization","sha":"6a8cad9f937c7d1280513fb1601ea69a25c3c7c1","user":{"login":"I2PC","id":16493564,"node_id":"MDEyOk9yZ2FuaXphdGlvbjE2NDkzNTY0","avatar_url":"https://avatars0.githubusercontent.com/u/16493564?v=4","gravatar_id":"","url":"https://api.github.com/users/I2PC","html_url":"https://github.com/I2PC","followers_url":"https://api.github.com/users/I2PC/followers","following_url":"https://api.github.com/users/I2PC/following{/other_user}","gists_url":"https://api.github.com/users/I2PC/gists{/gist_id}","starred_url":"https://api.github.com/users/I2PC/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/I2PC/subscriptions","organizations_url":"https://api.github.com/users/I2PC/orgs","repos_url":"https://api.github.com/users/I2PC/repos","events_url":"https://api.github.com/users/I2PC/events{/privacy}","received_events_url":"https://api.github.com/users/I2PC/received_events","type":"Organization","site_admin":false},"repo":{"id":35214502,"node_id":"MDEwOlJlcG9zaXRvcnkzNTIxNDUwMg==","name":"scipion","full_name":"I2PC/scipion","private":false,"owner":{"login":"I2PC","id":16493564,"node_id":"MDEyOk9yZ2FuaXphdGlvbjE2NDkzNTY0","avatar_url":"https://avatars0.githubusercontent.com/u/16493564?v=4","gravatar_id":"","url":"https://api.github.com/users/I2PC","html_url":"https://github.com/I2PC","followers_url":"https://api.github.com/users/I2PC/followers","following_url":"https://api.github.com/users/I2PC/following{/other_user}","gists_url":"https://api.github.com/users/I2PC/gists{/gist_id}","starred_url":"https://api.github.com/users/I2PC/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/I2PC/subscriptions","organizations_url":"https://api.github.com/users/I2PC/orgs","repos_url":"https://api.github.com/users/I2PC/repos","events_url":"https://api.github.com/users/I2PC/events{/privacy}","received_events_url":"https://api.github.com/users/I2PC/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/I2PC/scipion","description":"Scipion is an image processing framework to obtain 3D models of macromolecular complexes using Electron Microscopy (3DEM)","fork":false,"url":"https://api.github.com/repos/I2PC/scipion","forks_url":"https://api.github.com/repos/I2PC/scipion/forks","keys_url":"https://api.github.com/repos/I2PC/scipion/keys{/key_id}","collaborators_url":"https://api.github.com/repos/I2PC/scipion/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/I2PC/scipion/teams","hooks_url":"https://api.github.com/repos/I2PC/scipion/hooks","issue_events_url":"https://api.github.com/repos/I2PC/scipion/issues/events{/number}","events_url":"https://api.github.com/repos/I2PC/scipion/events","assignees_url":"https://api.github.com/repos/I2PC/scipion/assignees{/user}","branches_url":"https://api.github.com/repos/I2PC/scipion/branches{/branch}","tags_url":"https://api.github.com/repos/I2PC/scipion/tags","blobs_url":"https://api.github.com/repos/I2PC/scipion/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/I2PC/scipion/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/I2PC/scipion/git/refs{/sha}","trees_url":"https://api.github.com/repos/I2PC/scipion/git/trees{/sha}","statuses_url":"https://api.github.com/repos/I2PC/scipion/statuses/{sha}","languages_url":"https://api.github.com/repos/I2PC/scipion/languages","stargazers_url":"https://api.github.com/repos/I2PC/scipion/stargazers","contributors_url":"https://api.github.com/repos/I2PC/scipion/contributors","subscribers_url":"https://api.github.com/repos/I2PC/scipion/subscribers","subscription_url":"https://api.github.com/repos/I2PC/scipion/subscription","commits_url":"https://api.github.com/repos/I2PC/scipion/commits{/sha}","git_commits_url":"https://api.github.com/repos/I2PC/scipion/git/commits{/sha}","comments_url":"https://api.github.com/repos/I2PC/scipion/comments{/number}","issue_comment_url":"https://api.github.com/repos/I2PC/scipion/issues/comments{/number}","contents_url":"https://api.github.com/repos/I2PC/scipion/contents/{+path}","compare_url":"https://api.github.com/repos/I2PC/scipion/compare/{base}...{head}","merges_url":"https://api.github.com/repos/I2PC/scipion/merges","archive_url":"https://api.github.com/repos/I2PC/scipion/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/I2PC/scipion/downloads","issues_url":"https://api.github.com/repos/I2PC/scipion/issues{/number}","pulls_url":"https://api.github.com/repos/I2PC/scipion/pulls{/number}","milestones_url":"https://api.github.com/repos/I2PC/scipion/milestones{/number}","notifications_url":"https://api.github.com/repos/I2PC/scipion/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/I2PC/scipion/labels{/name}","releases_url":"https://api.github.com/repos/I2PC/scipion/releases{/id}","deployments_url":"https://api.github.com/repos/I2PC/scipion/deployments","created_at":"2015-05-07T10:44:31Z","updated_at":"2018-09-14T10:05:46Z","pushed_at":"2018-09-28T14:08:07Z","git_url":"git://github.com/I2PC/scipion.git","ssh_url":"git@github.com:I2PC/scipion.git","clone_url":"https://github.com/I2PC/scipion.git","svn_url":"https://github.com/I2PC/scipion","homepage":"http://scipion.i2pc.es","size":121650,"stargazers_count":42,"watchers_count":42,"language":"C++","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":46,"mirror_url":null,"archived":false,"open_issues_count":300,"license":{"key":"other","name":"NOASSERTION","spdx_id":"NOASSERTION","url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":46,"open_issues":300,"watchers":42,"default_branch":"master"}},"base":{"label":"I2PC:devel-pluginization","ref":"devel-pluginization","sha":"b38cb7eb8b26517c9cb2cfc15f8d61c7332c3add","user":{"login":"I2PC","id":16493564,"node_id":"MDEyOk9yZ2FuaXphdGlvbjE2NDkzNTY0","avatar_url":"https://avatars0.githubusercontent.com/u/16493564?v=4","gravatar_id":"","url":"https://api.github.com/users/I2PC","html_url":"https://github.com/I2PC","followers_url":"https://api.github.com/users/I2PC/followers","following_url":"https://api.github.com/users/I2PC/following{/other_user}","gists_url":"https://api.github.com/users/I2PC/gists{/gist_id}","starred_url":"https://api.github.com/users/I2PC/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/I2PC/subscriptions","organizations_url":"https://api.github.com/users/I2PC/orgs","repos_url":"https://api.github.com/users/I2PC/repos","events_url":"https://api.github.com/users/I2PC/events{/privacy}","received_events_url":"https://api.github.com/users/I2PC/received_events","type":"Organization","site_admin":false},"repo":{"id":35214502,"node_id":"MDEwOlJlcG9zaXRvcnkzNTIxNDUwMg==","name":"scipion","full_name":"I2PC/scipion","private":false,"owner":{"login":"I2PC","id":16493564,"node_id":"MDEyOk9yZ2FuaXphdGlvbjE2NDkzNTY0","avatar_url":"https://avatars0.githubusercontent.com/u/16493564?v=4","gravatar_id":"","url":"https://api.github.com/users/I2PC","html_url":"https://github.com/I2PC","followers_url":"https://api.github.com/users/I2PC/followers","following_url":"https://api.github.com/users/I2PC/following{/other_user}","gists_url":"https://api.github.com/users/I2PC/gists{/gist_id}","starred_url":"https://api.github.com/users/I2PC/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/I2PC/subscriptions","organizations_url":"https://api.github.com/users/I2PC/orgs","repos_url":"https://api.github.com/users/I2PC/repos","events_url":"https://api.github.com/users/I2PC/events{/privacy}","received_events_url":"https://api.github.com/users/I2PC/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/I2PC/scipion","description":"Scipion is an image processing framework to obtain 3D models of macromolecular complexes using Electron Microscopy (3DEM)","fork":false,"url":"https://api.github.com/repos/I2PC/scipion","forks_url":"https://api.github.com/repos/I2PC/scipion/forks","keys_url":"https://api.github.com/repos/I2PC/scipion/keys{/key_id}","collaborators_url":"https://api.github.com/repos/I2PC/scipion/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/I2PC/scipion/teams","hooks_url":"https://api.github.com/repos/I2PC/scipion/hooks","issue_events_url":"https://api.github.com/repos/I2PC/scipion/issues/events{/number}","events_url":"https://api.github.com/repos/I2PC/scipion/events","assignees_url":"https://api.github.com/repos/I2PC/scipion/assignees{/user}","branches_url":"https://api.github.com/repos/I2PC/scipion/branches{/branch}","tags_url":"https://api.github.com/repos/I2PC/scipion/tags","blobs_url":"https://api.github.com/repos/I2PC/scipion/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/I2PC/scipion/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/I2PC/scipion/git/refs{/sha}","trees_url":"https://api.github.com/repos/I2PC/scipion/git/trees{/sha}","statuses_url":"https://api.github.com/repos/I2PC/scipion/statuses/{sha}","languages_url":"https://api.github.com/repos/I2PC/scipion/languages","stargazers_url":"https://api.github.com/repos/I2PC/scipion/stargazers","contributors_url":"https://api.github.com/repos/I2PC/scipion/contributors","subscribers_url":"https://api.github.com/repos/I2PC/scipion/subscribers","subscription_url":"https://api.github.com/repos/I2PC/scipion/subscription","commits_url":"https://api.github.com/repos/I2PC/scipion/commits{/sha}","git_commits_url":"https://api.github.com/repos/I2PC/scipion/git/commits{/sha}","comments_url":"https://api.github.com/repos/I2PC/scipion/comments{/number}","issue_comment_url":"https://api.github.com/repos/I2PC/scipion/issues/comments{/number}","contents_url":"https://api.github.com/repos/I2PC/scipion/contents/{+path}","compare_url":"https://api.github.com/repos/I2PC/scipion/compare/{base}...{head}","merges_url":"https://api.github.com/repos/I2PC/scipion/merges","archive_url":"https://api.github.com/repos/I2PC/scipion/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/I2PC/scipion/downloads","issues_url":"https://api.github.com/repos/I2PC/scipion/issues{/number}","pulls_url":"https://api.github.com/repos/I2PC/scipion/pulls{/number}","milestones_url":"https://api.github.com/repos/I2PC/scipion/milestones{/number}","notifications_url":"https://api.github.com/repos/I2PC/scipion/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/I2PC/scipion/labels{/name}","releases_url":"https://api.github.com/repos/I2PC/scipion/releases{/id}","deployments_url":"https://api.github.com/repos/I2PC/scipion/deployments","created_at":"2015-05-07T10:44:31Z","updated_at":"2018-09-14T10:05:46Z","pushed_at":"2018-09-28T14:08:07Z","git_url":"git://github.com/I2PC/scipion.git","ssh_url":"git@github.com:I2PC/scipion.git","clone_url":"https://github.com/I2PC/scipion.git","svn_url":"https://github.com/I2PC/scipion","homepage":"http://scipion.i2pc.es","size":121650,"stargazers_count":42,"watchers_count":42,"language":"C++","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":46,"mirror_url":null,"archived":false,"open_issues_count":300,"license":{"key":"other","name":"NOASSERTION","spdx_id":"NOASSERTION","url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":46,"open_issues":300,"watchers":42,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/I2PC/scipion/pulls/1784"},"html":{"href":"https://github.com/I2PC/scipion/pull/1784"},"issue":{"href":"https://api.github.com/repos/I2PC/scipion/issues/1784"},"comments":{"href":"https://api.github.com/repos/I2PC/scipion/issues/1784/comments"},"review_comments":{"href":"https://api.github.com/repos/I2PC/scipion/pulls/1784/comments"},"review_comment":{"href":"https://api.github.com/repos/I2PC/scipion/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/I2PC/scipion/pulls/1784/commits"},"statuses":{"href":"https://api.github.com/repos/I2PC/scipion/statuses/6a8cad9f937c7d1280513fb1601ea69a25c3c7c1"}},"author_association":"MEMBER"}}
{"actor":{"display_login":"sonarcloud"}}