bugs #140

Developing #134: Симуляция эксперимента - первое приближение

bugs #170: Устранение ошибок

Энергия пучка

Added by Ivan Muzalevsky almost 7 years ago. Updated over 6 years ago.

Status:ЗакрытаStart date:02/17/2018
Priority:НормальныйDue date:02/23/2018
Assignee:Ivan Muzalevsky% Done:

100%

Category:-
Target version:-

Description

В макросе симуляции exp1803_full.C есть такие строки, относящиеся к созданию пучка 

 Double_t  kinE_MevPerNucleon = 40.;
  // Int_t     Z = 1, A = 3, Q = 1;
  // TString   ionName = "3H";
  Int_t Z = 2, A = 6, Q = 2;
  TString ionName = "6He";
  ERIonMixGenerator* generator = new ERIonMixGenerator(ionName, Z, A, Q, 1);
  Double32_t kin_energy = kinE_MevPerNucleon * 1e-3 * A; //GeV
  generator->SetKinE(kin_energy);
  generator->SetPSigmaOverP(0);

Я ожидаю, в full.root файле кинетическая энергия гелия-6 будет равна 0.24 ГэВ. При выводе такого выражения: he6.fEnergy - he6.fMass, я вижу 0.240989 для каждого события. Вопрос: откуда ещё дополнительный МэВ энергии? наверное пока что это не сильно повляет на результат, но всё таки это в этом нужно разобраться. 


Related issues

Related to Developing #143: Спектр возбуждений 5H Закрыта 02/18/2018 02/23/2018

History

#1 Updated by Ivan Muzalevsky almost 7 years ago

  • Due date set to 02/23/2018

#2 Updated by Sergey Belogurov almost 7 years ago

  • Assignee changed from Mikhail Kozlov to Vitaliy Schetinin

#3 Updated by Vitaliy Schetinin almost 7 years ago

Проблема:

Величиной, характеризующей трек, является импульс, а не кинетическая энергия. Для пересчета нужна масса. И тут начинаются танцы. Мы для пересчет используем формулу массы из FairIon: kProtonMass * A;, а когда формируется трек FairPrimaryGenerator-у не сообщается масса, а только PDG и он лезет за массой в Root TPdgDatabase и она там вполне может быть другая. Как и случилось в этот раз.

Лечение:

1) При формиронии трека массу в FairPrimaryGenerator надо передавать, а не давать ему считать ее самому. То есть указать в AddTrack параметры по умолчанию.

virtual void AddTrack(Int_t pdgid, Double_t px, Double_t py, Double_t pz,
                        Double_t vx, Double_t vy, Double_t vz,
                        Int_t parent = -1, Bool_t wanttracking = true,
                        Double_t e = -9e9, Double_t tof = 0.,
                        Double_t weight = 0., TMCProcess proc = kPPrimary);

2) Брать массу иона сразу из TPdgDatabase.

3) Если пользователь имеет дело с экзотикой, то должен массу иона задавать сам на всякий случай. Для этого есть метод ERIonGenerator::SetMass(mass)

 

#4 Updated by Ivan Muzalevsky almost 7 years ago

Vitaliy Schetinin wrote:

Проблема:

Величиной, характеризующей трек, является импульс, а не кинетическая энергия. Для пересчета нужна масса. И тут начинаются танцы. Мы для пересчет используем формулу массы из FairIon: kProtonMass * A;, а когда формируется трек FairPrimaryGenerator-у не сообщается масса, а только PDG и он лезет за массой в Root TPdgDatabase и она там вполне может быть другая. Как и случилось в этот раз.

Лечение:

1) При формиронии трека массу в FairPrimaryGenerator надо передавать, а не давать ему считать ее самому. То есть указать в AddTrack параметры по умолчанию.

virtual void AddTrack(Int_t pdgid, Double_t px, Double_t py, Double_t pz,
                        Double_t vx, Double_t vy, Double_t vz,
                        Int_t parent = -1, Bool_t wanttracking = true,
                        Double_t e = -9e9, Double_t tof = 0.,
                        Double_t weight = 0., TMCProcess proc = kPPrimary);

2) Брать массу иона сразу из TPdgDatabase.

3) Если пользователь имеет дело с экзотикой, то должен массу иона задавать сам на всякий случай. Для этого есть метод ERIonGenerator::SetMass(mass)

 

Виталик, спасибо большое за развёрнутый ответ. так вышло, что я почему-то не понял что и где поменять. буду рад если ты сделаешь соотвествующий комит, лечащий эту проблему. А я посмотрю, что ты имел ввиду.  спасибо

#5 Updated by Vitaliy Schetinin almost 7 years ago

Иван: это пока информация для понимания как это закодить, а не как пользоваться). А теперь еще немного такой информации:

Расследование показало

1) Табличка pdg database у рута находится тут: https://github.com/root-project/root/blob/master/etc/pdg_table.txt
2) Как видно там вообще нет ничего про ионы. Но если принтануть эту таблицу после нашего run->Init(), то в конце вижу

