@@ -35,6 +35,7 @@ void ReportHandler::create_report(double dt, double tstop, double delay) {
3535 continue ;
3636 }
3737 const std::vector<int >& nodes_to_gid = map_gids (nt);
38+ auto * mapinfo = static_cast <NrnThreadMappingInfo*>(nt.mapping );
3839 VarsToReport vars_to_report;
3940 bool is_soma_target;
4041 switch (m_report_config.type ) {
@@ -58,6 +59,13 @@ void ReportHandler::create_report(double dt, double tstop, double delay) {
5859 nodes_to_gid);
5960 register_custom_report (nt, m_report_config, vars_to_report);
6061 break ;
62+ case LFPReport:
63+ mapinfo->_lfp .resize (12 );
64+ vars_to_report = get_lfp_vars_to_report (nt, m_report_config, mapinfo->_lfp .data ());
65+ is_soma_target = m_report_config.section_type == SectionType::Soma ||
66+ m_report_config.section_type == SectionType::Cell;
67+ register_section_report (nt, m_report_config, vars_to_report, is_soma_target);
68+ break ;
6169 default :
6270 vars_to_report = get_synapse_vars_to_report (nt, m_report_config, nodes_to_gid);
6371 register_custom_report (nt, m_report_config, vars_to_report);
@@ -341,6 +349,34 @@ VarsToReport ReportHandler::get_synapse_vars_to_report(
341349 return vars_to_report;
342350}
343351
352+ VarsToReport ReportHandler::get_lfp_vars_to_report (const NrnThread& nt,
353+ ReportConfiguration& report,
354+ double * report_variable) const {
355+ VarsToReport vars_to_report;
356+ /* const auto* mapinfo = static_cast<NrnThreadMappingInfo*>(nt.mapping);
357+ if (!mapinfo) {
358+ std::cerr << "[LFP] Error : mapping information is missing for a Cell group "
359+ << nt.ncell << '\n';
360+ nrn_abort(1);
361+ }*/
362+ for (int i = 0 ; i < nt.ncell ; i++) {
363+ int gid = nt.presyns [i].gid_ ;
364+ if (report.target .find (gid) == report.target .end ()) {
365+ continue ;
366+ }
367+
368+ std::vector<VarWithMapping> to_report;
369+ // Add all electrodes to the first gid for now
370+ std::vector<int > electrode_ids = {0 };
371+ for (const auto & electrode_id : electrode_ids) {
372+ double * variable = report_variable + electrode_id;
373+ to_report.push_back (VarWithMapping (electrode_id, variable));
374+ }
375+ vars_to_report[gid] = to_report;
376+ }
377+ return vars_to_report;
378+ }
379+
344380// map GIDs of every compartment, it consist in a backward sweep then forward sweep algorithm
345381std::vector<int > ReportHandler::map_gids (const NrnThread& nt) const {
346382 std::vector<int > nodes_gid (nt.end , -1 );
0 commit comments