Developing #64
BeamDet диджитизация
Status: | Закрыта | Start date: | 07/11/2017 | |
---|---|---|---|---|
Priority: | Низкий | Due date: | ||
Assignee: | Mikhail Kozlov | % Done: | 0% | |
Category: | BeamDet | |||
Target version: | v-0.4 |
Description
Необходимо разработать класс ERRBeamDetDigitizer диджитизации для детектора BeamDet.
Моделирование отклика или диджитизация учитывает гранулярность электроники, неэффективности, шумы, тёмные счёты и продуцирует такую структуру данных сигнала, как если бы он был получен от реального детектора.
В первом приближении все перечисленные выше эффекты учитываются параметризованными распределениями ошибок.
Класс должен быть наследован от FairTask. Можно посмотреть структуру в ERRTelescopeHitFinder. Фактически таск перегоняет данные из одного представления (к примеру ERBeamDetTofPoint и ERBeamDetMWPC) в другое представление (назовем эти класс ERBeamDetTofDigi и ERBeamDetMwpcDigi). В каждом событии у нас есть коллекция поинтов на входе и должна быть коллекция Digi на выходе. Digi это в перспективе структура данных, которая будет приходить с реального детектора. В реальном детекторе мы не можем определить в какое именно место mwpc проволочки попала частица мы можем сказать ее номер, также не можем определить простым способом сколько частиц одновременно родилось/навелось на проволочку и сколько каждая из них оставила на ней энергии, мы можем сказать только суммарную энергию (которая потом будет в отсчетах электорники, а пока в энергетических единицах), также мы не можем говорить в рамках сенсора какая именно частица в какой момент в событии в него попала, мы зафиксируем время от первой, как время появления сигнала.
В Tof digi соответсвует пластинки с которой снимается сигнал. В MWPC номеру проволочки(Тут нужно тащить весь адрес: номер сдвоенной станции, первая или вторая в сдвоенной, номер проволочки).
Классы данных нужно наследовать от FairMultiLinkedData(позволяет отслеживать на базе каких других объектов образован) и расположить в папке data. Он должен содержать (полный адрес в геометрии - (все номера объемов)), суммарную энергию поинтов в секторе, время (как время самого первого поинта в сенсоре)). С помощью метода digi->AddLink(FairLink("BeamDetTofPoint",iPoint)); должен быть слинковам со всеми поинтами, которые учавстовали в его создании.
Энергию и время в обоих случаях нужно разыграть по гауссу с сигмой, переданной по интерфейсу из макроса (SetTofESigma(sigma), SetTofTSigma(sigma)).
Также нужно ввести порог на энергию для записи digi в файл (SetTofEThreshold(threshold))
Для теста: Tof: sigmaT = 100пс, sigmaE - уточнить у СГ, thresholdE - определить по спектру - 90% должно быть больше порога;MWPC:Надо посмотреть на спектр энерговыделений и на множественность vs порог. Множественность - количество загоревшихся проволочек на станции.
History
#1 Updated by Mikhail Kozlov over 7 years ago
Как я понял, нужно еще создать класс ERBeamDetSetup.
Какие у него должны быть атрибуты?
#2 Updated by Vitaliy Schetinin over 7 years ago
Не. Он нужен для реконструкции дальнейщей.
А макрос то добавь, которым ты все это тестировал. Можешь посмотреть на маркрос NeuRad_digi в macro/NeuRad
#3 Updated by Vitaliy Schetinin over 7 years ago
Да, в диджитизации Setup класс нужен, когда мы используем файлы параметров. Здесь пока их нет. А вот в макросе нойрада есть. Когда будешь копировать не забудь удалить логику которая включает загрузку дополнительных текстовых файлов параметров:
TString NeuRadDetDigiFile = gSystem->Getenv("VMCWORKDIR");
NeuRadDetDigiFile += "/parameters/NeuRad.digi.v4.par";
parInput1->open(NeuRadDetDigiFile.Data(),"in");
#4 Updated by Mikhail Kozlov over 7 years ago
Хорошо, это учту когда доберусь до макроса.
Я не понял, как правильно использовать digi->AddLink(FairLink("BeamDetTofPoint",iPoint)). Должно же быть несколько поинтов, из которых форируется один digi?
Внутри Exec() диджитизатора проходим по коллекции поинтов как в ERRTelescopeHitFinder, сравниваем энергию с порговой:
Float_t eloss = gRandom->Gaus(point->GetEnergyLoss(), fElossDispersion);
if (eloss fElossThreshold) continue;
и получается, что просто не записываем в digi все, что меньше порога. В каком месте делать ликовку поинтов?
#5 Updated by Vitaliy Schetinin over 7 years ago
0) Ну да в ERRTelescopeHitFinder пока ошибка, но там не страшно это из физики. Хотя я поправлю в ближайшее время. И он должен называться дигитайзер тоже.
1) У нас к одному считывающему объему подключен один проводок. На нем появится суммарный сигнал от всех энерговыделений в этом чувствительном объеме. Поэтому да, нужно отсортировать поинты по проволочкам (для MWPC), и их энергию просуммировать. А время взять как время самого первого.
2) Как видно из пункта 1, на один dig может приходится несколько поинтов. Информация об этом нам нужна при анализе. К примеру если мы захотим узнать какие треки сформировали этот digi. Для этого есть механизм линков. Первый аргумент AddLink это назвнание ветки в root файлах которое задается в Register. В этих ветках мы же храним TClonesArray, то есть массив объектов. Вот второй аргумент это номер объекта в этом TClonesArray. Тот по которому ты с помощью At(index) достаешь оттуда его. Это механизм кстати позволяет вешать на линки веса и сворачивать многоуровневые линки. К примеру дальше мы будем выстраивать такую цепь points
#6 Updated by Vitaliy Schetinin over 7 years ago
Закончил примерно тоже самое для QTelescope. Можно подсмотреть: https://github.com/ExpertRootGroup/er/blob/dev/telescope/ERQTelescopeDigitizer.cxx
#7 Updated by Mikhail Kozlov over 7 years ago
1) Как и можно ли вообще сделать так, чтобы в digi был номер события?
#8 Updated by Vitaliy Schetinin over 7 years ago
Можно, но не нужно.
1) Номер события можно достать из io менеджера таким образом ioman->GetEntryNr(). (а он сам синглетон - FairRootManager* ioman = FairRootManager::Instance();)
2) В выходном файле всегда есть атрибут fEventID в MCEventHeader, если используется FairRunSim или fMCEntryNo в EventHeader, если используется FairRunAna
#9 Updated by Mikhail Kozlov over 7 years ago
Для анализа трекинга MWPC с помощью TreeViewer нужно чтобы в качестве entry было событие, а не диджи. Должно быть 4 ветки, в каждой из которых лежат только диджи для одной из плоскостей.
При этом вроде бы терятся смысл коллекции диджи. Можешь как-то это прокомментировать?
#10 Updated by Vitaliy Schetinin over 7 years ago
В далеком и светлом будущем у нас будут методы работы c MWPC со множественностью больше 1.
#11 Updated by Vitaliy Schetinin over 7 years ago
- Status changed from Открыта to Закрыта