diff --git a/podd b/podd index 1b2c04ad6976a7157f5cba98a5ea26278bca19ed..9001670be3944886c4936d2b2eac8a94935b4390 160000 --- a/podd +++ b/podd @@ -1 +1 @@ -Subproject commit 1b2c04ad6976a7157f5cba98a5ea26278bca19ed +Subproject commit 9001670be3944886c4936d2b2eac8a94935b4390 diff --git a/src/THcCherenkov.cxx b/src/THcCherenkov.cxx index ba0a0fd86942dd391d9ce22d685c07209f6eee34..363630c6788729bc297caa2a7d093cab00be5ba1 100644 --- a/src/THcCherenkov.cxx +++ b/src/THcCherenkov.cxx @@ -220,6 +220,8 @@ Int_t THcCherenkov::ReadDatabase(const TDatime& date) { // Region parameters fRegionsValueMax = fNRegions * 8; fRegionValue = new Double_t[fRegionsValueMax]; + fAdcGoodElem = new Int_t[fNelem]; + fAdcPulseAmpTest = new Double_t[fNelem]; DBRequest list[] = {{"_ped_limit", fPedLimit, kInt, (UInt_t)fNelem, optional}, {"_adc_to_npe", fGain, kDouble, (UInt_t)fNelem}, @@ -468,29 +470,39 @@ Int_t THcCherenkov::ApplyCorrections(void) { return (0); } //_____________________________________________________________________________ Int_t THcCherenkov::CoarseProcess(TClonesArray&) { Double_t StartTime = 0.0; - if (fglHod) - StartTime = fglHod->GetStartTime(); - - // Loop over the elements in the TClonesArray - for (Int_t ielem = 0; ielem < frAdcPulseInt->GetEntries(); ielem++) { - - Int_t npmt = ((THcSignalHit*)frAdcPulseInt->ConstructedAt(ielem))->GetPaddleNumber() - 1; - Double_t pulsePed = ((THcSignalHit*)frAdcPed->ConstructedAt(ielem))->GetData(); - Double_t pulseInt = ((THcSignalHit*)frAdcPulseInt->ConstructedAt(ielem))->GetData(); - Double_t pulseIntRaw = ((THcSignalHit*)frAdcPulseIntRaw->ConstructedAt(ielem))->GetData(); - Double_t pulseAmp = ((THcSignalHit*)frAdcPulseAmp->ConstructedAt(ielem))->GetData(); - Double_t pulseTime = ((THcSignalHit*)frAdcPulseTime->ConstructedAt(ielem))->GetData(); - Double_t adctdcdiffTime = StartTime - pulseTime; - Bool_t errorFlag = ((THcSignalHit*)fAdcErrorFlag->ConstructedAt(ielem))->GetData(); - Bool_t pulseTimeCut = - adctdcdiffTime > fAdcTimeWindowMin[npmt] && adctdcdiffTime < fAdcTimeWindowMax[npmt]; - - if (!errorFlag) { - fGoodAdcMult.at(npmt) += 1; + if( fglHod ) StartTime = fglHod->GetStartTime(); + for(Int_t ipmt = 0; ipmt < fNelem; ipmt++) { + fAdcPulseAmpTest[ipmt] = -1000.; + fAdcGoodElem[ipmt]=-1; + } + // + for(Int_t ielem = 0; ielem < frAdcPulseInt->GetEntries(); ielem++) { + Int_t npmt = ((THcSignalHit*) frAdcPulseInt->ConstructedAt(ielem))->GetPaddleNumber() - 1; + Double_t pulseTime = ((THcSignalHit*) frAdcPulseTime->ConstructedAt(ielem))->GetData(); + Double_t pulseAmp = ((THcSignalHit*) frAdcPulseAmp->ConstructedAt(ielem))->GetData(); + Double_t adctdcdiffTime = StartTime-pulseTime; + Bool_t errorFlag = ((THcSignalHit*) fAdcErrorFlag->ConstructedAt(ielem))->GetData(); + Bool_t pulseTimeCut = adctdcdiffTime > fAdcTimeWindowMin[npmt] && adctdcdiffTime < fAdcTimeWindowMax[npmt]; + if (!errorFlag) + { + fGoodAdcMult.at(npmt) += 1; + } + if (!errorFlag && pulseTimeCut && pulseAmp > fAdcPulseAmpTest[npmt]) { + fAdcGoodElem[npmt]=ielem; + fAdcPulseAmpTest[npmt] = pulseAmp; } - + } + // Loop over the npmt + for(Int_t npmt = 0; npmt < fNelem; npmt++) { + Int_t ielem = fAdcGoodElem[npmt]; + if (ielem != -1) { + Double_t pulsePed = ((THcSignalHit*) frAdcPed->ConstructedAt(ielem))->GetData(); + Double_t pulseInt = ((THcSignalHit*) frAdcPulseInt->ConstructedAt(ielem))->GetData(); + Double_t pulseIntRaw = ((THcSignalHit*) frAdcPulseIntRaw->ConstructedAt(ielem))->GetData(); + Double_t pulseAmp = ((THcSignalHit*) frAdcPulseAmp->ConstructedAt(ielem))->GetData(); + Double_t pulseTime = ((THcSignalHit*) frAdcPulseTime->ConstructedAt(ielem))->GetData(); + Double_t adctdcdiffTime = StartTime-pulseTime; // By default, the last hit within the timing cut will be considered "good" - if (!errorFlag && pulseTimeCut) { fGoodAdcPed.at(npmt) = pulsePed; fGoodAdcHitUsed.at(npmt) = ielem + 1; fGoodAdcPulseInt.at(npmt) = pulseInt; diff --git a/src/THcCherenkov.h b/src/THcCherenkov.h index db17ef402f1ed115d66c537c276a9c78c33b06e2..fc9232901d76a12ff1492fc55ae4ff02d246f3de 100644 --- a/src/THcCherenkov.h +++ b/src/THcCherenkov.h @@ -115,6 +115,8 @@ public: Double_t* fPedMean; /* Can be supplied in parameters and then */ Double_t* fPed; Double_t* fThresh; + Double_t* fAdcPulseAmpTest; + Int_t* fAdcGoodElem; // 12 Gev FADC variables TClonesArray* frAdcPedRaw; diff --git a/src/THcCoinTime.cxx b/src/THcCoinTime.cxx index 20e3c1f9d6e9a751c1d2e6e7d115a15035b7fa8e..3e520f3176305643c234d2cb7ab57e2cbbd97e9d 100644 --- a/src/THcCoinTime.cxx +++ b/src/THcCoinTime.cxx @@ -180,6 +180,10 @@ Int_t THcCoinTime::DefineVariables( EMode mode ) {"CoinTime_RAW_ROC1", "ROC1 RAW Coincidence Time", "fROC1_RAW_CoinTime"}, {"CoinTime_RAW_ROC2", "ROC2 RAW Coincidence Time", "fROC2_RAW_CoinTime"}, + {"DeltaSHMSPathLength","DeltaSHMSpathLength (cm)","DeltaSHMSpathLength"}, + {"DeltaHMSPathLength", "DeltaHMSpathLength (cm)","DeltaHMSpathLength"}, + {"had_coinCorr_Positron", "", "had_coinCorr_Positron"}, + {"elec_coinCorr", "", "elec_coinCorr"}, { 0 } }; @@ -216,6 +220,8 @@ Int_t THcCoinTime::Process( const THaEvData& evdata ) //Gather relevant variables for Coincidence time calculation lightSpeed = 29.9792; // in cm/ns + elec_coinCorr=kBig; + had_coinCorr_Positron=kBig; //Particle Masses (HardCoded) elecMass = 0.510998/1000.0; // electron mass in GeV/c^2 positronMass = 0.510998/1000.0; @@ -240,6 +246,8 @@ Int_t THcCoinTime::Process( const THaEvData& evdata ) Double_t SHMS_FPtime = theSHMSTrack->GetFPTime(); //HMS arm + Double_t hms_xptar = theHMSTrack->GetTTheta(); + Double_t hms_dP = theHMSTrack->GetDp(); Double_t hms_xfp = theHMSTrack->GetX(); Double_t hms_xpfp = theHMSTrack->GetTheta(); Double_t hms_ypfp = theHMSTrack->GetPhi(); @@ -251,8 +259,10 @@ Int_t THcCoinTime::Process( const THaEvData& evdata ) pTRIG1_TdcTime_ROC2 = fCoinDet->Get_CT_Trigtime(2);//SHMS pTRIG4_TdcTime_ROC2 = fCoinDet->Get_CT_Trigtime(3);//HMS - DeltaSHMSpathLength = -0.11*atan2(shms_xptar,1)*1000 - 0.057*shms_dP; - DeltaHMSpathLength = 12.462*hms_xpfp + 0.1138*hms_xpfp*hms_xfp - 0.0154*hms_xfp - 72.292*hms_xpfp*hms_xpfp - 0.0000544*hms_xfp*had_xfp - 116.52*hms_ypfp*hms_ypfp; + DeltaSHMSpathLength = .11*shms_xptar*1000 +0.057*shms_dP/100.; + DeltaHMSpathLength = -1.0*(12.462*hms_xpfp + 0.1138*hms_xpfp*hms_xfp - 0.0154*hms_xfp - 72.292*hms_xpfp*hms_xpfp - 0.0000544*hms_xfp*had_xfp - 116.52*hms_ypfp*hms_ypfp); + DeltaHMSpathLength = (.12*hms_xptar*1000 +0.17*hms_dP/100.); + // default assume SHMS is electron arm Double_t ElecPathLength=SHMScentralPathLen + DeltaSHMSpathLength; Double_t HadPathLength=HMScentralPathLen + DeltaHMSpathLength; @@ -266,7 +276,6 @@ Int_t THcCoinTime::Process( const THaEvData& evdata ) had_P = theSHMSTrack->GetP(); //hadron golden track arm momentum sign=1; } - //beta calculations beta = v/c = p/E elecArm_BetaCalc = elec_P / sqrt(elec_P*elec_P + elecMass*elecMass); hadArm_BetaCalc_proton = had_P / sqrt(had_P*had_P + protonMass*protonMass); @@ -302,9 +311,10 @@ Int_t THcCoinTime::Process( const THaEvData& evdata ) fROC2_ePiCoinTime = fROC2_RAW_CoinTime + sign*( elec_coinCorr - had_coinCorr_Pion) - eHad_CT_Offset; //POSITRON - fROC1_ePosCoinTime = fROC1_RAW_CoinTime + sign*( elec_coinCorr + had_coinCorr_Positron) - eHad_CT_Offset ; - fROC2_ePosCoinTime = fROC2_RAW_CoinTime + sign*( elec_coinCorr + had_coinCorr_Positron) - eHad_CT_Offset; + fROC1_ePosCoinTime = fROC1_RAW_CoinTime + sign*( elec_coinCorr - had_coinCorr_Positron) - eHad_CT_Offset ; + fROC2_ePosCoinTime = fROC2_RAW_CoinTime + sign*( elec_coinCorr - had_coinCorr_Positron) - eHad_CT_Offset; +