Re: [Seqan-dev] Scoring mit Blosum62


Am Montag, 24. August 2009 11:13:47 schrieb David Weese:
> Hallo Hannes,
>
> bin jetzt wieder zurück. Der Fehler unten kommt von unterschiedlichen
> Typen (verschiedene TSpecs) deiner Score-Objekte blastNScoring und
> blastPScoring, die nicht ineinander konvertiert werden können.
> Versuch den Einzeiler in 2 Zeilen zu schreiben, dann sollte es gehen.

Hm, das hatte ich schon ausprobiert, weil ich dann auch dachte, dass der 
zwei Aufrufe braucht, da die Argumente vielleicht zu zwei 
unterschiedlichen Funktionen auflösen. Hatte das wohl aber nur an einer 
Stelle ersetzt... jetzt gehts, danke.


Hast du dir bezüglich der lokal-global-Frage schon Gedanken gemacht?


Ansonsten habe ich noch ein kleineres Compile-Problem gerade, was 
irgendwie nicht sehr verständlich ist. Ich hab bei dem 
Vergleichsoperator noch einen Vergleich eingebaut um nach e-Value zu 
sortieren, siehe unten. Dazu bekomme ich:

razers_withBlast.h:631: error: `.' cannot appear in a constant-
expression
razers_withBlast.h:631: error: parse error in template argument list

Danke!

Gruß,
Hannes



template <typename TReadMatch>
struct LessRNoGPos : public ::std::binary_function < TReadMatch, 
TReadMatch, bool >
{
   inline bool operator() (TReadMatch const &a, TReadMatch const &b) 
const
   {
	// read number
	if (a.rseqNo < b.rseqNo) return true;
	if (a.rseqNo > b.rseqNo) return false;

	#ifdef RAZERS_BLAST
        // evalue
        if (a.eValue < b.eValue) return true;
        if (a.eValue > b.eValue) return false;
	#endif
	// genome position and orientation
	if (a.gseqNo < b.gseqNo) return true;
	if (a.gseqNo > b.gseqNo) return false;
	if (a.gBegin < b.gBegin) return true;
	if (a.gBegin > b.gBegin) return false;
	if (a.orientation < b.orientation) return true;
	if (a.orientation > b.orientation) return false;
	// quality
	#ifdef RAZERS_MATEPAIRS
	return a.pairScore > b.pairScore;
	#else
	return a.editDist < b.editDist;
	#endif
   }
};