Package: tom-nonlocalizedevents
GW Superevent (or GRB, Neutrino) EM follow-upThis reusable TOM Toolkit app provides support for gravitational wave (GW) superevent
and other non-localized event electromagnetic (EM) follow up observations.RequirementsThis TOM plugin requires the use of a postgresql 14+ database backend, since it leverages some postgres specific stuff for MOC volume map lookups.InstallationInstall the package into your TOM environment:pipinstalltom-nonlocalizedeventsIn your projectsettings.py, addtom_nonlocalizedeventsandwebpack_loaderto yourINSTALLED_APPSsetting:INSTALLED_APPS=['webpack_loader',...'tom_nonlocalizedevents',]Also include the following Django-Webpack-Loader settings in your settings.py:VUE_FRONTEND_DIR_TOM_NONLOCAL=os.path.join(STATIC_ROOT,'tom_nonlocalizedevents/vue')WEBPACK_LOADER={'TOM_NONLOCALIZEDEVENTS':{'CACHE':notDEBUG,'BUNDLE_DIR_NAME':'tom_nonlocalizedevents/vue/',# must end with slash'STATS_FILE':os.path.join(VUE_FRONTEND_DIR_TOM_NONLOCAL,'webpack-stats.json'),'POLL_INTERVAL':0.1,'TIMEOUT':None,'IGNORE':[r'.+\.hot-update.js',r'.+\.map']}}IfWEBPACK_LOADERis already defined in your settings, then integrate these values in to it.Also add the following to your settings if they are not already there, setting whatever default values you need for your setup. These point to your deployed TOM toolkit instance, and to a hermes instance:TOM_API_URL=os.getenv('TOM_API_URL','http://127.0.0.1:8000')HERMES_API_URL=os.getenv('HERMES_API_URL','https://hermes-dev.lco.global')Include the tom_nonlocalizedevent URLconf in your projecturls.py:urlpatterns=[...path('nonlocalizedevents/',include('tom_nonlocalizedevents.urls',namespace='nonlocalizedevents')),]Runpython manage.py migrateto create the tom_nonlocalizedevents models.Set environment variables below to configure different connections:Env variableDescriptionDefaultSA_DB_CONNECTION_URLLocation of your django postgres database used for sqlalchemyby default, this uses DjangodefaultDB for the projectPOOL_SIZEThe number of connections to keep open inside the connection pool. (docs)5MAX_OVERFLOWThe number of connections to allow in connection pool “overflow”. (docs)10CREDIBLE_REGION_PROBABILITIESJSON List of Credible Region probabilities to automatically check each candidate target for'[0.25, 0.5, 0.75, 0.9, 0.95]'SAVE_TEST_ALERTSBoolean on if you want to save test nonlocalizedevents into your database (those with event_id beginning with 'M')trueSeeEngine Configurationfor
details of SQLAlchemy Engine Configuration.In your TOM project, make sure to runpython manage.py collectstaticafter installing this app, to collect its Vue pages into yourstaticfilesdirectory.If you want to automatically ingest GW events into your TOM, you should also install thetom_alertstreamsapp into your TOM and configure it to use the tom_nonlocalizedevents handler to ingest GW events. The preferred way is to use the hopigwn.gwalertstopic and set it to the handlertom_nonlocalizedevents.alertstream_handlers.igwn_event_handler.handle_igwn_message. This format has the newest Ligo O4 fields. There is legacy support for the gcn classic over kafka plaintext formatted LVC alerts using the handlertom_nonlocalizedevents.alertstream_handlers.gcn_event_handler.handle_message. There is also a handler to handle retractions via thehandle_retractionmethod in that package. For an example of what needs to be in your settings to configuretom_alertstreamsfor these streams, lookhereDevelopmentWhen any changes are made to this library, the vue files will need to be build and bundled and committed into the repo so that they can be bundled and deployed with the django package. This means that after making any vue changes, you must runnpm run buildwithin thetom_nonlocalizedevents_vuedirectory once, which will install the built files intotom_nonlocalizedevents/static/, and then those built files will need to be committed into the repo. This allows django projects using this library to get those files when runningpython manage.py collectstatic.Running the testsIn order to run the tests, run the following in your virtualenv:python manage.py test