File indexing completed on 2025-12-16 09:28:23
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 bpedWave = false;
0034 bwave = false;
0035 if (ROType == ReadOut::Type::Caen){
0036 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);
0037 hspectraHG.SetDirectory(0);
0038 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);
0039 hspectraLG.SetDirectory(0);
0040 hTriggPrim = TH1D(Form("hTriggerPrimitive%sCellID%d",name.Data(),id),Form("Trigger primitive CellID %d; HG ADC (arb. units); counts ",id),500,0,4000);
0041 hTriggPrim.SetDirectory(0);
0042 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);
0043 hspectraLGHG.SetDirectory(0);
0044 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);
0045 hspectraHGLG.SetDirectory(0);
0046 } else if (ROType == ReadOut::Type::Hgcroc){
0047 hspectraHG = TH1D(Form("hspectra%sADCCellID%d",name.Data(),id),Form("ADC spectrum CellID %d; ADC (arb. units); counts ",id),1124,-100,1024);
0048 hspectraHG.SetDirectory(0);
0049 hspectraTOT = TH1D(Form("hspectra%sTOTCellID%d",name.Data(),id),Form("ToT spectrum CellID %d; TOT (arb. units); counts",id),4197,-100,4097);
0050 hspectraTOT.SetDirectory(0);
0051 hspectraTOA = TH1D(Form("hspectra%sTOACellID%d",name.Data(),id),Form("ToA spectrum CellID %d; TOA (arb. units); counts",id),1124,-100,1024);
0052 hspectraTOA.SetDirectory(0);
0053 hTriggPrim = TH1D(Form("hTriggerPrimitive%sCellID%d",name.Data(),id),Form("Trigger primitive CellID %d; ADC (arb. units); counts ",id),500,0,4000);
0054 hTriggPrim.SetDirectory(0);
0055 hADCTOT = TProfile(Form("hCoorspectra%sTOTADCCellID%d",name.Data(),id),Form("TOT-ADC correlation CellID %d; ADC (arb. units); TOT (arb. units)",id),1124,-100,1024);
0056 hADCTOT.SetDirectory(0);
0057 hTOAADC = TProfile(Form("hCoorspectra%sTOAADCCellID%d",name.Data(),id),Form("ADC-TOA correlation CellID %d; TOA (arb. units); ADC (arb. units)",id),1024,0,1024);
0058 hTOAADC.SetDirectory(0);
0059 }
0060 }
0061 TileSpectra(TString name, int ext, int id, TileCalib* cal, ReadOut::Type type, int deb=0):TObject()
0062 {
0063 TileName = name;
0064 extend = ext;
0065 cellID = id;
0066 calib = cal;
0067 debug = deb;
0068 ROType = type;
0069 bpedHG = false;
0070 bpedLG = false;
0071 bmipHG = false;
0072 bmipLG = false;
0073 bcorrHGLG = false;
0074 bcorrLGHG = false;
0075 bpedWave = false;
0076 bwave = false;
0077
0078 if (extend == 1){
0079 if (type == ReadOut::Type::Caen){
0080 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);
0081 hspectraHG.SetDirectory(0);
0082 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);
0083 hspectraLG.SetDirectory(0);
0084 hcombined = TH1D(Form("hspectra%sCombCellID%d",name.Data(),id),Form("Energy CellID %d; E (mip eq./tile); counts",id),8000,-5,1000);
0085 hcombined.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 (mip eq./tile)",id),800,0,800);
0087 hspectraLGHG.SetDirectory(0);
0088 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);
0089 hspectraHGLG.SetDirectory(0);
0090 }
0091
0092 } else if (extend == 2){
0093 if (type == ReadOut::Type::Caen){
0094 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);
0095 hspectraHG.SetDirectory(0);
0096 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);
0097 hspectraLG.SetDirectory(0);
0098 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);
0099 hspectraLGHG.SetDirectory(0);
0100 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 );
0101 hcorr.SetDirectory(0);
0102 } else if (type == ReadOut::Type::Hgcroc){
0103 hspectraHG = TH1D(Form("hspectra%sADCCellID%d",name.Data(),id),Form("ADC spectrumCellID %d; ADC (arb. units); counts ",id),1124,-100,1024);
0104 hspectraHG.SetDirectory(0);
0105 hspectraTOA = TH1D(Form("hspectra%sTOACellID%d",name.Data(),id),Form("TOA spectrumCellID %d; TOA (arb. units); counts",id),1024,0,1024);
0106 hspectraTOA.SetDirectory(0);
0107 hspectraTOT = TH1D(Form("hspectra%sTOTCellID%d",name.Data(),id),Form("TOT spectrumCellID %d; TOT (arb. units); counts",id),4096,0,4096);
0108 hspectraTOT.SetDirectory(0);
0109 hADCTOT = TProfile(Form("h%sTOTADCCellID%d",name.Data(),id),Form("TOT-ADC correlation CellID %d; ADC (arb. units); TOT (arb. units)",id),1124,-100,1024);
0110 hADCTOT.SetDirectory(0);
0111 hcorr = TH2D(Form("wafeform%sCellID%d",name.Data(),id),Form("2D wafeform CellID %d; sample ; ADC (arb. units)",id),20,0,20, 1034, -10, 1024);
0112 hcorr.SetDirectory(0);
0113 }
0114
0115 } else if (extend == 3){
0116 if (type == ReadOut::Type::Hgcroc){
0117 hspectraHG = TH1D(Form("hspectra%sADCCellID%d",name.Data(),id),Form("ADC spectrumCellID %d; ADC (arb. units); counts ",id),1124,-100,1024);
0118 hspectraHG.SetDirectory(0);
0119 hspectraTOA = TH1D(Form("hspectra%sTOACellID%d",name.Data(),id),Form("TOA spectrumCellID %d; TOA (arb. units); counts",id),1024,0,1024);
0120 hspectraTOA.SetDirectory(0);
0121 hspectraTOT = TH1D(Form("hspectra%sTOTCellID%d",name.Data(),id),Form("TOT spectrumCellID %d; TOT (arb. units); counts",id),4096,0,4096);
0122 hWaveForm = TProfile(Form("wafeform1D%sCellID%d",name.Data(),id),Form("1D wafeform CellID %d; t (ps) ; ADC (arb. units)",id),525,-25000,500000);
0123 hWaveForm.SetDirectory(0);
0124 hcorr = TH2D(Form("wafeform%sCellID%d",name.Data(),id),Form("2D wafeform CellID %d; t (ps) ; ADC (arb. units)",id),525,-25000,500000, 1034, -10, 1024);
0125 hcorr.SetDirectory(0);
0126 hcorrTOAADC = TH2D(Form("h2DADCTOACellID%sCellID%d",name.Data(),id),Form("2D ADC vs TOA CellID %d; TOA (arb. units); ADC (arb. units)",id), 1024/4,0,1024,1124,-100,1024);
0127 hcorrTOAADC.SetDirectory(0);
0128 hcorrTOASample = TH2D(Form("h2DTOASampleCellID%sCellID%d",name.Data(),id),Form("2D Sample vs TOA CellID %d; TOA (arb. units); #sample",id), 1024/4,0,1024,20,0,20);
0129 hcorrTOASample.SetDirectory(0);
0130 hTOAADC = TProfile(Form("h%sADCTOTCellID%d",name.Data(),id),Form("ADC-TOA correlation CellID %d; TOA (arb. units); ADC (arb. units)",id),1024,0,1024);
0131 hTOAADC.SetDirectory(0);
0132 }
0133
0134 } else if (extend == 4){
0135 if (type == ReadOut::Type::Hgcroc){
0136 hspectraHG = TH1D(Form("hspectra%sADCCellID%d",name.Data(),id),Form("ADC spectrumCellID %d; ADC (arb. units) 1st sample; counts ",id),1124,-100,1024);
0137 hspectraHG.SetDirectory(0);
0138 hspectraLG = TH1D(Form("hspectra%sADCAllCellID%d",name.Data(),id),Form("ADC spectrumCellID %d; ADC (arb. units) all samples; counts ",id),1124,-100,1024);
0139 hspectraLG.SetDirectory(0);
0140 hcorr = TH2D(Form("wafeform%sCellID%d",name.Data(),id),Form("2D wafeform CellID %d; sample ; ADC (arb. units)",id),20,0,20, 1034, -10, 1024);
0141 hcorr.SetDirectory(0);
0142 }
0143 }
0144 }
0145 ~TileSpectra(){}
0146
0147 bool FillCAEN(double, double);
0148 bool FillSpectraCAEN(double, double);
0149 bool FillExtCAEN(double, double, double, double);
0150 bool FillCorrCAEN(double, double);
0151
0152 bool FillHGCROC(double, double, double);
0153 bool FillSpectraHGCROC(double, double, double);
0154 bool FillExtHGCROC(double, double, double, int);
0155 bool FillExtHGCROCPed(std::vector<int>, double);
0156 bool FillCorrHGCROC(double, double, double);
0157
0158 bool FillTrigger(double);
0159 bool FillWaveform(std::vector<int>,double);
0160 bool FillWaveformVsTime(std::vector<int> , double, double, int );
0161
0162 bool FitNoise(double*, int, bool);
0163 void FitFixedNoise();
0164 void InitializeNoiseFitsFromCalib();
0165 bool FitMipHG(double*, double*, int, int, bool, double, double );
0166 bool FitMipLG(double*, double*, int, int, bool, double );
0167 bool FitCorrCAEN(int);
0168 bool FitLGHGCorr(int , bool);
0169 bool FitPedConstWave(int);
0170 bool FitNoiseWithBG(double*);
0171 short DetermineBadChannel();
0172
0173 int GetCellID();
0174 void SetBadChannelInCalib(short);
0175
0176 double GetMaxXInRangeLG(double, double);
0177 double GetMaxXInRangeHG(double, double);
0178
0179 ReadOut::Type GetROType() {return ROType;};
0180 TH1D* GetHG();
0181 TH1D* GetLG();
0182 TH1D* GetComb();
0183 TH1D* GetTriggPrim();
0184 TProfile* GetLGHGcorr();
0185 TProfile* GetHGLGcorr();
0186 TH2D* GetCorr();
0187
0188 TH1D* GetTOT();
0189 TH1D* GetTOA();
0190 TProfile* GetWave1D();
0191 TProfile* GetTOAADC();
0192 TProfile* GetADCTOT();
0193 TH2D* GetCorrTOAADC();
0194 TH2D* GetCorrTOASample();
0195
0196 TF1* GetBackModel(int);
0197 TF1* GetSignalModel(int);
0198 TF1* GetCorrModel(int);
0199 TileCalib* GetCalib();
0200
0201 void Write(bool);
0202 void WriteExt(bool);
0203
0204 protected:
0205 TString TileName = "";
0206 ReadOut::Type ROType;
0207 int cellID = -1;
0208 TileCalib* calib;
0209 int debug = 0;
0210 int extend = 0;
0211 bool resetAxisLabels = false;
0212 bool bpedHG = false;
0213 bool bpedLG = false;
0214 bool bmipHG = false;
0215 bool bmipLG = false;
0216 bool bcorrHGLG = false;
0217 bool bcorrLGHG = false;
0218 bool bpedWave = false;
0219 bool bwave = false;
0220 bool bTriggPrim = false;
0221 TF1 BackgroundLG;
0222 TF1 BackgroundHG;
0223 TF1 SignalLG;
0224 TF1 SignalHG;
0225 TF1 HGLGcorr;
0226 TF1 LGHGcorr;
0227 TF1 pedWave;
0228 TF1 wave;
0229 TH1D hspectraHG;
0230 TH1D hspectraLG;
0231 TH1D hspectraTOT;
0232 TH1D hspectraTOA;
0233 TH1D hTriggPrim;
0234 TH1D hcombined;
0235 TProfile hspectraLGHG;
0236 TProfile hspectraHGLG;
0237 TProfile hWaveForm;
0238 TProfile hADCTOT;
0239 TProfile hTOAADC;
0240 TH2D hcorr;
0241 TH2D hcorrTOAADC;
0242 TH2D hcorrTOASample;
0243 static double langaufun(double *, double *);
0244 static int langaupro(double *, double &, double &);
0245
0246 ClassDef(TileSpectra,3);
0247 };
0248
0249
0250 #endif