Пример #1
0
//@TODO:  Revert local bead correction here
// For refining "time" shifts, we want to use sampled beads, so don't do bkg subtraction on everything and munge the buffers.
void RefineFit::FitAmplitudePerBeadPerFlow (int ibd, NucStep &cache_step, int flow_block_size, int flow_block_start)
{
  int fitType[flow_block_size];
  BeadParams *p = &bkg.region_data->my_beads.params_nn[ibd];
  float block_signal_corrected[bkg.region_data->my_scratch.bead_flow_t];
  float block_signal_predicted[bkg.region_data->my_scratch.bead_flow_t];
  float washoutThreshold = bkg.getWashoutThreshold();
  int washoutFlowDetection = bkg.getWashoutFlowDetection();

  SupplyMultiFlowSignal (block_signal_corrected, ibd, flow_block_size, flow_block_start);

  if (bkg.global_defaults.signal_process_control.exp_tail_fit)
     my_exp_tail_fit.CorrectTraces(block_signal_corrected,bkg.region_data->my_scratch.shifted_bkg,
        p,&bkg.region_data->my_regions.rp,
        bkg.region_data_extras.my_flow,bkg.region_data->time_c, flow_block_size, flow_block_start);

  error_track err_t; // temporary store errors for this bead this flow
  for (int fnum=0;fnum < flow_block_size;fnum++)
  {
    float evect[bkg.region_data->time_c.npts()];
    bkg.region_data->emphasis_data.CustomEmphasis (evect, p->Ampl[fnum]);
    float *signal_corrected = &block_signal_corrected[fnum*bkg.region_data->time_c.npts()];
    float *signal_predicted = &block_signal_predicted[fnum*bkg.region_data->time_c.npts()];
    int NucID = bkg.region_data_extras.my_flow->flow_ndx_map[fnum];
	  fitType[fnum] = 
      my_single_fit.FitOneFlow (fnum,evect,p,&err_t, signal_corrected,signal_predicted, 
        NucID,cache_step.NucFineStep (fnum),cache_step.i_start_fine_step[fnum],
        flow_block_start,bkg.region_data->time_c,bkg.region_data->emphasis_data,bkg.region_data->my_regions);
  }
  //int reg = bkg.region_data->region->index;
  //printf("RefineFit::FitAmplitudePerBeadPerFlow... (r,b)=(%d,%d) predicted[10]=%f corrected[10]=%f\n",reg,ibd,block_signal_predicted[10],block_signal_corrected[10]);
  // note: predicted[0:7]=0 most of the time, my_start=8 or 9

// do things with my error vector for this bead

  // now detect corruption & store average error
  p->DetectCorruption (err_t, washoutThreshold, washoutFlowDetection, flow_block_size);
  // update error here to be passed to later block of flows
  // don't keep individual flow errors because we're surprisingly tight on memory
  p->UpdateCumulativeAvgError (err_t, flow_block_start + flow_block_size, flow_block_size); // current flow reached, 1-based

  // send prediction to hdf5 if necessary
  CrazyDumpToHDF5(p,ibd,block_signal_predicted, block_signal_corrected, fitType, err_t, flow_block_start );
}
Пример #2
0
//@TODO:  Revert local bead correction here
// For refining "time" shifts, we want to use sampled beads, so don't do bkg subtraction on everything and munge the buffers.
void RefineFit::FitAmplitudePerBeadPerFlow (int ibd, NucStep &cache_step)
{
  bead_params *p = &bkg.region_data->my_beads.params_nn[ibd];
  float block_signal_corrected[bkg.region_data->my_scratch.bead_flow_t];
  float block_signal_predicted[bkg.region_data->my_scratch.bead_flow_t];

  SupplyMultiFlowSignal (block_signal_corrected, ibd);

  if (bkg.global_defaults.signal_process_control.exp_tail_fit)
     my_exp_tail_fit.CorrectTraces(block_signal_corrected,bkg.region_data->my_scratch.shifted_bkg,p,&bkg.region_data->my_regions.rp,
                                   &bkg.region_data->my_flow,bkg.region_data->time_c);

  error_track err_t; // temporary store errors for this bead this flow
  for (int fnum=0;fnum < NUMFB;fnum++)
  {
    float evect[bkg.region_data->time_c.npts()];
    //local_emphasis[fnum].CustomEmphasis (evect,p->Ampl[fnum]);
    bkg.region_data->emphasis_data.CustomEmphasis (evect, p->Ampl[fnum]);
    float *signal_corrected = &block_signal_corrected[fnum*bkg.region_data->time_c.npts()];
    float *signal_predicted = &block_signal_predicted[fnum*bkg.region_data->time_c.npts()];
    int NucID = bkg.region_data->my_flow.flow_ndx_map[fnum];

    my_single_fit.FitOneFlow (fnum,evect,p,&err_t, signal_corrected,signal_predicted, NucID,cache_step.NucFineStep (fnum),cache_step.i_start_fine_step[fnum],bkg.region_data->my_flow,bkg.region_data->time_c,bkg.region_data->emphasis_data,bkg.region_data->my_regions);
  }

// do things with my error vector for this bead

  // now detect corruption & store average error
  DetectCorruption (p,err_t, WASHOUT_THRESHOLD, WASHOUT_FLOW_DETECTION);
  // update error here to be passed to later block of flows
  // don't keep individual flow errors because we're surprisingly tight on memory
  UpdateCumulativeAvgError (p,err_t,bkg.region_data->my_flow.buff_flow[NUMFB-1]+1); // current flow reached, 1-based

  // if necessary, send the errors to HDF5
  bkg.global_state.SendErrorVectorToHDF5 (p,err_t, bkg.region_data->region,bkg.region_data->my_flow);
  // send prediction to hdf5 if necessary
  bkg.global_state.SendPredictedToHDF5(ibd, block_signal_predicted, *bkg.region_data);
  bkg.global_state.SendCorrectedToHDF5(ibd, block_signal_corrected, *bkg.region_data);
  bkg.global_state.SendXtalkToHDF5(ibd, bkg.region_data->my_scratch.cur_xtflux_block, *bkg.region_data);
}