#include <DmxShowerPlane.h>
Definition at line 28 of file DmxShowerPlane.h.
DmxShowerPlane::DmxShowerPlane | ( | ) |
Definition at line 45 of file DmxShowerPlane.cxx.
00045 : 00046 fBestHypo(0), 00047 fHypothesisArray(0), 00048 fSecondBestHypo(0), 00049 fSetHypo(0), 00050 fThirdBestHypo(0), 00051 fUgh(0) 00052 { 00053 }
DmxShowerPlane::DmxShowerPlane | ( | AlgConfig & | acd, | |
CandDeMuxDigitHandleItr & | cdhitr, | |||
Int_t | planeNumber | |||
) |
Definition at line 58 of file DmxShowerPlane.cxx.
References CompareHypotheses(), fBestHypo, fCompare, fHypothesisArray, fIsGolden, fIsValid, fNumberOfHypotheses, fNumberOfStrips, fPlaneCharge, fPlaneView, fSecondBestHypo, fThirdBestHypo, fUgh, DmxHypothesis::GetCoG(), Registry::GetInt(), DmxHypothesis::GetMatedSignalRatio(), DmxHypothesis::GetNumberOfStripsUsed(), DmxCompareTypes::kBetter, Msg::kDebug, KeyStat(), KeyValidHypo(), DmxCompareTypes::kWorse, MSG, and SetStrips().
00059 : 00060 fBestCoG(0.), 00061 fBestHypo(0), 00062 fCoG(0.), 00063 fCompare(0), 00064 fHypothesisArray(new TObjArray(acd.GetInt("NumberOfHypotheses"), 0)), 00065 fIsValid(false), 00066 fIsStray(false), 00067 fIsGolden(false), 00068 fNumberOfHypotheses(acd.GetInt("NumberOfHypotheses")), 00069 fNumberOfStrips(0), 00070 fPlaneCharge(0.), 00071 fPlaneNumber(planeNumber), 00072 fPlaneType(DmxPlaneTypes::kShower), 00073 fPlaneView(PlaneView::kUnknown), 00074 fSecondBestCoG(0.), 00075 fSecondBestHypo(0), 00076 fSetHypo(0), 00077 fThirdBestCoG(0.), 00078 fThirdBestHypo(0), 00079 fStripsSet(0), 00080 fUgh(0) 00081 { 00082 //use the AlgConfig object to find the number of hypotheses needed and build 00083 //the TObjArray to hold them 00084 00085 Int_t hypothesisSize = acd.GetInt("HypothesisSize"); 00086 00087 //get the ugli geometry handle from a cand digit 00088 fUgh = new UgliGeomHandle(*cdhitr.Ptr()->GetVldContext()); 00089 00090 Int_t lowerStrip = 0; 00091 Int_t upperStrip = 0; 00092 for(Int_t i = 0; i < fNumberOfHypotheses; i++){ 00093 lowerStrip = i; 00094 upperStrip = i + (hypothesisSize - 1); 00095 fHypothesisArray->AddAt(new DmxHypothesis(acd, cdhitr, lowerStrip, upperStrip), lowerStrip); 00096 } 00097 00098 //set the comparison flag using the AlgConfigDeMux file. 1 = compare for largest value 00099 //0 = compare for smallest value 00100 00101 //create a DmxHypothesisItr over the hypotheses 00102 DmxHypothesisItr hypoItr(fHypothesisArray); 00103 00104 fCompare = hypoItr.Ptr()->GetCompareFlag(); 00105 00106 //create a KeyFunc to sort hypotheses by lower bound 00107 DmxHypothesisKeyFunc *hypStatKF = hypoItr.CreateKeyFunc(); 00108 00109 //program the KeyFunc with the sort function 00110 hypStatKF->SetFun(KeyStat); 00111 00112 //get the NavSet from the iterator and pass the KeyFunc to it 00113 hypoItr.GetSet()->AdoptSortKeyFunc(hypStatKF); 00114 00115 //clear the KF pointer because we no longer own the KeyFunc 00116 00117 hypStatKF = 0; 00118 00119 //program a new KF to select the valid hypotheses 00120 DmxHypothesisKeyFunc *validKF = hypoItr.CreateKeyFunc(); 00121 00122 //program the KF 00123 validKF->SetFun(KeyValidHypo); 00124 00125 //adopt it as a selection function 00126 hypoItr.GetSet()->AdoptSelectKeyFunc(validKF); 00127 validKF = 0; 00128 00129 //set the iterator to the best statistic valid hypo 00130 hypoItr.ResetLast(); 00131 fBestHypo = dynamic_cast<DmxHypothesis *>(hypoItr.Ptr()); 00132 fSecondBestHypo = dynamic_cast<DmxHypothesis *>(hypoItr.Ptr()); 00133 fThirdBestHypo = dynamic_cast<DmxHypothesis *>(hypoItr.Ptr()); 00134 00135 //loop over all valid hypotheses 00136 00137 DmxHypothesis *hypo = 0; 00138 00139 //MSG("Dmx", Msg::kDebug) << "Start Comparison for best Hypothesis" << endl; 00140 hypoItr.ResetFirst(); 00141 00142 if( hypoItr.SizeSelect() > 1 ){ 00143 00144 fIsValid = true; 00145 00146 for(Int_t i = 1; i < 4; i++){ 00147 00148 //loop over the valid hypotheses and set the 3 best 00149 while( (hypo = hypoItr()) ){ 00150 00151 //get the hypotheses from the TObjArray of Hypothesis Objects 00152 //they all should be valid because we are using the selection key on 00153 //IsValid() 00154 00155 //figure out the most strips that can be used in this plane 00156 if(hypo->GetNumberOfStripsUsed()>fNumberOfStrips) 00157 fNumberOfStrips = hypo->GetNumberOfStripsUsed(); 00158 00159 if( i == 1 && CompareHypotheses(hypo, fBestHypo) == DmxCompareTypes::kBetter ){ 00160 fBestHypo = hypo; 00161 } 00162 else if( i == 2 && CompareHypotheses(hypo, fBestHypo) == DmxCompareTypes::kWorse 00163 && CompareHypotheses(hypo, fSecondBestHypo) == DmxCompareTypes::kBetter){ 00164 fSecondBestHypo = hypo; 00165 } 00166 else if( i == 3 && CompareHypotheses(hypo, fSecondBestHypo) == DmxCompareTypes::kWorse 00167 && CompareHypotheses(hypo, fThirdBestHypo) == DmxCompareTypes::kBetter){ 00168 fThirdBestHypo = hypo; 00169 } 00170 00171 }//end while iterator is valid 00172 hypoItr.ResetFirst(); 00173 }//end loops to find best 3 hyps 00174 }//end if more than one valid hypothesis 00175 else if(hypoItr.SizeSelect() == 1){ 00176 00177 //only 1 valid hypothesis, set the three best to it 00178 fBestHypo = hypoItr.Ptr(); 00179 fSecondBestHypo = hypoItr.Ptr(); 00180 fThirdBestHypo = hypoItr.Ptr(); 00181 00182 //check to see if this is a golden plane - since all of the best hypotheses are 00183 //the same, the best just has to have over 90% of its signal mated 00184 if(fBestHypo->GetMatedSignalRatio()>=0.9){ 00185 fIsGolden = true; 00186 SetStrips("best"); 00187 } 00188 00189 } //end if only one valid hypothesis in the plane 00190 00191 if(hypoItr.SizeSelect() == 2){ 00192 //only 2 valid hypotheses, set the third best to be the same as the second best 00193 fThirdBestHypo = fSecondBestHypo; 00194 00195 //check to see if this is a golden plane 00196 //there are two ways: 00197 //1) the best hypothesis has more than 90% of signal nated and the second best 00198 //best has more than 10% less than the best. 00199 //2) the best hypothesis has more than 90% of signal mated and second best hypothesis 00200 //has less than 10% less than the best, but their cogs are less than 3 strips 00201 //apart. 00202 //Otherwise, it is not a golden plane - you dont know which one is correct. 00203 //because the third best is the second best, dont worry about it. 00204 00205 if(fBestHypo->GetMatedSignalRatio()>=0.9 00206 && fSecondBestHypo->GetMatedSignalRatio()<0.8){ 00207 fIsGolden = true; 00208 SetStrips("best"); 00209 } 00210 else if(fBestHypo->GetMatedSignalRatio()>=0.9 00211 && TMath::Abs(fBestHypo->GetCoG()-fSecondBestHypo->GetCoG())<3.){ 00212 fIsGolden = true; 00213 SetStrips("best"); 00214 } 00215 }//end if only 2 valid hypotheses 00216 else if(hypoItr.SizeSelect() >= 3){ 00217 00218 //check to see if this is a golden plane 00219 //there are two ways: 00220 //1) the best hypothesis has more than 90% of signal nated and the second best 00221 //best and third best both have more than 10% less than the best. 00222 //2) the best hypothesis has more than 90% of signal mated and second and third best hypotheses 00223 //have less than 10% less than the best, but their cogs are less than 3 strips 00224 //apart from the best. 00225 //Otherwise, it is not a golden plane - you dont know which one is correct. 00226 //because the third best is the second best, dont worry about it. 00227 00228 if(fBestHypo->GetMatedSignalRatio()>=0.9 00229 && fSecondBestHypo->GetMatedSignalRatio()<0.8 00230 && fThirdBestHypo->GetMatedSignalRatio()<0.8){ 00231 fIsGolden = true; 00232 SetStrips("best"); 00233 } 00234 else if(fBestHypo->GetMatedSignalRatio()>=0.9 00235 && TMath::Abs(fBestHypo->GetCoG()-fSecondBestHypo->GetCoG())<3. 00236 && TMath::Abs(fBestHypo->GetCoG()-fThirdBestHypo->GetCoG())<3.){ 00237 fIsGolden = true; 00238 SetStrips("best"); 00239 } 00240 else if(fBestHypo->GetMatedSignalRatio()>=0.9 00241 && fSecondBestHypo->GetMatedSignalRatio()>=0.8 00242 && TMath::Abs(fBestHypo->GetCoG()-fSecondBestHypo->GetCoG())<3. 00243 && fThirdBestHypo->GetMatedSignalRatio()<0.8){ 00244 fIsGolden = true; 00245 SetStrips("best"); 00246 } 00247 else if(fBestHypo->GetMatedSignalRatio()>=0.9 00248 && fSecondBestHypo->GetMatedSignalRatio()<0.8 00249 && fThirdBestHypo->GetMatedSignalRatio()>=0.8 00250 && TMath::Abs(fBestHypo->GetCoG()-fThirdBestHypo->GetCoG())<3.){ 00251 fIsGolden = true; 00252 SetStrips("best"); 00253 } 00254 00255 //check to see if two of the hypotheses are much better than the third. 00256 //only have to look at the fThirdBestHypo because if the best hypo was 00257 //much better than the second and third best, this would be a golden plane 00258 //if so, then set the third best hypo to the second best hypo 00259 if(fBestHypo->GetMatedSignalRatio()-fThirdBestHypo->GetMatedSignalRatio()>0.2 00260 &&fSecondBestHypo->GetMatedSignalRatio()-fThirdBestHypo->GetMatedSignalRatio()>0.2) 00261 fThirdBestHypo = fSecondBestHypo; 00262 00263 }//end if more than three hypotheses, test for golden plane status 00264 00265 //clear the selection function 00266 hypoItr.GetSet()->AdoptSelectKeyFunc(0); 00267 00268 //get the total charge in the plane 00269 cdhitr.Reset(); 00270 fPlaneView = cdhitr.Ptr()->GetPlexSEIdAltL().GetPlaneView(); 00271 while(cdhitr.IsValid()){ 00272 if(cdhitr.Ptr()->GetDeMuxDigitFlagWord() == 0) fPlaneCharge += cdhitr.Ptr()->GetCharge(); 00273 MSG("DmxShower", Msg::kDebug) << "plane = " << cdhitr.Ptr()->GetPlexSEIdAltL().GetPlane() 00274 << " digit charge = " << cdhitr.Ptr()->GetCharge() << endl; 00275 cdhitr.Next(); 00276 } 00277 00278 //set the cog to the best cog for now 00279 if(fBestHypo && !fIsGolden) SetStrips("best"); 00280 //MSG("DmxShower", Msg::kDebug) << "plane " << fPlaneNumber << " is golden " << (Int_t)fIsGolden << endl; 00281 return; 00282 }
DmxShowerPlane::~DmxShowerPlane | ( | ) | [virtual] |
Definition at line 285 of file DmxShowerPlane.cxx.
References fHypothesisArray, and fUgh.
00286 { 00287 fHypothesisArray->Delete(); 00288 delete fHypothesisArray; 00289 delete fUgh; 00290 //MSG("Dmx", Msg::kDebug) << "deleting Shower Plane for plane " 00291 // << fPlaneNumber << endl; 00292 }
DmxCompareTypes::CompareType_t DmxShowerPlane::CompareHypotheses | ( | DmxHypothesis * | hypo1, | |
DmxHypothesis * | hypo2 | |||
) | [private] |
Definition at line 416 of file DmxShowerPlane.cxx.
References fCompare, DmxHypothesis::GetStat(), DmxHypothesis::GetTieBreakerStat(), DmxCompareTypes::kBetter, DmxCompareTypes::kSame, DmxCompareTypes::kWorse, and stat.
Referenced by DmxShowerPlane().
00417 { 00418 //when fCompare = 0, look for the lower value of the statistic 00419 //when fCompare = 1, look for the higher value of the statistic 00420 //Compare() returns a DmxCompareType 00421 00422 DmxCompareTypes::CompareType_t stat = DmxCompareTypes::kWorse; 00423 00424 //only compare the TieBreakers because you have already sorted the hypotheses by statistic value 00425 if(fCompare == 0){ 00426 if(hypo1->GetStat() < hypo2->GetStat()) stat = DmxCompareTypes::kBetter; 00427 else if( hypo1->GetStat() == hypo2->GetStat() ){ 00428 if( hypo1->GetTieBreakerStat() < hypo2->GetTieBreakerStat() ) stat = DmxCompareTypes::kBetter; 00429 else if( hypo1->GetTieBreakerStat() == hypo2->GetTieBreakerStat() ) stat = DmxCompareTypes::kSame; 00430 } 00431 } 00432 else if(fCompare == 1){ 00433 if(hypo1->GetStat() > hypo2->GetStat()) stat = DmxCompareTypes::kBetter; 00434 else if( hypo1->GetStat() == hypo2->GetStat() ){ 00435 if( hypo1->GetTieBreakerStat() > hypo2->GetTieBreakerStat() ) stat = DmxCompareTypes::kBetter; 00436 else if( hypo1->GetTieBreakerStat() == hypo2->GetTieBreakerStat() ) stat = DmxCompareTypes::kSame; 00437 } 00438 } 00439 return stat; 00440 }
Float_t DmxShowerPlane::GetBestCoG | ( | ) | const |
Definition at line 359 of file DmxShowerPlane.cxx.
References fBestHypo, fPlaneNumber, fUgh, DmxHypothesis::GetCoG(), UgliGeomHandle::GetStripHandle(), UgliStripHandle::GetTPos(), and Detector::kFar.
00360 { 00361 //get the strip end id for the center of gravity for this hypothesis 00362 PlexStripEndId seid(Detector::kFar,fPlaneNumber,TMath::Nint(fBestHypo->GetCoG())); 00363 UgliStripHandle ush = fUgh->GetStripHandle(seid); 00364 00365 return ush.GetTPos(); 00366 //return fBestHypo->GetCoG(); 00367 }
DmxHypothesis * DmxShowerPlane::GetBestHypothesis | ( | ) |
Definition at line 300 of file DmxShowerPlane.cxx.
References fBestHypo.
00301 { 00302 return fBestHypo; 00303 }
Float_t DmxShowerPlane::GetCoG | ( | ) | const [virtual] |
Implements DmxPlane.
Definition at line 306 of file DmxShowerPlane.cxx.
References fCoG, fPlaneNumber, fUgh, UgliGeomHandle::GetStripHandle(), UgliStripHandle::GetTPos(), and Detector::kFar.
Referenced by GetHypothesisCoG(), and SetStrips().
00307 { 00308 //get the strip end id for the center of gravity for this hypothesis 00309 PlexStripEndId seid(Detector::kFar,fPlaneNumber,TMath::Nint(fCoG)); 00310 UgliStripHandle ush = fUgh->GetStripHandle(seid); 00311 00312 return ush.GetTPos(); 00313 //return fCoG; 00314 }
DmxHypothesis * DmxShowerPlane::GetHypothesis | ( | Int_t | hypoLowerBound | ) |
Definition at line 335 of file DmxShowerPlane.cxx.
References fHypothesisArray.
Referenced by AlgDeMuxBeam::DeMuxFirstNPlanesTest().
00336 { 00337 return dynamic_cast<DmxHypothesis *>(fHypothesisArray->At(hypoLowerBound)); 00338 }
Float_t DmxShowerPlane::GetHypothesisCoG | ( | Int_t | hypoLowerBound | ) |
Definition at line 323 of file DmxShowerPlane.cxx.
References fHypothesisArray, fPlaneNumber, fUgh, GetCoG(), UgliGeomHandle::GetStripHandle(), UgliStripHandle::GetTPos(), and Detector::kFar.
Referenced by AlgDeMuxBeam::DeMuxFirstNPlanesTest().
00324 { 00325 Float_t hypCoG = dynamic_cast<DmxHypothesis *>(fHypothesisArray->At(hypoLowerBound))->GetCoG(); 00326 00327 //get the strip end id for the center of gravity for this hypothesis 00328 PlexStripEndId seid(Detector::kFar,fPlaneNumber,TMath::Nint(hypCoG)); 00329 UgliStripHandle ush = fUgh->GetStripHandle(seid); 00330 00331 return ush.GetTPos(); 00332 }
Int_t DmxShowerPlane::GetHypothesisLowerBound | ( | Float_t | tPos | ) | const [virtual] |
Implements DmxPlane.
Definition at line 482 of file DmxShowerPlane.cxx.
References fPlaneNumber, fUgh, UgliScintPlnHandle::GetClosestStrip(), UgliGeomHandle::GetScintPlnHandle(), UgliStripHandle::GetSEId(), PlexStripEndId::GetStrip(), and Detector::kFar.
00483 { 00484 //change the transverse position for the fit into a strip number 00485 PlexStripEndId seid(Detector::kFar, fPlaneNumber, 1); 00486 UgliScintPlnHandle usph = fUgh->GetScintPlnHandle(seid); 00487 UgliStripHandle ush = usph.GetClosestStrip(tPos); 00488 Float_t fitCoG = 1.*ush.GetSEId().GetStrip(); 00489 00490 Int_t hypLowerBound = 0; 00491 if(fitCoG >= 11.5 && fitCoG <= 179.5){hypLowerBound = TMath::Nint(fitCoG-11.5);} 00492 else if(fitCoG < 11.5){hypLowerBound = 0;} 00493 else if(fitCoG > 179.5){hypLowerBound = 168;} 00494 00495 return hypLowerBound; 00496 }
Int_t DmxShowerPlane::GetNumberOfStrips | ( | ) | const [virtual] |
Implements DmxPlane.
Definition at line 295 of file DmxShowerPlane.cxx.
References fNumberOfStrips.
00296 { 00297 return fNumberOfStrips; 00298 }
Float_t DmxShowerPlane::GetPlaneCharge | ( | ) | const [virtual] |
Implements DmxPlane.
Definition at line 533 of file DmxShowerPlane.cxx.
References fPlaneCharge.
00534 { 00535 return fPlaneCharge; 00536 }
Int_t DmxShowerPlane::GetPlaneNumber | ( | ) | const [virtual] |
Implements DmxPlane.
Definition at line 539 of file DmxShowerPlane.cxx.
References fPlaneNumber.
00540 { 00541 return fPlaneNumber; 00542 }
DmxPlaneTypes::PlaneType_t DmxShowerPlane::GetPlaneType | ( | ) | const [virtual] |
Implements DmxPlane.
Definition at line 566 of file DmxShowerPlane.cxx.
References fPlaneType.
00567 { 00568 return fPlaneType; 00569 }
PlaneView::PlaneView_t DmxShowerPlane::GetPlaneView | ( | ) | const [virtual] |
Implements DmxPlane.
Definition at line 572 of file DmxShowerPlane.cxx.
References fPlaneView.
00573 { 00574 return fPlaneView; 00575 }
Float_t DmxShowerPlane::GetSecondBestCoG | ( | ) | const |
Definition at line 370 of file DmxShowerPlane.cxx.
References fPlaneNumber, fSecondBestHypo, fUgh, DmxHypothesis::GetCoG(), UgliGeomHandle::GetStripHandle(), UgliStripHandle::GetTPos(), and Detector::kFar.
00371 { 00372 //get the strip end id for the center of gravity for this hypothesis 00373 PlexStripEndId seid(Detector::kFar,fPlaneNumber,TMath::Nint(fSecondBestHypo->GetCoG())); 00374 UgliStripHandle ush = fUgh->GetStripHandle(seid); 00375 00376 return ush.GetTPos(); 00377 //return fSecondBestHypo->GetCoG(); 00378 }
DmxHypothesis * DmxShowerPlane::GetSecondBestHypothesis | ( | ) |
Definition at line 341 of file DmxShowerPlane.cxx.
References fSecondBestHypo.
00342 { 00343 return fSecondBestHypo; 00344 }
DmxHypothesis * DmxShowerPlane::GetSetHypothesis | ( | ) |
Definition at line 347 of file DmxShowerPlane.cxx.
References fSetHypo.
00348 { 00349 return fSetHypo; 00350 }
Float_t DmxShowerPlane::GetStripCoG | ( | ) | const [virtual] |
Implements DmxPlane.
Definition at line 317 of file DmxShowerPlane.cxx.
References fCoG.
00318 { 00319 return fCoG; 00320 }
Bool_t DmxShowerPlane::GetStripsSetFlag | ( | ) | const [virtual] |
Implements DmxPlane.
Definition at line 392 of file DmxShowerPlane.cxx.
References fStripsSet.
00393 { 00394 return fStripsSet == 1; 00395 }
Float_t DmxShowerPlane::GetThirdBestCoG | ( | ) | const |
Definition at line 381 of file DmxShowerPlane.cxx.
References fPlaneNumber, fThirdBestHypo, fUgh, DmxHypothesis::GetCoG(), UgliGeomHandle::GetStripHandle(), UgliStripHandle::GetTPos(), and Detector::kFar.
00382 { 00383 //get the strip end id for the center of gravity for this hypothesis 00384 PlexStripEndId seid(Detector::kFar,fPlaneNumber,TMath::Nint(fThirdBestHypo->GetCoG())); 00385 UgliStripHandle ush = fUgh->GetStripHandle(seid); 00386 00387 return ush.GetTPos(); 00388 //return fThirdBestHypo->GetCoG(); 00389 }
DmxHypothesis * DmxShowerPlane::GetThirdBestHypothesis | ( | ) |
Definition at line 353 of file DmxShowerPlane.cxx.
References fThirdBestHypo.
00354 { 00355 return fThirdBestHypo; 00356 }
Float_t DmxShowerPlane::GetTimingOffset | ( | ) | [virtual] |
Implements DmxPlane.
Definition at line 545 of file DmxShowerPlane.cxx.
References fSetHypo, fUgh, and DmxHypothesis::GetTimingOffset().
00546 { 00547 if(fSetHypo){ 00548 return fSetHypo->GetTimingOffset(fUgh); 00549 } 00550 // else MSG("DmxShower", Msg::kWarning) << "no set hypothesis in plane " 00551 // << fPlaneNumber << endl; 00552 00553 return -10.; 00554 }
Float_t DmxShowerPlane::GetZPosition | ( | ) | const [virtual] |
Implements DmxPlane.
Definition at line 557 of file DmxShowerPlane.cxx.
References fPlaneNumber, fUgh, UgliGeomHandle::GetScintPlnHandle(), UgliPlnHandle::GetZ0(), and Detector::kFar.
00558 { 00559 PlexStripEndId seid(Detector::kFar, fPlaneNumber, 1); 00560 UgliScintPlnHandle usph = fUgh->GetScintPlnHandle(seid); 00561 return usph.GetZ0(); 00562 //return 1.*fPlaneNumber; 00563 }
Bool_t DmxShowerPlane::IsGolden | ( | ) | const [virtual] |
Implements DmxPlane.
Definition at line 410 of file DmxShowerPlane.cxx.
References fIsGolden.
00411 { 00412 return fIsGolden; 00413 }
Bool_t DmxShowerPlane::IsStray | ( | ) | const [virtual] |
Implements DmxPlane.
Definition at line 404 of file DmxShowerPlane.cxx.
References fIsStray.
00405 { 00406 return fIsStray; 00407 }
Bool_t DmxShowerPlane::IsValid | ( | ) | const [virtual] |
Implements DmxPlane.
Definition at line 398 of file DmxShowerPlane.cxx.
References fIsValid.
00399 { 00400 return fIsValid; 00401 }
void DmxShowerPlane::PrintRecon | ( | Int_t | hypoLowerBound | ) |
Definition at line 586 of file DmxShowerPlane.cxx.
References fHypothesisArray, fPlaneNumber, Msg::kInfo, MSG, and PrintRecon().
00587 { 00588 MSG("DMX", Msg::kInfo) << "Plane\t" << fPlaneNumber << endl; 00589 dynamic_cast<DmxHypothesis *>(fHypothesisArray->At(hypoLowerBound))->PrintRecon(); 00590 }
void DmxShowerPlane::PrintRecon | ( | ) | [virtual] |
Implements DmxPlane.
Definition at line 578 of file DmxShowerPlane.cxx.
References fIsValid, fPlaneNumber, fSetHypo, Msg::kInfo, MSG, and DmxHypothesis::PrintRecon().
Referenced by PrintRecon().
00579 { 00580 MSG("Dmx", Msg::kInfo) << "Plane = " << fPlaneNumber 00581 << "\tIsValid = " << fIsValid << endl; 00582 fSetHypo->PrintRecon(); 00583 }
void DmxShowerPlane::SetGolden | ( | bool | Golden | ) | [virtual] |
Implements DmxPlane.
Definition at line 608 of file DmxShowerPlane.cxx.
References fIsGolden.
00609 { 00610 fIsGolden = golden; 00611 return; 00612 }
void DmxShowerPlane::SetStray | ( | bool | stray | ) | [virtual] |
Implements DmxPlane.
Definition at line 601 of file DmxShowerPlane.cxx.
References fIsStray.
00602 { 00603 fIsStray = stray; 00604 return; 00605 }
void DmxShowerPlane::SetStrips | ( | Float_t | tPos | ) | [virtual] |
Implements DmxPlane.
Definition at line 499 of file DmxShowerPlane.cxx.
References fCoG, fHypothesisArray, fNumberOfHypotheses, fPlaneNumber, fSetHypo, fStripsSet, fUgh, UgliScintPlnHandle::GetClosestStrip(), GetCoG(), UgliGeomHandle::GetScintPlnHandle(), UgliStripHandle::GetSEId(), PlexStripEndId::GetStrip(), Detector::kFar, and SetStrips().
00500 { 00501 00502 //change the transverse position for the fit into a strip number 00503 PlexStripEndId seid(Detector::kFar, fPlaneNumber, 1); 00504 UgliScintPlnHandle usph = fUgh->GetScintPlnHandle(seid); 00505 UgliStripHandle ush = usph.GetClosestStrip(tPos); 00506 Float_t fitCoG = 1.*ush.GetSEId().GetStrip(); 00507 00508 //Float_t fitCoG = tPos; 00509 //MSG("DMXX", Msg::kDebug) << "\tfit in strip vs plane space " << fPlaneNumber << "\t" << fitCoG << endl; 00510 //MSG("DMXX", Msg::kDebug) << "\tfit in tpos vs z space " << GetZPosition() << "\t" << tPos << endl; 00511 00512 Int_t hypLowerBound = 0; 00513 if(fitCoG >= 11.5 && fitCoG <= 179.5){hypLowerBound = TMath::Nint(fitCoG-11.5);} 00514 else if(fitCoG < 11.5){hypLowerBound = 0;} 00515 else if(fitCoG > 179.5){hypLowerBound = 168;} 00516 00517 fStripsSet = 1; 00518 00519 if(hypLowerBound <= fNumberOfHypotheses){ 00520 dynamic_cast<DmxHypothesis *>(fHypothesisArray->At(hypLowerBound))->SetStrips(); 00521 fCoG = dynamic_cast<DmxHypothesis *>(fHypothesisArray->At(hypLowerBound))->GetCoG(); 00522 fSetHypo = dynamic_cast<DmxHypothesis *>(fHypothesisArray->At(hypLowerBound)); 00523 } 00524 else{ 00525 // MSG("Dmx", Msg::kWarning) << "chosen hypothesis does not exist," 00526 // << " attempt to set strips failed" << endl; 00527 fSetHypo = 0; 00528 } 00529 return; 00530 }
void DmxShowerPlane::SetStrips | ( | const Char_t * | option | ) |
Definition at line 453 of file DmxShowerPlane.cxx.
References fBestHypo, fCoG, fHypothesisArray, fNumberOfHypotheses, fSecondBestHypo, fSetHypo, fStripsSet, fThirdBestHypo, GetCoG(), DmxHypothesis::GetCoG(), and SetStrips().
00454 { 00455 fStripsSet = 1; 00456 Int_t hypLowerBound = 0; 00457 Float_t fitCoG = 0.; 00458 //set the strips to the hypothesis centered about the CoG for whichever 00459 //of the top three is chosen 00460 if(strcmp(option, "best") == 0 && fBestHypo) fitCoG = fBestHypo->GetCoG(); 00461 else if(strcmp(option, "second") == 0 && fSecondBestHypo) fitCoG = fSecondBestHypo->GetCoG(); 00462 else if(strcmp(option, "third") == 0 && fThirdBestHypo) fitCoG = fThirdBestHypo->GetCoG(); 00463 00464 if(fitCoG >= 11.5 && fitCoG <= 179.5){hypLowerBound = TMath::Nint(fitCoG-11.5);} 00465 else if(fitCoG < 11.5){hypLowerBound = 0;} 00466 else if(fitCoG > 179.5){hypLowerBound = 168;} 00467 00468 if(hypLowerBound <= fNumberOfHypotheses){ 00469 dynamic_cast<DmxHypothesis *>(fHypothesisArray->At(hypLowerBound))->SetStrips(); 00470 fCoG = dynamic_cast<DmxHypothesis *>(fHypothesisArray->At(hypLowerBound))->GetCoG(); 00471 fSetHypo = dynamic_cast<DmxHypothesis *>(fHypothesisArray->At(hypLowerBound)); 00472 } 00473 else{ 00474 // MSG("Dmx", Msg::kWarning) << "chosen hypothesis does not exist," 00475 // << " attempt to set strips failed" << endl; 00476 fSetHypo = 0; 00477 } 00478 return; 00479 }
void DmxShowerPlane::SetStrips | ( | ) | [virtual] |
Implements DmxPlane.
Definition at line 443 of file DmxShowerPlane.cxx.
References fBestHypo.
Referenced by DmxShowerPlane(), and SetStrips().
void DmxShowerPlane::SetStripsSetFlag | ( | Int_t | flag | ) |
Definition at line 594 of file DmxShowerPlane.cxx.
References fStripsSet, Msg::kError, and MSG.
00595 { 00596 if(flag == 0 || flag == 1){fStripsSet = flag;} 00597 else MSG("Dmx", Msg::kError) << "input flag value is not an option" << endl; 00598 }
Float_t DmxShowerPlane::fBestCoG [private] |
Definition at line 71 of file DmxShowerPlane.h.
DmxHypothesis* DmxShowerPlane::fBestHypo [private] |
Definition at line 72 of file DmxShowerPlane.h.
Referenced by DmxShowerPlane(), GetBestCoG(), GetBestHypothesis(), and SetStrips().
Float_t DmxShowerPlane::fCoG [private] |
Definition at line 73 of file DmxShowerPlane.h.
Referenced by GetCoG(), GetStripCoG(), and SetStrips().
Int_t DmxShowerPlane::fCompare [private] |
Definition at line 74 of file DmxShowerPlane.h.
Referenced by CompareHypotheses(), and DmxShowerPlane().
TObjArray* DmxShowerPlane::fHypothesisArray [private] |
Definition at line 75 of file DmxShowerPlane.h.
Referenced by DmxShowerPlane(), GetHypothesis(), GetHypothesisCoG(), PrintRecon(), SetStrips(), and ~DmxShowerPlane().
bool DmxShowerPlane::fIsGolden [private] |
Definition at line 78 of file DmxShowerPlane.h.
Referenced by DmxShowerPlane(), IsGolden(), and SetGolden().
bool DmxShowerPlane::fIsStray [private] |
Definition at line 77 of file DmxShowerPlane.h.
Referenced by IsStray(), and SetStray().
bool DmxShowerPlane::fIsValid [private] |
Definition at line 76 of file DmxShowerPlane.h.
Referenced by DmxShowerPlane(), IsValid(), and PrintRecon().
Int_t DmxShowerPlane::fNumberOfHypotheses [private] |
Definition at line 79 of file DmxShowerPlane.h.
Referenced by DmxShowerPlane(), and SetStrips().
Int_t DmxShowerPlane::fNumberOfStrips [private] |
Definition at line 80 of file DmxShowerPlane.h.
Referenced by DmxShowerPlane(), and GetNumberOfStrips().
Float_t DmxShowerPlane::fPlaneCharge [private] |
Definition at line 81 of file DmxShowerPlane.h.
Referenced by DmxShowerPlane(), and GetPlaneCharge().
Int_t DmxShowerPlane::fPlaneNumber [private] |
Definition at line 82 of file DmxShowerPlane.h.
Referenced by GetBestCoG(), GetCoG(), GetHypothesisCoG(), GetHypothesisLowerBound(), GetPlaneNumber(), GetSecondBestCoG(), GetThirdBestCoG(), GetZPosition(), PrintRecon(), and SetStrips().
Definition at line 83 of file DmxShowerPlane.h.
Referenced by GetPlaneType().
Definition at line 84 of file DmxShowerPlane.h.
Referenced by DmxShowerPlane(), and GetPlaneView().
Float_t DmxShowerPlane::fSecondBestCoG [private] |
Definition at line 85 of file DmxShowerPlane.h.
DmxHypothesis* DmxShowerPlane::fSecondBestHypo [private] |
Definition at line 86 of file DmxShowerPlane.h.
Referenced by DmxShowerPlane(), GetSecondBestCoG(), GetSecondBestHypothesis(), and SetStrips().
DmxHypothesis* DmxShowerPlane::fSetHypo [private] |
Definition at line 87 of file DmxShowerPlane.h.
Referenced by GetSetHypothesis(), GetTimingOffset(), PrintRecon(), and SetStrips().
Int_t DmxShowerPlane::fStripsSet [private] |
Definition at line 90 of file DmxShowerPlane.h.
Referenced by GetStripsSetFlag(), SetStrips(), and SetStripsSetFlag().
Float_t DmxShowerPlane::fThirdBestCoG [private] |
Definition at line 88 of file DmxShowerPlane.h.
DmxHypothesis* DmxShowerPlane::fThirdBestHypo [private] |
Definition at line 89 of file DmxShowerPlane.h.
Referenced by DmxShowerPlane(), GetThirdBestCoG(), GetThirdBestHypothesis(), and SetStrips().
UgliGeomHandle* DmxShowerPlane::fUgh [private] |
Definition at line 91 of file DmxShowerPlane.h.
Referenced by DmxShowerPlane(), GetBestCoG(), GetCoG(), GetHypothesisCoG(), GetHypothesisLowerBound(), GetSecondBestCoG(), GetThirdBestCoG(), GetTimingOffset(), GetZPosition(), SetStrips(), and ~DmxShowerPlane().