implement PETrackII for fragment files from scATAC experiments
[MACS.git] / MACS3 / Signal / cPosValCalculation.h
blob5fb56286d5874291058ca41fed9d19a22e8a5793
1 /* Time-stamp: <2020-11-20 16:37:31 Tao Liu>
3 This code is free software; you can redistribute it and/or modify it
4 under the terms of the BSD License (see the file LICENSE included
5 with the distribution).
6 */
8 #define max(x, y) ((x)>(y)?(x):(y))
9 #define min(x, y) ((x)>(y)?(y):(x))
10 #define compare(x, y) ((x)>(y)?1:0)
12 /* Equivalent to bedGraph data structure */
13 struct PosVal {
14 int pos;
15 float value;
18 /* for comparison between two PosVal arrays */
19 struct PosValVal {
20 int pos;
21 float value1;
22 float value2;
25 struct PosVal * single_end_pileup ( int * plus_tags, long l_plus_tags, int * minus_tags, long l_minus_tags, int five_shift, int three_shift, int leftmost_coord, int rightmost_coord, float scale_factor, float baseline_value, long * final_length );
27 struct PosVal * quick_pileup ( int * start_poss, int * end_poss, long length_poss, float scale_factor, float baseline_value, long * final_length );
29 int cmpfunc_simple ( const void * a, const void * b);
31 int * fix_coordinates ( int * poss, long l, int leftmost_coord, int rightmost_coord );
33 struct PosVal * max_over_two_pv_array ( struct PosVal * pva1, long l_pva1, struct PosVal * pva2, long l_pva2, long * final_length );
35 struct PosVal * apply_func_two_pv_array ( float (*func)(float, float), struct PosVal * pva1, long l_pva1, struct PosVal * pva2, long l_pva2, long * final_length );
37 struct PosValVal * align_two_pv_array ( struct PosVal * pva1, long l_pva1, struct PosVal * pva2, long l_pva2, long * final_length );
39 void write_pv_array_to_bedGraph ( struct PosVal * pv_array, long l_pv_array, char * chromosome, char * bdgfile, short append );
41 long quick_pileup_simple ( int * ret_poss, float * ret_values, int * start_poss, int * end_poss, long length_poss, float scale_factor, float baseline_value );