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

AlgChopListGeneric.cxx

Go to the documentation of this file.
00001 
00002 // $Id: AlgChopListGeneric.cxx,v 1.4 2010/01/06 17:15:44 rhatcher Exp $
00003 //
00004 // AlgChopListGeneric.cxx
00005 //
00006 // The boilerplate code to write a chopr.
00007 //
00009 
00010 #include <cassert>
00011 
00012 #include "CandChop/AlgChopListGeneric.h"
00013 #include "CandChop/CandChopListHandle.h"
00014 #include "CandChop/DigitVector.h"
00015 
00016 
00017 #include "Algorithm/AlgConfig.h"
00018 #include "Algorithm/AlgFactory.h"
00019 #include "Algorithm/AlgHandle.h"
00020 #include "CandData/CandHeader.h"
00021 #include "CandData/CandRecord.h"
00022 #include "CandDigit/CandDigitHandle.h"
00023 #include "CandDigit/CandDigitListHandle.h"
00024 #include "CandDigit/CandDigitList.h"
00025 #include "Candidate/CandContext.h"
00026 #include "MessageService/MsgService.h"
00027 #include "MinosObjectMap/MomNavigator.h"
00028 #include "RawData/RawHeader.h"
00029 #include "RawData/RawRecord.h"
00030 #include "RawData/RawDigitDataBlock.h"
00031 #include "UgliGeometry/UgliGeomHandle.h"
00032 #include "UgliGeometry/UgliStripHandle.h"
00033 #include "Validity/VldContext.h"
00034 #include "Calibrator/Calibrator.h"
00035 #include "DataUtil/GetRawBlock.h"
00036 
00037 ClassImp(AlgChopListGeneric)
00038 CVSID( " $Id: AlgChopListGeneric.cxx,v 1.4 2010/01/06 17:15:44 rhatcher Exp $ ");
00039 
00040 struct compareDigitTimes : public binary_function<const CandDigitHandle&, const CandDigitHandle&, bool> {
00041   bool operator()(const CandDigitHandle& d1, const CandDigitHandle& d2) {
00042     return (d1.GetTime() < d2.GetTime());
00043   }
00044 };
00045 
00046 const RawChannelId kQieRcid(Detector::kNear,ElecType::kQIE,0,0,false,false);
00047 
00048 
00049 //______________________________________________________________________
00050 AlgChopListGeneric::AlgChopListGeneric()
00051 {
00052 }
00053 
00054 //______________________________________________________________________
00055 AlgChopListGeneric::~AlgChopListGeneric()
00056 {
00057 }
00058 
00059 
00060 
00061 //______________________________________________________________________
00062 void AlgChopListGeneric::RunAlg(AlgConfig& /*algConfig*/, 
00063                            CandHandle &candHandle,  // thing to make
00064                            CandContext &candContext)
00065 {
00069 
00070   assert(candHandle.InheritsFrom("CandChopListHandle"));
00071   //CandChopListHandle &chopList = dynamic_cast<CandChopListHandle &>(candHandle);
00072 
00073 
00074    assert(candContext.GetDataIn());
00075    // Check for CandDigitListHandle input
00076    if (!(candContext.GetDataIn()->InheritsFrom("CandDigitListHandle"))) {
00077      MSG("Chop",Msg::kWarning ) << "Data into AlgChopListGeneric is not a digit list." << std::endl;
00078    }
00079    
00080    const CandDigitListHandle *cdlh_ptr = 
00081      dynamic_cast<const CandDigitListHandle*>(candContext.GetDataIn());
00082    
00083    const MomNavigator *mom = candContext.GetMom();
00084    const RawDigitDataBlock* rddb = DataUtil::GetRawBlock<RawDigitDataBlock>(mom);
00085    if (!rddb) {
00086      MSG("Chop", Msg::kWarning) << "No RawDigitDataBlock in RawRecord." << endl;
00087      return;
00088    }
00089    
00090    // Get setup for the DigitList maker algorithm
00091    AlgFactory &af = AlgFactory::GetInstance();
00092    AlgHandle ah = af.GetAlgHandle("AlgChop","default");
00093    CandContext cxx(this,candContext.GetMom());
00094 
00095    const VldContext &context = *(candContext.GetCandRecord()->GetVldContext());
00096    if(context.GetDetector() != Detector::kNear) 
00097      MSG("Chop",Msg::kError) << "Running the Generic algorithm on FD data is a no-no!" << endl;
00098 
00099    Calibrator& cal = Calibrator::Instance();
00100    UgliGeomHandle ugli(context);
00101   
00102    // Now do the actual slicing.
00103 
00104    // First, make a nice stl vector of the digits.
00105    DigitVector digits(cdlh_ptr);
00106 
00107    UInt_t ndigits = digits.size();
00108 
00109    // Sort the list by time.
00110    // Not neccessary for this algorithm.
00111    // std::sort(digits.begin(), digits.end(), compareDigitTimes());
00112 
00113    // Also, I want some other pieces of info:
00114    std::vector<int>    digit_tdc(ndigits);
00115    std::vector<UInt_t> digit_plane(ndigits);
00116    //std::vector<float>  digit_tpos(ndigits);
00117    for(UInt_t i=0;i<ndigits;i++) {
00118      digit_tdc[i] = (cal.GetTDCFromTime(digits[i].GetTime(CalTimeType::kNone), kQieRcid));
00119      digit_plane[i] = digits[i].GetPlexSEIdAltL().GetPlane(); 
00120      //if(digit_plane[i]<=PlexPlaneId::LastPlaneNearCalor())
00121      //  digit_tpos[i]  = ugli.GetStripHandle(digits[i].GetPlexSEIdAltL().GetBestSEId()).GetTPos(); 
00122      //else 
00123      //  digit_tpos[i]  = -999;
00124    }
00125 
00126    // Find first and last times. Add some padding so sertain operations are easier to code.
00127    Int_t tfirst = digit_tdc[0];
00128    Int_t tlast  = digit_tdc[0];
00129    for(UInt_t i=0;i<ndigits;i++) {
00130      if(digit_tdc[i] < tfirst) tfirst = digit_tdc[i];
00131      if(digit_tdc[i] > tlast ) tlast  = digit_tdc[i];
00132    }
00133 
00134    // How to make a chop:
00135    //DigitVector slc;
00136    //
00137    //for(UInt_t idig = 0; idig < ndigits; idig++ ) {
00138    //  if digits[idig] should be in chop slc then:
00139    //   slc.push_back(digits[idig]);
00140    //  }
00141    //  cxx.SetDataIn(&(slc));
00142    //  CandDigitListHandle chopHandle = CandDigitList::MakeCandidate(ah,cxx);
00143    // chopHandle.SetName(Form("Chop %d",nchop++));
00144    // chopList.AddDaughterLink(chopHandle);
00145 
00146 }
00147 
00148 //______________________________________________________________________
00149 void AlgChopListGeneric::Trace(const char * /* c */) const
00150 {
00151 }
00152 

Generated on Mon Feb 15 11:06:17 2010 for loon by  doxygen 1.3.9.1