00001
00002
00003
00004 #ifndef FROOT_TFndPrean
00005 #define FROOT_TFndPrean
00006
00007 #include <Riostream.h>
00008 #include <TObject.h>
00009 #include <TString.h>
00010 #include "TDatime.h"
00011 #include "TTree.h"
00012 #include "TFile.h"
00013 #include <TThread.h>
00014
00015 #include "TClonesArray.h"
00016
00017 #include "TFndTrack.h"
00018 #include "TFndProcessRec.h"
00019
00020
00021
00022 using namespace FROOT;
00023 using namespace FIN_PHYS;
00024
00025 class TFndPrean: public TObject
00026 {
00027
00028 public:
00029
00030 enum E_Scaler_Inhibit_Status {
00031 E_Scal_Inhib_No = 0,
00032 E_Scal_Inhib_Inj = 1,
00033 E_Scal_Inhib_All = 2,
00034 E_Scal_Inhib_End = 3
00035 };
00036
00037 TString GetScalInhibitStatusName(Int_t which,Bool_t isname)
00038 {
00039 E_Scaler_Inhibit_Status wh = (E_Scaler_Inhibit_Status) which;
00040 switch(wh){
00041 case E_Scal_Inhib_No: return (isname)? "no_inhib" : "no inhib.";
00042 case E_Scal_Inhib_Inj: return (isname)? "inj_inhib" : "inj inhib.";
00043 case E_Scal_Inhib_All: return (isname)? "all_inhib" : "all inhib.";
00044 default:
00045 Warning("GetScalInhibitStatusName","Status not available ()",which);
00046 return "";
00047 }
00048 }
00049
00050 enum E_Kaon_StopCode {
00051 E_Kaon_Stop_Target = 0,
00052 E_Kaon_Stop_Isim = 1,
00053 E_Kaon_Stop_Glass = 2,
00054 E_Kaon_Stop_Upilex = 3,
00055 E_Kaon_Stop_Osim = 4,
00056 E_Kaon_Stop_Other = 5,
00057 };
00058
00059 enum E_Count_id{
00060 E_count_trigger = 0,
00061 E_count_analyze = 1,
00062 E_count_pat_rec = 2,
00063 E_count_reconst = 3,
00064 E_count_rec_sel = 4,
00065 };
00066
00067 protected:
00068
00069
00070
00071 enum E_Fnd_Scal_01_Descr{
00072 E_FndScal_01_Desc_M27_HYP = 0,
00073 E_FndScal_01_Desc_M27_BHA = 1,
00074 E_FndScal_01_Desc_BTB_11 = 2,
00075 E_FndScal_01_Desc_BTB_EL = 3,
00076 E_FndScal_01_Desc_PC = 4,
00077 E_FndScal_01_Desc_Presc_BTB_MB = 5,
00078 E_FndScal_01_Desc_OR_MB = 6,
00079 E_FndScal_01_Desc_OR_EL = 7,
00080 E_FndScal_01_Desc_HYP = 8,
00081 E_FndScal_01_Desc_BHA = 9,
00082 E_FndScal_01_Desc_Presc_BHA = 10,
00083 E_FndScal_01_Desc_Presc_BTB_EL = 11,
00084 E_FndScal_01_Desc_OR_TOFO = 12,
00085 E_FndScal_01_Desc_Presc_OR_MB = 13,
00086 E_FndScal_01_Desc_TotTrig = 14,
00087 E_FndScal_01_Desc_Time = 15,
00088 E_FndScal_01_Desc_End = 16
00089 };
00090
00091 enum E_Fnd_Scal_23_Descr{
00092 E_FndScal_23_Desc_HYP = 0,
00093 E_FndScal_23_Desc_BHA = 1,
00094 E_FndScal_23_Desc_Presc_OR_EL = 2,
00095 E_FndScal_23_Desc_BTB_EL = 3,
00096 E_FndScal_23_Desc_OR_TOFO = 4,
00097 E_FndScal_23_Desc_LASER = 5,
00098 E_FndScal_23_Desc_OR_TOFI = 6,
00099 E_FndScal_23_Desc_SC = 7,
00100 E_FndScal_23_Desc_BTB_MB = 8,
00101 E_FndScal_23_Desc_ORtofiORtofo = 9,
00102 E_FndScal_23_Desc_ORelORtofo = 10,
00103 E_FndScal_23_Desc_void1 = 11,
00104 E_FndScal_23_Desc_void2 = 12,
00105 E_FndScal_23_Desc_RF = 13,
00106 E_FndScal_23_Desc_Trig_Busy = 14,
00107 E_FndScal_23_Desc_Time = 15,
00108 E_FndScal_23_Desc_End = 16,
00109 };
00110
00111 enum E_Fnd_Scal_4_Descr{
00112 E_FndScal_4_Desc_TOFI_01 = 0,
00113 E_FndScal_4_Desc_TOFI_02 = 1,
00114 E_FndScal_4_Desc_TOFI_03 = 2,
00115 E_FndScal_4_Desc_TOFI_04 = 3,
00116 E_FndScal_4_Desc_TOFI_05 = 4,
00117 E_FndScal_4_Desc_TOFI_06 = 5,
00118 E_FndScal_4_Desc_TOFI_07 = 6,
00119 E_FndScal_4_Desc_TOFI_08 = 7,
00120 E_FndScal_4_Desc_TOFI_09 = 8,
00121 E_FndScal_4_Desc_TOFI_10 = 9,
00122 E_FndScal_4_Desc_TOFI_11 = 10,
00123 E_FndScal_4_Desc_TOFI_12 = 11,
00124 E_FndScal_4_Desc_End = 12,
00125 };
00126
00127 TString GetScal_01_DescName(Int_t bit)
00128 {
00129
00130 E_Fnd_Scal_01_Descr desc = (E_Fnd_Scal_01_Descr)(bit);
00131 switch(desc){
00132 case E_FndScal_01_Desc_M27_HYP: return "Mul 2-7 (HYP).";
00133 case E_FndScal_01_Desc_M27_BHA: return "Mul 2-7 (BHA).";
00134 case E_FndScal_01_Desc_BTB_11: return "BTB 1-1.......";
00135 case E_FndScal_01_Desc_BTB_EL: return "BTB EL........";
00136 case E_FndScal_01_Desc_PC: return "Prompt Coinc. ";
00137 case E_FndScal_01_Desc_Presc_BTB_MB: return "Presc. BTB MB.";
00138 case E_FndScal_01_Desc_OR_MB: return "OR TOFINO (MB)";
00139 case E_FndScal_01_Desc_OR_EL: return "OR TOFINO (EL)";
00140 case E_FndScal_01_Desc_HYP: return "HYP...........";
00141 case E_FndScal_01_Desc_BHA: return "BHA...........";
00142 case E_FndScal_01_Desc_Presc_BHA: return "Presc BHA.....";
00143 case E_FndScal_01_Desc_Presc_BTB_EL: return "Presc BTB EL..";
00144 case E_FndScal_01_Desc_OR_TOFO: return "OR TOFONE.....";
00145 case E_FndScal_01_Desc_Presc_OR_MB: return "Presc OR MB...";
00146 case E_FndScal_01_Desc_TotTrig: return "Total Triggers";
00147 case E_FndScal_01_Desc_Time: return "Time..........";
00148 default :
00149 Error("GetScal_01_DescName","Scalers bit %d not available",bit);
00150 return "";
00151 }
00152 }
00153
00154 TString GetScal_23_DescName(Int_t bit)
00155 {
00156
00157 E_Fnd_Scal_23_Descr desc = (E_Fnd_Scal_23_Descr)(bit);
00158 switch(desc){
00159 case E_FndScal_23_Desc_HYP: return "HYP..............";
00160 case E_FndScal_23_Desc_BHA: return "BHA..............";
00161 case E_FndScal_23_Desc_Presc_OR_EL: return "Presc OR-EL......";
00162 case E_FndScal_23_Desc_BTB_EL: return "BTB-EL...........";
00163 case E_FndScal_23_Desc_OR_TOFO: return "OR-TOFONE........";
00164 case E_FndScal_23_Desc_LASER: return "LASER............";
00165 case E_FndScal_23_Desc_OR_TOFI: return "OR-TOFINO.(MB)...";
00166 case E_FndScal_23_Desc_SC: return "Slow Coinc. .....";
00167 case E_FndScal_23_Desc_BTB_MB: return "BTB-MB...........";
00168 case E_FndScal_23_Desc_ORtofiORtofo: return "ORtofino*ORtofone";
00169 case E_FndScal_23_Desc_ORelORtofo: return "OR-EL*ORtofone...";
00170 case E_FndScal_23_Desc_void1: return "(void)...........";
00171 case E_FndScal_23_Desc_void2: return "(void)...........";
00172 case E_FndScal_23_Desc_RF: return "RF/4.............";
00173 case E_FndScal_23_Desc_Trig_Busy: return "Trig*busy........";
00174 case E_FndScal_23_Desc_Time: return "Time.............";
00175 default :
00176 Error("GetScal_23_DescName","Scalers bit %d not available",bit);
00177 return "";
00178 }
00179 }
00180
00181 TString GetScal_4_DescName(Int_t bit)
00182 {
00183
00184 E_Fnd_Scal_4_Descr desc = (E_Fnd_Scal_4_Descr)(bit);
00185 switch(desc){
00186 case E_FndScal_4_Desc_TOFI_01: return "TOFINO-01";
00187 case E_FndScal_4_Desc_TOFI_02: return "TOFINO-02";
00188 case E_FndScal_4_Desc_TOFI_03: return "TOFINO-03";
00189 case E_FndScal_4_Desc_TOFI_04: return "TOFINO-04";
00190 case E_FndScal_4_Desc_TOFI_05: return "TOFINO-05";
00191 case E_FndScal_4_Desc_TOFI_06: return "TOFINO-06";
00192 case E_FndScal_4_Desc_TOFI_07: return "TOFINO-07";
00193 case E_FndScal_4_Desc_TOFI_08: return "TOFINO-08";
00194 case E_FndScal_4_Desc_TOFI_09: return "TOFINO-09";
00195 case E_FndScal_4_Desc_TOFI_10: return "TOFINO-10";
00196 case E_FndScal_4_Desc_TOFI_11: return "TOFINO-11";
00197 case E_FndScal_4_Desc_TOFI_12: return "TOFINO-12";
00198 default :
00199 Error("GetScal_4_DescName","Scalers bit %d not available",bit);
00200 return "";
00201 }
00202 }
00203
00204
00205 Int_t fDebugLev;
00206 Bool_t fIsOnline;
00207
00208 ofstream *fCurLogFile;
00209
00210 Int_t fTrkStream;
00211
00212
00213 TTree *fScalTree;
00214 TTree *fGesTree;
00215 TTree *fBabaTree;
00216 TTree *fBhabhaTree;
00217 TTree *fHypeTree;
00218
00219
00220
00221 UInt_t fScal0[E_FndScal_01_Desc_End];
00222 UInt_t fScal1[E_FndScal_01_Desc_End];
00223 UInt_t fScal2[E_FndScal_23_Desc_End];
00224 UInt_t fScal3[E_FndScal_23_Desc_End];
00225 UInt_t fScal4[E_FndScal_4_Desc_End];
00226
00227
00228 Int_t fScalEvNum;
00229 Int_t fScal_Time[E_Scal_Inhib_End];
00230 Int_t fScal_HYP[E_Scal_Inhib_End];
00231 Int_t fScal_BHA[E_Scal_Inhib_End];
00232 Int_t fScal_ORtofino_MB[E_Scal_Inhib_End];
00233 Int_t fScal_ORtofone[E_Scal_Inhib_End];
00234
00235
00236 Int_t fGesEvNum;
00237 Int_t fGesTrigType;
00238 UInt_t fGesEvTime;
00239 Int_t fGesNentryBhabha;
00240 Int_t fGesNentryHype;
00241
00242
00243 Int_t fForeseenSign[2];
00244
00245
00246 Int_t fBhaEvNum;
00247 Bool_t fBhaVertImpossible;
00248 Bool_t fBhaVertDoubtful;
00249 Float_t fBhaVertPos[3];
00250 Float_t fBhaMom[2];
00251 Float_t fBhaPipe_X[2];
00252 Float_t fBhaPipe_Y[2];
00253 Float_t fBhaPipe_Z[2];
00254 Float_t fBhaDirCos_X[2];
00255 Float_t fBhaDirCos_Y[2];
00256 Float_t fBhaDirCos_Z[2];
00257 Bool_t fBhaIsLong[2];
00258 Float_t fBhaPipeAngle[2];
00259 Float_t fBhaTofiTime[2];
00260 Float_t fBhaTofoTime[2];
00261 Float_t fBhaTrackLength[2];
00262
00263 Float_t fBhaInvMass_EpluEmin;
00264 Float_t fBhaInvMass_PIpluPImin;
00265 Float_t fBhaTotalMomentum;
00266 Float_t fBhaAngle;
00267
00268
00269 Float_t fBhaGeoPRradius[2];
00270 Float_t fBhaGeoFitPoint_X[2];
00271 Float_t fBhaGeoFitPoint_Y[2];
00272 Float_t fBhaGeoFitPoint_Z[2];
00273 Float_t fBhaGeoFitDirCos_X[2];
00274 Float_t fBhaGeoFitDirCos_Y[2];
00275 Float_t fBhaGeoFitDirCos_Z[2];
00276
00277
00278 Int_t fHypEvNum;
00279 Int_t fHyp_PattRec_Err;
00280 Float_t fHyp_PhiDecayPos[3];
00281
00282 Int_t fHypStopID[2];
00283 Int_t fHypStopTgtNum[2];
00284 Int_t fHypStopVolNum[2];
00285
00286 Float_t fHyp_K_StopPoint_X[2];
00287 Float_t fHyp_K_StopPoint_Y[2];
00288 Float_t fHyp_K_StopPoint_Z[2];
00289
00290 Float_t fHyp_K_DeDx_Isi[2];
00291
00292
00293
00294 Float_t fHyp_K_Vert_Center_X[2];
00295 Float_t fHyp_K_Vert_Center_Y[2];
00296 Float_t fHyp_K_Vert_Radius[2];
00297
00298
00299
00300
00301
00302
00303
00304 TClonesArray *fTracks_Kmin;
00305 TClonesArray *fTracks_Kplu;
00306 TClonesArray *fVertices;
00307
00308 TFndTrack *fCurTrack;
00309 TFndVertex *fCurVertex;
00310
00311 protected:
00312 TFile *fCurPreanFile;
00313 void AddTrack(Int_t part_id);
00314 void AddVertex();
00315
00316 private:
00317 void InitTrees();
00318
00319 public:
00320 explicit TFndPrean(Int_t debug_lev = 0);
00321 ~TFndPrean();
00322
00323 void SetDeamonBehaviour();
00324 void Init(Bool_t is_online);
00325 void Finish();
00326 Int_t SaveTrees(TFile *file);
00327
00328 void ResetDataVariables();
00329 void Reset();
00330
00331
00332
00333 Int_t GoToEvent(const Int_t &ev_num,Int_t &mode);
00334
00335 void ReadScalers(UInt_t *RawEvent);
00336 void InspectGES(TFndProcessRec *prec);
00337 void AnalyzeBhabha(TFndProcessRec *prec);
00338 void AnalyzeHype(TFndProcessRec *prec);
00339 void UpdateGESTree();
00340
00341 TTree *GetScalTree() { return fScalTree; }
00342 TTree *GetGesTree() { return fGesTree; }
00343 TTree *GetBabaTree() { return fBabaTree; }
00344 TTree *GetBhabhaTree() { return fBhabhaTree; }
00345 TTree *GetHypeTree() { return fHypeTree; }
00346
00347 void PrintScaler(Int_t scal_id);
00348
00349
00350 Int_t LoadTrees(const TString &fNam);
00351 Int_t CloseCurrentSourceFile();
00352
00353 void SetLogFile(ofstream *logfile)
00354 {
00355 fCurLogFile = logfile;
00356 }
00357
00358 static TClonesArray *fgKminTracks;
00359 static TClonesArray *fgKpluTracks;
00360 static TClonesArray *fgVertices;
00361
00362
00363 Int_t CheckTofinoCFDs(TFndProcessRec *prec);
00364
00365 friend class TFndEvd;
00366
00367 ClassDef(TFndPrean,0)
00368 };
00369
00370 #endif // FROOT_TFndPrean