bugs #152
Developing #134: Симуляция эксперимента - первое приближение
bugs #170: Устранение ошибок
криво работает SetKinERange
Status: | Закрыта | Start date: | 03/01/2018 | |
---|---|---|---|---|
Priority: | Низкий | Due date: | ||
Assignee: | Mikhail Kozlov | % Done: | 100% | |
Category: | Software | |||
Target version: | - |
Description
Возник вопрос о правильности работы метода void ERIonGenerator::SetKinERange(Double32_t kinEMin, Double32_t kinEMax).
В его описании написано следующее: /** @brief Defines uniform distribution boundaries of ion kinetic energy [GeV].
** @param kinEMin minimun ion kinetic energy [GeV].
** @param kinEMax maximum ion kinetic energy [GeV].
**/
void SetKinERange(Double32_t kinEMin, Double32_t kinEMax);
Я ожидаю равномерное квадратное распределение энергии, вижу прикреплённую картинку. прикрепляю также строки создания генератора:
FairPrimaryGenerator* primGen = new FairPrimaryGenerator();
Double_t kinE_MevPerNucleon = 30.;
// 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->SetKinERange(0.006, kin_energy);
// generator->SetKinE(kin_energy);
// generator->SetPSigmaOverP(0);
Double32_t sigmaTheta = 0.004*TMath::RadToDeg();
generator->SetThetaSigma(0, 0);
// generator->SetThetaRange(0., 5.);
// generator->SetPhiRange(0, 360);
generator->SetBoxXYZ(0., 0., 0, 0, beamStartPosition);
generator->SpreadingOnTarget();
primGen->AddGenerator(generator);
run->SetGenerator(primGen);
History
#1 Updated by Sergey Belogurov over 6 years ago
- Assignee set to Mikhail Kozlov
#2 Updated by Vratislav Chudoba over 6 years ago
- Category set to Software
- Priority changed from Высокий to Низкий
- Parent task set to #134
#3 Updated by Vratislav Chudoba over 6 years ago
- Due date deleted (
03/08/2018)
#4 Updated by Vratislav Chudoba over 6 years ago
- Parent task changed from #134 to #170
#5 Updated by Sergey Belogurov over 6 years ago
Иван, в таких случаях прежде чем писать задачу надо бы в код глянуть. Там все просто. В файле https://github.com/ExpertRootGroup/er/blob/dev/generators/ERIonGenerator.cxx видно, что разыгрывается равномерное распределние по импульсу.
if (fPRangeIsSet ) { | |
pabs = gRandom->Uniform(fPMin,fPMax); |
А перед этим:
void ERIonGenerator::SetKinERange(Double32_t kinEMin, Double32_t kinEMax) | |
{ | |
fPMin = TMath::Sqrt(kinEMin*kinEMin + 2.*kinEMin*fIonMass); | |
fPMax = TMath::Sqrt(kinEMax*kinEMax + 2.*kinEMax*fIonMass); | |
fPRangeIsSet=kTRUE; | |
} |
Тут надо либо замениить описание, что границы по кин энергии переводятся в границы для равномерного распределния модуля импульса, либо, если действительно зачем-то нужно равномерное распределение по кин энергии, сначала разыгрывать жнергию, а потом переводитьь ее в модуль импульса. Уточни постановку задачи! Исправить описание, или тебе реально нужно равномерное распределение по кин энергии?
#6 Updated by Ivan Muzalevsky over 6 years ago
- Status changed from Открыта to Закрыта
- % Done changed from 0 to 100
Суть вопроса описал СГБ, задачи о задании равномерного распределения именно кинетической энергии пока что не стоит