Back to home page

EIC code displayed by LXR

 
 

    


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