From e9f33e2294770e4386008615fa9247fde0e95bca Mon Sep 17 00:00:00 2001 From: Vardan Tadevosyan <tadevosn@jlab.org> Date: Tue, 28 May 2013 10:19:52 -0400 Subject: [PATCH] Added per plane energy deposition calculations --- examples/hodtest.C | 5 ++-- examples/output.def | 6 +++++ src/THcShower.cxx | 57 +++++++++++++++++++++--------------------- src/THcShower.h | 13 ++++++++-- src/THcShowerPlane.cxx | 33 +++++++++++++++++++++++- src/THcShowerPlane.h | 5 ++++ 6 files changed, 86 insertions(+), 33 deletions(-) diff --git a/examples/hodtest.C b/examples/hodtest.C index dc58902..8968b15 100644 --- a/examples/hodtest.C +++ b/examples/hodtest.C @@ -1,4 +1,4 @@ - +void hodtest(Int_t Nevents) { // @@ -66,7 +66,8 @@ // run->SetEventRange(1,2000);// Physics Event number, does not // include scaler or control events // run->SetEventRange(1,999999); - run->SetEventRange(1,1); + // run->SetEventRange(1,1); + run->SetEventRange(1,Nevents); // Define the analysis parameters analyzer->SetEvent( event ); diff --git a/examples/output.def b/examples/output.def index a8fb853..ccbf7cd 100644 --- a/examples/output.def +++ b/examples/output.def @@ -34,6 +34,12 @@ TH1F chnegadc2 'HMS Cal B- ADC hits' H.cal.2ta.negadchits 13 0.5 13.5 TH1F chposadc3 'HMS Cal C+ ADC hits' H.cal.3ta.posadchits 13 0.5 13.5 TH1F chposadc4 'HMS Cal D+ ADC hits' H.cal.4ta.posadchits 13 0.5 13.5 +# Deposited Energies per Calorimeter layer +TH1F edep1 'HMS Cal A Edep' H.cal.1pr.eplane 100 -0.1 2.074 +TH1F edep2 'HMS Cal B Edep' H.cal.2ta.eplane 100 -0.1 2.074 +TH1F edep3 'HMS Cal C Edep' H.cal.3ta.eplane 100 -0.1 2.074 +TH1F edep4 'HMS Cal D Edep' H.cal.4ta.eplane 100 -0.1 2.074 + #Calorimeter ADC channels TH1F hcaladc_A1p 'HMS Cal ADC A1p - PED' H.cal.1pr.apos_p[0] 150 50 500 TH1F hcaladc_A2p 'HMS Cal ADC A2p - PED' H.cal.1pr.apos_p[1] 150 50 500 diff --git a/src/THcShower.cxx b/src/THcShower.cxx index 23dde2c..7525a5f 100644 --- a/src/THcShower.cxx +++ b/src/THcShower.cxx @@ -215,15 +215,15 @@ Int_t THcShower::ReadDatabase( const TDatime& date ) fNtotBlocks=0; //total number of blocks for (Int_t i=0; i<fNLayers; i++) fNtotBlocks += fNBlocks[i]; - cout << "Total number of blocks in he calorimeter: " << fNtotBlocks << endl; + cout << "Total number of blocks in the calorimeter: " << fNtotBlocks << endl; //Pedestal limits from hcal.param. fShPosPedLimit = new Int_t [fNtotBlocks]; fShNegPedLimit = new Int_t [fNtotBlocks]; //Calibration constants - fPosCalConst = new Double_t [fNtotBlocks]; - fNegCalConst = new Double_t [fNtotBlocks]; + fPosGain = new Double_t [fNtotBlocks]; + fNegGain = new Double_t [fNtotBlocks]; //Read in parameters from hcal.param Double_t hcal_pos_cal_const[fNtotBlocks]; @@ -341,22 +341,22 @@ Int_t THcShower::ReadDatabase( const TDatime& date ) //Calibration constants in GeV per ADC channel. for (Int_t i=0; i<fNtotBlocks; i++) { - fPosCalConst[i] = hcal_pos_cal_const[i] * hcal_pos_gain_cor[i]; - fNegCalConst[i] = hcal_neg_cal_const[i] * hcal_neg_gain_cor[i]; + fPosGain[i] = hcal_pos_cal_const[i] * hcal_pos_gain_cor[i]; + fNegGain[i] = hcal_neg_cal_const[i] * hcal_neg_gain_cor[i]; } - cout << "fPosCalConst:" << endl; + cout << "fPosGain:" << endl; for (Int_t j=0; j<fNLayers; j++) { for (Int_t i=0; i<fNBlocks[j]; i++) { - cout << fPosCalConst[j*fNBlocks[j]+i] << " "; + cout << fPosGain[j*fNBlocks[j]+i] << " "; }; cout << endl; }; - cout << "fNegCalConst:" << endl; + cout << "fNegGain:" << endl; for (Int_t j=0; j<fNLayers; j++) { for (Int_t i=0; i<fNBlocks[j]; i++) { - cout << fNegCalConst[j*fNBlocks[j]+i] << " "; + cout << fNegGain[j*fNBlocks[j]+i] << " "; }; cout << endl; }; @@ -448,38 +448,37 @@ Int_t THcShower::Decode( const THaEvData& evdata ) // Get the Hall C style hitlist (fRawHitList) for this event Int_t nhits = THcHitList::DecodeToHitList(evdata); -if(gHaCuts->Result("Pedestal_event")) { + if(gHaCuts->Result("Pedestal_event")) { Int_t nexthit = 0; for(Int_t ip=0;ip<fNLayers;ip++) { nexthit = fPlanes[ip]->AccumulatePedestals(fRawHitList, nexthit); -//cout << "nexthit = " << nexthit << endl; + //cout << "nexthit = " << nexthit << endl; } fAnalyzePedestals = 1; // Analyze pedestals first normal events return(0); } - if(fAnalyzePedestals) { - for(Int_t ip=0;ip<fNLayers;ip++) { - fPlanes[ip]->CalculatePedestals(); - } - fAnalyzePedestals = 0; // Don't analyze pedestals next event - } - - + if(fAnalyzePedestals) { + for(Int_t ip=0;ip<fNLayers;ip++) { + fPlanes[ip]->CalculatePedestals(); + } + fAnalyzePedestals = 0; // Don't analyze pedestals next event + } Int_t nexthit = 0; for(Int_t ip=0;ip<fNLayers;ip++) { nexthit = fPlanes[ip]->ProcessHits(fRawHitList, nexthit); } -/* -// fRawHitList is TClones array of THcShowerHit objects - for(Int_t ihit = 0; ihit < fNRawHits ; ihit++) { - THcShowerHit* hit = (THcShowerHit *) fRawHitList->At(ihit); - cout << ihit << " : " << hit->fPlane << ":" << hit->fCounter << " : " - << hit->fADC_pos << " " << hit->fADC_neg << " " << endl; - } - cout << endl; -*/ + + // fRawHitList is TClones array of THcShowerHit objects + // cout << "THcShower::Decode: Shower raw hit list:" << endl; + // for(Int_t ihit = 0; ihit < fNRawHits ; ihit++) { + // THcShowerHit* hit = (THcShowerHit *) fRawHitList->At(ihit); + // cout << ihit << " : " << hit->fPlane << ":" << hit->fCounter << " : " + // << hit->fADC_pos << " " << hit->fADC_neg << " " << endl; + // } + // cout << endl; + return nhits; } @@ -507,6 +506,8 @@ Int_t THcShower::CoarseProcess( TClonesArray& ) //tracks // // static const Double_t sqrt2 = TMath::Sqrt(2.); + cout << "THcShower::CoarseProcess called ---------------------------" <<endl; + ApplyCorrections(); return 0; diff --git a/src/THcShower.h b/src/THcShower.h index 9c641fb..be952c9 100644 --- a/src/THcShower.h +++ b/src/THcShower.h @@ -47,6 +47,15 @@ public: return ( Side == 0 ? fShPosPedLimit[nelem] : fShNegPedLimit[nelem]); } + Double_t fGetGain(Int_t NBlock, Int_t NLayer, Int_t Side) { + if (Side!=0&&Side!=1) { + cout << "*** Wrong Side in fGetGain:" << Side << " ***" << endl; + return -1; + } + Int_t nelem = NBlock+NLayer*fNBlocks[NLayer]; + return ( Side == 0 ? fPosGain[nelem] : fNegGain[nelem]); + } + Int_t fGetMinPeds() { return fShMinPeds; } @@ -64,8 +73,8 @@ protected: Int_t fShMinPeds; //Min.number of events to analize/update pedestals. // Calibration constants - Double_t* fPosCalConst; - Double_t* fNegCalConst; + Double_t* fPosGain; + Double_t* fNegGain; // Per-event data diff --git a/src/THcShowerPlane.cxx b/src/THcShowerPlane.cxx index 07299db..35b5a31 100644 --- a/src/THcShowerPlane.cxx +++ b/src/THcShowerPlane.cxx @@ -57,6 +57,9 @@ THcShowerPlane::~THcShowerPlane() delete [] fA_Pos_p; delete [] fA_Neg_p; + delete [] fEpos; + delete [] fEneg; + delete [] fEmean; } THaAnalysisObject::EStatus THcShowerPlane::Init( const TDatime& date ) @@ -116,6 +119,10 @@ Int_t THcShowerPlane::ReadDatabase( const TDatime& date ) fA_Pos_p = new Float_t[fNelem]; fA_Neg_p = new Float_t[fNelem]; + fEpos = new Float_t[fNelem]; + fEneg = new Float_t[fNelem]; + fEmean= new Float_t[fNelem]; + // fNelem = *(Int_t *)gHcParms->Find(parname)->GetValuePointer(); // // parname[plen]='\0'; @@ -172,6 +179,10 @@ Int_t THcShowerPlane::DefineVariables( EMode mode ) {"aneg", "Raw Negative ADC Amplitudes", "fA_Neg"}, {"apos_p", "Ped-subtracted Positive ADC Amplitudes", "fA_Pos_p"}, {"aneg_p", "Ped-subtracted Negative ADC Amplitudes", "fA_Neg_p"}, + {"epos", "Energy Depositions from Positive Side PMTs", "fEpos"}, + {"eneg", "Energy Depositions from Negative Side PMTs", "fEneg"}, + {"emean", "Mean Energy Depositions", "fEMean"}, + {"eplane", "Energy Deposition per plane", "fEplane"}, { 0 } }; @@ -202,6 +213,8 @@ Int_t THcShowerPlane::CoarseProcess( TClonesArray& tracks ) // HitCount(); + cout << "THcShowerPlane::CoarseProcess called ---------------------" << endl; + return 0; } @@ -227,8 +240,13 @@ Int_t THcShowerPlane::ProcessHits(TClonesArray* rawhits, Int_t nexthit) fA_Neg[i] = 0; fA_Pos_p[i] = 0; fA_Neg_p[i] = 0; + fEpos[i] = 0; + fEneg[i] = 0; + fEmean[i] = 0; } + fEplane = 0; + Int_t nrawhits = rawhits->GetLast()+1; Int_t ihit = nexthit; @@ -249,19 +267,32 @@ Int_t THcShowerPlane::ProcessHits(TClonesArray* rawhits, Int_t nexthit) fA_Pos_p[hit->fCounter-1] = hit->fADC_pos - fPosPed[hit->fCounter -1]; fA_Neg_p[hit->fCounter-1] = hit->fADC_neg - fNegPed[hit->fCounter -1]; + THcShower* fParent; + fParent = (THcShower*) GetParent(); + double thresh_pos = fPosThresh[hit->fCounter -1]; if(hit->fADC_pos > thresh_pos) { - THcSignalHit *sighit = (THcSignalHit*) fPosADCHits->ConstructedAt(nPosADCHits++); + THcSignalHit *sighit = (THcSignalHit*) fPosADCHits->ConstructedAt(nPosADCHits++); sighit->Set(hit->fCounter, hit->fADC_pos); + + fEpos[hit->fCounter-1] += fA_Pos_p[hit->fCounter-1]* + fParent->fGetGain(hit->fCounter-1,fLayerNum,0); } double thresh_neg = fNegThresh[hit->fCounter -1]; if(hit->fADC_neg > thresh_neg) { + THcSignalHit *sighit = (THcSignalHit*) fNegADCHits->ConstructedAt(nNegADCHits++); sighit->Set(hit->fCounter, hit->fADC_neg); + + fEneg[hit->fCounter-1] += fA_Neg_p[hit->fCounter-1]* + fParent->fGetGain(hit->fCounter-1,fLayerNum,1); } + fEmean[hit->fCounter-1] += (fEpos[hit->fCounter-1] + fEneg[hit->fCounter-1]); + fEplane += fEmean[hit->fCounter-1]; + ihit++; } return(ihit); diff --git a/src/THcShowerPlane.h b/src/THcShowerPlane.h index baf5953..2e04130 100644 --- a/src/THcShowerPlane.h +++ b/src/THcShowerPlane.h @@ -53,6 +53,11 @@ class THcShowerPlane : public THaSubDetector { Float_t* fA_Pos_p; // [fNelem] Array of pedestal subtracted ADC amplitudes Float_t* fA_Neg_p; // [fNelem] Array of pedestal subtracted ADC amplitudes + Float_t* fEpos; // [fNelem] Array of energy depositions seen by positive PMTs + Float_t* fEneg; // [fNelem] Array of energy depositions seen by negative PMTs + Float_t* fEmean; // [fNelem] Array of mean energy depositions (pos + neg) + Float_t fEplane; // Energy deposition per plane + TClonesArray* fPosADCHits; TClonesArray* fNegADCHits; -- GitLab