Cherenkov             50000050    Mass:   0.0000 Width (GeV): 0.0000e+00    Charge:   0.0
FeedbackPhoton        50000051    Mass:   0.0000 Width (GeV): 0.0000e+00    Charge:   0.0
GenericIon            50000060    Mass:   0.9383 Width (GeV): Stable    Charge:   1.0
Deuteron              1000010020    Mass:   1.8711 Width (GeV): Stable    Charge:   3.0
Triton                1000010030    Mass:   2.8094 Width (GeV): 1.6916e-33    Charge:   3.0
Alpha                 1000020040    Mass:   3.7284 Width (GeV): Stable    Charge:   6.0
HE3                   1000020030    Mass:   2.8094 Width (GeV): 0.0000e+00    Charge:   6.0
AntiDeuteron          -1000010020    Mass:   1.8756 Width (GeV): Stable    Charge:  -3.0
AntiTriton            -1000010030    Mass:   2.8089 Width (GeV): Stable    Charge:  -3.0
AntiAlpha             -1000020040    Mass:   3.7274 Width (GeV): Stable    Charge:  -6.0
AntiHE3               -1000020030    Mass:   2.8084 Width (GeV): Stable    Charge:  -6.0
28S                   1000160280    Mass:  26.0777 Width (GeV): 0.0000e+00    Charge:  48.0

3) 28S это то, что добавил наш генератор ионов. Все что выше, как бы это не было удивительно, добавляет FairEventManager::AddParticlesToPdgDataBase.
И ради чего? Чтобы в event display подсвечивать лейблы этих частиц, а не pdg код.
Но в данном месте расследование не заканчивается. Потому что масса серы не та, которую я ожидал (kProtonMass*A).

4) Ion заданный нами (как A,Z,Q,mass(определяется по глупой формуле или задается пользователем),ExitationE(задается пользователем)) сначала идет в FairMCApplication->AddIons()
потом в TGeant4->DefineIon и в определенный момент VMC говорит, что ему плевать на наше представление о массе иона и он сам ее определит по A,Z,Q, ExitationE.
Далеe vmc в  TG4ParticlesManager::AddIon начинает спрашивать у geant, знает ли он что то про ион (A,Z,ExitationE), если не знает то создает такой ион
и сам приписывает ему массу. Кухня того как Geant считает массу по  (A,Z,ExitationE) огромна. Там есть куча if на легкие ионы и всякие теоритические специальные модели.
Но если уж ничего не знает, то использует это

G4double mass = AtomicMass(A,Z);
// atomic mass is converted to nuclear mass according formula in  AME03
mass -= Z*electron_mass_c2;
mass += ( 14.4381*std::pow ( Z , 2.39 ) + 1.55468*1e-6*std::pow ( Z , 5.35 ) )*eV;      

------
Выводы:
1) то, что мы пытаемся указать массу иона через FairIon вообще не имеет никакого эффекта. Но имеет эффект то, что мы задаем энергию возбуждения.
2) навязать свою массу geant не дает. Просто крешится, если я в DatabasePDG задаю ион руками (я думаю поэтому такая отсечка массы стоит в vmc). Так что все, что мы можем крутить у ионов - Exitation
3) Для правильного пересчета в ERIonGenerator::SetEKin энергии в импульс первичного трека, массу надо спрашивать не у FairIon, а напрямую в G4IonTable::GetTable()->GetIon(A,Z,Q,Exitation).

 

 

#6 Updated by Vitaliy Schetinin almost 7 years ago

#7 Updated by Vitaliy Schetinin almost 7 years ago

Поправил. Проверяйте.

Теперь метода SetMass у генератора нет. Только  SetExcitationEnergy();

Но и расхождения в задаваемой кин энергии и получаемой тоже нет

#8 Updated by Sergey Belogurov almost 7 years ago

  • Assignee changed from Vitaliy Schetinin to Ivan Muzalevsky

Спасибо Bиталику, который сориентировал нас в проблеме. Теперь задача физиков разобраться, относителльно чего считается excitation energy,  По уму, это превышени массы основного состояния или полной  энергии возбужденного над A*AMU, но лучше Ивану в этом убедиться и написать в документацию ER ion generator,  что ему удалось установить "экспериментально" по поводу связи excitation energy и полной энергии.

#9 Updated by Vitaliy Schetinin almost 7 years ago

1) У нас вообще бывают возбужденные пучковые ионы?

2) Сейчас я запрограммировал, что есть масса основного состояния. Она берется из Geant по A,Z.  Во всех наших пересчетах меджду Кинетической энергией и импульсом за массу принимается эта масса + заданный пользователем exitation.

#10 Updated by Sergey Belogurov almost 7 years ago

Похоже, что масса иона в GEANT считается по хитрой формуле, а не как A*Amu+Excit. (это как делал СИ), поэтому Ивану стоит проанализировать, какую масс дает geant с тем, чтобы вводить правильную энергию возбуждения. 

Что касается возбужденных ионов.

Нет пучковые ионы мы рассматриваем в основном состоянии, но для корректировки массы этого состояния, вероятно, придется использовать переменную excitation energy, поскольку не факт, что geant правильно считает массу экзотических ионов. Важно понимать, что никакого размазывания энергии возбуждения по гауссу для пучковых инонов не требуется!

Есть еще другая тема - распад короткоживущего иона (H-5 в нашем случае). Поскольку этот ион распадается мгновенно, он не имеет трека и не должен пропагироваться geant. По сути этот ион существует только как 4-вектор с какой-то массой (полной энергией) и есть задача о размазывании этой полной энергии по гауссу. Боюсь, что здесь возникла некоторая путаница.  Все ли теперь понятно?

     

#11 Updated by Vitaliy Schetinin almost 7 years ago

Путаницы никакой нет. Есть генератор, есть распад. Сущности разные, с разными интерфейсами. Здесь обсуждали только генератор.

#12 Updated by Ivan Muzalevsky almost 7 years ago

  • Status changed from Открыта to Закрыта
  • % Done changed from 0 to 100

#13 Updated by Vratislav Chudoba over 6 years ago

  • Parent task set to #170

Also available in: Atom PDF