-
Notifications
You must be signed in to change notification settings - Fork 10
/
README.txt
335 lines (210 loc) · 10.5 KB
/
README.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
Jmyers Oct 22
Updated thoroughly to describe how I'm currently doing things.
The following is a set of instructions for running
find/collapse/linkTracklets on some diaSources.
In the future these scripts (or more likely, better versions of
all of this) will be modified so that pipelines can run each
stage of find/collapse/linkTracklets on particular sets of data.
All the scripts should be in the same directory as this readme file.
INSTALLING/BUILDING C++ FIND/LINKTRACKLETS (etc.)
---------------------------------------
Build the C++ tools using instructions online at http://dev.lsstcorp.org/trac/wiki/MOPS/Installing_MOPS
GETTING SOME INPUT DATA
---------------------
See instructions online at http://dev.lsstcorp.org/trac/wiki/MOPS/Data
Tests below run using example data :
http://www.astro.washington.edu/users/ljones/ephems/dias_pt1_nodeep.short.astromErr
PREPARING FOR FINDTRACKLETS
-----------------------------
Next you'll need to split the data up by night. Use
splitByNight.py - this assumes that your input format
is as above:
#diasourceID opsimID ssmID ra dec expmjd mag SNR
This script will create individual files of diasources in MITI
format, for each night. As there will be many different output
files, it's best to run this script in a working directory you
intend to use for this run of findTracklets/linkTracklets only.
$ cd nightlyDiasAstromErr
$ python $MOPS_HACKS/splitByNight.py dias_pt1_nodeep.short.astromErr
You can also choose to extract only certain nights from the entire range using
$ python $MOPS_HACKS/splitByNight.py dias_pt1_nodeep.short.astromErr 49639 49650
(for example).
Depending on the input data size, this will take a few minutes.
Output will be in PanSTARRS MITI format:
ID EPOCH_MJD RA_DEG DEC_DEG MAG OBSCODE OBJECT_NAME LENGTH
ANGLE
LENGTH and ANGLE are all set to dummy values as they are not used by
our sky-plane algorithms. The OBSCODE is also set to a dummy value,
because it's ignored by the linking stages.
RUNNING FINDTRACKLETS
----------------------------
Make sure you have dayMops set up via Eups.
$ source /path/to/your/loadLSST.sh (aka setlsst)
$ setup mops_daymops
You can now use $MOPS_HACKS/runFindTracklets.maxv.0.5.sh or
$MOPS_HACKS/runFindTracklets.maxv.0.5.csh to run FindTracklets on all
of the *miti files you just created.
Modify the first three variables (defining the location of findTracklets
and your input/output data) to suit your needs. For most uses of these
scripts they'll be fine.
This script assumes you're using the C++
findTracklets. Currently, C++ findTracklets takes a limited set of
command-line arguments; to adjust the fine-grained functionality
you'll have to modify findTracklets.h and recompile (there should be
documentation inside of findTracklets.h)
The script will also measure timing information for you.
$ bash $MOPS_HACKS/runFindTracklets.maxv0.5.sh
This will take a bit of time - perhaps an hour.
Note that you could restrict this to run ONLY on particular nights of
data by removing the other night's input from the source directory.
Currently C++ findTracklets writes its output as ASCII text, one
tracklet per line, with tracklets expressed as the set of Dia IDs of the diaSources in the tracklet, e.g.
----start example---------
1 2
4 10
5 7
-----end example---------
C findTracklets uses a different output format.
OPTIONAL PHASE: RUNNING COLLAPSETRACKLETS
--------------------------------------
cd to the directory containing the tracklets you generated. Then run
$ bash $MOPS_HACKS/runCollapseTracklets.sh
As to what this script is doing:
CollapseTracklets really has several phases: first collapsing, then
purifying, then removing subset tracklets.
CollapseTracklets requires you to give some tolerances on the
command-line. The ones I use are as follows: .002 .002 5 .05 (see
example commands below)
You should have a bunch of detections files like 49524.miti and
tracklets files with names like 49524.maxv0.5.tracklets, etc. For
each one, you'll want to do something like this:
# first get the tracklets as a set of indices into the MITI file
$ python $MOPS_HACKS/idsToIndices.py 49524.maxv0.5.tracklets \
49524.maxv0.5.tracklets 49524.miti \
49524.maxv0.5.tracklets.byIndices
# collapse the tracklets
$ $MOPS_DAYMOPS_DIR/bin/collapseTracklets 49524.miti 49524.maxv0.5.tracklets \
.002 .002 5 .05 49524.maxv0.5.collapsed
# purify
$ $MOPS_DAYMOPS_DIR/bin/purifyTracklets --detsFile 49524.miti \
--pairsFile 49524.maxv0.5.collapsed \
--outFile 49524.maxv0.5.collapsed.pure
# remove subsets
$ $MOPS_DAYMOPS_DIR/bin/removeSubsets --inFile 49524.maxv0.5.collapsed.pure \
--outFile 49524.maxv0.5.final.tracklets.byIndices
# convert from by-file-index to by-dia-ids format
$ $MOPS_HACKS/indicesToIds 49524.maxv0.5.final.tracklets.byIndices \
49524.miti 49524.maxv0.5.final.tracklets.byDiaIds
====================================
PREPARING FOR LINKTRACKLETS
====================================
REQUIRED ITEMS IN DATABASE:
In order to make the linkTracklets input and orbit_server input, some
scripts will expect the following things in the database:
1) the fullerDiaSource table, which holds your diaSources, their SNR,
and their parent obsHistId
2) the opsim table from the opsim run which generated your dia sources
fullerDiaSource.sql in the $MOPS_HACKS directory will create the
fullerDiaSource table. If you're using Lynne's data with astrometric
error, I recommend you simply copy the contents from mops64's MySQL in
mops_noDeepAstromError.fullerDiaSource. Or, you can simply run on
mops64.
None of the scripts will *write* to the database.
PREPARING THE TRACKLETS:
LinkTracklets uses bundled up sets of tracklets covering several days
of observation. Our new script makeLinkTrackletsInput_byImages.py
will take care of creating scripts for running linkTracklets for you,
and can create input for C and/or C++ linkTracklets.
Before you run it, you'll need to make sure you have the needed tables
in your database, and organize your tracklets by start image, in order
to match the image obsHistIds to their observation times.
First:
$ mkdir byObsHistId/
For each tracklets file (e.g. 49524.maxv0.5.final.tracklets.byDiaIds)
you'll want to do this (use a shell script):
$ python $MOPS_HACKS binTrackletsByObsHist \
49524.maxv0.5.final.tracklets.byDiaIds
byObsHistId/
The script creates or appends to files like
byObsHistId/85679000.tracklets.byDiaId.
MAKING THE LINKTRACKLETS INPUT FILES:
The script $MOPS_HACKS/makeLinkTracklets_byImages.py contains lots of
constants at the top, such as where to find the database, and where to
find the per-obsHist tracklets you created.
There are also some additional parameters, like the size of the
tracking window for linkTracklets (15 is fast, 30 is slow). You can
also set the max number of "start images" (images for which tracks are
started) per file (in case you want to break up the busy nights between
multiple runs).
You also NEED to set the output directory for your linkTracklets
infiles: OUTPUT_LINKTRACKLETS_INFILE_DIR.
You can also set the flag WRITE_CPP_INFILES if you like to get input
for C++ linkTracklets.
Once you are content with the contents of the file, go ahead and run
the script with no arguments. Then get ready for a healthy wait and a
lot of disk I/O; depending on the size of MAX_START_IMAGES_PER_FILE
this could take anywhere from 20 minutes to 10 hours or so.
When you're done, you shold have the following in OUTPUT_LINKTRACKLETS_INFILE_DIR:
For many Xs and Ys:
image_X_through_Y.info - human-readable info about the images in this data set, start images as well as potential second endpoint/support images.
image_X_through_Y.miti - the tracklets, in MITI format.
image_X_through_Y.miti.diaIds - at each line N, the diaId of the
detection at line N of the corresponding .miti file.
image_x_through_Y.start_t_range - the time offset of image Y - image X.
RUNNING LINKTRACKLETS (the new way, distributed by images)
--------------------------------------
Go to the directory where you created your .info, .miti,
.start_t_range files. Create a new directory called tracks/ and cd
there. Then run:
$ python $MOPS_HACKS/makeLinkTrackletsRunScripts.py
This will create lots of .cmd.sh files in your current directory, one
for each of the .miti files in ../ . Each one is a bash script which
runs linkTracklets for you with our curent set of favored parameters.
make sure to
$ setup auton
and you're ready to run linkTracklets -
$ for CMD in *.cmd.sh
do
bash $CMD
done
Get ready to wait a few more hours!
This will create a lot of files ending in c.tracks.byIndices in the
current directory. These are the tracks, in the
by-line-number-in-the-MITI-file-format.
You'll later want to convert these to byDiaId format. Once you've
done so, you may find you have some redundant tracks, due to a known
quirk of C linkTracklets. You can remove these via sort and uniq.
so for each image_X_through_Y.c.tracks.byIndices:
$ python $MOPS_HACKS/indicesToIds.py \
image_X_through_Y.c.tracks.byIndices \
../image_X_through_Y.miti.diaIds
image_X_through_Y.c.tracks.byDiaIds
$ cat image_X_through_Y.c.tracks.byDiaIds | sort -n | \
uniq > image_X_through_Y.c.tracks.byDiaIds.unique
RUNNING IOD WITH ORBIT_SERVER (ORBFIT)
----------------------------------
Once you have your tracks in DiaId format, you can convert them to
input for orbit_server.x, Milani's IOD tool.
Milani's IOD requires knowledge of per-detection astrometric error
bars. To calculate those, you'll need to use a database which holds
per-image information (e.g. the opsim table) and another table which
maps diaSources, including their parent images.
Use buildOrbitServerInput.py when you're ready; modify the
database/table names at the top of the file to suit your needs.
orbit_server.x expects some maximum number of detections per image it
reads in input. This means that a large set of tracks may be broken up
into many input files for orbit_server.x. Create a directory where
you'd like all those outfiles to go and cd there.
You'll need to tell the buildOrbitServerInput.py script a prefix for
these outfiles, e.g. myTracks. It will create many files, e.g.
myTracks_0.in.request
myTracks_0.in.tracklet
myTracks_0.in.manifest
myTracks_1.in.request
... etc.
So in the directory where you want all these files written:
$ python $MOPS_HACKS/buildOrbitServerInput.py /path/to/tracks.byDiaId myTracks
Next, to run orbit_server on all these files, use runOrbitServer.sh.
Modify the file so it points to the orbit_server.x executable on your
system, then just run it in the directory with the in.request,
in.tracklet, etc. files.