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; }
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(