TOF/TFndHTof.cxx

00001 // @(#)fROOT/TOF:$Name:  $:$Id: TFndHTof.cxx,v 1.26 2007/10/16 12:03:44 Diego_Faso Exp $
00002 // Revision Author: Diego Faso <mailto:faso@to.infn.it>, 2005/06/24
00003 // Original Author: Piergiorgio Cerello <mailto:cerello@to.infn.it>
00004 
00006 //                                                       //
00007 //               TFndHTof                                //
00008 //                                                       //
00009 //  Class for the TOF HDT description                    //
00010 //                                                       //
00011 // Numbering:                                            //
00012 //      1- 12: TOFINO low-threshold CFD->mean-timer TDC  //
00013 //    300-312: TOFINO high-threshold CFD->mean-timer TDC //
00014 //    100-172: TOFONE  CFD->mean-timer TDC               //
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   // initialize all data-members to defaults
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   // evaluate all hit attributes
00075   // (get info from DB (TFndDB) when needed)
00076   
00077   // --- "both-ADC/TDC" flags
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++){ // loop on the two sides
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++){ // loop on the two sides
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++){ // loop on the two sides
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){ // charge evaluation
00128     if( (fCalibAdc[E_FIN_SIDE_E] * fCalibAdc[E_FIN_SIDE_P]) < 0){
00129       // Warning("EvalHit","Negative charge in TOF hit"); // [left side of pedestal]
00130       fDB = 0; // owned by TFndRun
00131       return;
00132     }
00133     fEnergyDep = TMath::Sqrt(fCalibAdc[E_FIN_SIDE_E] * fCalibAdc[E_FIN_SIDE_P]);
00134     // ---
00135   }
00136   
00137   // zeta evaluation
00138   Int_t dtak = GetDataTakingFromTime(fndrun->GetRunTime());
00139 
00140   cout << "===========> " << dtak << endl;
00141 
00142   if(fLayer == static_cast<Int_t>(E_FIN_INNER_LAYER)){ // TOFINO
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{ // TOFONE
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       // fPosLRS[2] = (Double_t) ( (  tcp -  tce ) / (2 ) * TofZetaGeoAdjust(fLayer)); // old method
00175     }
00176   }
00177   
00178   gFndGeom->RefSys_TofSlabToMRS(fChannel,fPosLRS,fPosMRS);
00179   // ---
00180   fDB = 0; // owned by TFndRun
00181 
00183   if(fLayer == E_FIN_INNER_LAYER)
00184     fOverChargeVal  = fEnergyDep - TFndHdt::GetTofinoChargeCut(fSlab,fndrun->GetRunTime());
00185 
00186   //  PrintHit(3); // this line can be useful for debug  
00187 }
00188 
00189 //_______________________________
00190 void TFndHTof::PrintHit(Int_t depth)
00191 {
00192   // to be completed
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 }

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