00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #ifndef GL3EVENT
00012 #define GL3EVENT
00013
00014 #include <stdio.h>
00015 #include <stdlib.h>
00016 #include <string.h>
00017 #include <math.h>
00018
00019
00020
00021
00022
00023
00024
00025
00026 #include "Stl3Util/base/St_l3_Coordinates.h"
00027 #include "Stl3Util/base/St_l3_Coordinate_Transformer.h"
00028
00029
00030
00031
00032
00033
00034
00035
00036 #include "Stl3Util/foreign/daqFormats.h"
00037 #include "StDaqLib/TRG/trgStructures.h"
00038
00039
00040 #include "Stl3Util/ftf/FtfGeneral.h"
00041 #include "Stl3Util/ftf/FtfPara.h"
00042
00043 #include "Stl3Util/gl3/gl3Track.h"
00044 #include "Stl3Util/gl3/gl3Hit.h"
00045 #include "Stl3Util/gl3/gl3Sector.h"
00046 #include "Stl3Util/gl3/gl3Histo.h"
00047
00048
00049
00050 class gl3Event {
00051 public:
00052
00053 gl3Event(int mxHits=500000, int mxTracks=20000,
00054 St_l3_Coordinate_Transformer* inTrans=0 );
00055
00056 ~gl3Event( );
00057
00058 int setup ( int mHits=600000, int mTracks = 20000 );
00059 int resetEvent ( );
00060
00061 short getBusy ( ) { return busy; };
00062 gl3Track* getTrack ( int n );
00063 gl3Hit* getHit ( int n );
00064 gl3Sector* getSector ( int n );
00065
00066 int getNTracks ( ) { return nTracks; };
00067 int getNMergedTracks ( ) { return nMergedTracks; };
00068 int getNBadTracks ( ) { return nBadTracks; };
00069 int getNHits ( ) { return nHits ; };
00070
00071 St_l3_xyz_Coordinate getVertex() {return vertex;};
00072
00073 St_l3_Coordinate_Transformer* getCoordinateTransformer()
00074 { return coordinateTransformer; };
00075
00076 int getTrgCmd();
00077 int getTrgWord();
00078 int getCTB(int n);
00079 int getZDC(int n);
00080
00081 void setHitProcessing ( int hitPro )
00082 { hitProcessing = hitPro; };
00083
00084 void setMaxSectorNForTrackMerging ( int _in )
00085 { maxSectorNForTrackMerging = _in; };
00086
00087 void setBField ( float _bField )
00088 {
00089 para.bField = _bField;
00090 para.bFieldPolarity = int(_bField/fabs(_bField));
00091 };
00092
00093 void setCoordinateTransformer ( St_l3_Coordinate_Transformer* in )
00094 { coordinateTransformer = in; };
00095
00096 int readEventDescriptor ( EventDescriptor *descr);
00097 int readL3Data (L3_P* buffer);
00098 int readTrgData (TrgSumData* trgSum, RawTrgDet* rawTrg);
00099
00100 int readSectorHits ( char* buffer, int nSectorTracks );
00101 int readSectorTracks ( char* buffer );
00102 void addTracks ( short sector, int nTracks, local_track* track );
00103 void makeVertex ();
00104
00105 int fillTracks ( int maxBytes, char* buffer, unsigned int token );
00106
00107 int nMergableTracks;
00108
00109
00110 private:
00111 static const int NSECTORS = 24;
00112
00113 int hitProcessing;
00114
00115
00116
00117 gl3Hit* hit;
00118 gl3Track* track;
00119 int* trackIndex;
00120
00121 int busy;
00122 int maxSectorNForTrackMerging;
00123 int maxTracks;
00124 int maxTracksSector;
00125 int nTracks;
00126 int maxHits;
00127 int nHits;
00128 int nMergedTracks;
00129 int nBadTracks;
00130
00131 struct trgDataType {
00132 int trgCmd;
00133 int trgWord;
00134 int ZDC[16];
00135 int CTB[240];
00136 } trgData;
00137
00138
00139 St_l3_Coordinate_Transformer* coordinateTransformer;
00140
00141 FtfPara para;
00142 FtfContainer* trackContainer;
00143 gl3Sector sectorInfo[NSECTORS];
00144
00145
00146
00147
00148
00149
00150 int minNoOfHitsOnTrackUsedForVertexCalc;
00151 double minMomUsedForVertexCalc;
00152
00153
00154 double getWeightedMean(gl3Histo* hist, double sigmaWidthBins);
00155
00156
00157 gl3Histo* hVz ;
00158 gl3Histo* hVx ;
00159 gl3Histo* hVy ;
00160
00161
00162 St_l3_xyz_Coordinate vertex;
00163 };
00164 #endif
00165