bugs #152

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

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

криво работает SetKinERange

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

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);

beamenergy.png (31.8 KB) Ivan Muzalevsky, 03/01/2018 10:35 AM

History

#1 Updated by Sergey Belogurov almost 7 years ago

  • Assignee set to Mikhail Kozlov

#2 Updated by Vratislav Chudoba almost 7 years ago

  • Category set to Software
  • Priority changed from Высокий to Низкий
  • Parent task set to #134

#3 Updated by Vratislav Chudoba almost 7 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

Суть вопроса описал СГБ, задачи о задании равномерного распределения именно кинетической энергии пока что не стоит

Also available in: Atom PDF