Analyze all the past papers from 20 to 24 and tell me which are the most important topics and also tell about the mcqs number that had come from it each year
mkdir -p /tmp/workspace/msk_analysis && ls -la "/tmp/workspace/attachments/6b87f87a-6b12-46b6-a2a6-f128ea468786/"
cd /tmp/workspace/msk_analysis && python3 << 'EOF' import pdfplumber, os files = { "20": "20LM MSK MODULE TEST SOLVED.pdf", "21": "21LM MSK-I MODULE TEST SOLVED.pdf", "22": "22LM MSK-I MODULE TEST SOLVED.pdf", "23": "23LM MSK-I MODULE TEST SOLVED.pdf", "24_final": "24LM MSK-I FINAL PROFF PAPER-II - SOLVED.pdf", "24_module": "24LM MSK-I MODULE TEST SOLVED.pdf", } base = "/tmp/workspace/attachments/6b87f87a-6b12-46b6-a2a6-f128ea468786/" for key, fname in files.items(): path = os.path.join(base, fname) with pdfplumber.open(path) as pdf: print(key, fname, "pages:", len(pdf.pages)) EOF
cd /tmp/workspace/msk_analysis && python3 << 'EOF' import pdfplumber, os files = { "20": "20LM MSK MODULE TEST SOLVED.pdf", "21": "21LM MSK-I MODULE TEST SOLVED.pdf", "22": "22LM MSK-I MODULE TEST SOLVED.pdf", "23": "23LM MSK-I MODULE TEST SOLVED.pdf", "24_final": "24LM MSK-I FINAL PROFF PAPER-II - SOLVED.pdf", "24_module": "24LM MSK-I MODULE TEST SOLVED.pdf", } base = "/tmp/workspace/attachments/6b87f87a-6b12-46b6-a2a6-f128ea468786/" for key, fname in files.items(): path = os.path.join(base, fname) out_text = [] with pdfplumber.open(path) as pdf: for i, page in enumerate(pdf.pages): t = page.extract_text() or "" out_text.append(f"--- PAGE {i+1} ---\n{t}") with open(f"/tmp/workspace/msk_analysis/{key}.txt", "w") as f: f.write("\n".join(out_text)) print(key, "done, chars:", sum(len(x) for x in out_text)) EOF
cd /tmp/workspace/msk_analysis && python3 << 'EOF' import re files = ["20","21","22","23","24_final","24_module"] for key in files: with open(f"{key}.txt") as f: text = f.read() # count questions using regex like Q.1: or Q1: or Q 1: qs = re.findall(r'Q\.?\s?\d+[\.:]', text) print(key, "question markers found:", len(qs)) EOF
cd /tmp/workspace/msk_analysis && python3 << 'EOF' import re, json files = ["20","21","22","23","24_final","24_module"] def split_questions(text): # remove page markers text = re.sub(r'--- PAGE \d+ ---', '', text) # split by question number pattern at start of a question parts = re.split(r'(?=Q\.?\s?\d+[\.:])', text) qs = [p.strip() for p in parts if re.match(r'^Q\.?\s?\d+[\.:]', p.strip())] return qs data = {} for key in files: with open(f"{key}.txt") as f: text = f.read() qs = split_questions(text) data[key] = qs print(key, len(qs)) with open("questions.json","w") as f: json.dump(data, f) EOF
cd /tmp/workspace/msk_analysis && python3 << 'EOF' import json, re from collections import defaultdict, Counter with open("questions.json") as f: data = json.load(f) topics = { "Shoulder & Brachial Plexus": ["shoulder", "scapula", "clavicle", "rotator cuff", "supraspinatus","infraspinatus","subscapularis","teres minor","teres major","deltoid","axilla","axillary","brachial plexus","glenohumeral","acromion","coracoid","winging of scapula","erb","klumpke","quadrangular space"], "Arm & Elbow": ["humerus","humeral","biceps brachii","triceps","brachialis","elbow","cubital fossa","olecranon","supracondylar"], "Forearm & Wrist": ["radius","ulna","radial","ulnar","forearm","wrist","carpal tunnel","carpal bone","pronator","supinator","colles","smith fracture","interosseous membrane"], "Hand": ["metacarpal","phalan","palm","palmar","dupuytren","snuffbox","thenar","hypothenar","claw hand","ape hand","hand of benediction"], "Upper Limb Nerve Injury": ["radial nerve","ulnar nerve","median nerve","axillary nerve","musculocutaneous","long thoracic","suprascapular","wrist drop","claw hand","winged scapula"], "Hip & Gluteal Region": ["hip joint","gluteal","pelvis","pelvic","acetabulum","femoral head","trendelenburg","piriformis"], "Thigh & Knee": ["femur","femoral shaft","quadriceps","hamstring","knee joint","patella","meniscus","cruciate","adductor canal","popliteal"], "Leg & Ankle": ["tibia","fibula","leg ","ankle","tibial","fibular","peroneal","achilles","compartment syndrome"], "Foot": ["tarsal","metatarsal","plantar","foot ","calcaneus","talus","plantar fasciitis"], "Lower Limb Nerve Injury": ["sciatic nerve","femoral nerve","obturator nerve","tibial nerve","common peroneal","foot drop","saphenous nerve"], "Back & Vertebral Column": ["vertebra","vertebral","spine","spinal cord","intervertebral disc","spinal nerve","cauda equina","lamina","pedicle","scoliosis","kyphosis","lordosis"], "Bone Histology & Physiology": ["osteoblast","osteoclast","osteocyte","ossification","bone remodel","wolff's law","osteoid","haversian","bone matrix","calcification","rickets","osteoporosis","osteomalacia"], "Joint Anatomy/Histology": ["synovial","cartilage","ligament","joint capsule","articular","meniscus","bursa"], "Muscle Histology & Physiology": ["sarcomere","muscle contraction","neuromuscular junction","actin","myosin","muscle fiber","muscle spindle","motor unit","tetany","rigor mortis"], "Embryology": ["limb bud","somite","myotome","sclerotome","dermatome","mesenchyme","embryolog"], "Thorax/Ribs": ["rib ","ribs","sternum","intercostal","thoracic outlet","costal"], "Genetics/Connective Tissue Disorders": ["marfan","osteogenesis imperfecta","ehlers-danlos","achondroplasia","muscular dystrophy"], } def classify(qtext): qlow = qtext.lower() scores = {} for topic, kws in topics.items(): cnt = 0 for kw in kws: cnt += qlow.count(kw.lower()) if cnt > 0: scores[topic] = cnt if not scores: return "Other/Unclassified" return max(scores, key=scores.get) results = {} all_topic_counts = Counter() for key, qs in data.items(): counter = Counter() for q in qs: t = classify(q) counter[t] += 1 results[key] = counter all_topic_counts.update(counter) # print table years = ["20","21","22","23","24_module","24_final"] all_topics = sorted(all_topic_counts.keys(), key=lambda x: -all_topic_counts[x]) print(f"{'Topic':40s} " + " ".join(f"{y:>10s}" for y in years) + f" {'Total':>7s}") for t in all_topics: row = [str(results[y].get(t,0)) for y in years] total = sum(results[y].get(t,0) for y in years) print(f"{t:40s} " + " ".join(f"{v:>10s}" for v in row) + f" {total:>7d}") print() for y in years: print(y, "total classified:", sum(results[y].values()), "raw q count:", len(data[y])) with open("classification_results.json","w") as f: json.dump(results, f, default=lambda x: dict(x)) EOF
cd /tmp/workspace/msk_analysis && python3 << 'EOF' import json, re from collections import Counter with open("questions.json") as f: data = json.load(f) topics = { "Shoulder & Brachial Plexus": ["shoulder", "scapula", "clavicle", "rotator cuff", "supraspinatus","infraspinatus","subscapularis","teres minor","teres major","deltoid","axilla","axillary","brachial plexus","glenohumeral","acromion","coracoid","winging of scapula","erb","klumpke","quadrangular space"], "Arm & Elbow": ["humerus","humeral","biceps brachii","triceps","brachialis","elbow","cubital fossa","olecranon","supracondylar"], "Forearm & Wrist": ["radius","ulna","radial","ulnar","forearm","wrist","carpal tunnel","carpal bone","pronator","supinator","colles","smith fracture","interosseous membrane"], "Hand": ["metacarpal","phalan","palm","palmar","dupuytren","snuffbox","thenar","hypothenar","claw hand","ape hand","hand of benediction"], "Upper Limb Nerve Injury": ["radial nerve","ulnar nerve","median nerve","axillary nerve","musculocutaneous","long thoracic","suprascapular","wrist drop","claw hand","winged scapula"], "Hip & Gluteal Region": ["hip joint","gluteal","pelvis","pelvic","acetabulum","femoral head","trendelenburg","piriformis"], "Thigh & Knee": ["femur","femoral shaft","quadriceps","hamstring","knee joint","patella","meniscus","cruciate","adductor canal","popliteal"], "Leg & Ankle": ["tibia","fibula","leg ","ankle","tibial","fibular","peroneal","achilles","compartment syndrome"], "Foot": ["tarsal","metatarsal","plantar","foot ","calcaneus","talus","plantar fasciitis"], "Lower Limb Nerve Injury": ["sciatic nerve","femoral nerve","obturator nerve","tibial nerve","common peroneal","foot drop","saphenous nerve"], "Back & Vertebral Column": ["vertebra","vertebral","spine","spinal cord","intervertebral disc","spinal nerve","cauda equina","lamina","pedicle","scoliosis","kyphosis","lordosis"], "Bone Histology & Physiology": ["osteoblast","osteoclast","osteocyte","ossification","bone remodel","wolff's law","osteoid","haversian","bone matrix","calcification","rickets","osteoporosis","osteomalacia"], "Joint Anatomy/Histology": ["synovial","cartilage","ligament","joint capsule","articular","meniscus","bursa"], "Muscle Histology & Physiology": ["sarcomere","muscle contraction","neuromuscular junction","actin","myosin","muscle fiber","muscle spindle","motor unit","tetany","rigor mortis"], "Embryology": ["limb bud","somite","myotome","sclerotome","dermatome","mesenchyme","embryolog"], "Thorax/Ribs": ["rib ","ribs","sternum","intercostal","thoracic outlet","costal"], "Genetics/Connective Tissue Disorders": ["marfan","osteogenesis imperfecta","ehlers-danlos","achondroplasia","muscular dystrophy"], } def classify(qtext): qlow = qtext.lower() scores = {} for topic, kws in topics.items(): cnt = 0 for kw in kws: cnt += qlow.count(kw.lower()) if cnt > 0: scores[topic] = cnt if not scores: return "Other/Unclassified" return max(scores, key=scores.get) unclassified = [] for key, qs in data.items(): for q in qs: if classify(q) == "Other/Unclassified": unclassified.append((key, q[:200])) print(len(unclassified)) for k,q in unclassified[:40]: print("====", k) print(q) print() EOF
cd /tmp/workspace/msk_analysis && python3 << 'EOF' import json, re from collections import Counter with open("questions.json") as f: data = json.load(f) topics = { "Shoulder & Brachial Plexus": ["shoulder", "scapula", "clavicle", "rotator cuff", "supraspinatus","infraspinatus","subscapularis","teres minor","teres major","deltoid","axilla","axillary","brachial plexus","glenohumeral","acromion","coracoid","winging of scapula","erb","klumpke","quadrangular space"], "Arm & Elbow": ["humerus","humeral","biceps brachii","triceps","brachialis","elbow","cubital fossa","olecranon","supracondylar"], "Forearm & Wrist": ["radius","ulna","radial","ulnar","forearm","wrist","carpal tunnel","carpal bone","pronator","supinator","colles","smith fracture","interosseous membrane"], "Hand": ["metacarpal","phalan","palm","palmar","dupuytren","snuffbox","thenar","hypothenar","claw hand","ape hand","hand of benediction"], "Upper Limb Nerve Injury": ["radial nerve","ulnar nerve","median nerve","axillary nerve","musculocutaneous","long thoracic","suprascapular","wrist drop"], "Hip & Gluteal Region": ["hip joint","gluteal","pelvis","pelvic","acetabulum","femoral head","trendelenburg","piriformis"], "Thigh & Knee": ["femur","femoral shaft","quadriceps","hamstring","knee joint","patella","meniscus","cruciate","adductor canal","popliteal"], "Leg & Ankle": ["tibia","fibula","leg ","ankle","tibial","fibular","peroneal","achilles","compartment syndrome"], "Foot": ["tarsal","metatarsal","plantar","foot ","calcaneus","talus","plantar fasciitis"], "Lower Limb Nerve Injury": ["sciatic nerve","femoral nerve","obturator nerve","tibial nerve","common peroneal","foot drop","saphenous nerve"], "Back & Vertebral Column": ["vertebra","vertebral","spine","spinal cord","intervertebral disc","spinal nerve","cauda equina","lamina","pedicle","scoliosis","kyphosis","lordosis"], "Bone Histology, Growth & Physiology": ["osteoblast","osteoclast","osteocyte","ossification","bone remodel","wolff's law","osteoid","haversian","bone matrix","calcification","rickets","osteoporosis","osteomalacia","metaphysis","diaphysis","epiphys","periosteum","endosteum","growth plate"], "Joint Anatomy/Histology": ["synovial","cartilage","ligament","joint capsule","articular","bursa"], "Muscle Histology & Physiology": ["sarcomere","muscle contraction","actin","myosin","muscle fiber","muscle spindle","motor unit","tetany","rigor mortis","smooth muscle","cardiac muscle","fusiform cells","striations","calcium for contraction","sarcoplasmic reticulum"], "Neuromuscular Pharmacology (NMJ Blockers/Acetylcholine)": ["neuromuscular blocker","neuromuscular junction","acetylcholine","cholinesterase","succinylcholine","atracurium","rocuronium","vecuronium","pancuronium","mivacurium","nicotinic","motor end plate","laudanosine"], "Gout & Anti-gout Pharmacology": ["gout","uric acid","allopurinol","colchicine","probenecid","febuxostat","sulphinpyrazone","xanthine oxidase","uricosuric"], "Embryology (Limb/Germ Layers/Teratogenesis)": ["limb bud","somite","myotome","sclerotome","dermatome","mesenchyme","embryolog","germ layer","neural crest","neuroectoderm","teratogen"], "Thorax/Ribs": ["rib ","ribs","sternum","intercostal","thoracic outlet","costal"], "Genetics/Connective Tissue Disorders": ["marfan","osteogenesis imperfecta","ehlers-danlos","achondroplasia","muscular dystrophy"], "Skin & Integument Histology": ["epidermis","dermis","stratum","sebaceous","basal cell carcinoma","eccrine","apocrine","keratin","melanocyte"], "Breast Histology & Pathology": ["breast","lobule","acini","acinus","alveoli","lactating","paget","mammary"], "Vitamins, Calcium & Nutrition": ["vitamin d","vitamin c","calcium absorption","scurvy","food fortification","food supplement","nutritional","bleeding of gums"], "Glandular Histology (General)": ["tubular gland","acinar gland","compound gland","simple gland","gland type"], "Ergonomics/Posture (Community Medicine)": ["desk","postural defect","back pain, stress"], } def classify(qtext): qlow = qtext.lower() scores = {} for topic, kws in topics.items(): cnt = 0 for kw in kws: cnt += qlow.count(kw.lower()) if cnt > 0: scores[topic] = cnt if not scores: return "Other/Unclassified" return max(scores, key=scores.get) results = {} all_topic_counts = Counter() for key, qs in data.items(): counter = Counter() for q in qs: t = classify(q) counter[t] += 1 results[key] = counter all_topic_counts.update(counter) years = ["20","21","22","23","24_module","24_final"] all_topics = sorted(all_topic_counts.keys(), key=lambda x: -all_topic_counts[x]) print(f"{'Topic':45s} " + " ".join(f"{y:>10s}" for y in years) + f" {'Total':>7s}") for t in all_topics: row = [str(results[y].get(t,0)) for y in years] total = sum(results[y].get(t,0) for y in years) print(f"{t:45s} " + " ".join(f"{v:>10s}" for v in row) + f" {total:>7d}") print() unclassified = [] for key, qs in data.items(): for q in qs: if classify(q) == "Other/Unclassified": unclassified.append((key, q[:150])) print("Remaining unclassified:", len(unclassified)) for k,q in unclassified: print("====",k, q.replace(chr(10)," ")) EOF
cd /tmp/workspace/msk_analysis && python3 << 'EOF' import json, re from collections import Counter with open("questions.json") as f: data = json.load(f) topics = { "Shoulder & Brachial Plexus": ["shoulder", "scapula", "clavicle", "rotator cuff", "supraspinatus","infraspinatus","subscapularis","teres minor","teres major","deltoid","axilla","axillary","brachial plexus","glenohumeral","acromion","coracoid","winging of scapula","erb","klumpke","quadrangular space"], "Arm & Elbow": ["humerus","humeral","biceps brachii","triceps","brachialis","elbow","cubital fossa","olecranon","supracondylar"], "Forearm & Wrist": ["radius","ulna","radial","ulnar","forearm","wrist","carpal tunnel","carpal bone","pronator","supinator","colles","smith fracture","interosseous membrane"], "Hand": ["metacarpal","phalan","palm","palmar","dupuytren","snuffbox","thenar","hypothenar","claw hand","ape hand","hand of benediction"], "Upper Limb Nerve Injury": ["radial nerve","ulnar nerve","median nerve","axillary nerve","musculocutaneous","long thoracic","suprascapular","wrist drop"], "Hip & Gluteal Region": ["hip joint","gluteal","pelvis","pelvic","acetabulum","femoral head","trendelenburg","piriformis"], "Thigh & Knee": ["femur","femoral shaft","quadriceps","hamstring","knee joint","patella","meniscus","cruciate","adductor canal","popliteal"], "Leg & Ankle": ["tibia","fibula","leg ","ankle","tibial","fibular","peroneal","achilles","compartment syndrome"], "Foot": ["tarsal","metatarsal","plantar","foot ","calcaneus","talus","plantar fasciitis"], "Lower Limb Nerve Injury": ["sciatic nerve","femoral nerve","obturator nerve","tibial nerve","common peroneal","foot drop","saphenous nerve"], "Back & Vertebral Column": ["vertebra","vertebral","spine","spinal cord","intervertebral disc","spinal nerve","cauda equina","lamina","pedicle","scoliosis","kyphosis","lordosis"], "Bone Histology, Growth & Physiology": ["osteoblast","osteoclast","osteocyte","ossification","bone remodel","wolff's law","osteoid","haversian","bone matrix","calcification","rickets","osteoporosis","osteomalacia","metaphysis","diaphysis","epiphys","periosteum","endosteum","growth plate"], "Bone Pathology (Osteomyelitis etc.)": ["osteomyelitis","codman","sequestrum","onion-skin","soap-bubble","sunburst","sunray","bone tumor","ewing"], "Joint Anatomy/Histology": ["synovial","cartilage","ligament","joint capsule","articular","bursa"], "Muscle Histology & Physiology": ["sarcomere","muscle contraction","actin","myosin","muscle fiber","muscle spindle","motor unit","tetany","rigor mortis","smooth muscle","cardiac muscle","fusiform cells","striations","calcium for contraction","sarcoplasmic reticulum","isometric","isotonic","isokinetic","eccentric","concentric","muscle adaptation","mitochondria","capillary density"], "Electrophysiology (Action Potential/Ion Channels)": ["action potential","ion channel","depolarization","sodium influx","voltage-gated","repolarization"], "Neuromuscular Pharmacology (NMJ Blockers/Acetylcholine)": ["neuromuscular blocker","neuromuscular junction","acetylcholine","cholinesterase","succinylcholine","atracurium","rocuronium","vecuronium","pancuronium","mivacurium","nicotinic","motor end plate","laudanosine"], "Gout & Anti-gout Pharmacology": ["gout","uric acid","allopurinol","colchicine","probenecid","febuxostat","sulphinpyrazone","xanthine oxidase","uricosuric"], "Rheumatology Pharmacology (DMARDs)": ["dmard","adalimumab","etanercept","azathioprine","rituximab","abatacept","methotrexate","biologic"], "Embryology (Limb/Germ Layers/Teratogenesis)": ["limb bud","somite","myotome","sclerotome","dermatome","mesenchyme","embryolog","germ layer","neural crest","neuroectoderm","teratogen"], "Thorax/Ribs": ["rib ","ribs","sternum","intercostal","thoracic outlet","costal"], "Cranium/Skull Anatomy": ["skull","occipital bone","temporal bone","mandible","frontal bone","sphenoid bone","cranium"], "Genetics/Connective Tissue Disorders": ["marfan","osteogenesis imperfecta","ehlers-danlos","achondroplasia","muscular dystrophy"], "Connective Tissue Biochemistry (GAGs & Collagen)": ["glycosaminoglycan","hyaluronic acid","chondroitin sulfate","dermatan sulfate","keratan sulfate","heparan sulfate","iduronic acid","collagen","hydroxyproline","proline appears","glycine appears"], "Carbohydrate & Energy Metabolism": ["glycogen","glycogenolysis","glycolysis","mcardle","phosphorylase","krebs cycle","oxidative phosphorylation","beta-oxidation","atp synthesis","energy system","anaerobic","aerobic metabolism","hmp shunt"], "Nucleotide Metabolism (Purine/Pyrimidine)": ["pyrimidine","purine","carbamoyl phosphate","cps-ii","cps ii","de novo synthesis"], "Minerals & Trace Elements": ["zinc","copper","wilson's disease","magnesium","selenium","kayser-fleischer","superoxide dismutase","carbonic anhydrase","manganese"], "Skin & Integument Histology": ["epidermis","dermis","stratum","sebaceous","basal cell carcinoma","eccrine","apocrine","keratin","melanocyte"], "Breast Histology & Pathology": ["breast","lobule","acini","acinus","alveoli","lactating","paget","mammary"], "Vitamins, Calcium & Nutrition": ["vitamin d","vitamin c","calcium absorption","scurvy","food fortification","food supplement","nutritional","bleeding of gums","parathyroid hormone","calcitonin"], "Glandular Histology (General)": ["tubular gland","acinar gland","compound gland","simple gland","gland type"], "Ergonomics/Posture (Community Medicine)": ["desk","postural defect","back pain, stress"], "Research Methodology/Behavioral Science": ["literature review","control group","type a personality","type b personality","behavior theory","research method"], "General Receptor Pharmacology": ["m2 receptor","g-protein-coupled","ligand-gated ion channel","tyrosine kinase receptor"], "Thermoregulation Physiology": ["cold environment","vasoconstriction","vasodilation of blood","pale skin"], } def classify(qtext): qlow = qtext.lower() scores = {} for topic, kws in topics.items(): cnt = 0 for kw in kws: cnt += qlow.count(kw.lower()) if cnt > 0: scores[topic] = cnt if not scores: return "Other/Unclassified" return max(scores, key=scores.get) results = {} all_topic_counts = Counter() qmap = {} for key, qs in data.items(): counter = Counter() qtopics = [] for q in qs: t = classify(q) counter[t] += 1 qtopics.append((q[:80].replace(chr(10)," "), t)) results[key] = counter qmap[key] = qtopics all_topic_counts.update(counter) years = ["20","21","22","23","24_module","24_final"] all_topics = sorted(all_topic_counts.keys(), key=lambda x: -all_topic_counts[x]) print(f"{'Topic':50s} " + " ".join(f"{y:>10s}" for y in years) + f" {'Total':>7s}") for t in all_topics: row = [str(results[y].get(t,0)) for y in years] total = sum(results[y].get(t,0) for y in years) print(f"{t:50s} " + " ".join(f"{v:>10s}" for v in row) + f" {total:>7d}") unclassified = sum(1 for y in years for t,tt in qmap[y] if tt=="Other/Unclassified") print("\nRemaining unclassified total:", unclassified) with open("final_results.json","w") as f: json.dump({y: dict(results[y]) for y in years}, f, indent=2) EOF
cd /tmp/workspace/msk_analysis && python3 << 'EOF' import json from collections import Counter with open("final_results.json") as f: results = json.load(f) groups = { "Upper Limb Anatomy (Shoulder/Arm/Forearm/Hand/Nerves)": ["Shoulder & Brachial Plexus","Arm & Elbow","Forearm & Wrist","Hand","Upper Limb Nerve Injury"], "Lower Limb Anatomy (Hip/Thigh/Leg/Foot/Nerves)": ["Hip & Gluteal Region","Thigh & Knee","Leg & Ankle","Foot","Lower Limb Nerve Injury"], "Muscle Physiology, Histology & NMJ Pharmacology": ["Muscle Histology & Physiology","Electrophysiology (Action Potential/Ion Channels)","Neuromuscular Pharmacology (NMJ Blockers/Acetylcholine)"], "Bone Histology, Growth & Pathology": ["Bone Histology, Growth & Physiology","Bone Pathology (Osteomyelitis etc.)"], "Embryology (Limb Development/Teratogenesis)": ["Embryology (Limb/Germ Layers/Teratogenesis)"], "Gout, Rheumatology & Anti-inflammatory Pharmacology": ["Gout & Anti-gout Pharmacology","Rheumatology Pharmacology (DMARDs)"], "Joint Anatomy & Histology": ["Joint Anatomy/Histology"], "Biochemistry (GAGs/Collagen/Metabolism/Minerals)": ["Connective Tissue Biochemistry (GAGs & Collagen)","Carbohydrate & Energy Metabolism","Nucleotide Metabolism (Purine/Pyrimidine)","Minerals & Trace Elements"], "Skin, Breast & Glandular Histology": ["Skin & Integument Histology","Breast Histology & Pathology","Glandular Histology (General)"], "Vitamins & Calcium/Nutrition": ["Vitamins, Calcium & Nutrition"], "Back & Vertebral Column": ["Back & Vertebral Column"], "Other (Thorax/Skull/Genetics/Behavioral Sci/Misc)": ["Thorax/Ribs","Cranium/Skull Anatomy","Genetics/Connective Tissue Disorders","Research Methodology/Behavioral Science","Ergonomics/Posture (Community Medicine)","General Receptor Pharmacology","Thermoregulation Physiology"], } years = ["20","21","22","23","24_module","24_final"] agg = {g: {y:0 for y in years} for g in groups} for g, subs in groups.items(): for y in years: for s in subs: agg[g][y] += results[y].get(s,0) totals = {g: sum(agg[g].values()) for g in groups} order = sorted(groups.keys(), key=lambda g: -totals[g]) print(f"{'Category':55s} " + " ".join(f"{y:>10s}" for y in years) + f" {'Total':>7s}") for g in order: row = [str(agg[g][y]) for y in years] print(f"{g:55s} " + " ".join(f"{v:>10s}" for v in row) + f" {totals[g]:>7d}") print() print("Year totals:", {y: sum(agg[g][y] for g in groups) for y in years}) EOF
| Year | Paper | Total MCQs |
|---|---|---|
| 2020 | MSK Module Test | 90 |
| 2021 | MSK-I Module Test | 79 |
| 2022 | MSK-I Module Test | 55 |
| 2023 | MSK-I Module Test | 24 |
| 2024 | MSK-I Module Test | 102 |
| 2024 | MSK-I Final Prof Paper-II | 87 |
| Topic Category | 20 | 21 | 22 | 23 | 24-Module | 24-Final | Total |
|---|---|---|---|---|---|---|---|
| Upper Limb Anatomy (shoulder, brachial plexus, arm, elbow, forearm, wrist, hand, nerve injuries) | 21 | 21 | 23 | 6 | 21 | 17 | 109 |
| Muscle Physiology, Histology & NMJ Pharmacology (contraction types, sarcomere, action potential, neuromuscular blockers, acetylcholine) | 14 | 20 | 7 | 4 | 23 | 19 | 87 |
| Lower Limb Anatomy (hip, gluteal region, thigh, knee, leg, ankle, foot, nerve injuries) | 24 | 7 | 5 | 3 | 21 | 18 | 78 |
| Biochemistry (GAGs, collagen, glycogen/energy metabolism, minerals) | 4 | 4 | 1 | 3 | 11 | 6 | 29 |
| Embryology (limb development, germ layers, teratogenesis) | 6 | 6 | 4 | 0 | 5 | 6 | 27 |
| Gout, Rheumatology & Anti-inflammatory Pharmacology | 5 | 13 | 1 | 1 | 1 | 2 | 23 |
| Bone Histology, Growth & Pathology | 3 | 1 | 4 | 5 | 4 | 4 | 21 |
| Joint Anatomy & Histology | 4 | 2 | 4 | 1 | 3 | 4 | 18 |
| Vitamins & Calcium/Nutrition | 2 | 0 | 2 | 0 | 6 | 6 | 16 |
| Skin, Breast & Glandular Histology | 4 | 4 | 2 | 0 | 3 | 1 | 14 |
| Other (thorax, skull, genetics, research methodology, misc) | 2 | 1 | 1 | 1 | 3 | 4 | 12 |
| Back & Vertebral Column | 1 | 0 | 1 | 0 | 1 | 0 | 3 |