28#include <lal/CoincInspiralEllipsoid.h>
29#include <lal/LIGOMetadataInspiralUtils.h>
30#include <lal/TrigScanEThincaCommon.h>
31#include <lal/LALTrigScanCluster.h>
77 INT4 appendStragglers )
116 XLALPrintError(
"TrigScan only currently implemented for tau0/tau3!\n" );
120 if ( scaleFactor <= 0.0 )
122 XLALPrintError(
"TrigScan metric scaling must be > 0: %e given.\n", scaleFactor );
128 for ( thisTable = tableHead; thisTable->
next; thisTable = thisTable->
next )
160 thisCluster = clusterHead;
162 while ( thisCluster )
165 thisCluster = thisCluster->
next;
175 clusterHead = thisCluster = newCluster;
179 thisCluster = thisCluster->
next = newCluster;
184 if ( !appendStragglers )
188 thisCluster = clusterHead;
190 while ( thisCluster )
193 thisCluster = thisCluster->
next;
202 XLALPrintWarning(
"All triggers were stragglers! All have been removed.\n" );
208 for ( thisCluster = clusterHead; thisCluster; thisCluster = thisCluster->
next )
212 thisCluster = clusterHead;
214 while ( thisCluster )
217 thisCluster = thisCluster->
next;
228 thisCluster = clusterHead;
230 while ( thisCluster )
233 thisCluster = thisCluster->
next;
248 thisCluster = clusterHead;
249 while ( thisCluster )
252 thisCluster = thisCluster->
next;
280 if ( !errorListHead )
285 if ( !(*errorListHead) )
311 cluster->
element = *errorListHead;
312 endClusterList = cluster->
element;
318 maxTimeDiff = (
INT8)( (2.0 * tcMax + 1.0e-5) * 1.0e9 );
320 thisClusterList = cluster->
element;
322 while ( thisClusterList )
339 thisErrorList = *errorListHead;
340 previousErrorList = NULL;
341 while ( thisErrorList )
348 if ( endTimeB - endTimeA > maxTimeDiff )
354 (
REAL8) ( ( endTimeB - endTimeA ) * 1.0e-9 ) );
361 thisErrorList->
position, workSpace );
366 thisClusterList = cluster->
element;
367 while ( thisClusterList )
370 thisClusterList = thisClusterList->
next;
383 if ( fContactValue <= 1.0 )
386 if ( previousErrorList )
388 if ( thisErrorList->
next )
396 previousErrorList->
next = thisErrorList->
next;
400 *errorListHead = thisErrorList->
next;
403 endClusterList = endClusterList->
next = thisErrorList;
404 thisErrorList = thisErrorList->
next;
405 endClusterList->
next = NULL;
412 previousErrorList = thisErrorList;
413 thisErrorList = thisErrorList->
next;
418 thisClusterList = thisClusterList->
next;
441 while ( thisCluster )
447 thisCluster = thisCluster->
next;
451 *clusters = tmpCluster->
next;
464 previous = thisCluster;
465 thisCluster = thisCluster->
next;
495 triggerToKeep = cluster->
element;
498 for ( thisTrigger = cluster->
element->
next; thisTrigger; thisTrigger = thisTrigger->
next )
502 triggerToKeep = thisTrigger;
507 thisTrigger = cluster->
element;
508 while ( thisTrigger )
511 thisTrigger = thisTrigger->
next;
513 if ( tmpTrigger != triggerToKeep )
522 cluster->
element = triggerToKeep;
538 for ( thisCluster = clusterHead; thisCluster->
next; thisCluster = thisCluster->
next )
565 for ( thisList = cluster->
element; thisList; thisList = thisList->
next )
#define XLAL_CALLGSL(statement)
int XLALSetTimeInPositionVector(gsl_vector *position, REAL8 timeShift)
trigScanType
UNDOCUMENTED.
int XLALTrigScanRemoveStragglers(TrigScanCluster **clusters)
int XLALTrigScanKeepLoudestTrigger(TrigScanCluster *cluster)
void XLALTrigScanDestroyCluster(TrigScanCluster *cluster, TrigScanStatus status)
TrigScanCluster * XLALTrigScanCreateCluster(TriggerErrorList **errorListHead, REAL8 tcMax)
int XLALTrigScanReLinkLists(TrigScanCluster *clusterHead)
int XLALTrigScanClusterTriggers(SnglInspiralTable **table, trigScanType method, REAL8 scaleFactor, INT4 appendStragglers)
TrigScanStatus
UNDOCUMENTED.
@ trigScanNone
UNDOCUMENTED.
@ NUM_TRIGSCAN_TYPE
UNDOCUMENTED.
@ TRIGSCAN_SUCCESS
UNDOCUMENTED.
@ TRIGSCAN_ERROR
UNDOCUMENTED.
@ TRIGSCAN_NUM_STATUS
UNDOCUMENTED.
TriggerErrorList * XLALCreateTriggerErrorList(SnglInspiralTable *tableHead, REAL8 scaleFactor, REAL8 *tcMax)
void XLALDestroyTriggerErrorList(TriggerErrorList *errorListHead)
#define XLAL_ERROR_VOID(...)
#define XLAL_ERROR_NULL(...)
int int int XLALPrintInfo(const char *fmt,...) _LAL_GCC_PRINTF_FORMAT_(1
int XLALPrintError(const char *fmt,...) _LAL_GCC_PRINTF_FORMAT_(1
int int XLALPrintWarning(const char *fmt,...) _LAL_GCC_PRINTF_FORMAT_(1
#define XLAL_IS_REAL8_FAIL_NAN(val)
INT8 XLALGPSToINT8NS(const LIGOTimeGPS *epoch)
struct tagSnglInspiralTable * next
INT4 nelements
UNDOCUMENTED.
TriggerErrorList * element
UNDOCUMENTED.
struct tagTrigScanCluster * next
UNDOCUMENTED.
The TriggerErrorList is a linked list used within e-thinca.
struct tagTriggerErrorList * next
SnglInspiralTable * trigger