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;
_______________________________________________
Mailing list: https://launchpad.net/~kaliveda-dev
Post to : [email protected]
Unsubscribe : https://launchpad.net/~kaliveda-dev
More help : https://help.launchpad.net/ListHelp