www.pudn.com > tr4all.rar > objects0.h


//Copyright(c)2004  Alexander Kadyrov 
//**************  Modi operandi (f) and Objects (o)  
// Modus operandi is a procedure, it uses some objects whose indeces are  
//      listed in u[] 
//    and computes other objects, their indeces are listed in c[]. 
// An object can be a number or more complicted object,  
//     like fft of a trace, inverted ("br") or sorted trace. 
//    (a "trace" is an one-dimentional array tr) 
// A special case of object is a functional ("fnl").   
// A set of functionals is the aim of all computations. 
//    Oblects are just helping intermediate data. 
// an index of modus operandi and an index of an object can be in [2..Amount-1] (0 is excluded) 
//**************  The following text is not stage (ie trace,diam,circ) specific. 
int const Amount=100;// index of (f) and (o) < Amount;  
//Atributes of Objects: 
char *attName[Amount]; 
unsigned char attIsfnl[Amount];//0=non-scalar object,1=scalar object (can be fnl) 
unsigned char attKind[Amount];//0=no info;1=invariant;2=sensitive 
unsigned char attGray[Amount];//0=for binary trace only,1=for integer trace, 2=for double trace 
unsigned char attBack[Amount];//computing along "br" back (ie reverse) trace: 
// case 0 and 1 does not need a special modi operandi: 
// 0 - gives the same result as conputing alolng initial trace  
// 1 - changing sign 
// k>1 in object k - is computed by a separate modus and put in object k 
unsigned char attSack[Amount];// computing "minus (signed) back trace" 
// case 0 and 1 does not need a special modi operandi: 
// 0 - gives the same result as initial trace  
// 1 - changing sign 
// k>1 in object k - is computed by a separate modus and put in object k 
unsigned char attHasKappa[Amount];//0 - has no Kappa, 1 - has Kappa 
double           attKappa[Amount]; 
unsigned char attHasLambda[Amount];//0 - has no Lambda, 1 - has Lambda 
double           attLambda[Amount]; 
double attBlank[Amount];//default value of zeros [0,0,..,0] and empty [] trace 
unsigned char    attIsInteger[Amount];//0=double output,1=integer output for integer trace and dt=1 
 
 
void attFill(void)//Filling attributes. Each object should be characterised here 
{int k;// k must be >1 
k=3; 
    attIsfnl[k]=0;//0=non-scalar; 1=scalar 
    attName[k]="back (inverse) trace"; 
    //for non-functional these only two atts are needed 
    //  (Really, they are even not needed for computations!) 
k=5; 
    attIsfnl[k]=0;//0=non-scalar; 1=scalar 
    attName[k]="signed back (inverse) trace"; 
k=6; 
    attIsfnl[k]=0;//0=non-scalar; 1=scalar 
    attName[k]="abs trace"; 
k=33; 
    attIsfnl[k]=1;//0=non-scalar; 1=scalar 
    attName[k]="Radon=integral f(t), also computes sumNeg and sumPos"; 
    attKind[k]=1;//0 = no info;1 = invariant; 2 = sensitive 
    attGray[k]=2;//0=for binary trace only,1=for integer trace, 2=for double trace 
    attBack[k]=0;//0=same,1=sign,k>1 in object k  
    attSack[k]=1;//0=same,1=sign,k>1 in object k 
    attHasKappa[k]=1;attKappa[k]=-1; 
    attHasLambda[k]=1;attLambda[k]=1; 
    attBlank[k]=0; 
    attIsInteger[k]=1;//0=double output,1=integer output for integer trace and dt=1 
k=34; 
    attIsfnl[k]=1;//0=non-scalar; 1=scalar 
    attName[k]="t - median index dividing integral abs(f(t))";//out medindex; 
    attKind[k]=2;//0 = no info;1 = invariant; 2 = sensitive 
    attGray[k]=2;//0=for binary trace only,1=for integer trace, 2=for double trace 
    attBack[k]=1;//0=same,1=sign,k>1 in object k  
    attSack[k]=1;//0=same,1=sign,k>1 in object k 
    attHasKappa[k]=1;attKappa[k]=-1; 
    attHasLambda[k]=1;attLambda[k]=0; 
    attBlank[k]=0; 
    attIsInteger[k]=0;//0=double output,1=integer output for integer trace and dt=1 
 
k=35; 
    attIsfnl[k]=1;//0=non-scalar; 1=scalar 
    attName[k]="min"; 
    attKind[k]=1;//0 = no info;1 = invariant; 2 = sensitive 
    attGray[k]=2;//0=for binary trace only,1=for integer trace, 2=for double trace 
    attBack[k]=0; //0=same,1=sign,k>1 in object k  
    attSack[k]=39;//0=same,1=sign,k>1 in object k  
    attHasKappa[k]=1;attKappa[k]=0; 
    attHasLambda[k]=1;attLambda[k]=1; 
    attBlank[k]=0; 
    attIsInteger[k]=1;//0=double output,1=integer output for integer trace and dt=1 
 
k=37; 
    attIsfnl[k]=1;//0=non-scalar; 1=scalar 
    attName[k]="max"; 
    attKind[k]=1;//0 = no info;1 = invariant; 2 = sensitive 
    attGray[k]=2;//0=for binary trace only,1=for integer trace, 2=for double trace 
    attBack[k]=0;//0=same,1=sign,k>1 in object k   
    attSack[k]=41;//0=same,1=sign,k>1 in object k  
    attHasKappa[k]=1;attKappa[k]=0; 
    attHasLambda[k]=1;attLambda[k]=1; 
    attBlank[k]=0; 
    attIsInteger[k]=1;//0=double output,1=integer output for integer trace and dt=1 
k=38; 
    attIsfnl[k]=1;//0=non-scalar; 1=scalar 
    attName[k]="max abs(f(t))"; 
    attKind[k]=1;//0 = no info;1 = invariant; 2 = sensitive 
    attGray[k]=2;//0=for binary trace only,1=for integer trace, 2=for double trace 
    attBack[k]=0;//0=same,1=sign,k>1 in object k   
    attSack[k]=0;//0=same,1=sign,k>1 in object k  
    attHasKappa[k]=1;attKappa[k]=0; 
    attHasLambda[k]=1;attLambda[k]=1; 
    attBlank[k]=0; 
    attIsInteger[k]=1;//0=double output,1=integer output for integer trace and dt=1 
 
k=39;//min for sr 
k=41;//max for sr;  
k=43; 
    attIsfnl[k]=1;//0=non-scalar; 1=scalar 
    attName[k]="(average) t-index of max abs(f(t))"; 
    attKind[k]=2;//0 = no info;1 = invariant; 2 = sensitive 
    attGray[k]=2;//0=for binary trace only,1=for integer trace, 2=for double trace 
    attBack[k]=1;//0=same,1=sign,k>1 in object k   
    attSack[k]=1;//0=same,1=sign,k>1 in object k   
    attHasKappa[k]=1;attKappa[k]=-1; 
    attHasLambda[k]=1;attLambda[k]=0; 
    attBlank[k]=0; 
    attIsInteger[k]=0;//0=double output,1=integer output for integer trace and dt=1 
k=44; 
    attIsfnl[k]=0;//0=non-scalar; 1=scalar 
    attName[k]="differences 1"; 
k=45; 
    attIsfnl[k]=1;//0=non-scalar; 1=scalar 
    attName[k]="integral of |f'|   "; 
    attKind[k]=1;//0 = no info;1 = invariant; 2 = sensitive 
    attGray[k]=2;//0=for binary trace only,1=for integer trace, 2=for double trace 
    attBack[k]=0;//0=same,1=sign,k>1 in object k   
    attSack[k]=0;//0=same,1=sign,k>1 in object k   
    attHasKappa[k]=1;attKappa[k]=0;  
    attHasLambda[k]=1;attLambda[k]=1;  
    attBlank[k]=0; 
    attIsInteger[k]=0;//0=double output,1=integer output 
 
k=46; 
    attIsfnl[k]=1;//0=non-scalar; 1=scalar 
    attName[k]="integral of |f'| circular"; 
    attKind[k]=1;//0 = no info;1 = invariant; 2 = sensitive 
    attGray[k]=2;//0=for binary trace only,1=for integer trace, 2=for double trace 
    attBack[k]=0;//0=same,1=sign,k>1 in object k   
    attSack[k]=0;//0=same,1=sign,k>1 in object k   
    attHasKappa[k]=1;attKappa[k]=0;  
    attHasLambda[k]=1;attLambda[k]=1;  
    attBlank[k]=0; 
    attIsInteger[k]=1;//0=double output,1=integer output 
 
k=47; 
    attIsfnl[k]=0;//0=non-scalar; 1=scalar 
    attName[k]="differences 2"; 
k=48; 
    attIsfnl[k]=1;//0=non-scalar; 1=scalar 
    attName[k]="integral of |f''|   "; 
    attKind[k]=1;//0 = no info;1 = invariant; 2 = sensitive 
    attGray[k]=2;//0=for binary trace only,1=for integer trace, 2=for double trace 
    attBack[k]=0;//0=same,1=sign,k>1 in object k   
    attSack[k]=0;//0=same,1=sign,k>1 in object k   
    attHasKappa[k]=1;attKappa[k]=1;  
    attHasLambda[k]=1;attLambda[k]=1;  
    attBlank[k]=0; 
    attIsInteger[k]=1;//0=double output,1=integer output 
 
k=49; 
    attIsfnl[k]=1;//0=non-scalar; 1=scalar 
    attName[k]="integral of |f''| circular"; 
    attKind[k]=1;//0 = no info;1 = invariant; 2 = sensitive 
    attGray[k]=2;//0=for binary trace only,1=for integer trace, 2=for double trace 
    attBack[k]=0;//0=same,1=sign,k>1 in object k   
    attSack[k]=0;//0=same,1=sign,k>1 in object k   
    attHasKappa[k]=1;attKappa[k]=1;  
    attHasLambda[k]=1;attLambda[k]=1;  
    attBlank[k]=0; 
    attIsInteger[k]=1;//0=double output,1=integer output 
 
k=50; 
    attIsfnl[k]=1;//0=non-scalar; 1=scalar 
    attName[k]="t - gravity center of abs(f(t))"; 
    attKind[k]=2;//0 = no info;1 = invariant; 2 = sensitive 
    attGray[k]=2;//0=for binary trace only,1=for integer trace, 2=for double trace 
    attBack[k]=1;//0=same,1=sign,k>1 in object k   
    attSack[k]=1;//0=same,1=sign,k>1 in object k   
    attHasKappa[k]=1;attKappa[k]=-1;  
    attHasLambda[k]=1;attLambda[k]=0;  
    attBlank[k]=0; 
    attIsInteger[k]=0;//0=double output,1=integer output 
//-------------------- 
k=51; 
    attIsfnl[k]=1;//0=non-scalar; 1=scalar 
    attName[k]="Lp quasi-norm (p=0.5) = (sumSqR)^2, where sumSqR=integral sqrt(abs(f(t))"; 
    attKind[k]=1;//0 = no info;1 = invariant; 2 = sensitive 
    attGray[k]=2;//0=for binary trace only,1=for integer trace, 2=for double trace 
    attBack[k]=0;//0=same,1=sign,k>1 in object k  
    attSack[k]=0;//0=same,1=sign,k>1 in object k 
    attHasKappa[k]=1;attKappa[k]=-1;//check it later ??? 
    attHasLambda[k]=1;attLambda[k]=1; 
    attBlank[k]=0; 
    attIsInteger[k]=0;//0=double output,1=integer output for integer trace and dt=1 
 
k=52; 
    attIsfnl[k]=1;//0=non-scalar; 1=scalar 
    attName[k]="t median index dividing integral sqrt(abs(f(t)))"; 
    attKind[k]=2;//0 = no info;1 = invariant; 2 = sensitive 
    attGray[k]=2;//0=for binary trace only,1=for integer trace, 2=for double trace 
    attBack[k]=1;//0=same,1=sign,k>1 in object k   
    attSack[k]=1;//0=same,1=sign,k>1 in object k   
    attHasKappa[k]=1;attKappa[k]=-1;  
    attHasLambda[k]=1;attLambda[k]=0;  
    attBlank[k]=0; 
    attIsInteger[k]=0;//0=double output,1=integer output 
 
k=53; 
    attIsfnl[k]=0;//0=non-scalar; 1=scalar 
    attName[k]="Scaled trace"; 
k=54; 
    attIsfnl[k]=0;//0=non-scalar; 1=scalar 
    attName[k]="sorted sctr to the right and left of 34";  
 
k=55; 
    attIsfnl[k]=1;//0=non-scalar; 1=scalar 
    attName[k]="MedianW R+: f(x-c); c is median abscissa (34);\n   W=1"; 
    attKind[k]=1;//0 = no info;1 = invariant; 2 = sensitive 
    attGray[k]=2;//0=for binary trace only,1=for integer trace, 2=for double trace 
    attBack[k]=56;//0=same,1=sign,k>1 in object k  
    attSack[k]=57;//0=same,1=sign,k>1 in object k 
    attHasKappa[k]=1;attKappa[k]=0;//check it later ??? 
    attHasLambda[k]=1;attLambda[k]=1; 
    attBlank[k]=0; 
    attIsInteger[k]=1;//0=double output,1=integer output for integer trace and dt=1 
k=56;// see Back for the previous k 
k=57;// see Sack for the previous k 
 
 
k=58; 
    attIsfnl[k]=1;//0=non-scalar; 1=scalar 
    attName[k]="MedianW R+: f(t-c); c is median abscissa (34);\n   W=abs(f(t))(t-c)"; 
    attKind[k]=1;//0 = no info;1 = invariant; 2 = sensitive 
    attGray[k]=2;//0=for binary trace only,1=for integer trace, 2=for double trace 
    attBack[k]=59;//0=same,1=sign,k>1 in object k  
    attSack[k]=60;//0=same,1=sign,k>1 in object k 
    attHasKappa[k]=1;attKappa[k]=0;//check it later ??? 
    attHasLambda[k]=1;attLambda[k]=1; 
    attBlank[k]=0; 
    attIsInteger[k]=1;//0=double output,1=integer output for integer trace and dt=1 
k=59;// see Back for the previous k 
k=60;// see Sack for the previous k 
 
 
 
/* 
k=; // fnlG15.m 
    attIsfnl[k]=1;//0=non-scalar; 1=scalar 
    attName[k]="MedianW R+: |f(x-c)|; c is median abscissa (34);\n   W=sqrt(abs(f(t);" 
    attKind[k]=1;//0 = no info;1 = invariant; 2 = sensitive 
    attGray[k]=2;//0=for binary trace only,1=for integer trace, 2=for double trace 
    attBack[k]=??;//0=same,1=sign,k>1 in object k   
    attSack[k]=??;//0=same,1=sign,k>1 in object k   
    attHasKappa[k]=1;attKappa[k]=1;  
    attHasLambda[k]=1;attLambda[k]=1;  
    attBlank[k]=0; 
    attIsInteger[k]=1;//0=double output,1=integer output 
k=54; // see k=53; 
*/ 
 
/////////////////////////////////////////////////////// 
}//END. 
//Output: 
double o[Amount],a[Amount];//values of scalar objects 
void *po[Amount];//pointers to objects 
int lbeg,lend,L;double dlt;//trace label points from, 
                           //"lbeg" to "lend" (inclusive) with a gap "dlt" 
                           // lbeg and lend can be negative                   
                           //then L=lend-lbeg+1 : number of used points 
int start,fin,span,lstart,lfin;//start and fin are the first and the last non-zero elements of the track 
                //span=fin-start+1; 
                //lstart=start+lbeg;lfin=fin+lbeg=start+span-1+lbeg; 
 
int computedby[Amount];//who computes an object? It is Modus which index is in the place of an object