//PreprocessProgram initializes ETA parameters and validates/modifies ramp conditions void Thermocycler::PreprocessProgram() { Step* pCurrentStep; Step* pPreviousStep = NULL; iProgramHoldDurationS = 0; iEstimatedTimeRemainingS = 0; iHasCooled = false; iProgramControlledRampDurationS = 0; iProgramFastRampDegrees = 0; iElapsedFastRampDegrees = 0; iTotalElapsedFastRampDurationMs = 0; ipProgram->BeginIteration(); while ((pCurrentStep = ipProgram->GetNextStep()) && !pCurrentStep->IsFinal()) { //validate ramp if (pPreviousStep != NULL && pCurrentStep->GetRampDurationS() * 1000 < absf(pCurrentStep->GetTemp() - pPreviousStep->GetTemp()) * PLATE_FAST_RAMP_THRESHOLD_MS) { //cannot ramp that fast, ignored set ramp pCurrentStep->SetRampDurationS(0); } //update eta hold iProgramHoldDurationS += pCurrentStep->GetStepDurationS(); //update eta ramp if (pCurrentStep->GetRampDurationS() > 0) { //controlled ramp iProgramControlledRampDurationS += pCurrentStep->GetRampDurationS(); } else { //fast ramp double previousTemp = pPreviousStep ? pPreviousStep->GetTemp() : GetPlateTemp(); iProgramFastRampDegrees += absf(previousTemp - pCurrentStep->GetTemp()) - CYCLE_START_TOLERANCE; } pPreviousStep = pCurrentStep; } }
//PreprocessProgram initializes ETA parameters and validates/modifies ramp conditions void Thermocycler::PreprocessProgram() { Step* pCurrentStep; Step* pPreviousStep = NULL; m_program_hold_duration_sec = 0; m_estimated_time_remaining_sec = 0; m_has_cooled = false; m_program_controlled_ramp_duration_sec = 0; m_program_fast_ramp_degrees = 0; m_elapsed_fast_ramp_degrees = 0; m_total_elapsed_fast_ramp_duration_ms = 0; m_program->BeginIteration(); while ((pCurrentStep = m_program->GetNextStep()) && !pCurrentStep->IsFinal()) { //validate ramp if (pPreviousStep != NULL && pCurrentStep->GetRampDurationS() * 1000 < fabs(pCurrentStep->GetTemp() - pPreviousStep->GetTemp()) * PLATE_FAST_RAMP_THRESHOLD_MS) { //cannot ramp that fast, ignored set ramp pCurrentStep->SetRampDurationS(0); } //update eta hold m_program_hold_duration_sec += pCurrentStep->GetStepDurationS(); //update eta ramp if (pCurrentStep->GetRampDurationS() > 0) { //controlled ramp m_program_controlled_ramp_duration_sec += pCurrentStep->GetRampDurationS(); } else { //fast ramp double previousTemp = pPreviousStep ? pPreviousStep->GetTemp() : GetPlateTemp(); m_program_fast_ramp_degrees += fabs(previousTemp - pCurrentStep->GetTemp()) - CYCLE_START_TOLERANCE; } pPreviousStep = pCurrentStep; } }