একটি আণবিক সম্পাদক / ভিজ্যুয়ালাইজার তৈরি করা: অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং, ডেটা স্ট্রাকচার এবং অণুগুলি


12

আমি প্রোগ্রামিংয়ে নতুন এবং আমি আমার প্রথম বড় সমস্যাটি সমাধান করার এবং আমার প্রথম বড় প্রোগ্রামটি লেখার চেষ্টা করছি। আমি কোডগুলি থেকে শেখার জন্য ওপেন সোর্স উদাহরণগুলির সন্ধান করেছি, তবে এখনও পর্যন্ত কেবলমাত্র আমি ভাষাগুলি পুরোপুরি বুঝতে পারি না এমন ভাষাতে কোড পেয়েছি বা এটি সত্যই শিখতে আমার কাছে সম্পর্কিত তবে এখনও খুব বেশি দূরবর্তী বিষয়। আমি এখানে কিছু ধারণামূলক পদক্ষেপ নিতে সমস্যা হচ্ছে।

আমি ছোট জৈব অণুগুলি তৈরি, সংশোধন এবং পরে উপস্থাপনের জন্য একটি সাধারণ টুকরো তৈরি করতে চাই। এটি মূলত একটি শেখার অনুশীলন। কোনও ব্যবহারকারী একটি স্মাইলস স্ট্রিং দিতেন বা স্টার্টার অণুগুলির একটি বেসিক সেট থেকে চয়ন করতেন এবং তারপরে সেই অণুতে গ্রাফিকভাবে বা কোনও পাঠ্য ইনপুট সিনট্যাক্সের মাধ্যমে তৈরি করতে পারতেন। যাইহোক, আমি এখনও জটিলতার সেই পর্যায়ে নেই। অণুগুলি সংরক্ষণ করার জন্য কীভাবে ক্লাস / অবজেক্ট করা যায় তা আমি পুরোপুরি বুঝতে পারি না। সুতরাং, আমার প্রশ্নটি সংক্ষেপে: আমি সমস্ত স্তরের তথ্যের বজায় রেখে অণু তৈরির জন্য শ্রেণি / অবজেক্টগুলি কীভাবে ব্যবহার করব এবং কোন বস্তুর বৈশিষ্ট্য হিসাবে আমার কোন ডেটা স্ট্রাকচার ব্যবহার করা উচিত? এবং, বস্তুগুলি কি অন্য বস্তুর বৈশিষ্ট্যযুক্ত হতে পারে?

এখানে আমার চিন্তার ট্রেন এখানে: আমি ভাবছিলাম "অণু" শ্রেণি, তারপরে একটি "পরমাণু" শ্রেণি / সাবক্লাস এবং "বন্ড" উপক্লাস, এবং সম্ভবত একটি "ফাংশনাল গ্রুপ" সাবক্লাসও থাকবে। এটি শুরু করার মতো ভাল জায়গা বলে মনে হচ্ছে তবে আমি ওওকে ভুল বুঝছি এবং এটি খারাপ this তবে তারপরে আমার সমস্যাটি সত্যই বিভ্রান্ত হয়ে পড়ে (আমার জন্য)। যদিও আমার কাছে এই সমস্ত ধারণা / ধারণা / শ্রেণী রয়েছে তবে আমি অণু উপস্থাপনের জন্য কী ডেটাস্ট্রাকচারের প্রয়োজন তা পুরোপুরি বুঝতে পারি না। পরমাণুর একটি তালিকা থাকা ভাল জিনিস হবে। সেই তালিকাটি কি পরমাণু সামগ্রীর তালিকা হতে পারে? সংযোগ সঞ্চয় করার জন্য আমারও একটি উপায় থাকা দরকার have একটি 2 ডি ম্যাট্রিক্স ম্যাট্রিক্স পজিশনে পূর্ণসংখ্যার হিসাবে বন্ড অর্ডার সহ একটি ভাল ধারণা বলে মনে হয়।

