int PSICreatePssmFromFrequencyRatios(const Uint1* query, Uint4 query_length, BlastScoreBlk* sbp, double** freq_ratios, double impala_scaling_factor, PSIMatrix** pssm) { int status = PSI_SUCCESS; double* std_prob = NULL; _PSIInternalPssmData* internal_pssm = NULL; std_prob = BLAST_GetStandardAaProbabilities(); *pssm = PSIMatrixNew(query_length, (Uint4) sbp->alphabet_size); internal_pssm = _PSIInternalPssmDataNew(query_length, sbp->alphabet_size); if ( !std_prob || !*pssm || !internal_pssm ) { s_PSICreatePssmFromFrequencyRatiosCleanUp(pssm, internal_pssm, std_prob); return PSIERR_OUTOFMEM; } _PSICopyMatrix_double(internal_pssm->freq_ratios, freq_ratios, internal_pssm->ncols, internal_pssm->nrows); status = _PSICreateAndScalePssmFromFrequencyRatios(internal_pssm, query, query_length, std_prob, sbp, impala_scaling_factor); if (status != PSI_SUCCESS) { s_PSICreatePssmFromFrequencyRatiosCleanUp(pssm, internal_pssm, std_prob); return status; } /*** Save the pssm outgoing parameter ***/ s_PSISavePssm(internal_pssm, sbp, *pssm); s_PSICreatePssmFromFrequencyRatiosCleanUp(NULL, internal_pssm, std_prob); return status; }
Kappa_compactSearchItems* Kappa_compactSearchItemsNew(const Uint1* query, unsigned int queryLength, BlastScoreBlk* sbp) { Kappa_compactSearchItems* retval = NULL; ASSERT(sbp); ASSERT(query); retval = (Kappa_compactSearchItems*) calloc(1, sizeof(Kappa_compactSearchItems)); if ( !retval ) { return NULL; } retval->standardProb = BLAST_GetStandardAaProbabilities(); if ( !retval->standardProb ) { return Kappa_compactSearchItemsFree(retval); } ASSERT(sbp->alphabet_code == BLASTAA_SEQ_CODE); ASSERT(sbp->protein_alphabet == TRUE); ASSERT(sbp->alphabet_size == BLASTAA_SIZE); ASSERT(sbp->matrix); retval->query = (Uint1*) query; retval->qlength = queryLength; retval->alphabetSize = BLASTAA_SIZE; retval->matrix = sbp->matrix->data; retval->kbp_std = sbp->kbp_std; retval->kbp_psi = sbp->kbp_psi; retval->kbp_gap_std = sbp->kbp_gap_std; retval->kbp_gap_psi = sbp->kbp_gap_psi; retval->lambda_ideal = sbp->kbp_ideal->Lambda; retval->K_ideal = sbp->kbp_ideal->K; return retval; }
double GetStandardProbability(char ch) { typedef map < char, double > CharDoubleMap; static CharDoubleMap standardProbabilities; if (standardProbabilities.size() == 0) { // initialize static stuff if (BLASTAA_SIZE != 28) { ERROR_MESSAGE("GetStandardProbability() - confused by BLASTAA_SIZE != 28"); return 0.0; } double *probs = BLAST_GetStandardAaProbabilities(); for (unsigned int i=0; i<28; ++i) { standardProbabilities[LookupCharacterFromNCBIStdaaNumber(i)] = probs[i]; // TRACE_MESSAGE("standard probability " << LookupCharacterFromNCBIStdaaNumber(i) << " : " << probs[i]); } sfree(probs); } CharDoubleMap::const_iterator f = standardProbabilities.find(toupper((unsigned char) ch)); if (f != standardProbabilities.end()) return f->second; WARNING_MESSAGE("GetStandardProbability() - unknown residue character " << ch); return 0.0; }