00001 #ifndef TREE_H
00002 #define TREE_H
00003
00004 #include<iostream>
00005
00006
00007 #define DLAYERS 4
00008
00009 #define TLAYERS 8
00010
00011 #define MAXHITPERLINE 100
00012
00013
00014 #define HSHSIZ 511
00015 #define TREELINABORT 1000
00016
00017 class treenode;
00018 class shorttree;
00019 class nodenode;
00020 class shortnode;
00021 class treeregion;
00022 class tree;
00023 class Hit;
00024 class Det;
00025 class TreeLine;
00026 class PartTrack;
00027 class Track;
00028 class Bridge;
00029 class Vertex;
00030 class Event;
00031 class Options;
00032
00033
00034 enum EUppLow {
00035 w_nowhere = -1, w_upper, w_lower
00036 };
00037 enum ERegion {
00038 r1=1, r2, r3
00039 };
00040 enum Etype {
00041 d_drift, d_gem, d_trigscint, d_cerenkov
00042 };
00043 enum Edir {
00044 null_dir = 0,
00045 u_dir, v_dir, x_dir, y_dir
00046 };
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00065 class treenode{
00066
00067 public:
00068 treenode *genlink;
00069 nodenode *son[4];
00070 int maxlevel,minlevel;
00071 int bits;
00072 int bit[TLAYERS];
00073 int xref;
00074 int pattern_offset;
00075 treenode();
00076 ~treenode();
00077 void print();
00078
00079
00080 private:
00081
00082 };
00083
00090 class tree{
00091
00092 public:
00093
00094 int maxlevel;
00095
00096
00097 int tlayers;
00098 int hshsiz;
00099 int npat;
00100 treenode *generic[HSHSIZ];
00101 double zList[TLAYERS];
00102 double detwidth;
00103 double rcSET_rMaxSlope;
00104 treenode father;
00105 int xref;
00106 int maxref;
00107
00108
00109
00110 tree();
00111 ~tree();
00112 void rcInitTree();
00113 int consistent(treenode *tst, int level,enum Etype type,enum ERegion region);
00114 treenode * existent(treenode *tst, int hash);
00115 treenode *nodeexists(nodenode *nd, treenode *tr);
00116 treenode * treedup(treenode *todup);
00117 void marklin(treenode *Father,int level,enum Etype type,enum ERegion region);
00118
00119 void treeout(treenode *tn, int level, int off);
00120 void printtree(treenode *tn);
00121 void freetree();
00122 treeregion * readtree(char *filename, int levels, int tlayers, double rwidth, int dontread);
00123 long writetree(char *fn, treenode *tn, int levels, int tlayers, double width);
00124 treeregion * inittree(char *filename, int levels, int tlayer, double width,enum Etype type, enum ERegion region);
00125 treenode * _inittree(int tlayer,enum Etype type,enum ERegion region);
00126 private:
00127
00128 int _writetree(treenode *tn, FILE *fp, int tlayers);
00129 int _readtree(FILE *f, shorttree *stb, shortnode **fath, int tlayers);
00130 };
00131
00141 class nodenode{
00142
00143 public:
00144 nodenode();
00145 ~nodenode();
00146 nodenode *next;
00147 treenode *tree;
00148
00149 private:
00150
00151 };
00152
00153
00154
00155
00157 class shortnode{
00158
00159 public:
00160 shortnode();
00161 ~shortnode();
00162 shortnode *next;
00163 shorttree *tree;
00164
00165 private:
00166
00167 };
00168
00171 class shorttree{
00172
00173 public:
00174 shorttree();
00175 ~shorttree();
00176 int maxlevel;
00177 int minlevel,bits;
00178 int xref;
00179 int bit[TLAYERS];
00180 shortnode *son[4];
00181 void print();
00182
00183 private:
00184
00185 };
00186
00198 class treeregion{
00199
00200 public:
00201 treeregion();
00202 ~treeregion();
00203 int searchable;
00204 shortnode node;
00205 double rWidth;
00206 int nLayers;
00207 int dLayers;
00208 double rZPos[TLAYERS];
00209
00210 private:
00211
00212 };
00213
00221 class Hit{
00222
00223 public:
00224 int wire;
00225 double Zpos;
00226 double rPos1;
00227 double rPos2;
00228 double Resolution;
00229 double rTrackResolution;
00230 Det *detec;
00231 Hit *next, *nextdet;
00232 int ID;
00233 bool used;
00234 double rResultPos;
00235 double rPos;
00236
00237 private:
00238
00239
00240 };
00247 class Det{
00248
00249 public:
00250 char cName[8];
00251 char cType[8];
00252 double Zpos;
00253 double Rot;
00254 double rRotCos,rRotSin;
00255 double resolution;
00256 double TrackResolution;
00257 double SlopeMatching;
00258
00259 enum EUppLow upplow;
00260 enum ERegion region;
00261 enum Etype type;
00262 enum Edir dir;
00263
00264
00265 double center[2];
00266 double width[3];
00267 double WireSpacing;
00268 double PosOfFirstWire;
00269 double rCos;
00270 double rSin;
00271 int NumOfWires;
00272 Hit *hitbydet;
00273 Det *nextsame;
00274 int samesearched;
00275
00276 int ID;
00277
00278 private:
00279
00280 };
00281
00288 class TreeLine {
00289
00290 public:
00291 TreeLine();
00292 ~TreeLine();
00293
00294 bool isvoid;
00295 TreeLine *next;
00296 double cx, mx, chi;
00297 double cov_cxmx[3];
00298 int a_beg, a_end;
00299 int b_beg, b_end;
00300 int numhits;
00301 int numvcmiss;
00302 int nummiss;
00303
00304 Hit *hits[2*TLAYERS];
00305 Hit thehits[2*TLAYERS];
00306 int hasharray[2*TLAYERS];
00307 bool Used;
00308 int ID;
00309 int r3offset,firstwire,lastwire;
00310 };
00311
00317 class PartTrack {
00318
00319 public:
00320 double x,y;
00321 double mx,my;
00322 double Cov_Xv[4][4];
00323 double chi;
00324 TreeLine *tline[3];
00325
00326 double ECalor;
00327 double clProb;
00328 double pathlenoff;
00329 double pathlenslo;
00330 PartTrack *next;
00331 Bridge *bridge;
00332
00333
00334 int Used;
00335 int nummiss;
00336 int numhits;
00337 int isvoid;
00338 int ID;
00339
00340 int triggerhit;
00341 double trig[2];
00342 int cerenkovhit;
00343 double cerenkov[2];
00344 };
00345
00348 class Track
00349 {
00350 public:
00351 double ZVx,TVx;
00352 double The, Phi;
00353 int AngleCorr;
00354
00355 double rDXSl;
00356 double chi;
00357
00358 double P, ECalor;
00359
00360 double XBj, Y, Q2, W2, Nu;
00361
00362 int RecoEvent;
00363
00364 Bridge *bridge;
00365 int iMagnetMatched;
00366 int yTracks;
00367
00368 Track *next;
00369 Track *ynext;
00370 Track *usednext;
00371
00372 PartTrack *front;
00373 PartTrack *back;
00374
00375
00376 Vertex *vertex;
00377
00378
00379
00380
00381
00382
00383 bool Used;
00384 bool inBounds;
00385
00386
00387
00388 int iCharge;
00389
00390 int ID;
00391
00392 private:
00393 };
00394
00396 class Bridge
00397 {
00398 public:
00399 double xOff, yOff, ySOff;
00400 double ySlopeMatch;
00401 double yMatch;
00402 double ySMatch;
00403 double xMatch;
00404 double Momentum;
00405 Hit *hits[9];
00406
00407 int ID;
00408 private:
00409 };
00410
00412 class Vertex {
00413 double coord[3];
00414 double av[3][3];
00415 double maxresidue;
00416 int nTracks;
00417
00418 struct Vertex *next;
00419 int ID;
00420 };
00421
00424 class Event {
00425 public:
00426 int ID;
00427 TreeLine *treeline[2][3][4][4];
00428
00429
00430 PartTrack *parttrack[2][3][4];
00431 Track *track[2];
00432 Track *usedtrack[2];
00433 Vertex *vertex;
00434 int goodguess;
00435 struct _event *next;
00436 private:
00437 };
00438
00442 class Options {
00443
00444 public:
00445 int levels[2][3][4];
00446 int showEventPattern;
00447 int showMatchingPatterns;
00448 int showMatchedPattern;
00449 private:
00450
00451
00452 };
00453
00454 #endif