Skip to content
Snippets Groups Projects
Commit 661031bb authored by Jean-François Denis's avatar Jean-François Denis
Browse files

save

parent 74818cc4
No related branches found
No related tags found
No related merge requests found
......@@ -191,3 +191,103 @@ record(waveform, "$(DEVICE):CALC-ANGLEwf") {
field(FTVL, "FLOAT")
field(NELM, "$(NELM)")
}
###########################################################################################
########################## CALCUL PROJECTION X et Y ######################################
###########################################################################################
## Function that calculate the projection X et Y
record(aSub, "$(DEVICE):CALC-PROJXY") {
######### INPUTS #########
## Angle Waveform
field(FTA, "FLOAT")
field(NOA,$(NELM))
field(INPA, "$(DEVICE):BUFF-ANGLE")
## Current Waveform
field(FTB, "FLOAT")
field(NOB,$(NELM))
field(INPB, "$(DEVICE):BUFF-CURRENT")
## Position Waveform
field(FTC, "FLOAT")
field(NOC,$(NELM))
field(INPC, "$(DEVICE):BUFF-MTR-POS")
## Nb angle total
field(FTD, "LONG")
field(NOD, "1")
field(INPD, "$(DEVICE):$(SCAN_EF).NPTS")
## Nb position total
field(FTE, "LONG")
field(NOE, "1")
field(INPE, "$(DEVICE):$(SCAN_SLIT).NPTS")
######### OUTPUTS #########
## PROJECTION X Waveform output
field(FTVA, "FLOAT")
field(NOVA, "$(NELM)")
field(OUTA, "$(DEVICE):CALC-PROJ-Xwf PP")
## PROJECTION X output
field(FTVB, "FLOAT")
field(NOVB, "1")
field(OUTB, "$(DEVICE):CALC-PROJ-X PP")
## PROJECTION X Waveform output (abcisse)
field(FTVC, "FLOAT")
field(NOVC, "$(NELM)")
field(OUTC, "$(DEVICE):CALC-PROJ-Xabsc PP")
## PROJECTION Y Waveform output
field(FTVD, "FLOAT")
field(NOVD, "$(NELM)")
field(OUTD, "$(DEVICE):CALC-PROJ-Ywf PP")
## PROJECTION Y output
field(FTVE, "FLOAT")
field(NOVE, "1")
field(OUTE, "$(DEVICE):CALC-PROJ-Y PP")
## PROJECTION Y Waveform output
field(FTVD, "FLOAT")
field(NOVD, "$(NELM)")
field(OUTD, "$(DEVICE):CALC-Yabsc PP")
######### FUNCTION #######
field(SNAM, "CREATE_PROJXY")
}
################ RESULTATS ##################
####### PROJECTION X ##########
record(ao, "$(DEVICE):CALC-PROJ-X") {
}
## WAVEFORM PROJECTION X
record(waveform, "$(DEVICE):CALC-PROJ-Xwf") {
field(FTVL, "FLOAT")
field(NELM, "$(NELM)")
}
## WAVEFORM PROJECTION X ABCISSE
record(waveform, "$(DEVICE):CALC-PROJ-Xabsc") {
field(FTVL, "FLOAT")
field(NELM, "$(NELM)")
}
####### PROJECTION Y ##########
record(ao, "$(DEVICE):CALC-PROJ-Y") {
}
## WAVEFORM PROJECTION Y
record(waveform, "$(DEVICE):CALC-PROJ-Ywf") {
field(FTVL, "FLOAT")
field(NELM, "$(NELM)")
}
## WAVEFORM PROJECTION Y ABCISSE
record(waveform, "$(DEVICE):CALC-Yabsc") {
field(FTVL, "FLOAT")
field(NELM, "$(NELM)")
}
This diff is collapsed.
......@@ -133,3 +133,105 @@ static int CREATE_TAB(aSubRecord *precord) {
}
/* Note the function must be registered at the end. */
epicsRegisterFunction(CREATE_TAB);
/*
* This function allows to create the complete waveform for X et Y projection
*/
static int CREATE_PROJXY(aSubRecord *precord) {
/*inputs*/
float *ptr_angle;
ptr_angle = (float *)precord->a; // waveform ANGLE
float *ptr_current;
ptr_current = (float *)precord->b; // Waveform CURRENT
float *ptr_pos;
ptr_pos = (float *)precord->c; // waveform POSITION
long nbAngle = *(long *)precord->d; // Nb Angle
long nbPosition = *(long *)precord->e; // Nb position
/*outputs*/
float *ptr_projX=(float*)(precord->vala);
float projX=*(float*)(precord->valb);
float *projXAbsc=(float*)(precord->valc);
float *ptr_projY=(float*)(precord->vald);
float projY=*(float*)(precord->vale);
float *projYAbsc=(float*)(precord->valf);
int nelmComp = precord->noa;
int nelm = precord->nob;
int i;
int u;
int cpt_for=0.0;
float sumTemp=0.0;
float projectionX=0.0;
float projectionY=0.0;
float sumCurrentTot=0.0;
/***** SUM of current ******/
for (i = 0 ; i < nbPosition; i++)
{
sumTemp=0.0;
ptr_current = (float *)precord->b;
if(i!=0){ptr_current=ptr_current+i;}
for (u = 0 ; u < nbAngle; u++)
{
sumTemp=*ptr_current+sumTemp;
ptr_current=ptr_current+nbPosition;
}
*ptr_projX=sumTemp;
sumCurrentTot=sumCurrentTot+sumTemp;
printf("Current total = %f",sumCurrentTot);
ptr_projX++;
}
/***** X Projection ******/
sumTemp=0.0;
for (i = 0 ; i < nbPosition; i++)
{
ptr_current = (float *)precord->b;
if(i!=0){ptr_current=ptr_current+i;}
printf("\nMTR=%f",*ptr_pos);
for (u = 0 ; u < nbAngle; u++)
{
sumTemp=((*ptr_current)* (*ptr_pos))+sumTemp;
printf("\nsumTemp=%f",sumTemp);
ptr_current=ptr_current+nbPosition;
}
projectionX=projectionX+sumTemp;
*projXAbsc=*ptr_pos;
ptr_pos++;
projXAbsc++;
}
projectionX=projectionX/sumCurrentTot;
projX=projectionX;
printf("\nprojectionX=%f",projectionX);
/***** Y Projection ******/
sumTemp=0.0;
ptr_current = (float *)precord->b;
for (i = 0 ; i < nbAngle; i++)
{
printf("\nANGLE=%f",*ptr_angle);
for (u = 0 ; u < nbPosition; u++)
{
sumTemp=((*ptr_current)* (*ptr_angle))+sumTemp;
printf("\nsumTemp=%f",sumTemp);
ptr_current++;
}
projectionY=projectionY+sumTemp;
*projYAbsc=*ptr_angle;
ptr_angle++;
projYAbsc++;
}
projectionY=projectionY/sumCurrentTot;
projY=projectionY;
printf("\nprojectionX=%f",projectionX);
return 0;
}
/* Note the function must be registered at the end. */
epicsRegisterFunction(CREATE_PROJXY);
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment