Developing #59
RTelescope симуляция
Status: | Открыта | Start date: | 07/02/2017 | |
---|---|---|---|---|
Priority: | Нормальный | Due date: | ||
Assignee: | - | % Done: | 0% | |
Category: | RTelescope | |||
Target version: | v-0.4 |
Description
Разработать геометрию и провести симуляцию для эксперимента S28
Детектор представляет из себя кольцо кремния. Разбитое на чувствительные секторы как по радиусу, так и по углу фи. 16 полос по радиусу и 16 секторов по углу фи.
Класс ERTelescope уже реализован в er для эксперимента Li10. В рамках данной задачи нужно изменить его геометрию и провести отлаживающие симуляции.
Стоит обратить внимение,что геометрия детектора сделана не с помощью примитива Tube, а c помощью примитива Sphere(https://geant4.web.cern.ch/geant4/G4UsersDocuments/UsersGuides/ForApplicationDeveloper/html/Detector/geomSolids.html) Это связано с багом при транспорте частиц через tube, когда он является чувствительным объемом. У сектора полой сферы задан большой радиус для того, чтобы отклонение от плоскости было незначительным.
Геометрия:
Внутренний радиус: 1.6 cm
Внешний радиус: 4.1 cm
Толщина 0.1 cm
Новую геометрию необходимо обозначить как v2 и провести с ней симуляции прописанные в макросе RTelescope_sim.C
History
#1 Updated by Vitaliy Schetinin over 7 years ago
- Assignee changed from Vitaliy Schetinin to Anonymous
#2 Updated by Vitaliy Schetinin over 7 years ago
По текущему состоянию:
1) Этот детектор раньше назывался DSRD. Где то я забыл переименовать. Замени везде в коде этой папки DSRD на RTelescope.
2) В макросе симуляции поменяй, пожалуйста, геометрию на новыую версию; настрой генератор так, чтобы он размазывал направление полета немного по тета и от 0 до 360 по фи.
3) Сейчас в коде ProcessHits используются статические переменные. Это старый подход. По новому эти переменные стали атрибутами класса. Смотри как написано в документации и у Миши в BeamDet. И посмотри всю переписку по симуляции BeamDet(http://er.jinr.ru/develop/issues/56).
#3 Updated by Vitaliy Schetinin over 7 years ago
- Assignee changed from Anonymous to Anonymous
#4 Updated by Sergey Belogurov over 7 years ago
- File ringCsI.png added
- File CrystCsI.png added
Совсем забыл, что за кремниевым кольцом с зазором около 1 мм стоит массив кристаллов CsI. Из ниже(выше?)следуюших рисунков видна геометрия. СГ
#5 Updated by Vitaliy Schetinin over 7 years ago
Посмотреть пример реализации детектора с двумя активными объёмами можно в Beamdet или Gadast
#6 Updated by Mikhail Kozlov over 7 years ago
В классе симуляциии почему-то не запоминаем PDG частиц, вместо них масса. Так и должно быть?
#7 Updated by Mikhail Kozlov over 7 years ago
Этот детектор сейчас унаследован не от ERDetector. Нужно исправить?
#8 Updated by Vitaliy Schetinin over 7 years ago
Да. Это преобразованный очень старый класс. Его надо привести к стандартному виду. От BeamDet в итоге не будет отличаться.
#9 Updated by Anonymous over 7 years ago
Не совсем понимаю как реализовать такую форму кристалла CsI. Одними AddNode не сделать ?
#10 Updated by Vitaliy Schetinin over 7 years ago
Каждый кристал можно собрать из двух примитивов TRD(тут смотреть параметризацию - https://geant4.web.cern.ch/geant4/G4UsersDocuments/UsersGuides/ForApplicationDeveloper/html/Detector/geomSolids.html).https://root.cern.ch/doc/master/classTGeoManager.html TGeoManager->MakeTrd1();
Эти примитивы нужно сложить с помощью булевской операции:https://root.cern.ch/doc/master/classTGeoCompositeShape.html
#11 Updated by Anonymous over 7 years ago
Залил геометрию
#12 Updated by Vitaliy Schetinin over 7 years ago
Выглядит здорово!
Я влил тебе в ветку все изменения из dev. Для того, чтобы было куда подсматривать. Обновись.
На данный момент по смиуляции нужно сделать следующее:
1) У нас будет два типа поинтов в RTelescope. Те что в силиконе и те, что в CsI. Нужно сделть два разных класса под них .Для этого переименнуй текущий в ERRTelescopeSiPoint. И создай класс ERRTelescopeCsIPoint.
2) По классу BeamDet/ERBeamDet.cxx можно отследить как работать в симуляции, когда у нас два типа чувствительных объемов.
а) Нужно зарегистрировать две ветки поинтов в выходном файле
б) Нужно ввести два чувствительных лобъема в CheckIfSensetive
в) Нужно сделать две функции типа AddPoint и вызывать ту, которая соответвует типу чувствительного объема в котором ты сейчас находишься.
г) У тебя были Sensor и Sector для описания того, куда попала частица в силиконе. В случае CsI это просто номер кристала.
#13 Updated by Sergey Belogurov over 7 years ago
Уточнение по геометрии. Оказалось, что внешний радиус чувствительной области кремниевой пластины - 42 мм, а не 41. Т.е. 16 активных колец заполняют радиусы от 16 мм до 42 мм
Кроме того, вокруг и внутри чувствительной области есть пасивные кольца кремния. Снаружи от радиуса 42мм до радиуса 50мм и изнутри от радиуса 15 мм до радиуса 16 мм.
#14 Updated by Anonymous over 7 years ago
Cделал два типа поинтов и поправил геометрию.
#15 Updated by Vitaliy Schetinin over 7 years ago
Посмотрел. Тывсе правильно понял. И про геометрию и про два типа поинтов. Можно переходить к осознанию диджитизации
#16 Updated by Vratislav Chudoba about 7 years ago
- File c1.gif added
- File RTelescope_sim_test.C added
- File sim.root added
- File show_sim.C added
- Priority changed from Низкий to Нормальный
Проверяв симмуляцию, нактнулся на нехорошую вещь. Она понятна из картинки в приложению (c1.gif и show_sim.C).
С помощью макроса RTelescope_sim_test.C в одном событии разыгриваются две частицы: протон с энергией 10 МэВ и альфа с энергией 70 МэВ. Видим, что обе частицы попадают в разыне места (как и было заложено в симмуляции), видим даже, что у них есть разные ID (пад 2 и 3). Когда строим сумарное выделение энергии в первом телескопе (протон должен остановиться в R1Si2, альфа в R1CsI) видим энергию около 80 МэВ (пад 4). Я бы ожидал увидеть точно 80 МэВ так как 70+10=80. Но если делаем отбор по сорту частицы, видим физически неправильную картинку. В паде 5 должны видеть 10 МэВ (но он пустой), а в паде 6 должно быть 70 МэВ.
Предполагаю, что проблема может быть связанна с (не)обнулением информации залитой в поинты во время итерации по одному событии. Или предполагалось, что в одном событию может быть только одна частица, а это неправильное предположение. Также напрыгает, что на 10 событий по 2 частицам видим всего лишь 20 поинтов. Наверно слишком высокие пороги для рождения вторичных частиц.
#17 Updated by Sergey Belogurov about 7 years ago
Я не получил майла по замечанию Вратислава. Поэтому залез и добавил watchers. См, пожалуйста, предыдущий коммент.
#18 Updated by Vitaliy Schetinin about 7 years ago
Олег, путаница скорее всего из-за того как введены чувствительные объемы. У тебя сейчас чувствительным названо все, что в своем имени имеет подстроки: sensor,sector,crystall. Но такие префиксы в геометрии v3 имеют не только предпологаемые чувствительные объемы, но и некоторые материнские к ним. Это может непредсказуемо отражаться на поведении метода ProcessHits. Для начала сделай более четкие отбор чувствительных объемов. К примеру добавь им в имя postfix sensitive.
#19 Updated by Anonymous about 7 years ago
Я поменял названия чувствительных объёмов в геометрии и ProcessHits, но ошибка в симуляции остаётся.
#20 Updated by Vitaliy Schetinin about 7 years ago
Vratislav Chudoba wrote:
Проверяв симмуляцию, нактнулся на нехорошую вещь. Она понятна из картинки в приложению (c1.gif и show_sim.C).
С помощью макроса RTelescope_sim_test.C в одном событии разыгриваются две частицы: протон с энергией 10 МэВ и альфа с энергией 70 МэВ. Видим, что обе частицы попадают в разыне места (как и было заложено в симмуляции), видим даже, что у них есть разные ID (пад 2 и 3). Когда строим сумарное выделение энергии в первом телескопе (протон должен остановиться в R1Si2, альфа в R1CsI) видим энергию около 80 МэВ (пад 4). Я бы ожидал увидеть точно 80 МэВ так как 70+10=80. Но если делаем отбор по сорту частицы, видим физически неправильную картинку. В паде 5 должны видеть 10 МэВ (но он пустой), а в паде 6 должно быть 70 МэВ.
Предполагаю, что проблема может быть связанна с (не)обнулением информации залитой в поинты во время итерации по одному событии. Или предполагалось, что в одном событию может быть только одна частица, а это неправильное предположение. Также напрыгает, что на 10 событий по 2 частицам видим всего лишь 20 поинтов. Наверно слишком высокие пороги для рождения вторичных частиц.
Вратислав:
1) В паде 5 ничего нет, потому что в RTelescope1CsIPoint.fELoss при RTelescope1CsIPoint.fPID меньше 3000 ничего нет. Протон остался в первых двух кремниях. Так работает Draw в случае хранения в ветках TClonesArray. Он строит только те entry в которых size каждой переменной Draw при применении условия больше нуля.
2) На eventDisplay я вижу, что альфа прошила весь setup насквозь. Это объясняет историю с шестым падом
#21 Updated by Vitaliy Schetinin about 7 years ago
После комментария от Сергея Геннадиевича о том, что если посчитать руками, то альфа должна остановиться в первом CsI, посмотрел еще раз. И увидел:
FairIonGenerator *ionGen = new FairIonGenerator(Z, A, Q, 1, 0., 0., momentumAlpha, xA, yA, zA);
Потом посмотрел тут: http://fairrootgroup.github.io/FairRoot/d9/dd3/classFairIonGenerator.html
И увидел:
px,py,pzMomentum components [GeV] per nucleon!
Поменял на:
FairIonGenerator *ionGen = new FairIonGenerator(Z, A, Q, 1, 0., 0., momentumAlpha/4, xA, yA, zA);
И альфа остановилась в первом CsI
#22 Updated by Vitaliy Schetinin about 7 years ago
- File c1.png added
- File show_sim.C added
Еще раз проверил эту задачу. Нашел нотацию для Draw, чтобы рисовать суммы гистограмм:
tr->Draw("Sum$(RTelescope1Si1Point.fELoss)+Sum$(RTelescope1Si2Point.fELoss)+Sum$(RTelescope1CsIPoint.fELoss)");
Построил картинки которые строил Вратислав. На них теперь все верно:
1) Сумма депозитов энергии частицы которая прошла только кремнии: 9.967 МэВ
2) Сумма депозитов частицы которая прошла еще и CsI: 69.937 МэВ
3) Сумма всех депозитов в первых кремниях и телескопе: 79.34 МэВ