--- layout: post status: publish published: true title: Podcast 3.25 - "It's just really annoying to be a Cubs fan." author: display_name: Corey Fineran login: Corey email<EMAIL_ADDRESS>url: '' author_login: Corey author_email<EMAIL_ADDRESS>wordpress_id: 5470 wordpress_url: http://ivyenvy.com/?p=5470 date: '2011-06-13 22:06:40 +0000' date_gmt: '2011-06-14 03:06:40 +0000' categories: - Podcast tags: - Podcast comments: [] ---
Andy, Corey and Kurt spend a lot of this episode looking at which players could, and maybe should, be traded away by the Cubs. In times like these, it's hard to not look at the future of the club. We discuss a few topics that listeners gave to us, Kurt gives us his Scary Stat of the Week and we read your entries for the photo caption contest.
We also read an email from Bob in the UK on his experiences following the Cubs from across the pond. Follow us on Twitter and "like" us on Facebook for a chance to win tickets to the Midwest League's Homerun Derby and All-Star Game. We'll give those details out on Friday.


Naveen Gogineni is an IT professional who has worked in the web industry for over a decade.
Naveen has experience in multiple technologies from Client Server to Groupware using diverse technologies like IBM Lotus Domino, Oracle, DB2, IBM Groupware tools with programming languages (Java , Lotus script), and Web technologies like DHTML, XSL, HTML5, CSS3, JavaScript, JQuery.
Naveen has experience in using JavaScript Web Frameworks like AnjularJS, NodeJS and Twitter Bootstrap, CSS Preprocessors like LESS, SOA like REST services and JSON objects.
Naveen has Knowledge of Big Data related technologies (Hadoop Architecture, Hadoop Ecosystems like Pig, Hive, Flume and Scoop, NoSQL databases like Mongo DB, Data Analysis Tools using Programming Languages, R & Python, and Machine Learning).
Naveen has Good understanding and implementation of Design Patterns, GRASP and SOLID.
Naveen is a Proactive leader with professional speaking abilities, strong problem-solving and analytical skills.
Testimonials
"I highly recommend Naveen, he brings extensive experience and a rich skill set. He can ramp-up into even highly complex projects faster than most, and knows when to ask the right questions. His work ethic and dedication require no second-guessing." —IBMer, IBM
Press Kit
Contains print-ready photo, biography, and contact information. Download press kit (3.7 MB)


TLA: Lamport's Temporal Logic of Actions
TLA
is a linear-time temporal logic introduced by Leslie Lamport in
The Temporal Logic of Actions (ACM TOPLAS 16(3), 1994,
872-923). Unlike other temporal logics, both systems and properties
are represented as logical formulas, and logical connectives such as
implication, conjunction, and existential quantification represent
structural relations such as refinement, parallel composition, and
hiding. TLA has been applied to numerous case studies.
This directory formalizes TLA in Isabelle/HOL, as follows:
- Theory Intensional prepares the
ground by introducing basic syntax for "lifted", possibl-world based
logics.
- Theories Stfun and
Action represent the state and transition
level formulas of TLA, evaluated over single states and pairs of
states.
- Theory Init introduces temporal logic
and defines conversion functions from nontemporal to temporal
formulas.
- Theory TLA axiomatizes proper temporal
logic.
Please consult the
design notes
for further information regarding the setup and use of this encoding
of TLA.
The theories are accompanied by a small number of examples:
- Inc: Lamport's increment
example, a standard TLA benchmark, illustrates an elementary TLA
proof.
- Buffer: a proof that two buffers
in a row implement a single buffer, uses a simple refinement
mapping.
- Memory: a verification of (the
untimed part of) Broy and Lamport's RPC-Memory case study,
more fully explained in LNCS 1169 (the
TLA
solution is available separately).
Stephan Merz
Last modified: Sat Mar 5 00:54:49 CET 2005


Center for eLearning
Learning Unit Demo
Navigation
Use the circles at the bottom of each page to navigate between slides.
•
Press the N or P keys on your keyboard to access the Next and Previous Slides.
Audio Player
If there is audio associated with a slide, you will see an audio controller appear.
•
If the audio controls are present press the play button to start the audio, and the pause button to stop it.
•
Do not worry if you exit a slide before the audio is complete. The audio will stop playing, and will be ready for you the next time you access the slide.
•
If you have audio issues, download / use Google Chrome or Safari.
Our Mission
Here at the Center for eLearning we are in the business of making courses for the Web. We have a team of instructional designers that work with subject matter experts to build the content for each course. Understandably, content is often delivered to us in a format that cannot be rendered using a web browser. For example, Powerpoint files, Word files, Photoshop files, and such.
As a reaction to that we put all of our content into our web based learning object. This ensures all of our content complies with existing web standards, is accessible, 508 compliant, and is as future proof as we can make it. To make the production workflow run smooth, our development team has made the learning object into template form. We built in design features, and various plug-ins that assist with teaching each lesson.
Responsive Design
We do our best here at the Center for eLearning to make sure that our content is consumable by each student who experiences our courses. We also want to make sure that it looks good, and is as future proof as possible. With that in mind, our goal for the learning object was a lofty one…device agnosticism.
To achieve our goal we turned to a responsive design development pattern. With a little forethought this has allowed us to deliver to our core audience, remain device agnostic, and retain all of our accessibility all in one fell swoop. Now, the same bit of code works across most devices, both mobile and desktop, and is resolution independent.Try it…take your browser window and resize it. Our design adapts & adjusts based on the width of your browser window. During the design process we make little tweaks to the typography, and sizes of things so the content looks good, and is consumable, at any device resolution.
The Plug-ins
While working with the ID's and SME's we found that many of the requests for features started to form a pattern. Things like multiple choice, and true false questions started popping up everywhere. Tabbed interfaces, and styled tables were the norm. We analyzed the patterns and came up with plug-ins that we can implement in the template very quickly.
Accessibility Features
All of our content can be viewed even with no javascript or CSS attached.
Applied ARIA roles to elements suggested in the standard.
Hidden "skip navigation" link for use with screen reader.
Liberal use of the alt tag on each img elements
All Content is section 501/508, W3C validated standard HTML
No use of structural elements to contain content.
We use semantic HTML
All video's contain downloadable transcripts.
Standard navigation scheme on each slide.
Hidden links in each Nav element that lead to the main content area of the slide


Will return LinkedList instance
Value that will store in linkedlist node
value that will be removed from Linkedlist
boolean
array
Value
Value's position where the new value going to be inserted
T
T
Value that needs to be search
boolean
Generated using TypeDoc
Linked lists are among the simplest and most common data structures. They can be used to implement several other common abstract data types, including lists, stacks, queues, associative arrays, and S-expressions, though it is not uncommon to implement those data structures directly without using a linked list as the basis. The principal benefit of a linked list over a conventional array is that the list elements can be easily inserted or removed without reallocation or reorganization of the entire structure because the data items need not be stored contiguously in memory or on disk, while restructuring an array at run-time is a much more expensive operation. Linked lists allow insertion and removal of nodes at any point in the list, and allow doing so with a constant number of operations by keeping the link previous to the link being added or removed in memory during list traversal.


May 3, 2011. Marion Cotillard will next appear on screen in "Midnight in Paris," the Hey Marion, we all know Miranda Tate is going to be Talia Al Ghul,
Marion Cotillard, actresses, Batman The Dark Knight Rises, Talia Al Ghul, Maranda · Marion Cotillard actresses Batman The Dark Knight Rises Talia Al Ghul
Feb 14, 2011 Marion Cotillard Probably in Batman, Too marion-cotillard jpg Odds are on her playing Liam Neeson's daughter, Talia al Ghul, to give Sep 8, 2011 Who Marion says she's playing and who she might be playing are two of the Internet speculates that Cotillard is, in fact, playing Talia Al Ghul, May 9, 2012 Marion Cotillard Reveals 'The Dark Knight Rises' Spoilers And Character. by Marion Cotillard, Miranda Tate, would in fact be Talia al Ghul.
Apr 19, 2011. 'The Dark Knight Rises' officially adds Marion Cotillard, Joseph I wouldn't be surprised if Cotillard is Talia al-Ghul to take the trilogy back to
Feb 14, 2011 Does this mean that Talia al Ghul will be making. an appearance in the film after all? Keira Knightley replacing Marion Cotillard in Cosmopolis May 9, 2012. Marion Cotillard Spills on Her 'Dark Knight Rises' Character. In the comics, Talia al Ghul becomes a love. interest for Batman/Bruce Wayne, May 10, 2012. Marion Cotillard Is About To Break Bat-Fans' Hearts, But She'll Look the apparent Wayne Enterprises board member was really Talia al Ghul Nov 28, 2012 Marion Cotillard has no regrets about. all her Dark Knight Rises lies Miranda was really Talia al Ghul, the estranged. daughter of Ra's (Liam
Feb 14, 2011 [Update] It appears as though Catillard's representatives have confirmed that she is 'in talks' for a role in TDKR No confirmation on what the
9 May 2012. A pesar de los muchos rumores, según ha declarado la propia Marion Cotillard a The Hollywood Reporter, en ningún caso ella interpretará a 9 May. 2012 Según The Hollywood Reporter, la actriz que supuestamente iba a interpretar a Talia al Ghul iba a ser Marion Cotillard, pero al parecer no va a Jun 21, 2011 Rose Byrne As Talia al Ghul Rumor has it that Miranda Tate, the character played by Marion Cotillard in The Dark Knight Rises, could turn out Photo Sep 4, 2012 3:35 am · 76 notes · bane · bane x talia · crack · talia al ghul · talia x bane · tdkr · tom hardy · marion cotillard · au · princessofmyr likes this. Jul 23, 2013 July 20th we'll know if Talia Al Ghul is appearing. in Christopher Nolan's final Batman film Fans have speculated that Marion Cotillard will be


