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 *, double *);
0173 static int langaupro(double *, double &, double &);
0174
0175 ClassDef(TileSpectra,2);
0176 };
0177
0178
0179 #endif