コード例 #1
0
int main ( int argc, char** argv )
{
	initialiseProspector ();
	ParameterList pList ( argc, argv );
	try {
		if ( pList.getBoolValue ( "save_params" ) ) {
			init_html ( cout, "Saving Search Compare Parameters" );
			pList.removeName ( "save_params" );
			ParameterList cookieParamList ( "", false, false );		// Create empty parameter set
			cookieParamList.appendParameters ( pList );
			cookieParamList.removeName ( "accession_nums" );
			cookieParamList.removeName ( "remove" );
			cookieParamList.removeName ( "id_filter_list" );
			cookieParamList.removeName ( "data" );
			cookieParamList.removeName ( "version" );
			bool ret = cookieParamList.copyToCookie ( cout, "search_compare_params" );
			if ( !ret ) {
				ErrorHandler::genError ()->error ( "Could not save the parameters as their length exceeds the maximum cookie length.\n" );
			}
			cout << "<p>Settings saved</p>" << endl;
			cout << "<input type=\"button\" value=\"Search Form\" onclick=\"history.go(-1)\">" << endl;
			exit ( 0 );
		}
		if ( pList.empty () ) {
			ErrorHandler::genError ()->error ( "No parameters passed to Search Compare.\n" );
		}
		ProgramLink::setParams ( &pList );
		init_html_premature_stop ( "Search Compare", true );
		SearchCompareParams params ( &pList );
		sresFPR = params.getReportType () == "False Positive Rate";
		sresTime = params.getReportType () == "Time" || sresFPR;
		sresXLinks = params.getReportType () == "Crosslinked Peptides";
		sresMods = params.getReportType () == "Modifications";
		sresProt = params.getReportType () == "Protein";
		sresKeepReplicates = params.getPeptideFilter () == "Keep Replicates" || sresTime;
		sresKeepCharges = params.getPeptideFilter () == "Best Per Charge";
		sresKeepTimeReplicates = params.getPeptideFilter () == "Keep Replicates";
		sresViewer = params.getSaveFormat () == 'V';
		ujm = new UpdatingJavascriptMessage;
		vector <SearchResults*> searchResults;
		getSearchResults ( params, searchResults );
		writeReport ( params, searchResults );
		delete ujm;
		printProgramInformationHTML ( cout, "Search Compare" );
		ProteinInfo::deleteTempDirs ();
	}
	catch ( runtime_error e ) {
		pList.writeLogError ( e.what () );
	}
	return 0;
}
コード例 #2
0
void saveParams ( ostream& os, ParameterList& paramList )
{
	init_html ( os, "Saving Batch-Tag Parameters" );
	paramList.removeName ( "save_params" );
	ParameterList cookieParamList ( "", false, false );		// Create empty parameter set
	cookieParamList.appendParameters ( paramList );
	//cookieParamList.removeName ( "accession_nums" );
	cookieParamList.removeName ( "data_source" );
	cookieParamList.removeName ( "max_hits" );
	cookieParamList.removeName ( "output_filename" );
	cookieParamList.removeName ( "password" );
	cookieParamList.removeName ( "project_name" );
	cookieParamList.removeName ( "report_title" );
	cookieParamList.removeName ( "script_filename" );
	cookieParamList.removeName ( "search_name" );
	cookieParamList.removeName ( "upload_data_filename" );
	cookieParamList.removeName ( "upload_data_filepath" );
	cookieParamList.removeName ( "user" );
	cookieParamList.removeName ( "version" );
	if ( paramList.getStringValue ( "data_source" ) == "List of Files" )	// Batch-Tag rather than Batch-Tag Web
		cookieParamList.removeName ( "instrument_name" );
	else
		genUnlink ( paramList.getStringValue ( "upload_data_filepath" ) );	// Delete any uploaded file 
	bool ret = cookieParamList.copyToCookie ( os, "batchtag_params" );
	if ( !ret ) {
		ErrorHandler::genError ()->error ( "Could not save the parameters as their length exceeds the maximum cookie length.\n" );
	}
	os << "<p>Settings saved</p>" << endl;
	os << "<input type=\"button\" value=\"Search Form\" onclick=\"history.go(-1)\">" << endl;
}
コード例 #3
0
void batchSubmission ( ostream& os, ParameterList& paramList )
{
	init_html ( os, "Batch Submission" );
	if ( paramList.empty () ) {
		ErrorHandler::genError ()->error ( "No parameters passed to Prospector program.\n" );
	}
	string user = paramList.getStringValue ( "user" );
	os << "<p>Creating Prospector files.</p>" << endl;
	string searchKey = genRandomString ( 16 );			// Selects a unique string for the search
	string searchName = paramList.getStringValue ( "search_name" );					// Program (eg batchtag)
	string uploadFpath = paramList.getStringValue ( "upload_data_filepath" );	// This is the full path name of the uploaded file as named by PP
	string resultsName = paramList.getStringValue ( "output_filename" );
	bool searchKeyProblem;
	try {
		checkConstantAndVariableModCompatibility ( &paramList );
	}
	catch ( runtime_error e ) {		// Catch database login problems
		genUnlink ( uploadFpath );
		ErrorHandler::genError ()->error ( e );
	}
	try {
		searchKeyProblem = MySQLPPSDDBase::instance ().checkSearchKey ( searchKey );// Checks it is unique
	}
	catch ( runtime_error e ) {		// Catch database login problems
		genUnlink ( uploadFpath );
		ErrorHandler::genError ()->error ( e );
	}
	if ( searchKeyProblem ) {
		genUnlink ( uploadFpath );
		ErrorHandler::genError ()->error ( "Search key not unique.\n" );// The search key has to be unique to carry on.
	}
	if ( resultsName.empty () ) {
		genUnlink ( uploadFpath );
		ErrorHandler::genError ()->error ( "No results name has been chosen.\n" );
	}
	string password;
	bool passwordFlag = paramList.getValue ( "password", password );
	UserInfo* userInfo = MySQLPPSDDBase::instance ().getUserInfo ( user );
	if ( !userInfo || ( passwordFlag && userInfo->getPassword () != password ) ) {													// Get the user information
		genUnlink ( uploadFpath );
		ErrorHandler::genError ()->error ( "Unknown user and/or password.\n" );
	}
	if ( user == "root" ) {													// Get the user information
		genUnlink ( uploadFpath );
		ErrorHandler::genError ()->error ( "Root user can't do searches.\n" );
	}
	if ( userInfo->getIsGuest () ) {
		genUnlink ( uploadFpath );
		ErrorHandler::genError ()->error ( "Guest users can't do searches.\n" );
	}
	if ( !InfoParams::instance ().getBoolValue ( "btag_daemon_remote" ) ) {
		try {
			startDaemonIfNecessary ();
		}
		catch ( runtime_error e ) {
			genUnlink ( uploadFpath );
			ErrorHandler::genError ()->error ( e );
		}
	}
	string userID = userInfo->getUserID ();
	Repository* reposit = new UserRepository ( searchName, userInfo->getDirectoryName () );	// Where to put files given a user. Also creates the directories.
	string projectName;
	if ( uploadFpath.empty () ) {		// The project already exists
		projectName = paramList.getStringValue ( "project_name" );	// From a form with a project name option.
	}
	else {
		string uploadFname = paramList.getStringValue ( "upload_data_filename" );	// This is the original file name.
		string instrument = paramList.getStringValue ( "instrument_name" );
		uploadFname = genFilenameFromPath ( uploadFname );						// IE gives the full path whereas Mozilla give the filename (what we want)
		projectName = getProjectName ( uploadFname );	// The project is named after the uploaded file. This has to be unique.
		if ( projectName.length () > 58 ) {
			genUnlink ( uploadFpath );
			ErrorHandler::genError ()->error ( "The project name " + projectName + " is too long.\n" );
		}
		if ( MySQLPPSDDBase::instance ().checkProject ( userID, projectName ) ) {
			genUnlink ( uploadFpath );
			ErrorHandler::genError ()->error ( "Project already exists.\n" );
		}
		paramList.setValue ( "data_source", "List of Files" );
		paramList.setValue ( "project_name", projectName );
		paramList.removeName ( "upload_data_filename" );
		paramList.removeName ( "upload_data_filepath" );
		string uploadName = genPreprocessFile ( uploadFpath );
		if ( uploadName == uploadFpath || isCompressedUpload ( uploadName ) ) {		// If the file hasn't been preprocessed or it has just been uncompressed it must be a single file
			string shortName = genShortFilenameFromPath ( uploadName );
			string newDir = genDirectoryFromPath ( uploadName ) + SLASH + shortName;
			if ( newDir == uploadName ) {
				newDir += "_1";
			}
			genCreateDirectory ( newDir );
			string newUploadName;
			if ( isCompressedUpload ( uploadName ) )
				newUploadName = newDir + SLASH + genShortFilenameFromPath ( uploadFname );
			else
				newUploadName = newDir + SLASH + uploadFname;
			genRename ( uploadName, newUploadName );
			uploadName = newDir;
		}
		PPProject ppp ( userInfo->getMaxMSMSSpectra (), userInfo->getAllowRaw (), projectName, uploadName, searchKey, reposit, MSMSDataSetInfo::setChargeRange ( &paramList ) );
		if ( ppp.initialised () ) {
			int err = genRename ( uploadName, reposit->getFullDataPath () + SLASH + searchKey );
			if ( err ) {
				genUnlink ( uploadName );
				string e = gen_itoa ( err );
				ErrorHandler::genError ()->error ( "Failed to move uploaded file to repository.\nError code = " + e + "\n" );
			}
			ppp.createProjectFile ( reposit->getFullProjectPath () + SLASH + projectName + ".xml" );
			string projectPath = reposit->getProjectPath ();
			MySQLPPSDDBase::instance ().submitProject ( userID, projectName, projectName + ".xml", reposit->getProjectPath (), instrument );
		}
		else {
			string err = ppp.getErrMessage ();
			if ( ppp.getDeleteFlag () ) {		// Known error - delete the upload directory
				genUnlinkDirectory ( uploadName );
			}
			if ( err.empty () )
				ErrorHandler::genError ()->error ( "Upload file has an invalid format.\n" );
			else
				ErrorHandler::genError ()->error ( err + "\n" );
		}
	}
	paramList.removeName ( "user" );
	paramList.removeName ( "password" );
	paramList.removeName ( "project_name" );
	paramList.removeName ( "output_filename" );					// Search results file.
	paramList.removeName ( "msms_mod_AA_list" );				// These options are used to load the variable mods
	paramList.removeName ( "msms_mod_AA_types" );				// and shouldn't be saved.
	paramList.removeName ( "mod_AA_limit" );
	paramList.removeName ( "mod_AA_file" );
	paramList.removeName ( "motif_offset" );
	paramList.removeName ( "motif" );
	string projectID = MySQLPPSDDBase::instance ().getProjectID ( userID, projectName );
	if ( projectID.empty () ) {
		genUnlink ( uploadFpath );
		ErrorHandler::genError ()->error ( "Project doesn't exist.\n" );
	}
	if ( MySQLPPSDDBase::instance ().checkResults ( userID, projectID, resultsName ) ) {
		genUnlink ( uploadFpath );
		ErrorHandler::genError ()->error ( "Results file of this name already exists for this project.\n" );
	}
	paramList.XMLParameterFile ( reposit->getFullResultsPath () + SLASH + searchKey + ".xml" );	// This is the search parameter file
	MySQLPPSDDBase::instance ().submitSearch ( searchKey, projectID, resultsName, searchKey + ".xml", reposit->getResultsPath () );
	MySQLPPSDDBase::instance ().updateProjectRecordUpdated ( projectID );

	genSleep ( 5000 );
	ParameterList pList ( "jobStatus", false, false, false, false, false );
	pList.addName ( "search_key", searchKey );
	refreshJavascript ( os, 0, pList.getURL (), true );
}