// File: /workspace/github_c_makefile_star2_O0/radforddc[P]icpc_siggen/detector_geometry.c
// Function: outside_detector_cyl
int outside_detector_cyl(cyl_pt pt, MJD_Siggen_Setup *setup){
  float r, z, r1, z1, br, a, b;

  z = pt.z;
  if (z > setup->zmax || z < 0) return 1;

  r = pt.r;
  if (r < 0) r = -r;
  if (r > setup->rmax) return 1;
  r1 = setup->rmax - r;  // distance from outer radius
  z1 = setup->zmax - z;  // distance from top of crystal

  /* check point contact */
  if (z < setup->pc_length && r < setup->pc_radius) {
    if (!setup->bulletize_PC) return 1;
    if (setup->pc_length > setup->pc_radius) {
      a = setup->pc_length - setup->pc_radius;
      if (z < a || SQ(z-a) + SQ(r) < SQ(setup->pc_radius)) return 1;
    } else {
      a = setup->pc_radius - setup->pc_length;
      if (r < a || SQ(z) + SQ(r-a) < SQ(setup->pc_length)) return 1;
    }
    return 0;
  }
  /* check ditch */
  if (z <= setup->ditch_depth  &&
      setup->ditch_thickness > 0 && setup->wrap_around_radius > 0 &&
      r < setup->wrap_around_radius &&
      r > setup->wrap_around_radius - setup->ditch_thickness) return 1;

  /* check hole */
  if ( r < setup->hole_radius &&
      z1 < setup->hole_length) {
    b = setup->zmax - setup->hole_length + setup->hole_bullet_radius;
    if (z > b) return 1;
    a = setup->hole_radius - setup->hole_bullet_radius;
    if (r < a || SQ(b-z) + SQ(r-a) < SQ(setup->hole_bullet_radius)) return 1;
  }
  /* check inner taper of hole */
  if (z1 < setup->inner_taper_length &&
      r  < setup->hole_radius +
            ((setup->inner_taper_length - z1) *
              setup->inner_taper_width / setup->inner_taper_length)) return 1;      
  /* check outer taper of crystal */
  if (z1 < setup->outer_taper_length &&
      r1 < ((setup->outer_taper_length - z1) *
              setup->outer_taper_width / setup->outer_taper_length)) return 1;
  /* check 45-degree bottom outer taper of crystal */
  if ( z < setup->bottom_taper_length &&
      r1 < setup->bottom_taper_length - z) return 1;

  /* check bulletizations */
  br = setup->top_bullet_radius;
  // adjust top bulletization position for top outer taper
  a = 0;
  if (setup->outer_taper_length > br)
    a = ((setup->outer_taper_length - br) *
         setup->outer_taper_width / setup->outer_taper_length);
  if (z1 < br &&
      r1 < br + a &&
      SQ(br - r1 + a) + SQ(br - z1) > br*br) return 1;
  br = setup->bottom_bullet_radius;
  a = setup->Li_thickness;   // FIXME ? added for fieldgen
  if ( z < br + a &&
      r1 < br &&
      SQ(br - r1) + SQ(br - z + a) > br*br) return 1;

  return 0;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
movlpd %xmm0, -0x20(%rbp)
movss %xmm1, -0x18(%rbp)
movq -0x20(%rbp), %rax
movq %rax, -0x10(%rbp)
movl -0x18(%rbp), %eax
movl %eax, -0x8(%rbp)
movq %rdi, -0x28(%rbp)
movss -0x8(%rbp), %xmm0
movss %xmm0, -0x30(%rbp)
movss -0x30(%rbp), %xmm0
movq -0x28(%rbp), %rax
ucomiss 0x3c0(%rax), %xmm0
ja 0xbd45
xorps %xmm0, %xmm0
ucomiss -0x30(%rbp), %xmm0
jbe 0xbd51
movl $0x1, -0x4(%rbp)
jmp 0xc2a0
movss -0x10(%rbp), %xmm0
movss %xmm0, -0x2c(%rbp)
xorps %xmm0, %xmm0
ucomiss -0x2c(%rbp), %xmm0
jbe 0xbd7b
movss -0x2c(%rbp), %xmm0
movd %xmm0, %eax
xorl $0x80000000, %eax       # imm = 0x80000000
movd %eax, %xmm0
movss %xmm0, -0x2c(%rbp)
movss -0x2c(%rbp), %xmm0
movq -0x28(%rbp), %rax
ucomiss 0x3b4(%rax), %xmm0
jbe 0xbd99
movl $0x1, -0x4(%rbp)
jmp 0xc2a0
movq -0x28(%rbp), %rax
movss 0x3b4(%rax), %xmm0
subss -0x2c(%rbp), %xmm0
movss %xmm0, -0x34(%rbp)
movq -0x28(%rbp), %rax
movss 0x3c0(%rax), %xmm0
subss -0x30(%rbp), %xmm0
movss %xmm0, -0x38(%rbp)
movss -0x30(%rbp), %xmm1
movq -0x28(%rbp), %rax
movss 0xc(%rax), %xmm0
ucomiss %xmm1, %xmm0
jbe 0xbf11
movss -0x2c(%rbp), %xmm1
movq -0x28(%rbp), %rax
movss 0x10(%rax), %xmm0
ucomiss %xmm1, %xmm0
jbe 0xbf11
movq -0x28(%rbp), %rax
cmpl $0x0, 0x84(%rax)
jne 0xbe0c
movl $0x1, -0x4(%rbp)
jmp 0xc2a0
movq -0x28(%rbp), %rax
movss 0xc(%rax), %xmm0
movq -0x28(%rbp), %rax
ucomiss 0x10(%rax), %xmm0
jbe 0xbe90
movq -0x28(%rbp), %rax
movss 0xc(%rax), %xmm0
movq -0x28(%rbp), %rax
subss 0x10(%rax), %xmm0
movss %xmm0, -0x40(%rbp)
movss -0x30(%rbp), %xmm1
movss -0x40(%rbp), %xmm0
ucomiss %xmm1, %xmm0
ja 0xbe82
movss -0x30(%rbp), %xmm1
subss -0x40(%rbp), %xmm1
movss -0x30(%rbp), %xmm2
subss -0x40(%rbp), %xmm2
movss -0x2c(%rbp), %xmm0
mulss -0x2c(%rbp), %xmm0
mulss %xmm2, %xmm1
addss %xmm0, %xmm1
movq -0x28(%rbp), %rax
movss 0x10(%rax), %xmm0
movq -0x28(%rbp), %rax
mulss 0x10(%rax), %xmm0
ucomiss %xmm1, %xmm0
jbe 0xbe8e
movl $0x1, -0x4(%rbp)
jmp 0xc2a0
jmp 0xbf05
movq -0x28(%rbp), %rax
movss 0x10(%rax), %xmm0
movq -0x28(%rbp), %rax
subss 0xc(%rax), %xmm0
movss %xmm0, -0x40(%rbp)
movss -0x2c(%rbp), %xmm1
movss -0x40(%rbp), %xmm0
ucomiss %xmm1, %xmm0
ja 0xbef7
movss -0x30(%rbp), %xmm1
movss -0x30(%rbp), %xmm2
movss -0x2c(%rbp), %xmm0
subss -0x40(%rbp), %xmm0
movss -0x2c(%rbp), %xmm3
subss -0x40(%rbp), %xmm3
mulss %xmm3, %xmm0
mulss %xmm2, %xmm1
addss %xmm0, %xmm1
movq -0x28(%rbp), %rax
movss 0xc(%rax), %xmm0
movq -0x28(%rbp), %rax
mulss 0xc(%rax), %xmm0
ucomiss %xmm1, %xmm0
jbe 0xbf03
movl $0x1, -0x4(%rbp)
jmp 0xc2a0
jmp 0xbf05
movl $0x0, -0x4(%rbp)
jmp 0xc2a0
movss -0x30(%rbp), %xmm1
movq -0x28(%rbp), %rax
movss 0x18(%rax), %xmm0
ucomiss %xmm1, %xmm0
jb 0xbf81
movq -0x28(%rbp), %rax
movss 0x1c(%rax), %xmm0
xorps %xmm1, %xmm1
ucomiss %xmm1, %xmm0
jbe 0xbf81
movq -0x28(%rbp), %rax
movss 0x14(%rax), %xmm0
xorps %xmm1, %xmm1
ucomiss %xmm1, %xmm0
jbe 0xbf81
movss -0x2c(%rbp), %xmm1
movq -0x28(%rbp), %rax
movss 0x14(%rax), %xmm0
ucomiss %xmm1, %xmm0
jbe 0xbf81
movss -0x2c(%rbp), %xmm0
movq -0x28(%rbp), %rax
movss 0x14(%rax), %xmm1
movq -0x28(%rbp), %rax
subss 0x1c(%rax), %xmm1
ucomiss %xmm1, %xmm0
jbe 0xbf81
movl $0x1, -0x4(%rbp)
jmp 0xc2a0
movss -0x2c(%rbp), %xmm1
movq -0x28(%rbp), %rax
movss 0x28(%rax), %xmm0
ucomiss %xmm1, %xmm0
jbe 0xc068
movss -0x38(%rbp), %xmm1
movq -0x28(%rbp), %rax
movss 0x24(%rax), %xmm0
ucomiss %xmm1, %xmm0
jbe 0xc068
movq -0x28(%rbp), %rax
movss 0x3c0(%rax), %xmm0
movq -0x28(%rbp), %rax
subss 0x24(%rax), %xmm0
movq -0x28(%rbp), %rax
addss 0x48(%rax), %xmm0
movss %xmm0, -0x44(%rbp)
movss -0x30(%rbp), %xmm0
ucomiss -0x44(%rbp), %xmm0
jbe 0xbfe9
movl $0x1, -0x4(%rbp)
jmp 0xc2a0
movq -0x28(%rbp), %rax
movss 0x28(%rax), %xmm0
movq -0x28(%rbp), %rax
subss 0x48(%rax), %xmm0
movss %xmm0, -0x40(%rbp)
movss -0x2c(%rbp), %xmm1
movss -0x40(%rbp), %xmm0
ucomiss %xmm1, %xmm0
ja 0xc05a
movss -0x44(%rbp), %xmm1
subss -0x30(%rbp), %xmm1
movss -0x44(%rbp), %xmm2
subss -0x30(%rbp), %xmm2
movss -0x2c(%rbp), %xmm0
subss -0x40(%rbp), %xmm0
movss -0x2c(%rbp), %xmm3
subss -0x40(%rbp), %xmm3
mulss %xmm3, %xmm0
mulss %xmm2, %xmm1
addss %xmm0, %xmm1
movq -0x28(%rbp), %rax
movss 0x48(%rax), %xmm0
movq -0x28(%rbp), %rax
mulss 0x48(%rax), %xmm0
ucomiss %xmm1, %xmm0
jbe 0xc066
movl $0x1, -0x4(%rbp)
jmp 0xc2a0
jmp 0xc068
movss -0x38(%rbp), %xmm1
movq -0x28(%rbp), %rax
movss 0x34(%rax), %xmm0
ucomiss %xmm1, %xmm0
jbe 0xc0be
movss -0x2c(%rbp), %xmm1
movq -0x28(%rbp), %rax
movss 0x28(%rax), %xmm0
movq -0x28(%rbp), %rax
movss 0x34(%rax), %xmm2
subss -0x38(%rbp), %xmm2
movq -0x28(%rbp), %rax
mulss 0x3c(%rax), %xmm2
movq -0x28(%rbp), %rax
divss 0x34(%rax), %xmm2
addss %xmm2, %xmm0
ucomiss %xmm1, %xmm0
jbe 0xc0be
movl $0x1, -0x4(%rbp)
jmp 0xc2a0
movss -0x38(%rbp), %xmm1
movq -0x28(%rbp), %rax
movss 0x2c(%rax), %xmm0
ucomiss %xmm1, %xmm0
jbe 0xc107
movss -0x34(%rbp), %xmm1
movq -0x28(%rbp), %rax
movss 0x2c(%rax), %xmm0
subss -0x38(%rbp), %xmm0
movq -0x28(%rbp), %rax
mulss 0x38(%rax), %xmm0
movq -0x28(%rbp), %rax
divss 0x2c(%rax), %xmm0
ucomiss %xmm1, %xmm0
jbe 0xc107
movl $0x1, -0x4(%rbp)
jmp 0xc2a0
movss -0x30(%rbp), %xmm1
movq -0x28(%rbp), %rax
movss 0x20(%rax), %xmm0
ucomiss %xmm1, %xmm0
jbe 0xc13e
movss -0x34(%rbp), %xmm1
movq -0x28(%rbp), %rax
movss 0x20(%rax), %xmm0
subss -0x30(%rbp), %xmm0
ucomiss %xmm1, %xmm0
jbe 0xc13e
movl $0x1, -0x4(%rbp)
jmp 0xc2a0
movq -0x28(%rbp), %rax
movss 0x40(%rax), %xmm0
movss %xmm0, -0x3c(%rbp)
xorps %xmm0, %xmm0
movss %xmm0, -0x40(%rbp)
movq -0x28(%rbp), %rax
movss 0x2c(%rax), %xmm0
ucomiss -0x3c(%rbp), %xmm0
jbe 0xc188
movq -0x28(%rbp), %rax
movss 0x2c(%rax), %xmm0
subss -0x3c(%rbp), %xmm0
movq -0x28(%rbp), %rax
mulss 0x38(%rax), %xmm0
movq -0x28(%rbp), %rax
divss 0x2c(%rax), %xmm0
movss %xmm0, -0x40(%rbp)
movss -0x38(%rbp), %xmm1
movss -0x3c(%rbp), %xmm0
ucomiss %xmm1, %xmm0
jbe 0xc204
movss -0x34(%rbp), %xmm1
movss -0x3c(%rbp), %xmm0
addss -0x40(%rbp), %xmm0
ucomiss %xmm1, %xmm0
jbe 0xc204
movss -0x3c(%rbp), %xmm0
subss -0x34(%rbp), %xmm0
addss -0x40(%rbp), %xmm0
movss -0x3c(%rbp), %xmm2
subss -0x34(%rbp), %xmm2
addss -0x40(%rbp), %xmm2
movss -0x3c(%rbp), %xmm1
subss -0x38(%rbp), %xmm1
movss -0x3c(%rbp), %xmm3
subss -0x38(%rbp), %xmm3
mulss %xmm3, %xmm1
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
movss -0x3c(%rbp), %xmm1
mulss -0x3c(%rbp), %xmm1
ucomiss %xmm1, %xmm0
jbe 0xc204
movl $0x1, -0x4(%rbp)
jmp 0xc2a0
movq -0x28(%rbp), %rax
movss 0x44(%rax), %xmm0
movss %xmm0, -0x3c(%rbp)
movq -0x28(%rbp), %rax
movss 0x4c(%rax), %xmm0
movss %xmm0, -0x40(%rbp)
movss -0x30(%rbp), %xmm1
movss -0x3c(%rbp), %xmm0
addss -0x40(%rbp), %xmm0
ucomiss %xmm1, %xmm0
jbe 0xc299
movss -0x34(%rbp), %xmm1
movss -0x3c(%rbp), %xmm0
ucomiss %xmm1, %xmm0
jbe 0xc299
movss -0x3c(%rbp), %xmm0
subss -0x34(%rbp), %xmm0
movss -0x3c(%rbp), %xmm2
subss -0x34(%rbp), %xmm2
movss -0x3c(%rbp), %xmm1
subss -0x30(%rbp), %xmm1
addss -0x40(%rbp), %xmm1
movss -0x3c(%rbp), %xmm3
subss -0x30(%rbp), %xmm3
addss -0x40(%rbp), %xmm3
mulss %xmm3, %xmm1
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
movss -0x3c(%rbp), %xmm1
mulss -0x3c(%rbp), %xmm1
ucomiss %xmm1, %xmm0
jbe 0xc299
movl $0x1, -0x4(%rbp)
jmp 0xc2a0
movl $0x0, -0x4(%rbp)
movl -0x4(%rbp), %eax
popq %rbp
retq