本文整理汇总了C++中Sequence::getName方法的典型用法代码示例。如果您正苦于以下问题:C++ Sequence::getName方法的具体用法?C++ Sequence::getName怎么用?C++ Sequence::getName使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Sequence
的用法示例。
在下文中一共展示了Sequence::getName方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: stripQualThreshold
bool QualityScores::stripQualThreshold(Sequence& sequence, double qThreshold){
try {
string rawSequence = sequence.getUnaligned();
int seqLength = sequence.getNumBases();
if(seqName != sequence.getName()){
m->mothurOut("sequence name mismatch btwn fasta: " + sequence.getName() + " and qual file: " + seqName);
m->mothurOutEndLine();
}
int end;
for(int i=0;i<seqLength;i++){
end = i;
if(qScores[i] < qThreshold){
break;
}
}
//every score passed
if (end == (seqLength-1)) { end = seqLength; }
sequence.setUnaligned(rawSequence.substr(0,end));
trimQScores(-1, end);
return 1;
}
catch(exception& e) {
m->errorOut(e, "QualityScores", "flipQScores");
exit(1);
}
}
示例2: convertQual
FastqRead::FastqRead(Sequence s, QualityScores q, string f) {
try {
m = MothurOut::getInstance(); format = f;
//fill convert table - goes from solexa to sanger. Used fq_all2std.pl as a reference.
for (int i = -64; i < 65; i++) {
char temp = (char) ((int)(33 + 10*log(1+pow(10,(i/10.0)))/log(10)+0.499));
convertTable.push_back(temp);
convertBackTable.push_back(((int)(33 + 10*log(1+pow(10,(i/10.0)))/log(10)+0.499)));
}
if (s.getName() != q.getName()) { m->mothurOut("[ERROR]: sequence name does not match quality score name. Cannot construct fastq object.\n"); m->control_pressed = true; }
else {
name = s.getName();
comment = s.getComment();
sequence = s.getUnaligned();
scores = q.getScores();
scoreString = convertQual(scores);
}
}
catch(exception& e) {
m->errorOut(e, "FastqRead", "FastqRead");
exit(1);
}
}
示例3: driverMPI
int ChimeraPintailCommand::driverMPI(int start, int num, MPI_File& inMPI, MPI_File& outMPI, MPI_File& outAccMPI, vector<unsigned long long>& MPIPos){
try {
MPI_Status status;
int pid;
MPI_Comm_rank(MPI_COMM_WORLD, &pid); //find out who we are
for(int i=0;i<num;i++){
if (m->control_pressed) { return 1; }
//read next sequence
int length = MPIPos[start+i+1] - MPIPos[start+i];
char* buf4 = new char[length];
MPI_File_read_at(inMPI, MPIPos[start+i], buf4, length, MPI_CHAR, &status);
string tempBuf = buf4;
if (tempBuf.length() > length) { tempBuf = tempBuf.substr(0, length); }
istringstream iss (tempBuf,istringstream::in);
delete buf4;
Sequence* candidateSeq = new Sequence(iss); m->gobble(iss);
if (candidateSeq->getName() != "") { //incase there is a commented sequence at the end of a file
if (candidateSeq->getAligned().length() != templateSeqsLength) { //chimeracheck does not require seqs to be aligned
m->mothurOut(candidateSeq->getName() + " is not the same length as the template sequences. Skipping."); m->mothurOutEndLine();
}else{
//find chimeras
chimera->getChimeras(candidateSeq);
if (m->control_pressed) { delete candidateSeq; return 1; }
//print results
chimera->print(outMPI, outAccMPI);
}
}
delete candidateSeq;
//report progress
if((i+1) % 100 == 0){ cout << "Processing sequence: " << (i+1) << endl; }
}
//report progress
if(num % 100 != 0){ cout << "Processing sequence: " << num << endl; }
return 0;
}
catch(exception& e) {
m->errorOut(e, "ChimeraPintailCommand", "driverMPI");
exit(1);
}
}
示例4: stripQualWindowAverage
bool QualityScores::stripQualWindowAverage(Sequence& sequence, int stepSize, int windowSize, double qThreshold){
try {
string rawSequence = sequence.getUnaligned();
int seqLength = sequence.getNumBases();
if(seqName != sequence.getName()){
m->mothurOut("sequence name mismatch between fasta: " + sequence.getName() + " and qual file: " + seqName);
m->mothurOutEndLine();
}
int end = windowSize;
int start = 0;
if(seqLength < windowSize) { return 0; }
while((start+windowSize) < seqLength){
double windowSum = 0.0000;
for(int i=start;i<end;i++){
windowSum += qScores[i];
}
double windowAverage = windowSum / (double)(end-start);
if(windowAverage < qThreshold){
end = end - stepSize;
break;
}
start += stepSize;
end = start + windowSize;
if(end >= seqLength){ end = seqLength; }
}
if(end == -1){ end = seqLength; }
//failed first window
if (end < windowSize) { return 0; }
sequence.setUnaligned(rawSequence.substr(0,end));
trimQScores(-1, end);
return 1;
}
catch(exception& e) {
m->errorOut(e, "QualityScores", "stripQualWindowAverage");
exit(1);
}
}
示例5: getPutativeHaplotypes
void SequenceTools::getPutativeHaplotypes(const Sequence& seq, std::vector<Sequence*>& hap, unsigned int level)
{
vector< vector< int > > states(seq.size());
list<Sequence*> t_hap;
const Alphabet* alpha = seq.getAlphabet();
unsigned int hap_count = 1;
// Vector of available states at each position
for (size_t i = 0; i < seq.size(); i++)
{
vector<int> st = alpha->getAlias(seq[i]);
if (!st.size())
{
st.push_back(alpha->getGapCharacterCode());
}
if (st.size() <= level)
{
states[i] = st;
}
else
{
states[i] = vector<int>(1, seq[i]);
}
}
// Combinatorial haplotypes building (the use of tree may be more accurate)
t_hap.push_back(new BasicSequence(seq.getName() + "_hap" + TextTools::toString(hap_count++), "", alpha));
for (size_t i = 0; i < states.size(); i++)
{
for (list<Sequence*>::iterator it = t_hap.begin(); it != t_hap.end(); it++)
{
for (unsigned int j = 0; j < states[i].size(); j++)
{
Sequence* tmp_seq = new BasicSequence(seq.getName() + "_hap", (**it).getContent(), alpha);
if (j < states[i].size() - 1)
{
tmp_seq->setName(tmp_seq->getName() + TextTools::toString(hap_count++));
tmp_seq->addElement(states[i][j]);
t_hap.insert(it, tmp_seq);
}
else
{
(**it).addElement(states[i][j]);
}
}
}
}
for (list<Sequence*>::reverse_iterator it = t_hap.rbegin(); it != t_hap.rend(); it++)
{
hap.push_back(*it);
}
}
示例6: getOrfs
unsigned int SequenceFeatureTools::getOrfs(const Sequence& seq, SequenceFeatureSet& featSet, const GeneticCode& gCode)
{
if (! AlphabetTools::isNucleicAlphabet(seq.getAlphabet())) {
throw AlphabetException("SequenceFeatureTools::getOrfs: Sequence alphabet must be nucleic!", seq.getAlphabet());
}
unsigned int orfCpt = 0;
const CodonAlphabet* codonAlpha = gCode.getSourceAlphabet();
std::vector< std::vector<size_t> > starts(3), stops(3);
size_t phase = 0;
for (size_t p = 0 ; p < seq.size() - 2 ; p++) {
phase = p % 3;
if (gCode.isStart(codonAlpha->getCodon(seq.getValue(p), seq.getValue(p + 1), seq.getValue(p + 2)))) {
starts[phase].push_back(p);
//std::cerr << "Start: " << p << " (" << phase << ")" << std::endl;
} else if (gCode.isStop(codonAlpha->getCodon(seq.getValue(p), seq.getValue(p + 1), seq.getValue(p + 2)))) {
stops[phase].push_back(p);
//std::cerr << "Stop: " << p << " (" << phase << ")" << std::endl;
}
}
for (size_t i = 0 ; i < 3 ; ++i) {
std::vector< size_t >::iterator start(starts[i].begin()), stop(stops[i].begin());
while (stop != stops[i].end() && start != starts[i].end()) {
if (*stop < *start) {
stop++;
} else {
orfCpt++;
//std::cerr << "ORF: " << *start << " - " << *stop + 2 << " (" << i << ")" << std::endl;
bpp::BasicSequenceFeature feat("", seq.getName(), "Bio++", "CDS", *start, *stop + 2, '+');
featSet.addFeature(feat);
start++;
}
}
}
return orfCpt;
}
示例7: driver
int ChimeraCheckCommand::driver(linePair* filePos, string outputFName, string filename){
try {
ofstream out;
m->openOutputFile(outputFName, out);
ofstream out2;
ifstream inFASTA;
m->openInputFile(filename, inFASTA);
inFASTA.seekg(filePos->start);
bool done = false;
int count = 0;
while (!done) {
if (m->control_pressed) { return 1; }
Sequence* candidateSeq = new Sequence(inFASTA); m->gobble(inFASTA);
if (candidateSeq->getName() != "") { //incase there is a commented sequence at the end of a file
//find chimeras
chimera->getChimeras(candidateSeq);
if (m->control_pressed) { delete candidateSeq; return 1; }
//print results
chimera->print(out, out2);
count++;
}
delete candidateSeq;
#if defined (__APPLE__) || (__MACH__) || (linux) || (__linux) || (__linux__) || (__unix__) || (__unix)
unsigned long long pos = inFASTA.tellg();
if ((pos == -1) || (pos >= filePos->end)) { break; }
#else
if (inFASTA.eof()) { break; }
#endif
//report progress
if((count) % 100 == 0){ m->mothurOutJustToScreen("Processing sequence: " + toString(count) + "\n"); }
}
//report progress
if((count) % 100 != 0){ m->mothurOutJustToScreen("Processing sequence: " + toString(count) + "\n"); }
out.close();
inFASTA.close();
return count;
}
catch(exception& e) {
m->errorOut(e, "ChimeraCheckCommand", "driver");
exit(1);
}
}
示例8: setSequence
void VectorSiteContainer::setSequence(size_t pos, const Sequence& sequence, bool checkNames)
throw (Exception)
{
if (pos >= getNumberOfSequences())
throw IndexOutOfBoundsException("VectorSiteContainer::setSequence", pos, 0, getNumberOfSequences() - 1);
// New sequence's alphabet and site container's alphabet matching verification
if (sequence.getAlphabet()->getAlphabetType() != getAlphabet()->getAlphabetType())
throw AlphabetMismatchException("VectorSiteContainer::addSite", getAlphabet(), sequence.getAlphabet());
// If the container has only one sequence, we set the size to the size of this sequence:
if (getNumberOfSequences() == 1)
realloc(sequence.size());
if (sequence.size() != sites_.size())
throw SequenceException("VectorSiteContainer::setSequence. Sequence has not the appropriate length.", &sequence);
if (checkNames)
{
for (size_t i = 0; i < names_.size(); i++)
{
if (i != pos && sequence.getName() == names_[i])
throw SequenceException("VectorSiteContainer::settSequence. Name already exists in container.", &sequence);
}
}
// Update name:
names_[pos] = sequence.getName();
// Update elements at each site:
for (size_t i = 0; i < sites_.size(); i++)
{
sites_[i]->setElement(pos, sequence.getValue(i));
}
// Update comments:
if (comments_[pos])
delete comments_[pos];
comments_[pos] = new Comments(sequence.getComments());
// Update sequences:
if (sequences_[pos])
delete sequences_[pos];
sequences_[pos] = 0;
}
示例9: cullQualAverage
bool QualityScores::cullQualAverage(Sequence& sequence, double qAverage){
try {
string rawSequence = sequence.getUnaligned();
bool success = 0; //guilty until proven innocent
if(seqName != sequence.getName()) {
m->mothurOut("sequence name mismatch btwn fasta: " + sequence.getName() + " and qual file: " + seqName);
m->mothurOutEndLine();
}
double aveQScore = calculateAverage();
if(aveQScore >= qAverage) { success = 1; }
else { success = 0; }
return success;
}
catch(exception& e) {
m->errorOut(e, "QualityScores", "cullQualAverage");
exit(1);
}
}
示例10: stripQualRollingAverage
bool QualityScores::stripQualRollingAverage(Sequence& sequence, double qThreshold){
try {
string rawSequence = sequence.getUnaligned();
int seqLength = sequence.getNumBases();
if(seqName != sequence.getName()){
m->mothurOut("sequence name mismatch btwn fasta: " + sequence.getName() + " and qual file: " + seqName);
m->mothurOutEndLine();
}
int end = -1;
double rollingSum = 0.0000;
for(int i=0;i<seqLength;i++){
rollingSum += (double)qScores[i];
if(rollingSum / (double)(i+1) < qThreshold){
end = i;
break;
}
}
if(end == -1){ end = seqLength; }
sequence.setUnaligned(rawSequence.substr(0,end));
trimQScores(-1, end);
return 1;
}
catch(exception& e) {
m->errorOut(e, "QualityScores", "flipQScores");
exit(1);
}
}
示例11: addSequence
void VectorSiteContainer::addSequence(const Sequence& sequence, bool checkNames) throw (Exception)
{
// If the container has no sequence, we set the size to the size of this sequence:
if (getNumberOfSequences() == 0)
realloc(sequence.size());
// New sequence's alphabet and site container's alphabet matching verification
if (sequence.getAlphabet()->getAlphabetType() != getAlphabet()->getAlphabetType())
throw AlphabetMismatchException("VectorSiteContainer::addSequence", getAlphabet(), sequence.getAlphabet());
if (sequence.size() != sites_.size())
throw SequenceException("VectorSiteContainer::addSequence. Sequence has not the appropriate length: " + TextTools::toString(sequence.size()) + ", should be " + TextTools::toString(sites_.size()) + ".", &sequence);
if (checkNames)
{
for (size_t i = 0; i < names_.size(); i++)
{
if (sequence.getName() == names_[i])
throw SequenceException("VectorSiteContainer::addSequence. Name already exists in container.", &sequence);
}
}
// Append name:
names_.push_back(sequence.getName());
// Append elements at each site:
for (size_t i = 0; i < sites_.size(); i++)
{
sites_[i]->addElement(sequence.getValue(i));
}
// Append comments:
comments_.push_back(new Comments(sequence.getComments()));
// Sequences pointers:
sequences_.push_back(0);
}
示例12: addSequence
void DistanceDB::addSequence(Sequence seq) {
try {
//are the template sequences aligned
if (!isAligned(seq.getAligned())) {
templateAligned = false;
m->mothurOut(seq.getName() + " is not aligned. Sequences must be aligned to use the distance method.");
m->mothurOutEndLine();
}
if (templateSeqsLength == 0) { templateSeqsLength = seq.getAligned().length(); }
data.push_back(seq);
}
catch(exception& e) {
m->errorOut(e, "DistanceDB", "addSequence");
exit(1);
}
}
示例13: driverClassifier
//**********************************************************************************************************************
void driverClassifier(classifyData* params){
try {
ifstream inFASTA;
params->util.openInputFile(params->filename, inFASTA);
string taxonomy;
inFASTA.seekg(params->start);
bool done = false;
string taxBuffer = ""; string taxTBuffer = ""; string accnosBuffer = "";
while (!done) {
if (params->m->getControl_pressed()) { break; }
Sequence* candidateSeq = new Sequence(inFASTA); params->util.gobble(inFASTA);
if (candidateSeq->getName() != "") {
string simpleTax = ""; bool flipped = false;
taxonomy = params->classify->getTaxonomy(candidateSeq, simpleTax, flipped);
if (params->m->getControl_pressed()) { delete candidateSeq; break; }
if (taxonomy == "unknown;") { params->m->mothurOut("[WARNING]: " + candidateSeq->getName() + " could not be classified. You can use the remove.lineage command with taxon=unknown; to remove such sequences.\n"); }
//output confidence scores or not
if (params->probs) { taxBuffer += candidateSeq->getName() + '\t' + taxonomy + '\n'; }
else { taxBuffer += candidateSeq->getName() + '\t' + simpleTax + '\n'; }
if (flipped) { accnosBuffer += candidateSeq->getName() + '\n'; }
taxTBuffer = candidateSeq->getName() + '\t' + simpleTax + '\n';
params->count++;
}
delete candidateSeq;
//report progress
if((params->count) % 100 == 0){
params->m->mothurOutJustToScreen(toString(params->count) +"\n");
params->taxTWriter->write(taxTBuffer); taxTBuffer = "";
params->taxWriter->write(taxBuffer); taxBuffer = "";
if (accnosBuffer != "") { params->accnosWriter->write(accnosBuffer); accnosBuffer = ""; }
}
#if defined NON_WINDOWS
unsigned long long pos = inFASTA.tellg();
if ((pos == -1) || (pos >= params->end)) { break; }
#else
if (params->count == params->end) { break; }
#endif
}
//report progress
if((params->count) % 100 != 0){
params->m->mothurOutJustToScreen(toString(params->count)+"\n");
params->taxTWriter->write(taxTBuffer); taxTBuffer = "";
params->taxWriter->write(taxBuffer); taxBuffer = "";
if (accnosBuffer != "") { params->accnosWriter->write(accnosBuffer); accnosBuffer = ""; }
}
inFASTA.close();
}
catch(exception& e) {
params->m->errorOut(e, "ClassifySeqsCommand", "driver");
exit(1);
}
}
示例14: queryLeft
//***************************************************************************************************************
//gets closest matches to each end, since chimeras will most likely have different parents on each end
vector<Sequence> DeCalculator::findClosest(Sequence querySeq, vector<Sequence*>& thisTemplate, vector<Sequence*>& thisFilteredTemplate, int numWanted, int minSim) {
try {
//indexes.clear();
vector<Sequence> seqsMatches;
vector<SeqDist> distsLeft;
vector<SeqDist> distsRight;
Dist* distcalculator = new eachGapDist();
string queryUnAligned = querySeq.getUnaligned();
int numBases = int(queryUnAligned.length() * 0.33);
string leftQuery = ""; //first 1/3 of the sequence
string rightQuery = ""; //last 1/3 of the sequence
string queryAligned = querySeq.getAligned();
//left side
bool foundFirstBase = false;
int baseCount = 0;
int leftSpot = 0;
int firstBaseSpot = 0;
for (int i = 0; i < queryAligned.length(); i++) {
//if you are a base
if (isalpha(queryAligned[i])) {
baseCount++;
if (!foundFirstBase) { foundFirstBase = true; firstBaseSpot = i; }
}
//eliminate opening .'s
if (foundFirstBase) { leftQuery += queryAligned[i]; }
//if you have 1/3
if (baseCount >= numBases) { leftSpot = i; break; } //first 1/3
}
//right side - count through another 1/3, so you are at last third
baseCount = 0;
int rightSpot = 0;
for (int i = leftSpot; i < queryAligned.length(); i++) {
//if you are a base
if (isalpha(queryAligned[i])) { baseCount++; }
//if you have 1/3
if (baseCount > numBases + 1) { rightSpot = i; break; } //last 1/3
}
//trim end
//find last position in query that is a non gap character
int lastBaseSpot = queryAligned.length()-1;
for (int j = queryAligned.length()-1; j >= 0; j--) {
if (isalpha(queryAligned[j])) {
lastBaseSpot = j;
break;
}
}
rightQuery = queryAligned.substr(rightSpot, (lastBaseSpot-rightSpot+1)); //sequence from pos spot to end
Sequence queryLeft(querySeq.getName(), leftQuery);
Sequence queryRight(querySeq.getName(), rightQuery);
//cout << querySeq->getName() << '\t' << leftSpot << '\t' << rightSpot << '\t' << firstBaseSpot << '\t' << lastBaseSpot << endl;
//cout << queryUnAligned.length() << '\t' << queryLeft.getUnaligned().length() << '\t' << queryRight.getUnaligned().length() << endl;
for(int j = 0; j < thisFilteredTemplate.size(); j++){
string dbAligned = thisFilteredTemplate[j]->getAligned();
string leftDB = dbAligned.substr(firstBaseSpot, (leftSpot-firstBaseSpot+1)); //first 1/3 of the sequence
string rightDB = dbAligned.substr(rightSpot, (lastBaseSpot-rightSpot+1)); //last 1/3 of the sequence
Sequence dbLeft(thisFilteredTemplate[j]->getName(), leftDB);
Sequence dbRight(thisFilteredTemplate[j]->getName(), rightDB);
distcalculator->calcDist(queryLeft, dbLeft);
float distLeft = distcalculator->getDist();
distcalculator->calcDist(queryRight, dbRight);
float distRight = distcalculator->getDist();
SeqDist subjectLeft;
subjectLeft.seq = NULL;
subjectLeft.dist = distLeft;
subjectLeft.index = j;
distsLeft.push_back(subjectLeft);
SeqDist subjectRight;
subjectRight.seq = NULL;
subjectRight.dist = distRight;
subjectRight.index = j;
distsRight.push_back(subjectRight);
}
delete distcalculator;
//sort by smallest distance
sort(distsRight.begin(), distsRight.end(), compareSeqDist);
sort(distsLeft.begin(), distsLeft.end(), compareSeqDist);
//.........这里部分代码省略.........
示例15: driverMPI
int AlignCommand::driverMPI(int start, int num, MPI_File& inMPI, MPI_File& alignFile, MPI_File& reportFile, MPI_File& accnosFile, vector<unsigned long long>& MPIPos){
try {
string outputString = "";
MPI_Status statusReport;
MPI_Status statusAlign;
MPI_Status statusAccnos;
MPI_Status status;
int pid;
MPI_Comm_rank(MPI_COMM_WORLD, &pid); //find out who we are
NastReport report;
if (pid == 0) {
outputString = report.getHeaders();
int length = outputString.length();
char* buf = new char[length];
memcpy(buf, outputString.c_str(), length);
MPI_File_write_shared(reportFile, buf, length, MPI_CHAR, &statusReport);
delete buf;
}
Alignment* alignment;
int longestBase = templateDB->getLongestBase();
if(align == "gotoh") { alignment = new GotohOverlap(gapOpen, gapExtend, match, misMatch, longestBase); }
else if(align == "needleman") { alignment = new NeedlemanOverlap(gapOpen, match, misMatch, longestBase); }
else if(align == "blast") { alignment = new BlastAlignment(gapOpen, gapExtend, match, misMatch); }
else if(align == "noalign") { alignment = new NoAlign(); }
else {
m->mothurOut(align + " is not a valid alignment option. I will run the command using needleman.");
m->mothurOutEndLine();
alignment = new NeedlemanOverlap(gapOpen, match, misMatch, longestBase);
}
for(int i=0;i<num;i++){
if (m->control_pressed) { delete alignment; return 0; }
//read next sequence
int length = MPIPos[start+i+1] - MPIPos[start+i];
char* buf4 = new char[length];
//memcpy(buf4, outputString.c_str(), length);
MPI_File_read_at(inMPI, MPIPos[start+i], buf4, length, MPI_CHAR, &status);
string tempBuf = buf4;
delete buf4;
if (tempBuf.length() > length) { tempBuf = tempBuf.substr(0, length); }
istringstream iss (tempBuf,istringstream::in);
Sequence* candidateSeq = new Sequence(iss);
report.setCandidate(candidateSeq);
int origNumBases = candidateSeq->getNumBases();
string originalUnaligned = candidateSeq->getUnaligned();
int numBasesNeeded = origNumBases * threshold;
if (candidateSeq->getName() != "") { //incase there is a commented sequence at the end of a file
if (candidateSeq->getUnaligned().length() > alignment->getnRows()) {
alignment->resize(candidateSeq->getUnaligned().length()+1);
}
Sequence temp = templateDB->findClosestSequence(candidateSeq);
Sequence* templateSeq = &temp;
float searchScore = templateDB->getSearchScore();
Nast* nast = new Nast(alignment, candidateSeq, templateSeq);
Sequence* copy;
Nast* nast2;
bool needToDeleteCopy = false; //this is needed in case you have you enter the ifs below
//since nast does not make a copy of hte sequence passed, and it is used by the reporter below
//you can't delete the copy sequence til after you report, but you may choose not to create it in the first place
//so this bool tells you if you need to delete it
//if there is a possibility that this sequence should be reversed
if (candidateSeq->getNumBases() < numBasesNeeded) {
string wasBetter = "";
//if the user wants you to try the reverse
if (flip) {
//get reverse compliment
copy = new Sequence(candidateSeq->getName(), originalUnaligned);
copy->reverseComplement();
//rerun alignment
Sequence temp2 = templateDB->findClosestSequence(copy);
Sequence* templateSeq2 = &temp2;
searchScore = templateDB->getSearchScore();
nast2 = new Nast(alignment, copy, templateSeq2);
//.........这里部分代码省略.........