//Pour plus d'informations sur la méthode de calcul voir la documentation
float t0, t2;
float surface_I_Rise, surface_I_Fall;
float delta_T_Rise, delta_T_Fall;
float I_ground = protoSynergie->pulseSyn().aWkPt().at(index)->iGround() * 10;
float I_level = protoSynergie->pulseSyn().aWkPt().at(index)->iLevel() * 10;
float I_high = protoSynergie->pulseSyn().aWkPt().at(index)->iHigh() * 10;
// Pourcentage donc / 100 et converti en cA donc x 100
float I_20_percent_Rise = protoSynergie->pulseSyn().aWkPt().at(index)->iHigh() * protoSynergie->pulseSyn().iRise20Percent();
float I_40_percent_Rise = protoSynergie->pulseSyn().aWkPt().at(index)->iHigh() * protoSynergie->pulseSyn().iRise20Percent();
float I_60_percent_Rise = protoSynergie->pulseSyn().aWkPt().at(index)->iHigh() * protoSynergie->pulseSyn().iRise20Percent();
float I_80_percent_Rise = protoSynergie->pulseSyn().aWkPt().at(index)->iHigh() * protoSynergie->pulseSyn().iRise20Percent();
// Pourcentage donc / 100 et converti en cA donc x 10
float I_80_percent_Fall = protoSynergie->pulseSyn().aWkPt().at(index)->iHigh() * protoSynergie->pulseSyn().iFall80Percent();
float I_60_percent_Fall = protoSynergie->pulseSyn().aWkPt().at(index)->iHigh() * protoSynergie->pulseSyn().iFall60Percent();
float I_40_percent_Fall = protoSynergie->pulseSyn().aWkPt().at(index)->iHigh() * protoSynergie->pulseSyn().iFall40Percent();
float I_20_percent_Fall = protoSynergie->pulseSyn().aWkPt().at(index)->iHigh() * protoSynergie->pulseSyn().iRise20Percent();
// Temsp en 100µs qu'on converti en 10µs donc * 10
delta_T_Rise = (protoSynergie->pulseSyn().aWkPt().at(index)->tRise() * 10 / 5);
delta_T_Fall = (protoSynergie->pulseSyn().aWkPt().at(index)->tFall() * 10 / 5);
// Première étape : Calcul des pentes
float pente_Rise_1 = I_20_percent_Rise / delta_T_Rise;
float pente_Rise_2 = (I_40_percent_Rise - I_20_percent_Rise) / delta_T_Rise;
float pente_Rise_3 = (I_60_percent_Rise - I_40_percent_Rise) / delta_T_Rise;
float pente_Rise_4 = (I_80_percent_Rise - I_60_percent_Rise) / delta_T_Rise;
float pente_Rise_5 = (I_high - I_80_percent_Rise) / delta_T_Rise;
float pente_Fall_1 = (I_high - I_80_percent_Fall) / delta_T_Fall;
float pente_Fall_2 = (I_80_percent_Fall - I_60_percent_Fall) / delta_T_Fall;
float pente_Fall_3 = (I_60_percent_Fall - I_40_percent_Fall)/ delta_T_Fall;
float pente_Fall_4 = (I_40_percent_Fall - I_20_percent_Fall) / delta_T_Fall;
float pente_Fall_5 = (I_20_percent_Fall) / delta_T_Fall;
// Deuxième étape : Calcul des surfaces de triangle
float surface_Triangle_Rise_1 = I_20_percent_Rise * (delta_T_Rise / 2);
float surface_Triangle_Rise_2 = (I_40_percent_Rise - I_20_percent_Rise) * (delta_T_Rise / 2);
float surface_Triangle_Rise_3 = (I_60_percent_Rise - I_40_percent_Rise) * (delta_T_Rise / 2);
float surface_Triangle_Rise_4 = (I_80_percent_Rise - I_60_percent_Rise) * (delta_T_Rise / 2);
float surface_Triangle_Rise_5 = (I_high - I_80_percent_Rise) * (delta_T_Rise / 2);
float surface_Triangle_Fall_1 = (I_high - I_80_percent_Fall) * (delta_T_Fall / 2);
float surface_Triangle_Fall_2 = (I_80_percent_Fall - I_60_percent_Fall) * (delta_T_Fall / 2);
float surface_Triangle_Fall_3 = (I_60_percent_Fall - I_40_percent_Fall) * (delta_T_Fall / 2);
float surface_Triangle_Fall_4 = (I_40_percent_Fall - I_20_percent_Fall) * (delta_T_Fall / 2);
float surface_Triangle_Fall_5 = (I_20_percent_Fall) * (delta_T_Fall / 2);
// Troisième étape : Calcul des surfaces des rectangles sous les triangles
float surface_Rectangle_Rise_2 = I_20_percent_Rise * delta_T_Rise;
float surface_Rectangle_Rise_3 = I_40_percent_Rise * delta_T_Rise;
float surface_Rectangle_Rise_4 = I_60_percent_Rise * delta_T_Rise;
float surface_Rectangle_Rise_5 = I_80_percent_Rise * delta_T_Rise;
float surface_Rectangle_Fall_2 = I_80_percent_Fall * delta_T_Fall;
float surface_Rectangle_Fall_3 = I_60_percent_Fall * delta_T_Fall;
float surface_Rectangle_Fall_4 = I_40_percent_Fall * delta_T_Fall;
float surface_Rectangle_Fall_5 = I_20_percent_Fall * delta_T_Fall;
// Quatrième étape : Conditions et formules poru la sufrace à la montée
if(I_ground < I_20_percent_Rise)
{
t0 = I_ground / pente_Rise_1;
surface_I_Rise = ((((delta_T_Rise - t0) * I_ground) + (I_20_percent_Rise - I_ground) * (delta_T_Rise - t0)) / 2) + surface_Triangle_Rise_2 + surface_Triangle_Rise_3 + surface_Triangle_Rise_4 +surface_Triangle_Rise_5 + surface_Rectangle_Rise_2 + surface_Rectangle_Rise_3 + surface_Rectangle_Rise_4 + surface_Rectangle_Rise_5;
}
else if(I_ground < I_40_percent_Rise)
{
t0 = ((I_ground - I_20_percent_Rise) / pente_Rise_2) + delta_T_Rise;
surface_I_Rise = ((((2*delta_T_Rise - t0) * I_ground) * (I_40_percent_Rise - I_ground) * (2*delta_T_Rise - t0)) / 2) + surface_Triangle_Rise_3 + surface_Triangle_Rise_4 +surface_Triangle_Rise_5 + surface_Rectangle_Rise_3 + surface_Rectangle_Rise_4 + surface_Rectangle_Rise_5;
}
else if(I_ground < I_60_percent_Rise)
{
t0 = ((I_ground - I_40_percent_Rise) / pente_Rise_3) + 2*delta_T_Rise;
surface_I_Rise = ((((3*delta_T_Rise - t0) * I_ground) * (I_60_percent_Rise - I_ground) * (3*delta_T_Rise - t0)) / 2) + surface_Triangle_Rise_4 +surface_Triangle_Rise_5 + surface_Rectangle_Rise_4 + surface_Rectangle_Rise_5;
}
else if(I_ground < I_60_percent_Rise)
{
t0 = ((I_ground - I_60_percent_Rise) / pente_Rise_4) + 3*delta_T_Rise;
surface_I_Rise = ((((4*delta_T_Rise - t0) * I_ground) * (I_80_percent_Rise - I_ground) * (4*delta_T_Rise - t0)) / 2) + surface_Triangle_Rise_5 + surface_Rectangle_Rise_5;
}
else
{
t0 = ((I_ground - I_80_percent_Rise) / pente_Rise_5) + 4*delta_T_Rise;
surface_I_Rise = (((5*delta_T_Rise - t0) * I_ground) * (I_high - I_ground) * (5*delta_T_Rise - t0)) / 2;
}
// Cinquième étape : Conditions et formules pour la surface de descente
if(I_level > I_80_percent_Fall)
{
t2 = (I_high - I_ground) / pente_Fall_1;
surface_I_Fall = t2 * I_ground + ((I_high - I_ground) * t2 / 2);
}
else if(I_level > I_60_percent_Fall)
{
t2 = ((I_80_percent_Fall - I_ground) / pente_Fall_2) + delta_T_Fall;
surface_I_Fall = (((t2 - delta_T_Fall) * I_ground + ((I_80_percent_Fall - I_ground) * (t2 - delta_T_Fall))) / 2) + surface_Triangle_Fall_2 + surface_Rectangle_Fall_2;
}
else if(I_level > I_40_percent_Fall)
{
t2 = ((I_60_percent_Fall - I_ground) / pente_Fall_3) + 2*delta_T_Fall;
surface_I_Fall = (((t2 - 2*delta_T_Fall) * I_ground + ((I_60_percent_Fall - I_ground) * (t2 - 2*delta_T_Fall))) / 2) + surface_Triangle_Fall_2 + surface_Triangle_Fall_3 + surface_Rectangle_Fall_2 + surface_Rectangle_Fall_3;
}
else if(I_level > I_20_percent_Fall)
{
t2 = ((I_40_percent_Fall - I_ground) / pente_Fall_4) + 3*delta_T_Fall;
surface_I_Fall = (((t2 - 3*delta_T_Fall) * I_ground + ((I_40_percent_Fall - I_ground) * (t2 - 3*delta_T_Fall))) / 2) + surface_Triangle_Fall_2 + surface_Triangle_Fall_3 + surface_Triangle_Fall_4 + surface_Rectangle_Fall_2 + surface_Rectangle_Fall_3 + surface_Rectangle_Fall_4;
}
else
{
t2 = ((I_20_percent_Fall - I_ground) / pente_Fall_5) + 4*delta_T_Fall;
surface_I_Fall = (((t2 - 4*delta_T_Fall) * I_ground + ((I_20_percent_Fall - I_ground) * (t2 - 4*delta_T_Fall))) / 2) + surface_Triangle_Fall_2 + surface_Triangle_Fall_3 + surface_Triangle_Fall_4 + surface_Triangle_Fall_5 + surface_Rectangle_Fall_2 + surface_Rectangle_Fall_3 + surface_Rectangle_Fall_4 + surface_Rectangle_Fall_5;
}
// Sixième étape : Calcul du courant moyen et de T_ground
// Way down ground en A/ms converti en cA/10µs ==> pas de conversion
float t_way_down_ground = ((I_level - I_ground) / protoSynergie->pulseSyn().aWkPt().at(index)->iWayDownGround() * 20);
protoSynergie->pulseSyn().aWkPt().at(index)->setCoeffTReste((protoSynergie->pulseSyn().aWkPt().at(index)->tRise() * 10) - t0 + (protoSynergie->pulseSyn().aWkPt().at(index)->tHigh() * 10) + t2 + (protoSynergie->pulseSyn().aWkPt().at(index)->tLevel() * 10) + t_way_down_ground);
protoSynergie->pulseSyn().aWkPt().at(index)->setCoeffSReste(surface_I_Rise + (I_high * protoSynergie->pulseSyn().aWkPt().at(index)->tHigh() * 1000) + surface_I_Fall + (I_level * protoSynergie->pulseSyn().aWkPt().at(index)->tLevel() * 1000) + (t_way_down_ground * (I_level - I_ground) / 2));
float t_ground = (protoSynergie->pulseSyn().aWkPt().at(index)->coeffSReste() - (protoSynergie->pulseSyn().aWkPt().at(index)->genericWkPt().courant() * 100 * protoSynergie->pulseSyn().aWkPt().at(index)->coeffTReste())) / ((protoSynergie->pulseSyn().aWkPt().at(index)->genericWkPt().courant() * 100) - I_ground);
protoSynergie->pulseSyn().aWkPt().at(index)->setTGround(t_ground / 10);