এই মুহুর্তে আমি কার্যটি নিয়ে অভিভূত হতে শুরু করছি। আমি এতদূর যা কিছু করছি তা কি বোধগম্য? এর উপরে একটি ডিসপ্লে / অঙ্কনের দিকটি সংযুক্ত করার অর্থ এই হতে পারে যে আমাকে এই বিষয়গুলিতে অনেকগুলি পুনর্লিখন / পুনরায় কাজ করা দরকার, তবে আমি কেবলমাত্র এমন একটি বিন্দুতে পৌঁছানোর চেষ্টা করছি যেখানে আমি কমপক্ষে প্রাসঙ্গিক ডেটা দিয়ে অণুগুলি সঞ্চয় করতে পারি এবং তারপরে অ্যাক্সেস করতে পারি যাচাই / পরিবর্তন করতে ডেটা। আমি পাইথনে এটি করার কথা ভাবছিলাম, তাই কোড / ক্লাসগুলি সম্ভবত এর মতো দেখতে পাবেন: http://pastebin.com/uUi1BMzr

সম্ভবত এটি স্ট্যাকওভারফ্লোর জন্য সত্যিই একটি প্রোগ্রামিং প্রশ্ন, তবে আমি ভেবেছিলাম এটি এখানে যাওয়ার পক্ষে যথেষ্ট নির্দিষ্ট। যে কোনও সহায়তার প্রশংসা করা হবে, এমনকি যদি আপনি কেবলমাত্র আমি ধারণাগত ভুলত্রুটি করেছি কোথায় তা নির্দেশ করেও। আগাম ধন্যবাদ.


1
এছাড়াও, যে কেউ এরকম কিছু করার চেষ্টা করছে, আমি সবেমাত্র একটি দুর্দান্ত ওপেন সোর্স পাইথন প্যাকেজ পেয়েছি যা আমাকে আণবিক যান্ত্রিক সরঞ্জাম কিটের জন্য এমএমটিকে নামক কয়েকটি ধারণার সাহায্য করেছে।
নাট

1
আপনি কি ওপেনবেলকে দেখেছেন? আপনার হাতে যা প্রয়োজন তা হ'ল।
মৃত্যু শ্বাস

উত্তর:


5

রাইটিং সফ্টওয়্যার একটি পুনরাবৃত্তি প্রক্রিয়া - কোড লিখুন -> দেখুন পরবর্তী পদক্ষেপগুলি -> কোড লিখুন -> পুনরাবৃত্তি আপনি কতদূর পেতে পারেন see শিল্পটি শেখার এই পর্যায়ে আমি আপনাকে জলের পরীক্ষা করার জন্য শীঘ্রই ঝাঁপিয়ে পড়ার পরামর্শ দিই। সামনে পুরো সিস্টেমটি পরিকল্পনা করার দরকার নেই। হ্যাঁ অজগর একটি ভাল প্রথম ভাষা হবে। ভিজ্যুয়ালাইজেশনের জন্য ম্যাটপ্লটলিব চেষ্টা করে দেখুন, এছাড়াও নম্পপি এবং সায়পি ব্যবহারযোগ্য। শিল্প স্কেল সফ্টওয়্যার সবসময় নিজেরাই নিজের লেখার পরিবর্তে প্রাক-বিল্ড গ্রন্থাগারগুলিতে টানতে নির্ভর করে, তবুও সহজ সমাধানগুলি নিজেই লেখা যেতে পারে এবং বিশেষত প্রোগ্রামটি শেখার সময়। আপনার ওও লেআউটটি আপাতত ঠিক আছে বলে মনে হচ্ছে। আপনার / অবজেক্টের সম্পর্কগুলি যখন পরে পরিবর্তিত হওয়া দরকার, আপনার কোডটি পুনরায় ফ্যাক্টর করার কাজটি মাস্টার করার উপযুক্ত অভিজ্ঞতা worthy বিদেশে স্বাগতম !


ইনপুট জন্য ধন্যবাদ। আমি শুধু এটি রাখা যাচ্ছে। আমি কোনও অবজেক্টের অ্যাট্রিবিউটস / ভেরিয়েবলগুলি পাস এবং পরিবর্তন করার বিষয়েও কিছুটা শিখছি। প্রকৃত বিশ্ব থেকে কিছু নেওয়া এবং কম্পিউটার কোডে এটি উপস্থাপন করার চেষ্টা করা সত্যই আকর্ষণীয়।
নাট

9

আপনার লক্ষ্য অনেক চ্যালেঞ্জ আছে। আমি তাদের ভাঙ্গা করে দেব।

স্মাইলস পার্স করার জন্য একটি তুচ্ছ ভাষা নয় এবং সুগন্ধি উপলব্ধির নিয়মগুলি ভালভাবে সংজ্ঞায়িত হয় না। ওপেনসমাইলস প্রকল্পের ব্যাকরণের সংজ্ঞাটি কিছু ক্ষেত্রে সহায়তা করা উচিত।

