File indexing completed on 2026-05-16 07:40:29
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,500);
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),1128/8,-100,1028);
0110 hADCTOT.SetDirectory(0);
0111 hcorr = TH2D(Form("waveform%sCellID%d",name.Data(),id),Form("2D waveform CellID %d; sample ; ADC (arb. units)",id),20,0,20, 1034, -10, 1024);
0112 hcorr.SetDirectory(0);
0113 hcorrADCTOT = TH2D(Form("hCorr2DTOTADC%sCellID%d",name.Data(),id),Form("2D TOT-ADC CellID %d; ADC (arb. units); TOT (arb. units)",id),1128/8,-100,1028,4096/8,0,4096);
0114 hcorrADCTOT.SetDirectory(0);
0115 }
0116
0117 } else if (extend == 3){
0118 if (type == ReadOut::Type::Hgcroc){
0119 hspectraHG = TH1D(Form("hspectra%sADCCellID%d",name.Data(),id),Form("ADC spectrumCellID %d; ADC (arb. units); counts ",id),1124,-100,1024);
0120 hspectraHG.SetDirectory(0);
0121 hspectraTOA = TH1D(Form("hspectra%sTOACellID%d",name.Data(),id),Form("TOA spectrumCellID %d; TOA (arb. units); counts",id),1024,0,1024);
0122 hspectraTOA.SetDirectory(0);
0123 hspectraTOT = TH1D(Form("hspectra%sTOTCellID%d",name.Data(),id),Form("TOT spectrumCellID %d; TOT (arb. units); counts",id),4096,0,4096);
0124 hWaveForm = TProfile(Form("waveform1D%sCellID%d",name.Data(),id),Form("1D waveform CellID %d; t (ns) ; ADC (arb. units)",id),550,-50,500);
0125 hWaveForm.SetDirectory(0);
0126 hcorr = TH2D(Form("waveform%sCellID%d",name.Data(),id),Form("2D waveform CellID %d; t (ns) ; ADC (arb. units)",id),550,-50,500, 1034, -10, 1024);
0127 hcorr.SetDirectory(0);
0128 hcorrTOAADC = TH2D(Form("h2DADCTOA%sCellID%d",name.Data(),id),Form("2D ADC vs TOA CellID %d; TOA (arb. units); ADC (arb. units)",id), 1024/8,0,1024,1124,-100,1024);
0129 hcorrTOAADC.SetDirectory(0);
0130 hcorrTOASample = TH2D(Form("h2DTOASample%sCellID%d",name.Data(),id),Form("2D Sample vs TOA CellID %d; TOA (arb. units); #sample",id), 1024/8,0,1024,20,0,20);
0131 hcorrTOASample.SetDirectory(0);
0132 hTOAADC = TProfile(Form("h%sADCTOACellID%d",name.Data(),id),Form("ADC-TOA correlation CellID %d; TOA (arb. units); ADC (arb. units)",id),1024/8,0,1024, "");
0133 hTOAADC.SetDirectory(0);
0134 }
0135
0136 } else if (extend == 4){
0137 if (type == ReadOut::Type::Hgcroc){
0138 hspectraHG = TH1D(Form("hspectra%sADCCellID%d",name.Data(),id),Form("ADC spectrumCellID %d; ADC (arb. units) 1st sample; counts ",id),1124,-100,1024);
0139 hspectraHG.SetDirectory(0);
0140 hspectraLG = TH1D(Form("hspectra%sADCAllCellID%d",name.Data(),id),Form("ADC spectrumCellID %d; ADC (arb. units) all samples; counts ",id),1124,-100,1024);
0141 hspectraLG.SetDirectory(0);
0142 hcorr = TH2D(Form("waveform%sCellID%d",name.Data(),id),Form("2D waveform CellID %d; sample ; ADC (arb. units)",id),20,0,20, 1034, -10, 1024);
0143 hcorr.SetDirectory(0);
0144 }
0145
0146 } else if (extend == 5){
0147 if (type == ReadOut::Type::Hgcroc){
0148 hWaveForm = TProfile(Form("waveform1D%sCellID%d",name.Data(),id),Form("1D waveform CellID %d; t (ns) ; ADC (arb. units)",id),550,-50,500);
0149 hWaveForm.SetDirectory(0);
0150 hcorr = TH2D(Form("waveform%sCellID%d",name.Data(),id),Form("2D waveform CellID %d; t (ns) ; ADC (arb. units)",id),550,-50,500, 1124/4, -100, 1024);
0151 hcorr.SetDirectory(0);
0152 hcorrTOAADC = TH2D(Form("h2DADCLinTOA%sCellID%d",name.Data(),id),Form("2D ADC vs TOA CellID %d; TOA (arb. units); ADC (arb. units)",id), 1024/2,-6*1024,-2*1024,1124/4,-100,1024);
0153 hcorrTOAADC.SetDirectory(0);
0154 hTOAADC = TProfile(Form("h%sADCLinTOACellID%d",name.Data(),id),Form("ADC-TOA correlation CellID %d; TOA (arb. units); ADC (arb. units)",id),1024/2,-6*1024,-2*1024, "");
0155 hTOAADC.SetDirectory(0);
0156 }
0157 } else if (extend == 6){
0158 if (type == ReadOut::Type::Hgcroc){
0159 hWaveForm = TProfile(Form("waveform1D%sCellID%d",name.Data(),id),Form("1D waveform CellID %d; t (ns) ; ADC (arb. units)",id),550,-50,500);
0160 hWaveForm.SetDirectory(0);
0161 hcorr = TH2D(Form("waveform%sCellID%d",name.Data(),id),Form("2D waveform CellID %d; t (ns) ; ADC (arb. units)",id),550,-50,500, 1124/4, -100, 1024);
0162 hcorr.SetDirectory(0);
0163 }
0164 } else if (extend == 7){
0165 if (type == ReadOut::Type::Hgcroc){
0166 hWaveForm = TProfile(Form("waveform1D%sCellID%d",name.Data(),id),Form("1D waveform CellID %d; sample ; ADC (arb. units)",id),20,0,20);
0167 hWaveForm.SetDirectory(0);
0168 hcorr = TH2D(Form("waveform%sCellID%d",name.Data(),id),Form("2D waveform CellID %d; sample ; ADC (arb. units)",id),20,0,20, 1124/4, -100, 1024);
0169 hcorr.SetDirectory(0);
0170 }
0171
0172 } else if(extend == 8){
0173 hWaveForm = TProfile(Form("waveform1D%sCellID%d",name.Data(),id),Form("1D waveform CellID %d; t (ns) ; ADC (arb. units)",id),550,-50,500);
0174 hWaveForm.SetDirectory(0);
0175 hcorr = TH2D(Form("waveform%sCellID%d",name.Data(),id),Form("2D f CellID %d; t (ns) ; ADC (arb. units)",id),550,-50,500, 1034, -10, 1024);
0176 hcorr.SetDirectory(0);
0177 hProfileTOT = TProfile( Form("TOT%sCellID%d",name.Data(),id),Form("TOT CellID %d; t(ns); TOT (arb.units)",id),4400,-50,500,-10,4300,"");
0178 hProfileTOT.SetDirectory(0);
0179 hProfileTOA = TProfile( Form("TOA%sCellID%d",name.Data(),id),Form("TOA CellID %d; t(ns); TOA (arb.units)",id),1100,-50,500,-10,1090,"");
0180 hProfileTOA.SetDirectory(0);
0181 }
0182 }
0183 ~TileSpectra(){}
0184
0185 bool FillCAEN(double, double);
0186 bool FillSpectraCAEN(double, double);
0187 bool FillExtCAEN(double, double, double, double);
0188 bool FillCorrCAEN(double, double);
0189
0190 bool FillHGCROC(double, double, double);
0191 bool FillSpectraHGCROC(double, double, double);
0192 bool FillExtHGCROC(double, double, double, int, int);
0193 bool FillExtHGCROCPed(std::vector<int>, double);
0194 bool FillCorrHGCROC(double, double, double);
0195
0196 bool FillTrigger(double);
0197 bool FillWaveform(std::vector<int>,double);
0198 bool FillWaveformVsTime(std::vector<int> , double, double, int );
0199 bool FillMaxVsTime(double , double, int, int );
0200 bool FillWaveformVsTimeParser(std::vector<int>,double);
0201 bool FillTOTProfile(std::vector<int>);
0202 bool FillTOAProfile(std::vector<int>);
0203
0204 bool FitNoise(double*, int, bool);
0205 void FitFixedNoise();
0206 void InitializeNoiseFitsFromCalib();
0207 bool FitMipHG(double*, double*, int, int, bool, double, double );
0208 bool FitMipLG(double*, double*, int, int, bool, double );
0209 bool FitCorrCAEN(int);
0210 bool FitLGHGCorr(int , bool);
0211 bool FitPedConstWave(int);
0212 bool FitNoiseWithBG(double*);
0213 short DetermineBadChannel();
0214
0215 int GetCellID();
0216 void SetBadChannelInCalib(short);
0217
0218 double GetMaxXInRangeLG(double, double);
0219 double GetMaxXInRangeHG(double, double);
0220
0221 ReadOut::Type GetROType() {return ROType;};
0222 TH1D* GetHG();
0223 TH1D* GetLG();
0224 TH1D* GetComb();
0225 TH1D* GetTriggPrim();
0226 TProfile* GetLGHGcorr();
0227 TProfile* GetHGLGcorr();
0228 TH2D* GetCorr();
0229
0230 TH1D* GetTOT();
0231 TH1D* GetTOA();
0232 TProfile* GetWave1D();
0233 TProfile* GetTOAADC();
0234 TProfile* GetADCTOT();
0235 TH2D* GetCorrTOAADC();
0236 TH2D* GetCorrTOASample();
0237 TH2D* GetCorrADCTOT();
0238 TProfile* GetTOTProfile();
0239 TProfile* GetTOAProfile();
0240
0241 TF1* GetBackModel(int);
0242 TF1* GetSignalModel(int);
0243 TF1* GetCorrModel(int);
0244 TileCalib* GetCalib();
0245
0246 void Write(bool);
0247 void WriteExt(bool);
0248
0249 protected:
0250 TString TileName = "";
0251 ReadOut::Type ROType;
0252 int cellID = -1;
0253 TileCalib* calib;
0254 int debug = 0;
0255 int extend = 0;
0256 bool resetAxisLabels = false;
0257 bool bpedHG = false;
0258 bool bpedLG = false;
0259 bool bmipHG = false;
0260 bool bmipLG = false;
0261 bool bcorrHGLG = false;
0262 bool bcorrLGHG = false;
0263 bool bpedWave = false;
0264 bool bwave = false;
0265 bool bTriggPrim = false;
0266 TF1 BackgroundLG;
0267 TF1 BackgroundHG;
0268 TF1 SignalLG;
0269 TF1 SignalHG;
0270 TF1 HGLGcorr;
0271 TF1 LGHGcorr;
0272 TF1 pedWave;
0273 TF1 wave;
0274 TH1D hspectraHG;
0275 TH1D hspectraLG;
0276 TH1D hspectraTOT;
0277 TH1D hspectraTOA;
0278 TH1D hTriggPrim;
0279 TH1D hcombined;
0280 TProfile hspectraLGHG;
0281 TProfile hspectraHGLG;
0282 TProfile hWaveForm;
0283 TProfile hADCTOT;
0284 TProfile hTOAADC;
0285 TH2D hcorr;
0286 TH2D hcorrTOAADC;
0287 TH2D hcorrTOASample;
0288 TH2D hcorrADCTOT;
0289 TProfile hProfileTOT;
0290 TProfile hProfileTOA;
0291 static double langaufun(double *, double *);
0292 static int langaupro(double *, double &, double &);
0293
0294 ClassDef(TileSpectra,3);
0295 };
0296
0297
0298 #endif