Exemple #1
0
//________________________________________________________________
Bool_t 	KVCaloBase::Calculate(void)
{
	//Réalisation de la calorimétrie
	//Calcul de l'énergie d'excitation
	//appel de SumUp() 
	// 
	// Résolution de l'équation
	// Exci + Qini  = \Sigma Ek + \Sigma Q 
	//		-> Exci = \Sigma Ek + \Sigma Q - Qini
	// 
	// 
	
	if (!kIsModified) return kTRUE;
	kIsModified=kFALSE;
	// premier calcul depuis le dernier remplissage par Fill
	SumUp();
	
	ComputeExcitationEnergy();
	return kTRUE;
}
//________________________________________________________________
Bool_t   KVCalorimetry::Calculate(void)
{
   //Réalisation de la calorimétrie
   //Calcul de l'énergie d'excitation, température (optionnel), de l'énergie moyenne des neutrons (optionnel)
   //appel de SumUp()
   //Cette méthore retourne kTRUE si tout s'est bien passée, kFALSE si il y a un problème dans la résolution
   //du polynome d'ordre 2
   //
   // Deux modes de calcul:
   //------------------
   // - mode normal (par defaut)
   // Résolution de l'équation
   // Exci + Qini  = \Sigma Ek + \Sigma Q
   //    -> Exci = \Sigma Ek + \Sigma Q - Qini
   //
   // Optionnel :
   // le calcul de la température peut être également fait si la méthode DeduceTemperature(Double_t LevelDensityParameter) a été appelée
   // elle est obtenue via la formule : Exci = Asum/[LevelDensityParameter] * T*T
   //
   // - mode avec prise en compte des neutrons libres, actif si la métode
   // IncludeFreeNeutrons(Double_t AsurZ,Double_t NeutronMeanEnergyFactor,Double_t LevelDensityParameter)
   // Résolution de l'équation (polynome deuxième degrée en T (température) )
   // Asum/[LevelDensityParameter] * T*T + Qi - \Sigma Ek - [NeutronMeanEnergyFactor]*Mn*T - \Sigma Q = 0
   // on y obtient directement la température
   //

   //Info("Calculate","Debut");

   if (!kIsModified) return kTRUE;
   kIsModified = kFALSE;
   // premier calcul depuis le dernier remplissage par Fill
   SumUp();

   if (kfree_neutrons_included) {

      Double_t coefA = GetIngValue("Asum") / GetParValue("LevelDensityParameter");
      Double_t coefB = -1.*GetParValue("NeutronMeanEnergyFactor") * GetIngValue("Mneu");
      Double_t coefC = GetIngValue("Qini") - GetIngValue("Qsum") - GetIngValue("Eksum");

      // Resolution du polynome de degre 2
      // Les champs ne sont remplis que si une solution reelle est trouvee
      if (RootSquare(coefA, coefB, coefC)) {
         // la solution max donne la temperature
         SetIngValue("Temp", kracine_max);
         SetIngValue("Exci", coefA * TMath::Power(GetIngValue("Temp"), 2.));

         // ajout de l'energie des neutrons a l energie totale de la source
         SetIngValue("Ekneu", GetParValue("NeutronMeanEnergyFactor") * GetIngValue("Mneu")*GetIngValue("Temp"));
         AddIngValue("Eksum", GetIngValue("Ekneu"));

         //parametre additionnel
         //SetIngValue("Tmin",kracine_min); // la deuxieme solution de l'eq en T2
      } else {
         return kFALSE;
      }

   } else {

      ComputeExcitationEnergy();
      if (ktempdeduced) {
         ComputeTemperature();
      }

   }
   return kTRUE;
}