The core datasets used for this task were taken from Kaggle.
This is a well-analysed dataset with over 100 kernels pinned against it on Kaggle. To enrich my analysis, and make it original, I also scraped some other datasets:
- I used a dataset of capital city Latitude & Longitudes from Techslides.
- I manually created a new dataset of olympic host city Altitudes, Latitudes & Longitudes from mapcoordinates.
I used a Jupyter Notebook (Python 3) to narrate my analysis.
ON FIRST RUN: execute the code below to download the geopy dependency.
import sys
!{sys.executable} -m pip install geopy
The following packages were used for the analysis:
#load packages
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import unittest
#import difflib - not used
from geopy.distance import vincenty, geodesic
%pylab inline
%matplotlib inline
My analysis is laid out as follows:
Following a review of the data available and a brainstorming session, I decided to focus my efforts on the following areas:
Summary statistics to explore how athletes have changed over the years
#Loading athlete data
data = pd.read_csv('athlete_events.csv', index_col = 'ID')
data.head(10)
A couple of early observations, upon loading the data:
- NA in the Medal column have been converted to NaN, needs correcting.
- Team variable combines > 1 Country, which is interesting, but unhelpful, will look to merge with the NOC table to clean.
- It looks like Games is just a concat of Year + Season, should remove, once checked.
- there's some NaN's in the Height & Weight Column , will need to be cleaned if using these columns.
- There's some interesting sports from way-back-when - including Tug-Of-War, maybe these would be interesting to look at!
#Replace NA in Medal column with None
data['Medal'] = data['Medal'].fillna("None")
data['Medal'].head()
I want to use the NOC dataset to get a better representation of where an athlete is from over 'Team' variable.
#Loading in the NOC dataset
NOC = pd.read_csv('noc_regions.csv')
Later on in the analysis, I do fuzzy matching of Country Names to join with the Capital Cities metadata dataset. After doing this, I changed this part of the script to include the fuzzy matches that the algorithm highlighted. i.e. before it is merged in the main data frame.
NOC['region'].replace(['US', 'USA', 'UK', 'Saint Kitts', 'Trinidad', 'Boliva', 'Virgin Islands, US', 'Curacao'],
['United States', 'United States', 'United Kingdom', 'Saint Kitts and Nevis',
'Trinidad and Tobago', 'Bolivia', 'US Virgin Islands', 'Cura̤ao'],
inplace = True)
data = pd.merge(data, NOC, left_on='NOC', right_on='NOC')
#before discarding, check to see if Games is in Year + Season for all values, then discard.
if (data['Games'].equals(data['Year'].map(str) + " " + data['Season'])):
data = data.drop(['notes', 'Games'], axis=1)
else:
data = data.drop(['notes'], axis=1)
data.sample()
We can see above that Games == Year + Season for all values, and so is removed from the dataset.
# assign a list of (ColumnName, NullCount) tuples to null_list using list comprehension
null_list = [(col, data[col].isnull().sum()) for col in data.columns]
print(null_list)
df_nulls = pd.DataFrame(null_list)
df_nulls
We can see that only the Age, Height, Weight & the newly created region columns contain null values. My instinct tells me that this is because they didn't record age/height/weight measurements before a certain date. We'll have to investigate the region nulls a bit further.
We can see below that these are being caused by the Refugee Olympic Athletes Team, Unknowns and Tuvalu. I will remove these rows from the dataset.
#find out which points haven't merged properly
missing_region_datapoints = data[data.region.isnull()]
print(len(missing_region_datapoints))
missing_region_datapoints.sample(5)
# remove rows with NaN in the region column, using prints to check
print(len(data))
data = data[pd.notnull(data['region'])]
print(len(data))
I chose to use external datasets to enrich the analyse and build novel feature sets. This section shows how I went about it. In this section most of the code is wrapped around unit tests to ensure the transformation have been carried out as expected.
Firstly, i created a map of Host Cities to Host Country, which wasn't originally in the dataset. This will be when looking at the 'Home-advantage' hypothesis.
#manually created a dictionary map from city -> country
city_to_country = { 'Barcelona':'Spain', 'London':'UK', 'Antwerpen':'Belgium', 'Paris':'France', 'Calgary':'Canada',
'Albertville':'France', 'Lillehammer':'Norway', 'Los Angeles':'USA', 'Salt Lake City':'USA',
'Helsinki':'Finland', 'Lake Placid':'USA', 'Sydney':'Australia', 'Atlanta':'USA', 'Stockholm':'Sweden',
'Sochi':'Russia', 'Nagano':'Japan', 'Torino':'Italy', 'Beijing':'China', 'Rio de Janeiro':'Brazil', 'Athina':'Greece',
'Squaw Valley':'USA', 'Innsbruck':'Austria', 'Sarajevo': 'Bosnia and Herzegovina', 'Mexico City':'Mexico', 'Munich': 'Germany',
'Seoul': 'South Korea', 'Berlin': 'Germany', 'Oslo': 'Norway', "Cortina d'Ampezzo":'Italy', 'Melbourne': 'Australia', 'Roma': 'Italy',
'Amsterdam': 'Netherlands', 'Montreal': 'Canada', 'Moskva': 'Russia', 'Tokyo':'Japan', 'Vancouver':'Canada', 'Grenoble':'France',
'Sapporo':'Japan', 'Chamonix':'France', 'St. Louis':'USA', 'Sankt Moritz':'Switzerland',
'Garmisch-Partenkirchen':'Germany'}
#simple dictionary map
def map_cities_to_countries(data, dict_city_to_country) :
data['Host_Country'] = data['City'].map(dict_city_to_country)
return data
# unit test the mapping to ensure the merge did not introduce nulls into the dataset.
class TestMapping(unittest.TestCase):
# Create the unit test
def test_mapping(self):
map_cities_to_countries(data, city_to_country)
count_na = data['Medal'].isnull().sum()
# Test that the mapping has not introduces NA's
self.assertEqual(0, count_na)
# Run the test
unittest.main(argv=['ignored', '-v'], exit=False)
#have along at the result - we now have a new variable HostCountry
data.head()
host_cities_metadata = pd.read_csv('hostcities.csv', names=['HostCity', 'HostLatitude','HostLongitude','HostAltitude'])
host_cities_metadata = host_cities_metadata.iloc[1:]
host_cities_metadata.head()
#merge the host cities metadata into the main data frame
data = pd.merge(data, host_cities_metadata, left_on='City', right_on='HostCity')
data.head(5)
missing_HostLongitude_datapoints = data[data.HostLongitude.isnull()]
missing_HostLongitude_datapoints
The empty dataframe above shows the merge was successful.
This dataset contains the CountryName, CapitalName, CapitalLatitude, CapitalLongitude, CountryCode (not used) and ContinentName. My plan is merge this dataset on the Athletes 'region' variable, that we originally got from the NOC dataset. I'm doing this in preparation for answering the 'distance-travelled' research question; my hypothesis is that athletes that travel the furthest for the games are most disadvantaged due to jet-lag/ acclimatisation etc. I appreciate using the capital city lat/long of an athletes country is not ideal (as they may not live in the capital, or might live abroad etc), but serves as an OK proxy for this analysis.
#load in the data
names = ['CountryName', 'CapitalName', 'CapitalLatitude','CapitalLongitude', 'CountryCode', 'ContinentName']
capital_cities_metadata = pd.read_csv('country-capitals.csv', names = names)
#remove the first row as it's a duplicate of the column headers
capital_cities_metadata = capital_cities_metadata.iloc[1:]
# describe method to undertsand the shape of the dataset.
capital_cities_metadata.describe()
Before I merge the capital cities metadata dataset into the main 'data' frame, I'm going to perform an outer join to create a new variable called data_new. In doing so, I can then identify Country names are not joining properly. This then becomes a fuzzy matching problem between two lists of strings from different sources.
#df_pitches = pd.read_csv("df_pitches_2016.csv")
#df_salaries = pd.read_csv("df_salaries_2016.csv")
# Creating my merged data frame
data_new = data.merge(capital_cities_metadata,
left_on='region',
right_on='CountryName',
how='outer',
)
# Only selecing pitchers with a lot of pitches
#data_new = data_new[data_new > 1000][['CapitalLongitude']]
#Selecing people with missing salaries
missing_latitude = data_new[data_new.CapitalLatitude.isnull()]
#Displaying results
missing_latitude.reset_index(inplace=True,drop='index')
missing_latitude.sample(40)
missing_latitude['region'].unique()
To try and facilitate as clean a merge as possible, I used a fuzzy matching algorithm from the fuzzywuzzy package. This highlighted inconsistencies in the string, which I then dealt with earlier on in the analysis (up the page), then re-ran the script. This was because I needed to make the string replacements prior to merge the NOC & main data frames.
from fuzzywuzzy import fuzz
def match_name(name, list_names, min_score=0):
# -1 score incase we don't get any matches
max_score = -1
# Returning empty name for no match as well
max_name = ""
# Iternating over all names in the other
for name2 in list_names:
#Finding fuzzy match score
score = fuzz.ratio(name, name2)
# Checking if we are above our threshold and have a better score
if (score > min_score) & (score > max_score):
max_name = name2
max_score = score
return (max_name, max_score)
# List for dicts for easy dataframe creation
dict_list = []
# iterating over our players without salaries found above
for name in missing_latitude.region.unique():
# Use our method to find best match, we can set a threshold here
match = match_name(name, capital_cities_metadata.CountryName, 50)
# New dict for storing data
dict_ = {}
dict_.update({"country_name" : name})
dict_.update({"match_name" : match[0]})
dict_.update({"score" : match[1]})
dict_list.append(dict_)
merge_table = pd.DataFrame(dict_list)
# Display results
merge_table
The above 'remainder' from the fuzzy matching will be discarded from the dataset (given the time constraints).
#merge the capital cities metadata into the main data frame
data = pd.merge(data, capital_cities_metadata, left_on='region', right_on='CountryName')
data.head()
# remove rows with NaN in the region column, using prints to check
print(len(data))
data = data[pd.notnull(data.region)]
print(len(data))
Now that we have lat/long pairs of 1) where the athlete lives, and 2) where the games is being held, we can calcuate the Vincenty distance (from GeoPy).
The Vincenty distance is the geodesic distance between two points on the earth, taking into account the Earth's elliptic shape; using Vincenty’s method.
def calculate_vincenty_distance(distances) :
'''
This function first creates (Latitude, Longitude) tuples for both the Athletes Home City and the Olympic Host City.
Then, calculates a new column 'vincenty_distance' using np.vectorize (as the vincenty method requires two inputs)
Inputs: distances - dataframe with cols = ['CapitalLatitude', 'CapitalLongitude', 'HostLatitude', 'HostLongitude']
Outputs: same dataframe with new column ['vincenty_distance']
'''
distances['AthleteLatLong'] = list(zip(distances.CapitalLatitude, distances.CapitalLongitude))
distances['HostCityLatLong'] = list(zip(distances.HostLatitude, distances.HostLongitude))
distances['vincenty_distance'] = np.vectorize(geodesic)(distances['AthleteLatLong'], distances['HostCityLatLong'])
return distances
# create a new dataframe away from the original data, and then concat back into the original dataframe
new_data = data
distances = new_data.ix[:, ['CapitalLongitude', 'CapitalLatitude','HostLongitude','HostLatitude']]
#normally I'd one class for all unit tests, but I've created a new one here for code readability in a notebook.
class TestCalculations(unittest.TestCase):
# Create the unit test
def test_vincenty_calculation(self):
#create a test tuple of data from the first row of 'data' dataframe
athleteLatLong0 = (39.91666667, 116.383333) # first row
#create a test tuple of data from the first row of 'data' dataframe
hostLatLong0 = (41.3828939, 2.1774322)
#calculate the vincenty distance on the test data
distanceTest = geodesic(athleteLatLong0, hostLatLong0).km
#calculate vincenty distance using our function calculate_vincenty_distance
calculate_vincenty_distance(distances)
# get the result of the first row
function_output = distances.loc[0,'vincenty_distance']
# Test that the result of the two method asserts equal.
self.assertAlmostEqual(function_output, distanceTest,5)
# Run the test
unittest.main(argv=['ignored', '-v'], exit=False)
#cast the vincenty distance from Distance ojbect to float
distances['vincenty_distance'] = distances['vincenty_distance'].astype(str).str[:-3].astype(float)
data = pd.concat([data, distances['vincenty_distance']], axis=1)
#take a look at the results
data.head()
# see what columns we now have
data.columns
cols_to_keep = ['Name', 'Sex', 'Age', 'Team', 'Height', 'Weight', 'Year', 'Season',
'City', 'Sport', 'Event', 'Medal', 'region', 'Host_Country',
'CapitalName', 'ContinentName', 'vincenty_distance', 'HostAltitude']
clean_data = pd.DataFrame(data, columns=cols_to_keep)
clean_data.head()
clean_data.columns = ['Name', 'Sex', 'Age', 'Team', 'Height', 'Weight', 'Year', 'Season',
'City', 'Sport', 'Event', 'Medal', 'AthleteCountry', 'HostCountry',
'AthletesHomeCapital', 'AthletesHomeContinent', 'DistanceTravelled', 'HostCityAltitude']
clean_data.head()
df_medals = pd.get_dummies(clean_data['Medal'])
# Join the dummy variables to the main dataframe
clean_data = pd.concat([clean_data, df_medals], axis=1)
pd.options.display.max_columns = None
clean_data.head()
clean_data['TotalMedals'] = clean_data['Gold'] + clean_data['Silver'] + clean_data['Bronze']
clean_data['AnyMedals'] = np.where(clean_data.loc[:,'Medal'] == 'None', 0, 1)
clean_data.sample(10)
#Proportion
ProportionMvW = data.groupby(['Year', 'Sex']).agg({'Name': 'count'})
percentages = ProportionMvW.groupby(level=0).apply(lambda x:
100 * x / float(x.sum()))
percentages = percentages.reset_index()
a4_dims = (11.7, 8.27)
fig, ax = pyplot.subplots(figsize=a4_dims)
ax = sns.barplot(x="Year", y="Name", hue="Sex", data=percentages, palette="Set2")
ax.set_xticklabels(ax.get_xticklabels(), rotation=90, ha="right")
ax.set_title('Proportion of men and women competing in the olympic games')
ax.set_ylabel('Percentage of athletes for each gender')
ax.legend(loc="upper right")
plt.show()
Insights:
The visualisation below shows how the distribution of men and women's ages have changed since 1896, split by Sex and Summer/Winter Olympics
sns.set(rc={'figure.figsize':(20,20)})
g = sns.FacetGrid(clean_data, col="Season", row="Sex", size=6)
g = g.map(sns.boxplot, "Year", 'Age')
g.set_xticklabels(ax.get_xticklabels(), rotation=90, ha="right")
show()
Insights:
#create a table of year,countryname & sex to be merged into a count of each later.
mini_country_table = clean_data[clean_data['Season'] == 'Summer'].loc[:, ['Year','AthleteCountry', 'Name', 'Sex']].drop_duplicates()
mini_country_table.head()
# Create a pivot table to count gender wise representation of each team in each year
CountAthletesByCountry = pd.pivot_table(mini_country_table,
index = ['Year', 'AthleteCountry'],
columns = 'Sex',
aggfunc = 'count').reset_index()
# rename columns as per column names in the 0th level
CountAthletesByCountry.columns = CountAthletesByCountry.columns.get_level_values(0)
# rename the columns appropriately
CountAthletesByCountry.columns = ['Year', 'AthleteCountry', 'Female_Athletes', 'Male_Athletes']
# get total athletes per team-year
CountAthletesByCountry['Total_Athletes'] = CountAthletesByCountry['Female_Athletes'] + \
CountAthletesByCountry['Male_Athletes']
uk_athletes = CountAthletesByCountry[CountAthletesByCountry['AthleteCountry'] == "United Kingdom"]
uk_athletes.fillna(0, inplace = True)
uk_athletes.set_index('Year', inplace = True)
swedish_athletes = CountAthletesByCountry[CountAthletesByCountry['AthleteCountry'] == "Sweden"]
swedish_athletes.set_index('Year', inplace = True)
japanese_athletes = CountAthletesByCountry[CountAthletesByCountry['AthleteCountry'] == "Japan"]
japanese_athletes.set_index('Year', inplace = True)
germany_athletes = CountAthletesByCountry[CountAthletesByCountry['AthleteCountry'] == "Germany"]
germany_athletes.set_index('Year', inplace = True)
# Plot the values of male, female and total athletes using bar charts and the line charts.
fig, ((ax1, ax2), (ax3, ax4)) = subplots(nrows = 2, ncols = 2, figsize = (20, 20), sharey = True)
fig.subplots_adjust(hspace = 0.3)
# Plot team Australia's contingent size
ax1.bar(uk_athletes.index.values, uk_athletes['Male_Athletes'], width = -1, align = 'edge', label = 'Male Athletes')
ax1.bar(uk_athletes.index.values, uk_athletes['Female_Athletes'], width = 1, align = 'edge', label = 'Female Athletes')
ax1.plot(uk_athletes.index.values, uk_athletes['Total_Athletes'], linestyle = ':', color = 'black', label = 'Total Athletes',
marker = 'o')
ax1.legend(loc="upper right")
ax1.set_title('UK Athletes :\nParticipation since 1896')
ax1.set_ylabel('Count of Athletes')
# Plot German athlete participation
ax2.bar(germany_athletes.index.values, germany_athletes['Male_Athletes'], width = -1, align = 'edge', label = 'Male Athletes')
ax2.bar(germany_athletes.index.values, germany_athletes['Female_Athletes'], width = 1, align = 'edge', label = 'Female Athletes')
ax2.plot(germany_athletes.index.values, germany_athletes['Total_Athletes'], linestyle = ':', color = 'black', label = 'Total Athletes',
marker = 'o')
ax2.set_title('Germany Athletes :\nParticipation since 1896')
ax2.legend(loc="upper left")
ax2.set_ylabel('Count of Athletes')
# Plot Japan's contingent size
ax3.bar(japanese_athletes.index.values, japanese_athletes['Male_Athletes'], width = -1, align = 'edge', label = 'Male Athletes')
ax3.bar(japanese_athletes.index.values, japanese_athletes['Female_Athletes'], width = 1, align = 'edge', label = 'Female Athletes')
ax3.plot(japanese_athletes.index.values, japanese_athletes['Total_Athletes'], linestyle = ':', color = 'black', label = 'Total Athletes',
marker = 'o')
ax3.set_title('Japanese Athletes :\nParticipation since 1896')
ax3.set_ylabel('Count of Athletes')
ax3.legend(loc="upper right")
# Plot team Swedens's contingent size
ax4.bar(swedish_athletes.index.values, swedish_athletes['Male_Athletes'], width = -1, align = 'edge', label = 'Male Athletes')
ax4.bar(swedish_athletes.index.values, swedish_athletes['Female_Athletes'], width = 1, align = 'edge', label = 'Female Athletes')
ax4.plot(swedish_athletes.index.values, swedish_athletes['Total_Athletes'], linestyle = ':', color = 'black', label = 'Total Athletes',
marker = 'o')
ax4.set_title('Swedish Athletes :\nParticipation since 1896')
ax4.set_ylabel('Count of Athletes')
ax4.legend(loc="upper left")
show()
Insights:
This is where we bring in the engineered feature 'DistanceTravelled' - the Vincenty distance between an athletes home capital and where the games took place. My hypothesis is that distance travelled has an impact of number of medals a Country receives (due to things physiological factors like jet-mind, blood flow etc), I also further hypothesise that the effect of this will be reduced in the modern era (I've chosen Pre/Post 1980).
To investigate these hypothesese, I've split the dataset (pre and post 1980) and calculate correlation between this distance and medals won. Obviously, whether a country has a high medal count is a multivariate problem and would require a more in-depth analysis in practice.
# Get just the medalists
Subset_Medalists = clean_data['AnyMedals'] == 1
#Create a new dataset to be merged with the medal table dataset below
subset_distancetravelled = clean_data.loc[:, ['Year', 'AthleteCountry', 'DistanceTravelled']].drop_duplicates()
medal_tally = clean_data.groupby(['Year','AthleteCountry'])['TotalMedals'].agg('sum').reset_index()
medal_tally_byDistance = medal_tally.merge(subset_distancetravelled,
left_on = ['Year', 'AthleteCountry'],
right_on = ['Year', 'AthleteCountry'],
how = 'left')
#create two datasets to compare correlations
Pre_1980_MedalTallyByDistance = medal_tally_byDistance[medal_tally_byDistance['Year']<=1980]
Post_1980_MedalTallyByDistance = medal_tally_byDistance[medal_tally_byDistance['Year']>1980]
medal_tally_byDistance.head()
selected_rows = Pre_1980_MedalTallyByDistance['TotalMedals'] > 0
correlation = Pre_1980_MedalTallyByDistance.loc[selected_rows, ['DistanceTravelled', 'TotalMedals']].corr()['TotalMedals'][0]
plot(Pre_1980_MedalTallyByDistance.loc[selected_rows, 'DistanceTravelled'],
Pre_1980_MedalTallyByDistance.loc[selected_rows, 'TotalMedals'] ,
linestyle = 'none',
marker = 'o',
alpha = 0.4)
xlabel('Distance Travelled')
ylabel('Number of Medals')
title('PRE-1980 - Distance travelled versus medal tally')
text(np.nanpercentile(Pre_1980_MedalTallyByDistance['DistanceTravelled'], 99.6),
max(Pre_1980_MedalTallyByDistance['TotalMedals']) - 50,
"Correlation = " + str(correlation))
selected_rows = Post_1980_MedalTallyByDistance['TotalMedals'] > 0
correlation = Post_1980_MedalTallyByDistance.loc[selected_rows, ['DistanceTravelled', 'TotalMedals']].corr()['TotalMedals'][0]
plot(Post_1980_MedalTallyByDistance.loc[selected_rows, 'DistanceTravelled'],
Post_1980_MedalTallyByDistance.loc[selected_rows, 'TotalMedals'] ,
linestyle = 'none',
marker = 'o',
alpha = 0.4)
xlabel('Distance Travelled')
ylabel('Number of Medals')
title('POST-1960 - Distance travelled versus medal tally')
text(np.nanpercentile(Post_1980_MedalTallyByDistance['DistanceTravelled'], 99.6),
max(Post_1980_MedalTallyByDistance['TotalMedals']) - 50,
"Correlation = " + str(correlation))
Insights:
This was an enjoyable task! I focused my efforts on data engineering and manfuactures some novel features. The following insights were of most interest to me:
Given more time, I would like to:
It wouldn't be a proper Olympic analysis without a look at how the Jamaican bobsleigh team have done over the years
#df[(df['coverage'] > 50) & (df['reports'] < 4)]
jamaicans = clean_data[(clean_data['AthleteCountry'] == 'Jamaica') & (clean_data['Sport'] == 'Bobsleigh') ]
jamaican_grouped = jamaicans.groupby(['Year','City'])['TotalMedals'].agg('sum').reset_index()
jamaican_grouped
new_data = {'Year': [2018, 2022], 'City': ["Pyeongchang", "Beijing"], 'TotalMedals': [0, NaN]}
future_results = pd.DataFrame(new_data)
combined = pd.concat([jamaican_grouped, future_results])
combined
plt.bar(combined['Year'],combined['TotalMedals'] )
fig.suptitle('test title', fontsize=20)
plt.xlabel('Olympic Year', fontsize=18)
plt.ylabel('Number of medals won', fontsize=16)
plt.ylim((0,10))
plt.xticks(combined['Year'])
Hope you enjoyed reading!


Rules
Listen to the song clip, and put the lyrics that follow in order.
The faster that you get the lyrics in order, the more points you get!
three
songs
Listen to the song clip, and put the lyrics that follow in order.
The faster that you get the lyrics in order, the more points you get!
three
songs


This class provides an empty implementation of FbsqlListener,
which can be extended to create a listener which only needs to handle a subset
of the available methods.
This class provides an empty implementation of FbsqlVisitor,
which can be extended to create a visitor which only needs to handle a subset
of the available methods.


Video: Gladiator Ace admits to 'selling stories' during Katie Price engagement
Former Gladiator Ace opened up to Holly Willoughby and Phillip Schofield on This Morning about his short-lived engagement to Katie Price.
The bodybuilder was engaged to the pin-up in the late 1990s, when Price was at the height of her fame as Jordan.
The pair were engaged in 1997 but broke up soon after, with Ace (real name Warren Furman) splashing out on over £3,000 for the ring.
Joining the This Morning sofa, the TV star opened up about the relationship.
Advertisement Advertisement
‘We were very similar people,’ Furman began. ‘[We] both grew up in similar circumstances – working class.’
‘We both took our clothes off for a living in a way,’ he continued. ‘I wore the lycra. We had a lot of time together as well.’
The 47-year-old also admitted fame was a huge aspect of their relationship – something that he said he struggled with.
‘We were both deriving our identities from being relevant in the media,’ he explained. ‘We were both selling stories.’
Life for the Gladiator, however, has changed significantly since he was a Saturday night prime time TV superstar. He opened up to Holly and Phil about finding religion after becoming disillusioned with fame.
‘I went on a spiritual search because I thought celebrity culture would fulfill me but it was actually quite lonely,’ he told the presenting duo.
‘Nobody told me the gospel so when I looked at the true gladiator story, it was Jesus’ teaching that closed the gladiator [pits].’
Pricey also hit the headlines today after declaring war against I’m A Celebrity spin-off host Emily Atack.
During Tuesday’s Extra Camp, the former Inbetweeners star threw shade at Katie and Peter Andre by joking that presenters Joel Dommett and Adam Thomas needed to get tested for diseases after plunging into the same pool that the former couple first kissed in.
Advertisement Advertisement
‘This is where Katie Price and Peter Andre had fondles,’ Joel proudly boasted to his co-host. But back in the studio, Emily teased: ‘I hope you boys went to the clinic after being in that pool.’
A source said: ‘She was telling people that she can’t believe Emily would say something so snide and if she “wants a problem, I’ll give her a problem”.’
Eek!
This Morning airs weekdays from 10.30am on ITV.
Got a showbiz story?
If you've got a story, video or pictures get in touch with the Metro.co.uk Entertainment team by emailing us<EMAIL_ADDRESS>calling 020 3615 2145 or by visiting our Submit Stuff page - we'd love to hear from you.


Weepo Client
Home
New Transaction
Create Wallet
Wallet Generator
Click on the button below to generate your blockchain wallet
Public Key:
Private Key:
IMPORTANT
Save your private and public keys. These keys cannot be recovered!
Don't share your private key with anyone!


--- layout: post title: "Laniakea Live build deployment has been fixed" subtitle: "Galaxy Live Build can now be deployed." date: 2020-04-16 005:00:00 -0400 background: '/img/posts/all_systems_go.jpg' ---
Dear Users,
the problem with Live Build deployments has been fixed. We apologize for the inconvenience. Thanks a lot.
The Laniakea team.


Your Place in the World
Governments are gone, and corporations have taken their place. Their three-sided war has chilled to mud-slinging and posturing. Historians see the ancient days of traditional government through rose-colored glasses and the ruins of a space-faring world. Only now has society realized re-industrialization. Far below the corporate leadership are the debt slaves, without hope in the world. In between, a dense web of child-companies employ nobled houses on oral contracts, as peace-keepers and figureheads. The most honored and sought-after of these families have inherited technology of the old days. Armor, two-story tall weapons of war. Only specialists can repair Armor, and only with great difficulty. For all their power, corporations cannot make any but pale imitations.   They need you to protect them; you need your corporate masters to continue allowing it…
The World Around You
The Mega-Corporations
- Marsoleil
- Oldest of the major corporations; currently the only corp to produce full-scale Armor of their own, though it pales in comparison to what was being made long ago, before the decline. Outside of military applications, they are a leader in transportation of all sorts.
- Vengeresse
- Small-Arms and Electronic focus, and the youngest of the 3 corporations. Though Marsoleil has the best records of the Golden Age, Vengeresse leadership believes that their overreliance on Golden-Age technology has prevented them from learning new lessons and treading new ground.
- Canularéseau
- Communications giant. Currently the most advanced communications technology, the only Corp capable of long-distance (continent-spanning) technology. They lease the technology, on a subscription basis, to other Corporations, but listen in on all communications going over their wires. (Other Corporations use traditional radio.)


Number
Location
Rescued
{% for victim in victims %}
{{ victim.phone_number }}
{{ victim.location }}
{% endfor %}


In ODM2 lingo, sites are a type of sampling feature. They must have:
- a unique short code name (max 50 characters),
- a unique UUID (which can be generated with the uuid package),
- and be classified as one of the pre-defined types of sampling features such as “Site” or “Weather station”.
They can also have:
- a longer name (max 255 characters),
- even longer description (max 5000 characters),
- spatial/geometry information,
- elevation information,
- annotations like a type of “Site group”,
- defined relationships to other sites.
All actions must be performed at/on/to a sampling feature!
Add a site without any geographic info
Add points from lat lon data
# db_insert_sites_latlon(new_sites)
Add points from a kmz (Google Earth) file
Add relationships between sites
If sites are related to each other, make use of the relatedfeatures
table by specifying parent-child or other types of relationships.
This allows for making a network graph showing how sites are related to each other.
Add Site Group annotations
Add annotations about groups of sites.


25 Guest Dresses That Make Sense for a Winter Wedding
by Justine CarreonDid you even attend a wedding if you didn't Instagram how good you looked, specifically in a photo booth shoot complete with quirky props? We don't think so. But the situation can be challenging when searching for a grid-worthy option that can handle a winter forecast. The solution lies with dresses that play nice with tights, long sleeves in heavy fabrics, and jewel-toned velvets that look great against a snowy backdrop. Shop our edit of 24 wedding guest dresses that won't outshine the bride—and one bonus style that does—here.
Mermaid Evening Dress
MUXXN amazon.com
$58.88
$39.99 (32% off)
SHOP NOW
You can't really beat a $40 dress, especially one with over 1,600 glowing reviews.
Bodice Metallic Dress
J.Crew jcrew.com
$248.00
SHOP NOW
Try this gilded look with all gold accessories.
Illusion Yoke Crepe Sheath Dress
Maggy London nordstrom.com
$148.00
SHOP NOW
The sultry neckline on this affordable dress is loved by over four hundred five-star reviews on Nordstrom.
Versatile Ruched Dress
Wilfred aritzia.com
$148.00
SHOP NOW
Choose your own adventure with adjustable side ties.
Layered Midi Dress
Jonathan Simkhai net-a-porter.com
$745.00
SHOP NOW
For those who can't decide between a bodycon lace dress versus a silky slip: Wear both.
Monica Knit Dress
Rixo rixo.co.uk
£255.00
SHOP NOW
You're basically wearing a sweater to a wedding, but no one will be able to tell.
Feather-Trimmed Sequined Crepe Gown
Prabal Gurung modaoperandi.com
$3,995.00
SHOP NOW
If you shamefully aim to outdo the bride, this statement gown should do the trick. (Please, don't.)

Print Puff-Sleeve Wrap Dress
Banana Republic bananarepublic.gap.com
$139.00
SHOP NOW
Get wild on the dance floor in fiery leopard print.
Don't Be Shy Dress
Alice McCall alicemccall.com
$590.00
SHOP NOW
Pair this with sparkly tights for extra coverage.
Flounced Wrap Dress
H&M hm.com
$49.99
SHOP NOW
You might not need another LBD, but in case you did, this wrap style is only fifty bucks.
Dagma Sequin Slip Dress
Whistles whistles.com
$379.00
SHOP NOW
Your bod will look dipped in silver.
One-Shoulder Mini Dress
Wilfred aritzia.com
$168.00
SHOP NOW
Attempt a full '80s moment with this one-shoulder mini.
Twisted Velvet One-Shoulder Dress
Michelle Mason intermixonline.com
$840.00
SHOP NOW
Velvet doesn't get sexier than this asymmetric number.
Sequin Dress
Maje maje.com
$445.00
SHOP NOW
A flirty number like this will be so much fun to dance in.
Daisy Velvet Dress
Rixo rixo.co.uk
£310.00
SHOP NOW
This dress is for the grown-up goths out there.
Odile Cotton Organza Dress
Ulla Johnson intermixonline.com
$625.00
SHOP NOW
Make this investment worth it by rewearing this at a holiday party.
Sequin Double Breasted Blazer Dress
& Other Stories stories.com
$179.00
SHOP NOW
Business meets pleasure with this sparkly blazer mini dress.
Adella Knot Dress
Alejandra Alonso Rojas maison-de-mode.com
$1,395.00
SHOP NOW
It's a split decision on whether this dress is great, or great.
Gold Ruched Dress
Topshop topshop.com
$125.00
SHOP NOW
This super flattering dress won't constrict you, even after a third serving of cake.
Tied Dress
Zara zara.com
$169.00
SHOP NOW
This option doubles as an office-appropriate dress.
Ribbon Lurex Jacquard Pleated Dress
Rebecca Taylor rebeccataylor.com
$198.75
SHOP NOW
Pleats, prints, and balloon sleeves ensure you won't be dressed like any other guest.
Billie Feather-Trimmed Dress
16Arlington net-a-porter.com
$985.00
SHOP NOW
Consider these feather-trimmed sleeves for added warmth.
The Violette
Realisation Par realisationpar.com
$225.00
SHOP NOW
This dress receives the most compliments out of my entire closet.
Fitzgeral Multi Sequin Dress
LK Bennett lkbennett.com
£550.00
SHOP NOW
For the perfect kirakira moment.


Leverage results from using borrowed capital as a funding source when investing to expand the firm's asset base and generate returns on risk capital. Leverage is an investment strategy of using borrowed money—specifically, the use of various financial instruments or borrowed capital—to increase the potential return of an investment. Leverage can also refer to the amount of debt a firm uses to finance assets.
Although interconnected—since both involve borrowing—leverage and margin are not the same. Leverage refers to taking on debt, while margin is debt or borrowed money a firm uses to invest in other financial instruments.
A margin account allows you to borrow money from a broker for a fixed interest rate to purchase securities, options, or futures contracts in the anticipation of receiving substantially high returns. You can use margin to create leverage.
Leverage is a multi-faceted, complex tool. The theory sounds great, and in reality, the use of leverage can be profitable, but the reverse is also true. Leverage magnifies both gains and losses. If an investor uses leverage to make an investment and the investment moves against the investor, their loss is much greater than it would've been if they have not leveraged the investment.
For this reason, leverage should often be avoided by first-time investors until they get more experience under their belts. In the business world, a company can use leverage to generate shareholder wealth, but if it fails to do so, the interest expense and credit risk of default destroy shareholder value.
The debt-to-equity ratio is used to determine the amount of financial leverage of an entity, and it shows the proportion of debt to the company’s equity. It helps the company’s management, lenders, shareholders, and other stakeholders understand the level of risk in the company’s capital structure. It shows the likelihood of the borrowing entity facing difficulties in meeting its debt obligations or if its levels of leverage are at healthy levels. The debt-to-equity ratio is calculated as follows:
Total debt, in this case, refers to the company’s current liabilities (debts that the company intends to pay within one year or less) and long-term liabilities (debts with a maturity of more than one year).
Equity refers to the shareholder’s equity (the amount that shareholders have invested in the company) plus the amount of retained earnings (the amount that the company retained from its profits).
Companies in the manufacturing sector typically report a higher debt to equity ratio than companies in the service industry, reflecting the higher amount of the former’s investment in machinery and other assets. Usually, the ratio exceeds the US average debt to equity ratio of 54.62%
.Operating leverage is defined as the ratio of fixed costs to variable costs incurred by a company in a specific period. If the fixed costs exceed the amount of variable costs, a company is considered to have high operating leverage. Such a firm is sensitive to changes in sales volume and the volatility may affect the firm’s EBIT and returns on invested capital.
High operating leverage is common in capital-intensive firms such as manufacturing firms since they require a huge number of machines to manufacture their products. Regardless of whether the company makes sales or not, the company needs to pay fixed costs such as depreciation on equipment, overhead on manufacturing plants, and maintenance costs.


Which app were you looking for?
Captain or Direct one of our teams
Join a team and build yourself
Teach at one of our workshops
Be apart of next years lship
FC alumni and current members only


The SHI2016 Best Paper Award was given to Lena Peterson for the paper "Communicating to Employees the Implementation of Patient Online Access to Their EHR. The Case of Adult Psychiatry in Southern Sweden". Congratulations!
Proceedings are now published here.
The Scandinavian Conference on Health Informtics 2016 is organized together with the national health informatics organisations in Denmark, Norway, and Sweden and this year also the Vitalis conference. The goal of the conference is to stimulate scientific discussion of health informatics issues in the Scandinavian countries. The target audience of the conference are people doing, or having an interest in, health informatics research in a wide sense, including any development, implementation, evaluation, or teaching of information technology and/or managment in the health sector.
The conference takes place at Svenska Mässan in the city of Gothenburg, close to the city center and hotels.
| 2016-02-15 | Last day for submission (CHANGED) |
| 2016-03-10 | Acceptance decisions will be sent out |
| 2016-03-21 | Last day for submitting updated manuscripts |
| 2016-04-05 | Final program published |
The proceedings will be published at Linköping University Electronic Press.
Call for submissions as PDF.
Submissions are made through EasyChair using this link. Manuscripts are submitted as PDF documents created from the templates below.
Scientific papers are four (4) to eight (8) pages long using the format specified by the templates below. Scientific posters and abstracts are one (1) page long. Scientific papers are written in English while posters, abstracts, and workshop and panel proposals may be written in English or any Scandinavian language.
Workshop and panel sessions may be up to 90 minutes long.


{% unless site.hide_project_footer %} {% if site.github.is_project_page %}
This project is maintained by {{ site.github.owner_name }}


No topic selected. Please, select a topic
No topic selected.
Please, select a topic
{{ topic.description }}
{{ message.message }}
Username required to post messages. Set username on Home page
Username required to post messages.
Set username on Home page


The two kernels were applied to two compound-protein interaction (CPI) data sets.
- Data set 1 (DS1) consists of sentences in which an interaction verb is enclosed by a protein and a chemical compound.
- In the case of data set 2 (DS2), two biomolecules do not enclose such an interaction verb.
- These verbs have been defined in the publication of the web service prolific (Senger and Grüning et al., 2012. Mining and evaluation of molecular relationships in literature. Bioinformatics).
The data sets were created by selecting the first 40,000 PubMed abstracts from 2009 with PubMedPortable (https://github.com/KerstenDoering/PubMedPortable).
- The chemical compounds were identified with the backend of prolific using the Hettne rules (Hettne et al., 2009. A dictionary to identify small molecules and drugs in free text. Bioinformatics).
- The web service Whatizit was used for gene and protein synonyms (Rebholz-Schuhmann,D. et al., 2008. Text processing through Web services: calling Whatizit. Bioinformatics).
After automated extraction of all sentences with an interaction verb (first 20,000 abstracts for DS1) and without an interaction enclosed by two biomolecues (second 20,000 abstracts for DS2), they were displayed in HTML pages with Javascript buttons to select a status for each sentence.
- If a sentence contained at least one interacting pair of biomolecules, the status “Interaction” was selected for this sentence. The alternative was “No Interaction”.
- If the named entity recognition tools tagged false positive synonyms, they were annotated in the separate file RM_comments.csv.
- If there were non-interacting molecules in a sentence with the status “Interaction”, they were also annotated in the separate CSV table.
- If every molecule in the sentence was a false positive named entity, the status of the sentence was set to “False positive example”.
- The data set curation was done by Michael Becer, supervised by Kersten Döring.
- All potentially functional interaction pairs marked as false positives were not considered in the evaluation process of the two kernel approaches.
The number of compounds and proteins co-occurring in sentences compared to the number of true functional relationships can be considered as the baseline, stating how many positive interactions can be expected by using the concept of co-occurrences on PubMed sentences in general.
- The following table shows the evaluation of the co-occurrences approach (DS - Data set, Sent. - Sentences, Sens. - Sensitivity, Spec. - Specificity, Prec. - Precision, Acc. - Accuracy, F1 - F1 score, evaluation parameters shown in percent):
- If each relationship is predicted to be positive, the sensitivity is 100 % and the specificity is 0 %, because there are no true negative predictions.
- For this reason, the precision is equal to the accuracy value in this special case.
More information about the theoretical background of the kernels, the data sets, and other related information can be found in Kersten Döring’s Dissertation (https://www.freidok.uni-freiburg.de/data/10565).
- The SL kernel results contained in this thesis are not the results presented here, because they were generated with a customised pipeline, independently from the ppi-benchmark package.
- The PubMedPortable project is referred to as PubMed2Go in this thesis.
The script parser.py in the directories scripts/generate_XML_files/DS1/ und scripts/generate_XML_files/DS2 creates the files interactions.txt and no_interactions.txt from the HTML files in the folder data_sets.
- The names of these files refer to the basic status of all sentences inside the text file.
- Relationship_Mining_10000.html and Relationship_Mining_20000.html were concatenated to the file Relationship_Mining.html resulting in DS1. The other two HTML files represent DS2.
The script get_relations.py in the directories scripts/generate_XML_files/DS1/ und scripts/generate_XML_files/DS2 processes the files interaction.txt and no_interaction.txt using the (concatenated) file RM_comments.csv with annotations of false positive compounds (FP-C), false positive proteins (FP-P), non-interacting compounds (NI-C), and non-interacting proteins (NI-P).
- The ouptut of get_relations.py is the file training_dataset.txt.
- This file can be sorted by PubMed IDs with the command “sort -u training_dataset.txt > training_dataset_sorted.csv”, individually done with DS1 and DS2.
The script annotatedsen_to_xml.py generates the files DS1.xml and DS2.xml, building a unified XML format described by Tikk et al.
- This script was developed by Elham Abbasian in her Master Thesis, supervised by Kersten Döring.
The XML files can be checked for consistency. Furthermore, it can be seen how many documents (PubMed IDs) and sentences there are:
java -jar ConsistencyChecker.jar DS1/DS1.xml
INFO: Processing ‘DS1/DS1.xml’…
Processing corpus ‘DS1’ …
Documents seen: 830
Sentences seen: 1259
java -jar ConsistencyChecker.jar DS2/DS2.xml
INFO: Processing ‘DS2/DS2.xml’…
Processing corpus ‘DS1’ …
processed 1000 docs (2155.1724 docs/sec)
Documents seen: 1066
Sentences seen: 1494
java -jar ConsistencyChecker.jar DS1_40/DS1.xml
INFO: Processing ‘DS1_test_case_40_sentences/DS1.xml’…
Processing corpus ‘DS1’ …
Documents seen: 26
Sentences seen: 40
List of packages:
- postgresql (here: version 9.3, used to store evaluation results)
- libxml-perl (here: version 0.08, used for the generation of cross-validation splits)
- python-numpy (here: using Python 2.7, used within the make experiment steps)
- default-jdk (here: Java 7, used for the execution of JAR files)
The file “scripts/ppi-benchmark/Experiments/APG/Makefile” has got the following configuration, now:
# Produced by the pipeline
TOKENIZER=Charniak-Lease
PARSER=Charniak-Johnson-McClosky
To make use of DS1 and APG with cross-validation, the following lines need to be set in the file “scripts/ppi-benchmark/Makefile.config”:
BENCHMARKCORPORA=DS1 #DS2 #LLL #HPRD50 AIMed BioInfer IEPA
CORPORA=$(BENCHMARKCORPORA)
TEST_CORPORA=DS1 #DS2 #LLL HPRD50
KERNELS=APG #SL #ST SST PT SpT kBSPS APG cosine edit SL Kim
EXPTYPES=CV# CC CL
Set your own user to be a PostgreSLQ superuser after installation of the default package “postgresql”.
Type in the following commands to create a new user “ppi”.
- sudo useradd ppi -s /bin/false
- sudo passwd ppi
sudo su -c “psql” postgres
- CREATE USER ppi WITH PASSWORD ‘ppi’;
- CREATE DATABASE ppi;
- GRANT ALL PRIVILEGES ON DATABASE ppi TO ppi;
- CREATE LANGUAGE plpgsql;
- \q
If you do not want to insert your password everytime to connect to a PostgreSQL database, use these commands:
- touch ~/.pgpass
- chmod 600 ~/.pgpass
cat >> ~/.pgpass <<EOF
- localhost:*:ppi:ppi:ppi
- EOF
Create the tables which are needed for uploading the results. Change into scripts/ppi-benchmark/Database and execute the following command:
- psql -h localhost -d ppi -U ppi -f init-ppiCV.sql
If the following files are not executable after cloning this repository, make them executable with the command “sudo chmod +x <file>”
- scripts/APG_pipeline_DS1.sh
- scripts/APG_pipeline_DS2.sh
- scripts/SL_pipeline_DS1.sh
- scripts/SL_pipeline_DS1.sh
- scripts/CPI-corpora-preparing/bllip-parser/first-stage/PARSE/parseIt
- scripts/CPI-corpora-preparing/bllip-parser/second-stage/programs/features/best-parses
- scripts/ppi-benchmark/Parsing/Charniak-Lease-2006Aug-reranking-parser/reranking-parser/first-stage/PARSE/parseIt
- scripts/ppi-benchmark/Parsing/Charniak-Lease-2006Aug-reranking-parser/reranking-parser/second-stage/programs/features/best-parses
- results/summary/jSRE/get_csv_results.sh
- results/summary/APG/get_csv_results.sh
It is recommended that the folders CPI-corpora-preparing, generate_XML_files, and ppi-benchmark are copied with the shell scripts APG_pipeline_DS1.sh and APG_pipeline_DS2.sh to another directory to store these empty versions as a backup.
- The path to the folder from which the pipeline should be executed needs to be set in the file “scripts/ppi-benchmark/Makefile.config” in line 7, e.g. like this:
- baseDir=/home/<user>/Desktop/ppi-benchmark
While the complete DS1 and DS2 runtime is about several hours, the test case takes around 6 min on a notebook with an Intel Core i7-6700HQ (4x 2,6 GHz).
- To use this test data set, go to your (new) working directory and change into the folder scripts/generate_XML_files/DS1_test_case_40_sentences to copy the file DS1.xml into the directory scripts/generate_XML_files/DS1.
Start the pipeline by executing the shell script in the command-line:
- ./APG_pipeline_DS1.sh
- The script contains more comments on the different preprocessing and make experiment steps.
- The runtime can be checked considering the time written to the command-line before the script terminates.
If you want to repeat the evaluation procedure, execute the following steps:
- Remove all files in the folder output, except average.py and header.py.
- ./get_csv_results.sh
- Change into the directory output.
- python average.py
- cat DS1*average.csv > DS1_average.csv
- cat DS2*average.csv > DS2_average.csv
- python header.py
- Check the files DS1_average_header.csv and DS2_average_header.csv. They exist as a backup in the folder results/summary/APG/final/ and the selected SQL results are stored as a backup in the folder results/summary/APG/backup_original.
The following table shows the results of the APG kernel pipeline for DS1 and DS2 (DS - Data set, Sent. - Sentences, Sens. - Sensitivity, Spec. - Specificity, Prec. - Precision, Acc. - Accuracy, F1 - F1 score, AUC - Area under the curve, evaluation parameters shown in percent):
The Makefile line defining to use the APG kernel needs to be changed to make use of the SL kernel (“scripts/ppi-benchmark/Makefile.config”):
- KERNELS= SL #APG #ST SST PT SpT kBSPS APG cosine edit SL Kim
You can use the same directory to execute the SL kernel scripts as you did in case of the APG kernel approach, because the two kernels use different directories:
- ./SL_pipeline_DS1.sh
- ./SL_pipeline_DS2.sh
The evaluation steps are very similar to the ones used for the APG kernel pipeline.
- Execute the scripts in results/summary/jSRE as described in the previous section.
These are the SL kernel pipeline results for DS1 and DS2 (DS - Data set, Sent. - Sentences, Sens. - Sensitivity, Spec. - Specificity, Prec. - Precision, Acc. - Accuracy, F1 - F1 score, AUC - Area under the curve, evaluation parameters shown in percent):
Kevin Selm wrote a bugfix for the jSRE software, because it was not possible to use different parameter selections of n and w.
Original software link:
The ppi-benchmark pipeline was changed to make use of the JAR file scripts/ppi-benchmark/Kernels/jsre/source/dist/runTrain.jar, which was exported from a newly created Eclipse project with the source code of the original software and the debugged code of Kevin Selm.
- You can find these files in the folder scripts/jSRE_debug.
A concatenation of all DS1 and DS2 cross-validation files is needed to compare the single APG and SL results on DS1 and DS2. This was achieved with the following steps.
- Change into directory CPI-Pipeline/scripts and use the splitted files to generate the cross-validation files for DS3.
- Merge the files training_dataset_sorted.csv in the directories DS1 and DS2, too.
- The script annotatedsen_to_xml.py was slightly modified to work with the identifier DS3.
- cd CPI-Pipeline/scripts
- chmod +x merge.sh
- ./merge.sh
- cd generate_XML_files/DS3/
- python annotatedsen_to_xml.py
- Create the folders CPI-Pipeline/scripts/CPI-corpora-preparing/export_step6/CV/DS3, CPI-corpora-preparing/export_step6/splits-test-train/DS3, CPI-Pipeline/scripts/CPI-corpora-preparing/splitting/DS3, CPI-Pipeline/scripts/ppi-benchmark/Corpora/APG/CV/corpus/DS3, CPI-Pipeline/scripts/ppi-benchmark/Corpora/Splits/DS3, and CPI-Pipeline/scripts/ppi-benchmark/Corpora/splits-test-train/DS3.
- Within the updated pipeline for DS3, all cross-validation splits are automatically merged with the order from DS1 and DS2 and all new DS3 document identifiers.
After copying your scripts folder to the desired starting directory on your system, run the APG pipeline (do not forget to set your baseDir path in ppi-benchmark/Makefile.config in line 7):
- ./APG_pipeline_DS3.sh
- The preprocessing (actually only step 2 (bllip-parser)) took around 30 min (mainly single core calculations) and the rest of the pipeline with all parameter selections took around 5 h.
- ./SL_pipeline_DS3.sh
- The runtime is around 29 min on a notebook with an Intel Core i7-6700HQ (4x 2,6 GHz).
These are the results for the APG and SL kernel pipeline:
APG results:
- ./get_csv_results.sh
- change into directory output
- python average.py
- cat DS3*average.csv > DS3_average.csv
- python header.py
SL results:
- change into directory /home/kersten/Desktop/CPI-Pipeline/results/summary/DS3/jSRE
- python generate_selects_psql.py
- ./get_csv_results.sh
- change into directory output
- python average.py
- cat DS3*average.csv > DS3_average.csv
- python header.py
The basic input for the script annotatedsen_to_xml.py (training_dataset_sorted.csv) can be created by generating a tab-separated format which contains the following columns:
- PubMed ID
- Sentence with XML tags for all named entities
As many more columns as there are pairs of related entities
- Format of each pair: <entity>__<entity>__<interaction>
Please, write an e-mail, if you have questions, feedback, improvements, or new ideas:
If you are interested in related projects, visit our working group’s homepage:


|
ArUco Unity
0.1.0
OpenCV's ArUco Marker Detection module adapted for Unity 5.
|
Describes an ChArUco diamond marker. More...
Inherits ArucoUnity.Utility.ArucoObject.
Static Public Member Functions | |
| static int | GetArucoHashCode (int[] ids) |
Protected Member Functions | |
| override void | Awake () |
| Initialize the properties and suscribe to ArucoObject.PropertyUpdated. More... | |
| override void | OnPropertyUpdated () |
| ArucoObject.OnPropertyUpdated. More... | |
| Protected Member Functions inherited from ArucoUnity.Utility.ArucoObject | |
| virtual void | OnPropertyUpdating () |
| Call the event PropertyUpdating. More... | |
Static Protected Member Functions | |
| static int | GetArucoHashCode (ArucoDiamond arucoDiamond) |
Protected Attributes | |
| int | hashCode |
Properties | |
| override int | HashCode [get] |
| ArucoObject.HashCode. More... | |
| float | SquareSideLength [get, set] |
| Side length of each square. In pixels for Creators. In meters for Trackers and Calibrators. More... | |
| int [] | Ids [get, set] |
| The four ids of the four markers of the diamond. More... | |
| Properties inherited from ArucoUnity.Utility.ArucoObject | |
| abstract int | HashCode [get] |
| Aruco.Dictionary | Dictionary [get, set] |
| The dictionary to use. More... | |
| float | MarkerSideLength [get, set] |
| The size of each marker. In pixels for Creators. In meters for Trackers and Calibrators. More... | |
| int | MarkerBorderBits [get, set] |
| Number of bits in marker borders (default: 1). Used by Creators. More... | |
Additional Inherited Members | |
| Public Member Functions inherited from ArucoUnity.Utility.ArucoObject | |
| delegate void | ArucoObjectEventHandler (ArucoObject arucoObject) |
| Events inherited from ArucoUnity.Utility.ArucoObject | |
| ArucoObjectEventHandler | PropertyUpdating = delegate { } |
| Executed before a property is going to be updated. More... | |
| ArucoObjectEventHandler | PropertyUpdated = delegate { } |
| Executed after a property has been updated. More... | |
Describes an ChArUco diamond marker.
|
inlineprotectedvirtual |
Initialize the properties and suscribe to ArucoObject.PropertyUpdated.
Reimplemented from ArucoUnity.Utility.ArucoObject.
|
inlinestatic |
|
inlinestaticprotected |
|
inlineprotectedvirtual |
ArucoObject.OnPropertyUpdated.
Reimplemented from ArucoUnity.Utility.ArucoObject.
|
protected |
|
get |
ArucoObject.HashCode.
|
getset |
The four ids of the four markers of the diamond.
|
getset |
Side length of each square. In pixels for Creators. In meters for Trackers and Calibrators.


Find the lowest prices
Create wishlists and get alerts via email when prices drop.
View the price history of Amazon products as graphs.
...or read about our features here.


|
Uintah::PhaseField
|
Finite-differences scheme for dw variables (1-ghost in each direction) (ScalarField implementation) More...
#include <dw_fd_G1.h>
Public Member Functions | |
| dw_fd (const VarLabel *label, int material, const Level *level) | |
| Constructor. More... | |
| dw_fd (DataWarehouse *dw, const VarLabel *label, int material, const Patch *patch, bool use_ghosts=use_ghosts_dflt) | |
| Constructor. More... | |
| virtual | ~dw_fd () |
| Destructor. More... | |
| dw_fd (const dw_fd &)=delete | |
| Prevent copy (and move) constructor. More... | |
| dw_fd & | operator= (const dw_fd &)=delete |
| Prevent copy (and move) assignment. More... | |
| virtual void | set (DataWarehouse *dw, const Patch *patch, bool use_ghosts) override |
| Retrieve value from the DataWarehouse for a given patch. More... | |
| virtual void | set (DataWarehouse *dw, const Level *level, const IntVector &low, const IntVector &high, bool use_ghosts) override |
| Retrieve value from the DataWarehouse for a given region. More... | |
| virtual Support | get_support () const override |
| Get the region for which the view has access to the DataWarehouse. More... | |
| virtual bool | is_defined_at (const IntVector &id) const override |
| Check if the view has access to the position with index id. More... | |
| virtual T & | operator[] (const IntVector &id) override |
| Get/Modify value at position with index id (modifications are allowed if T is non const) More... | |
| virtual V | operator[] (const IntVector &id) const override |
| Get value at position. More... | |
| virtual view< Field > * | get_view () override |
| Get base view. More... | |
| virtual const view< Field > * | get_view () const override |
| Get base view. More... | |
| template<DirType DIR> | |
| T | d (const IntVector &id) const |
| First order derivative. More... | |
| template<DirType DIR> | |
| T | d2 (const IntVector &id) const |
| Second order derivative. More... | |
| Public Member Functions inherited from Uintah::PhaseField::detail::basic_fd_view< ScalarField< T >, STN > | |
| virtual | ~basic_fd_view ()=default |
| Default destructor. More... | |
| virtual V | dx (const IntVector &id) const =0 |
| Partial x derivative. More... | |
| virtual V | dy (const IntVector &id) const =0 |
| Partial y derivative. More... | |
| virtual V | dz (const IntVector &id) const =0 |
| Partial z derivative. More... | |
| virtual V | dxx (const IntVector &id) const =0 |
| Partial x second order derivative. More... | |
| virtual V | dyy (const IntVector &id) const =0 |
| Partial y second order derivative. More... | |
| virtual V | dzz (const IntVector &id) const =0 |
| Partial z second order derivative. More... | |
| Public Member Functions inherited from Uintah::PhaseField::detail::view< ScalarField< T > > | |
| virtual | ~view ()=default |
| Default destructor. More... | |
| virtual view * | clone (bool deep) const =0 |
| Get a copy of the view. More... | |
| virtual view * | clone (bool deep, const IntVector &offset) const =0 |
| Get a copy of the view and apply translate the support. More... | |
Static Public Attributes | |
| static constexpr bool | use_ghosts_dflt = true |
| Static Public Attributes inherited from Uintah::PhaseField::detail::basic_fd_view< ScalarField< T >, STN > | |
| static constexpr bool | use_ghosts_dflt = true |
| Default value for use_ghost when retrieving data. More... | |
| Static Public Attributes inherited from Uintah::PhaseField::detail::view< ScalarField< T > > | |
| static constexpr bool | use_ghosts_dflt = false |
| Default value for use_ghost when retrieving data. More... | |
Protected Member Functions | |
| dw_fd (const dw_fd *copy, bool deep) | |
Additional Inherited Members | |
| Public Types inherited from Uintah::PhaseField::detail::view< ScalarField< T > > | |
| using | field_type = ScalarField< T > |
| Type of field. More... | |
Finite-differences scheme for dw variables (1-ghost in each direction) (ScalarField implementation)
Implement P3 (three-point 1D), P5 (five-point 2D) and P7 (seven-point 3D) stencils
| T | type of the field value at each point |
| STN | finite-difference stencil |
| VAR | type of variable representation |
|
inlineprotected |
|
inline |
Constructor.
Instantiate a view without gathering info from the DataWarehouse
| label | variable label |
| material | material index |
| level | grid level |
|
inline |
Constructor.
Instantiate a view and gather info from dw
| dw | DataWarehouse from which data is retrieved |
| label | variable label |
| material | material index |
| patch | grid patch |
| use_ghosts | if ghosts value are to be retrieved |
|
inlinevirtual |
Destructor.
|
delete |
Prevent copy (and move) constructor.
|
inline |
First order derivative.
First order derivative along DIR at index id
| DIR | Direction along with derivative is approximated |
| id | index where to evaluate the finite-difference |
|
inline |
Second order derivative.
Second order derivative along DIR at index id
| DIR | Direction along with derivative is approximated |
| id | index where to evaluate the finite-difference |
|
inlineoverridevirtual |
Get the region for which the view has access to the DataWarehouse.
Implements Uintah::PhaseField::detail::view< ScalarField< T > >.
|
inlineoverridevirtual |
Get base view.
Implements Uintah::PhaseField::detail::basic_fd_view< ScalarField< T >, STN >.
|
inlineoverridevirtual |
Get base view.
Implements Uintah::PhaseField::detail::basic_fd_view< ScalarField< T >, STN >.
|
inlineoverridevirtual |
Check if the view has access to the position with index id.
| id | position index |
Implements Uintah::PhaseField::detail::view< ScalarField< T > >.
|
delete |
Prevent copy (and move) assignment.
|
inlineoverridevirtual |
Get/Modify value at position with index id (modifications are allowed if T is non const)
| id | position index |
Implements Uintah::PhaseField::detail::view< ScalarField< T > >.
|
inlineoverridevirtual |
Get value at position.
| id | position index |
Implements Uintah::PhaseField::detail::view< ScalarField< T > >.
|
inlineoverridevirtual |
Retrieve value from the DataWarehouse for a given patch.
| dw | DataWarehouse from which data is retrieved |
| patch | grid patch to retrieve data for |
| use_ghosts | if ghosts value are to be retrieved |
Implements Uintah::PhaseField::detail::basic_fd_view< ScalarField< T >, STN >.
|
inlineoverridevirtual |
Retrieve value from the DataWarehouse for a given region.
| dw | DataWarehouse from which data is retrieved |
| level | grid level from which retrieve data |
| low | lower bound of the region to retrieve |
| high | higher bound of the region to retrieve |
| use_ghosts | if ghosts value are to be retrieved |
Implements Uintah::PhaseField::detail::basic_fd_view< ScalarField< T >, STN >.
|
static |


let's play a picture game !
choose the correct answer to advance to the next question
victory!!! press start again to restart the game
start Again!


What is SolAR?
SolAR is an open-source framework under Apache v2 license dedicated to Augmented Reality.
SolAR is modular and evolutive. It allows, in various contexts of use, the construction of customized computer vision pipelines targeting Augmented Reality applications (e.g. camera pose estimation or 3D mapping).
SolAR contains:
- interfaces promoting interoperability
- computer vision components constructed from third-party bricks
- plugins for third-party applications


Use to create an instance of JSPlumb
-->Use to hide content under a header that a user can display when necessary
Use to display a value that the user can edit at will
Use to upload files to the hawtio webapp backend. Files are stored in a temporary directory and managed via the UploadManager JMX MBean
Showing files:
Not showing files:
Currently used on the preference page to associate a color with a given URL regex
Displays a simple confirmation dialog with a standard title and buttons, just the dialog body needs to be provided. The buttons can be customized as well as the actions when the ok or cancel button is clicked
Displays a panel that slides out from either the left or right and immediately disappears when closed
A directive that wraps the codeMirror editor.


This area allows administrators to add, edit and remove any medical practitioners and staff for this medical practice.


[PRIVATE]
find the typecode by correspondance with the comment
metadata
[PRIVATE] Get the offset of the querried data withing the 1D array
get all the context as an array of pairs { label: String, value: Number/Array }
Array
:
the list of contexts
Get a context by its index
Number
n
:
index of the context
Object
:
context object in the form { label: String, value: Number/Array }
Get the size of the dimensions, in the order of varying speed (the last varies faster)
Array
:
the dimensions
Get the actual label for the "duration" dimension
String
:
the label
Get the size of the duration dimension Note: the name "duration" is missleading, take it as a sort of measure, aka. just another dimension
Number
:
the size
Get all the duration labels
Array
:
array of strings
Get the actual label for the "first-space" dimension
String
:
the label
Get all the first-space labels
Array
:
array of strings
Get the size of the first-space dimension
Number
:
the size
Get the frequency resolution
Number
:
the resolution as a float
Get the actual label for the "measure" dimension
String
:
the label
Get all the measure labels
Array
:
array of strings
Get the size of the measure dimension
Number
:
the size
Get the number of dimensions actually used in this dataset. Note: the second-space is not used by all files and even the first-space for some other. No matter the number of dimensions used, they are always the first N dim in the sens that they are always the first N slowest varying dim.
Number
:
the
Get the scale factor
Number
:
the factor as a float
Get an array of boolean informing of the measure has to be scaled with the scale factor
Array
:
the booleans
Get the actual label for the "second-space" dimension
String
:
the label
Get all the second-space labels
Array
:
array of strings
Get the size of the second-space dimension
Number
:
the size
Get an array of values for such measureIndex, durationIndex and firstSpaceIndex. These 3 arguments are optional but the unused ones must be on the right. If using no argument, or only measureIndex, or only measureIndex and durationIndex, then a larger array corresponding o broarder range of data will be returned
Number
measureIndex
:
the index within the "measure" dimension
Number
durationIndex
:
the index within the "duration" dimension
Number
firstSpaceIndex
:
the index within the "first-space" dimension
Array
:
the data, or null
Instead of using indexes among each dimension, it can be easier to call values by their names.
Does the same as .getSpectrum()
but uses names instead of indexes.
String
measureLabel
:
the desired label within the 'measure' dimension (optional)
String
durationLabel
:
the desired label within the 'duration' dimension (optional)
String
firstSpaceLabel
:
the desired label within the 'first-space' dimension (optional)
Array
:
matched data, or null if using a non-existing label
Does like getSpectrumLabelsByLabels but uses the indexes among each dimension rather than their labels.
Number
measureIndex
:
the index within the "measure" dimension
Number
durationIndex
:
the index within the "duration" dimension
Number
firstSpaceIndex
:
the index within the "first-space" dimension
Array
:
contains the hierarchical cascade of labels, the last element being an array
Get all the labels as a hierarchical cascade. For examples, if you feel the 3 arguments for a dataset that have a second-space dimension of size greater than 1, it will return an array [ "the measure label", "the duration label", "the first space label", ["1st label of 2nd sp" "2nd label of 2nd sp", "3rd label of 2nd sp"]]. Only the last argument (the array) is not already given in argument but this sort of repeat is so that the returned values has all the cascade.
String
measureLabel
:
the desired label within the 'measure' dimension (optional)
String
durationLabel
:
the desired label within the 'duration' dimension (optional)
String
firstSpaceLabel
:
the desired label within the 'first-space' dimension (optional)
Array
:
contains the hierarchical cascade of labels, the last element being an array
Get the start Frequency
Number
:
the start frequency as a float
Get the transformation applied to the data. 0 => no transformation 3 => natural logarithm (log e)
Get the qeeg type from the object comment
String
:
the type
Get the type code of the data. Can be 'CROSS', 'ZCROSS', 'BBSP', 'ZBBSP', 'ETC', 'ZETC', 'ETCBG', 'ZETCBG', 'ET', 'COR', 'COH', 'PHA'
string
:
the type code or null if it was impossible to determine
Get all the unit labels
Array
:
array of strings
Get a single value, given some indexes
Number
measureIndex
:
index among the "measure" dimension
Number
durationIndex
:
index among the "duration" dimension
Number
firstSpaceIndex
:
index among the "first space" dimension
Number
secondSpaceIndex
:
index among the "second space" dimension
Number
:
the value
In case the qeeg MOD object from the parser is not set in the constructor, it can be set here.
Object
qeegModObj
:
output of a QeegModFileParser instance
An instance of QeegModFileParser can be used to parse several file (you don't need to create a QeegModFileParser instance per file to parse). The Qeeg MOD file usually have the .MOD extension, though this parser does not need the filename or the extension.
#_parseNoException
[PRIVATE] This method parses the data without caring of potential exception to be raised, it does not handle them. Thus, this method is unsafe to use as is and should no be used directly.
[PRIVATE] This method parses the data without caring of potential exception to be raised, it does not handle them. Thus, this method is unsafe to use as is and should no be used directly.
Object
:
the MOD file data in a readable format
#parse
Launch the parsing of the ArrayBuffer that was given with the method setRawData
Launch the parsing of the ArrayBuffer that was given with the method setRawData
Object
:
the MOD file data in a readable format
#setRawData(data)
Feed the parser with raw data to be parsed
Feed the parser with raw data to be parsed
ArrayBuffer
data
:
the raw data


Want to know more about me, well you are in the right space
Want to know more about me, well you are in the right space
I'm Twana Daniel, a full-stack developer from Dublin, Ireland. I like working in technologies like Angular, React.js Node.js and PHP. And for my deployments, I love Cloud Foundry, Kubernetes, and Virtual Servers. I published many blog articles covering these technologies at my IBM blog page.
I have six years experience in web and mobile development. Recently I have been doing a lot of work using Node.js, Angular, React.js, and Kubernetes.
I’ve been fortunate enough to travel the world speaking and teaching developers on best practices when using IBM Cloud services. I love sharing my knowledge and helping others to make awesome apps.
Outside of my work with IBM, I spend much of my time learning new stuff all related to web development. I just love learning. Lately, I am obsessed with reading personal development books, and I just can't stop.
Want to ask a general question? Either tweet me or use my Linkedin profile for anything longer.
I most likely will not respond to individual code queries due to the volume and time constraints, please defer to StackOverflow for your help (sorry)!
To chat to me about something else such as speaking or workshop event, please email me: twanawebtech@gmail.com.