Main Page | Modules | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members

AlgFarDetShieldPlankList Class Reference

#include <AlgFarDetShieldPlankList.h>

Inheritance diagram for AlgFarDetShieldPlankList:

AlgBase List of all members.

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

Constructor & Destructor Documentation

AlgFarDetShieldPlankList::AlgFarDetShieldPlankList  ) 
 

Definition at line 21 of file AlgFarDetShieldPlankList.cxx.

00021                                                    :
00022   fPairList(0)
00023 {
00024   fPairList = new TObjArray();
00025 }

AlgFarDetShieldPlankList::~AlgFarDetShieldPlankList  )  [virtual]
 

Definition at line 27 of file AlgFarDetShieldPlankList.cxx.

00028 {
00029   if(fPairList) delete fPairList;
00030 }


Member Function Documentation

void AlgFarDetShieldPlankList::RunAlg AlgConfig ac,
CandHandle ch,
CandContext cx
[virtual]
 

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 }

void AlgFarDetShieldPlankList::Trace const char *  c  )  const [virtual]
 

Reimplemented from AlgBase.

Definition at line 183 of file AlgFarDetShieldPlankList.cxx.

00184 {
00185 
00186 }


Member Data Documentation

TObjArray AlgFarDetShieldPlankList::fDigiList[500] [private]
 

Definition at line 19 of file AlgFarDetShieldPlankList.h.

Referenced by RunAlg().

TObjArray* AlgFarDetShieldPlankList::fPairList [private]
 

Definition at line 20 of file AlgFarDetShieldPlankList.h.

Referenced by RunAlg().


The documentation for this class was generated from the following files:
Generated on Thu Nov 1 15:55:24 2007 for loon by  doxygen 1.3.9.1