Beispiel #1
0
void Aligner::setMasterDR(std::string& master) {
    AL_masterDRToken = mStringCheck->getToken(master);
    AL_Offsets[AL_masterDRToken] = (int)(AL_length * CRASS_DEF_CONS_ARRAY_START);
    prepareMasterForAlignment(master);
    placeReadsInCoverageArray(AL_masterDRToken);
    calculateDRZone();
    
}
Beispiel #2
0
void Aligner::setMasterDR(StringToken master) {
    AL_masterDRToken = master;
    std::string master_string = mStringCheck->getString(AL_masterDRToken);
    if (AL_masterDRToken == 0) {
        // could not be found, through exception
        logError("cannot find the token for DR string "<< master_string);
    }
    AL_Offsets[AL_masterDRToken] = (int)(AL_length * CRASS_DEF_CONS_ARRAY_START);
    prepareMasterForAlignment(master_string);
    placeReadsInCoverageArray(AL_masterDRToken);
    calculateDRZone();
    
}
Beispiel #3
0
void Aligner::alignSlave(StringToken& slaveDRToken) {
    
    AL_Offsets[slaveDRToken] = -1;
    std::string slaveDR = mStringCheck->getString(slaveDRToken);
    AlignerFlag_t flags;
    int offset = getOffsetAgainstMaster(slaveDR, flags);
    
    if (flags[score_equal]) {
        std::string extended_slave_dr;
        extendSlaveDR(slaveDR, extended_slave_dr);
        flags.reset();
        offset = getOffsetAgainstMaster(extended_slave_dr, flags);
        if (flags[score_equal]) {
            logWarn("Alignment Warning: Extended Slave scores equal",4);
            logWarn("\tCannot place slave: "<<slaveDR<<" ("<<slaveDRToken<<") in array", 4);
            logWarn("\tOriginal slave: "<<slaveDR, 4);
            logWarn("\tExtended Slave: "<<extended_slave_dr, 4);
            logWarn("\tMaster: "<<mStringCheck->getString(AL_masterDRToken), 4);
            logWarn("******", 4);
            flags[failed] = true;
        }
    }
    
    if (flags[failed]) {
        if(! flags[score_equal]){
            logWarn("Alignment Warning: Alignment failed", 4);
            logWarn("\tCannot place slave: "<<slaveDR<<" ("<<slaveDRToken<<") in array", 4);
            logWarn("\tMaster: "<<mStringCheck->getString(AL_masterDRToken), 4);
            logWarn("******", 4);
        }
        return;
    } 
    
    if (flags[reversed] ) {
        // we need to reverse all the reads and the DR for these reads
        try {
            ReadListIterator read_iter = mReads->at(slaveDRToken)->begin();
            while (read_iter != mReads->at(slaveDRToken)->end()) 
            {
                (*read_iter)->reverseComplementSeq();
                read_iter++;
            }
        } catch(crispr::exception& e) {
            std::cerr<<e.what()<<std::endl;
            throw crispr::exception(__FILE__,
                                    __LINE__,
                                    __PRETTY_FUNCTION__,
                                    "cannot reverse complement sequence");
        }
        // fix the places where the DR is stored
        
        slaveDR = reverseComplement(slaveDR);
        StringToken st = mStringCheck->addString(slaveDR);
        (*mReads)[st] = (*mReads)[slaveDRToken];
        (*mReads)[slaveDRToken] = NULL;
        slaveDRToken = st;
    }
    //std::cerr << AL_Offsets[AL_masterDRToken] +  offset <<std::endl;
    AL_Offsets[slaveDRToken] = AL_Offsets[AL_masterDRToken] + offset;
    placeReadsInCoverageArray(slaveDRToken);
}