Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-07-02 07:54:48

0001 #ifndef TILESPECTRA_H
0002 #define TILESPECTRA_H
0003 
0004 #include "TObject.h"
0005 #include "TString.h"
0006 #include "TH1D.h"
0007 #include "TH2D.h"
0008 #include "TProfile.h"
0009 #include "TF1.h"
0010 #include "TPad.h" 
0011 #include "TCanvas.h"
0012 #include "TLegend.h"
0013 #include "Calib.h"
0014 #include "Tile.h"
0015 
0016 class TileSpectra: public TObject{
0017 
0018  public:
0019   TileSpectra():TObject(){}
0020   TileSpectra(TString name, int id, TileCalib* cal, ReadOut::Type type, int deb=0):TObject()
0021   {
0022     TileName      = name;
0023     ROType        = type;
0024     cellID        = id;
0025     calib         = cal;
0026     debug         = deb;
0027     bpedHG        = false;
0028     bpedLG        = false;
0029     bmipHG        = false;
0030     bmipLG        = false;
0031     bcorrHGLG     = false;
0032     bcorrLGHG     = false;
0033     if (ROType == ReadOut::Type::Caen){
0034       hspectraHG    = TH1D(Form("hspectra%sHGCellID%d",name.Data(),id),Form("ADC spectrum High Gain CellID %d; HG ADC (arb. units); counts ",id),4200,-200,4000);
0035       hspectraHG.SetDirectory(0);
0036       hspectraLG    = TH1D(Form("hspectra%sLGCellID%d",name.Data(),id),Form("ADC spectrum Low  Gain CellID %d; LG ADC (arb. units); counts",id),4200,-200,4000);
0037       hspectraLG.SetDirectory(0);
0038       hTriggPrim    = TH1D(Form("hTriggerPrimitive%sCellID%d",name.Data(),id),Form("Trigger primitive CellID %d; HG ADC (arb. units); counts ",id),500,0,4000);
0039       hTriggPrim.SetDirectory(0);
0040       hspectraLGHG  = TProfile(Form("hCoorspectra%sLGHGCellID%d",name.Data(),id),Form("ADC Low  Gain/High Gain correlation CellID %d; LG ADC (arb. units); HG ADC (arb. units)",id),800,0,800);
0041       hspectraLGHG.SetDirectory(0); 
0042       hspectraHGLG  = TProfile(Form("hCoorspectra%sHGLGCellID%d",name.Data(),id),Form("ADC High  Gain/Low Gain correlation CellID %d; HG ADC (arb. units); LG ADC (arb. units)",id),4100,-100,4000);
0043       hspectraHGLG.SetDirectory(0);
0044     } else if (ROType == ReadOut::Type::Hgcroc){
0045       hspectraHG    = TH1D(Form("hspectra%sADCCellID%d",name.Data(),id),Form("ADC spectrum CellID %d; ADC (arb. units); counts ",id),1125,-100,1025);
0046       hspectraHG.SetDirectory(0);      
0047       hspectraLG    = TH1D(Form("hspectra%sTotCellID%d",name.Data(),id),Form("ToT spectrum CellID %d; TOT (arb. units); counts",id),4197,-100,4097);
0048       hspectraLG.SetDirectory(0);
0049       hTriggPrim    = TH1D(Form("hTriggerPrimitive%sCellID%d",name.Data(),id),Form("Trigger primitive CellID %d; ADC (arb. units); counts ",id),500,0,4000);
0050       hTriggPrim.SetDirectory(0);
0051       hspectraLGHG  = TProfile(Form("hCoorspectra%sTOTADCCellID%d",name.Data(),id),Form("TOT-ADC correlation CellID %d; TOT (arb. units); ADC (arb. units)",id),800,0,800);
0052       hspectraHGLG  = TProfile(Form("hCoorspectra%sADCTOTCellID%d",name.Data(),id),Form("ADC-TOT correlation CellID %d; ADC (arb. units); TOT (arb. units)",id),4097,0,4097);
0053     }
0054   }
0055   TileSpectra(TString name, int ext, int id, TileCalib* cal, ReadOut::Type type, int deb=0):TObject()
0056   {
0057     TileName      = name;
0058     extend        = ext;
0059     cellID        = id;
0060     calib         = cal;
0061     debug         = deb;
0062     ROType        = type;
0063     bpedHG        = false;
0064     bpedLG        = false;
0065     bmipHG        = false;
0066     bmipLG        = false;
0067     bcorrHGLG     = false;
0068     bcorrLGHG     = false;
0069     if (extend == 1){
0070       hspectraHG    = TH1D(Form("hspectra%sHGCellID%d",name.Data(),id),Form("ADC spectrum High Gain CellID %d; Corr HG ADC (arb. units); counts ",id),4200,-200,4000);
0071       hspectraHG.SetDirectory(0);
0072       hspectraLG    = TH1D(Form("hspectra%sLGCellID%d",name.Data(),id),Form("ADC spectrum Low  Gain CellID %d; Corr LG ADC (arb. units); counts",id),4200,-200,4000);
0073       hspectraLG.SetDirectory(0);
0074       hcombined     = TH1D(Form("hspectra%sCombCellID%d",name.Data(),id),Form("Energy CellID %d; E (mip eq./tile); counts",id),8000,-5,1000);
0075       hcombined.SetDirectory(0);
0076       hspectraLGHG  = TProfile(Form("hCoorspectra%sLGHGCellID%d",name.Data(),id),Form("ADC Low  Gain/High Gain correlation CellID %d; Corr LG  (arb. units); HG E (mip eq./tile)",id),800,0,800);
0077       hspectraLGHG.SetDirectory(0);
0078       hspectraHGLG  = TProfile(Form("hCoorspectra%sHGLGCellID%d",name.Data(),id),Form("ADC Low Gain converted CellID %d; LG (arb. units); LG ( HG eq.)- HG",id),700,-100,600);
0079       hspectraHGLG.SetDirectory(0);
0080     } else if (extend == 2){
0081       if (type == ReadOut::Type::Caen){
0082         hspectraHG    = TH1D(Form("hspectra%sHGCellID%d",name.Data(),id),Form("ADC spectrum High Gain CellID %d; Corr HG ADC (arb. units); counts ",id),1050,-200,4000);
0083         hspectraHG.SetDirectory(0);
0084         hspectraLG    = TH1D(Form("hspectra%sLGCellID%d",name.Data(),id),Form("ADC spectrum Low  Gain CellID %d; Corr LG ADC (arb. units); counts",id),1050,-200,4000);
0085         hspectraLG.SetDirectory(0);
0086         hspectraLGHG  = TProfile(Form("hCoorspectra%sLGHGCellID%d",name.Data(),id),Form("ADC Low  Gain/High Gain correlation CellID %d; Corr LG  (arb. units); HG E (arb. units)",id),400,0,400);
0087         hspectraLGHG.SetDirectory(0);
0088         hcorr         = TH2D(Form("hCoor2D%sLGHGCellID%d",name.Data(),id),Form("2D ADC Low  Gain/High Gain correlation CellID %d; Corr LG  (arb. units); HG E (arb. units)",id),400,0,400, 525, -200, 4000 );
0089         hcorr.SetDirectory(0);
0090       } else if (type == ReadOut::Type::Hgcroc){
0091         hspectraHG    = TH1D(Form("hspectra%sADCCellID%d",name.Data(),id),Form("ADC spectrumCellID %d; ADC (arb. units); counts ",id),1024,0,1024);
0092         hspectraHG.SetDirectory(0);
0093         hspectraLG    = TH1D(Form("hspectra%sTOTCellID%d",name.Data(),id),Form("TOT spectrumCellID %d; TOT ADC (arb. units); counts",id),4096,0,4096);
0094         hspectraLG.SetDirectory(0);
0095         hspectraLGHG  = TProfile(Form("hCoorspectra%sTOTADCGCellID%d",name.Data(),id),Form("TOT-ADC correlation CellID %d; TOT  (arb. units); ADC (arb. units)",id),400,0,400);
0096         hspectraLGHG.SetDirectory(0);
0097         hcorr         = TH2D(Form("wafeform%sCellID%d",name.Data(),id),Form("2D wafeform CellID %d; sample ; ADC (arb. units)",id),20,0,20, 1024, 0, 1024);
0098         hcorr.SetDirectory(0);
0099       }
0100     }
0101   }
0102   ~TileSpectra(){}
0103 
0104   bool Fill(double, double);
0105   bool FillSpectra(double, double);
0106   bool FillExt(double, double, double, double);
0107   bool FillCorr(double, double);
0108   bool FillTrigger(double);
0109   bool FillWaveform(std::vector<int>);
0110   
0111   bool FitNoise(double*, int, bool);
0112   void FitFixedNoise();
0113   void InitializeNoiseFitsFromCalib();
0114   bool FitMipHG(double*, double*, int, int, bool, double, double );
0115   bool FitMipLG(double*, double*, int, int, bool, double );
0116   bool FitCorr(int);
0117   bool FitLGHGCorr(int , bool);
0118   bool FitPedConstWage(int);
0119   bool FitNoiseWithBG(double*);
0120   short DetermineBadChannel();
0121 
0122   int GetCellID();
0123   void SetBadChannelInCalib(short);
0124   
0125   double GetMaxXInRangeLG(double, double);
0126   double GetMaxXInRangeHG(double, double);
0127 
0128   ReadOut::Type GetROType() {return ROType;};  
0129   TH1D* GetHG();
0130   TH1D* GetLG();
0131   TH1D* GetComb();
0132   TH1D* GetTriggPrim();
0133   TProfile* GetLGHGcorr();
0134   TProfile* GetHGLGcorr();
0135   TH2D* GetCorr();
0136   
0137   TF1* GetBackModel(int);
0138   TF1* GetSignalModel(int);
0139   TF1* GetCorrModel(int);
0140   TileCalib* GetCalib();
0141   
0142   void Write(bool);
0143   void WriteExt(bool);
0144   
0145  protected:
0146   TString TileName;
0147   ReadOut::Type ROType;
0148   int cellID;
0149   TileCalib* calib;
0150   int debug;
0151   int extend = 0;
0152   bool bpedHG;
0153   bool bpedLG;
0154   bool bmipHG;
0155   bool bmipLG;
0156   bool bcorrHGLG;
0157   bool bcorrLGHG;
0158   bool bTriggPrim;
0159   TF1 BackgroundLG;
0160   TF1 BackgroundHG;
0161   TF1 SignalLG;
0162   TF1 SignalHG;
0163   TF1 HGLGcorr;
0164   TF1 LGHGcorr;
0165   TH1D hspectraHG;
0166   TH1D hspectraLG;
0167   TH1D hTriggPrim;
0168   TH1D hcombined;
0169   TProfile hspectraLGHG;
0170   TProfile hspectraHGLG;
0171   TH2D hcorr;
0172   static double langaufun(double */*x*/, double */*par*/);
0173   static int langaupro(double */*params*/, double &/*maxx*/, double &/*FWHM*/);
0174 
0175   ClassDef(TileSpectra,2);
0176 };
0177 
0178 
0179 #endif