Hi
I am confused about the differences between vg call and vg surject. Does "vg call" also call novel variants but vg surject just call the variants that are in the graph. If we use vg call what is the purpose of -z option, and how is it different from if we do not use -z option
vg call reports variants in the graph that are supported by read mappings to the graph, outputting in VCF format. It does not handle novel variants (those in the reads but not the graph). -z will restrict vg call to only calling variant alleles that correspond to labeled haplotype paths in the (gbz) graph -- this could be faster and more accurate if you have good haplotype information in your graph.
vg surject projects read mappings to chosen reference paths, usually outputting SAM/BAM format. This output can be used with any standard variant caller (ex DeepVariant) to make a VCF which, in this case, could include novel variants.