1 /* $Id: names.cpp 591152 2019-08-12 11:18:21Z fongah2 $
2 * ===========================================================================
3 *
4 * PUBLIC DOMAIN NOTICE
5 * National Center for Biotechnology Information
6 *
7 * This software/database is a "United States Government Work" under the
8 * terms of the United States Copyright Act. It was written as part of
9 * the author's official duties as a United States Government employee and
10 * thus cannot be copyrighted. This software/database is freely available
11 * to the public for use. The National Library of Medicine and the U.S.
12 * Government have not placed any restriction on its use or reproduction.
13 *
14 * Although all reasonable efforts have been taken to ensure the accuracy
15 * and reliability of the software and data, the NLM and the U.S.
16 * Government do not and cannot warrant the performance or results that
17 * may be obtained by using this software or data. The NLM and the U.S.
18 * Government disclaim all warranties, express or implied, including
19 * warranties of performance, merchantability or fitness for any particular
20 * purpose.
21 *
22 * Please cite the author in any work or product based on this material.
23 *
24 * ===========================================================================
25 *
26 * Author: Kevin Bealer
27 *
28 * File Description:
29 * Define names and value types for options known to blast4.
30 *
31 */
32
33 #include <ncbi_pch.hpp>
34 #include <objects/blast/names.hpp>
35 #include <objects/blast/blast__.hpp>
36 #include <objects/scoremat/scoremat__.hpp>
37 #include <corelib/ncbimtx.hpp>
38
39 BEGIN_NCBI_SCOPE
40
41 BEGIN_objects_SCOPE // namespace ncbi::objects::
42
43 CBlast4Field::TFieldMap CBlast4Field::m_Fields;
Get(EBlastOptIdx opt)44 CBlast4Field & CBlast4Field::Get(EBlastOptIdx opt)
45 {
46 {
47 DEFINE_STATIC_MUTEX(mx);
48 CMutexGuard guard(mx);
49 if (m_Fields.count(opt) == 0) {
50 switch (opt) {
51 //case eBlastOpt_Program:
52 case eBlastOpt_WordThreshold:
53 m_Fields[opt] = CBlast4Field("WordThreshold", CBlast4_value::e_Integer);
54 break;
55 //case eBlastOpt_LookupTableType: // not found
56 case eBlastOpt_WordSize:
57 m_Fields[opt] = CBlast4Field("WordSize", CBlast4_value::e_Integer);
58 break;
59 //case eBlastOpt_AlphabetSize: //not found
60 case eBlastOpt_MBTemplateLength:
61 m_Fields[opt] = CBlast4Field("MBTemplateLength", CBlast4_value::e_Integer);
62 break;
63 case eBlastOpt_MBTemplateType:
64 m_Fields[opt] = CBlast4Field("MBTemplateType", CBlast4_value::e_Integer);
65 break;
66 case eBlastOpt_FilterString:
67 m_Fields[opt] = CBlast4Field("FilterString", CBlast4_value::e_String);
68 break;
69 case eBlastOpt_MaskAtHash:
70 m_Fields[opt] = CBlast4Field("MaskAtHash", CBlast4_value::e_Boolean);
71 break;
72 case eBlastOpt_DustFiltering:
73 m_Fields[opt] = CBlast4Field("DustFiltering", CBlast4_value::e_Boolean);
74 break;
75 case eBlastOpt_DustFilteringLevel:
76 m_Fields[opt] = CBlast4Field("DustFilteringLevel", CBlast4_value::e_Integer);
77 break;
78 case eBlastOpt_DustFilteringWindow:
79 m_Fields[opt] = CBlast4Field("DustFilteringWindow", CBlast4_value::e_Integer);
80 break;
81 case eBlastOpt_DustFilteringLinker:
82 m_Fields[opt] = CBlast4Field("DustFilteringLinker", CBlast4_value::e_Integer);
83 break;
84 case eBlastOpt_SegFiltering:
85 m_Fields[opt] = CBlast4Field("SegFiltering", CBlast4_value::e_Boolean);
86 break;
87 case eBlastOpt_SegFilteringWindow:
88 m_Fields[opt] = CBlast4Field("SegFilteringWindow", CBlast4_value::e_Integer);
89 break;
90 case eBlastOpt_SegFilteringLocut:
91 m_Fields[opt] = CBlast4Field("SegFilteringLocut", CBlast4_value::e_Real);
92 break;
93 case eBlastOpt_SegFilteringHicut:
94 m_Fields[opt] = CBlast4Field("SegFilteringHicut", CBlast4_value::e_Real);
95 break;
96 case eBlastOpt_RepeatFiltering:
97 m_Fields[opt] = CBlast4Field("RepeatFiltering", CBlast4_value::e_Boolean);
98 break;
99 case eBlastOpt_RepeatFilteringDB:
100 m_Fields[opt] = CBlast4Field("RepeatFilteringDB", CBlast4_value::e_String);
101 break;
102 case eBlastOpt_StrandOption:
103 m_Fields[opt] = CBlast4Field("StrandOption", CBlast4_value::e_Strand_type);
104 break;
105 case eBlastOpt_QueryGeneticCode:
106 m_Fields[opt] = CBlast4Field("QueryGeneticCode", CBlast4_value::e_Integer);
107 break;
108 case eBlastOpt_WindowSize:
109 m_Fields[opt] = CBlast4Field("WindowSize", CBlast4_value::e_Integer);
110 break;
111 //case eBlastOpt_SeedContainerType: // not found
112 //case eBlastOpt_SeedExtensionMethod: // not found
113 //case eBlastOpt_XDropoff: //not found
114 case eBlastOpt_GapXDropoff:
115 m_Fields[opt] = CBlast4Field("GapXDropoff", CBlast4_value::e_Real);
116 break;
117 case eBlastOpt_GapXDropoffFinal:
118 m_Fields[opt] = CBlast4Field("GapXDropoffFinal", CBlast4_value::e_Real);
119 break;
120 case eBlastOpt_GapTrigger:
121 m_Fields[opt] = CBlast4Field("GapTrigger", CBlast4_value::e_Real);
122 break;
123 case eBlastOpt_GapExtnAlgorithm:
124 m_Fields[opt] = CBlast4Field("GapExtnAlgorithm", CBlast4_value::e_Integer);
125 break;
126 case eBlastOpt_HitlistSize:
127 m_Fields[opt] = CBlast4Field("HitlistSize", CBlast4_value::e_Integer);
128 //case eBlastOpt_MaxNumHspPerSequence: // not found
129 break;
130 case eBlastOpt_CullingLimit:
131 m_Fields[opt] = CBlast4Field("Culling", CBlast4_value::e_Integer);
132 break;
133 case eBlastOpt_EvalueThreshold:
134 m_Fields[opt] = CBlast4Field("EvalueThreshold", CBlast4_value::e_Cutoff);
135 break;
136 case eBlastOpt_CutoffScore:
137 m_Fields[opt] = CBlast4Field("CutoffScore", CBlast4_value::e_Cutoff);
138 break;
139 case eBlastOpt_PercentIdentity:
140 m_Fields[opt] = CBlast4Field("PercentIdentity", CBlast4_value::e_Real);
141 break;
142 case eBlastOpt_QueryCovHspPerc:
143 m_Fields[opt] = CBlast4Field("QueryCovHspPerc", CBlast4_value::e_Real);
144 break;
145 case eBlastOpt_MaxHspsPerSubject:
146 m_Fields[opt] = CBlast4Field("MaxHspsPerSubject", CBlast4_value::e_Integer);
147 break;
148 case eBlastOpt_SumStatisticsMode:
149 m_Fields[opt] = CBlast4Field("SumStatistics", CBlast4_value::e_Boolean);
150 break;
151 case eBlastOpt_LongestIntronLength:
152 m_Fields[opt] = CBlast4Field("LongestIntronLength", CBlast4_value::e_Integer);
153 break;
154 case eBlastOpt_GappedMode: // same as !ungapped mode
155 m_Fields[opt] = CBlast4Field("UngappedMode", CBlast4_value::e_Boolean);
156 break;
157 case eBlastOpt_ComplexityAdjMode: // -RMH-
158 m_Fields[opt] = CBlast4Field("ComplexityAdjustMode", CBlast4_value::e_Boolean);
159 break;
160 case eBlastOpt_MaskLevel: // -RMH-
161 m_Fields[opt] = CBlast4Field("MaskLevel", CBlast4_value::e_Integer);
162 break;
163 case eBlastOpt_MatrixName:
164 m_Fields[opt] = CBlast4Field("MatrixName", CBlast4_value::e_String);
165 break;
166 //case eBlastOpt_MatrixPath: // not found
167 case eBlastOpt_MatchReward:
168 m_Fields[opt] = CBlast4Field("MatchReward", CBlast4_value::e_Integer);
169 break;
170 case eBlastOpt_MismatchPenalty:
171 m_Fields[opt] = CBlast4Field("MismatchPenalty", CBlast4_value::e_Integer);
172 break;
173 case eBlastOpt_GapOpeningCost:
174 m_Fields[opt] = CBlast4Field("GapOpeningCost", CBlast4_value::e_Integer);
175 break;
176 case eBlastOpt_GapExtensionCost:
177 m_Fields[opt] = CBlast4Field("GapExtensionCost", CBlast4_value::e_Integer);
178 break;
179 //case eBlastOpt_FrameShiftPenalty: // not found
180 case eBlastOpt_OutOfFrameMode:
181 m_Fields[opt] = CBlast4Field("OutOfFrameMode", CBlast4_value::e_Boolean);
182 break;
183 case eBlastOpt_DbLength:
184 m_Fields[opt] = CBlast4Field("DbLength", CBlast4_value::e_Big_integer);
185 break;
186 //case eBlastOpt_DbSeqNum: // not found
187 case eBlastOpt_EffectiveSearchSpace:
188 m_Fields[opt] = CBlast4Field("EffectiveSearchSpace", CBlast4_value::e_Big_integer);
189 break;
190 case eBlastOpt_DbGeneticCode:
191 m_Fields[opt] = CBlast4Field("DbGeneticCode", CBlast4_value::e_Integer);
192 break;
193 case eBlastOpt_PHIPattern:
194 m_Fields[opt] = CBlast4Field("PHIPattern", CBlast4_value::e_String);
195 break;
196 case eBlastOpt_InclusionThreshold:
197 m_Fields[opt] = CBlast4Field("InclusionThreshold", CBlast4_value::e_Real);
198 break;
199 case eBlastOpt_PseudoCount:
200 m_Fields[opt] = CBlast4Field("PseudoCountWeight", CBlast4_value::e_Integer);
201 break;
202 case eBlastOpt_GapTracebackAlgorithm:
203 m_Fields[opt] = CBlast4Field("GapTracebackAlgorithm", CBlast4_value::e_Integer);
204 break;
205 case eBlastOpt_CompositionBasedStats:
206 m_Fields[opt] = CBlast4Field("CompositionBasedStats", CBlast4_value::e_Integer);
207 break;
208 case eBlastOpt_SmithWatermanMode:
209 m_Fields[opt] = CBlast4Field("SmithWatermanMode", CBlast4_value::e_Boolean);
210 break;
211 case eBlastOpt_UnifiedP:
212 m_Fields[opt] = CBlast4Field("UnifiedP", CBlast4_value::e_Integer);
213 break;
214 case eBlastOpt_WindowMaskerDatabase:
215 m_Fields[opt] = CBlast4Field("WindowMaskerDatabase", CBlast4_value::e_String);
216 break;
217 case eBlastOpt_WindowMaskerTaxId:
218 m_Fields[opt] = CBlast4Field("WindowMaskerTaxId", CBlast4_value::e_Integer);
219 break;
220 case eBlastOpt_ForceMbIndex: // corresponds to -use_index flag
221 m_Fields[opt] = CBlast4Field("ForceMbIndex", CBlast4_value::e_Boolean);
222 break;
223 case eBlastOpt_MbIndexName: // corresponds to -index_name flag
224 m_Fields[opt] = CBlast4Field("MbIndexName", CBlast4_value::e_String);
225 break;
226 case eBlastOpt_BestHitScoreEdge:
227 m_Fields[opt] = CBlast4Field("BestHitScoreEdge", CBlast4_value::e_Real);
228 break;
229 case eBlastOpt_BestHitOverhang:
230 m_Fields[opt] = CBlast4Field("BestHitOverhang", CBlast4_value::e_Real);
231 break;
232 case eBlastOpt_SubjectBestHit: // corresponds to -subject_besthit flag
233 m_Fields[opt] = CBlast4Field("UseSubjectBestHit", CBlast4_value::e_Boolean);
234 break;
235 case eBlastOpt_IgnoreMsaMaster:
236 m_Fields[opt] = CBlast4Field("IgnoreMsaMaster", CBlast4_value::e_Boolean);
237 break;
238 case eBlastOpt_DomainInclusionThreshold: // options for DELTA-BLAST
239 m_Fields[opt] = CBlast4Field("DomainInclusionThreshold", CBlast4_value::e_Real);
240 break;
241
242 // Added to provide access to these options, they don't have a usage in
243 case eBlastOpt_Culling:
244 m_Fields[opt] = CBlast4Field("Culling", CBlast4_value::e_Boolean);
245 break;
246 case eBlastOpt_EntrezQuery:
247 m_Fields[opt] = CBlast4Field("EntrezQuery", CBlast4_value::e_String);
248 break;
249 case eBlastOpt_FinalDbSeq:
250 m_Fields[opt] = CBlast4Field("FinalDbSeq", CBlast4_value::e_Integer);
251 break;
252 case eBlastOpt_FirstDbSeq:
253 m_Fields[opt] = CBlast4Field("FirstDbSeq", CBlast4_value::e_Integer);
254 break;
255 case eBlastOpt_GiList:
256 m_Fields[opt] = CBlast4Field("GiList", CBlast4_value::e_Integer_list);
257 break;
258 case eBlastOpt_DbFilteringAlgorithmId:
259 m_Fields[opt] = CBlast4Field("DbFilteringAlgorithmId",CBlast4_value::e_Integer);
260 break;
261 case eBlastOpt_DbFilteringAlgorithmKey:
262 m_Fields[opt] = CBlast4Field("DbFilteringAlgorithmKey",CBlast4_value::e_String);
263 break;
264 case eBlastOpt_SubjectMaskingType:
265 m_Fields[opt] = CBlast4Field("SubjectMaskingType", CBlast4_value::e_Integer);
266 break;
267 case eBlastOpt_HspRangeMax:
268 m_Fields[opt] = CBlast4Field("HspRangeMax", CBlast4_value::e_Integer);
269 break;
270 case eBlastOpt_LCaseMask:
271 m_Fields[opt] = CBlast4Field("LCaseMask", CBlast4_value::e_Query_mask);
272 break;
273 case eBlastOpt_MatrixTable:
274 m_Fields[opt] = CBlast4Field("MatrixTable", CBlast4_value::e_Matrix);
275 break;
276 case eBlastOpt_NegativeGiList:
277 m_Fields[opt] = CBlast4Field("NegativeGiList", CBlast4_value::e_Integer_list);
278 break;
279 case eBlastOpt_RequiredEnd:
280 m_Fields[opt] = CBlast4Field("RequiredEnd", CBlast4_value::e_Integer);
281 break;
282 case eBlastOpt_RequiredStart:
283 m_Fields[opt] = CBlast4Field("RequiredStart", CBlast4_value::e_Integer);
284 break;
285 case eBlastOpt_UseRealDbSize:
286 m_Fields[opt] = CBlast4Field("UseRealDbSize", CBlast4_value::e_Boolean);
287 break;
288 case eBlastOpt_TaxidList:
289 m_Fields[opt] = CBlast4Field("TaxidList", CBlast4_value::e_Integer_list);
290 break;
291 case eBlastOpt_NegativeTaxidList:
292 m_Fields[opt] = CBlast4Field("NegativeTaxidList", CBlast4_value::e_Integer_list);
293 break;
294
295 // List of web-related options
296 case eBlastOpt_Web_BlastSpecialPage:
297 m_Fields[opt] = CBlast4Field("Web_BlastSpecialPage", CBlast4_value::e_String);
298 break;
299 case eBlastOpt_Web_EntrezQuery:
300 m_Fields[opt] = CBlast4Field("Web_EntrezQuery", CBlast4_value::e_String);
301 break;
302 case eBlastOpt_Web_JobTitle:
303 m_Fields[opt] = CBlast4Field("Web_JobTitle", CBlast4_value::e_String);
304 break;
305 case eBlastOpt_Web_NewWindow:
306 m_Fields[opt] = CBlast4Field("Web_NewWindow", CBlast4_value::e_Boolean);
307 break;
308 case eBlastOpt_Web_OrganismName:
309 m_Fields[opt] = CBlast4Field("Web_OrganismName", CBlast4_value::e_String);
310 break;
311 case eBlastOpt_Web_RunPsiBlast:
312 m_Fields[opt] = CBlast4Field("Web_RunPsiBlast", CBlast4_value::e_Boolean);
313 break;
314 case eBlastOpt_Web_ShortQueryAdjust:
315 m_Fields[opt] = CBlast4Field("Web_ShortQueryAdjust", CBlast4_value::e_Boolean);
316 break;
317 case eBlastOpt_Web_StepNumber:
318 m_Fields[opt] = CBlast4Field("Web_StepNumber", CBlast4_value::e_Integer);
319 break;
320 case eBlastOpt_Web_DBInput:
321 m_Fields[opt] = CBlast4Field("Web_DBInput", CBlast4_value::e_Boolean);
322 break;
323 case eBlastOpt_Web_DBGroup:
324 m_Fields[opt] = CBlast4Field("Web_DBGroup", CBlast4_value::e_String);
325 break;
326 case eBlastOpt_Web_DBSubgroupName:
327 m_Fields[opt] = CBlast4Field("Web_DBSubgroupName", CBlast4_value::e_String);
328 break;
329 case eBlastOpt_Web_DBSubgroup:
330 m_Fields[opt] = CBlast4Field("Web_DBSubgroup", CBlast4_value::e_String);
331 break;
332 case eBlastOpt_Web_ExclModels:
333 m_Fields[opt] = CBlast4Field("Web_ExclModels", CBlast4_value::e_Boolean);
334 break;
335 case eBlastOpt_Web_ExclSeqUncult:
336 m_Fields[opt] = CBlast4Field("Web_SeqUncult", CBlast4_value::e_Boolean);
337 break;
338
339 default:
340 ERR_POST(Warning << "Undefined remote BLAST options used");
341 m_Fields[opt] = CBlast4Field("-", CBlast4_value::e_not_set);
342 break;
343 }
344 }
345 }
346 _ASSERT(m_Fields.count(opt) != 0);
347 return m_Fields[opt];
348 }
349
GetName(EBlastOptIdx opt)350 const string & CBlast4Field::GetName(EBlastOptIdx opt)
351 {
352 return CBlast4Field::Get(opt).GetName();
353 }
354
GetName() const355 const string & CBlast4Field::GetName() const
356 {
357 return m_Name;
358 }
359
GetType() const360 CBlast4_value::E_Choice CBlast4Field::GetType() const
361 {
362 return m_Type;
363 }
364
Match(const CBlast4_parameter & p) const365 bool CBlast4Field::Match(const CBlast4_parameter & p) const
366 {
367 return (p.CanGetName() &&
368 p.CanGetValue() &&
369 p.GetValue().Which() == m_Type &&
370 p.GetName() == m_Name);
371 }
372
GetString(const CBlast4_parameter & p) const373 string CBlast4Field::GetString(const CBlast4_parameter & p) const
374 {
375 _ASSERT(Match(p));
376 return p.GetValue().GetString();
377 }
378
GetBoolean(const CBlast4_parameter & p) const379 bool CBlast4Field::GetBoolean(const CBlast4_parameter & p) const
380 {
381 _ASSERT(Match(p));
382 return p.GetValue().GetBoolean();
383 }
384
GetBig_integer(const CBlast4_parameter & p) const385 Int8 CBlast4Field::GetBig_integer(const CBlast4_parameter & p) const
386 {
387 _ASSERT(Match(p));
388 return p.GetValue().GetBig_integer();
389 }
390
391 CConstRef<CBlast4_cutoff>
GetCutoff(const CBlast4_parameter & p) const392 CBlast4Field::GetCutoff(const CBlast4_parameter & p) const
393 {
394 _ASSERT(Match(p));
395 return CConstRef<CBlast4_cutoff>(& p.GetValue().GetCutoff());
396 }
397
GetInteger(const CBlast4_parameter & p) const398 int CBlast4Field::GetInteger(const CBlast4_parameter & p) const
399 {
400 _ASSERT(Match(p));
401 return p.GetValue().GetInteger();
402 }
403
GetIntegerList(const CBlast4_parameter & p) const404 list<int> CBlast4Field::GetIntegerList (const CBlast4_parameter & p) const
405 {
406 _ASSERT(Match(p));
407 return p.GetValue().GetInteger_list();
408 }
409
410 CConstRef<CPssmWithParameters>
GetMatrix(const CBlast4_parameter & p) const411 CBlast4Field::GetMatrix(const CBlast4_parameter & p) const
412 {
413 _ASSERT(Match(p));
414 return CConstRef<CPssmWithParameters>(& p.GetValue().GetMatrix());
415 }
416
417 CConstRef<CBlast4_mask>
GetQueryMask(const CBlast4_parameter & p) const418 CBlast4Field::GetQueryMask(const CBlast4_parameter & p) const
419 {
420 _ASSERT(Match(p));
421 return CConstRef<CBlast4_mask>(& p.GetValue().GetQuery_mask());
422 }
423
GetReal(const CBlast4_parameter & p) const424 double CBlast4Field::GetReal(const CBlast4_parameter & p) const
425 {
426 _ASSERT(Match(p));
427 return p.GetValue().GetReal();
428 }
429
430 EBlast4_strand_type
GetStrandType(const CBlast4_parameter & p) const431 CBlast4Field::GetStrandType(const CBlast4_parameter & p) const
432 {
433 _ASSERT(Match(p));
434 return p.GetValue().GetStrand_type();
435 }
436
437 const char* kBlast4SearchInfoReqName_Search("search");
438 const char* kBlast4SearchInfoReqName_Alignment("alignment");
439 const char* kBlast4SearchInfoReqValue_Status("status");
440 const char* kBlast4SearchInfoReqValue_Title("title");
441 const char* kBlast4SearchInfoReqValue_Subjects("subjects");
442 const char* kBlast4SearchInfoReqValue_PsiIterationNum("psi_iteration_number");
443
444 /// Auxiliary function to consistently build the Blast4-get-search-info-reply
445 /// names
Blast4SearchInfo_BuildReplyName(const string & name,const string & value)446 string Blast4SearchInfo_BuildReplyName(const string& name, const string& value)
447 {
448 return name + string("-") + value;
449 }
450
451 END_objects_SCOPE // namespace ncbi::objects::
452
453 END_NCBI_SCOPE
454