🧭 خلاصه (Summary)

Null CHOP به‌عنوان یک جای‌نگهدار (Placeholder) استفاده می‌شود و هیچ تغییری در داده‌های ورودی ایجاد نمی‌کند.

این اپراتور معمولاً برای Export کردن کانال‌ها به پارامترها استفاده می‌شود، زیرا به شما اجازه می‌دهد بین چند CHOP مختلف آزمایش کنید بدون آن‌که هر بار نیاز باشد اتصال Export را جدا و دوباره برقرار کنید.

همچنین Null CHOP گزینه‌هایی دارد برای اینکه:

  • اجباراً نودهای پایین‌دست را Cook کند (یعنی باعث اجرای آن‌ها در هر فریم شود)، یا برعکس،

  • در صورت ثابت ماندن ورودی، مانع Cook شدن نودهای پایین‌دست شود.

📘 نکته: این اپراتور خودش داده‌ای را تغییر نمی‌دهد، اما در ساختار شبکه CHOP، ابزار بسیار مهمی برای کنترل جریان و عملکرد سیستم محسوب می‌شود.


⚙️ پارامترها — صفحه Null

پارامترتوضیح
Cook Type (cooktype)نحوه‌ی Cook شدن نودهای پایین‌دست وقتی خروجی Null تغییر می‌کند را تعیین می‌کند.
Automatic (auto)نودهای پایین‌دست در حالت عادی و خودکار Cook می‌شوند.
Always (always)این نود و نودهای بالادستِ “کثیف” (Dirty) در هر فریم Cook می‌شوند. نودهای پایین‌دست نیز هر زمان داده درخواست شود Cook خواهند شد. (برای خروجی‌های بلادرنگ و کنترل کامل مفید است.)
Selective (selective)اجازه می‌دهد مشخص کنید دقیقاً چه تغییری باعث Cook شدن نودهای پایین‌دست شود (از طریق گزینه‌های زیر). این روش برای بهینه‌سازی شبکه مفید است، مخصوصاً وقتی CHOPهای بالادست داده‌های زمان‌محور زیادی دارند ولی خروجی اغلب ثابت است.
🔹 مثال: یک Math CHOP که عدد در حال تغییر را رُند می‌کند به ۰ یا ۱.
⚠️ نکته: در حالت Selective، نودهای بالادست هر زمان داده تغییر کند Cook می‌شوند، حتی اگر پایین‌دست داده‌ای درخواست نکند.

پارامترهای Selective:

پارامترتوضیح
Check Values (checkvalues)اگر مقادیر CHOP تغییر کنند، دوباره Cook می‌شود.
Check Names (checknames)اگر نام کانال‌ها تغییر کند، دوباره Cook می‌شود.
Check Range (checkrange)اگر بازه (Range) کانال‌ها تغییر کند، دوباره Cook می‌شود.

⚠️ نکته: نودهای پایین‌دست ممکن است به دلایل دیگر نیز Cook شوند (مثلاً هنگام مشاهده‌ی داده در پنجره‌ی شبکه یا ویرایش نودها).


⚙️ پارامترها — صفحه Common

پارامترتوضیح
Time Slice (timeslice)فعال‌سازی این گزینه باعث می‌شود فقط داده‌های بین Cook قبلی و فعلی پردازش شوند.
Scope (scope)محدوده‌ی کانال‌هایی که تحت تأثیر قرار می‌گیرند (بر اساس الگوی نام‌ها).
Sample Rate Match (srselect)روش هماهنگی نرخ نمونه‌برداری میان ورودی‌ها:
First Input Rate – بر اساس ورودی اول
Maximum Rate – بیشترین نرخ
Minimum Rate – کمترین نرخ
Error If Rates Differ – خطا در صورت تفاوت نرخ‌ها
Export Method (exportmethod)روش Export داده‌ها از CHOP به پارامترها:
DAT Table by Index / by Name – از جدول DAT استفاده می‌کند
Channel Name is Path:Parameter – مسیر کامل پارامتر را مستقیماً از نام کانال استخراج می‌کند (مثلاً geo1/transform1:tx).
Export Root (autoexportroot)مسیر ریشه برای تمام مسیرهای Export.
Export Table (exporttable)جدول DAT که اطلاعات Export را نگه می‌دارد (در روش‌های DAT Table).

🔌 ورودی‌های اپراتور

ورودیتوضیح
Input 0CHOP ورودی‌ای که داده را به Null می‌فرستد. (هیچ پردازشی روی داده انجام نمی‌شود، صرفاً عبور داده است.)

📊 Info CHOP Channels

اطلاعات اضافی از طریق Info CHOP قابل مشاهده است.

Common CHOP Info Channels

نامتوضیح
startشروع بازه در نمونه‌ها.
lengthطول بازه (تعداد نمونه‌ها).
sample_rateنرخ نمونه‌برداری (فریم بر ثانیه).
num_channelsتعداد کانال‌ها.
time_sliceاگر Time Slice فعال باشد → مقدار ۱.
export_sernumشمار دفعاتی که Export به‌روزرسانی شده است.

Common Operator Info Channels

نامتوضیح
total_cooksتعداد دفعاتی که اپراتور از زمان شروع پروژه Cook شده است.
cook_timeمدت زمان آخرین Cook (میلی‌ثانیه).
cook_frameشماره‌ی فریم آخرین Cook نسبت به تایم‌لاین کامپوننت.
cook_abs_frameشماره‌ی فریم مطلق آخرین Cook.
cook_start_time / cook_end_timeزمان شروع و پایان Cook در فریم جاری (ms).
cooked_this_frameاگر در فریم جاری Cook شده باشد، مقدار ۱ می‌گیرد.
warnings / errorsتعداد هشدارها و خطاهای اپراتور.

🎬 کاربردهای اصلی Null CHOP

  1. Export مرکزی
    به‌عنوان نود رابط برای Export به پارامترها استفاده می‌شود. اگر ورودی را تغییر دهید، نیازی به تغییر مقصد Export نیست.

  2. بهینه‌سازی شبکه (Performance Control)
    با استفاده از Cook Type می‌توانید کنترل کنید که چه زمانی شبکه پایین‌دست پردازش شود، و از Cookهای غیرضروری جلوگیری کنید.

  3. مانیتورینگ یا ذخیره‌ی داده‌ی نهایی
    برای ذخیره‌ی خروجی نهایی یک زنجیره از CHOPها به‌صورت پایدار (مثل “Checkpoint”) استفاده می‌شود.

  4. جلوگیری از Cook بیهوده در Loopها
    در شبکه‌هایی که بازخورد (Feedback Loop) دارند، از Null برای توقف یا کنترل جریان Cook استفاده می‌شود.


🧠 نکته حرفه‌ای (Pro Tip)

در پروژه‌های سنگین تاچ‌دیزاینر، هر زنجیره CHOP را با یک Null CHOP در انتهای مسیر تمام کنید و فقط آن Null را Export کنید.
با این روش:

  • راحت‌تر می‌توانید نودهای بالادست را جایگزین کنید.

  • در صورت خطا یا تغییر، نیازی به بازسازی مسیر Export ندارید.

  • Debug و پروفایل عملکرد ساده‌تر می‌شود.