Back to home page

EIC code displayed by LXR

 
 

    


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     // Calibrated output
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     // Detailed output after transfering the calibration
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     // Waveform analysis
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     // extended pedestal output
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   // HGCROC specific
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;     // only in HGCROC case
0232   TH1D hspectraTOA;     // only in HGCROC case
0233   TH1D hTriggPrim;
0234   TH1D hcombined;
0235   TProfile hspectraLGHG;
0236   TProfile hspectraHGLG;
0237   TProfile hWaveForm;   // only in HGCROC case
0238   TProfile hADCTOT;
0239   TProfile hTOAADC;
0240   TH2D hcorr; 
0241   TH2D hcorrTOAADC;     // only in HGCROC case
0242   TH2D hcorrTOASample;  // only in HGCROC case
0243   static double langaufun(double */*x*/, double */*par*/);
0244   static int langaupro(double */*params*/, double &/*maxx*/, double &/*FWHM*/);
0245 
0246   ClassDef(TileSpectra,3);
0247 };
0248 
0249 
0250 #endif