示例#1
0
ostream& single_star::print_star_story(ostream& s,
				       int short_output)  // default = 0
{
    put_story_header(s, STAR_ID);

    if (short_output) {

	// If we were to handle short output in the Star part of
	// the output stream, this is where it should be done.
	// However, for now it is simpler to handle all stellar
	// quantities in the Dyn output (in hdyn_io).

#if 0
	put_string(s,      "  S  =  ", type_short_string(get_element_type()));
	put_real_number(s, "  T  =  ", temperature());
	put_real_number(s, "  L  =  ", get_luminosity());
#endif

    } else {

	put_string(s,      "  Type   =  ", type_string(get_element_type()));
	if (get_spec_type(Accreting)==Accreting)
	    put_string(s,  "  Class   =  ",
		       type_string(get_spec_type(Accreting)));
	put_real_number(s, "  T_cur  =  ", get_current_time());
	if (get_current_time()!=get_relative_age())
	    put_real_number(s, "  T_rel  =  ", get_relative_age());
	put_real_number(s, "  M_rel  =  ", get_relative_mass());
	put_real_number(s, "  M_env  =  ", get_envelope_mass());
	put_real_number(s, "  M_core =  ", get_core_mass());
	put_real_number(s, "  T_eff  =  ", temperature());
	put_real_number(s, "  L_eff  =  ", get_luminosity());

	// Extra output for stars with CO cores
	if (star_with_COcore()) {
	    put_real_number(s, "  M_COcore  =  ", get_COcore_mass());
	}

	// Extra output for radio- and X-ray pulsars.
	if (get_element_type()==Xray_Pulsar ||
	    get_element_type()==Radio_Pulsar ||
	    get_element_type()==Neutron_Star) {
	    put_real_number(s, "  P_rot  =  ", get_rotation_period());
	    put_real_number(s, "  B_fld  =  ", get_magnetic_field());
	}

	if (star_story)
	    put_story_contents(s, *star_story);
    }

    put_story_footer(s, STAR_ID);

    return s;
}
示例#2
0
文件: make_ccd.C 项目: Ingwar/amuse
local void mk_ccd(dyn* b, vec dc_pos, int project, wavelength band,
		  real distance, real reddening,
		  real upper_Llimit,
		  real xoffset, real yoffset,
		  real electrons_to_ADU, real beta_PSF,
		  real arcsec_per_pixel, real fwhm,
		  char* filename, bool add_background_stars,
		  bool add_standard_star, int input_seed,
		  bool add_cosmics, int nbad_column,
		  bool verbose) {

  PRL(band);

  real maximum_electrons = electrons_to_ADU*SATURATION_LIMIT-1;

  real half_xccd = 0.5*XCCD_MAX*arcsec_per_pixel;
  real half_yccd = 0.5*YCCD_MAX*arcsec_per_pixel;

  real **ccd = mkarray(XCCD_MAX, YCCD_MAX);
  cerr << "CCD allocated"<<endl;
  for(int ix = 0; ix<XCCD_MAX; ix++) 
    for(int iy = 0; iy<YCCD_MAX; iy++)  
      ccd[ix][iy] = 0;

  PRL(distance);

  real distance_modulus = 5 * log10(distance/10.);
  PRC(distance_modulus);
  PRL(distance);

//  magnitude_limit -= distance_modulus;
//  real magnitude_limit = t_obs/10. - distance_modulus;

//  real luminosity_limit = pow(10, (4.76-magnitude_limit)/5.5); // in V
//  PRC(magnitude_limit);
//  PRL(luminosity_limit);
  
  real pos_to_parsec = b->get_starbase()->conv_r_dyn_to_star(1)
                     * cnsts.parameters(Rsun)/cnsts.parameters(parsec);
  real pos_to_arcsec = b->get_starbase()->conv_r_dyn_to_star(1)
                     * 3600 * cnsts.parameters(Rsun)
                     / (distance*cnsts.parameters(parsec));
  

  PRC(pos_to_parsec);PRL(pos_to_arcsec);

  real xpos, ypos, zpos;
  real M_max = VERY_LARGE_NUMBER;
  real local_Mmm=0, magn;
  real luminosity, L_max = 0;
  real xmax=0, ymax=0;
  vec r;
  if (b->get_oldest_daughter()) {

    vec r_com  = b->get_pos() - dc_pos;

    for_all_leaves(dyn, b, bb) {

//      cerr << " new star: ";
//      cerr << bb->get_index()<<endl;

      r = bb->get_pos()-bb->get_parent()->get_pos();
//      PRL(r);

      switch(project) {
        case -3: xpos =  r[0];
		 ypos =  r[1];
		 zpos = -r[2];
		 break;
	case -2: xpos = -r[0];
		 ypos =  r[2];
		 zpos = -r[1];
		 break;
	case -1: xpos = -r[1];
		 ypos =  r[2];
		 zpos = -r[0];
		 break;
	case 1: xpos = r[1];
		ypos = r[2];
		zpos = r[0];
		break;
	case 2: xpos = r[0];
		ypos = r[2];
		zpos = r[1];
		break;
        case 3: xpos = r[0];
		ypos = r[1];
		zpos = r[2];
		break;
      }
      xpos = xpos * pos_to_arcsec + half_xccd - xoffset;
      ypos = ypos * pos_to_arcsec + half_yccd - yoffset;
      zpos *= pos_to_parsec;
//      PRC(zpos);
      if(distance+zpos>0) {
	real local_distance_modulus = 5 * log10((distance+zpos)/10.);
//      PRL(local_distance_modulus);

	luminosity = get_luminosity(bb, band, local_distance_modulus,
				    maximum_electrons/upper_Llimit);

//	PRL(luminosity);
	if(L_max<luminosity) {
	  L_max = luminosity;
	  M_max = 4.76 - 2.5*log10(luminosity) - local_distance_modulus;
	  local_Mmm = local_distance_modulus;
	  xmax = xpos;    //ascsec
	  ymax = ypos;
	}

	if (luminosity<=0) {
	  luminosity = 0;
	  //	  cerr << "Stellar luminosity = " << luminosity << endl;
	  //	  cerr << "        star Not added to ccd"<<endl;
	}
	else {
	  if (verbose) {
	    real nx = xpos/arcsec_per_pixel;
	    real ny = ypos/arcsec_per_pixel;
	    if (nx>=-10 && nx<=XCCD_MAX && 
		ny>=-10 && ny<=YCCD_MAX+10) {
	      cerr << "Cluster star #" << bb->get_index() 
		   << " pos (x, y): " 
	           << nx << " " << ny << " pixels" << endl; 
	      cerr << "             magnitudes (M, m): "  
		   << 4.76 - 2.5*log10(luminosity)  - local_distance_modulus
 	           << " " << 4.76 - 2.5*log10(luminosity) <<endl;
	    }
	  }
	  add_star_to_ccd(ccd, luminosity, xpos, ypos, beta_PSF, 
			  arcsec_per_pixel, fwhm);
	}
      }
    }
//------------------------------------------------------------------------------
//  @fn send_sensor_values
//!
//! An Identifier value (CAN2.0A) is given to DVK90CAN1 board (ex: 0x080).
//! 1) The first operation is to detect a CAN receive remote frame with
//!    ID == MY_ID_TAG.
//! 2) The second operation is to send a CAN data frame with the same ID and as
//!    data:
//!    - the temperatue value (1 byte ),
//!    - the luminosity value (1 byte ),
//!    - the VCC-IN value     (2 bytes).
//! 3) IAP detection.
//!
//! @warning - Use DVK90CAN1 board,
//!          - can_init() must be perform before,
//!          - CAN_Bootloader_IAR Ver3 needed.
//!
//! @param  none
//!
//! @return  none
//!
//------------------------------------------------------------------------------
void send_sensor_values(void)
{
    U8  temp, expected_nnb;
    U8  iap_buffer[8];
    U8  sensor_buffer[8];
    U16 v_in;
    st_cmd_t iap_message;
    st_cmd_t sensor_message;

    U16 ack_jingle[] = { 100, 30, A7, 0 };

    // --- Init data and command for IAP detection
    expected_nnb = Farflash_rd_byte(NNB_ADDRESS);
    iap_message.pt_data = &iap_buffer[0];
    iap_message.ctrl.ide = 0;              //-- CAN 2.0A
    iap_message.dlc = 1;                   //-- Message with 1-byte data = NNB
    iap_message.id.std = 0x7FF & (((U16)(Farflash_rd_byte(CRIS_ADDRESS)))<< 4);
    iap_message.cmd = CMD_RX_DATA_MASKED;
    
    // --- Init data and command for REPLY-sensor message
    sensor_message.pt_data = &sensor_buffer[0];
    sensor_message.ctrl.ide = 0;            //-- CAN 2.0A
    sensor_message.dlc = 4;                 //-- Message with 4-byte data
    sensor_message.id.std = MY_ID_TAG;
    sensor_message.cmd = CMD_REPLY_MASKED;
    sensor_buffer[0] = (U8)(get_temperature());
    sensor_buffer[1] = get_luminosity();
    v_in = get_vin();
    sensor_buffer[2] = (U8)(v_in >> 8 );
    sensor_buffer[3] = (U8)(v_in      );

    // --- Enable IAP detection
    while(can_cmd(&iap_message) != CAN_CMD_ACCEPTED);
    // --- Enable REPLY for sensor message
    while(can_cmd(&sensor_message) != CAN_CMD_ACCEPTED);

    while(1)
    {       
        // --- Test REPLY completed
        temp = can_get_status(&sensor_message);
        if(temp == CAN_STATUS_COMPLETED)
        {
            // --- Re-prepare data for the reply
            sensor_buffer[0] = (U8)(get_temperature());
            sensor_buffer[1] = get_luminosity();
            v_in = get_vin();
            sensor_buffer[2] = (U8)(v_in >> 8 );
            sensor_buffer[3] = (U8)(v_in      );
            // --- Re-enable REPLY for sensor message
            while(can_cmd(&sensor_message) != CAN_CMD_ACCEPTED);
            // --- Acoustic acknowledge (must be short !)
            audio_play_song(ack_jingle);
        }

        // --- Test IAP detected
        temp = can_get_status(&iap_message);
        if(temp == CAN_STATUS_COMPLETED)
        {
            // --- Control of length & data
            if((iap_buffer[0] == expected_nnb) && (iap_message.dlc == 1))
            {
                Indirect_jump_to(BOOT_W_ADDRESS);   //-- Bye !
            }
            else
            {
                // --- Re-enable IAP detection
                while(can_cmd(&iap_message) != CAN_CMD_ACCEPTED);
            }
        }
    } // while(