00001
00002
00003
00004
00005 #ifndef FROOT_TFndHdt
00006 #define FROOT_TFndHdt
00007
00009
00010
00011
00012
00013
00014
00015
00016
00017
00019
00020
00021 #include "TThread.h"
00022
00023 #include "TFndRun.h"
00024 #include "TFile.h"
00025
00026 #include "TFndTrig.h"
00027 #include "TFndHTof.h"
00028 #include "TFndHSilCluster.h"
00029 #include "TFndHLmd.h"
00030 #include "TFndHStb.h"
00031
00032 #include "FROOT.h"
00033 using namespace FROOT;
00034
00035 #include "TClonesArray.h"
00036
00037 class TFndHdt : public TObject {
00038
00039 private:
00040 UInt_t fRunNumber;
00041 UInt_t fEvtNum;
00042
00043 TFndTrig *fGts;
00044
00045 TClonesArray *fTofHits;
00046
00047 TClonesArray *fSilClusters;
00048
00049
00050 Int_t fSilNoise[(Int_t)K_N_Sil_AdcCha][(Int_t)K_N_Sil_Sides][(Int_t)K_N_Sil_Modules+1][(Int_t)E_FIN_OUTER_LAYER+1];
00051 Double_t fSilComMod_mean[(Int_t)K_N_Sil_AdcChips][(Int_t)K_N_Sil_Sides][(Int_t)K_N_Sil_Modules+1][(Int_t)E_FIN_OUTER_LAYER+1];
00052
00053 Int_t fSilComMod_count[(Int_t)K_N_Sil_AdcChips][(Int_t)K_N_Sil_Sides][(Int_t)K_N_Sil_Modules+1][(Int_t)E_FIN_OUTER_LAYER+1];
00054 Double_t fSilComMod_max[(Int_t)K_N_Sil_AdcChips][(Int_t)K_N_Sil_Sides][(Int_t)K_N_Sil_Modules+1][(Int_t)E_FIN_OUTER_LAYER+1];
00055
00056 TClonesArray *fLmdHits;
00057 TClonesArray *fStbHits;
00058
00059 Int_t fNoiseLevel;
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074 void SetSilComMod_meanmaxcount_zero()
00075 {
00076 for(Int_t nchip = 0; nchip < (Int_t) K_N_Sil_AdcChips; nchip++)
00077 for(Int_t nside = 0; nside < (Int_t) K_N_Sil_Sides; nside++)
00078 for(Int_t nmod = 1; nmod < (Int_t) K_N_Sil_Modules+1; nmod++)
00079 for(Int_t nlay = 1; nlay < (Int_t) E_FIN_OUTER_LAYER+1; nlay++){
00080 SetSilComMod_mean(nchip, nside, nmod, nlay, 0.0);
00081 SetSilComMod_max(nchip, nside, nmod, nlay, 0.0);
00082 SetSilComMod_count(nchip, nside, nmod, nlay, 0);}
00083 }
00084
00085 static Bool_t CheckTofinoBtb(const Int_t &sl_ref,const Int_t &sl_opp)
00086 {
00087 UInt_t check = static_cast<UInt_t>( TMath::Abs(sl_ref-sl_opp) );
00088 if(check >=5 && check <=7) return kTRUE;
00089 return kFALSE;
00090 }
00091
00092 void EvalNoiseLevel();
00093
00094 public:
00095 TFndHdt();
00096 ~TFndHdt();
00097
00098 void ClearArrays();
00099 void Reset();
00100 void SetEventProperties(const UInt_t &run_num,const UInt_t &evt_num)
00101 {
00102 fRunNumber = run_num;
00103 fEvtNum = evt_num;
00104 }
00105
00106 UInt_t GetRunNumber() const { return fRunNumber; }
00107 UInt_t GetEventNumber() const { return fEvtNum; }
00108
00109 void EvalHits();
00110 Int_t GetNoiseLevel() { return fNoiseLevel; }
00111
00112
00113 TFndTrig *GetGts() { return fGts; }
00114
00115
00116 TClonesArray *GetTofHits() { return fTofHits; }
00117 Int_t GetNumberOfTofHits() const { return fTofHits->GetEntries(); }
00118 TFndHTof *GetTofHit(Int_t hit_id) { return ((TFndHTof*) fTofHits->At(hit_id)); }
00119 TFndHTof *Find_Add_TofHit(Int_t channel,Bool_t add_if_missing=kFALSE);
00120
00121 static Float_t GetTofinoChargeCut(const Int_t &nslab,const UInt_t &run_time)
00122 {
00123 if(nslab < 1 || nslab > K_N_TOFINO_SLABS){
00124 gROOT->Error("TFndHdt::GetTofinoChargeCut","nslab \"%d\"out of range",nslab);
00125 return 0;
00126 }
00127 Bool_t Is_2006_dtak = (run_time > FROOT::DTak_2006_SftwStartTime)? kTRUE : kFALSE ;
00128
00129
00130 switch(nslab){
00131
00132
00133 case 1: return (Is_2006_dtak)? 350 : 1500;
00134 case 2: return (Is_2006_dtak)? 400 : 1300;
00135 case 3: return (Is_2006_dtak)? 400 : 1500;
00136 case 4: return (Is_2006_dtak)? 450 : 1500;
00137 case 5: return (Is_2006_dtak)? 470 : 1300;
00138 case 6: return (Is_2006_dtak)? 590 : 1500;
00139 case 7: return (Is_2006_dtak)? 500 : 1500;
00140 case 8: return (Is_2006_dtak)? 500 : 1500;
00141 case 9: return (Is_2006_dtak)? 500 : 1500;
00142 case 10: return (Is_2006_dtak)? 300 : 1500;
00143 case 11: return (Is_2006_dtak)? 360 : 1300;
00144 case 12: return (Is_2006_dtak)? 400 : 1300;
00145 default: return (Is_2006_dtak)? 0 : 0;
00146 }
00147 }
00148
00149
00150
00151 TClonesArray *GetSilClusters() { return fSilClusters; }
00152 Int_t GetNumberOfSilClusters() const { return fSilClusters->GetEntries(); }
00153 TFndHSilCluster *GetSilCluster(Int_t sil_cluster_id) { return ((TFndHSilCluster*) fSilClusters->At(sil_cluster_id)); }
00154 TFndHSilCluster *Add_SilCluster(Int_t layer);
00155 void SetSilNoise(Int_t Sil_AdcCha, Int_t Sil_Side, Int_t Sil_Module, Int_t Sil_Layer, Int_t val){fSilNoise[Sil_AdcCha][Sil_Side][Sil_Module][Sil_Layer] = val;}
00156 Int_t GetSilNoise(Int_t Sil_AdcCha, Int_t Sil_Side, Int_t Sil_Module, Int_t Sil_Layer){return fSilNoise[Sil_AdcCha][Sil_Side][Sil_Module][Sil_Layer];}
00157 void SetSilComMod_mean(Int_t Sil_AdcChip, Int_t Sil_Side, Int_t Sil_Module, Int_t Sil_Layer, Double_t val){fSilComMod_mean[Sil_AdcChip][Sil_Side][Sil_Module][Sil_Layer] = val;}
00158 void FillSilComMod_mean(Int_t Sil_AdcChip, Int_t Sil_Side, Int_t Sil_Module, Int_t Sil_Layer, Double_t val){
00159 if (val > fSilComMod_max[Sil_AdcChip][Sil_Side][Sil_Module][Sil_Layer]) fSilComMod_max[Sil_AdcChip][Sil_Side][Sil_Module][Sil_Layer] = val;
00160 fSilComMod_mean[Sil_AdcChip][Sil_Side][Sil_Module][Sil_Layer] += val; fSilComMod_count[Sil_AdcChip][Sil_Side][Sil_Module][Sil_Layer]++;}
00161 void CalculateSilComMod_mean(Int_t Sil_AdcChip, Int_t Sil_Side, Int_t Sil_Module, Int_t Sil_Layer){
00162 (fSilComMod_count[Sil_AdcChip][Sil_Side][Sil_Module][Sil_Layer] > 1) ? (fSilComMod_mean[Sil_AdcChip][Sil_Side][Sil_Module][Sil_Layer] = ((fSilComMod_mean[Sil_AdcChip][Sil_Side][Sil_Module][Sil_Layer] - fSilComMod_max[Sil_AdcChip][Sil_Side][Sil_Module][Sil_Layer]) / (Double_t) (fSilComMod_count[Sil_AdcChip][Sil_Side][Sil_Module][Sil_Layer] - 1.))) : 0;}
00163
00164 void CalculateSilComMod_mean_all(){
00165 for(Int_t nchip = 0; nchip < (Int_t) K_N_Sil_AdcChips; nchip++)
00166 for(Int_t nside = 0; nside < (Int_t) K_N_Sil_Sides; nside++)
00167 for(Int_t nmod = 1; nmod < (Int_t) K_N_Sil_Modules+1; nmod++)
00168 for(Int_t nlay = 1; nlay < (Int_t) E_FIN_OUTER_LAYER+1; nlay++)
00169 CalculateSilComMod_mean(nchip, nside, nmod, nlay);}
00170
00171 Int_t GetIntSilComMod_mean(Int_t Sil_AdcChip, Int_t Sil_Side, Int_t Sil_Module, Int_t Sil_Layer){ return lrint(fSilComMod_mean[Sil_AdcChip][Sil_Side][Sil_Module][Sil_Layer]);}
00172
00173 void SetSilComMod_count(Int_t Sil_AdcChip, Int_t Sil_Side, Int_t Sil_Module, Int_t Sil_Layer, Int_t val) {fSilComMod_count[Sil_AdcChip][Sil_Side][Sil_Module][Sil_Layer] = val;}
00174 void SetSilComMod_max(Int_t Sil_AdcChip, Int_t Sil_Side, Int_t Sil_Module, Int_t Sil_Layer, Double_t val) {fSilComMod_max[Sil_AdcChip][Sil_Side][Sil_Module][Sil_Layer] = val;}
00175
00176
00177
00178 TClonesArray *GetLmdHits() { return fLmdHits; }
00179 Int_t GetNumberOfLmdHits() const { return fLmdHits->GetEntries(); }
00180 TFndHLmd *GetLmdHit(Int_t hit_id) { return ((TFndHLmd*) fLmdHits->At(hit_id)); }
00181 TFndHLmd *Find_Add_LmdHit(Int_t channel,Bool_t add_if_missing=kFALSE);
00182
00183 TClonesArray *GetStbHits() { return fStbHits; }
00184 Int_t GetNumberOfStbHits() const { return fStbHits->GetEntries(); }
00185 TFndHStb *GetStbHit(Int_t hit_id) { return ((TFndHStb*) fStbHits->At(hit_id)); }
00186 TFndHStb *Find_Add_StbHit(Int_t channel,Bool_t add_if_missing=kFALSE);
00187
00188 void PrintHits(Int_t dpt_gts=0,Int_t dpt_tof=0,Int_t dpt_sil=0,Int_t dpt_lmd=0,Int_t dpt_stb=0);
00189
00190 void PrintGts(Int_t depth = 0);
00191 void PrintTofHits(Int_t depth = 0);
00192 void PrintSilHits(Int_t depth = 0);
00193 void PrintSilClusters(Int_t depth = 0);
00194 void PrintLmdHits(Int_t depth = 0);
00195 void PrintStbHits(Int_t depth = 0);
00196
00197 static TClonesArray *fgHTof;
00198 static TClonesArray *fgHSilCluster;
00199 static TClonesArray *fgHLmd;
00200 static TClonesArray *fgHStb;
00201
00202 ClassDef(TFndHdt,2)
00203
00204 };
00205
00206 #endif