#ifndef TS_RESOLVEFUNCS_H
#define TS_RESOLVEFUNCS_H

#include <sdb.h>
#include <arAstromCalib.h>
#include <arFramesPipeRun.h>
#include <arSegment.h>
#include <arChunk.h>

void
tsRunsChainDelete(CHAIN *ch);
int
tsRowToMu(const ooHandle(arAstromCalib)& astrom,
	  int camCol,
	  int field,
	  double row,
	  int colsPerField,
	  double node,
	  double incl,
	  int southern);
int
tsRowToMu(const TRANS* trans,
	  double astromNode,
	  double astromIncl,
	  double row,
	  int colsPerField,
	  double node,
	  double incl,
	  int southern);
void tsMuInRange(double *mu, int southern);
int
tsRemoveOldReruns(CHAIN *runs, int run, int rerun, int camCol);
RET_CODE
tsPrimarySegmentResolve(ooHandle(arFramesPipeRun) run,
			int skyVersion,
			int startMu,
			int endMu,
			double lambdaMin,
			double lambdaMax,
			double etaMin,
			double etaMax,
			const ooHandle(ooContObj)& segmentsContainer,
			ooTVArray(ooHandle(arSegment))& segments);
RET_CODE
tsSegmentResolve(ooHandle(arFramesPipeRun) run,
		 int skyVersion,
		 int startMu,
		 int endMu,
		 double lambdaMin,
		 double lambdaMax,
		 double etaMin,
		 double etaMax,
		 TSSEGMENTSTATUS status,
		 const ooHandle(ooContObj)& segmentsContainer,
		 ooTVArray(ooHandle(arSegment))& segments,
		 ooHandle(arSegment)* startMatch,
		 ooHandle(arSegment)* endMatch);
RET_CODE
tsSegmentFieldLimits(const CHAIN *transChain,
		     double astromNode,
		     double astromIncl,
		     int stripe,
		     int startMu,
		     int endMu,
		     int *startField,
		     int *endField);

#endif
