int main(void) { init_timer(); init_io(); USART_Init(); sei(); fill_cube(0xFF); _delay_us(1500000); int mode = (PIND & (1<<PD3)); if (mode) { while (1) { random_filler(1); random_filler(0); loadbar(); rain(100); send_voxels_rand_z(200); set_edges(); _delay_us(5000000); } } else { int escape = 0; int counter = 0; while (1) { uint8_t byte; byte = USART_Receive(); if (!escape) { if (byte == 0xAB) { // escape character escape = 1; } else if (counter < 64) { tab[counter/8][counter%8] = byte; counter++; } } else { if (byte == 0xCD) { // start character counter = 0; } else if (byte == 0xAB && counter < 64) { tab[counter/8][counter%8] = byte; counter++; } escape = 0; } } } return 0; }
/***********************************************************************//** * @brief Bin the event data * * This method loops over all observations found in the observation conatiner * and bins all events from the event list(s) into counts map(s). Note that * each event list is binned in a separate counts map, hence no summing of * events is done. ***************************************************************************/ void ctbin::run(void) { // If we're in debug mode then all output is also dumped on the screen if (logDebug()) { log.cout(true); } // Get task parameters get_parameters(); // Write parameters into logger if (logTerse()) { log_parameters(); log << std::endl; } // Write observation(s) into logger if (logTerse()) { log << std::endl; if (m_obs.size() > 1) { log.header1("Observations"); } else { log.header1("Observation"); } log << m_obs << std::endl; } // Write header if (logTerse()) { log << std::endl; if (m_obs.size() > 1) { log.header1("Bin observations"); } else { log.header1("Bin observation"); } } // Loop over all observations in the container for (int i = 0; i < m_obs.size(); ++i) { // Get CTA observation GCTAObservation* obs = dynamic_cast<GCTAObservation*>(m_obs[i]); // Continue only if observation is a CTA observation if (obs != NULL) { // Write header for observation if (logTerse()) { if (obs->name().length() > 1) { log.header3("Observation "+obs->name()); } else { log.header3("Observation"); } } // Fill the cube fill_cube(obs); // Dispose events to free memory obs->dispose_events(); } // endif: CTA observation found } // endfor: looped over observations // Set a single cube in the observation container obs_cube(); // Write observation(s) into logger if (logTerse()) { log << std::endl; if (m_obs.size() > 1) { log.header1("Binned observations"); } else { log.header1("Binned observation"); } log << m_obs << std::endl; } // Return return; }
/***********************************************************************//** * @brief Generate the model map(s) * * This method reads the task parameters from the parfile, sets up the * observation container, loops over all CTA observations in the container * and generates a model map for each CTA observation. ***************************************************************************/ void ctmodel::run(void) { // If we're in debug mode then all output is also dumped on the screen if (logDebug()) { log.cout(true); } // Get task parameters get_parameters(); // Write parameters into logger if (logTerse()) { log_parameters(); log << std::endl; } // Set energy dispersion flag for all CTA observations and save old // values in save_edisp vector std::vector<bool> save_edisp; save_edisp.assign(m_obs.size(), false); for (int i = 0; i < m_obs.size(); ++i) { GCTAObservation* obs = dynamic_cast<GCTAObservation*>(m_obs[i]); if (obs != NULL) { save_edisp[i] = obs->response()->apply_edisp(); obs->response()->apply_edisp(m_apply_edisp); } } // Write observation(s) into logger if (logTerse()) { log << std::endl; if (m_obs.size() > 1) { log.header1("Observations"); } else { log.header1("Observation"); } log << m_obs << std::endl; } // Write models into logger if (logTerse()) { log << std::endl; log.header1("Models"); log << m_obs.models() << std::endl; } // Write header if (logTerse()) { log << std::endl; log.header1("Generate model cube"); } // Loop over all observations in the container for (int i = 0; i < m_obs.size(); ++i) { // Write header for observation if (logTerse()) { std::string header = m_obs[i]->instrument() + " observation"; if (m_obs[i]->name().length() > 1) { header += " \"" + m_obs[i]->name() + "\""; } if (m_obs[i]->id().length() > 1) { header += " (id=" + m_obs[i]->id() +")"; } log.header3(header); } // Get CTA observation GCTAObservation* obs = dynamic_cast<GCTAObservation*>(m_obs[i]); // Skip observation if it's not CTA if (obs == NULL) { if (logTerse()) { log << " Skipping "; log << m_obs[i]->instrument(); log << " observation" << std::endl; } continue; } // Fill cube and leave loop if we are binned mode (meaning we // only have one binned observation) if (m_binned) { fill_cube(obs); break; } // Skip observation if we have a binned observation if (obs->eventtype() == "CountsCube") { if (logTerse()) { log << " Skipping binned "; log << obs->instrument(); log << " observation" << std::endl; } continue; } // Fill the cube fill_cube(obs); // Dispose events to free memory if event file exists on disk if (obs->eventfile().length() > 0 && gammalib::file_exists(obs->eventfile())) { obs->dispose_events(); } } // endfor: looped over observations // Log cube if (logTerse()) { log << std::endl; log.header1("Model cube"); log << m_cube << std::endl; } // Restore energy dispersion flag for all CTA observations for (int i = 0; i < m_obs.size(); ++i) { GCTAObservation* obs = dynamic_cast<GCTAObservation*>(m_obs[i]); if (obs != NULL) { obs->response()->apply_edisp(save_edisp[i]); } } // Return return; }