00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef TITAN2READER_COMMON
00023 #define TITAN2READER_COMMON
00024
00025 #include <stdio.h>
00026 #include <dirent.h>
00027 #include <sys/types.h>
00028
00029
00030
00031
00032
00033 #if defined(sun)
00034 #define u_int32_t uint32_t
00035 #endif
00036
00037
00038
00039 #include "util.h"
00040 #include "sac.h"
00041 #include "titan2.h"
00042 #include "frames.h"
00043 #include "gd.h"
00044
00045 #define MY_PI 3.14159265358979323846
00046
00047 #define NO_TIME_CORRECTION -1
00048 #define AUTO_CORRECTION 0
00049 #define LAST_PULSE_CORRECTION 1
00050 #define INTERPOLATION_CORRECTION 2
00051 #define EXTENDED_CORRECTION 3
00052
00053 #define US2S 0.23283064365386962891e-9
00054
00055 #define FILE_MODE 0
00056 #define DAY_MODE 1
00057 #define DISK_MODE 2
00058
00059 #define DEFAULT_STATION "XXX"
00060 #define DEFAULT_SERIAL "XXX.XXXX"
00061
00062 #define FILE_BUFFER_SIZE (12*24*1024)
00063
00065 #define ADD_LOCATION_CODE (1<<0)
00066 #define ADD_NETWORK_CODE (1<<1)
00067 #define ADD_CHANNEL_CODE (1<<2)
00068 #define EDU_FILE_NAME (1<<3)
00069
00071 struct EventType {
00072 float lat;
00073 float lon;
00074 float dep;
00075 double OT;
00076 };
00077
00079 struct InfoHeaderType {
00080 char station[16];
00081 char channel[16];
00082 char location[16];
00083 char network[16];
00084 char driftFile[128];
00085 int ch;
00086 int npts;
00087 struct Titan2SRType sr;
00088 struct Titan2TimeType uncorrected;
00089 struct Titan2TimeType pulse;
00090 struct Titan2TimeType external;
00091 double tadc;
00092 double otshift;
00093 double tshift;
00094 double tfilter;
00095 double extraTcorr;
00096 int extraTcorrUsed;
00097 double correctedTime;
00098 time_t beginWindow;
00099 int pulseAge;
00100 int correctionMethod;
00101 };
00102
00103 #include "tdb.h"
00104
00105 int Rename(const char *oldpath, const char *newpath);
00106 int OpenTempFile(char *template);
00107
00108 int SendFile(int fdout, int fdin, int len);
00109
00110 void PulseFilter(char *dtfile, double dtmax);
00111
00112 char * FileName(const char * pre, const char * post, int channel, int force);
00113
00114 int GetFrame(void);
00115
00116 int GetInterpolatedShift(double t, double *ts, int *age, char *station, char *file);
00117
00118 int InWindow(void);
00119 void RewindCache(void);
00120 int OpenCacheFileRead(char *SN, time_t t);
00121 void FlushNonDataFiles(void);
00122 void InitCache(void);
00123 void CachePrintCST(void);
00124 void CloseTimeFile(char *sta);
00125 void CloseCacheFile(int cancel);
00126 void CacheCallBack(void);
00127 char *CacheRead(char *line);
00128 time_t NextWindow(void);
00129 int SeekTime(time_t t);
00130 FILE *InitEventList(const char *fn);
00131 int str2time(char *s,double *time);
00132 int strJ2time(char *s,double *time);
00133 void AbortOnTitan1File(char *f, int l);
00134 void EndSuperFrame(void);
00135 void ResetTimes(void);
00136
00137 int MergeTriggers(char *cmd);
00138
00139 double DiffTimeT2T1(struct Titan2TimeType *t1, struct Titan2TimeType *t2, struct Titan2TimeType *td);
00140
00141 double ADCDelay(struct DigitizerType *digitizer, int ch);
00142 double FilterDelayTime(struct DigitizerType *digitizer, struct Titan2SRType *sr, int ch);
00143 unsigned int FilterChain(struct DigitizerType *digitizer, struct Titan2SRType *sr, int ch);
00144
00145 int PrimaryChannel(int channel);
00146
00147 int PrintMessages(void);
00148
00149 int CheckDiffConfig();
00150 void ChangeStreamConfig();
00151 char * StrFrame(const unsigned char *frame);
00152 char * StrTime(struct Titan2TimeType *t);
00153 char * StrTimeNS(struct Titan2TimeType *t);
00154
00155 #define INIT_PRINT_TRIGGER ((10<<10)/12)
00156 #define NORMAL_PRINT_TRIGGER ((10<<20)/12)
00157
00158 int OpenDayDir(const char * path);
00159 int OpenDiskDir(const char * path);
00160 void FreeDayDir(void);
00161 void FreeDiskDir(void);
00162 FILE * NextFile(void);
00163 void CloseInput(void);
00164
00165 char * ADCName(int id);
00166
00167 void LogPrint(const char *format, ...);
00168
00169 extern char forceName[128];
00170
00171 extern struct HWConfigType HWConfig;
00172 extern struct HWConfigType oldHWConfig;
00173
00174 extern struct Titan2TimeType correctedTime;
00175 extern struct Titan2TimeType currentTime;
00176 extern struct Titan2TimeType pulseTime;
00177 extern struct Titan2TimeType gpsExtTime;
00178 extern struct Titan2TimeType gpsIntTime;
00179
00180
00181 extern struct EventType event;
00182
00183 extern char currentTag[16];
00184 extern char onlyTag[16];
00185
00186 extern void EmergencyExit(void);
00187 extern void SetAuxChannel2(int ch, int32_t val);
00188 extern void SetAuxChannel1(int ch, int32_t val);
00189 extern void AddTitFrame(const unsigned char *frame);
00190 extern void AddTriggerData(int i);
00191 extern void AddSeg2Data(int i);
00192 extern void AddSegyData(int i);
00193 extern void AddSacData(int i);
00194 extern void AddSisData(int i);
00195 extern void AddAscData(int i);
00196 extern void AddBinData(int i);
00197 extern void AddGifData(int channel);
00198 extern void AddWavData(int channel);
00199 extern void AddMSeedData(int channel);
00200 extern void CloseTitFile(void);
00201 extern void CloseSeg2File(int channel);
00202 extern void CloseFullSeg2File(void);
00203 extern void CloseSegyFile(int channel);
00204 extern void CloseSacFile(int channel);
00205 extern void CloseSisFile(void);
00206 extern void CloseAscFile(int channel);
00207 extern void CloseBinFile(int channel);
00208 extern void CloseWavFile(int channel);
00209 extern void CloseMSeedFile(int channel);
00210 extern void CloseGifFile(void);
00211 extern void ResetInput(void);
00212 extern int ParseTriggerOptions(char *cmd);
00213 extern int ParseSeedOptions(char *cmd);
00214 extern void ReadSize(char *fsize);
00215 extern void ReadIndex(char *findex);
00216 extern void CutDataFile(char *fdata);
00217 extern char *MaskToList(int64_t mask);
00218 extern void SleepIfArm(void);
00219
00220 extern int ListToMask(char *ins, int64_t *newmask);
00221 extern int DumpTriggerEvents(char *file);
00222 extern int ParseOifOptions(char *cmd);
00223 extern int ParseOmniOptions(char *cmd);
00224 extern void ProcessOIF(char *file);
00225 extern void ProcessOMNI(char *sta);
00226 extern void ProcessOPF(int m, int lower);
00227 extern char * MyGetenv(char *s);
00228 #ifdef USE_GD
00229 extern void DoPlots(void);
00230 extern int ParseImageOptions(char *cmd);
00231 #endif
00232
00233 extern void FlushDataFiles(void);
00234
00235 int InitInfoHeader(int ch);
00236 double UpdateInfoHeader(int ch);
00237
00238 char * time2name(double temps,const char *pref, const char *suf);
00239 char *time2str(double temps);
00240
00241 int __alphasort(const void *_a, const void *_b);
00242 int __scandir(const char *dirname,
00243 struct dirent ***ret_namelist,
00244 int (*select)(const struct dirent *),
00245 int (*compar)(const void *, const void *));
00246
00247 extern struct InfoHeaderType infoHeader[MAX_CHANNEL];
00248
00249 extern int fileNameOptions;
00250 extern int forceNameOptions;
00251 extern int noWrite;
00252 extern int noInfo;
00253 extern int doOffset;
00254 extern int noTimeCorrection;
00255 extern int test0;
00256
00257 extern char tdbName[];
00258
00259 extern int noCache;
00260 extern int scanAll;
00261 extern int localCache;
00262 extern int prependdaydir;
00263
00264 extern int timeWarning;
00265 extern char ARGV0[];
00266 extern char ** ARGV;
00267 extern int VERBOSE;
00268 extern int inputMode;
00269 extern char * currentFile;
00270 extern char * baseDir;
00271 extern int iFileInput;
00272 extern int ARGC;
00273 extern int64_t printTrigger;
00274 extern int64_t totalFrameProcessed;
00275 extern time_t beginWindow;
00276 extern time_t endWindow;
00277 extern int cmdLineWindow;
00278 extern int saveShift;
00279 extern int extractTit;
00280 extern int extractWav;
00281 extern int extractGif;
00282 extern int extractTrig;
00283 extern int extractSegy;
00284 extern int extractSeg2;
00285 extern int extractSac;
00286 extern int extractSis;
00287 extern int extractAsc;
00288 extern int extractBin;
00289 extern int extractMSeed;
00290 extern int removeMean;
00291 extern int64_t channelMask;
00292 extern int64_t auxiliaryMask;
00293 extern char * streamList;
00294 extern int cutDtOnReset;
00295 extern int pulseFilter;
00296 extern int seedBlockSizePowerOf2;
00297
00298 extern int channelNameNumber;
00299
00300 extern int overWrite;
00301
00302 extern int readNdx;
00303 extern int ndx2tl;
00304 extern int ndx2cache;
00305
00306 extern int eduseis;
00307
00308 extern int logInfo;
00309
00310 extern int extractingData;
00311 extern int dataExtracted;
00312
00313 extern int timeSegment;
00314 extern int timeList;
00315
00316 extern int minSamplesPerFrame;
00317
00318 extern int seeking;
00319 extern int fastSeek;
00320
00321 extern int64_t beginOfFile;
00322 extern int64_t endOfFile;
00323 extern int skipTime;
00324
00325 extern int globalStationChange;
00326
00327 extern int ignoreDiscontinuity;
00328
00329 extern char manualStationName[64];
00330
00331 extern int privateDebug;
00332
00333 extern int preEvent;
00334 extern int postEvent;
00335
00336
00337
00338
00339
00340
00341
00342 extern FILE * titan2File;
00343
00344 extern int64_t inputOffset;
00345
00346 extern int extracting;
00347
00350 static inline int SafeFtell(FILE *f)
00351 {
00352 if (f)
00353 {
00354 return(ftell(f));
00355 }
00356 else
00357 {
00358 return(inputOffset);
00359 }
00360 }
00361
00362
00363
00364 #define Extracting(a) (extractMSeed||extractWav||extractTrig||extractGif||extractSeg2||extractSegy||extractAsc||extractSac||extractSis||extractBin)
00365
00366 #endif