diff --git a/src/THcScintillatorPlane.cxx b/src/THcScintillatorPlane.cxx index 33acbe9cd3496bd1b26bd20852d0074dd29012cc..9ff01bc80cb93b4c3ec69d5a66dfc9f68dab2246 100644 --- a/src/THcScintillatorPlane.cxx +++ b/src/THcScintillatorPlane.cxx @@ -323,8 +323,8 @@ Int_t THcScintillatorPlane::ReadDatabase( const TDatime& date ) fGoodPosAdcPulseTime = vector<Double_t> (fNelem, 0.0); fGoodNegAdcPulseTime = vector<Double_t> (fNelem, 0.0); - fGoodPosTdcChan = vector<Double_t> (fNelem, 0.0); - fGoodNegTdcChan = vector<Double_t> (fNelem, 0.0); + fGoodPosTdcTimeUnCorr = vector<Double_t> (fNelem, 0.0); + fGoodNegTdcTimeUnCorr = vector<Double_t> (fNelem, 0.0); fGoodPosTdcTimeCorr = vector<Double_t> (fNelem, 0.0); fGoodNegTdcTimeCorr = vector<Double_t> (fNelem, 0.0); fGoodPosTdcTimeTOFCorr = vector<Double_t> (fNelem, 0.0); @@ -409,11 +409,11 @@ Int_t THcScintillatorPlane::DefineVariables( EMode mode ) {"GoodPosAdcPed", "List of Positive ADC pedestals (passed TDC && ADC Min and Max cuts for either end)", "fGoodPosAdcPed"}, //vector<Double_t> {"GoodNegAdcPed", "List of Negative ADC pedestals (passed TDC && ADC Min and Max cuts for either end)", "fGoodNegAdcPed"}, //vector<Double_t> - {"GoodNegTdcChan", "List of negative TDC values (passed TDC && ADC Min and Max cuts for either end)", "fGoodNegTdcChan"}, //Units ns + {"GoodNegTdcTimeUnCorr", "List of negative TDC values (passed TDC && ADC Min and Max cuts for either end)", "fGoodNegTdcTimeUnCorr"}, //Units ns {"GoodNegTdcTimeCorr", "List of negative corrected TDC values (corrected for PMT offset and ADC)", "fGoodNegTdcTimeCorr"}, {"GoodNegTdcTimeTOFCorr", "List of negative corrected TDC values (corrected for TOF)", "fGoodNegTdcTimeTOFCorr"}, {"GoodNegAdcPulseInt", "List of negative ADC values (passed TDC && ADC Min and Max cuts for either end)", "fGoodNegAdcPulseInt"}, - {"GoodPosTdcChan", "List of positive TDC values (passed TDC && ADC Min and Max cuts for either end)", "fGoodPosTdcChan"}, + {"GoodPosTdcTimeUnCorr", "List of positive TDC values (passed TDC && ADC Min and Max cuts for either end)", "fGoodPosTdcTimeUnCorr"}, {"GoodPosTdcTimeCorr", "List of positive corrected TDC values (corrected for PMT offset and ADC)", "fGoodPosTdcTimeCorr"}, {"GoodPosTdcTimeTOFCorr", "List of positive corrected TDC values (corrected for TOF)", "fGoodPosTdcTimeTOFCorr"}, {"GoodPosAdcPulseInt", "List of positive ADC values (passed TDC && ADC Min and Max cuts for either end)", "fGoodPosAdcPulseInt"}, @@ -469,22 +469,6 @@ void THcScintillatorPlane::Clear( Option_t* ) frNegAdcPulseAmp->Clear(); - //Clear multiplicities - // fTotNumPosAdcHits = 0; - // fTotNumNegAdcHits = 0; - // fTotNumAdcHits = 0; - - fTotNumPosTdcHits = 0; - fTotNumNegTdcHits = 0; - fTotNumTdcHits = 0; - - //fTotNumGoodPosAdcHits = 0; - //fTotNumGoodNegAdcHits = 0; - //fTotNumGoodAdcHits = 0; - - fTotNumGoodPosTdcHits = 0; - fTotNumGoodNegTdcHits = 0; - fTotNumGoodTdcHits = 0; //Clear occupancies for (UInt_t ielem = 0; ielem < fNumGoodPosAdcHits.size(); ielem++) @@ -512,14 +496,14 @@ void THcScintillatorPlane::Clear( Option_t* ) } //Clear Good TDC Variables - for (UInt_t ielem = 0; ielem < fGoodPosTdcChan.size(); ielem++) { - fGoodPosTdcChan.at(ielem) = 0.0; + for (UInt_t ielem = 0; ielem < fGoodPosTdcTimeUnCorr.size(); ielem++) { + fGoodPosTdcTimeUnCorr.at(ielem) = 0.0; fGoodPosTdcTimeCorr.at(ielem) = 0.0; fGoodPosTdcTimeTOFCorr.at(ielem) = 0.0; } - for (UInt_t ielem = 0; ielem < fGoodNegTdcChan.size(); ielem++) { - fGoodNegTdcChan.at(ielem) = 0.0; + for (UInt_t ielem = 0; ielem < fGoodNegTdcTimeUnCorr.size(); ielem++) { + fGoodNegTdcTimeUnCorr.at(ielem) = 0.0; fGoodNegTdcTimeCorr.at(ielem) = 0.0; fGoodNegTdcTimeTOFCorr.at(ielem) = 0.0; } @@ -631,6 +615,16 @@ Int_t THcScintillatorPlane::ProcessHits(TClonesArray* rawhits, Int_t nexthit) fTotNumNegAdcHits = 0; fTotNumAdcHits = 0; + + fTotNumPosTdcHits = 0; + fTotNumNegTdcHits = 0; + fTotNumTdcHits = 0; + + fTotNumGoodPosTdcHits = 0; + fTotNumGoodNegTdcHits = 0; + fTotNumGoodTdcHits = 0; + + fHodoHits->Clear(); Int_t nrawhits = rawhits->GetLast()+1; // cout << "THcScintillatorPlane::ProcessHits " << fPlaneNum << " " << nexthit << "/" << nrawhits << endl; @@ -653,6 +647,8 @@ Int_t THcScintillatorPlane::ProcessHits(TClonesArray* rawhits, Int_t nexthit) Int_t index=padnum-1; + + THcRawTdcHit& rawPosTdcHit = hit->GetRawTdcHitPos(); for (UInt_t thit=0; thit<rawPosTdcHit.GetNHits(); ++thit) { ((THcSignalHit*) frPosTdcTimeRaw->ConstructedAt(nrPosTdcHits))->Set(padnum, rawPosTdcHit.GetTimeRaw(thit)); @@ -725,12 +721,17 @@ Int_t THcScintillatorPlane::ProcessHits(TClonesArray* rawhits, Int_t nexthit) Double_t adc_pos=-999; Double_t adc_neg=-999; + //Declare good adc hits (passed the error flag and pulse time cut) + Double_t good_ielem_posadc = -1; + Double_t good_ielem_negadc = -1; + + if(fADCMode == kADCDynamicPedestal) { //Loop Here over all hits per event for neg side of plane for (Int_t ielem=0;ielem<frNegAdcPulseInt->GetEntries();ielem++) { // Int_t npad = ((THcSignalHit*) frNegAdcPulseInt->ConstructedAt(ielem))->GetPaddleNumber() - 1; - // Double_t pulseInt = ((THcSignalHit*) frNegAdcPulseInt->ConstructedAt(ielem))->GetData(); + Double_t pulseInt = ((THcSignalHit*) frNegAdcPulseInt->ConstructedAt(ielem))->GetData(); // Double_t pulsePed = ((THcSignalHit*) frNegAdcPed->ConstructedAt(ielem))->GetData(); // Double_t pulseAmp = ((THcSignalHit*) frNegAdcPulseAmp->ConstructedAt(ielem))->GetData(); // Double_t pulseIntRaw = ((THcSignalHit*) frNegAdcPulseIntRaw->ConstructedAt(ielem))->GetData(); @@ -739,15 +740,18 @@ Int_t THcScintillatorPlane::ProcessHits(TClonesArray* rawhits, Int_t nexthit) Bool_t pulseTimeCut = (pulseTime > fAdcTimeWindowMin) && (pulseTime < fAdcTimeWindowMax); if (!errorflag && pulseTimeCut && adc_neg == -999) { - adc_neg = hit->GetRawAdcHitNeg().GetPulseInt(); + adc_neg = pulseInt; badcraw_neg = kTRUE; + + good_ielem_negadc = ielem; + } } //Loop Here over all hits per event for pos side of plane for (Int_t ielem=0;ielem<frPosAdcPulseInt->GetEntries();ielem++) { // Int_t npad = ((THcSignalHit*) frPosAdcPulseInt->ConstructedAt(ielem))->GetPaddleNumber() - 1; - // Double_t pulseInt = ((THcSignalHit*) frPosAdcPulseInt->ConstructedAt(ielem))->GetData(); + Double_t pulseInt = ((THcSignalHit*) frPosAdcPulseInt->ConstructedAt(ielem))->GetData(); // Double_t pulsePed = ((THcSignalHit*) frPosAdcPed->ConstructedAt(ielem))->GetData(); // Double_t pulseAmp = ((THcSignalHit*) frPosAdcPulseAmp->ConstructedAt(ielem))->GetData(); // Double_t pulseIntRaw = ((THcSignalHit*) frPosAdcPulseIntRaw->ConstructedAt(ielem))->GetData(); @@ -756,8 +760,12 @@ Int_t THcScintillatorPlane::ProcessHits(TClonesArray* rawhits, Int_t nexthit) Bool_t pulseTimeCut = (pulseTime > fAdcTimeWindowMin) && (pulseTime < fAdcTimeWindowMax); if (!errorflag && pulseTimeCut && adc_pos == -999) { - adc_pos = hit->GetRawAdcHitPos().GetPulseInt(); + adc_pos = pulseInt; badcraw_pos = kTRUE; + + good_ielem_posadc = ielem; + + } } @@ -781,7 +789,7 @@ Int_t THcScintillatorPlane::ProcessHits(TClonesArray* rawhits, Int_t nexthit) } if (adc_neg >= fADCDiagCut) { ((THcSignalHit*) frNegADCHits->ConstructedAt(nrNegADCHits))->Set(padnum, adc_neg); - Double_t samplesum=hit->GetRawAdcHitNeg().GetSampleIntRaw(); + Double_t samplesum=hit->GetRawAdcHitNeg().GetSampleIntRaw(); Double_t pedestal=hit->GetRawAdcHitNeg().GetPedRaw(); ((THcSignalHit*) frNegADCSums->ConstructedAt(nrNegADCHits))->Set(padnum, samplesum); ((THcSignalHit*) frNegADCPeds->ConstructedAt(nrNegADCHits++))->Set(padnum, pedestal); @@ -802,10 +810,17 @@ Int_t THcScintillatorPlane::ProcessHits(TClonesArray* rawhits, Int_t nexthit) cout << " plane = " << hit->fPlane << " Neg paddle = " << hit->fCounter << " " << hit->GetRawTdcHitNeg().GetTime(thit) << " hit = " << thit << endl; } */ + + //Declare good tdc hits (passed the ScinTdcMin.Max time cut) + Double_t good_ielem_postdc = -1; + Double_t good_ielem_negtdc = -1; + + for(UInt_t thit=0; thit<hit->GetRawTdcHitPos().GetNHits(); thit++) { tdc_pos = hit->GetRawTdcHitPos().GetTime(thit)+fTdcOffset; if(tdc_pos >= fScinTdcMin && tdc_pos <= fScinTdcMax) { btdcraw_pos = kTRUE; + good_ielem_postdc = thit; break; } } @@ -813,6 +828,7 @@ Int_t THcScintillatorPlane::ProcessHits(TClonesArray* rawhits, Int_t nexthit) tdc_neg = hit->GetRawTdcHitNeg().GetTime(thit)+fTdcOffset; if(tdc_neg >= fScinTdcMin && tdc_neg <= fScinTdcMax) { btdcraw_neg = kTRUE; + good_ielem_negtdc = thit; break; } } @@ -824,6 +840,63 @@ Int_t THcScintillatorPlane::ProcessHits(TClonesArray* rawhits, Int_t nexthit) if((btdcraw_pos && badcraw_pos) || (btdcraw_neg && badcraw_neg )) { + //DEFINE THE "GOOD +ADC VARIABLES" + if (good_ielem_posadc != -1) { + + //good adc multiplicity + fTotNumGoodPosAdcHits++; + fTotNumGoodAdcHits++; + + //good adc occupancy + fNumGoodPosAdcHits.at(padnum-1) = padnum; + + fGoodPosAdcPed.at(padnum-1) = ((THcSignalHit*) frPosAdcPed->ConstructedAt(good_ielem_posadc))->GetData(); + fGoodPosAdcPulseInt.at(padnum-1) = ((THcSignalHit*) frPosAdcPulseInt->ConstructedAt(good_ielem_posadc))->GetData(); + fGoodPosAdcPulseAmp.at(padnum-1) = ((THcSignalHit*) frPosAdcPulseAmp->ConstructedAt(good_ielem_posadc))->GetData(); + fGoodPosAdcPulseTime.at(padnum-1) = ((THcSignalHit*) frPosAdcPulseTimeRaw->ConstructedAt(good_ielem_posadc))->GetData(); + } + + + //DEFINE THE "GOOD -ADC VARIABLES" + if (good_ielem_negadc != -1) { + + //good adc multiplicity + fTotNumGoodNegAdcHits++; + fTotNumGoodAdcHits++; + + //good adc occupancy + fNumGoodNegAdcHits.at(padnum-1) = padnum; + + fGoodNegAdcPed.at(padnum-1) = ((THcSignalHit*) frNegAdcPed->ConstructedAt(good_ielem_negadc))->GetData(); + fGoodNegAdcPulseInt.at(padnum-1) = ((THcSignalHit*) frNegAdcPulseInt->ConstructedAt(good_ielem_negadc))->GetData(); + fGoodNegAdcPulseAmp.at(padnum-1) = ((THcSignalHit*) frNegAdcPulseAmp->ConstructedAt(good_ielem_negadc))->GetData(); + fGoodNegAdcPulseTime.at(padnum-1) = ((THcSignalHit*) frNegAdcPulseTimeRaw->ConstructedAt(good_ielem_negadc))->GetData(); + } + + //DEFINE THE "GOOD +TDC Multiplicities and Occupancies" + if (good_ielem_postdc != -1) { + + //good tdc multiplicity + fTotNumGoodPosTdcHits++; + fTotNumGoodTdcHits++; + + //good tdc occupancy + fNumGoodPosTdcHits.at(padnum-1) = padnum; + } + + //DEFINE THE "GOOD -TDC Multiplicities and Occupancies" + if (good_ielem_negtdc != -1) { + + //good tdc multiplicity + fTotNumGoodNegTdcHits++; + fTotNumGoodTdcHits++; + + //good tdc occupancy + fNumGoodNegTdcHits.at(padnum-1) = padnum; + } + + + new( (*fHodoHits)[fNScinHits]) THcHodoHit(tdc_pos, tdc_neg, adc_pos, adc_neg, hit->fCounter, this); @@ -835,8 +908,19 @@ Int_t THcScintillatorPlane::ProcessHits(TClonesArray* rawhits, Int_t nexthit) ((THcHodoHit*) fHodoHits->At(fNScinHits))->SetPosADCtime(time_peak); time_peak=hit->GetRawAdcHitNeg().GetPulseTimeRaw(); ((THcHodoHit*) fHodoHits->At(fNScinHits))->SetNegADCtime(time_peak); - // Do corrections if valid TDC on both ends of bar - if(btdcraw_pos && btdcraw_neg) { + + //Define GoodTdcUnCorrTime + if(btdcraw_pos) { + fGoodPosTdcTimeUnCorr.at(padnum-1) = tdc_pos*fScinTdcToTime; + } + if(btdcraw_neg) { + fGoodNegTdcTimeUnCorr.at(padnum-1) = tdc_neg*fScinTdcToTime; + } + + + + // Do corrections if valid TDC on both ends of bar + if(btdcraw_pos && btdcraw_neg) { // Do the pulse height correction to the time. (Position dependent corrections later) Double_t timec_pos, timec_neg; @@ -893,10 +977,19 @@ Int_t THcScintillatorPlane::ProcessHits(TClonesArray* rawhits, Int_t nexthit) } // cout << fNScinHits<< " " << timec_pos << " " << timec_neg << endl; ((THcHodoHit*) fHodoHits->At(fNScinHits))->SetPaddleCenter(fPosCenter[index]); - ((THcHodoHit*) fHodoHits->At(fNScinHits))->SetCorrectedTimes(timec_pos,timec_neg, //set values for f(Pos/Neg)CorrectedTime and f(Pos/Neg)TOFCorrectedTime - postime, negtime, //given that tdc_pos && tdc_neg is within the tdcTimeWindow + ((THcHodoHit*) fHodoHits->At(fNScinHits))->SetCorrectedTimes(timec_pos,timec_neg, //See THcHodoHit.h for SeCorrectedTimes() function definition: timec_pos/timec_neg = TDCTimeCorr, postime/negtime = TDCTimeTOFCorr + postime, negtime, scin_corrected_time); - } else { + + //Define GoodTdcTimeCorr and GoodTdcTimeTOFCorr + fGoodPosTdcTimeCorr.at(padnum-1) = timec_pos; + fGoodNegTdcTimeCorr.at(padnum-1) = timec_neg; + + fGoodPosTdcTimeTOFCorr.at(padnum-1) = postime; + fGoodNegTdcTimeTOFCorr.at(padnum-1) = negtime; + + + } else { Double_t timec_pos,timec_neg; timec_pos=tdc_pos; timec_neg=tdc_neg; @@ -926,28 +1019,42 @@ Int_t THcScintillatorPlane::ProcessHits(TClonesArray* rawhits, Int_t nexthit) ((THcHodoHit*) fHodoHits->At(fNScinHits))->SetCorrectedTimes(timec_pos,timec_neg, timec_pos,timec_neg, 0.0); + + //Define GoodTdcTimeCorr and GoodTdcTimeTOFCorr (a second time, since when only 1pmt fires, we cannot get TOFCorr) + fGoodPosTdcTimeCorr.at(padnum-1) = timec_pos; + fGoodNegTdcTimeCorr.at(padnum-1) = timec_neg; + + fGoodPosTdcTimeTOFCorr.at(padnum-1) = timec_pos; + fGoodNegTdcTimeTOFCorr.at(padnum-1) = timec_neg; + + + + } fNScinHits++; // One or more good time counter - //Good Multiplicities (Passed ADC && TDC Time Cuts on either side of a scintillator paddle) - /* - for (Int_t ielem=0;ielem<frNegAdcPulseInt->GetEntries();ielem++) { - fTotNumGoodNegAdcHits++; - fTotNumGoodAdcHits++; - } + + + + + + // fTotNumGoodNegTdcHits++; + // fTotNumGoodTdcHits++; + + //Good TDC- Occupancy + // fNumGoodNegTdcHits.at(npad) = npad + 1; + + + // fTotNumGoodPosTdcHits++; + // fTotNumGoodTdcHits++; + + //Good TDC+ Occupancy + // fNumGoodPosTdcHits.at(npad) = npad + 1; + + + - for (Int_t ielem=0;ielem<frPosAdcPulseInt->GetEntries();ielem++) { - fTotNumGoodPosAdcHits++; - fTotNumGoodAdcHits++; - } - */ - fTotNumGoodPosAdcHits++; - fTotNumGoodNegAdcHits++; - fTotNumGoodAdcHits++; - //fTotNumGoodPosTdcHits++; - //fTotNumGoodNegTdcHits++; - //fTotNumGoodTdcHits++; } diff --git a/src/THcScintillatorPlane.h b/src/THcScintillatorPlane.h index 8924f2af0e3c5db2ec599db360f6710c25477f39..ff75bee8b076c339394e537de963ddc74f714e66 100644 --- a/src/THcScintillatorPlane.h +++ b/src/THcScintillatorPlane.h @@ -139,11 +139,11 @@ class THcScintillatorPlane : public THaSubDetector { vector<Double_t> fGoodNegAdcPulseTime; //Hodoscopoe "GOOD" TDC Variables - vector<Double_t> fGoodPosTdcChan; + vector<Double_t> fGoodPosTdcTimeUnCorr; vector<Double_t> fGoodPosTdcTimeCorr; vector<Double_t> fGoodPosTdcTimeTOFCorr; - vector<Double_t> fGoodNegTdcChan; + vector<Double_t> fGoodNegTdcTimeUnCorr; vector<Double_t> fGoodNegTdcTimeCorr; vector<Double_t> fGoodNegTdcTimeTOFCorr;