Replace Progs/RNAalifold with x64 binary and add all other programs
[jabaws.git] / binaries / src / ViennaRNA / H / data_structures.h
1 #ifndef __VIENNA_RNA_PACKAGE_DATA_STRUCTURES_H__
2 #define __VIENNA_RNA_PACKAGE_DATA_STRUCTURES_H__
3
4 #include "energy_const.h"
5 /**
6  *  \file data_structures.h
7  *  \brief All datastructures and typedefs shared among the Vienna RNA Package can be found here
8  */
9
10 /* to use floats instead of doubles in pf_fold() comment next line */
11 #define LARGE_PF
12 #ifdef  LARGE_PF
13 #define FLT_OR_DBL double
14 #else
15 #define FLT_OR_DBL float
16 #endif
17
18 #ifndef NBASES
19 #define NBASES 8
20 #endif
21
22 #ifndef MAXALPHA
23 /**
24  *  \brief Maximal length of alphabet
25  */
26 #define MAXALPHA              20
27 #endif
28
29 /**
30  *  \brief Maximum density of states discretization for subopt
31  */
32 #define MAXDOS                1000
33
34 #define   VRNA_GQUAD_MAX_STACK_SIZE     7
35 #define   VRNA_GQUAD_MIN_STACK_SIZE     2
36 #define   VRNA_GQUAD_MAX_LINKER_LENGTH  15
37 #define   VRNA_GQUAD_MIN_LINKER_LENGTH  1
38 #define   VRNA_GQUAD_MIN_BOX_SIZE       ((4*VRNA_GQUAD_MIN_STACK_SIZE)+(3*VRNA_GQUAD_MIN_LINKER_LENGTH))
39 #define   VRNA_GQUAD_MAX_BOX_SIZE       ((4*VRNA_GQUAD_MAX_STACK_SIZE)+(3*VRNA_GQUAD_MAX_LINKER_LENGTH))
40
41
42 /*
43 * ############################################################
44 * Here are the type definitions of various datastructures
45 * shared among the Vienna RNA Package
46 * ############################################################
47 */
48
49 /**
50  *  \brief this datastructure is used as input parameter in functions of PS_dot.h and others
51  */
52 typedef struct plist {
53   int i;
54   int j;
55   float p;
56   int type;
57 } plist;
58
59 /**
60  *  \brief this datastructure is used as input parameter in functions of PS_dot.c
61  */
62 typedef struct cpair {
63   int i,j,mfe;
64   float p, hue, sat;
65 } cpair;
66
67 /**
68  *  \brief this is a workarround for the SWIG Perl Wrapper RNA plot function
69  *  that returns an array of type COORDINATE
70  */
71 typedef struct {
72   float X; /* X coords */
73   float Y; /* Y coords */
74 } COORDINATE;
75
76 /**
77  *  \brief  Stack of partial structures for backtracking
78  */
79 typedef struct sect {
80   int  i;
81   int  j;
82   int ml;
83 } sect;
84
85 /**
86  *  \brief  Base pair
87  */
88 typedef struct bondT {
89    unsigned int i;
90    unsigned int j;
91 } bondT;
92
93 /**
94  *  \brief  Base pair with associated energy
95  */
96 typedef struct bondTEn {
97    int i;
98    int j;
99    int energy;
100 } bondTEn;
101
102 /**
103  *  \brief The data structure that contains the complete model details used throughout the calculations
104  *
105  */
106 typedef struct{
107   int     dangles;      /**<  \brief  Specifies the dangle model used in any energy evaluation (0,1,2 or 3)
108                               \note   Some function do not implement all dangle model but only a subset of
109                                       (0,1,2,3). Read the documentaion of the particular recurrences or
110                                       energy evaluation function for information about the provided dangle
111                                       model.
112                         */
113   int     special_hp;   /**<  \brief  Include special hairpin contributions for tri, tetra and hexaloops */
114   int     noLP;         /**<  \brief  Only consider canonical structures, i.e. no 'lonely' base pairs */
115   int     noGU;         /**<  \brief  Do not allow GU pairs */
116   int     noGUclosure;  /**<  \brief  Do not allow loops to be closed by GU pair */
117   int     logML;        /**<  \brief  Use logarithmic scaling for multi loops */
118   int     circ;         /**<  \brief  Assume molecule to be circular */
119   int     gquad;        /**<  \brief  Include G-quadruplexes in structure prediction */
120 } model_detailsT;
121
122 /**
123  *  \brief The datastructure that contains temperature scaled energy parameters.
124  */
125 typedef struct{
126   int id;
127   int stack[NBPAIRS+1][NBPAIRS+1];
128   int hairpin[31];
129   int bulge[MAXLOOP+1];
130   int internal_loop[MAXLOOP+1];
131   int mismatchExt[NBPAIRS+1][5][5];
132   int mismatchI[NBPAIRS+1][5][5];
133   int mismatch1nI[NBPAIRS+1][5][5];
134   int mismatch23I[NBPAIRS+1][5][5];
135   int mismatchH[NBPAIRS+1][5][5];
136   int mismatchM[NBPAIRS+1][5][5];
137   int dangle5[NBPAIRS+1][5];
138   int dangle3[NBPAIRS+1][5];
139   int int11[NBPAIRS+1][NBPAIRS+1][5][5];
140   int int21[NBPAIRS+1][NBPAIRS+1][5][5][5];
141   int int22[NBPAIRS+1][NBPAIRS+1][5][5][5][5];
142   int ninio[5];
143   double  lxc;
144   int     MLbase;
145   int     MLintern[NBPAIRS+1];
146   int     MLclosing;
147   int     TerminalAU;
148   int     DuplexInit;
149   int     Tetraloop_E[200];
150   char    Tetraloops[1401];
151   int     Triloop_E[40];
152   char    Triloops[241];
153   int     Hexaloop_E[40];
154   char    Hexaloops[1801];
155   int     TripleC;
156   int     MultipleCA;
157   int     MultipleCB;
158   int     gquad [VRNA_GQUAD_MAX_STACK_SIZE + 1]
159                 [3*VRNA_GQUAD_MAX_LINKER_LENGTH + 1];
160
161   double  temperature;            /**<  \brief  Temperature used for loop contribution scaling */
162
163   model_detailsT model_details;   /**<  \brief  Model details to be used in the recursions */
164
165 }  paramT;
166
167 /**
168  *  \brief  The datastructure that contains temperature scaled Boltzmann weights of the energy parameters.
169  */
170 typedef struct{
171   int     id;
172   double  expstack[NBPAIRS+1][NBPAIRS+1];
173   double  exphairpin[31];
174   double  expbulge[MAXLOOP+1];
175   double  expinternal[MAXLOOP+1];
176   double  expmismatchExt[NBPAIRS+1][5][5];
177   double  expmismatchI[NBPAIRS+1][5][5];
178   double  expmismatch23I[NBPAIRS+1][5][5];
179   double  expmismatch1nI[NBPAIRS+1][5][5];
180   double  expmismatchH[NBPAIRS+1][5][5];
181   double  expmismatchM[NBPAIRS+1][5][5];
182   double  expdangle5[NBPAIRS+1][5];
183   double  expdangle3[NBPAIRS+1][5];
184   double  expint11[NBPAIRS+1][NBPAIRS+1][5][5];
185   double  expint21[NBPAIRS+1][NBPAIRS+1][5][5][5];
186   double  expint22[NBPAIRS+1][NBPAIRS+1][5][5][5][5];
187   double  expninio[5][MAXLOOP+1];
188   double  lxc;
189   double  expMLbase;
190   double  expMLintern[NBPAIRS+1];
191   double  expMLclosing;
192   double  expTermAU;
193   double  expDuplexInit;
194   double  exptetra[40];
195   double  exptri[40];
196   double  exphex[40];
197   char    Tetraloops[1401];
198   double  expTriloop[40];
199   char    Triloops[241];
200   char    Hexaloops[1801];
201   double  expTripleC;
202   double  expMultipleCA;
203   double  expMultipleCB;
204   double  expgquad[VRNA_GQUAD_MAX_STACK_SIZE + 1]
205                   [3*VRNA_GQUAD_MAX_LINKER_LENGTH + 1];
206
207   double  kT;
208   double  pf_scale;     /**<  \brief    Scaling factor to avoid over-/underflows */
209
210   double  temperature;  /**<  \brief    Temperature used for loop contribution scaling */
211   double  alpha;        /**<  \brief    Scaling factor for the thermodynamic temperature
212                               \details  This allows for temperature scaling in Boltzmann
213                                         factors independently from the energy contributions.
214                                         The resulting Boltzmann factors are then computed by
215                                         \f$ e^{-E/(\alpha \cdot K \cdot T)} \f$
216                         */
217
218   model_detailsT model_details; /**<  \brief  Model details to be used in the recursions */
219
220 }  pf_paramT;
221
222
223
224 /*
225 * ############################################################
226 * SUBOPT data structures
227 * ############################################################
228 */
229
230
231 /**
232  *  \brief  Base pair data structure used in subopt.c
233  */
234 typedef struct {
235   int i;
236   int j;
237 } PAIR;
238
239 /**
240  *  \brief  Sequence interval stack element used in subopt.c
241  */
242 typedef struct {
243     int i;
244     int j;
245     int array_flag;
246 } INTERVAL;
247
248 /**
249  *  \brief  Solution element from subopt.c
250  */
251 typedef struct {
252   float energy;       /**< \brief Free Energy of structure in kcal/mol */
253   char *structure;    /**< \brief Structure in dot-bracket notation */
254 } SOLUTION;
255
256 /*
257 * ############################################################
258 * COFOLD data structures
259 * ############################################################
260 */
261
262 /**
263  *  \brief  
264  */
265 typedef struct cofoldF {
266   /* free energies for: */
267   double F0AB;  /**< \brief Null model without DuplexInit */
268   double FAB;   /**< \brief all states with DuplexInit correction */
269   double FcAB;  /**< \brief true hybrid states only */
270   double FA;    /**< \brief monomer A */
271   double FB;    /**< \brief monomer B */
272 } cofoldF;
273
274 /**
275  *  \brief  
276  */
277 typedef struct ConcEnt {
278   double A0;    /**< \brief start concentration A */
279   double B0;    /**< \brief start concentration B */
280   double ABc;   /**< \brief End concentration AB */
281   double AAc;
282   double BBc;
283   double Ac;
284   double Bc;
285 } ConcEnt;
286
287 /**
288  *  \brief  
289  */
290 typedef struct pairpro{
291   struct plist *AB;
292   struct plist *AA;
293   struct plist *A;
294   struct plist *B;
295   struct plist *BB;
296 }pairpro;
297
298 /**
299  *  \brief A base pair info structure
300  *
301  *  For each base pair (i,j) with i,j in [0, n-1] the structure lists:
302  *  - its probability 'p'
303  *  - an entropy-like measure for its well-definedness 'ent'
304  *  - the frequency of each type of pair in 'bp[]'
305  *    + 'bp[0]' contains the number of non-compatible sequences
306  *    + 'bp[1]' the number of CG pairs, etc.
307  */
308 typedef struct {
309    unsigned i;    /**<  \brief  nucleotide position i */ 
310    unsigned j;    /**<  \brief  nucleotide position j */
311    float p;       /**< \brief  Probability */
312    float ent;     /**< \brief  Pseudo entropy for \f$ p(i,j) = S_i + S_j - p_ij*ln(p_ij) \f$ */
313    short bp[8];   /**< \brief  Frequencies of pair_types */
314    char comp;     /**< \brief  1 iff pair is in mfe structure */
315 } pair_info;
316
317
318 /*
319 * ############################################################
320 * FINDPATH data structures
321 * ############################################################
322 */
323
324 /**
325  *  \brief  
326  */
327 typedef struct move {
328   int i;  /* i,j>0 insert; i,j<0 delete */
329   int j;
330   int when;  /* 0 if still available, else resulting distance from start */
331   int E;
332 } move_t;
333
334 /**
335  *  \brief  
336  */
337 typedef struct intermediate {
338   short *pt;      /**<  \brief  pair table */
339   int Sen;        /**<  \brief  saddle energy so far */
340   int curr_en;    /**<  \brief  current energy */
341   move_t *moves;  /**<  \brief  remaining moves to target */
342 } intermediate_t;
343
344 /**
345  *  \brief  
346  */
347 typedef struct path {
348   double en;
349   char *s;
350 } path_t;
351
352 /*
353 * ############################################################
354 * RNAup data structures
355 * ############################################################
356 */
357
358 /**
359  *  \brief contributions to p_u
360  */
361 typedef struct pu_contrib {
362   double **H; /**<  \brief  hairpin loops */
363   double **I; /**<  \brief  interior loops */
364   double **M; /**<  \brief  multi loops */
365   double **E; /**<  \brief  exterior loop */
366   int length; /**<  \brief  length of the input sequence */
367   int w;      /**<  \brief  longest unpaired region */
368 } pu_contrib;
369
370 /**
371  *  \brief  
372  */
373 typedef struct interact {
374   double *Pi;       /**<  \brief  probabilities of interaction */
375   double *Gi;       /**<  \brief  free energies of interaction */
376   double Gikjl;     /**<  \brief  full free energy for interaction between [k,i] k<i
377                                   in longer seq and [j,l] j<l in shorter seq */
378   double Gikjl_wo;  /**<  \brief  Gikjl without contributions for prob_unpaired */
379   int i;            /**<  \brief  k<i in longer seq */
380   int k;            /**<  \brief  k<i in longer seq */
381   int j;            /**<  \brief  j<l in shorter seq */
382   int l;            /**<  \brief  j<l in shorter seq */
383   int length;       /**<  \brief  length of longer sequence */
384 } interact;
385
386 /**
387  *  \brief  Collection of all free_energy of beeing unpaired values for output
388  */
389 typedef struct pu_out {
390   int len;            /**<  \brief  sequence length */
391   int u_vals;         /**<  \brief  number of different -u values */
392   int contribs;       /**<  \brief  [-c "SHIME"] */
393   char **header;      /**<  \brief  header line */
394   double **u_values;  /**<  \brief  (the -u values * [-c "SHIME"]) * seq len */
395 } pu_out;
396
397 /**
398  *  \brief  constraints for cofolding 
399  */
400 typedef struct constrain{
401   int *indx;
402   char *ptype;
403 } constrain;
404
405 /*
406 * ############################################################
407 * RNAduplex data structures
408 * ############################################################
409 */
410
411 /**
412  *  \brief  
413  */
414 typedef struct {
415   int i;
416   int j;
417   int end;
418   char *structure;
419   double energy;
420   double energy_backtrack;
421   double opening_backtrack_x;
422   double opening_backtrack_y;
423   int offset;
424   double dG1;
425   double dG2;
426   double ddG;
427   int tb;
428   int te;
429   int qb;
430   int qe;
431 } duplexT;
432
433 /*
434 * ############################################################
435 * RNAsnoop data structures
436 * ############################################################
437 */
438
439 /**
440  *  \brief  
441  */
442 typedef struct node {
443   int k;
444   int energy;
445   struct node *next;
446 } folden;
447
448 /**
449  *  \brief  
450  */
451 typedef struct {
452   int i;
453   int j;
454   int u;
455   char *structure;
456   float energy;
457   float Duplex_El;
458   float Duplex_Er;
459   float Loop_E;
460   float Loop_D;
461   float pscd;
462   float psct;
463   float pscg;
464   float Duplex_Ol;
465   float Duplex_Or;
466   float Duplex_Ot;
467   float fullStemEnergy;
468 } snoopT;
469
470
471
472
473
474
475
476 /*
477 * ############################################################
478 * PKplex data structures
479 * ############################################################
480 */
481
482 /**
483  *  \brief  
484  */
485 typedef struct dupVar{
486   int i;
487   int j;
488   int end;
489   char *pk_helix;
490   char *structure;
491   double energy;
492   int offset;
493   double dG1;
494   double dG2;
495   double ddG;
496   int tb;
497   int te;
498   int qb;
499   int qe;
500   int inactive;
501   int processed;
502 } dupVar;
503
504
505
506 /*
507 * ############################################################
508 * 2Dfold data structures
509 * ############################################################
510 */
511
512 /**
513  *  \brief Solution element returned from TwoDfoldList
514  *
515  *  This element contains free energy and structure for the appropriate
516  *  kappa (k), lambda (l) neighborhood
517  *  The datastructure contains two integer attributes 'k' and 'l'
518  *  as well as an attribute 'en' of type float representing the free energy
519  *  in kcal/mol and an attribute 's' of type char* containg the secondary
520  *  structure representative,
521  *
522  *  A value of #INF in k denotes the end of a list
523  *
524  *  \see  TwoDfoldList()
525  */
526 typedef struct{
527   int k;          /**<  \brief  Distance to first reference */
528   int l;          /**<  \brief  Distance to second reference */
529   float en;       /**<  \brief  Free energy in kcal/mol */
530   char *s;        /**<  \brief  MFE representative structure in dot-bracket notation */
531 } TwoDfold_solution;
532
533 /**
534  *  \brief Variables compound for 2Dfold MFE folding
535  *
536  *  \see get_TwoDfold_variables(), destroy_TwoDfold_variables(), TwoDfoldList()
537  */
538 typedef struct{
539   paramT          *P;             /**<  \brief  Precomputed energy parameters and model details */
540   int             do_backtrack;   /**<  \brief  Flag whether to do backtracing of the structure(s) or not */
541   char            *ptype;         /**<  \brief  Precomputed array of pair types */
542   char            *sequence;      /**<  \brief  The input sequence  */
543   short           *S, *S1;        /**<  \brief  The input sequences in numeric form */
544   unsigned int    maxD1;          /**<  \brief  Maximum allowed base pair distance to first reference */
545   unsigned int    maxD2;          /**<  \brief  Maximum allowed base pair distance to second reference */
546
547
548   unsigned int    *mm1;           /**<  \brief  Maximum matching matrix, reference struct 1 disallowed */
549   unsigned int    *mm2;           /**<  \brief  Maximum matching matrix, reference struct 2 disallowed */
550
551   int             *my_iindx;      /**<  \brief  Index for moving in quadratic distancy dimensions */
552
553   double          temperature;
554
555   unsigned int    *referenceBPs1; /**<  \brief  Matrix containing number of basepairs of reference structure1 in interval [i,j] */
556   unsigned int    *referenceBPs2; /**<  \brief  Matrix containing number of basepairs of reference structure2 in interval [i,j] */
557   unsigned int    *bpdist;        /**<  \brief  Matrix containing base pair distance of reference structure 1 and 2 on interval [i,j] */
558
559   short           *reference_pt1;
560   short           *reference_pt2;
561   int             circ;
562   int             dangles;
563   unsigned int    seq_length;
564
565   int             ***E_F5;
566   int             ***E_F3;
567   int             ***E_C;
568   int             ***E_M;
569   int             ***E_M1;
570   int             ***E_M2;
571
572   int             **E_Fc;
573   int             **E_FcH;
574   int             **E_FcI;
575   int             **E_FcM;
576
577   int             **l_min_values;
578   int             **l_max_values;
579   int             *k_min_values;
580   int             *k_max_values;
581
582   int             **l_min_values_m;
583   int             **l_max_values_m;
584   int             *k_min_values_m;
585   int             *k_max_values_m;
586
587   int             **l_min_values_m1;
588   int             **l_max_values_m1;
589   int             *k_min_values_m1;
590   int             *k_max_values_m1;
591
592   int             **l_min_values_f;
593   int             **l_max_values_f;
594   int             *k_min_values_f;
595   int             *k_max_values_f;
596
597   int             **l_min_values_f3;
598   int             **l_max_values_f3;
599   int             *k_min_values_f3;
600   int             *k_max_values_f3;
601
602   int             **l_min_values_m2;
603   int             **l_max_values_m2;
604   int             *k_min_values_m2;
605   int             *k_max_values_m2;
606
607   int             *l_min_values_fc;
608   int             *l_max_values_fc;
609   int             k_min_values_fc;
610   int             k_max_values_fc;
611
612   int             *l_min_values_fcH;
613   int             *l_max_values_fcH;
614   int             k_min_values_fcH;
615   int             k_max_values_fcH;
616
617   int             *l_min_values_fcI;
618   int             *l_max_values_fcI;
619   int             k_min_values_fcI;
620   int             k_max_values_fcI;
621
622   int             *l_min_values_fcM;
623   int             *l_max_values_fcM;
624   int             k_min_values_fcM;
625   int             k_max_values_fcM;
626
627   /* auxilary arrays for remaining set of coarse graining (k,l) > (k_max, l_max) */
628   int             *E_F5_rem;
629   int             *E_F3_rem;
630   int             *E_C_rem;
631   int             *E_M_rem;
632   int             *E_M1_rem;
633   int             *E_M2_rem;
634
635   int             E_Fc_rem;
636   int             E_FcH_rem;
637   int             E_FcI_rem;
638   int             E_FcM_rem;
639
640 #ifdef COUNT_STATES
641   unsigned long             ***N_F5;
642   unsigned long             ***N_C;
643   unsigned long             ***N_M;
644   unsigned long             ***N_M1;
645 #endif
646 } TwoDfold_vars;
647
648 /**
649  *  \brief Solution element returned from TwoDpfoldList
650  *
651  *  This element contains the partition function for the appropriate
652  *  kappa (k), lambda (l) neighborhood
653  *  The datastructure contains two integer attributes 'k' and 'l'
654  *  as well as an attribute 'q' of type #FLT_OR_DBL
655  *
656  *  A value of #INF in k denotes the end of a list
657  *
658  *  \see  TwoDpfoldList()
659  */
660 typedef struct{
661   int k;          /**<  \brief  Distance to first reference */
662   int l;          /**<  \brief  Distance to second reference */
663   FLT_OR_DBL  q;  /**<  \brief  partition function */
664 } TwoDpfold_solution;
665
666 /**
667  *  \brief  Variables compound for 2Dfold partition function folding
668  *
669  *  \see    get_TwoDpfold_variables(), get_TwoDpfold_variables_from_MFE(),
670  *          destroy_TwoDpfold_variables(), TwoDpfoldList()
671  */
672 typedef struct{
673
674   unsigned int    alloc;
675   char            *ptype;         /**<  \brief  Precomputed array of pair types */
676   char            *sequence;      /**<  \brief  The input sequence  */
677   short           *S, *S1;        /**<  \brief  The input sequences in numeric form */
678   unsigned int    maxD1;          /**<  \brief  Maximum allowed base pair distance to first reference */
679   unsigned int    maxD2;          /**<  \brief  Maximum allowed base pair distance to second reference */
680
681   double          temperature;    /* temperature in last call to scale_pf_params */
682   double          init_temp;      /* temperature in last call to scale_pf_params */
683   FLT_OR_DBL      *scale;
684   FLT_OR_DBL      pf_scale;
685   pf_paramT       *pf_params;     /* holds all [unscaled] pf parameters */
686
687   int             *my_iindx;      /**<  \brief  Index for moving in quadratic distancy dimensions */
688   int             *jindx;         /**<  \brief  Index for moving in the triangular matrix qm1 */
689
690   short           *reference_pt1;
691   short           *reference_pt2;
692
693   unsigned int    *referenceBPs1; /**<  \brief  Matrix containing number of basepairs of reference structure1 in interval [i,j] */
694   unsigned int    *referenceBPs2; /**<  \brief  Matrix containing number of basepairs of reference structure2 in interval [i,j] */
695   unsigned int    *bpdist;        /**<  \brief  Matrix containing base pair distance of reference structure 1 and 2 on interval [i,j] */
696
697   unsigned int    *mm1;           /**<  \brief  Maximum matching matrix, reference struct 1 disallowed */
698   unsigned int    *mm2;           /**<  \brief  Maximum matching matrix, reference struct 2 disallowed */
699
700   int             circ;
701   int             dangles;
702   unsigned int    seq_length;
703
704   FLT_OR_DBL      ***Q;
705   FLT_OR_DBL      ***Q_B;
706   FLT_OR_DBL      ***Q_M;
707   FLT_OR_DBL      ***Q_M1;
708   FLT_OR_DBL      ***Q_M2;
709
710   FLT_OR_DBL      **Q_c;
711   FLT_OR_DBL      **Q_cH;
712   FLT_OR_DBL      **Q_cI;
713   FLT_OR_DBL      **Q_cM;
714
715   int             **l_min_values;
716   int             **l_max_values;
717   int             *k_min_values;
718   int             *k_max_values;
719
720   int             **l_min_values_b;
721   int             **l_max_values_b;
722   int             *k_min_values_b;
723   int             *k_max_values_b;
724
725   int             **l_min_values_m;
726   int             **l_max_values_m;
727   int             *k_min_values_m;
728   int             *k_max_values_m;
729
730   int             **l_min_values_m1;
731   int             **l_max_values_m1;
732   int             *k_min_values_m1;
733   int             *k_max_values_m1;
734
735   int             **l_min_values_m2;
736   int             **l_max_values_m2;
737   int             *k_min_values_m2;
738   int             *k_max_values_m2;
739
740   int             *l_min_values_qc;
741   int             *l_max_values_qc;
742   int             k_min_values_qc;
743   int             k_max_values_qc;
744
745   int             *l_min_values_qcH;
746   int             *l_max_values_qcH;
747   int             k_min_values_qcH;
748   int             k_max_values_qcH;
749
750   int             *l_min_values_qcI;
751   int             *l_max_values_qcI;
752   int             k_min_values_qcI;
753   int             k_max_values_qcI;
754
755   int             *l_min_values_qcM;
756   int             *l_max_values_qcM;
757   int             k_min_values_qcM;
758   int             k_max_values_qcM;
759
760   /* auxilary arrays for remaining set of coarse graining (k,l) > (k_max, l_max) */
761   FLT_OR_DBL      *Q_rem;
762   FLT_OR_DBL      *Q_B_rem;
763   FLT_OR_DBL      *Q_M_rem;
764   FLT_OR_DBL      *Q_M1_rem;
765   FLT_OR_DBL      *Q_M2_rem;
766
767   FLT_OR_DBL      Q_c_rem;
768   FLT_OR_DBL      Q_cH_rem;
769   FLT_OR_DBL      Q_cI_rem;
770   FLT_OR_DBL      Q_cM_rem;
771
772 } TwoDpfold_vars;
773
774 #endif