#include <AlgFarDetShieldPlankList.h>
Inheritance diagram for AlgFarDetShieldPlankList:

Public Member Functions | |
| AlgFarDetShieldPlankList () | |
| virtual | ~AlgFarDetShieldPlankList () |
| virtual void | RunAlg (AlgConfig &ac, CandHandle &ch, CandContext &cx) |
| virtual void | Trace (const char *c) const |
Private Attributes | |
| TObjArray | fDigiList [500] |
| TObjArray * | fPairList |
|
|
Definition at line 21 of file AlgFarDetShieldPlankList.cxx.
|
|
|
Definition at line 27 of file AlgFarDetShieldPlankList.cxx. 00028 {
00029 if(fPairList) delete fPairList;
00030 }
|
|
||||||||||||||||
|
Implements AlgBase. Definition at line 32 of file AlgFarDetShieldPlankList.cxx. References CandHandle::AddDaughterLink(), fDigiList, fPairList, AlgFactory::GetAlgHandle(), CandContext::GetCandRecord(), CandDigitHandle::GetCharge(), CandContext::GetDataIn(), CandHandle::GetDaughterIterator(), PlexSEIdAltL::GetEnd(), AlgFactory::GetInstance(), CandContext::GetMom(), PlexSEIdAltL::GetPlane(), CandDigitHandle::GetPlexSEIdAltL(), CandDigitHandle::GetSubtractedTime(), CandDigitHandle::GetTime(), PlexSEIdAltL::IsVetoShield(), FarDetShieldPlank::MakeCandidate(), MSG, CandHandle::SetName(), and CandHandle::SetTitle(). 00034 {
00035 MSG("FarDetShieldPlankList",Msg::kDebug) << " *** AlgFarDetShieldPlankList::RunAlg(...) *** "<<endl;
00036
00037 FarDetShieldPlankListHandle& myplanklist = dynamic_cast<FarDetShieldPlankListHandle&>(ch);
00038
00039 Int_t DigitsBefore=0,DigitsAfter=0;
00040
00041 Int_t i,j,kn,kp;
00042 Int_t veto,pln,match;
00043 TObjArray northlist,southlist;
00044 TObjArray tmpn,tmpp,tmp1;
00045
00046 // Unpack CandContext
00047 CandRecord* candrec = (CandRecord*)(cx.GetCandRecord());
00048 const CandDigitListHandle *cdlh = dynamic_cast<const CandDigitListHandle*>(cx.GetDataIn());
00049
00050 TIter digitr(cdlh->GetDaughterIterator());
00051 while(CandDigitHandle* cdh = dynamic_cast<CandDigitHandle*>(digitr())){
00052 if(cdh){
00053 veto = cdh->GetPlexSEIdAltL().IsVetoShield();
00054 pln = cdh->GetPlexSEIdAltL().GetPlane()-500;
00055 if( veto && pln>0 && pln<500 ){
00056 fDigiList[pln].Add(cdh);
00057 MSG("FarDetShieldPlank",Msg::kVerbose) << " digit : "
00058 << " " << cdh->GetPlexSEIdAltL().GetPlane()
00059 << " " << cdh->GetPlexSEIdAltL().GetEnd()
00060 << " " << cdh->GetCharge(CalDigitType::kNone)
00061 << " " << 1.0e9*cdh->GetSubtractedTime(CalTimeType::kNone) << endl;
00062 DigitsBefore++;
00063 }
00064 }
00065 }
00066
00067 // Pair up CandDigits
00068 for(i=0;i<500;i++){
00069 if(1+fDigiList[i].GetLast()>0){
00070
00071 for(j=0;j<1+fDigiList[i].GetLast();j++){
00072 CandDigitHandle* digit = (CandDigitHandle*)(fDigiList[i].At(j));
00073 const PlexSEIdAltL& pSEIdAltL = digit->GetPlexSEIdAltL();
00074 if(pSEIdAltL.GetEnd()==StripEnd::kNegative) northlist.Add(digit);
00075 if(pSEIdAltL.GetEnd()==StripEnd::kPositive) southlist.Add(digit);
00076 }
00077
00078 for(kn=0;kn<1+northlist.GetLast();kn++){
00079 CandDigitHandle* dign = (CandDigitHandle*)(northlist.At(kn));
00080 const PlexSEIdAltL& nSEIdAltL = dign->GetPlexSEIdAltL();
00081 match=0;
00082 for(kp=0;kp<1+southlist.GetLast();kp++){
00083 CandDigitHandle* digp = (CandDigitHandle*)(southlist.At(kp));
00084 const PlexSEIdAltL& pSEIdAltL = digp->GetPlexSEIdAltL();
00085 if( 1.0e9*(dign->GetTime(CalTimeType::kNone)-digp->GetTime(CalTimeType::kNone))>-500.0
00086 && 1.0e9*(dign->GetTime(CalTimeType::kNone)-digp->GetTime(CalTimeType::kNone))<500.0 ){
00087 for(PlexSEIdAltL::const_iterator itern = nSEIdAltL.begin();itern!=nSEIdAltL.end(); ++itern){
00088 for(PlexSEIdAltL::const_iterator iterp = pSEIdAltL.begin();iterp!=pSEIdAltL.end(); ++iterp){
00089 if((*itern).GetSEId().IsSameStrip((*iterp).GetSEId())) match=1;
00090 }
00091 }
00092 }
00093 }
00094 if(match) tmpn.Add(dign); else tmp1.Add(dign);
00095 }
00096
00097 for(kp=0;kp<1+southlist.GetLast();kp++){
00098 CandDigitHandle* digp = (CandDigitHandle*)(southlist.At(kp));
00099 const PlexSEIdAltL& pSEIdAltL = digp->GetPlexSEIdAltL();
00100 match=0;
00101 for(kn=0;kn<1+northlist.GetLast();kn++){
00102 CandDigitHandle* dign = (CandDigitHandle*)(northlist.At(kn));
00103 const PlexSEIdAltL& nSEIdAltL = dign->GetPlexSEIdAltL();
00104 if( 1.0e9*(dign->GetTime(CalTimeType::kNone)-digp->GetTime(CalTimeType::kNone))>-500.0
00105 && 1.0e9*(dign->GetTime(CalTimeType::kNone)-digp->GetTime(CalTimeType::kNone))<500.0 ){
00106 for(PlexSEIdAltL::const_iterator iterp = pSEIdAltL.begin();iterp!=pSEIdAltL.end(); ++iterp){
00107 for(PlexSEIdAltL::const_iterator itern = nSEIdAltL.begin();itern!=nSEIdAltL.end(); ++itern){
00108 if((*iterp).GetSEId().IsSameStrip((*itern).GetSEId())) match=1;
00109 }
00110 }
00111 }
00112 }
00113 if(match) tmpp.Add(digp); else tmp1.Add(digp);
00114 }
00115
00116 if( 1+tmpn.GetLast()>0 && 1+tmpp.GetLast()>0 ){
00117 for(kn=0;kn<1+tmpn.GetLast();kn++){
00118 CandDigitHandle* dign = (CandDigitHandle*)(tmpn.At(kn));
00119 const PlexSEIdAltL& nSEIdAltL = dign->GetPlexSEIdAltL();
00120 for(kp=0;kp<1+tmpp.GetLast();kp++){
00121 CandDigitHandle* digp = (CandDigitHandle*)(tmpp.At(kp));
00122 const PlexSEIdAltL& pSEIdAltL = digp->GetPlexSEIdAltL();
00123 if( 1.0e9*(dign->GetTime(CalTimeType::kNone)-digp->GetTime(CalTimeType::kNone))>-500.0
00124 && 1.0e9*(dign->GetTime(CalTimeType::kNone)-digp->GetTime(CalTimeType::kNone))<500.0 ){
00125 match=0;
00126 for(PlexSEIdAltL::const_iterator itern = nSEIdAltL.begin();itern!=nSEIdAltL.end(); ++itern){
00127 for(PlexSEIdAltL::const_iterator iterp = pSEIdAltL.begin();iterp!=pSEIdAltL.end(); ++iterp){
00128 if((*itern).GetSEId().IsSameStrip((*iterp).GetSEId())) match=1;
00129 }
00130 }
00131 if(match){
00132 TObjArray* myarray = new TObjArray();
00133 myarray->Add(dign); DigitsAfter++;
00134 myarray->Add(digp); DigitsAfter++;
00135 fPairList->Add(myarray);
00136 }
00137 }
00138 }
00139 }
00140 }
00141
00142 for(j=0;j<1+tmp1.GetLast();j++){
00143 CandDigitHandle* dig = (CandDigitHandle*)(tmp1.At(j));
00144 TObjArray* myarray = new TObjArray();
00145 myarray->Add(dig); DigitsAfter++;
00146 fPairList->Add(myarray);
00147 }
00148
00149 tmpn.Clear(); tmpp.Clear(); tmp1.Clear();
00150 northlist.Clear(); southlist.Clear();
00151 }
00152 }
00153
00154 // Digit Check
00155 MSG("FarDetShieldPlank",Msg::kDebug) << " DIGITS BEFORE = " << DigitsBefore << " DIGITS AFTER = " << DigitsAfter << endl;
00156
00157 // Make ShieldPlanks
00158 AlgFactory &af = AlgFactory::GetInstance();
00159 AlgHandle ahh = af.GetAlgHandle("AlgFarDetShieldPlank","default");
00160 CandContext cxx(this,cx.GetMom());
00161 cxx.SetCandRecord(candrec);
00162
00163 for(i=0;i<1+fPairList->GetLast();i++){
00164 TObjArray* myarray = (TObjArray*)(fPairList->At(i));
00165
00166 cxx.SetDataIn(myarray);
00167 FarDetShieldPlankHandle myplank = FarDetShieldPlank::MakeCandidate(ahh,cxx);
00168 myplank.SetName("FarDetShieldPlank");
00169 myplank.SetTitle(TString("Created by FarDetShieldPlankList"));
00170
00171 myplanklist.AddDaughterLink(myplank);
00172 }
00173
00174 for(i=0;i<500;i++){
00175 fDigiList[i].Clear();
00176 }
00177
00178 fPairList->Delete();
00179
00180 }
|
|
|
Reimplemented from AlgBase. Definition at line 183 of file AlgFarDetShieldPlankList.cxx. 00184 {
00185
00186 }
|
|
|
Definition at line 19 of file AlgFarDetShieldPlankList.h. Referenced by RunAlg(). |
|
|
Definition at line 20 of file AlgFarDetShieldPlankList.h. Referenced by RunAlg(). |
1.3.9.1