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