LMD/TFndLmdMon.h

00001 // @(#)fROOT/LMD:$Name:  $:$Id: TFndLmdMon.h,v 1.16 2007/09/05 10:00:29 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 
00005 #ifndef FROOT_TFndLmdMon
00006 #define FROOT_TFndLmdMon
00007 
00009 //                TFndLmdMon                 //
00010 //                                           //
00011 //  - LMD-Histogram collection and filling   //
00012 //  - LMD shared memories management         //
00013 //                                           //
00014 // (see GTS relative class for descriptions) //
00015 //                                           //
00017 
00018 #include "FROOT.h"
00019 
00020 #include "TObject.h"
00021 #include "TDatime.h"
00022 #include "TObjArray.h"
00023 #include "TFile.h"
00024 #ifdef _FND_ONL_USE_MAP_FILES_
00025 #include "TMapFile.h"
00026 #endif
00027 #include "TH1.h"
00028 #include "TH2.h"
00029 #include "TCanvas.h"
00030 #include "TLine.h"
00031 #include "TString.h"
00032 #include "TDirectory.h"
00033 #include <stdlib.h>
00034 #include <Riostream.h>
00035 #include <time.h>
00036 
00037 #include "TObject.h"
00038 
00039 class TFndHdt;
00040 class TFndRun;
00041 class TFndGenInfo;
00042 class TFndHLmd;
00043 
00044 using namespace FROOT;
00045 
00046 class TFndLmdMon : public TObject {
00047 
00048  protected:
00049   Int_t    shmflg;                     // Shared Memory flag
00050   TFile *fout;
00051   TFile    *flmd;                      // Lmd histogram file
00052 
00053   Double_t fZetaAdjust[2]; // zeta adjust geometric coefficient
00054 
00055   // --- shared memories/files
00056   
00057 #if defined _FND_ONL_USE_MAP_FILES_
00058   TMapFile *mlmd;                      // main LMD shared memory
00059   TMapFile *mlmd_adc[2];                // inner/outer ADC shared memory
00060   TMapFile *mlmd_tdc[2];                // inner/outer TDC shared memory
00061 #elif defined _FND_ONL_USE_SHARED_FILES_
00062   TFile *mlmd;                      // main LMD shared memory
00063   TFile *mlmd_adc[2];               // inner/outer ADC shared memory
00064   TFile *mlmd_tdc[2];                // inner/outer TDC shared memory
00065 #endif
00066   
00067   // --- shared memories/files names
00068   Bool_t fMustRecoverHistos; // true if a recovery must be performed after a break
00069   
00070   TString fSharedMemName_Main;
00071   TString fSharedMemName_Adc[2]; // inner/outer
00072   TString fSharedMemName_Tdc[2];
00073 
00074   TString fSharedFileName_Main;
00075   TString fSharedFileName_Adc[2]; // inner/outer
00076   TString fSharedFileName_Tdc[2];
00077   
00078   // --- histograms 
00079 
00080   TH1F *lmdmult;                       // LMD multiplicity
00081   TH1F *lmdmult_good;                  // LMD selected multiplicity
00082   TH2F *lmd_i_o_mult;                  // LMD multiplicity
00083   TH2F *lmdmap;                        // LMD pattern
00084   TH2F *lmdmap_good;                        // LMD pattern
00085   TH2F *lmdmapadc0;                    // LMD ADC pattern (e || p |= 0)
00086   TH2F *lmdmapadc;                     // LMD ADC pattern (e && p != 0)
00087   TH2F *lmdmapadce;                    // LMD e-side ADC pattern
00088   TH2F *lmdmapadcp;                    // LMD p-side ADC pattern
00089 
00090   TH2F *lmdmaptdc0;                    // LMD TDC pattern (e || p |= 0) 
00091   TH2F *lmdmaptdc;                     // LMD TDC pattern (e && p != 0)  
00092   TH2F *lmdmaptdce;                    // LMD e-side TDC pattern   
00093   TH2F *lmdmaptdcp;                    // LMD p-side TDC pattern  
00094    
00095   TH2F *lmd_all_mapadctdc[K_N_LMD_TOT_CHAMS];           // LMD ADC vs TDC existence 
00096   TH2F *lmd_all_adc_tdc[K_N_LMD_TOT_CHAMS];        // LMD ADC vs TDC 
00097   TH1F *lmd_all_adce[K_N_LMD_TOT_CHAMS];           // e-side ADC
00098   TH1F *lmd_all_adcp[K_N_LMD_TOT_CHAMS];           // p-side ADC
00099   TH1F *lmd_all_mul[K_N_LMD_TOT_CHAMS];            // Multiplicity ( # wires/ev)
00100 
00101   TH1F *lmd_all_aepat[K_N_LMD_TOT_CHAMS];          // Wires ADC-e patterns
00102   TH1F *lmd_all_appat[K_N_LMD_TOT_CHAMS];          // Wires ADC-p patterns
00103   TH1F *lmd_all_tepat[K_N_LMD_TOT_CHAMS];          // Wires TDC-e patterns
00104   TH1F *lmd_all_tppat[K_N_LMD_TOT_CHAMS];          // Wires TDC-p patterns
00105 
00106   TH1F *lmd_all_vp[K_N_LMD_TOT_CHAMS];             // Drift Speed
00107   TH1F *lmd_all_crg[K_N_LMD_TOT_CHAMS];            // ADC (e+p)
00108   TH2F *lmd_all_zet[K_N_LMD_TOT_CHAMS];            // ADC (e-p)/(e+p)
00109   TH2F *lmd_all_adc[K_N_LMD_TOT_CHAMS];            // ADC (e-side vs p-side)      
00110   TH1F *lmd_all_tdce[K_N_LMD_TOT_CHAMS];           // e-side TDC
00111   TH1F *lmd_all_tdcp[K_N_LMD_TOT_CHAMS];           // p-side TDC
00112   TH1F *lmd_all_tdf[K_N_LMD_TOT_CHAMS];            // Time difference
00113   TH1F *lmd_all_tmean[K_N_LMD_TOT_CHAMS];          // (Te+Tp)/2
00114   TH2F *lmd_all_tdc[K_N_LMD_TOT_CHAMS];            // TDC (e-side vs p-side)
00115 
00116   TH1F *lmd_all_dhits[K_N_LMD_TOT_CHAMS];          // Double Lmd Hits
00117   TH2F *lmd_all_dhits_tdc_dopp[K_N_LMD_TOT_CHAMS];          // Double Lmd Hits TDC
00118   TH2F *lmd_all_dhits_adc_dopp[K_N_LMD_TOT_CHAMS];          // Double Lmd Hits ADC
00119   TH2F *lmd_all_dhits_tdc_cell[K_N_LMD_TOT_CHAMS];          // Double Lmd Hits TDC
00120   TH2F *lmd_all_dhits_adc_cell[K_N_LMD_TOT_CHAMS];          // Double Lmd Hits ADC
00121 
00122   static const Int_t n_lmd_hist = 272; // Total number of wires 
00123   TH1F *lmdadce[n_lmd_hist];           // e-side ADC
00124   TH1F *lmdadcp[n_lmd_hist];           // p-side ADC
00125   TH1F *lmdcrg[n_lmd_hist];            // ADC (e+p)
00126   TH1F *lmdzet[n_lmd_hist];            // ADC (e-p)/(e+p)
00127   TH1F *lmdtdce[n_lmd_hist];           // e-side TDC
00128   TH1F *lmdtdcp[n_lmd_hist];           // p-side TDC
00129   TH1F *lmdtdf[n_lmd_hist];            // Time difference
00130   TH1F *lmdtmean[n_lmd_hist];          // (Te+Tp)/2
00131 
00132   TH1F *lmd1d;
00133   TH2F *lmd2d;
00134   TLine *fLine;
00135  
00136   void WriteHistos(TFile *file);             // Write histograms 
00137   void Init(); // called by ctors
00138 
00139   void InitHistos(const Int_t &lmd_adc_bins,const Double_t &lmd_adc_min,const Double_t &lmd_adc_max,const Int_t &lmd_tdc_bins,const Double_t &lmd_tdc_min,const Double_t &lmd_tdc_max); // try to recover histograms from shared file (if still available...)
00140   void OpenSharedFiles(const TString &fmode); // will handle shared memories/files creation
00141 
00142  public:
00143 
00144   TFndLmdMon(const TString &fmode,Int_t lmd_adc_bins=52,Double_t lmd_adc_min = 0.,Double_t lmd_adc_max = 4160.,Int_t lmd_tdc_bins=52,Double_t lmd_tdc_min = 0.,Double_t lmd_tdc_max = 2200.);             // Constructor for Producer
00145   TFndLmdMon();                              // Constructor for Consumer
00146   TFndLmdMon(const TFndLmdMon &lmdmon);      // Copy Constructor
00147   TFndLmdMon(TString *filename);             // Constructor from ROOT filename
00148   ~TFndLmdMon();                             // Destructor
00149 
00150   void Fill();
00151   void Fill(const TClonesArray &LmdHits);
00152   void Update(Bool_t purge=kTRUE);                             // Update shared memories (or shared files)
00153   void ResetHistos();
00154 
00155   void WriteToFile(TString filename=0,Bool_t IsShared = kFALSE);       // Write histograms to file
00156   
00157   TH2F *LmdAllAdcTdc(Int_t idx) { return lmd_all_adc_tdc[idx]; } // LMD ADC vs TDC 
00158   TH1F *LmdAllAdcE(Int_t idx) { return lmd_all_adce[idx]; }      // e-side ADC
00159   TH1F *LmdAllAdcP(Int_t idx) { return lmd_all_adcp[idx]; }      // p-side ADC
00160   TH1F *LmdAllMul(Int_t idx) { return lmd_all_mul[idx]; } // Multiplicity (# wires/ev)
00161 
00162   TH1F *LmdAllAdcEPat(Int_t idx) { return lmd_all_aepat[idx]; } // Wires Patters (ADC-e)
00163   TH1F *LmdAllAdcPPat(Int_t idx) { return lmd_all_appat[idx]; } // Wires Patters (ADC-p)
00164   TH1F *LmdAllTdcEPat(Int_t idx) { return lmd_all_tepat[idx]; } // Wires Patters (TDC-e)
00165   TH1F *LmdAllTdcPPat(Int_t idx) { return lmd_all_tppat[idx]; } // Wires Patters (TDC-p)
00166 
00167   TH1F *LmdAllCrg(Int_t idx) { return lmd_all_crg[idx]; } // ADC (e+p)
00168   TH2F *LmdAllZet(Int_t idx) { return lmd_all_zet[idx]; } // ADC (e-p)/(e+p)
00169   TH2F *LmdAllAdc(Int_t idx) { return lmd_all_adc[idx]; } // ADC (e-side vs p-side)      
00170   TH1F *LmdAllTdcE(Int_t idx) { return lmd_all_tdce[idx]; } // e-side TDC
00171   TH1F *LmdAllTdcP(Int_t idx) { return lmd_all_tdcp[idx]; } // p-side TDC
00172   TH1F *LmdAllTdf(Int_t idx) { return lmd_all_tdf[idx]; } // Time difference
00173   TH1F *LmdAllTmean(Int_t idx) { return lmd_all_tmean[idx]; } // (Te+Tp)/2
00174   TH2F *LmdAllTdc(Int_t idx) { return lmd_all_tdc[idx]; } // TDC (e-side vs p-side)
00175   TH2F *LmdAllMapAdcTdc(Int_t idx) { return lmd_all_mapadctdc[idx]; } // LMD ADC vs TDC existence 
00176 
00177   TH1F *LmdAdcE(Int_t idx) { return lmdadce[idx]; }           // e-side ADC
00178   TH1F *LmdAdcP(Int_t idx) { return lmdadcp[idx]; }           // p-side ADC
00179   TH1F *LmdCrg(Int_t idx) { return lmdcrg[idx]; }           // e+p ADC
00180   TH1F *LmdZet(Int_t idx) { return lmdzet[idx]; }           // Z coordinate
00181   TH1F *LmdTdcE(Int_t idx) { return lmdtdce[idx]; }           // e-side TDC
00182   TH1F *LmdTdcP(Int_t idx) { return lmdtdcp[idx]; }           // p-side TDC
00183   TH1F *LmdTmean(Int_t idx) { return lmdtmean[idx]; }           // Average TDC
00184   TH1F *LmdTdf(Int_t idx) { return lmdtdf[idx]; }           // TDC difference
00185   void TimeCalibration(Int_t,Int_t,Int_t,Float_t scal = 2.2);
00186   void TimeCalibration(Int_t,Int_t,Float_t scal = 2.2);
00187   void TimeCalibration(Float_t scal = 2.2);
00188 
00189   void ChargeCalibration(Int_t,Int_t,Int_t);
00190   void ChargeCalibration(Int_t,Int_t);
00191   void ChargeCalibration();
00192 
00193   void PedestalsEvaluation();
00194 
00195   void WritePedestalsToMsql();  //write pedestals to msql
00196   void WritePedestalsToMsql(Int_t runtime);  //write pedestals to msql
00197 
00198   void WriteTimeToMsql(Int_t runtime,Char_t *ev_type);  //write time calibration constants to msql
00199   void WriteChargeToMsql();  //write charge calibration constants to msql
00200   void WriteChargeToMsql(Int_t runtime);  //write charge calibration constants to msql
00201   void Add(TFndLmdMon *lmdmon); // merge histograms
00202 
00203   ClassDef(TFndLmdMon,1)  // The LMD monitor and calibration class 
00204   };
00205 
00206 #endif // FROOT_TFndLmdMon
00207 
00208 

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