File indexing completed on 2026-09-13 08:27:06
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 integ = 1, 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 integSample = integ;
0036 if (ROType == ReadOut::Type::Caen){
0037 hspectraHG = TH1D(Form("hspectra%sHGCellID%d",name.Data(),id),Form("ADC spectrum High Gain CellID %d; HG ADC (arb. units); counts ",id),
0038 4200,-200,4000);
0039 hspectraHG.SetDirectory(0);
0040 hspectraLG = TH1D(Form("hspectra%sLGCellID%d",name.Data(),id),Form("ADC spectrum Low Gain CellID %d; LG ADC (arb. units); counts",id),
0041 4200,-200,4000);
0042 hspectraLG.SetDirectory(0);
0043 hTriggPrim = TH1D(Form("hTriggerPrimitive%sCellID%d",name.Data(),id),Form("Trigger primitive CellID %d; HG ADC (arb. units); counts ",id),
0044 500,0,4000);
0045 hTriggPrim.SetDirectory(0);
0046 hspectraLGHG = TProfile(Form("hCoorspectra%sLGHGCellID%d",name.Data(),id),
0047 Form("ADC Low Gain/High Gain correlation CellID %d; LG ADC (arb. units); HG ADC (arb. units)",id),
0048 800,0,800);
0049 hspectraLGHG.SetDirectory(0);
0050 hspectraHGLG = TProfile(Form("hCoorspectra%sHGLGCellID%d",name.Data(),id),
0051 Form("ADC High Gain/Low Gain correlation CellID %d; HG ADC (arb. units); LG ADC (arb. units)",id),
0052 4100,-100,4000);
0053 hspectraHGLG.SetDirectory(0);
0054 } else if (ROType == ReadOut::Type::Hgcroc){
0055 hspectraHG = TH1D(Form("hspectra%sADCCellID%d",name.Data(),id),Form("ADC spectrum CellID %d; ADC (arb. units); counts ",id),
0056 1024*integ+100,-100,1024*integ);
0057 hspectraHG.SetDirectory(0);
0058 hspectraTOT = TH1D(Form("hspectra%sTOTCellID%d",name.Data(),id),Form("ToT spectrum CellID %d; TOT (arb. units); counts",id),
0059 4197,-100,4097);
0060 hspectraTOT.SetDirectory(0);
0061 hspectraTOA = TH1D(Form("hspectra%sTOACellID%d",name.Data(),id),Form("ToA spectrum CellID %d; TOA (arb. units); counts",id),
0062 1124,-100,1024);
0063 hspectraTOA.SetDirectory(0);
0064 hTriggPrim = TH1D(Form("hTriggerPrimitive%sCellID%d",name.Data(),id),Form("Trigger primitive CellID %d; ADC (arb. units); counts ",id),
0065 500,0,500);
0066 hTriggPrim.SetDirectory(0);
0067 hADCTOT = TProfile(Form("hCoorspectra%sTOTADCCellID%d",name.Data(),id),Form("TOT-ADC correlation CellID %d; ADC (arb. units); TOT (arb. units)",id),
0068 1024+100,-100,1024*integ);
0069 hADCTOT.SetDirectory(0);
0070 hTOAADC = TProfile(Form("hCoorspectra%sTOAADCCellID%d",name.Data(),id),Form("ADC-TOA correlation CellID %d; TOA (arb. units); ADC (arb. units)",id),
0071 1024,0,1024);
0072 hTOAADC.SetDirectory(0);
0073 }
0074 }
0075 TileSpectra(TString name, int ext, int id, TileCalib* cal, ReadOut::Type type, int integ = 1, int deb=0):TObject()
0076 {
0077 TileName = name;
0078 extend = ext;
0079 cellID = id;
0080 calib = cal;
0081 debug = deb;
0082 ROType = type;
0083 bpedHG = false;
0084 bpedLG = false;
0085 bmipHG = false;
0086 bmipLG = false;
0087 bcorrHGLG = false;
0088 bcorrLGHG = false;
0089 bpedWave = false;
0090 bwave = false;
0091 integSample = integ;
0092
0093 if (extend == 1){
0094 if (type == ReadOut::Type::Caen){
0095 hspectraHG = TH1D(Form("hspectra%sHGCellID%d",name.Data(),id),
0096 Form("ADC spectrum High Gain CellID %d; Corr HG ADC (arb. units); counts ",id),
0097 4200,-200,4000);
0098 hspectraHG.SetDirectory(0);
0099 hspectraLG = TH1D(Form("hspectra%sLGCellID%d",name.Data(),id),
0100 Form("ADC spectrum Low Gain CellID %d; Corr LG ADC (arb. units); counts",id),
0101 4200,-200,4000);
0102 hspectraLG.SetDirectory(0);
0103 hcombined = TH1D(Form("hspectra%sCombCellID%d",name.Data(),id),
0104 Form("Energy CellID %d; E (mip eq./tile); counts",id),
0105 8000,-5,1000);
0106 hcombined.SetDirectory(0);
0107 hspectraLGHG = TProfile(Form("hCoorspectra%sLGHGCellID%d",name.Data(),id),
0108 Form("ADC Low Gain/High Gain correlation CellID %d; Corr LG (arb. units); HG E (mip eq./tile)",id),
0109 800,0,800);
0110 hspectraLGHG.SetDirectory(0);
0111 hspectraHGLG = TProfile(Form("hCoorspectra%sHGLGCellID%d",name.Data(),id),
0112 Form("ADC Low Gain converted CellID %d; LG (arb. units); LG ( HG eq.)- HG",id),
0113 700,-100,600);
0114 hspectraHGLG.SetDirectory(0);
0115 }
0116
0117 } else if (extend == 2){
0118 if (type == ReadOut::Type::Caen){
0119 hspectraHG = TH1D(Form("hspectra%sHGCellID%d",name.Data(),id),
0120 Form("ADC spectrum High Gain CellID %d; Corr HG ADC (arb. units); counts ",id),
0121 1050,-200,4000);
0122 hspectraHG.SetDirectory(0);
0123 hspectraLG = TH1D(Form("hspectra%sLGCellID%d",name.Data(),id),
0124 Form("ADC spectrum Low Gain CellID %d; Corr LG ADC (arb. units); counts",id),
0125 1050,-200,4000);
0126 hspectraLG.SetDirectory(0);
0127 hspectraLGHG = TProfile(Form("hCorrProf%sLGHGCellID%d",name.Data(),id),
0128 Form("ADC Low Gain/High Gain correlation CellID %d; Corr LG (arb. units); HG E (arb. units)",id),
0129 400,0,400);
0130 hspectraLGHG.SetDirectory(0);
0131 hcorr = TH2D(Form("hCorr2D%sLGHGCellID%d",name.Data(),id),
0132 Form("2D ADC Low Gain/High Gain correlation CellID %d; Corr LG (arb. units); HG E (arb. units)",id),
0133 400,0,400, 525, -200, 4000 );
0134 hcorr.SetDirectory(0);
0135 } else if (type == ReadOut::Type::Hgcroc){
0136 hspectraHG = TH1D(Form("hspectra%sADCCellID%d",name.Data(),id),Form("ADC spectrumCellID %d; ADC (arb. units); counts ",id),
0137 1024*integ+100,-100,1024*integ);
0138 hspectraHG.SetDirectory(0);
0139 hspectraTOA = TH1D(Form("hspectra%sTOACellID%d",name.Data(),id),Form("TOA spectrumCellID %d; TOA (arb. units); counts",id),
0140 1024,0,1024);
0141 hspectraTOA.SetDirectory(0);
0142 hspectraTOT = TH1D(Form("hspectra%sTOTCellID%d",name.Data(),id),Form("TOT spectrumCellID %d; TOT (arb. units); counts",id),
0143 4096,0,4096);
0144 hspectraTOT.SetDirectory(0);
0145 hADCTOT = TProfile(Form("h%sTOTADCCellID%d",name.Data(),id),Form("TOT-ADC correlation CellID %d; ADC (arb. units); TOT (arb. units)",id),
0146 (1024+100)/8,-100,1024*integ);
0147 hADCTOT.SetDirectory(0);
0148 hcorr = TH2D(Form("waveform%sCellID%d",name.Data(),id),Form("2D waveform CellID %d; sample ; ADC (arb. units)",id),
0149 20,0,20, 1034, -10, 1024);
0150 hcorr.SetDirectory(0);
0151 hcorrADCTOT = TH2D(Form("hCorr2DTOTADC%sCellID%d",name.Data(),id),Form("2D TOT-ADC CellID %d; ADC (arb. units); TOT (arb. units)",id),
0152 (1024+100)/8,-100,1024*integ, 4096/8,0,4096);
0153 hcorrADCTOT.SetDirectory(0);
0154 hWaveForm = TProfile(Form("waveform1D%sCellID%d",name.Data(),id),Form("1D waveform CellID %d; sample ; ADC (arb. units)",id),
0155 20,0,20);
0156 hWaveForm.SetDirectory(0);
0157
0158
0159 }
0160
0161 } else if (extend == 3){
0162 if (type == ReadOut::Type::Hgcroc){
0163 hspectraHG = TH1D(Form("hspectra%sADCCellID%d",name.Data(),id),Form("ADC spectrumCellID %d; ADC (arb. units); counts ",id),
0164 1024*integ+100,-100,1024*integ);
0165 hspectraHG.SetDirectory(0);
0166 hspectraTOA = TH1D(Form("hspectra%sTOACellID%d",name.Data(),id),Form("TOA spectrumCellID %d; TOA (arb. units); counts",id),1024,0,1024);
0167 hspectraTOA.SetDirectory(0);
0168 hspectraTOT = TH1D(Form("hspectra%sTOTCellID%d",name.Data(),id),Form("TOT spectrumCellID %d; TOT (arb. units); counts",id),4096,0,4096);
0169 hWaveForm = TProfile(Form("waveform1D%sCellID%d",name.Data(),id),Form("1D waveform CellID %d; t (ns) ; ADC (arb. units)",id),
0170 550,-50,500);
0171 hWaveForm.SetDirectory(0);
0172 hcorr = TH2D(Form("waveform%sCellID%d",name.Data(),id),Form("2D waveform CellID %d; t (ns) ; ADC (arb. units)",id),
0173 550,-50,500, 1034, -10, 1024);
0174 hcorr.SetDirectory(0);
0175 hcorrTOAADC = TH2D(Form("h2DADCTOA%sCellID%d",name.Data(),id),Form("2D ADC vs TOA CellID %d; TOA (arb. units); ADC (arb. units)",id),
0176 1024/8,0,1024, (1024+100)/8,-100,1024*integ);
0177 hcorrTOAADC.SetDirectory(0);
0178 hcorrTOASample = TH2D(Form("h2DTOASample%sCellID%d",name.Data(),id),Form("2D Sample vs TOA CellID %d; TOA (arb. units); #sample",id),
0179 1024/8,0,1024,20,0,20);
0180 hcorrTOASample.SetDirectory(0);
0181 hTOAADC = TProfile(Form("h%sADCTOACellID%d",name.Data(),id),Form("ADC-TOA correlation CellID %d; TOA (arb. units); ADC (arb. units)",id),
0182 1024/8,0,1024, "");
0183 hTOAADC.SetDirectory(0);
0184 }
0185
0186 } else if (extend == 4){
0187 if (type == ReadOut::Type::Hgcroc){
0188 hspectraHG = TH1D(Form("hspectra%sADCCellID%d",name.Data(),id),Form("ADC spectrumCellID %d; ADC (arb. units) 1st sample; counts ",id),1124,-100,1024);
0189 hspectraHG.SetDirectory(0);
0190 hspectraLG = TH1D(Form("hspectra%sADCAllCellID%d",name.Data(),id),Form("ADC spectrumCellID %d; ADC (arb. units) all samples; counts ",id),1124,-100,1024);
0191 hspectraLG.SetDirectory(0);
0192 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);
0193 hcorr.SetDirectory(0);
0194 }
0195
0196 } else if (extend == 5){
0197 if (type == ReadOut::Type::Hgcroc){
0198 hWaveForm = TProfile(Form("waveform1D%sCellID%d",name.Data(),id),Form("1D waveform CellID %d; t (ns) ; ADC (arb. units)",id),550,-50,500);
0199 hWaveForm.SetDirectory(0);
0200 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);
0201 hcorr.SetDirectory(0);
0202 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);
0203 hcorrTOAADC.SetDirectory(0);
0204 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, "");
0205 hTOAADC.SetDirectory(0);
0206 }
0207 } else if (extend == 6){
0208 if (type == ReadOut::Type::Hgcroc){
0209 hWaveForm = TProfile(Form("waveform1D%sCellID%d",name.Data(),id),Form("1D waveform CellID %d; t (ns) ; ADC (arb. units)",id),550,-50,500);
0210 hWaveForm.SetDirectory(0);
0211 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);
0212 hcorr.SetDirectory(0);
0213 }
0214 } else if (extend == 7){
0215 if (type == ReadOut::Type::Hgcroc){
0216 hWaveForm = TProfile(Form("waveform1D%sCellID%d",name.Data(),id),Form("1D waveform CellID %d; sample ; ADC (arb. units)",id),20,0,20);
0217 hWaveForm.SetDirectory(0);
0218 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);
0219 hcorr.SetDirectory(0);
0220 }
0221
0222 } else if(extend == 8){
0223 hWaveForm = TProfile(Form("waveform1D%sCellID%d",name.Data(),id),Form("1D waveform CellID %d; t (ns) ; ADC (arb. units)",id),550,-50,500);
0224 hWaveForm.SetDirectory(0);
0225 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);
0226 hcorr.SetDirectory(0);
0227 hProfileTOT = TProfile( Form("TOT%sCellID%d",name.Data(),id),Form("TOT CellID %d; t(ns); TOT (arb.units)",id),4400,-50,500,-10,4300,"");
0228 hProfileTOT.SetDirectory(0);
0229 hProfileTOA = TProfile( Form("TOA%sCellID%d",name.Data(),id),Form("TOA CellID %d; t(ns); TOA (arb.units)",id),1100,-50,500,-10,1090,"");
0230 hProfileTOA.SetDirectory(0);
0231 }
0232 }
0233 ~TileSpectra(){}
0234
0235 bool FillCAEN(double, double);
0236 bool FillSpectraCAEN(double, double);
0237 bool FillExtCAEN(double, double, double, double);
0238 bool FillCorrCAEN(double, double);
0239
0240 bool FillHGCROC(double, double, double);
0241 bool FillSpectraHGCROC(double, double, double);
0242 bool FillExtHGCROC(double, double, double, int, int);
0243 bool FillExtHGCROCPed(std::vector<int>, double);
0244 bool FillCorrHGCROC(double, double, double);
0245
0246 bool FillTrigger(double);
0247 bool FillWaveform(std::vector<int>,double);
0248 bool FillWaveformVsTime(std::vector<int> , double, double, int );
0249 bool FillMaxVsTime(double , double, int, int );
0250 bool FillWaveformVsTimeParser(std::vector<int>,double);
0251 bool FillTOTProfile(std::vector<int>);
0252 bool FillTOAProfile(std::vector<int>);
0253
0254 bool FitNoise(double*, int, bool);
0255 void FitFixedNoise();
0256 void InitializeNoiseFitsFromCalib();
0257 bool FitMipHG(double*, double*, int, int, bool, double, double );
0258 bool FitMipLG(double*, double*, int, int, bool, double );
0259 bool FitCorrCAEN(int);
0260 bool FitLGHGCorr(int , bool);
0261 bool FitPedConstWave(int);
0262 bool FitNoiseWithBG(double*);
0263 short DetermineBadChannel();
0264
0265 int GetCellID();
0266 void SetBadChannelInCalib(short);
0267
0268 double GetMaxXInRangeLG(double, double);
0269 double GetMaxXInRangeHG(double, double);
0270
0271 ReadOut::Type GetROType() {return ROType;};
0272 TH1D* GetHG();
0273 TH1D* GetLG();
0274 TH1D* GetComb();
0275 TH1D* GetTriggPrim();
0276 TProfile* GetLGHGcorr();
0277 TProfile* GetHGLGcorr();
0278 TH2D* GetCorr();
0279
0280 TH1D* GetTOT();
0281 TH1D* GetTOA();
0282 TProfile* GetWave1D();
0283 TProfile* GetTOAADC();
0284 TProfile* GetADCTOT();
0285 TH2D* GetCorrTOAADC();
0286 TH2D* GetCorrTOASample();
0287 TH2D* GetCorrADCTOT();
0288 TProfile* GetTOTProfile();
0289 TProfile* GetTOAProfile();
0290
0291 TF1* GetBackModel(int);
0292 TF1* GetSignalModel(int);
0293 TF1* GetCorrModel(int);
0294 TileCalib* GetCalib();
0295
0296 void Write(bool);
0297 void WriteExt(bool);
0298
0299 protected:
0300 TString TileName = "";
0301 ReadOut::Type ROType;
0302 int cellID = -1;
0303 TileCalib* calib;
0304 int debug = 0;
0305 int extend = 0;
0306 int integSample = 1;
0307 bool resetAxisLabels = false;
0308 bool bpedHG = false;
0309 bool bpedLG = false;
0310 bool bmipHG = false;
0311 bool bmipLG = false;
0312 bool bcorrHGLG = false;
0313 bool bcorrLGHG = false;
0314 bool bpedWave = false;
0315 bool bwave = false;
0316 bool bTriggPrim = false;
0317 TF1 BackgroundLG;
0318 TF1 BackgroundHG;
0319 TF1 SignalLG;
0320 TF1 SignalHG;
0321 TF1 HGLGcorr;
0322 TF1 LGHGcorr;
0323 TF1 pedWave;
0324 TF1 wave;
0325 TH1D hspectraHG;
0326 TH1D hspectraLG;
0327 TH1D hspectraTOT;
0328 TH1D hspectraTOA;
0329 TH1D hTriggPrim;
0330 TH1D hcombined;
0331 TProfile hspectraLGHG;
0332 TProfile hspectraHGLG;
0333 TProfile hWaveForm;
0334 TProfile hADCTOT;
0335 TProfile hTOAADC;
0336 TH2D hcorr;
0337 TH2D hcorrTOAADC;
0338 TH2D hcorrTOASample;
0339 TH2D hcorrADCTOT;
0340 TProfile hProfileTOT;
0341 TProfile hProfileTOA;
0342 static double langaufun(double *, double *);
0343 static int langaupro(double *, double &, double &);
0344
0345 ClassDef(TileSpectra,3);
0346 };
0347
0348
0349 #endif