Obecnie produkcja danych w CBM jest zarządzana przez pliki yaml i specjalne skrypty. Generalnie produkcja przebiega w kilku etapach:

  • transport - czyli symulacja przy pomocy Geanta tego jak cząstki się propagują w materiale detektora
  • digitalizacja - jest to symulowanie odpowiedzi detektora na depozycję energii przez cząstki z poprzedniego kroku
  • rekonstrukcja - to odnajdowanie trajektorii cząstek na podstawie sygnału z digitizacji
  • konwersja do AnalysisTree - jest to format danych używany do analiz fizycznych

Makra i skrypt znajduja się w katalogu macro/PWG/common/production. W celu symulacji uruchamia się skrypt run_json.sh z parametrem config.json, który tworzy odpowiednie skrypty. Skrypty te są wysyłane następnie na farmę. Z punktu widzenia "typowego użytkownika" należy edytować plik config.json gdyż tam znajdują się główne parametry symulacji. Poniżej tabela z głównymi ustawieniami pliku konfiguracyjnego. Pogrubioną czcionką te pola, które relatywnie często mogą się zmieniać (bo np. chcemy użyć nietypowego pola do zapisu danych, makra do transportu z innego miejsca niż to z domyślnym makrem do transportu itp.).

Nod Nod Nod Opis
accesorry batch jeśli true to wysyłaj joby na klaster
nEvents liczba eventów
jobRange zakres jobów
ram ilość RAM-u potrzebna do symulacji, jeśli damy za mało job się może wywalić na jakimś makrze
partition rodzaj kolejki na klastrze, zwykle definiuje maksymalne dostępne zasoby
time maksymalny czas jobu, jeśli job trwa dłużej zostanie zakończony 
logDir miejsce do przechowywania logów
cbmRoot ścieżka do skryptu ustawiającego zmienne środowiskowe CbmROOTa
jobScript ścieżka do skryptu, który jest wysyłany (może wymagać zmiany jeśli nie uruchamiamy z podkatalogu cbmroota)
transport run jeśli tak uruchom transport
macro ścieżka do makra transportującego
digitzation run jeśli tak uruchom digitizację
macro ścieżka do makra digitizującego
reconstruction run jeśli tak uruchom rekonstrucję
macro ścieżka do makra rekonstruującego
AT run jeśli tak konwertuj do AnalysisTree
macro makro do konwersji
transport input generator rodzaj danych wejściowych
file dane z generatora (uwaga: możemy mieć kilka generatorów na raz) - ścieżka do pliku z danym z generatora MC
output path miejsce gdzie dane będą zapisane
overwrite jeśli tak nadpisz
target ustawienia tarczy
digitization eventMode digitizacja, jeśli prawdziwe digitalizacja w trybie zderzenie po zderzeniu
timeSliceLenght długość timeslice'a (potrzebne w symulacji ciągłej)
input wejście (plik wyjściowy z transportu)
output wyjście
reconstruction rawFile wejście (plik wyjściowy z digitizacji)
nTimeSlices liczba timesliceów
output wyjście
sEvBuildRaw rodzaj event buildera
traFiles wyjście z transportu
AT traFiles wyjście z transportu
rawFile dane z digiziera (wyjście z digitizera)
recFile dane zrekonstruowane (wyjście z rekonsruckji)
unigenFile wejscie do transportu (dane z generatora MC)
output wyjście

Należy uważać na niektóre wartości, które wpisujemy w pola. Przykładowo często używane są zmienne środowiskowe (np. \${USER} albo \${VMCWORKDIR}), dodatkowo skrypt wstawia swoje zmienne np. \${taskId}. \${taskId} jest nadpisywana dla poszczególnych jobów - tzn. jest swego rodzaju numerem porządkowym (w końcu nie chcemy puszczać symulacji na 200 komputerach, które zapisują do tych samych plików).

Trzeba też uważać na rodzaj symulacji. W CBM mamy dwa rodzaje symulacji:

  • event by event - to najstarszy i dosyć sprawdzony rodzaj symulacji. Zakłada się tutaj że częstotliwość zderzeń jest na tyle nieduża że CBM może zaczynać zbieranie danych, gdy zacznie się kolizja i kończy gdy ostatnia wyprodukowana cząstka wyleci z detektora. Jest to typowy tryb zbierania danych dla większości współczesnych eksperymentów.
  • timeslice - to nowszy rodzaj symulacji. Tutaj zakłada się zbieranie danych ciągłe (tak jak to będzie w rzeczywistości w CBM). To oznacza że detektor ciągle zbiera dane i grupuje je w ramki czasowe (tzw. timeslice). W jednym timeslice może być wiele eventów. Nie mamy tu więc jasnego rozróżnienia pomiędzy poszczególnymi kolizjami i teoretycznie może się zdarzyć że cząstka powstała w jednym zderzeniu zostanie przypisana do kolejnego zderzenia. Jest to tryb symulacji, który jest obecnie mocno rozwijany toteż może czasem się wysypywać. Dlatego zalecam zacząć od symulacji event by event.

Niektóre parametry pliku konfiguracyjnego mogą generować konflikty np. ja zauważyłem że storeAllTimeslices oraz StartTime powinny być usunięte w symulacji event by event. Możliwe że, w kolejnych wersjach pojawia się nowe parametry.