স্মাইলস টপোলজি সংজ্ঞায়িত করে তবে 2 ডি বা 3 ডি তথ্য দেয় না। হয় হয় শক্ত হয়। (এটি যদি আপনি দেখতে সুন্দর দেখতে চান))

সত্যই, আপনার আরডিকিট কেমিনফর্ম্যাটিকস সরঞ্জামদণ্ডের দিকে নজর দেওয়া উচিত (বা ওপেনবেল, তবে আমি আরডিকিট পছন্দ করি)। এটিতে একটি স্মাইলস পার্সার অন্তর্নির্মিত রয়েছে, পাশাপাশি 2 ডি লেআউট রয়েছে এবং আমি বিশ্বাস করি 3 ডি কনফর্মেশন জেনারেশন। ওপেনবেল পাশাপাশি করেন।

তারপরে প্রদর্শনের জন্য আপনাকে জিইউআই সিস্টেমটি বের করতে হবে। প্রকৃতপক্ষে, এখানে জাভায় সিডিকে কেমিনফর্ম্যাটিকস সরঞ্জামদণ্ডটি সর্বাধিক উন্নত।

তবে আপনি কীভাবে একটি অণু উপস্থাপন করবেন তার বেসিকগুলিতে রয়েছেন। ছোট-অণু এবং বৃহত-অণু (প্রোটিন, ডিএনএ) ডেটা মডেলগুলির মধ্যে পার্থক্য রয়েছে, তবে যেহেতু আপনি স্মাইলসের প্রতি আগ্রহী তার অর্থ আপনি ছোট অণু কেন্দ্রিক।

আপনি আরডিকিট, ওপেনবেবেল, সিডিকে, ওসিহেম এবং ইন্ডিগোর জন্য অনেকগুলি অন্যান্যর মধ্যে API ডক্স দেখতে পারেন। এটি আপনাকে বিভিন্ন ধরণের উপায় সম্পর্কে ধারণা দেয় যা লোকেরা তাদের শ্রেণীর এপিআই বিকাশ করে। এর মধ্যে ওসিহেমকে আমি সবচেয়ে বেশি পছন্দ করি, তার পরে আরডিকিট। যদিও ওইচেম ওপেন সোর্স, এপিআই হ'ল অনলাইনে এবং অবাধে পাঠযোগ্য, ব্যবহারের উদাহরণ সহ।

সংক্ষেপে, পরমাণু এবং বন্ড উদাহরণগুলির একটি তালিকা সহ একটি অণু ক্লাস করুন। "mol.AddAtom (উপাদান সংখ্যা)" একটি নতুন পরমাণু তৈরি করে, যার সাথে কোনও বন্ধন নেই, "mol.AddBond (atom1, atom2, bond_type)" একটি বন্ড সংযোগ তৈরি করে। প্রতিটি বন্ডের সাথে এটির সাথে সংযুক্ত পরমাণুগুলি জানতে হবে এবং প্রতিটি পরমাণুর বন্ডের একটি তালিকা প্রয়োজন। এটি ডেটা স্ট্রাকচারে প্রচুর চক্রের দিকে পরিচালিত করে, তবে এটির প্রয়োজন যাতে কানেক্টিভিটি অনুসন্ধানের মতো বিভিন্ন অ্যালগোরিদম লিনিয়ার সময়ে করা যায়।

2 ডি ম্যাট্রিক্স ব্যবহার করবেন না। একটি ছোট অণুর জন্য সম্ভবপর হলেও এটি খুব ভালভাবে স্কেল করে না এবং এটির জন্য কোনও প্রয়োজন নেই। খুব কম অ্যালগরিদমের জন্য সংযোগের ম্যাট্রিক্স প্রয়োজন এবং প্রয়োজনে / যখন এটি সহজেই উত্পন্ন হয়।

"ফাংশনাল গ্রুপ" নেই। এটি খুব বিশেষায়িত। "সাবসেট" বা "টুকরো টুকরো" এর মতো কিছু ব্যবহার করুন, এতে আপনার আগ্রহী পরমাণু এবং বন্ডগুলির তালিকা রয়েছে That এইভাবে আপনি "নির্বাচিত পরমাণু" এবং "রিংয়ের কাঠামো" এবং "স্ক্যাফোল্ড" এর মতো জিনিসগুলিও পরিচালনা করতে পারেন to নির্দিষ্ট উপসেট।

