//________________________________________________________________ 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; }