00001
00002
00003
00004
00006
00007
00008
00009
00010
00012
00013 #include <Riostream.h>
00014
00015 #include "TMath.h"
00016
00017 #include "TFndRun.h"
00018 #include "TFndHLmd.h"
00019
00020 ClassImp(TFndHLmd)
00021
00022
00023 TFndHLmd::TFndHLmd(const Int_t &chamber,const Int_t &wire):
00024 TFndHit(),
00025 fLayer(),fChamber(),fWire(),
00026 fAdc(),fTdc(),fBothAdc(),fBothTdc(),
00027 fCalibAdc(),
00028 fCalibTdc_T0(),fCalibTdc_T0C(),fCalibMeanTimer_T0(),fCalibMeanTimer_T0C()
00029 {
00030 SetDchIdentifiers(chamber,wire);
00031
00032 Init();
00033
00034
00035 }
00036
00037
00038 TFndHLmd::TFndHLmd(const Int_t &channel):
00039 TFndHit(channel),
00040 fLayer(),fChamber(),fWire(),
00041 fAdc(),fTdc(),fBothAdc(),fBothTdc(),
00042 fCalibAdc(),
00043 fCalibTdc_T0(),fCalibTdc_T0C(),fCalibMeanTimer_T0(),fCalibMeanTimer_T0C()
00044 {
00045
00046 Int_t w;
00047 TFndDB::Lmd_ChNum_To_DetChan(fChannel,fLayer,fChamber,fWire,w);
00048
00049 Init();
00050 }
00051
00052
00053 TFndHLmd::~TFndHLmd() {
00054
00055 }
00056
00057
00058 void TFndHLmd::Init(){
00059
00060
00061
00062 for(Int_t i=0;i<2;i++){
00063 fAdc[i] = -1;
00064 fTdc[i] = -1;
00065
00066 fCalibTdc_T0[i] = -1;
00067 fCalibTdc_T0C[i] = -1;
00068 fCalibAdc[i] = -1;
00069 }
00070 fCalibMeanTimer_T0 = -1;
00071 fCalibMeanTimer_T0C = -1;
00072 fBothAdc = -1;
00073 fBothTdc = -1;
00074
00075 }
00076
00077
00078 void TFndHLmd::EvalHit(){
00079
00080
00081
00082
00083 fBothAdc = E_HIT_NO_CH;
00084 if(fAdc[E_FIN_SIDE_P] >0 && fAdc[E_FIN_SIDE_E] >0) fBothAdc = E_HIT_BOTH_CH;
00085 if(fAdc[E_FIN_SIDE_P] <=0 && fAdc[E_FIN_SIDE_E] >0) fBothAdc = E_HIT_E_CH;
00086 if(fAdc[E_FIN_SIDE_P] >0 && fAdc[E_FIN_SIDE_E] <=0) fBothAdc = E_HIT_P_CH;
00087
00088 fBothTdc = E_HIT_NO_CH;
00089 if(fTdc[E_FIN_SIDE_P] >0 && fTdc[E_FIN_SIDE_E] >0) fBothTdc = E_HIT_BOTH_CH;
00090 if(fTdc[E_FIN_SIDE_P] <=0 && fTdc[E_FIN_SIDE_E] >0) fBothTdc = E_HIT_E_CH;
00091 if(fTdc[E_FIN_SIDE_P] >0 && fTdc[E_FIN_SIDE_E] <=0) fBothTdc = E_HIT_P_CH;
00092
00093
00094
00095
00096
00097
00098 fPosLRS[0] = 0;
00099 fPosLRS[1] = 0;
00100 fPosLRS[2] = 0;
00101
00102 TFndFeeMap *fDB = fndrun->GetFeeMap();
00103
00104 for(Int_t sid=0;sid<2;sid++){
00105 if(fAdc[sid] == -1) continue;
00106 fCalibAdc[sid] = ( (Float_t) (fAdc[sid]) ) - ( (Float_t) fDB->GetLmdCal_Q0(fLayer,fChamber,fWire,sid) );
00107 fCalibAdc[sid] = fCalibAdc[sid] * ( (Float_t) fDB->GetLmdCal_Q1(fLayer,fChamber,fWire,sid) );
00108 }
00109
00110 if( fBothAdc == E_HIT_BOTH_CH) {
00111 fPosLRS[2] =
00112 LmdZetaGeoAdjust((E_Fnd_Layer)fLayer) *
00113 (Double_t)(
00114 (
00115 (fCalibAdc[E_FIN_SIDE_E] - fCalibAdc[E_FIN_SIDE_P]) /
00116 (fCalibAdc[E_FIN_SIDE_E] + fCalibAdc[E_FIN_SIDE_P]) )
00117 );
00118
00119 gFndGeom->RefSys_LmdWireToMRS(fChannel,fPosLRS,fPosMRS);
00120
00121 }
00122
00123
00124 for(Int_t sid=0;sid<2;sid++){
00125 if(fTdc[sid] == -1) continue;
00126 fCalibTdc_T0[sid] = ((Float_t) (fDB->GetLmdCal_T0(fLayer,fChamber,fWire,sid)) ) - ((Float_t)fTdc[sid]) ;
00127 fCalibTdc_T0C[sid] = ((Float_t) (fDB->GetLmdCal_T0C(fLayer,fChamber,fWire,sid)) ) - ((Float_t)fTdc[sid]) ;
00128 }
00129
00130 if(fBothTdc != E_HIT_NO_CH){
00131 Float_t meantim = (Float_t)( (fTdc[0] + fTdc[1]) ) / 2;
00132 fCalibMeanTimer_T0 = ((Float_t) (fDB->GetLmdCal_T0(fLayer,fChamber,fWire,2)) ) - meantim ;
00133 fCalibMeanTimer_T0C = ((Float_t) (fDB->GetLmdCal_T0C(fLayer,fChamber,fWire,2)) ) - meantim ;
00134 }
00135
00136
00137 fDB = 0;
00138
00139 }
00140
00141
00142 void TFndHLmd::PrintHit(Int_t depth)
00143 {
00144
00145
00146 if( depth <=0 ) return;
00147
00148 TString msg = "";
00149 TString linemsg = " --- --- --- --- ---\n";
00150 msg+=linemsg;
00151
00152
00153
00154 linemsg.Form("Lmd Channel: %d\n",fChannel);
00155 msg+=linemsg;
00156
00157 if(depth>1){
00158 linemsg.Form(" ---> Adc E: %d\n",fAdc[E_FIN_SIDE_E]); msg+=linemsg;
00159 linemsg.Form(" ---> Adc P: %d\n",fAdc[E_FIN_SIDE_P]); msg+=linemsg;
00160 linemsg.Form(" ---> Tdc E: %d\n",fTdc[E_FIN_SIDE_E]); msg+=linemsg;
00161 linemsg.Form(" ---> Tdc P: %d\n",fTdc[E_FIN_SIDE_P]); msg+=linemsg;
00162 linemsg.Form(" ---> zeta : %.2f\n",fPosLRS[2]); msg+=linemsg;
00163 if(depth>2){
00164 linemsg.Form(" ------> Calib. Adc E : %.2f\n",fCalibAdc[E_FIN_SIDE_E]); msg+=linemsg;
00165 linemsg.Form(" ------> Calib. Adc P : %.2f\n",fCalibAdc[E_FIN_SIDE_P]); msg+=linemsg;
00166 linemsg.Form(" ------> Calib. Tdc E(T0) : %.2f\n",fCalibTdc_T0[E_FIN_SIDE_E]); msg+=linemsg;
00167 linemsg.Form(" ------> Calib. Tdc P(T0) : %.2f\n",fCalibTdc_T0[E_FIN_SIDE_P]); msg+=linemsg;
00168 linemsg.Form(" ------> Calib. Tdc E(T0C): %.2f\n",fCalibTdc_T0C[E_FIN_SIDE_E]); msg+=linemsg;
00169 linemsg.Form(" ------> Calib. Tdc P(T0C): %.2f\n",fCalibTdc_T0C[E_FIN_SIDE_P]); msg+=linemsg;
00170 linemsg.Form(" ------> Calib. MT(T0) : %.2f\n",fCalibMeanTimer_T0); msg+=linemsg;
00171 linemsg.Form(" ------> Calib. MT(T0C) : %.2f\n",fCalibMeanTimer_T0C); msg+=linemsg;
00172 }
00173 }
00174
00175 msg.Resize(msg.Sizeof()-2);
00176 Printf("%s",msg.Data());
00177
00178 if(depth>2) PrintPosition(0);
00179
00180 }
00181