আমি তোমার পেস্টবিনের দিকে তাকালাম। পার্সারটি সেভাবে কাজ করা উচিত নয়। আপনার আসল অণু কাঠামো থেকে পার্সিং আলাদা করা উচিত। এরকম কিছু চেষ্টা করুন:

class Molecule(object):
    def __init__(self):
        self.atoms = []
        self.bonds = []
        self._atom_id = 0
        self._bond_id = 0
    def _next_atom_id(self):
        atom_id = self._atom_id
        self.atom_id += 1
        return atom_id
    def AddAtom(self, eleno):
        self.atoms.append(Atom(self, self._next_atom_id(), eleno))
    def AddBond(self, atom1, atom2, bondtype):
        assert atom1.molecule is atom2.molecule
        self.bonds.append(Bond(self, self._next_bond_id(),
                               atom1, atom2, bondtype))

class Atom(object):
    def __init__(self, molecule, id, eleno):
        self.molecule = molecule
        self.id = id
        self.eleno = eleno
        self.charge = 0
        self.isotope = 0
   ..

এবং তারপরে "সিসি ও" এর মতো একটি সাধারণ লিনিয়ার চেইনের জন্য পার্সারটি হ'ল:

def parse_linear_chain(text):
   mol = Molecule()
   prev_atom = None
   for atom_symbol in text.split():
     eleno = lookup_symbol[atom_symbol]
     atom = mol.NewAtom(eleno)
     if pre_atom is not None:
       mol.AddBond(prev_atom, atom, 1)
     prev_atom = atom
   return mol

অবশ্যই, একটি সম্পূর্ণ স্মাইলস পার্সার এর থেকে অনেক বেশি জটিল এবং সম্পূর্ণ ডেটা মডেলকে হাইড্রোজেন গণনাগুলির মতো জিনিসগুলি পরিচালনা করতে হয়, যা প্রায়শই অন্তর্নিহিত।

ওপেনবেল, আরডিকিট এবং সিডিকে মেলিং তালিকাগুলিও যাওয়ার জন্য ভাল জায়গা, আপনি যদি এই সরঞ্জামদণ্ডগুলির মধ্যে একটি ব্যবহার করার সিদ্ধান্ত নেন। শাপাদো হোস্ট করা "ব্লু ওবেলিস্ক" প্রশ্নোত্তর সাইটও রয়েছে।


1

আরম্ভ করার জন্য অন্য পদ্ধতির মধ্যে এমন কিছু কোড রয়েছে যা ইতিমধ্যে আপনার সমস্যার সাথে সম্পর্কিত কিছু করে। সেক্ষেত্রে আপনার অনুশীলন এমনকি অন্য কোনও প্রোগ্রামেও শেষ হতে পারে এবং এটি দুর্দান্ত হবে, তাই না?

আপনার আগ্রহী হতে পারে এমন প্রোগ্রামগুলি

  • এমডি সিমুলেশন এবং মলিকুলার মডেলিং প্যাকেজ এমএমটিকে (উপরে ন্যাট দ্বারা ইতিমধ্যে প্রস্তাবিত)

  • ভিজ্যুয়ালাইজেশন প্যাকেজ পাইমল


1

মলিকুলার অবজেক্ট সিস্টেমের বিশদ শিখতে রসায়নবিদদের কাছে অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং শেখার দুর্দান্ত উপায়। আপনি দেখতে পাবেন যে এই জাতীয় সিস্টেমে প্রয়োগ করা আপনার আণবিক অন্তর্দৃষ্টিগুলিকে পরিমার্জন করবে। পরমাণু, অণু এবং গুণাবলী এবং পদ্ধতির দিক দিয়ে অণু সংগ্রহ সম্পর্কে আপনার কিছুটা কঠোর চিন্তা করা উচিত।

এখানে কিছু অজগর (কিছুটা পুরানো) স্লাইডগুলি সহায়তা করতে পারে: http://www.wag.caltech.edu/home/rpm/python_course/Lecture_4.pdf

আপনার কাজ যাচাই করার জন্য: ওপেনবেবেল (যা পাইথন বাইন্ডিংস রয়েছে!) এবং এমএমটিকে ছাড়াও ফিনিক্সে এলবো রয়েছে।

আপনার মধ্যে বহুবৃত্তের জন্য, এখানে পার্লমল (পারলমল.অর্গ )ও রয়েছে। পার্লমল অবজেক্ট ওরিয়েন্টেড পার্লে লেখা এবং সিপিএএন থেকে ডাউনলোড করা যায়।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.