LMD/TFndHLmd.cxx

00001 // @(#)fROOT/LMD:$Name:  $:$Id: TFndHLmd.cxx,v 1.17 2007/09/24 07:32:41 Diego_Faso Exp $
00002 // Revision Author: Diego Faso <mailto:faso@to.infn.it>, 2005/06/24
00003 // Oroginal Author: P. Cerello <mailto:cerello@to.infn.it>, 1999; D. Faso <mailto:faso@to.infn.it>, 2006
00004 
00006 //                                          //
00007 //                 TFndHLmd                 //
00008 //                                          //
00009 //  Description of the hit on Lmd           //
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   // initialize all variables to defaults
00060   
00061   // do not set fLayer,fChamber,fWire here
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   // evaluate all hit attributes
00080   // (get info from DB (TFndDB) when needed)
00081   
00082   // --- "both-ADC/TDC" flags
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   // --- evaluation of the zeta coordinate
00094   //     (x and y set to zero for every wire)
00095   // //   Double_t fPosLRS[3]; // Position in the Local Reference System (cm) [x,y,z] 
00096   // //   Double_t fPosMRS[3]; // Position in the Main Reference System (cm) [x,y,z] 
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++){ // loop on the two sides
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     // position in MRS:
00119     gFndGeom->RefSys_LmdWireToMRS(fChannel,fPosLRS,fPosMRS);
00120     
00121   }
00122 
00123   // TDC calibrations (both COSM and central triggers)
00124   for(Int_t sid=0;sid<2;sid++){ // loop on the two sides
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; // owned by TFndRun
00138   //  PrintHit(3); // this line can be useful for debug
00139 }
00140 
00141 //_______________________________
00142 void TFndHLmd::PrintHit(Int_t depth)
00143 {
00144   // to be completed
00145 
00146   if( depth <=0 ) return;
00147 
00148   TString msg = "";
00149   TString linemsg = " --- --- --- --- ---\n";
00150   msg+=linemsg;
00151 
00152   //  if(depth>0) Printf("Lmd Channel: %d",fChannel);
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 

Generated on Tue Oct 16 15:40:47 2007 by  doxygen 1.5.2