Developing #64

BeamDet диджитизация

Added by Vitaliy Schetinin almost 7 years ago. Updated almost 7 years ago.

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 almost 7 years ago

Как я понял, нужно еще создать класс ERBeamDetSetup.

Какие у него должны быть атрибуты?

#2 Updated by Vitaliy Schetinin almost 7 years ago

Не. Он нужен для реконструкции дальнейщей.

А макрос то добавь, которым ты все это тестировал. Можешь посмотреть на маркрос NeuRad_digi в macro/NeuRad

#3 Updated by Vitaliy Schetinin almost 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 almost 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 almost 7 years ago

0) Ну да в ERRTelescopeHitFinder пока ошибка, но там не страшно это из физики. Хотя я поправлю в ближайшее время. И он должен называться дигитайзер тоже.

1) У нас к одному считывающему объему подключен один проводок. На нем появится суммарный сигнал от всех энерговыделений в этом чувствительном объеме. Поэтому да, нужно отсортировать поинты по проволочкам (для MWPC), и их энергию просуммировать. А время взять как время самого первого.

2) Как видно из пункта 1, на один dig может приходится несколько поинтов. Информация об этом нам нужна при анализе. К примеру если мы захотим узнать какие треки сформировали этот digi. Для этого есть механизм линков. Первый аргумент AddLink это назвнание ветки в root файлах которое задается в Register. В этих ветках мы же храним TClonesArray, то есть массив объектов. Вот второй аргумент это номер объекта в этом TClonesArray. Тот по которому ты с помощью At(index) достаешь оттуда его. Это механизм кстати позволяет вешать на линки веса и сворачивать многоуровневые линки. К примеру дальше мы будем выстраивать такую цепь points

#6 Updated by Vitaliy Schetinin almost 7 years ago

Закончил примерно тоже самое для QTelescope. Можно подсмотреть: https://github.com/ExpertRootGroup/er/blob/dev/telescope/ERQTelescopeDigitizer.cxx

#7 Updated by Mikhail Kozlov almost 7 years ago

1) Как  и можно ли вообще сделать так, чтобы в digi был номер события?

#8 Updated by Vitaliy Schetinin almost 7 years ago

Можно, но не нужно.

1) Номер события можно достать из io менеджера таким образом ioman->GetEntryNr(). (а он сам синглетон - FairRootManager* ioman = FairRootManager::Instance();)

2) В выходном файле всегда есть атрибут fEventID в MCEventHeader, если используется FairRunSim или fMCEntryNo в EventHeader, если используется FairRunAna

#9 Updated by Mikhail Kozlov almost 7 years ago

Для анализа трекинга MWPC с помощью TreeViewer нужно чтобы в качестве entry было событие, а не диджи. Должно быть 4 ветки, в каждой из которых лежат только диджи для одной из плоскостей. 

При этом вроде бы терятся смысл коллекции диджи. Можешь как-то это прокомментировать? 

#10 Updated by Vitaliy Schetinin almost 7 years ago

В далеком и светлом будущем у нас будут методы работы c MWPC со множественностью больше 1.

#11 Updated by Vitaliy Schetinin almost 7 years ago

  • Status changed from Открыта to Закрыта

Also available in: Atom PDF