File indexing completed on 2025-08-05 08:14:49
0001 #ifndef __Proto4ShowerCalib_H__
0002 #define __Proto4ShowerCalib_H__
0003
0004 #include <TFile.h>
0005 #include <TNtuple.h>
0006 #include <fun4all/SubsysReco.h>
0007 #include <stdint.h>
0008 #include <fstream>
0009 #include <string>
0010
0011 class PHCompositeNode;
0012 class PHG4HitContainer;
0013 class Fun4AllHistoManager;
0014 class TH1F;
0015 class TH2F;
0016 class TTree;
0017 class TChain;
0018 class SvtxEvalStack;
0019 class PHG4Particle;
0020 class RawTowerGeom;
0021 class RawTowerContainer;
0022 class SvtxTrack;
0023
0024
0025 class Proto4ShowerCalib : public SubsysReco
0026 {
0027 public:
0028
0029 Proto4ShowerCalib(const std::string &filename = "Proto4ShowerCalib.root");
0030
0031
0032 virtual ~Proto4ShowerCalib();
0033
0034
0035 int Init(PHCompositeNode *topNode);
0036
0037
0038 int InitRun(PHCompositeNode *topNode);
0039
0040
0041 int process_event(PHCompositeNode *topNode);
0042
0043
0044 int End(PHCompositeNode *topNode);
0045
0046
0047 void
0048 is_sim(bool b)
0049 {
0050 _is_sim = b;
0051 }
0052
0053
0054 int InitAna();
0055
0056 int MakeAna();
0057
0058 int FinishAna();
0059
0060 void set_runID(std::string runID)
0061 {
0062 _mRunID = runID;
0063 }
0064
0065
0066 class Eval_Run : public TObject
0067 {
0068 public:
0069 Eval_Run()
0070 {
0071 reset();
0072 }
0073 virtual ~Eval_Run()
0074 {
0075 }
0076
0077 void
0078 reset()
0079 {
0080 run = -31454;
0081 event = -31454;
0082 beam_mom = -0;
0083 hodo_h = -31454;
0084 hodo_v = -31454;
0085 C2_sum = -31454;
0086 C1 = -31454;
0087
0088 valid_hodo_v = false;
0089 valid_hodo_h = false;
0090 trigger_veto_pass = false;
0091 good_e = false;
0092 good_anti_e = false;
0093
0094 beam_2CH_mm = -31454;
0095 beam_2CV_mm = -31454;
0096
0097 truth_y = -31454;
0098 truth_z = -31454;
0099
0100 sum_E_CEMC = -31454;
0101 sum_E_HCAL_OUT = -31454;
0102 sum_E_HCAL_IN = -31454;
0103 }
0104
0105 int run;
0106 int event;
0107
0108
0109 float beam_mom;
0110
0111
0112 int hodo_h;
0113 int hodo_v;
0114
0115
0116 float C2_sum;
0117 float C1;
0118
0119
0120 bool valid_hodo_v;
0121 bool valid_hodo_h;
0122
0123
0124 bool trigger_veto_pass;
0125
0126
0127 bool good_e;
0128
0129
0130 bool good_anti_e;
0131
0132
0133 float beam_2CH_mm;
0134 float beam_2CV_mm;
0135
0136
0137 float truth_y;
0138 float truth_z;
0139
0140
0141 double sum_E_CEMC;
0142 double sum_E_HCAL_OUT;
0143 double sum_E_HCAL_IN;
0144
0145 ClassDef(Eval_Run, 10)
0146 };
0147
0148 class HCAL_Tower : public TObject
0149 {
0150 public:
0151 HCAL_Tower()
0152 {
0153 reset();
0154 }
0155
0156 virtual ~HCAL_Tower(){}
0157
0158 void reset()
0159 {
0160
0161 hcalin_e_sim = 0.;
0162
0163 hcalin_lg_e_raw = 0.;
0164 hcalin_lg_e_calib = 0.;
0165
0166 for(int itwr=0; itwr<16; itwr++)
0167 {
0168 hcalin_twr_sim[itwr] = 0.;
0169 hcalin_lg_twr_raw[itwr] = 0.;
0170 hcalin_lg_twr_calib[itwr] = 0.;
0171 }
0172
0173
0174 hcalout_e_sim = 0.;
0175
0176 hcalout_lg_e_raw = 0.;
0177 hcalout_lg_e_calib = 0.;
0178
0179 hcalout_hg_e_raw = 0.;
0180 hcalout_hg_e_calib = 0.;
0181
0182 for(int itwr=0; itwr<16; itwr++)
0183 {
0184 hcalout_twr_sim[itwr] = 0.;
0185
0186 hcalout_lg_twr_raw[itwr] = 0.;
0187 hcalout_lg_twr_calib[itwr] = 0.;
0188
0189 hcalout_hg_twr_raw[itwr] = 0.;
0190 hcalout_hg_twr_calib[itwr] = 0.;
0191 }
0192
0193
0194 hcal_total_sim = -999.;
0195 hcal_total_raw = -999.;
0196 hcal_total_calib = -999.;
0197
0198 hcal_asym_sim = -999.;
0199 hcal_asym_raw = -999.;
0200 hcal_asym_calib = -999.;
0201 }
0202
0203
0204
0205 float hcalin_e_sim;
0206 float hcalin_twr_sim[16];
0207
0208 float hcalin_lg_e_raw;
0209 float hcalin_lg_twr_raw[16];
0210
0211 float hcalin_lg_e_calib;
0212 float hcalin_lg_twr_calib[16];
0213
0214
0215 float hcalout_e_sim;
0216 float hcalout_twr_sim[16];
0217
0218 float hcalout_lg_e_raw;
0219 float hcalout_lg_twr_raw[16];
0220
0221 float hcalout_lg_e_calib;
0222 float hcalout_lg_twr_calib[16];
0223
0224 float hcalout_hg_e_raw;
0225 float hcalout_hg_twr_raw[16];
0226
0227 float hcalout_hg_e_calib;
0228 float hcalout_hg_twr_calib[16];
0229
0230
0231 float hcal_total_sim;
0232 float hcal_total_raw;
0233 float hcal_total_calib;
0234
0235 float hcal_asym_sim;
0236 float hcal_asym_raw;
0237 float hcal_asym_calib;
0238
0239 ClassDef(HCAL_Tower, 10)
0240 };
0241
0242 private:
0243
0244 enum
0245 {
0246 n_size = 8
0247 };
0248
0249
0250 bool _is_sim;
0251
0252
0253 Fun4AllHistoManager *
0254 get_HistoManager();
0255
0256 std::pair<int, int>
0257 find_max(RawTowerContainer *towers, int cluster_size);
0258
0259
0260 std::string _filename;
0261
0262
0263 unsigned long _ievent;
0264
0265
0266 Eval_Run _eval_run;
0267
0268
0269 HCAL_Tower _tower;
0270
0271
0272 TFile *mFile_OutPut;
0273 TChain *mChainInPut;
0274 unsigned long _mStartEvent;
0275 unsigned long _mStopEvent;
0276 int _mInPut_flag;
0277 std::string _mList;
0278 std::string _mRunID;
0279
0280 Eval_Run *_mInfo;
0281 HCAL_Tower *_mTower;
0282
0283
0284 TH2F *h_mAsymmEnergy_pion_sim_wo_cut;
0285
0286
0287 TH2F *h_mAsymmEnergy_pion_sim;
0288
0289 TH2F *h_mAsymmAdc_mixed;
0290 TH2F *h_mAsymmAdc_electron;
0291 TH2F *h_mAsymmAdc_pion;
0292
0293 TH2F *h_mAsymmEnergy_mixed_wo_cut;
0294 TH2F *h_mAsymmEnergy_electron_wo_cut;
0295 TH2F *h_mAsymmEnergy_pion_wo_cut;
0296
0297 TH2F *h_mAsymmEnergy_mixed;
0298 TH2F *h_mAsymmEnergy_electron;
0299 TH2F *h_mAsymmEnergy_pion;
0300
0301
0302 TH2F *h_mAsymmEnergy_mixed_balancing;
0303 TH2F *h_mAsymmEnergy_electron_balancing;
0304 TH2F *h_mAsymmEnergy_pion_balancing;
0305
0306
0307 TH2F *h_mAsymmEnergy_mixed_leveling;
0308 TH2F *h_mAsymmEnergy_electron_leveling;
0309 TH2F *h_mAsymmEnergy_pion_leveling;
0310
0311
0312 TH2F *h_mAsymmEnergy_mixed_ShowerCalib;
0313 TH2F *h_mAsymmEnergy_electron_ShowerCalib;
0314 TH2F *h_mAsymmEnergy_pion_ShowerCalib;
0315
0316
0317 TH2F *h_mAsymmEnergy_mixed_MIP;
0318 TH1F *h_mEnergyOut_electron;
0319 TH1F *h_mEnergyOut_pion;
0320 TH1F *h_mEnergyOut_electron_ShowerCalib;
0321 TH1F *h_mEnergyOut_pion_ShowerCalib;
0322
0323 int getChannelNumber(int column, int row);
0324 int setTowerCalibParas();
0325
0326
0327 const double samplefrac_in = 0.09267;
0328 const double samplefrac_out = 0.02862;
0329
0330
0331 const double MIP_mean = 0.654927;
0332 const double MIP_width = 0.151484;
0333
0334
0335
0336
0337 double towercalib_lg_in[16];
0338 double towercalib_lg_out[16];
0339 double towercalib_hg_out[16];
0340
0341
0342 const double showercalib = 2.92243;
0343 const double showercalib_ohcal = 3.37511;
0344
0345 float find_range();
0346 int find_energy();
0347
0348
0349 };
0350
0351 #endif