Back to home page

EIC code displayed by LXR

 
 

    


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     // Calibrated output
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     // Detailed output after transfering the calibration
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     // Waveform analysis
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     // extended pedestal output
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     // Waveform analysis option 2  
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     // Waveform analysis for the HG2Calib parser 
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   // HGCROC specific
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;     // only in HGCROC case
0328   TH1D hspectraTOA;     // only in HGCROC case
0329   TH1D hTriggPrim;
0330   TH1D hcombined;
0331   TProfile hspectraLGHG;
0332   TProfile hspectraHGLG;
0333   TProfile hWaveForm;   // only in HGCROC case
0334   TProfile hADCTOT;
0335   TProfile hTOAADC;
0336   TH2D hcorr; 
0337   TH2D hcorrTOAADC;     // only in HGCROC case
0338   TH2D hcorrTOASample;  // only in HGCROC case
0339   TH2D hcorrADCTOT;     // only in HGCROC case
0340   TProfile hProfileTOT; // only in HGCROC case
0341   TProfile hProfileTOA; // only in HGCROC case
0342   static double langaufun(double */*x*/, double */*par*/);
0343   static int langaupro(double */*params*/, double &/*maxx*/, double &/*FWHM*/);
0344 
0345   ClassDef(TileSpectra,3);
0346 };
0347 
0348 
0349 #endif