00001
00002
00003
00004
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00017
00018 #include <Riostream.h>
00019
00020 #include "TFndRun.h"
00021 #include "TFndHTof.h"
00022 #include "TFndGenInfo.h"
00023 #include "TMath.h"
00024
00025 ClassImp(TFndHTof)
00026
00027
00028 TFndHTof::TFndHTof(const Int_t &channel):
00029 TFndHit(channel),
00030 fLayer(),fSlab(),
00031 fAdc(),fLowTdc(),fLowMeanTimer(),fHighTdc(),fHighMeanTimer(),
00032 fCalibAdc(),
00033 fCalibLowTdc(),fCalibLowMeanTimer(),
00034 fCalibHighTdc(),fCalibHighMeanTimer(),
00035 fEnergyDep(),
00036 fBothAdc(),fBothLowTdc(),fBothHighTdc(),
00037 fOverChargeVal()
00038 {
00039 Init();
00040 TFndDB::Tof_ChNum_To_DetChan(fChannel,fLayer,fSlab);
00041 }
00042
00043
00044 TFndHTof::~TFndHTof() {
00045
00046 }
00047
00048
00049 void TFndHTof::Init(){
00050
00051
00052 for(Int_t i=0;i<2;i++){
00053 fAdc[i] = -1;
00054 fLowTdc[i] = -1;
00055 fHighTdc[i] = -1;
00056
00057 fCalibAdc[i] = -1;
00058 fCalibLowTdc[i] = -1;
00059 fCalibHighTdc[i] = -1;
00060 }
00061 fLowMeanTimer = -1;
00062 fHighMeanTimer = -1;
00063 fCalibLowMeanTimer = -1;
00064 fCalibHighMeanTimer = -1;
00065
00066 fBothAdc = -1;
00067 fBothLowTdc = -1;
00068 fBothHighTdc = -1;
00069 fOverChargeVal = 0;
00070 }
00071
00072
00073 void TFndHTof::EvalHit(){
00074
00075
00076
00077
00078 fBothAdc = E_HIT_NO_CH;
00079 if(fAdc[E_FIN_SIDE_P] >0 && fAdc[E_FIN_SIDE_E] >0) fBothAdc = E_HIT_BOTH_CH;
00080 if(fAdc[E_FIN_SIDE_P] <=0 && fAdc[E_FIN_SIDE_E] >0) fBothAdc = E_HIT_E_CH;
00081 if(fAdc[E_FIN_SIDE_P] >0 && fAdc[E_FIN_SIDE_E] <=0) fBothAdc = E_HIT_P_CH;
00082
00083 fBothLowTdc = E_HIT_NO_CH;
00084 if(fLowTdc[E_FIN_SIDE_P] >0 && fLowTdc[E_FIN_SIDE_E] >0) fBothLowTdc = E_HIT_BOTH_CH;
00085 if(fLowTdc[E_FIN_SIDE_P] <=0 && fLowTdc[E_FIN_SIDE_E] >0) fBothLowTdc = E_HIT_E_CH;
00086 if(fLowTdc[E_FIN_SIDE_P] >0 && fLowTdc[E_FIN_SIDE_E] <=0) fBothLowTdc = E_HIT_P_CH;
00087
00088 fBothHighTdc = E_HIT_NO_CH;
00089 if(fHighTdc[E_FIN_SIDE_P] >0 && fHighTdc[E_FIN_SIDE_E] >0) fBothHighTdc = E_HIT_BOTH_CH;
00090 if(fHighTdc[E_FIN_SIDE_P] <=0 && fHighTdc[E_FIN_SIDE_E] >0) fBothHighTdc = E_HIT_E_CH;
00091 if(fHighTdc[E_FIN_SIDE_P] >0 && fHighTdc[E_FIN_SIDE_E] <=0) fBothHighTdc = E_HIT_P_CH;
00092
00093 fPosLRS[0] = 0;
00094 fPosLRS[1] = 0;
00095 fPosLRS[2] = 0;
00096
00098
00099 TFndFeeMap *fDB = fndrun->GetFeeMap();
00100
00101 for(Int_t sid=0;sid<2;sid++){
00102 if(fAdc[sid] == -1) continue;
00103 fCalibAdc[sid] = fAdc[sid] - fDB->GetTofCal_Q0(fLayer,fSlab,sid);
00104 fCalibAdc[sid] = fCalibAdc[sid] * fDB->GetTofCal_Q1(fLayer,fSlab,sid);
00105 }
00106
00107 for(Int_t sid=0;sid<2;sid++){
00108 if(fLowTdc[sid] == -1) continue;
00109 fCalibLowTdc[sid] = fDB->GetTofCal_T0_LowTh(fLayer,fSlab,sid) - fLowTdc[sid] ;
00110 fCalibLowTdc[sid] = fCalibLowTdc[sid] * fDB->GetTofCal_T1_LowTh(fLayer,fSlab,sid);
00111 }
00112 if(fLowMeanTimer != -1){
00113 fCalibLowMeanTimer = fDB->GetTofCal_T0_LowTh(fLayer,fSlab,2) - fLowMeanTimer ;
00114 fCalibLowMeanTimer = fCalibLowMeanTimer * fDB->GetTofCal_T1_LowTh(fLayer,fSlab,2);
00115 }
00116
00117 for(Int_t sid=0;sid<2;sid++){
00118 if(fHighTdc[sid] == -1) continue;
00119 fCalibHighTdc[sid] = fDB->GetTofCal_T0_HighTh(fLayer,fSlab,sid) - fHighTdc[sid] ;
00120 fCalibHighTdc[sid] = fCalibHighTdc[sid] * fDB->GetTofCal_T1_HighTh(fLayer,fSlab,sid);
00121 }
00122 if(fHighMeanTimer != -1){
00123 fCalibHighMeanTimer = fDB->GetTofCal_T0_HighTh(fLayer,fSlab,2) - fHighMeanTimer ;
00124 fCalibHighMeanTimer = fCalibHighMeanTimer * fDB->GetTofCal_T1_HighTh(fLayer,fSlab,2);
00125 }
00126
00127 if(fBothAdc == E_HIT_BOTH_CH){
00128 if( (fCalibAdc[E_FIN_SIDE_E] * fCalibAdc[E_FIN_SIDE_P]) < 0){
00129
00130 fDB = 0;
00131 return;
00132 }
00133 fEnergyDep = TMath::Sqrt(fCalibAdc[E_FIN_SIDE_E] * fCalibAdc[E_FIN_SIDE_P]);
00134
00135 }
00136
00137
00138 Int_t dtak = GetDataTakingFromTime(fndrun->GetRunTime());
00139
00140 cout << "===========> " << dtak << endl;
00141
00142 if(fLayer == static_cast<Int_t>(E_FIN_INNER_LAYER)){
00143 fPosLRS[2]= -999;
00144 if(fBothAdc == E_HIT_BOTH_CH){
00145 switch(dtak){
00146 case 1:
00147 fPosLRS[2] = TofinoZetaFromCharge(dtak,
00148 (Double_t) ( fAdc[static_cast<Int_t>(E_FIN_SIDE_E)] ),
00149 (Double_t) ( fAdc[static_cast<Int_t>(E_FIN_SIDE_P)] )
00150 );
00151 break;
00152 case 2:
00153 Printf("Data-taking -------: %d",dtak);
00154 if(fCalibAdc[static_cast<Int_t>(E_FIN_SIDE_E)] <=0 || fCalibAdc[static_cast<Int_t>(E_FIN_SIDE_P)] <=0)
00155 break;
00156 fPosLRS[2] = TofinoZetaFromCharge(dtak,
00157 (Double_t) ( fCalibAdc[static_cast<Int_t>(E_FIN_SIDE_E)] ),
00158 (Double_t) ( fCalibAdc[static_cast<Int_t>(E_FIN_SIDE_P)] )
00159 );
00160 break;
00161 default:
00162 break;
00163 }
00164
00165 }
00167 }
00168 else{
00169 if(fBothHighTdc == E_HIT_BOTH_CH || fBothLowTdc == E_HIT_BOTH_CH){
00170 fPosLRS[2] = TofoneZetaFromTime(dtak,
00171 (Double_t)(fCalibLowTdc[E_FIN_SIDE_E] ),
00172 (Double_t)(fCalibLowTdc[E_FIN_SIDE_P] )
00173 );
00174
00175 }
00176 }
00177
00178 gFndGeom->RefSys_TofSlabToMRS(fChannel,fPosLRS,fPosMRS);
00179
00180 fDB = 0;
00181
00183 if(fLayer == E_FIN_INNER_LAYER)
00184 fOverChargeVal = fEnergyDep - TFndHdt::GetTofinoChargeCut(fSlab,fndrun->GetRunTime());
00185
00186
00187 }
00188
00189
00190 void TFndHTof::PrintHit(Int_t depth)
00191 {
00192
00193
00194 if( depth <=0 ) return;
00195
00196 TString msg = "";
00197 TString linemsg = " --- --- --- --- ---\n";
00198 msg+=linemsg;
00199
00200 linemsg.Form("Tof Channel: %d\n",fChannel); msg+=linemsg;
00201
00202 if(depth>1){
00203 linemsg.Form(" ---> Adc E: %d\n",fAdc[E_FIN_SIDE_E]); msg+=linemsg;
00204 linemsg.Form(" ---> Adc P: %d\n",fAdc[E_FIN_SIDE_P]); msg+=linemsg;
00205 if(depth > 2){
00206 linemsg.Form(" ------> Both-Adc flag: %d\n",fBothAdc); msg+=linemsg;
00207 }
00208 linemsg.Form(" ---> Tdc E (low-th): %d\n",fLowTdc[E_FIN_SIDE_E]); msg+=linemsg;
00209 linemsg.Form(" ---> Tdc P (low-th): %d\n",fLowTdc[E_FIN_SIDE_P]); msg+=linemsg;
00210 linemsg.Form(" ---> MeanT (low-th): %d\n",fLowMeanTimer); msg+=linemsg;
00211 if(depth > 2){
00212 linemsg.Form(" ------> Both-Tdc (low-th) flag: %d\n",fBothLowTdc); msg+=linemsg;
00213 }
00214 linemsg.Form(" ---> Tdc E (high-th): %d\n",fHighTdc[E_FIN_SIDE_E]); msg+=linemsg;
00215 linemsg.Form(" ---> Tdc P (high-th): %d\n",fHighTdc[E_FIN_SIDE_P]); msg+=linemsg;
00216 linemsg.Form(" ---> MeanT (high-th): %d\n",fHighMeanTimer); msg+=linemsg;
00217 linemsg.Form(" ---> Over chrg phel.: %.2f\n",fOverChargeVal); msg+=linemsg;
00218 if(depth > 2){
00219 linemsg.Form(" ------> Both-Tdc (high-th) flag: %d\n",fBothHighTdc); msg+=linemsg;
00220 linemsg = " --- --- ---"; msg+=linemsg;
00221 linemsg.Form(" ------> Calib. Adc E: %.2f\n",fCalibAdc[E_FIN_SIDE_E]); msg+=linemsg;
00222 linemsg.Form(" ------> Calib. Adc P: %.2f\n",fCalibAdc[E_FIN_SIDE_P]); msg+=linemsg;
00223 linemsg.Form(" ------> Calib. Tdc E (low-th): %.2f\n",fCalibLowTdc[E_FIN_SIDE_E]); msg+=linemsg;
00224 linemsg.Form(" ------> Calib. Tdc P (low-th): %.2f\n",fCalibLowTdc[E_FIN_SIDE_P]); msg+=linemsg;
00225 linemsg.Form(" ------> Calib. MeanT (low-th): %.2f\n",fCalibLowMeanTimer); msg+=linemsg;
00226 linemsg.Form(" ------> Calib. Tdc E (high-th): %.2f\n",fCalibHighTdc[E_FIN_SIDE_E]); msg+=linemsg;
00227 linemsg.Form(" ------> Calib. Tdc P (high-th): %.2f\n",fCalibHighTdc[E_FIN_SIDE_P]); msg+=linemsg;
00228 linemsg.Form(" ------> Calib. MeanT (high-th): %.2f\n",fCalibHighMeanTimer); msg+=linemsg;
00229 linemsg.Form(" ------> Energy dep. (ph-el): %.2f\n",fEnergyDep); msg+=linemsg;
00230 }
00231 }
00232
00233
00234 msg.Resize(msg.Sizeof()-2);
00235 Printf("%s",msg.Data());
00236
00237 if(depth>2) PrintPosition(0);
00238
00239
00240 }