kaliveda-dev team mailing list archive
-
kaliveda-dev team
-
Mailing list archive
-
Message #00034
[Bug 719251] Re: Erreur dans calcul de Sigma Rutherford
Finalement, ce n'est pas un vrai bug, mais tu as été piégée par une
classe (KV2Body) mal foutue.
Il y a une différence subtile entre KV2Body::SetOutgoing(Int_t, KVNucleus*) et KV2Body::SetOutgoing(KVNucleus*),
que tu peux peut-être deviner à partir des commentaires des deux méthodes, mais c'est bcp plus clair en lisant
directement le code source: avec SetOutgoing(Int_t, KVNucleus*) on s'attend à ce que l'utilisateur définisse
ET le noyau 3 ET le noyau 4, avec deux appels successifs. Donc même après ton kin->SetOutgoing(3,proj) la
cinématique n'est toujours pas définie correctement. Par contre si tu appelais kin->SetOutgoing(proj) qui va
automatiquement déduire le 4ème noyau par les lois de conservation, tout va bien:
root [2] gDataSetManager->GetDataSet("INDRA_camp5")->cd()
root [4] KVDBRun* runl=gIndraDB->GetRun(7291);
root [5] KV2Body *kin = runl->GetSystem()->GetKinematics()
root [12] kin->SetOutgoing(kin->GetNucleus(1))
root [13] kin->CalculateKinematics()
root [14] kin->Print()
***** REACTION 136Xe + 124Sn ---> 136Xe + 124Sn ******
E.LAB = 4352 MEV QGG = 0 MEV
E.EXC = 0 MEV ==> Q-REACTION = 0 MEV
AVAILABLE ENERGY IN C.M. : ECM = 2066.66 MEV (7.94868 MEV/A)
PROJECTILE VELOCITY IN LAB 7.66462 CM/NS ( 0.255664 * C )
VELOCITY OF C.M. 4.07391 CM/NS
ENERGY - VELOCITY OF NUCLEUS 1 IN CM : 985.998 MEV 3.71995 CM/NS
ENERGY - VELOCITY OF NUCLEUS 2 IN CM : 1080.66 MEV 4.07391 CM/NS
ENERGY - VELOCITY OF NUCLEUS 3 IN CM : 985.998 MEV 3.71995 CM/NS
ENERGY - VELOCITY OF NUCLEUS 4 IN CM : 1080.66 MEV 4.07391 CM/NS
MAXIMUM SCATTERING ANGLE IN LABORATORY
THETA #3# 65.74 DEG.
THETA #4# 90 DEG.
GRAZING ANGLE IN LABORATORY : PROJECTILE 3.90584 DEG.
GRAZING ANGLE IN LABORATORY : TARGET 85.9048 DEG.
root [15] kin->GetXSecRuthCM(2,3)
(const Double_t)1.23815237188176434e+03
root [16] kin->GetXSecRuthLab(2,3)
(const Double_t)5.38140690111322783e+03
root [17] kin->GetThetaCMProj(2,3)
(const Double_t)4.19039427584079771e+00
Mais c'est complètement débile d'avoir 2 méthodes SetOutgoing qui ne se comportent pas pareil!
Surtout que KV2Body calcule la cinématique à 2 corps, donc si on connaît la voie d'entrée
et UN noyau de la voie de sortie, on sait tout!
Donc je vais supprimer KV2Body::SetOutgoing(Int_t, KVNucleus*), et puis je crois que ce serait
plus sympa si on disait que si on ne définit pas les noyaux de la voie de sortie, on va supposer
qu'on veut calculer de la diffusion élastique, donc un appel à CalculateKinematics() suffira,
même plus besoin d'appeler SetOutgoing(kin->GetNucleus(1)).
** Changed in: kaliveda
Status: New => Confirmed
** Changed in: kaliveda
Importance: Critical => Medium
** Changed in: kaliveda
Assignee: (unassigned) => John Frankland (frankland)
--
You received this bug notification because you are a member of KaliVeda
Development Team, which is subscribed to KaliVeda.
https://bugs.launchpad.net/bugs/719251
Title:
Erreur dans calcul de Sigma Rutherford
Status in KaliVeda data analysis framework:
Confirmed
Bug description:
KV 1.8.0 au CC
Le calcul de la section efficace de diffusion Rutherford donne un résultat incorrect.
Après examen des détails, il me semble que le problème vient du calcul de l'angle cm (du proj)
pour un angle lab donné, le retour est thetaCM=thetaLab. Par exemple :
KVDetector *det=(KVDetector*)gIndra->GetDetectorByType(1,2,4); // 4=Si
KVTelescope*tel=det->GetTelescope();
runl=gIndraDB->GetRun(7291);
KV2Body *kin = runl->GetSystem()->GetKinematics()
KVNucleus *proj=new KVNucleus(runl->GetSystem()->GetZproj(),runl->GetSystem()->GetAproj())
kin->CalculateKinematics();
kin->SetOutgoing(3,proj);
kin->GetXSecRuthCM(2,3)
(const Double_t)2.38437563720703074e+04
kin->GetXSecRuthLab(2,3)
(const Double_t)2.36225764072999409e+04
runl->GetSystem()->GetEproj()
(const Float_t)3.20000000000000000e+01
kin->GetThetaCMProj(2,3)
(const Double_t)2.00000000000000000e+00
Comme on le voit l'angle CM renvoyé est égal à l'angle lab, et le valeur de
XSecRuthCM correspond bien à ThetaCM=2°. En regardant la source, on
voit que cela est possible si la valeur de K est nulle.
J'ai essayé de taper kin->SetOutgoing(3,proj) avant de calculer la cinématique, et j'obtiens
un résultat différent, mais toujours incorrect, ThetaCM=2.47°.
La valeur correcte est ThetaCM=4.19° (calcul non relativiste)
N'ai-je pas défini assez bien mon canal de sortie ? Ou y a t-il vraiment un bug ?
Que ceux qui ont utilisé ces fonctions me viennent en aide;
References