34 const
char* description,
36 THaDetectorBase* parent )
37 : THaSubDetector(name,description,parent),
38 fParentHitList(0), fCluster(0),frPosAdcErrorFlag(0), frNegAdcErrorFlag(0),
39 frPosTDCHits(0), frNegTDCHits(0), frPosADCHits(0), frNegADCHits(0),
40 frPosADCSums(0), frNegADCSums(0), frPosADCPeds(0), frNegADCPeds(0),
41 fHodoHits(0), frPosTdcTimeRaw(0), frPosAdcPedRaw(0),
42 frPosAdcPulseIntRaw(0), frPosAdcPulseAmpRaw(0),
43 frPosAdcPulseTimeRaw(0), frPosTdcTime(0), frPosAdcPed(0),
44 frPosAdcPulseInt(0), frPosAdcPulseAmp(0), frPosAdcPulseTime(0),
45 frNegTdcTimeRaw(0), frNegAdcPedRaw(0), frNegAdcPulseIntRaw(0),
46 frNegAdcPulseAmpRaw(0), frNegAdcPulseTimeRaw(0), frNegTdcTime(0),
47 frNegAdcPed(0), frNegAdcPulseInt(0), frNegAdcPulseAmp(0),
48 frNegAdcPulseTime(0), fPosCenter(0), fHodoPosMinPh(0),
49 fHodoNegMinPh(0), fHodoPosPhcCoeff(0), fHodoNegPhcCoeff(0),
50 fHodoPosTimeOffset(0), fHodoNegTimeOffset(0), fHodoVelLight(0),
51 fHodoPosInvAdcOffset(0), fHodoNegInvAdcOffset(0),
52 fHodoPosAdcTimeWindowMin(0), fHodoPosAdcTimeWindowMax(0),
53 fHodoNegAdcTimeWindowMin(0), fHodoNegAdcTimeWindowMax(0),
54 fHodoPosInvAdcLinear(0), fHodoNegInvAdcLinear(0),
55 fHodoPosInvAdcAdc(0), fHodoNegInvAdcAdc(0), fHodoVelFit(0),
56 fHodoCableFit(0), fHodo_LCoeff(0), fHodoPos_c1(0), fHodoNeg_c1(0),
57 fHodoPos_c2(0), fHodoNeg_c2(0), fHodoSigma(0), fPosPedSum(0),
58 fPosPedSum2(0), fPosPedLimit(0), fPosPedCount(0), fNegPedSum(0),
59 fNegPedSum2(0), fNegPedLimit(0), fNegPedCount(0), fPosPed(0),
60 fPosSig(0), fPosThresh(0), fNegPed(0), fNegSig(0), fNegThresh(0)
67 frPosAdcErrorFlag =
new TClonesArray(
"THcSignalHit", 16);
68 frNegAdcErrorFlag =
new TClonesArray(
"THcSignalHit", 16);
81 frPosAdcPulseIntRaw =
new TClonesArray(
"THcSignalHit", 16);
82 frPosAdcPulseAmpRaw =
new TClonesArray(
"THcSignalHit", 16);
83 frPosAdcPulseTimeRaw =
new TClonesArray(
"THcSignalHit", 16);
89 frPosAdcPulseTime =
new TClonesArray(
"THcSignalHit", 16);
93 frNegAdcPulseIntRaw =
new TClonesArray(
"THcSignalHit", 16);
94 frNegAdcPulseAmpRaw =
new TClonesArray(
"THcSignalHit", 16);
95 frNegAdcPulseTimeRaw =
new TClonesArray(
"THcSignalHit", 16);
100 frNegAdcPulseAmp =
new TClonesArray(
"THcSignalHit", 16);
101 frNegAdcPulseTime =
new TClonesArray(
"THcSignalHit", 16);
104 fPlaneNum = planenum;
105 fTotPlanes = planenum;
115 delete frPosAdcErrorFlag; frPosAdcErrorFlag = NULL;
116 delete frNegAdcErrorFlag; frNegAdcErrorFlag = NULL;
118 delete fCluster; fCluster = NULL;
130 delete frPosTdcTimeRaw;
131 delete frPosAdcPedRaw;
132 delete frPosAdcPulseIntRaw;
133 delete frPosAdcPulseAmpRaw;
134 delete frPosAdcPulseTimeRaw;
138 delete frPosAdcPulseInt;
139 delete frPosAdcPulseAmp;
140 delete frPosAdcPulseTime;
142 delete frNegTdcTimeRaw;
143 delete frNegAdcPedRaw;
144 delete frNegAdcPulseIntRaw;
145 delete frNegAdcPulseAmpRaw;
146 delete frNegAdcPulseTimeRaw;
150 delete frNegAdcPulseInt;
151 delete frNegAdcPulseAmp;
152 delete frNegAdcPulseTime;
154 delete [] fPosCenter; fPosCenter = 0;
156 delete [] fHodoPosMinPh; fHodoPosMinPh = NULL;
157 delete [] fHodoNegMinPh; fHodoNegMinPh = NULL;
158 delete [] fHodoPosPhcCoeff; fHodoPosPhcCoeff = NULL;
159 delete [] fHodoNegPhcCoeff; fHodoNegPhcCoeff = NULL;
160 delete [] fHodoPosTimeOffset; fHodoPosTimeOffset = NULL;
161 delete [] fHodoNegTimeOffset; fHodoNegTimeOffset = NULL;
162 delete [] fHodoPosInvAdcOffset; fHodoPosInvAdcOffset = NULL;
163 delete [] fHodoNegInvAdcOffset; fHodoNegInvAdcOffset = NULL;
164 delete [] fHodoPosInvAdcLinear; fHodoPosInvAdcLinear = NULL;
165 delete [] fHodoNegInvAdcLinear; fHodoNegInvAdcLinear = NULL;
166 delete [] fHodoPosAdcTimeWindowMax; fHodoPosAdcTimeWindowMax = NULL;
167 delete [] fHodoPosAdcTimeWindowMin; fHodoPosAdcTimeWindowMin = NULL;
168 delete [] fHodoNegAdcTimeWindowMax; fHodoNegAdcTimeWindowMax = NULL;
169 delete [] fHodoNegAdcTimeWindowMin; fHodoNegAdcTimeWindowMin = NULL;
170 delete [] fHodoNegInvAdcLinear; fHodoNegInvAdcLinear = NULL;
171 delete [] fHodoPosInvAdcAdc; fHodoPosInvAdcAdc = NULL;
172 delete [] fHodoNegInvAdcAdc; fHodoNegInvAdcAdc = NULL;
173 delete [] fHodoVelFit; fHodoVelFit = NULL;
174 delete [] fHodoCableFit; fHodoCableFit = NULL;
175 delete [] fHodo_LCoeff; fHodo_LCoeff = NULL;
176 delete [] fHodoPos_c1; fHodoPos_c1 = NULL;
177 delete [] fHodoNeg_c1; fHodoNeg_c1 = NULL;
178 delete [] fHodoPos_c2; fHodoPos_c2 = NULL;
179 delete [] fHodoNeg_c2; fHodoNeg_c2 = NULL;
182 delete [] fHodoVelLight; fHodoVelLight = NULL;
183 delete [] fHodoSigma; fHodoSigma = NULL;
185 delete [] fPosPedSum; fPosPedSum = 0;
186 delete [] fPosPedSum2; fPosPedSum2 = 0;
187 delete [] fPosPedLimit; fPosPedLimit = 0;
188 delete [] fPosPedCount; fPosPedCount = 0;
189 delete [] fNegPedSum; fNegPedSum = 0;
190 delete [] fNegPedSum2; fNegPedSum2 = 0;
191 delete [] fNegPedLimit; fNegPedLimit = 0;
192 delete [] fNegPedCount; fNegPedCount = 0;
193 delete [] fPosPed; fPosPed = 0;
194 delete [] fNegPed; fNegPed = 0;
195 delete [] fPosThresh; fPosThresh = 0;
196 delete [] fNegThresh; fNegThresh = 0;
206 return fStatus = kInitError;
213 if( (status=THaSubDetector::Init( date )) )
214 return fStatus = status;
221 return fStatus = kOK;
234 prefix[0]=tolower(GetParent()->GetPrefix()[0]);
238 string parname =
"scin_" + string(
GetName()) +
"_nr";
239 DBRequest list_1[] = {
240 {parname.c_str(), &fNelem, kInt},
247 char tmpleft[6], tmpright[6];
248 if (fPlaneNum==1 || fPlaneNum==3) {
249 strcpy(tmpleft,
"left");
250 strcpy(tmpright,
"right");
253 strcpy(tmpleft,
"bot");
254 strcpy(tmpright,
"top");
257 delete [] fPosCenter; fPosCenter =
new Double_t[fNelem];
261 {
Form(
"scin_%s_dzpos",
GetName()), &fDzpos, kDouble},
263 {
Form(
"scin_%s_spacing",
GetName()), &fSpacing, kDouble},
264 {
Form(
"scin_%s_%s",
GetName(),tmpleft), &fPosLeft,kDouble},
265 {
Form(
"scin_%s_%s",
GetName(),tmpright), &fPosRight,kDouble},
266 {
Form(
"scin_%s_offset",
GetName()), &fPosOffset, kDouble},
267 {
Form(
"scin_%s_center",
GetName()), fPosCenter,kDouble,fNelem},
268 {
"tofusinginvadc", &fTofUsingInvAdc, kInt, 0, 1},
269 {
"hodo_adc_mode", &fADCMode, kInt, 0, 1},
270 {
"hodo_pedestal_scale", &fADCPedScaleFactor, kDouble, 0, 1},
271 {
"hodo_adc_diag_cut", &fADCDiagCut, kInt, 0, 1},
272 {
"cosmicflag", &fCosmicFlag, kInt, 0, 1},
273 {
"hodo_debug_adc", &fDebugAdc, kInt, 0, 1},
280 fADCMode = kADCDynamicPedestal;
281 fADCPedScaleFactor = 1.0;
285 if (fCosmicFlag==1) cout <<
" setup for cosmics in scint plane"<< endl;
304 fHodoPosMinPh =
new Double_t[fNelem];
305 fHodoNegMinPh =
new Double_t[fNelem];
306 fHodoPosPhcCoeff =
new Double_t[fNelem];
307 fHodoNegPhcCoeff =
new Double_t[fNelem];
308 fHodoPosTimeOffset =
new Double_t[fNelem];
309 fHodoNegTimeOffset =
new Double_t[fNelem];
310 fHodoVelLight =
new Double_t[fNelem];
311 fHodoPosInvAdcOffset =
new Double_t[fNelem];
312 fHodoNegInvAdcOffset =
new Double_t[fNelem];
313 fHodoPosInvAdcLinear =
new Double_t[fNelem];
314 fHodoNegInvAdcLinear =
new Double_t[fNelem];
315 fHodoPosAdcTimeWindowMin =
new Double_t[fNelem];
316 fHodoNegAdcTimeWindowMin =
new Double_t[fNelem];
317 fHodoPosAdcTimeWindowMax =
new Double_t[fNelem];
318 fHodoNegAdcTimeWindowMax =
new Double_t[fNelem];
319 fHodoPosInvAdcAdc =
new Double_t[fNelem];
320 fHodoNegInvAdcAdc =
new Double_t[fNelem];
325 fHodoCableFit=
new Double_t [fNelem];
362 fHodoSigma[j] =
TMath::Sqrt(possigma*possigma+negsigma*negsigma)/2.0;
391 InitializePedestals();
394 fNumGoodPosAdcHits = vector<Int_t> (fNelem, 0.0);
395 fNumGoodNegAdcHits = vector<Int_t> (fNelem, 0.0);
396 fNumGoodPosTdcHits = vector<Int_t> (fNelem, 0.0);
397 fNumGoodNegTdcHits = vector<Int_t> (fNelem, 0.0);
399 fGoodPosAdcPed = vector<Double_t> (fNelem, 0.0);
400 fGoodNegAdcPed = vector<Double_t> (fNelem, 0.0);
401 fGoodPosAdcMult = vector<Double_t> (fNelem, 0.0);
402 fGoodNegAdcMult = vector<Double_t> (fNelem, 0.0);
403 fGoodPosAdcHitUsed = vector<Double_t> (fNelem, 0.0);
404 fGoodNegAdcHitUsed = vector<Double_t> (fNelem, 0.0);
405 fGoodPosAdcPulseAmp = vector<Double_t> (fNelem, 0.0);
406 fGoodNegAdcPulseAmp = vector<Double_t> (fNelem, 0.0);
407 fGoodPosAdcPulseInt = vector<Double_t> (fNelem, 0.0);
408 fGoodNegAdcPulseInt = vector<Double_t> (fNelem, 0.0);
409 fGoodPosAdcPulseTime = vector<Double_t> (fNelem, 0.0);
410 fGoodNegAdcPulseTime = vector<Double_t> (fNelem, 0.0);
411 fGoodPosAdcTdcDiffTime = vector<Double_t> (fNelem, 0.0);
412 fGoodNegAdcTdcDiffTime = vector<Double_t> (fNelem, 0.0);
414 fGoodPosTdcTimeUnCorr = vector<Double_t> (fNelem, 0.0);
415 fGoodNegTdcTimeUnCorr = vector<Double_t> (fNelem, 0.0);
416 fGoodPosTdcTimeCorr = vector<Double_t> (fNelem, 0.0);
417 fGoodNegTdcTimeCorr = vector<Double_t> (fNelem, 0.0);
418 fGoodPosTdcTimeTOFCorr = vector<Double_t> (fNelem, 0.0);
419 fGoodNegTdcTimeTOFCorr = vector<Double_t> (fNelem, 0.0);
420 fGoodPosTdcTimeWalkCorr = vector<Double_t> (fNelem, 0.0);
421 fGoodNegTdcTimeWalkCorr = vector<Double_t> (fNelem, 0.0);
422 fGoodDiffDistTrack = vector<Double_t> (fNelem, 0.0);
434 if( mode == kDefine && fIsSetup )
return kOK;
435 fIsSetup = ( mode == kDefine );
441 {
"posAdcErrorFlag",
"Error Flag for When FPGA Fails",
"frPosAdcErrorFlag.THcSignalHit.GetData()"},
442 {
"negAdcErrorFlag",
"Error Flag for When FPGA Fails",
"frNegAdcErrorFlag.THcSignalHit.GetData()"},
444 {
"posTdcTimeRaw",
"List of positive raw TDC values.",
"frPosTdcTimeRaw.THcSignalHit.GetData()"},
445 {
"posAdcPedRaw",
"List of positive raw ADC pedestals",
"frPosAdcPedRaw.THcSignalHit.GetData()"},
446 {
"posAdcPulseIntRaw",
"List of positive raw ADC pulse integrals.",
"frPosAdcPulseIntRaw.THcSignalHit.GetData()"},
447 {
"posAdcPulseAmpRaw",
"List of positive raw ADC pulse amplitudes.",
"frPosAdcPulseAmpRaw.THcSignalHit.GetData()"},
448 {
"posAdcPulseTimeRaw",
"List of positive raw ADC pulse times.",
"frPosAdcPulseTimeRaw.THcSignalHit.GetData()"},
450 {
"posTdcTime",
"List of positive TDC values.",
"frPosTdcTime.THcSignalHit.GetData()"},
451 {
"posAdcPed",
"List of positive ADC pedestals",
"frPosAdcPed.THcSignalHit.GetData()"},
452 {
"posAdcPulseInt",
"List of positive ADC pulse integrals.",
"frPosAdcPulseInt.THcSignalHit.GetData()"},
453 {
"posAdcPulseAmp",
"List of positive ADC pulse amplitudes.",
"frPosAdcPulseAmp.THcSignalHit.GetData()"},
454 {
"posAdcPulseTime",
"List of positive ADC pulse times.",
"frPosAdcPulseTime.THcSignalHit.GetData()"},
456 {
"negTdcTimeRaw",
"List of negative raw TDC values.",
"frNegTdcTimeRaw.THcSignalHit.GetData()"},
457 {
"negAdcPedRaw",
"List of negative raw ADC pedestals",
"frNegAdcPedRaw.THcSignalHit.GetData()"},
458 {
"negAdcPulseIntRaw",
"List of negative raw ADC pulse integrals.",
"frNegAdcPulseIntRaw.THcSignalHit.GetData()"},
459 {
"negAdcPulseAmpRaw",
"List of negative raw ADC pulse amplitudes.",
"frNegAdcPulseAmpRaw.THcSignalHit.GetData()"},
460 {
"negAdcPulseTimeRaw",
"List of negative raw ADC pulse times.",
"frNegAdcPulseTimeRaw.THcSignalHit.GetData()"},
462 {
"negTdcTime",
"List of negative TDC values.",
"frNegTdcTime.THcSignalHit.GetData()"},
463 {
"negAdcPed",
"List of negative ADC pedestals",
"frNegAdcPed.THcSignalHit.GetData()"},
464 {
"negAdcPulseInt",
"List of negative ADC pulse integrals.",
"frNegAdcPulseInt.THcSignalHit.GetData()"},
465 {
"negAdcPulseAmp",
"List of negative ADC pulse amplitudes.",
"frNegAdcPulseAmp.THcSignalHit.GetData()"},
466 {
"negAdcPulseTime",
"List of negative ADC pulse times.",
"frNegAdcPulseTime.THcSignalHit.GetData()"},
468 {
"totNumPosAdcHits",
"Total Number of Positive ADC Hits",
"fTotNumPosAdcHits"},
469 {
"totNumNegAdcHits",
"Total Number of Negative ADC Hits",
"fTotNumNegAdcHits"},
470 {
"totNumAdcHits",
"Total Number of PMTs Hit (as measured by ADCs)",
"fTotNumAdcHits"},
472 {
"totNumPosTdcHits",
"Total Number of Positive TDC Hits",
"fTotNumPosTdcHits"},
473 {
"totNumNegTdcHits",
"Total Number of Negative TDC Hits",
"fTotNumNegTdcHits"},
474 {
"totNumTdcHits",
"Total Number of PMTs Hits (as measured by TDCs)",
"fTotNumTdcHits"},
477 DefineVarsFromList( vars, mode);
481 {
"nhits",
"Number of paddle hits (passed TDC && ADC Min and Max cuts for either end)",
"GetNScinHits() "},
483 {
"posTdcCounter",
"List of positive TDC counter numbers.",
"frPosTdcTimeRaw.THcSignalHit.GetPaddleNumber()"},
484 {
"posAdcCounter",
"List of positive ADC counter numbers.",
"frPosAdcPulseIntRaw.THcSignalHit.GetPaddleNumber()"},
485 {
"negTdcCounter",
"List of negative TDC counter numbers.",
"frNegTdcTimeRaw.THcSignalHit.GetPaddleNumber()"},
486 {
"negAdcCounter",
"List of negative ADC counter numbers.",
"frNegAdcPulseIntRaw.THcSignalHit.GetPaddleNumber()"},
488 {
"fptime",
"Time at focal plane",
"GetFpTime()"},
490 {
"numGoodPosAdcHits",
"Number of Good Positive ADC Hits Per PMT",
"fNumGoodPosAdcHits"},
491 {
"numGoodNegAdcHits",
"Number of Good Negative ADC Hits Per PMT",
"fNumGoodNegAdcHits"},
493 {
"numGoodPosTdcHits",
"Number of Good Positive TDC Hits Per PMT",
"fNumGoodPosTdcHits"},
494 {
"numGoodNegTdcHits",
"Number of Good Negative TDC Hits Per PMT",
"fNumGoodNegTdcHits"},
497 {
"totNumGoodPosAdcHits",
"Total Number of Good Positive ADC Hits",
"fTotNumGoodPosAdcHits"},
498 {
"totNumGoodNegAdcHits",
"Total Number of Good Negative ADC Hits",
"fTotNumGoodNegAdcHits"},
499 {
"totNumGoodAdcHits",
"TotalNumber of Good ADC Hits Per PMT",
"fTotNumGoodAdcHits"},
501 {
"totNumGoodPosTdcHits",
"Total Number of Good Positive TDC Hits",
"fTotNumGoodPosTdcHits"},
502 {
"totNumGoodNegTdcHits",
"Total Number of Good Negative TDC Hits",
"fTotNumGoodNegTdcHits"},
503 {
"totNumGoodTdcHits",
"TotalNumber of Good TDC Hits Per PMT",
"fTotNumGoodTdcHits"},
509 {
"GoodPosAdcPed",
"List of Positive ADC pedestals (passed TDC && ADC Min and Max cuts for either end)",
"fGoodPosAdcPed"},
510 {
"GoodNegAdcPed",
"List of Negative ADC pedestals (passed TDC && ADC Min and Max cuts for either end)",
"fGoodNegAdcPed"},
511 {
"GoodPosAdcMult",
"List of Positive ADC Mult (passed TDC && ADC Min and Max cuts for either end)",
"fGoodPosAdcMult"},
512 {
"GoodNegAdcMult",
"List of Negative ADC Mult (passed TDC && ADC Min and Max cuts for either end)",
"fGoodNegAdcMult"},
513 {
"GoodPosAdcHitUsed",
"List of Positive ADC Hit Used (passed TDC && ADC Min and Max cuts for either end)",
"fGoodPosAdcHitUsed"},
514 {
"GoodNegAdcHitUsed",
"List of Negative ADC Hit Used (passed TDC && ADC Min and Max cuts for either end)",
"fGoodNegAdcHitUsed"},
516 {
"GoodNegTdcTimeUnCorr",
"List of negative TDC values (passed TDC && ADC Min and Max cuts for either end)",
"fGoodNegTdcTimeUnCorr"},
517 {
"GoodNegTdcTimeCorr",
"List of negative corrected TDC values (corrected for PMT offset and ADC)",
"fGoodNegTdcTimeCorr"},
518 {
"GoodNegTdcTimeTOFCorr",
"List of negative corrected TDC values (corrected for TOF)",
"fGoodNegTdcTimeTOFCorr"},
519 {
"GoodNegTdcTimeWalkCorr",
"List of negative corrected TDC values (corrected for Time-Walk)",
"fGoodNegTdcTimeWalkCorr"},
520 {
"GoodNegAdcPulseInt",
"List of negative ADC values (passed TDC && ADC Min and Max cuts for either end)",
"fGoodNegAdcPulseInt"},
521 {
"GoodPosTdcTimeUnCorr",
"List of positive TDC values (passed TDC && ADC Min and Max cuts for either end)",
"fGoodPosTdcTimeUnCorr"},
522 {
"GoodPosTdcTimeCorr",
"List of positive corrected TDC values (corrected for PMT offset and ADC)",
"fGoodPosTdcTimeCorr"},
523 {
"GoodPosTdcTimeTOFCorr",
"List of positive corrected TDC values (corrected for TOF)",
"fGoodPosTdcTimeTOFCorr"},
524 {
"GoodPosTdcTimeWalkCorr",
"List of positive corrected TDC values (corrected for Time-Walk)",
"fGoodPosTdcTimeWalkCorr"},
525 {
"GoodPosAdcPulseInt",
"List of positive ADC values (passed TDC && ADC Min and Max cuts for either end)",
"fGoodPosAdcPulseInt"},
526 {
"GoodPosAdcPulseAmp",
"List of positive ADC peak amp (passed TDC && ADC Min and Max cuts for either end)",
"fGoodPosAdcPulseAmp"},
527 {
"GoodNegAdcPulseAmp",
"List of Negative ADC peak amp (passed TDC && ADC Min and Max cuts for either end)",
"fGoodNegAdcPulseAmp"},
528 {
"GoodPosAdcPulseTime",
"List of positive ADC time (passed TDC && ADC Min and Max cuts for either end)",
"fGoodPosAdcPulseTime"},
529 {
"GoodNegAdcPulseTime",
"List of Negative ADC time (passed TDC && ADC Min and Max cuts for either end)",
"fGoodNegAdcPulseTime"},
530 {
"GoodPosAdcTdcDiffTime",
"List of positive TDC - ADC time (passed TDC && ADC Min and Max cuts for either end)",
"fGoodPosAdcTdcDiffTime"},
531 {
"GoodNegAdcTdcDiffTime",
"List of Negative TDC - ADC time (passed TDC && ADC Min and Max cuts for either end)",
"fGoodNegAdcTdcDiffTime"},
532 {
"DiffDisTrack",
"Difference between track and scintillator position (cm)",
"fHitDistance"},
533 {
"DiffDisTrackCorr",
"TW Corrected Dist Difference between track and scintillator position (cm)",
"fGoodDiffDistTrack"},
534 {
"TrackXPos",
"Track X position at plane (cm)",
"fTrackXPosition"},
535 {
"TrackYPos",
"Track Y position at plane (cm)",
"fTrackYPosition"},
536 {
"ScinXPos",
"Scint Average Y position at plane (cm)",
"fScinXPos"},
537 {
"ScinYPos",
"Scint Average Xposition at plane (cm)",
"fScinYPos"},
538 {
"NumClus",
"Number of clusters",
"fNumberClusters"},
539 {
"Clus.Pos",
"Position of each paddle clusters",
"fCluster.THcScintPlaneCluster.GetClusterPosition()"},
540 {
"Clus.Size",
"Size of each paddle clusters",
"fCluster.THcScintPlaneCluster.GetClusterSize()"},
541 {
"Clus.Flag",
"Flag of each paddle clusters",
"fCluster.THcScintPlaneCluster.GetClusterFlag()"},
542 {
"Clus.UsedFlag",
"USed Flag of each paddle clusters",
"fCluster.THcScintPlaneCluster.GetClusterUsedFlag()"},
543 {
"PosTdcRefTime",
"Reference time of Pos TDC",
"fPosTdcRefTime"},
544 {
"NegTdcRefTime",
"Reference time of Neg TDC",
"fNegTdcRefTime"},
545 {
"PosAdcRefTime",
"Reference time of Pos ADC",
"fPosAdcRefTime"},
546 {
"NegAdcRefTime",
"Reference time of Neg aDC",
"fNegAdcRefTime"},
547 {
"PosTdcRefDiffTime",
"Reference Diff time of Pos TDC",
"fPosTdcRefDiffTime"},
548 {
"NegTdcRefDiffTime",
"Reference Diff time of Neg TDC",
"fNegTdcRefDiffTime"},
549 {
"PosAdcRefDiffTime",
"Reference Diff time of Pos ADC",
"fPosAdcRefDiffTime"},
550 {
"NegAdcRefDiffTime",
"Reference Diff time of Neg aDC",
"fNegAdcRefDiffTime"},
555 return DefineVarsFromList(vars, mode);
569 frPosAdcErrorFlag->Clear();
570 frNegAdcErrorFlag->Clear();
573 frPosTDCHits->Clear();
574 frNegTDCHits->Clear();
575 frPosADCHits->Clear();
576 frNegADCHits->Clear();
578 frPosTdcTimeRaw->Clear();
579 frPosAdcPedRaw->Clear();
580 frPosAdcPulseIntRaw->Clear();
581 frPosAdcPulseAmpRaw->Clear();
582 frPosAdcPulseTimeRaw->Clear();
584 frPosTdcTime->Clear();
585 frPosAdcPed->Clear();
586 frPosAdcPulseInt->Clear();
587 frPosAdcPulseAmp->Clear();
588 frPosAdcPulseTime->Clear();
590 frNegTdcTimeRaw->Clear();
591 frNegAdcPedRaw->Clear();
592 frNegAdcPulseIntRaw->Clear();
593 frNegAdcPulseAmpRaw->Clear();
594 frNegAdcPulseTimeRaw->Clear();
596 frNegTdcTime->Clear();
597 frNegAdcPed->Clear();
598 frNegAdcPulseInt->Clear();
599 frNegAdcPulseAmp->Clear();
600 frNegAdcPulseTime->Clear();
604 for (
UInt_t ielem = 0; ielem < fNumGoodPosAdcHits.size(); ielem++)
605 fNumGoodPosAdcHits.at(ielem) = 0;
606 for (
UInt_t ielem = 0; ielem < fNumGoodNegAdcHits.size(); ielem++)
607 fNumGoodNegAdcHits.at(ielem) = 0;
609 for (
UInt_t ielem = 0; ielem < fNumGoodPosTdcHits.size(); ielem++)
610 fNumGoodPosTdcHits.at(ielem) = 0;
611 for (
UInt_t ielem = 0; ielem < fNumGoodNegTdcHits.size(); ielem++)
612 fNumGoodNegTdcHits.at(ielem) = 0;
615 for (
UInt_t ielem = 0; ielem < fGoodPosAdcPed.size(); ielem++) {
616 fGoodPosAdcPed.at(ielem) = 0.0;
617 fGoodPosAdcMult.at(ielem) = 0.0;
618 fGoodPosAdcHitUsed.at(ielem) = 0.0;
619 fGoodPosAdcPulseInt.at(ielem) = 0.0;
620 fGoodPosAdcPulseAmp.at(ielem) = 0.0;
621 fGoodPosAdcPulseTime.at(ielem) =
kBig;
622 fGoodPosAdcTdcDiffTime.at(ielem) =
kBig;
624 for (
UInt_t ielem = 0; ielem < fGoodNegAdcPed.size(); ielem++) {
625 fGoodNegAdcPed.at(ielem) = 0.0;
626 fGoodNegAdcMult.at(ielem) = 0.0;
627 fGoodNegAdcHitUsed.at(ielem) = 0.0;
628 fGoodNegAdcPulseInt.at(ielem) = 0.0;
629 fGoodNegAdcPulseAmp.at(ielem) = 0.0;
630 fGoodNegAdcPulseTime.at(ielem) =
kBig;
631 fGoodNegAdcTdcDiffTime.at(ielem) =
kBig;
635 for (
UInt_t ielem = 0; ielem < fGoodPosTdcTimeUnCorr.size(); ielem++) {
636 fGoodPosTdcTimeUnCorr.at(ielem) =
kBig;
637 fGoodPosTdcTimeCorr.at(ielem) =
kBig;
638 fGoodPosTdcTimeTOFCorr.at(ielem) =
kBig;
639 fGoodPosTdcTimeWalkCorr.at(ielem) =
kBig;
642 for (
UInt_t ielem = 0; ielem < fGoodNegTdcTimeUnCorr.size(); ielem++) {
643 fGoodNegTdcTimeUnCorr.at(ielem) =
kBig;
644 fGoodNegTdcTimeCorr.at(ielem) =
kBig;
645 fGoodNegTdcTimeTOFCorr.at(ielem) =
kBig;
646 fGoodNegTdcTimeWalkCorr.at(ielem) =
kBig;
649 for (
UInt_t ielem = 0; ielem < fGoodDiffDistTrack.size(); ielem++) {
650 fGoodDiffDistTrack.at(ielem) =
kBig;
657 fTrackXPosition =
kBig;
658 fTrackYPosition =
kBig;
660 fPosTdcRefTime =
kBig;
661 fPosAdcRefTime =
kBig;
662 fNegTdcRefTime =
kBig;
663 fNegAdcRefTime =
kBig;
664 fPosTdcRefDiffTime =
kBig;
665 fPosAdcRefDiffTime =
kBig;
666 fNegTdcRefDiffTime =
kBig;
667 fNegAdcRefDiffTime =
kBig;
675 cout <<
" Calling THcScintillatorPlane::Decode " <<
GetName() << endl;
685 cout <<
"*******************************\n";
686 cout <<
"NOW IN THcScintilatorPlane::CoarseProcess!!!!\n";
687 cout <<
"*******************************\n";
722 fPosTdcRefTime =
kBig;
723 fPosAdcRefTime =
kBig;
724 fNegTdcRefTime =
kBig;
725 fNegAdcRefTime =
kBig;
726 fPosTdcRefDiffTime =
kBig;
727 fPosAdcRefDiffTime =
kBig;
728 fNegTdcRefDiffTime =
kBig;
729 fNegAdcRefDiffTime =
kBig;
730 Int_t nrPosTDCHits=0;
731 Int_t nrNegTDCHits=0;
732 Int_t nrPosADCHits=0;
733 Int_t nrNegADCHits=0;
738 frPosTDCHits->Clear();
739 frNegTDCHits->Clear();
740 frPosADCHits->Clear();
741 frNegADCHits->Clear();
742 frPosADCSums->Clear();
743 frNegADCSums->Clear();
744 frPosADCPeds->Clear();
745 frNegADCPeds->Clear();
748 frPosTdcTimeRaw->Clear();
749 frPosAdcPedRaw->Clear();
750 frPosAdcPulseIntRaw->Clear();
751 frPosAdcPulseAmpRaw->Clear();
752 frPosAdcPulseTimeRaw->Clear();
754 frPosTdcTime->Clear();
755 frPosAdcPed->Clear();
756 frPosAdcPulseInt->Clear();
757 frPosAdcPulseAmp->Clear();
758 frPosAdcPulseTime->Clear();
760 frNegTdcTimeRaw->Clear();
761 frNegAdcPedRaw->Clear();
762 frNegAdcPulseIntRaw->Clear();
763 frNegAdcPulseAmpRaw->Clear();
764 frNegAdcPulseTimeRaw->Clear();
766 frNegTdcTime->Clear();
767 frNegAdcPed->Clear();
768 frNegAdcPulseInt->Clear();
769 frNegAdcPulseAmp->Clear();
770 frNegAdcPulseTime->Clear();
774 fTotNumGoodPosAdcHits = 0;
775 fTotNumGoodNegAdcHits = 0;
776 fTotNumGoodAdcHits = 0;
778 fTotNumPosAdcHits = 0;
779 fTotNumNegAdcHits = 0;
783 fTotNumPosTdcHits = 0;
784 fTotNumNegTdcHits = 0;
787 fTotNumGoodPosTdcHits = 0;
788 fTotNumGoodNegTdcHits = 0;
789 fTotNumGoodTdcHits = 0;
795 Int_t ihit = nexthit;
805 while(ihit < nrawhits) {
807 if(hit->
fPlane > fPlaneNum) {
812 Int_t index=padnum-1;
817 if (fPosTdcRefTime ==
kBig) {
821 if (fPosTdcRefTime != rawPosTdcHit.
GetRefTime()) {
822 cout <<
"THcScintillatorPlane: " <<
GetName() <<
" reftime problem at paddle num = " << padnum <<
" TDC pos hits = " << rawPosTdcHit.
GetNHits() << endl;
827 ((
THcSignalHit*) frPosTdcTimeRaw->ConstructedAt(nrPosTdcHits))->Set(padnum, rawPosTdcHit.
GetTimeRaw(thit));
828 ((
THcSignalHit*) frPosTdcTime->ConstructedAt(nrPosTdcHits))->Set(padnum, rawPosTdcHit.
GetTime(thit));
835 if (fNegTdcRefTime ==
kBig) {
839 if (fNegTdcRefTime != rawNegTdcHit.
GetRefTime()) {
840 cout <<
"THcScintillatorPlane: " <<
GetName()<<
" Neg TDC reftime problem at paddle num = " << padnum <<
" TDC neg hits = " << rawNegTdcHit.
GetNHits() << endl;
846 ((
THcSignalHit*) frNegTdcTimeRaw->ConstructedAt(nrNegTdcHits))->Set(padnum, rawNegTdcHit.
GetTimeRaw(thit));
847 ((
THcSignalHit*) frNegTdcTime->ConstructedAt(nrNegTdcHits))->Set(padnum, rawNegTdcHit.
GetTime(thit));
854 if (fPosAdcRefTime ==
kBig ) {
858 if (fPosAdcRefTime != rawPosAdcHit.
GetRefTime()) {
859 cout <<
"THcScintillatorPlane: " <<
GetName()<<
" Pos ADC reftime problem at paddle num = " << padnum <<
" ADC pos hits = " << rawPosAdcHit.
GetNPulses() << endl;
865 ((
THcSignalHit*) frPosAdcPedRaw->ConstructedAt(nrPosAdcHits))->Set(padnum, rawPosAdcHit.
GetPedRaw());
866 ((
THcSignalHit*) frPosAdcPed->ConstructedAt(nrPosAdcHits))->Set(padnum, rawPosAdcHit.
GetPed());
876 ((
THcSignalHit*) frPosAdcPulseTime->ConstructedAt(nrPosAdcHits))->Set(padnum, rawPosAdcHit.
GetPulseTime(thit)+fAdcTdcOffset);
887 if (fNegAdcRefTime ==
kBig) {
891 if (fNegAdcRefTime != rawNegAdcHit.
GetRefTime()) {
892 cout <<
"THcScintillatorPlane: " <<
GetName()<<
" Neg ADC reftime problem at paddle num = " << padnum <<
" TDC pos hits = " << rawNegAdcHit.
GetNPulses() << endl;
898 ((
THcSignalHit*) frNegAdcPedRaw->ConstructedAt(nrNegAdcHits))->Set(padnum, rawNegAdcHit.
GetPedRaw());
899 ((
THcSignalHit*) frNegAdcPed->ConstructedAt(nrNegAdcHits))->Set(padnum, rawNegAdcHit.
GetPed());
907 ((
THcSignalHit*) frNegAdcPulseTime->ConstructedAt(nrNegAdcHits))->Set(padnum, rawNegAdcHit.
GetPulseTime(thit)+fAdcTdcOffset);
931 Int_t adchitused_pos=0;
932 Int_t adchitused_neg=0;
952 if(tdc_pos >= fScinTdcMin && tdc_pos <= fScinTdcMax) {
954 good_ielem_postdc = thit;
960 if(tdc_neg >= fScinTdcMin && tdc_neg <= fScinTdcMax) {
962 good_ielem_negtdc = thit;
967 if(fADCMode == kADCDynamicPedestal) {
968 Int_t good_ielem_negadc_test2=-1;
969 Int_t good_ielem_posadc_test2=-1;
971 if (good_ielem_negtdc != -1) {
977 Double_t TdcAdcTimeDiff = tdc_neg*fScinTdcToTime-pulseTime;
979 Bool_t pulseTimeCut =( TdcAdcTimeDiff > fHodoNegAdcTimeWindowMin[index]) && (TdcAdcTimeDiff < fHodoNegAdcTimeWindowMax[index]);
980 if (pulseTimeCut && pulseAmp>max_adcamp_test) {
981 good_ielem_negadc = ielem;
982 max_adcamp_test=pulseAmp;
984 if (abs(TdcAdcTimeDiff) < max_adctdcdiff_test) {
985 good_ielem_negadc_test2 = ielem;
986 max_adctdcdiff_test=abs(TdcAdcTimeDiff);
992 if ( good_ielem_negadc == -1 && good_ielem_negadc_test2 != -1) good_ielem_negadc=good_ielem_negadc_test2;
993 if ( good_ielem_negadc == -1 && good_ielem_negadc_test2 == -1 && rawNegAdcHit.
GetNPulses()>0) {
997 if (good_ielem_negadc != -1 && good_ielem_negadc<rawNegAdcHit.
GetNPulses()) {
998 adcped_neg = rawNegAdcHit.
GetPed();
1000 adchitused_neg = good_ielem_negadc+1;
1001 adcint_neg = rawNegAdcHit.
GetPulseInt(good_ielem_negadc);
1002 adcamp_neg = rawNegAdcHit.
GetPulseAmp(good_ielem_negadc);
1003 if (rawNegAdcHit.
GetPulseAmpRaw(good_ielem_negadc) <= 0) adcamp_neg= 200.;
1004 adctime_neg = rawNegAdcHit.
GetPulseTime(good_ielem_negadc)+fAdcTdcOffset;
1005 badcraw_neg =
kTRUE;
1006 adctdcdifftime_neg=tdc_neg*fScinTdcToTime-adctime_neg;
1010 if (good_ielem_postdc != -1) {
1012 Double_t max_adctdcdiff_test=1000.;
1017 Double_t TdcAdcTimeDiff = tdc_pos*fScinTdcToTime-pulseTime;
1018 Bool_t pulseTimeCut =( TdcAdcTimeDiff > fHodoPosAdcTimeWindowMin[index]) && (TdcAdcTimeDiff < fHodoPosAdcTimeWindowMax[index]);
1020 if (pulseTimeCut && pulseAmp>max_adcamp_test) {
1021 good_ielem_posadc = ielem;
1022 max_adcamp_test=pulseAmp;
1024 if (abs(TdcAdcTimeDiff) < max_adctdcdiff_test) {
1025 good_ielem_posadc_test2 = ielem;
1026 max_adctdcdiff_test=abs(TdcAdcTimeDiff);
1030 if ( good_ielem_posadc == -1 && good_ielem_posadc_test2 != -1) good_ielem_posadc=good_ielem_posadc_test2;
1031 if ( good_ielem_posadc == -1 && good_ielem_posadc_test2 == -1 && rawPosAdcHit.
GetNPulses()>0) good_ielem_posadc=0;
1032 if (good_ielem_posadc != -1 && good_ielem_posadc<rawPosAdcHit.
GetNPulses()) {
1033 adcped_pos = rawPosAdcHit.
GetPed();
1035 adchitused_pos = good_ielem_posadc+1;
1036 adcint_pos = rawPosAdcHit.
GetPulseInt(good_ielem_posadc);
1037 adcamp_pos = rawPosAdcHit.
GetPulseAmp(good_ielem_posadc);
1038 if (rawPosAdcHit.
GetPulseAmpRaw(good_ielem_posadc) <= 0) adcamp_pos= 200.;
1039 adctime_pos = rawPosAdcHit.
GetPulseTime(good_ielem_posadc)+fAdcTdcOffset;
1040 badcraw_pos =
kTRUE;
1041 adctdcdifftime_pos=tdc_pos*fScinTdcToTime-adctime_pos;
1044 }
else if (fADCMode == kADCSampleIntegral) {
1047 badcraw_pos = badcraw_neg =
kTRUE;
1048 }
else if (fADCMode == kADCSampIntDynPed) {
1051 badcraw_pos = badcraw_neg =
kTRUE;
1055 badcraw_pos = badcraw_neg =
kTRUE;
1057 if (adcint_pos >= fADCDiagCut) {
1058 ((
THcSignalHit*) frPosADCHits->ConstructedAt(nrPosADCHits))->Set(padnum, adcint_pos);
1061 ((
THcSignalHit*) frPosADCSums->ConstructedAt(nrPosADCHits))->Set(padnum, samplesum);
1062 ((
THcSignalHit*) frPosADCPeds->ConstructedAt(nrPosADCHits++))->Set(padnum, pedestal);
1064 if (adcint_neg >= fADCDiagCut) {
1065 ((
THcSignalHit*) frNegADCHits->ConstructedAt(nrNegADCHits))->Set(padnum, adcint_neg);
1068 ((
THcSignalHit*) frNegADCSums->ConstructedAt(nrNegADCHits))->Set(padnum, samplesum);
1069 ((
THcSignalHit*) frNegADCPeds->ConstructedAt(nrNegADCHits++))->Set(padnum, pedestal);
1072 if((btdcraw_pos && badcraw_pos) || (btdcraw_neg && badcraw_neg )) {
1073 if (good_ielem_posadc != -1) {
1075 fTotNumGoodPosAdcHits++;
1076 fTotNumGoodAdcHits++;
1078 fNumGoodPosAdcHits.at(padnum-1) = padnum;
1079 fGoodPosAdcPed.at(padnum-1) = adcped_pos;
1080 fGoodPosAdcMult.at(padnum-1) = adcmult_pos;
1081 fGoodPosAdcHitUsed.at(padnum-1) = adchitused_pos;
1082 fGoodPosAdcPulseInt.at(padnum-1) = adcint_pos;
1083 fGoodPosAdcPulseAmp.at(padnum-1) = adcamp_pos;
1084 fGoodPosAdcPulseTime.at(padnum-1) = adctime_pos;
1085 fGoodPosAdcTdcDiffTime.at(padnum-1) = adctdcdifftime_pos;
1087 if (good_ielem_negadc != -1) {
1089 fTotNumGoodNegAdcHits++;
1090 fTotNumGoodAdcHits++;
1092 fNumGoodNegAdcHits.at(padnum-1) = padnum;
1093 fGoodNegAdcPed.at(padnum-1) = adcped_neg;
1094 fGoodNegAdcMult.at(padnum-1) = adcmult_neg;
1095 fGoodNegAdcHitUsed.at(padnum-1) = adchitused_neg;
1096 fGoodNegAdcPulseInt.at(padnum-1) = adcint_neg;
1097 fGoodNegAdcPulseAmp.at(padnum-1) = adcamp_neg;
1098 fGoodNegAdcPulseTime.at(padnum-1) = adctime_neg;
1099 fGoodNegAdcTdcDiffTime.at(padnum-1) = adctdcdifftime_neg;
1103 if (good_ielem_postdc != -1) {
1104 fTotNumGoodPosTdcHits++;
1105 fTotNumGoodTdcHits++;
1107 fNumGoodPosTdcHits.at(padnum-1) = padnum;
1111 if (good_ielem_negtdc != -1) {
1112 fTotNumGoodNegTdcHits++;
1113 fTotNumGoodTdcHits++;
1115 fNumGoodNegTdcHits.at(padnum-1) = padnum;
1117 new( (*fHodoHits)[fNScinHits])
THcHodoHit(tdc_pos, tdc_neg,
1118 adcint_pos, adcint_neg,
1120 ((
THcHodoHit*) fHodoHits->At(fNScinHits))->SetPosADCpeak(adcamp_pos);
1121 ((
THcHodoHit*) fHodoHits->At(fNScinHits))->SetNegADCpeak(adcamp_neg);
1122 ((
THcHodoHit*) fHodoHits->At(fNScinHits))->SetPosADCtime(adctime_pos);
1123 ((
THcHodoHit*) fHodoHits->At(fNScinHits))->SetNegADCtime(adctime_neg);
1127 if(btdcraw_pos&&badcraw_pos) {
1128 fGoodPosTdcTimeUnCorr.at(padnum-1) = tdc_pos*fScinTdcToTime;
1131 tw_corr_pos = 1./
pow(adcamp_pos/fTdc_Thrs,fHodoPos_c2[padnum-1]) - 1./
pow(200./fTdc_Thrs, fHodoPos_c2[padnum-1]);
1133 fGoodPosTdcTimeWalkCorr.at(padnum-1) = tdc_pos*fScinTdcToTime -tw_corr_pos;
1135 if(btdcraw_neg&&badcraw_neg) {
1136 fGoodNegTdcTimeUnCorr.at(padnum-1) = tdc_neg*fScinTdcToTime;
1140 tw_corr_neg = 1./
pow(adcamp_neg/fTdc_Thrs,fHodoNeg_c2[padnum-1]) - 1./
pow(200./fTdc_Thrs, fHodoNeg_c2[padnum-1]);
1142 fGoodNegTdcTimeWalkCorr.at(padnum-1) = tdc_neg*fScinTdcToTime -tw_corr_neg;
1148 if( (btdcraw_pos && btdcraw_neg) && (badcraw_pos && badcraw_neg) ) {
1150 Double_t adc_timec_pos= adctime_pos;
1151 Double_t adc_timec_neg= adctime_neg;
1153 if(fTofUsingInvAdc) {
1154 timec_pos = tdc_pos*fScinTdcToTime
1155 - fHodoPosInvAdcOffset[index]
1157 timec_neg = tdc_neg*fScinTdcToTime
1158 - fHodoNegInvAdcOffset[index]
1161 timec_pos = tdc_pos*fScinTdcToTime -tw_corr_pos + fHodo_LCoeff[index];
1162 timec_neg = tdc_neg*fScinTdcToTime -tw_corr_neg- 2*fHodoCableFit[index] + fHodo_LCoeff[index];
1163 adc_timec_pos = adc_timec_pos -tw_corr_pos + fHodo_LCoeff[index];
1164 adc_timec_neg = adc_timec_neg -tw_corr_neg- 2*fHodoCableFit[index] + fHodo_LCoeff[index];
1167 Double_t TWCorrDiff = fGoodNegTdcTimeWalkCorr.at(padnum-1) - 2*fHodoCableFit[index] - fGoodPosTdcTimeWalkCorr.at(padnum-1);
1169 Double_t fHitDistCorr = 0.5*TWCorrDiff*fHodoVelFit[index];
1173 fGoodDiffDistTrack.at(index) = fHitDistCorr;
1175 Double_t vellight=fHodoVelLight[index];
1177 Double_t dist_from_center=0.5*(timec_neg-timec_pos)*vellight;
1178 Double_t scint_center=0.5*(fPosLeft+fPosRight);
1179 Double_t hit_position=scint_center+dist_from_center;
1180 hit_position=
TMath::Min(hit_position,fPosLeft);
1181 hit_position=
TMath::Max(hit_position,fPosRight);
1182 Double_t scin_corrected_time, postime, negtime;
1183 Double_t adc_postime=adc_timec_pos;
1184 Double_t adc_negtime=adc_timec_neg;
1185 if(fTofUsingInvAdc) {
1186 timec_pos -= (fPosLeft-hit_position)/
1187 fHodoPosInvAdcLinear[index];
1188 timec_neg -= (hit_position-fPosRight)/
1189 fHodoNegInvAdcLinear[index];
1190 scin_corrected_time = 0.5*(timec_pos+timec_neg);
1192 postime = timec_pos + (fZpos+(index%2)*fDzpos)/(29.979*fBetaNominal);
1193 negtime = timec_neg + (fZpos+(index%2)*fDzpos)/(29.979*fBetaNominal);
1195 postime = timec_pos - (fZpos+(index%2)*fDzpos)/(29.979*fBetaNominal);
1196 negtime = timec_neg - (fZpos+(index%2)*fDzpos)/(29.979*fBetaNominal);
1199 scin_corrected_time = 0.5*(timec_neg+timec_pos);
1200 timec_pos= scin_corrected_time;
1201 timec_neg= scin_corrected_time;
1202 Double_t adc_time_corrected = 0.5*(adc_timec_pos+adc_timec_neg);
1204 postime = timec_pos + (fZpos+(index%2)*fDzpos)/(29.979*fBetaNominal);
1205 negtime = timec_neg + (fZpos+(index%2)*fDzpos)/(29.979*fBetaNominal);
1206 adc_postime = adc_time_corrected + (fZpos+(index%2)*fDzpos)/(29.979*fBetaNominal);
1207 adc_negtime = adc_time_corrected + (fZpos+(index%2)*fDzpos)/(29.979*fBetaNominal);
1209 postime = timec_pos - (fZpos+(index%2)*fDzpos)/(29.979*fBetaNominal);
1210 negtime = timec_neg - (fZpos+(index%2)*fDzpos)/(29.979*fBetaNominal);
1211 adc_postime = adc_time_corrected - (fZpos+(index%2)*fDzpos)/(29.979*fBetaNominal);
1212 adc_negtime = adc_time_corrected - (fZpos+(index%2)*fDzpos)/(29.979*fBetaNominal);
1215 ((
THcHodoHit*) fHodoHits->At(fNScinHits))->SetPaddleCenter(fPosCenter[index]);
1216 ((
THcHodoHit*) fHodoHits->At(fNScinHits))->SetCorrectedTimes(timec_pos,timec_neg,
1218 scin_corrected_time);
1219 ((
THcHodoHit*) fHodoHits->At(fNScinHits))->SetPosADCpeak(adcamp_pos);
1220 ((
THcHodoHit*) fHodoHits->At(fNScinHits))->SetNegADCpeak(adcamp_neg);
1221 ((
THcHodoHit*) fHodoHits->At(fNScinHits))->SetPosADCCorrtime(adc_postime);
1222 ((
THcHodoHit*) fHodoHits->At(fNScinHits))->SetNegADCCorrtime(adc_negtime);
1223 ((
THcHodoHit*) fHodoHits->At(fNScinHits))->SetCalcPosition(fHitDistCorr);
1225 fGoodPosTdcTimeCorr.at(padnum-1) = timec_pos;
1226 fGoodNegTdcTimeCorr.at(padnum-1) = timec_neg;
1227 fGoodPosTdcTimeTOFCorr.at(padnum-1) = postime;
1228 fGoodNegTdcTimeTOFCorr.at(padnum-1) = negtime;
1233 if(btdcraw_pos&& badcraw_pos) {
1234 if(fTofUsingInvAdc) {
1235 timec_pos = tdc_pos*fScinTdcToTime
1236 - fHodoPosInvAdcOffset[index]
1239 timec_pos = tdc_pos*fScinTdcToTime -tw_corr_pos + fHodo_LCoeff[index];
1242 if(btdcraw_neg && badcraw_neg) {
1243 if(fTofUsingInvAdc) {
1244 timec_neg = tdc_neg*fScinTdcToTime
1245 - fHodoNegInvAdcOffset[index]
1248 timec_neg = tdc_neg*fScinTdcToTime -tw_corr_neg- 2*fHodoCableFit[index] + fHodo_LCoeff[index];
1252 if (badcraw_neg) adc_neg=adcamp_neg;
1253 if (badcraw_pos) adc_pos=adcamp_pos;
1254 ((
THcHodoHit*) fHodoHits->At(fNScinHits))->SetPaddleCenter(fPosCenter[index]);
1255 ((
THcHodoHit*) fHodoHits->At(fNScinHits))->SetCorrectedTimes(timec_pos,timec_neg);
1256 ((
THcHodoHit*) fHodoHits->At(fNScinHits))->SetNegADCpeak(adc_neg);
1257 ((
THcHodoHit*) fHodoHits->At(fNScinHits))->SetPosADCpeak(adc_pos);
1259 ((
THcHodoHit*) fHodoHits->At(fNScinHits))->SetNegADCtime(adctime_neg);
1261 ((
THcHodoHit*) fHodoHits->At(fNScinHits))->SetNegADCtime(-999.);
1264 ((
THcHodoHit*) fHodoHits->At(fNScinHits))->SetPosADCtime(adctime_pos);
1266 ((
THcHodoHit*) fHodoHits->At(fNScinHits))->SetPosADCtime(-999.);
1268 ((
THcHodoHit*) fHodoHits->At(fNScinHits))->SetCalcPosition(
kBig);
1269 fGoodPosTdcTimeCorr.at(padnum-1) = timec_pos;
1270 fGoodNegTdcTimeCorr.at(padnum-1) = timec_neg;
1271 fGoodPosTdcTimeTOFCorr.at(padnum-1) =
kBig;
1272 fGoodNegTdcTimeTOFCorr.at(padnum-1) =
kBig;
1282 cout <<
"THcScintillatorPlane::ProcessHits " << fPlaneNum <<
" " << nexthit <<
"/" << nrawhits << endl;
1283 cout <<
" Ref problem end *******" << endl;
1298 Int_t ihit = nexthit;
1299 while(ihit < nrawhits) {
1301 if(hit->
fPlane > fPlaneNum) {
1308 if(adcpos <= fPosPedLimit[element]) {
1309 fPosPedSum[element] += adcpos;
1310 fPosPedSum2[element] += adcpos*adcpos;
1311 fPosPedCount[element]++;
1312 if(fPosPedCount[element] == fMinPeds/5) {
1313 fPosPedLimit[element] = 100 + fPosPedSum[element]/fPosPedCount[element];
1316 if(adcneg <= fNegPedLimit[element]) {
1317 fNegPedSum[element] += adcneg;
1318 fNegPedSum2[element] += adcneg*adcneg;
1319 fNegPedCount[element]++;
1320 if(fNegPedCount[element] == fMinPeds/5) {
1321 fNegPedLimit[element] = 100 + fNegPedSum[element]/fNegPedCount[element];
1340 for(
UInt_t i=0; i<fNelem;i++) {
1344 fPosThresh[i] = fPosPed[i] + 15;
1348 fNegThresh[i] = fNegPed[i] + 15;
1364 fNPedestalEvents = 0;
1366 fPosPedSum =
new Int_t [fNelem];
1367 fPosPedSum2 =
new Int_t [fNelem];
1368 fPosPedLimit =
new Int_t [fNelem];
1369 fPosPedCount =
new Int_t [fNelem];
1370 fNegPedSum =
new Int_t [fNelem];
1371 fNegPedSum2 =
new Int_t [fNelem];
1372 fNegPedLimit =
new Int_t [fNelem];
1373 fNegPedCount =
new Int_t [fNelem];
1377 fPosThresh =
new Double_t [fNelem];
1378 fNegThresh =
new Double_t [fNelem];
1379 for(
UInt_t i=0;i<fNelem;i++) {
1382 fPosPedLimit[i] = 1000;
1383 fPosPedCount[i] = 0;
1386 fNegPedLimit[i] = 1000;
1387 fNegPedCount[i] = 0;
Int_t GetTimeRaw(UInt_t iHit=0) const
Gets raw TDC time. In channels.
std::string GetName(const std::string &scope_name)
A single plane of scintillators.
Double_t GetSampleInt() const
Gets pedestal subtracted integral of samples. In channels.
Double_t GetTofTolerance() const
Double_t GetHodoNegInvAdcAdc(Int_t iii) const
Double_t GetHodoNegAdcTimeWindowMax(Int_t iii) const
Int_t GetScinIndex(Int_t nPlane, Int_t nPaddle)
Class representing a single hit for the Hodoscopes.
Double_t GetHodoPosTimeOffset(Int_t iii) const
virtual Int_t ReadDatabase(const TDatime &date)
Double_t GetHodoPosAdcTimeWindowMax(Int_t iii) const
Double_t GetHodoNegTimeOffset(Int_t iii) const
Int_t GetPulseTimeRaw(UInt_t iPulse=0) const
Gets raw pulse time. In subsamples.
Short_t Min(Short_t a, Short_t b)
Int_t GetTdcOffset(Int_t ip) const
Double_t GetHodoCableFit(Int_t iii) const
Double_t GetHodoNeg_c1(Int_t iii) const
UInt_t GetNHits() const
Gets the number of set hits.
Class representing a single raw TDC hit.
Double_t GetAdcTdcOffset(Int_t ip) const
virtual void CalculatePedestals()
Double_t GetHodoVelFit(Int_t iii) const
Double_t GetStartTimeSlop() const
Double_t GetHodoPos_c2(Int_t iii) const
Double_t GetTdcMin() const
double pow(double, double)
Double_t GetHodoLCoeff(Int_t iii) const
Double_t GetHodoNegAdcTimeWindowMin(Int_t iii) const
Double_t GetPed() const
Gets sample pedestal. In channels.
virtual Int_t AccumulatePedestals(TClonesArray *rawhits, Int_t nexthit)
THcRawAdcHit & GetRawAdcHitNeg()
Int_t GetRefDiffTime() const
THcRawTdcHit & GetRawTdcHitNeg()
THcRawAdcHit & GetRawAdcHitPos()
Double_t GetHodoNeg_c2(Int_t iii) const
Int_t GetPulseAmpRaw(UInt_t iPulse=0) const
Gets raw pulse amplitude. In channels.
Double_t GetHodoNegSigma(Int_t iii) const
Double_t GetPulseAmp(UInt_t iPulse=0) const
Gets pedestal subtracted pulse amplitude. In channels.
Double_t GetPulseInt(UInt_t iPulse=0) const
Gets pedestal subtracted pulse integral. In channels.
Double_t GetHodoNegPhcCoeff(Int_t iii) const
virtual Int_t CoarseProcess(TClonesArray &tracks)
Bool_t HasRefTime() const
Queries whether reference time has been set.
Double_t GetTdcMax() const
Double_t GetTdcToTime() const
Int_t GetSampleIntRaw() const
Gets raw integral of sTimeFacamples. In channels.
char * Form(const char *fmt,...)
Double_t GetHodoPos_c1(Int_t iii) const
virtual void Clear(Option_t *opt="")
Int_t GetPulseIntRaw(UInt_t iPulse=0) const
Gets raw pulse integral. In channels.
virtual Int_t DefineVariables(EMode mode=kDefine)
Double_t GetHodoPosInvAdcLinear(Int_t iii) const
Int_t LoadParmValues(const DBRequest *list, const char *prefix="")
Retrieve parameter values from the parameter cache.
Bool_t HasRefTime() const
Double_t GetHodoNegInvAdcOffset(Int_t iii) const
Int_t GetTime(UInt_t iHit=0) const
Gets TDC time. In channels.
Double_t GetHodoSlop(Int_t ip)
virtual Int_t ProcessHits(TClonesArray *rawhits, Int_t nexthit)
UInt_t GetNPulses() const
Gets number of set pulses.
virtual EStatus Init(const TDatime &run_time)
Double_t GetHodoVelLight(Int_t iii) const
Double_t GetHodoPosInvAdcAdc(Int_t iii) const
Double_t GetBetaNominal() const
THcRawTdcHit & GetRawTdcHitPos()
Double_t GetStartTimeCenter() const
ClassImp(THcScintillatorPlane) THcScintillatorPlane
Int_t GetRefTime() const
Gets reference time. In channels.
virtual void InitializePedestals()
Int_t GetPedRaw() const
Gets raw signal pedestal. In channels.
virtual ~THcScintillatorPlane()
Short_t Max(Short_t a, Short_t b)
Double_t GetHodoNegMinPh(Int_t iii) const
Double_t GetHodoPosSigma(Int_t iii) const
Double_t GetPulseTime(UInt_t iPulse=0) const
R__EXTERN class THcParmList * gHcParms
Double_t GetHodoPosAdcTimeWindowMin(Int_t iii) const
Double_t GetHodoPosPhcCoeff(Int_t iii) const
Class representing a single raw hit for a hodoscope paddle.
Double_t Sqrt(Double_t x)
TObject * At(Int_t idx) const
Int_t GetRefDiffTime() const
Double_t GetHodoNegInvAdcLinear(Int_t iii) const
Generic hodoscope consisting of multiple planes with multiple paddles with phototubes on both ends...
Double_t GetHodoPosInvAdcOffset(Int_t iii) const
Double_t GetHodoPosMinPh(Int_t iii) const
Class representing a single raw ADC hit.
virtual Int_t FineProcess(TClonesArray &tracks)
virtual Int_t Decode(const THaEvData &)
Double_t GetTDCThrs() const