Esempio n. 1
0
void MathModel::ParallelSimpleComputeCumulativeIncorporationHydrogens (
    float **ival_offset, int npts, const float *deltaFrameSeconds,
    const float *const *nuc_rise_ptr, int SUB_STEPS, int *my_start,
    float *A, float *SP,
    float *kr, float *kmax, float *d, float *molecules_to_micromolar_conversion, PoissonCDFApproxMemo *math_poiss, int incorporationModelType)
{

  // handle sign here by function composition
  float tA[FLOW_STEP];
  for (int q=0; q<FLOW_STEP; q++)
    if (A[q]<0.0f)
      tA[q] = -A[q];
    else
      tA[q] = A[q];

  switch( incorporationModelType ){
    case 1:
          for (int q=0; q<FLOW_STEP; q++){
              ReducedComputeCumulativeIncorporationHydrogens (ival_offset[q],npts,deltaFrameSeconds,nuc_rise_ptr[q],SUB_STEPS,
                                                              my_start[q],0,tA[q],SP[q],kr[q],kmax[q],d[q],molecules_to_micromolar_conversion[q], math_poiss);
          }
          break;
    case 2:
        for (int q=0; q<FLOW_STEP; q++){
            Reduced2ComputeCumulativeIncorporationHydrogens (ival_offset[q],npts,deltaFrameSeconds,nuc_rise_ptr[q],SUB_STEPS,
                                                            my_start[q],0,tA[q],SP[q],kr[q],kmax[q],d[q],molecules_to_micromolar_conversion[q], math_poiss);
        }
        break;
    case 3:
      for (int q=0; q<FLOW_STEP; q++){
          Reduced3ComputeCumulativeIncorporationHydrogens (ival_offset[q],npts,deltaFrameSeconds,nuc_rise_ptr[q],SUB_STEPS,
                                                          my_start[q],0,tA[q],SP[q],kr[q],kmax[q],d[q],molecules_to_micromolar_conversion[q], math_poiss);
      }
      break;
    case 0:
    default:
          UnsignedParallelSimpleComputeCumulativeIncorporationHydrogens (ival_offset,npts,deltaFrameSeconds,nuc_rise_ptr,SUB_STEPS,my_start,tA,SP,kr,kmax,d,molecules_to_micromolar_conversion,math_poiss);
          break;
  }


  // flip sign - we never really have negative incorporation, but we can "over-subtract" cross-talk
  for (int q=0; q<FLOW_STEP; q++)
    if (A[q]<0.0f)
      MultiplyVectorByScalar (ival_offset[q],-1.0f,npts);
}
Esempio n. 2
0
void ParallelSimpleComputeCumulativeIncorporationHydrogens (float **ival_offset, int npts, float *deltaFrameSeconds,
    float **nuc_rise_ptr, int SUB_STEPS, int *my_start,
    float *A, float *SP,
    float *kr, float *kmax, float *d, float *molecules_to_micromolar_conversion, PoissonCDFApproxMemo *math_poiss)
{
  // handle sign here by function composition
  float tA[FLOW_STEP];
  for (int q=0; q<FLOW_STEP; q++)
    if (A[q]<0.0f)
      tA[q] = -A[q];
    else
      tA[q] = A[q];

  UnsignedParallelSimpleComputeCumulativeIncorporationHydrogens (ival_offset,npts,deltaFrameSeconds,nuc_rise_ptr,SUB_STEPS,my_start,tA,SP,kr,kmax,d,molecules_to_micromolar_conversion,math_poiss);

  // flip sign - we never really have negative incorporation, but we can "over-subtract" cross-talk
  for (int q=0; q<FLOW_STEP; q++)
    if (A[q]<0.0f)
      MultiplyVectorByScalar (ival_offset[q],-1.0f,npts);
}