Back to home page

EIC code displayed by LXR

 
 

    


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     // 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),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     // Waveform analysis
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     // extended pedestal output
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     // Waveform analysis option 2  
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     // Waveform analysis for the HG2Calib parser 
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   // HGCROC specific
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;     // only in HGCROC case
0277   TH1D hspectraTOA;     // only in HGCROC case
0278   TH1D hTriggPrim;
0279   TH1D hcombined;
0280   TProfile hspectraLGHG;
0281   TProfile hspectraHGLG;
0282   TProfile hWaveForm;   // only in HGCROC case
0283   TProfile hADCTOT;
0284   TProfile hTOAADC;
0285   TH2D hcorr; 
0286   TH2D hcorrTOAADC;     // only in HGCROC case
0287   TH2D hcorrTOASample;  // only in HGCROC case
0288   TH2D hcorrADCTOT;     // only in HGCROC case
0289   TProfile hProfileTOT; // only in HGCROC case
0290   TProfile hProfileTOA; // only in HGCROC case
0291   static double langaufun(double */*x*/, double */*par*/);
0292   static int langaupro(double */*params*/, double &/*maxx*/, double &/*FWHM*/);
0293 
0294   ClassDef(TileSpectra,3);
0295 };
0296 
0297 
0298 #endif