async function generateLRTYearData() {
var LRTYearDataContainer = [];
for(var i of yearList){
var url = 'https://api.fda.gov/drug/event.json?search=_exists_:(patient.drug.openfda.generic_name)+AND+patient.drug.openfda.generic_name:(%22'+drugName+'%22)+AND+receivedate:(['+i+'-01-01+TO+'+i+'-12-31])&limit=1000&count=patient.reaction.reactionmeddrapt.exact&skip=0';
var raw = await fetch(url).then(res => res.json());
var url2 = 'https://api.fda.gov/drug/event.json?search=_exists_:(patient.drug.openfda.generic_name)+AND+_exists_:(patient.reaction.reactionmeddrapt.exact)+AND+_exists_:(patient.drug.openfda.generic_name)+AND+receivedate:(['+i+'-01-01+TO+'+i+'-12-31])&count=patient.reaction.reactionmeddrapt.exact&limit=1000&sort=patient.reaction.reactionmeddrapt.exact:desc';
var raw2 = await fetch(url2).then(res => res.json());
var dataTop = raw.results.sort((a,b) => b.count - a.count).filter((n,i) => i < maxNumberOfEvent).map(n => ({Year: i.toString(), AE: n.term,ntrt: +n.count}));
var dataTopTerm = [...new Set(dataTop.map(n => n.AE))];
var dataOther = raw.results.sort((a,b) => b.count - a.count).filter((n,i) => i >= maxNumberOfEvent).map(n => ({Year: i.toString(),AE: n.term,ntrt: +n.count}));
var countDrugOtherTotal = dataOther.reduce((p,c)=>{p += c.ntrt; return p;}, 0);
var dataAll = raw2.results.sort((a,b) => b.count - a.count).map(n => ({Year: i, AE: n.term, nidot: +n.count}));
var dataUnMatch = aq.from(dataTop).antijoin(aq.from(dataAll), ['AE', 'AE'], [aq.all(), aq.not('AE')]);
var dataUnMatchTerm = [...new Set(dataUnMatch.objects().map(n => n.AE))];
for (var k of dataUnMatchTerm) {
var kStr = k.split(' ').join('%20');
var urlK = 'https://api.fda.gov/drug/event.json?search=_exists_:(patient.drug.openfda.generic_name)+AND+_exists_:(patient.drug.openfda.generic_name)+AND+patient.reaction.reactionmeddrapt.exact:(%22'+kStr+'%22)+AND+receivedate:(['+i+'-01-01+TO+'+i+'-12-31])&limit=1&skip=0';
var dataK = await fetch(urlK).then(res => res.json())
dataAll.push({'AE': k, 'nidot': dataK.meta.results.total});
}
var countDrugAllFinalOther = dataAll.filter(n => dataTopTerm.indexOf(n.AE) == -1).reduce((p,c) => {p += c.nidot; return p;},0);
var dataMatch = aq.from(dataTop).join_left(aq.from(dataAll), ['AE', 'AE'], [aq.all(), aq.not(['Year', 'AE'])]).objects()
.filter(n => n.nidot !== undefined);
dataMatch.push({
'Year': i.toString(),
'AE': 'Other',
'ntrt': countDrugOtherTotal,
'nidot': countDrugAllFinalOther
});
dataMatch.map(n => n.ndotj = dataMatch.reduce((p,c) => {p += c.ntrt; return p;}, 0));
dataMatch.map(n => n.ndotdot = dataMatch.reduce((p,c) => {p += c.nidot; return p;}, 0));
LRTYearDataContainer.push(...dataMatch);
}
return LRTYearDataContainer;
}