Package: circadian
CircadianWelcome tocircadian, a computational package for the simulation and
analysis of circadian rhythmsInstallcircadiancan be installed viapip:pipinstallcircadianOverviewThecircadianpackage implements key mathematical models in the field
such as:Forger99-Forger et al. (1999)Hannay19andHannay19TP-Hannay et al. (2019)Jewett99-Kronauer et al. (1999)See all the available models atcircadian/models.pyAdditionally,circadianprovides a set of tools for simulating and
analzying circadian rhythms:Define light schedules using theLightclass and feed directly into
the modelsCalculate phase response curves using thePRCFinderclassGenerate actograms and phase plots with thecircadian.plotsmoduleFinally, the package streamlines the process of reading, processing, and
analyzing wereable data via thecircadian.readersmodule.Check out thedocumentationfor a full overview of the package and its features.ExampleThe code below shows how to simulate the circadian rhythm of a shift
worker for four different models and visualize the results in an
actogram plotimportnumpyasnpimportmatplotlib.pyplotaspltimportmatplotlib.linesaslinesfromcircadian.plotsimportActogramfromcircadian.lightsimportLightSchedulefromcircadian.modelsimportForger99,Jewett99,Hannay19,Hannay19TPdays_night=3days_day=2slam_shift=LightSchedule.ShiftWork(lux=300.0,days_on=days_night,days_off=days_day)total_days=30time=np.arange(0,24*total_days,0.10)light_values=slam_shift(time)f_model=Forger99()kj_model=Jewett99()spm_model=Hannay19()tpm_model=Hannay19TP()equilibration_reps=2initial_conditions_forger=f_model.equilibrate(time,light_values,equilibration_reps)initial_conditions_kj=kj_model.equilibrate(time,light_values,equilibration_reps)initial_conditions_spm=spm_model.equilibrate(time,light_values,equilibration_reps)initial_conditions_tpm=tpm_model.equilibrate(time,light_values,equilibration_reps)The models are integrated using an explicit Runge-Kutta 4 (RK4) schemetrajectory_f=f_model(time,initial_conditions_forger,light_values)trajectory_kj=kj_model(time,initial_conditions_kj,light_values)trajectory_spm=spm_model(time,initial_conditions_spm,light_values)trajectory_tpm=tpm_model(time,initial_conditions_tpm,light_values)The Dim Light Melatonin Onset (DLMO), an experimental measurement of
circadian phase, is calculated for each model bydlmo_f=f_model.dlmos()dlmo_kj=kj_model.dlmos()dlmo_spm=spm_model.dlmos()dlmo_tpm=tpm_model.dlmos()Lastly, the results of the simulation–DLMOs included– are visualized in
anActogramplot from thecircadian.plotsmoduleacto=Actogram(time,light_vals=light_values,opacity=1.0,smooth=False)acto.plot_phasemarker(dlmo_f,color='blue')acto.plot_phasemarker(dlmo_spm,color='darkgreen')acto.plot_phasemarker(dlmo_tpm,color='red')acto.plot_phasemarker(dlmo_kj,color='purple')# legendblue_line=lines.Line2D([],[],color='blue',label='Forger99')green_line=lines.Line2D([],[],color='darkgreen',label='Hannay19')red_line=lines.Line2D([],[],color='red',label='Hannay19TP')purple_line=lines.Line2D([],[],color='purple',label='Jewett99')plt.legend(handles=[blue_line,purple_line,green_line,red_line],loc='upper center',bbox_to_anchor=(0.5,1.12),ncol=4)plt.title("Actogram for a Simulated Shift Worker",pad=35)plt.tight_layout()plt.show()