DmxDeMuxCosmicsModule Class Reference

#include <DmxDeMuxCosmicsModule.h>

Inheritance diagram for DmxDeMuxCosmicsModule:
JobCModule

List of all members.

Public Member Functions

 DmxDeMuxCosmicsModule ()
 ~DmxDeMuxCosmicsModule ()
void BeginJob ()
JobCResult Reco (MomNavigator *mom)
JobCResult Ana (const MomNavigator *mom)
void HandleCommand (JobCommand *command)
const RegistryDefaultConfig () const
void Config (const Registry &r)
void EndJob ()
void Help ()
void FindDigitsChiSq (Double_t &uChiSq, Double_t &vChiSq, CandDeMuxDigitHandleItr &digitItr, Double_t uIntercept, Double_t uSlope, Double_t vIntercept, Double_t vSlope)
void FindPlanesChiSq (Double_t &uChiSq, Double_t &vChiSq, TObjectItr &planeItr, Double_t uIntercept, Double_t uSlope, Double_t vIntercept, Double_t vSlope)

Private Attributes

Float_t fAverageTimingOffset
Int_t fCrate
Int_t fDataType
Int_t fDeltaStrips
Int_t fDeMuxedStrip
Int_t fDeMuxedStripW
Float_t fDigitCharge
Float_t fDigitChargeW
Int_t fDigitDeMuxedCorrectly
Int_t fDigitsInEvent
Int_t fDigitSide
Int_t fDirection
bool fDontUseCandDigitMasks
Int_t fEndPlane
Float_t fEventCharge
Int_t fEventDeMuxed
bool fEventLength
Int_t fEventNumber
bool fFilter
Float_t fFractionChargeNearTrack
const Char_t * fHistoFileName
Float_t fHoughSlope
Float_t fHoughIntercept
Float_t fHoughPeak
Float_t fHypothesisCoG
Float_t fHypothesisCoGTPos
Float_t fHypothesisMatedSignalRatio
Int_t fHypothesisNumber
Int_t fHypothesisRank
Float_t fHypothesisStat
Float_t fHypothesisTieBreaker
Int_t fHypothesisValid
bool fMakeTrees
Int_t fMated
Double_t fMatedSignalForValid
Float_t fMCDigitChargeE
Float_t fMCDigitChargeW
Float_t fMCChargeCorrect
Float_t fMCChargeCorrect1Hyp
Float_t fMCTotalCharge
Float_t fMCTotalCharge1Hyp
Float_t fMCStripsCorrect
Int_t fMCVertexPlane
Int_t fMCEndPlane
Int_t fMCShowerSpread
Int_t fMCStripSpread
Int_t fMCStripSpread24Planes
Int_t fMultiple
Int_t fNonPhysicalFailure
Int_t fNonPhysicalPlanes
Int_t fNoVertexFailure
Int_t fNumberOfPlanesInEvent
Int_t fOneSidedUPlanes
Int_t fOneSidedVPlanes
Int_t fPlane
Float_t fPlaneZ
Float_t fPlaneDeMuxedCoG
Int_t fPlaneStray
Int_t fPlanesInWindow
Int_t fPlaneType
Float_t fSignalFractionLimit
bool fSingleModuleDeMux
Float_t fSingleModuleCharge
Float_t fSingleModuleCorrectCharge
Float_t fSingleModuleDigits
Float_t fSingleModuleCorrectDigits
DmxStatus fStatus
Int_t fStrayDeltaStripLimit
Int_t fStrip0
Int_t fStrip1
Int_t fStrip2
Int_t fStrip3
Int_t fStrip4
Int_t fStrip5
Int_t fStrip6
Int_t fStrip7
Double_t fTime
Int_t fTruthStripE
Int_t fTruthStripW
Double_t fUSlope
Double_t fUIntercept
Double_t fUSlopeRMS
Int_t fUStrayPlanes
Int_t fUValidPlanes
Int_t fUOverlap
Double_t fUInterceptRMS
Double_t fUChiSq
Double_t fVSlope
Double_t fVIntercept
Double_t fVSlopeRMS
Int_t fVStrayPlanes
Int_t fVValidPlanes
Int_t fVOverlap
Double_t fVInterceptRMS
Double_t fVChiSq
Int_t fXTalkDigit
TString fTrackFitter
bool fUnsetDigitCheck
Int_t fValidPlanesFailure
Int_t fVertexPlane
Float_t fVertexPlaneZ
bool fWriteHistos
Double_t fXTalkSignalRatio
bool fUseStrayPlaneCheck
Int_t fStrayPlanesLimit
TFile * fDeMuxFile
TTree * fDeMuxTree
TTree * fDeMuxedDigitTree
TTree * fDmxPlaneTree
TTree * fSingleModuleTree
TTree * fTrackDigitsTree
TTree * fUnusedDigitsTree
TTree * fMCDeMuxTree
TTree * fMCDeMuxDigitTree
TFolder * fTFolder

Detailed Description

Definition at line 29 of file DmxDeMuxCosmicsModule.h.


Constructor & Destructor Documentation

DmxDeMuxCosmicsModule::DmxDeMuxCosmicsModule (  ) 

Definition at line 79 of file DmxDeMuxCosmicsModule.cxx.

References AlgHandle::GetAlgConfig(), AlgFactory::GetAlgHandle(), AlgFactory::GetInstance(), Msg::kDebug, Registry::LockKeys(), Registry::LockValues(), MSG, AlgFactory::Register(), Registry::Set(), and Registry::UnLockValues().

00079                                              :
00080   fAverageTimingOffset(-5.),
00081   fCrate(-1),
00082   fDataType(0),
00083   fDeMuxedStrip(-1),
00084   fDeMuxedStripW(-1),
00085   fDigitCharge(-1.),
00086   fDigitChargeW(-1.),
00087   fDigitDeMuxedCorrectly(0),
00088   fDigitsInEvent(0),
00089   fDigitSide(0),
00090   fDirection(0),
00091   fDontUseCandDigitMasks(false),
00092   fEndPlane(-1),
00093   fEventCharge(0.),
00094   fEventDeMuxed(0),
00095   fEventLength(false),
00096   fEventNumber(0),
00097   fFilter(false),
00098   fHistoFileName("demux_cosmics.root"),
00099   fHoughSlope(5.),
00100   fHoughIntercept(10.),
00101   fHoughPeak(0.66),
00102   fHypothesisCoG(-1.),
00103   fHypothesisMatedSignalRatio(-1.),
00104   fHypothesisNumber(-1),
00105   fHypothesisRank(-1),
00106   fHypothesisStat(-1.),
00107   fHypothesisTieBreaker(-1.),
00108   fHypothesisValid(-1),
00109   fMakeTrees(true),
00110   fMated(0),
00111   fMatedSignalForValid(0.5),
00112   fMCDigitChargeE(0.),
00113   fMCDigitChargeW(0.),
00114   fMCVertexPlane(0),
00115   fMCEndPlane(0),
00116   fMultiple(0),
00117   fNonPhysicalFailure(0),
00118   fNonPhysicalPlanes(0),
00119   fNoVertexFailure(0),
00120   fNumberOfPlanesInEvent(0),
00121   fOneSidedUPlanes(0),
00122   fOneSidedVPlanes(0),
00123   fPlane(-1),
00124   fPlaneDeMuxedCoG(-1.),
00125   fPlaneStray(0),
00126   fPlanesInWindow(6),
00127   fPlaneType(-1),
00128   fSignalFractionLimit(0.1),
00129   fSingleModuleDeMux(false),
00130   fSingleModuleCharge(-1.),
00131   fSingleModuleCorrectCharge(-1.),
00132   fSingleModuleDigits(-1.),
00133   fSingleModuleCorrectDigits(-1.),
00134   fStrayDeltaStripLimit(6),
00135   fStrip0(0),
00136   fStrip1(0),
00137   fStrip2(0),
00138   fStrip3(0),
00139   fStrip4(0),
00140   fStrip5(0),
00141   fStrip6(0),
00142   fStrip7(0),
00143   fTime(-1.),
00144   fTruthStripE(-1),
00145   fTruthStripW(-1),
00146   fUStrayPlanes(0),
00147   fUValidPlanes(0),
00148   fVStrayPlanes(0),
00149   fVValidPlanes(0),
00150   fXTalkDigit(1),
00151   fUnsetDigitCheck(false),
00152   fValidPlanesFailure(0),
00153   fVertexPlane(-1),
00154   fWriteHistos(false),
00155   fXTalkSignalRatio(-1.),
00156   fUseStrayPlaneCheck(false),
00157   fStrayPlanesLimit(4),
00158   fDeMuxFile(0),
00159   fDeMuxTree(0),
00160   fDeMuxedDigitTree(0),
00161   fDmxPlaneTree(0),
00162   fSingleModuleTree(0),
00163   fTrackDigitsTree(0),
00164   fUnusedDigitsTree(0),
00165   fMCDeMuxTree(0),
00166   fMCDeMuxDigitTree(0),
00167   fTFolder(0)
00168 {
00169  
00170   // Put DmxStatus object in /Loon/DeMux folder
00171   if (fTFolder==0) {
00172     TFolder *lf = dynamic_cast<TFolder *>
00173                          (gROOT->GetRootFolder()->FindObject("Loon"));
00174     if (lf==0) {
00175       lf = gROOT->GetRootFolder()->AddFolder("Loon", "Loon analysis");
00176       gROOT->GetListOfBrowsables()->Add(lf, "Loon");
00177     }
00178     fTFolder = lf->AddFolder("DeMux", "DeMux analysis");
00179     fTFolder->Add(&fStatus);
00180   }
00181 
00182    AlgFactory &af = AlgFactory::GetInstance();
00183    af.Register("AlgDeMuxCosmics", "default", "libDeMux.so", "AlgConfig");
00184    AlgHandle ah = af.GetAlgHandle("AlgDeMuxCosmics", "default");
00185 
00186    //get the AlgConfig class and set some variables for demuxing
00187    AlgConfig &acd = ah.GetAlgConfig();
00188    acd.UnLockValues();
00189    acd.Set("HoughInterceptRMSLimit",10.);
00190    acd.Set("HoughPeakLimit",0.60);
00191    acd.Set("HoughSlopeRMSLimit",10.);
00192    acd.Set("HypothesisSize",24);
00193    acd.Set("MuonTrackSlopeLimit",192.0);
00194    acd.Set("NumberOfHypotheses",169);
00195    acd.Set("NumberOfStrips", 192);
00196    acd.Set("PlanesInSet",fPlanesInWindow);
00197    acd.Set("RatioMatedSignalForValid",fMatedSignalForValid);
00198    acd.Set("UseCandDigitMask", 1);
00199    acd.Set("XTalkFractionLimit", 0.1);
00200    acd.Set("IgnoreSignalLimit", 1.5);
00201    if(fDataType == 1) acd.Set("AveragePEGainConversion", 60.);
00202    else acd.Set("AveragePEGainConversion", 60.);
00203    acd.Set("StrayDeltaStripLimit",fStrayDeltaStripLimit);
00204    acd.Set("StrayPlanesLimit",10);
00205    acd.Set("UseStrayPlaneCheck", 0);
00206    
00207    if(fUseStrayPlaneCheck){
00208      acd.Set("UseStrayPlaneCheck",(Int_t)fUseStrayPlaneCheck);
00209      //acd.SetStrayPlanesLimit(fStrayPlanesLimit);
00210    }
00211    
00212    if( fDontUseCandDigitMasks ){ acd.Set("UseCandDigitMask",0); }
00213    //MSG("DMX", Msg::kDebug) << fSignalFractionLimit << endl;
00214    if( fSignalFractionLimit > 0.){ acd.Set("XTalkFractionLimit",fSignalFractionLimit);}
00215    
00216    acd.LockValues();
00217    acd.LockKeys();
00218    
00219    MSG("JobC", Msg::kDebug) << "DmxDeMuxCosmicsModule::Constructor" << endl;
00220    //MSG("DMX", Msg::kDebug) << fSignalFractionLimit << endl;
00221    
00222 }

DmxDeMuxCosmicsModule::~DmxDeMuxCosmicsModule (  ) 

Definition at line 225 of file DmxDeMuxCosmicsModule.cxx.

References fDeMuxFile, Msg::kDebug, and MSG.

00226 {
00227   MSG("JobC", Msg::kDebug) << "DmxDeMuxCosmicsModule::Destructor" << endl;
00228   if(fDeMuxFile) delete fDeMuxFile;
00229 }


Member Function Documentation

JobCResult DmxDeMuxCosmicsModule::Ana ( const MomNavigator mom  )  [virtual]

Implement this for read only access to the MomNavigator

Reimplemented from JobCModule.

Definition at line 429 of file DmxDeMuxCosmicsModule.cxx.

References DmxUtilities::CheckForXTalk(), digit(), fAverageTimingOffset, fCrate, fDataType, fDeMuxedDigitTree, fDeMuxedStrip, fDeMuxFile, fDeMuxTree, fDigitCharge, fDigitChargeW, fDigitDeMuxedCorrectly, fDigitSide, fDigitsInEvent, fDirection, fDmxPlaneTree, fEndPlane, fEventCharge, fEventDeMuxed, fEventLength, fEventNumber, fFilter, fHypothesisCoG, fHypothesisCoGTPos, fHypothesisMatedSignalRatio, fHypothesisNumber, fHypothesisRank, fHypothesisStat, fHypothesisTieBreaker, fHypothesisValid, DmxUtilities::FillHitPixels(), CandRecord::FindCandHandle(), fMakeTrees, fMated, fMCChargeCorrect, fMCChargeCorrect1Hyp, fMCDeMuxDigitTree, fMCDeMuxTree, fMCDigitChargeE, fMCDigitChargeW, fMCShowerSpread, fMCStripsCorrect, fMCStripSpread, fMCStripSpread24Planes, fMCTotalCharge, fMCTotalCharge1Hyp, fMultiple, fNonPhysicalFailure, fNonPhysicalPlanes, fNoVertexFailure, fNumberOfPlanesInEvent, fOneSidedUPlanes, fOneSidedVPlanes, fPlane, fPlaneDeMuxedCoG, fPlaneStray, fPlaneType, fPlaneZ, fSingleModuleCharge, fSingleModuleCorrectCharge, fSingleModuleCorrectDigits, fSingleModuleDeMux, fSingleModuleDigits, fSingleModuleTree, fStrip0, fStrip1, fStrip2, fStrip3, fStrip4, fStrip5, fStrip6, fStrip7, fTime, fUChiSq, fUIntercept, fUInterceptRMS, fUnsetDigitCheck, fUnusedDigitsTree, fUOverlap, fUseStrayPlaneCheck, fUSlope, fUSlopeRMS, fUStrayPlanes, fUValidPlanes, fValidPlanesFailure, fVChiSq, fVertexPlane, fVertexPlaneZ, fVIntercept, fVInterceptRMS, fVOverlap, fVSlope, fVSlopeRMS, fVStrayPlanes, fVValidPlanes, fXTalkDigit, fXTalkSignalRatio, DmxStatus::GetAverageTimingOffset(), PlexSEIdAltL::GetBestSEId(), PlexSEIdAltL::GetBestWeight(), CandDigitHandle::GetChannelId(), CandDigitHandle::GetCharge(), RawChannelId::GetCrate(), PlexSEIdAltL::GetCurrentSEId(), CandHandle::GetDaughterIterator(), CandDeMuxDigitHandle::GetDeMuxDigitFlagWord(), DmxUtilities::GetDigitPixel(), PlexSEIdAltL::GetEnd(), DmxStatus::GetEndPlaneNumber(), DmxStatus::GetEventDeMuxed(), DmxStatus::GetEventDirection(), DmxStatus::GetEventNumber(), MomNavigator::GetFragment(), DmxStatus::GetMultipleMuon(), DmxStatus::GetNonPhysicalFailure(), DmxStatus::GetPlaneArray(), DmxPlane::GetPlaneCharge(), DmxPlane::GetPlaneNumber(), DmxPlane::GetPlaneType(), DmxPlane::GetPlaneView(), CandDigitHandle::GetPlexSEIdAltL(), PlexStripEndId::GetStrip(), DmxPlane::GetStripCoG(), CandDigitHandle::GetTime(), DmxStatus::GetUOverlappingMultiple(), DmxStatus::GetUSlopeRMS(), DmxStatus::GetUStrayPlanes(), DmxStatus::GetUTrackChiSq(), DmxStatus::GetUTrackIntercept(), DmxStatus::GetUTrackSlope(), RawChannelId::GetVaChannel(), RawChannelId::GetVaChip(), DmxStatus::GetValidPlanesFailure(), DmxStatus::GetVertexPlaneFailure(), DmxStatus::GetVertexPlaneNumber(), DmxStatus::GetVertexZPosition(), DmxStatus::GetVOverlappingMultiple(), DmxStatus::GetVSlopeRMS(), DmxStatus::GetVStrayPlanes(), DmxStatus::GetVTrackChiSq(), DmxStatus::GetVTrackIntercept(), DmxStatus::GetVTrackSlope(), DmxPlane::GetZPosition(), DmxPlane::IsStray(), DmxPlane::IsValid(), PlexSEIdAltL::IsValid(), StripEnd::kEast, KeyFromDigitPlane(), KeyOnPlaneNumber(), DmxPlaneTypes::kMuon, JobCResult::kPassed, DmxPlaneTypes::kShower, PlaneView::kU, PlaneView::kV, Msg::kWarning, StripEnd::kWest, MSG, PlexSEIdAltL::Next(), JobCResult::SetError(), JobCResult::SetFailed(), and PlexSEIdAltL::SetFirst().

00430 {
00431   JobCResult result(JobCResult::kPassed);
00432   
00433   //MSG("JobCDmx", Msg::kDebug) << "DeMuxCosmicsModule::Ana" << endl;
00434 
00435   DmxStatus *status = dynamic_cast<DmxStatus *>(gROOT->GetRootFolder()->FindObject("Loon/DeMux/DmxStatus"));
00436   if (status == 0) {
00437     MSG("DMX", Msg::kWarning) << "//root/Loon/DeMux/DmxStatus not found." << endl;
00438     
00439     result.SetError().SetFailed();
00440     return result;
00441   }
00442   
00443   //if the event fails demuxing for any reason and filtering is turned on, 
00444   //dont pass the event on
00445   
00446   if(fFilter && fUseStrayPlaneCheck && (status->GetVOverlappingMultiple() || status->GetUOverlappingMultiple())){
00447     result.SetError().SetFailed();
00448     return result;
00449   }
00450   else if( !status->GetEventDeMuxed() && fFilter){
00451     result.SetError().SetFailed();
00452     return result;
00453   }
00454   
00455   //only do stuff in this method if you are making trees - otherwise there 
00456   //is no point to running the method.
00457   if( fMakeTrees ){
00458     
00459           DmxUtilities util;
00460 
00461           // Check that mom exists.
00462           assert(mom);
00463     
00464           // Find PrimaryCandidateRecord fragment in MOM.
00465           CandRecord *candrec = dynamic_cast<CandRecord *>
00466                   (mom->GetFragment("CandRecord", "PrimaryCandidateRecord"));
00467           if(candrec == 0){
00468                   result.SetError().SetFailed();
00469                   return result;
00470           }
00471     
00472     //Find Raw Data CandDeMuxDigitList fragment in PrimaryCandidateRecord.
00473     CandDeMuxDigitListHandle *crdlh = dynamic_cast<CandDeMuxDigitListHandle *>
00474       (candrec->FindCandHandle("CandDeMuxDigitListHandle", "canddigitlist"));
00475     
00476     // Check that crdlh exists.
00477     assert(crdlh);
00478         
00479         //check that there are digits present
00480         //MSG("DeMuxCosmics", Msg::kWarning) << crdlh->GetNDaughters() << " digits present at start of ana" << endl;
00481         
00482     
00483     //get an iterator over the digits and one extra for the single module test
00484     CandDeMuxDigitHandleItr crdhi(crdlh->GetDaughterIterator());
00485     CandDeMuxDigitHandleItr smcrdhi(crdlh->GetDaughterIterator());
00486 
00487     //create the KeyFunc
00488     CandDeMuxDigitHandleKeyFunc *planeKF = crdhi.CreateKeyFunc();
00489     CandDeMuxDigitHandleKeyFunc *smPlaneKF = smcrdhi.CreateKeyFunc();
00490     
00491     //program the KeyFunc with the sort function
00492     planeKF->SetFun(KeyFromDigitPlane);
00493     smPlaneKF->SetFun(KeyFromDigitPlane);
00494     
00495     //get the NavSet from the iterator and pass the KeyFunc to it
00496     crdhi.GetSet()->AdoptSortKeyFunc(planeKF);
00497     smcrdhi.GetSet()->AdoptSortKeyFunc(smPlaneKF);
00498     
00499     //clear the KF pointer because we no longer own the KeyFunc
00500     planeKF = 0;
00501     smPlaneKF = 0;
00502     
00503     crdhi.ResetFirst();
00504     smcrdhi.ResetFirst();
00505 
00506     //get the TObjArray of DmxPlane objects
00507     const TObjArray *planeArray = status->GetPlaneArray();
00508     
00509     //create a TObjectItr
00510     TObjectItr planeItr(planeArray);
00511     
00512     //create a KeyFunc to sort planes by number
00513     TObjectKeyFunc *pnKF = planeItr.CreateKeyFunc();
00514     
00515     //program the KeyFunc with the sort function
00516     pnKF->SetFun(KeyOnPlaneNumber);
00517     
00518     //get the NavSet from the iterator and pass the KeyFunc to it
00519     planeItr.GetSet()->AdoptSortKeyFunc(pnKF);
00520     
00521     //clear the KF pointer because we no longer own the KeyFunc
00522     pnKF = 0;
00523     
00524     fNonPhysicalPlanes = 0;
00525     fHypothesisCoG = -1.;
00526     fPlaneStray = 0;
00527     fPlaneDeMuxedCoG = -1.;
00528     fHypothesisNumber = -1;
00529     fHypothesisStat = -1.;
00530     fHypothesisTieBreaker = -1.;
00531     fHypothesisMatedSignalRatio = -1.;
00532     fHypothesisValid = -1;
00533     fPlaneType = -1;
00534     fCrate = -1;
00535     fPlane = -1;
00536     fDeMuxedStrip = -1;
00537     fOneSidedUPlanes = 0;
00538     fOneSidedVPlanes = 0;
00539     fSingleModuleCharge = -1.;
00540     fSingleModuleDigits = -1.;
00541     fSingleModuleCorrectCharge = -1.;
00542     fSingleModuleCorrectDigits = -1.;
00543     fEventCharge = 0.;
00544     fDigitsInEvent = 0;
00545     fDigitCharge = -1.;
00546     fXTalkSignalRatio = -1.;
00547     fDigitDeMuxedCorrectly = 0;
00548     fDigitSide = 0;
00549     //get generic info for event
00550     fEventNumber = status->GetEventNumber();
00551     fEventDeMuxed = (Int_t)status->GetEventDeMuxed();
00552     fValidPlanesFailure = (Int_t)status->GetValidPlanesFailure();
00553     fNoVertexFailure = (Int_t)status->GetVertexPlaneFailure();
00554     fNonPhysicalFailure = (Int_t)status->GetNonPhysicalFailure();
00555     fUOverlap = (Int_t)status->GetUOverlappingMultiple();
00556     fVOverlap = (Int_t)status->GetVOverlappingMultiple();
00557     fAverageTimingOffset = status->GetAverageTimingOffset();
00558     fUSlope = status->GetUTrackSlope();
00559     fUIntercept = status->GetUTrackIntercept();
00560     fUSlopeRMS = status->GetUSlopeRMS();
00561     fUStrayPlanes = status->GetUStrayPlanes();
00562     fUInterceptRMS = -1.;
00563     fUChiSq = status->GetUTrackChiSq();
00564     fVSlope = status->GetVTrackSlope();
00565     fVIntercept = status->GetVTrackIntercept();
00566     fVSlopeRMS = status->GetVSlopeRMS();
00567     fVStrayPlanes = status->GetVStrayPlanes();
00568     fVInterceptRMS = -1.;
00569     fVChiSq = status->GetVTrackChiSq();
00570     fUValidPlanes = 0;
00571     fVValidPlanes = 0;
00572   
00573     //zero values that need to start over with each event
00574     fVertexPlane = status->GetVertexPlaneNumber();
00575     fVertexPlaneZ = status->GetVertexZPosition();
00576     fDirection = status->GetEventDirection();
00577     fEndPlane = status->GetEndPlaneNumber();
00578     fMultiple = (Int_t)status->GetMultipleMuon();
00579     
00580     if(fMultiple == 0){planeItr.GetSet()->Slice(fVertexPlane, fEndPlane);}
00581     else if(fMultiple == 1){planeItr.GetSet()->Slice(fVertexPlane, 500);}
00582     
00583     //-----------------------------get plane info--------------------------//
00584     
00585     //get the total charge and digits in the event between vertex and end planes
00586     while( planeItr.IsValid() ){
00587       DmxPlane *currentPlane = dynamic_cast<DmxPlane *>(planeItr.Ptr());
00588       fEventCharge += currentPlane->GetPlaneCharge();
00589       fPlane = currentPlane->GetPlaneNumber();
00590       fPlaneZ = currentPlane->GetZPosition();
00591       fPlaneDeMuxedCoG = currentPlane->GetStripCoG(); 
00592       fPlaneStray = (Int_t)currentPlane->IsStray();
00593       if(currentPlane->GetPlaneView() == PlaneView::kU){
00594         if(currentPlane->IsValid()){ ++fUValidPlanes; }
00595       }
00596       else if(currentPlane->GetPlaneView() == PlaneView::kV){
00597         if(currentPlane->IsValid()){ ++fVValidPlanes; }
00598       }
00599       //if(fPlaneFitCoG > 192. || fPlaneFitCoG < 0.){ ++fNonPhysicalPlanes; }
00600       if(TMath::Abs(fPlaneDeMuxedCoG) > 4.){ ++fNonPhysicalPlanes; }
00601       
00602       crdhi.GetSet()->Slice(fPlane);
00603       
00604       //fill the DmxPlane tree
00605       if( currentPlane->IsValid() && currentPlane->GetPlaneType() == DmxPlaneTypes::kShower ){
00606         fPlaneType = 0;
00607         
00608         //loop over the best hypotheses to get their stats
00609         if(dynamic_cast<DmxShowerPlane *>(currentPlane)->GetBestHypothesis()){
00610           fHypothesisNumber = dynamic_cast<DmxShowerPlane *>(currentPlane)->GetBestHypothesis()->GetLowerBound();
00611           fHypothesisRank = 1;
00612           fHypothesisCoG = dynamic_cast<DmxShowerPlane *>(currentPlane)->GetBestHypothesis()->GetCoG();
00613           fHypothesisCoGTPos = dynamic_cast<DmxShowerPlane *>(currentPlane)->GetBestCoG();
00614           fHypothesisStat = dynamic_cast<DmxShowerPlane *>(currentPlane)->GetBestHypothesis()->GetStat();
00615           fHypothesisTieBreaker = dynamic_cast<DmxShowerPlane *>(currentPlane)->GetBestHypothesis()->GetTieBreakerStat();
00616           fHypothesisValid = (Int_t)dynamic_cast<DmxShowerPlane *>(currentPlane)->GetBestHypothesis()->IsValid();
00617           fHypothesisMatedSignalRatio = dynamic_cast<DmxShowerPlane *>(currentPlane)->GetBestHypothesis()->GetMatedSignalRatio();
00618 
00619           if(status->GetEventDeMuxed()){fDmxPlaneTree->Fill();}
00620 
00621         }
00622         if(dynamic_cast<DmxShowerPlane *>(currentPlane)->GetSecondBestHypothesis() ){
00623           fHypothesisNumber = dynamic_cast<DmxShowerPlane *>(currentPlane)->GetSecondBestHypothesis()->GetLowerBound();
00624           fHypothesisRank = 2;
00625           fHypothesisCoG = dynamic_cast<DmxShowerPlane *>(currentPlane)->GetSecondBestHypothesis()->GetCoG();
00626           fHypothesisCoGTPos = dynamic_cast<DmxShowerPlane *>(currentPlane)->GetSecondBestCoG();
00627           fHypothesisStat = dynamic_cast<DmxShowerPlane *>(currentPlane)->GetSecondBestHypothesis()->GetStat();
00628           fHypothesisTieBreaker = dynamic_cast<DmxShowerPlane *>(currentPlane)->GetSecondBestHypothesis()->GetTieBreakerStat();
00629           fHypothesisValid = (Int_t)dynamic_cast<DmxShowerPlane *>(currentPlane)->GetSecondBestHypothesis()->IsValid();
00630           fHypothesisMatedSignalRatio = dynamic_cast<DmxShowerPlane *>(currentPlane)->GetSecondBestHypothesis()->GetMatedSignalRatio();
00631           if(status->GetEventDeMuxed()){fDmxPlaneTree->Fill();}
00632 
00633         }
00634         if(dynamic_cast<DmxShowerPlane *>(currentPlane)->GetThirdBestHypothesis() ){
00635           fHypothesisNumber = dynamic_cast<DmxShowerPlane *>(currentPlane)->GetThirdBestHypothesis()->GetLowerBound();
00636           fHypothesisRank = 3;
00637           fHypothesisCoG = dynamic_cast<DmxShowerPlane *>(currentPlane)->GetThirdBestHypothesis()->GetCoG();
00638           fHypothesisCoGTPos = dynamic_cast<DmxShowerPlane *>(currentPlane)->GetThirdBestCoG();
00639           fHypothesisStat = dynamic_cast<DmxShowerPlane *>(currentPlane)->GetThirdBestHypothesis()->GetStat();
00640           fHypothesisTieBreaker = dynamic_cast<DmxShowerPlane *>(currentPlane)->GetThirdBestHypothesis()->GetTieBreakerStat();
00641           fHypothesisValid = (Int_t)dynamic_cast<DmxShowerPlane *>(currentPlane)->GetThirdBestHypothesis()->IsValid();
00642           fHypothesisMatedSignalRatio = dynamic_cast<DmxShowerPlane *>(currentPlane)->GetThirdBestHypothesis()->GetMatedSignalRatio();
00643           if(status->GetEventDeMuxed()){fDmxPlaneTree->Fill();}
00644         }
00645         
00646         //fDmxPlaneTree->Fill();
00647         fHypothesisStat = -1.;
00648         fHypothesisMatedSignalRatio = -1.;
00649         fHypothesisTieBreaker = -1.;
00650         fHypothesisRank = -1;
00651         fHypothesisValid = -1;
00652         fHypothesisCoG = -1.;
00653       }
00654       else if( currentPlane->IsValid() && currentPlane->GetPlaneType() == DmxPlaneTypes::kMuon ){
00655         fPlaneType = 1;
00656         if((Int_t)currentPlane->GetStripCoG() > 11){
00657           fHypothesisNumber = (Int_t)currentPlane->GetStripCoG() - 11;
00658         }
00659         else{ fHypothesisNumber = 0; }
00660         
00661         fHypothesisTieBreaker = -1;
00662         fHypothesisRank = 1;
00663         fHypothesisCoGTPos = dynamic_cast<DmxMuonPlane *>(currentPlane)->GetInitialCoG();
00664         fHypothesisCoG = dynamic_cast<DmxMuonPlane *>(currentPlane)->GetInitialStripCoG();
00665         fHypothesisMatedSignalRatio = 1.;
00666         fHypothesisValid = (Int_t)currentPlane->IsValid();
00667         if(status->GetEventDeMuxed()){
00668           fDmxPlaneTree->Fill();
00669           if ( fEventNumber%1000 == 0 ) {
00670             // save current working directory
00671             TDirectory* savedir = gDirectory; 
00672             // move to file directory of tree, oddly SaveSelf 
00673             //doesn't work without it
00674             fDeMuxFile->cd();
00675             // save tree to file  
00676             fDmxPlaneTree->AutoSave();
00677             // save file directory containing this tree
00678             fDeMuxFile->SaveSelf();
00679             // change back to working to directory
00680             savedir->cd();  
00681           }
00682         }
00683       }
00684       
00685       //-------------------get digit info----------------------------------//
00686       
00687       fDigitsInEvent += crdhi.SizeSelect();
00688       
00689       //loop over the digits to fill the demuxed digit info
00690       while( crdhi.IsValid() ){
00691         CandDeMuxDigitHandle *digit = crdhi.Ptr();
00692         fStrip0 = 0;
00693         fStrip1 = 0;
00694         fStrip2 = 0;
00695         fStrip3 = 0;
00696         fStrip4 = 0;
00697         fStrip5 = 0;
00698         fStrip6 = 0;
00699         fStrip7 = 0;
00700         fXTalkDigit = 1;
00701         fTime = digit->GetTime();
00702         //get the strip, charge, crate for the digit
00703         if(digit->GetPlexSEIdAltL().GetBestWeight() == 1.){
00704           fDeMuxedStrip = digit->GetPlexSEIdAltL().GetBestSEId().GetStrip();
00705         }
00706         else{ fDeMuxedStrip = -1;}
00707         
00708         //set the alternatives list to the first one
00709         digit->GetPlexSEIdAltL().SetFirst();
00710         
00711         //loop over the strip end alt list
00712         Int_t cnt = 0;
00713         while( digit->GetPlexSEIdAltL().IsValid() ){
00714           if(cnt == 0){ fStrip0 = digit->GetPlexSEIdAltL().GetCurrentSEId().GetStrip();}
00715           else if(cnt == 1){ fStrip1 = digit->GetPlexSEIdAltL().GetCurrentSEId().GetStrip();}
00716           else if(cnt == 2){ fStrip2 = digit->GetPlexSEIdAltL().GetCurrentSEId().GetStrip();}
00717           else if(cnt == 3){ fStrip3 = digit->GetPlexSEIdAltL().GetCurrentSEId().GetStrip();}
00718           else if(cnt == 4){ fStrip4 = digit->GetPlexSEIdAltL().GetCurrentSEId().GetStrip();}
00719           else if(cnt == 5){ fStrip5 = digit->GetPlexSEIdAltL().GetCurrentSEId().GetStrip();}
00720           else if(cnt == 6){ fStrip6 = digit->GetPlexSEIdAltL().GetCurrentSEId().GetStrip();}
00721           else if(cnt == 7){ fStrip7 = digit->GetPlexSEIdAltL().GetCurrentSEId().GetStrip();}
00722           ++cnt;
00723           digit->GetPlexSEIdAltL().Next();
00724         }
00725         
00726         
00727         fDigitCharge = digit->GetCharge();
00728         
00729         //MSG("DMX", Msg::kDebug) << status->GetEventNumber() << "\t" << fPlane << "\t" << fDigitCharge 
00730         //                   << "\t" << neighborSignal << "\t" << neighborSignal*fSignalFractionLimit 
00731         //           << "\t" << fSignalFractionLimit << endl;
00732         
00733         if( digit->GetDeMuxDigitFlagWord() == 0) fXTalkDigit = 0;
00734         
00735         fCrate = digit->GetChannelId().GetCrate();
00736         if(status->GetEventDeMuxed()){
00737           fDeMuxedDigitTree->Fill();
00738           if ( fEventNumber%1000 == 0 ) {
00739             TDirectory* savedir = gDirectory; // save current working directory
00740             fDeMuxFile->cd();  // move to file directory of tree, oddly SaveSelf doesn't work without it
00741             fDeMuxedDigitTree->AutoSave();  // save tree to file
00742             fDeMuxFile->SaveSelf();  // save file directory containing this tree
00743             savedir->cd();  // change back to working to directory
00744           }
00745         }
00746         crdhi.Next();
00747       }
00748       
00749       crdhi.GetSet()->Slice();
00750       crdhi.ResetFirst();
00751       
00752       planeItr.Next();
00753     }
00754     
00755     //if you arent using the cand digit masks to demux, then set them all to true
00756     //if(fDontUseCandDigitMasks){ crdhi.GetSet()->GetMasks().SetAllMasks(kTRUE); }
00757     
00758     planeItr.ResetFirst();
00759     planeItr.GetSet()->Slice();
00760 
00761     Int_t totalPlanes = planeItr.SizeSelect();
00762     fNumberOfPlanesInEvent = totalPlanes;
00763     
00764     //------------------start the efficiency tests----------------------------//
00765     
00766     if( fDataType == 0){
00767       if( fSingleModuleDeMux && status->GetEventDeMuxed() ){
00768         //get information about plane 10's shared tube 
00769         //to do some cross talk analysis later
00770         Float_t west10[16];
00771         Float_t east10[16];
00772         for(Int_t i = 0; i < 16; i++){
00773           west10[i] = 0.;
00774           east10[i] = 0.;
00775         }
00776         
00777         
00778         //slice the digit Itr to get plane 10
00779         crdhi.GetSet()->Slice(10);
00780         
00781         //fill the hit info
00782         util.FillHitPixels(crdhi, 2, east10, west10);
00783         
00784         //reset the itr
00785         crdhi.GetSet()->Slice();
00786         crdhi.ResetFirst();
00787         
00788         //slice digit Itr to get plane 12
00789         crdhi.GetSet()->Slice(12);
00790         crdhi.ResetFirst();
00791         smcrdhi.GetSet()->Slice(12);
00792         smcrdhi.ResetFirst();
00793 
00794         if(crdhi.SizeSelect()>0){
00795           fMated = 0;
00796           fSingleModuleCorrectCharge = 0.;
00797           fSingleModuleCorrectDigits = 0.;
00798           fSingleModuleCharge = 0.;
00799           fSingleModuleDigits = 0.;
00800         }
00801         
00802         //array to keep track of which pixels on which sides were hit for
00803         //the set digits//chip 2 can have xtalk from both planes 12 and 10, so put that into the signal ratio
00804         Float_t westSet1[16];
00805         Float_t eastSet1[16];
00806         Float_t westSet2[16];
00807         Float_t eastSet2[16];
00808         for(Int_t i = 0; i < 16; i++){
00809           westSet1[i] = 0.;
00810           eastSet1[i] = 0.;
00811           westSet2[i] = 0.;
00812           eastSet2[i] = 0.;
00813         }
00814         
00815         util.FillHitPixels(crdhi, 1, eastSet1, westSet1);
00816         util.FillHitPixels(crdhi, 2, eastSet2, westSet2);
00817         
00818         while( crdhi.IsValid() ){
00819           CandDeMuxDigitHandle *digit = crdhi.Ptr();
00820           
00821           //get the strip for the digit and check that it is within module 3 or module 6
00822           Int_t strip = digit->GetPlexSEIdAltL().GetBestSEId().GetStrip();
00823           fDigitCharge = digit->GetCharge()/55.;
00824           
00825           if( crdhi.Ptr()->GetPlexSEIdAltL().GetBestWeight() == 1. 
00826               && crdhi.Ptr()->GetPlexSEIdAltL().GetEnd() == StripEnd::kWest){
00827             
00828               fSingleModuleCharge += fDigitCharge;
00829               fSingleModuleDigits += 1.;
00830               fDeMuxedStrip = strip;
00831               
00832               bool mated = false;
00833               //loop over the smcrdhi to see if there is an east side digit from this strip
00834               smcrdhi.ResetFirst();
00835               while( smcrdhi.IsValid() ){
00836                 if(smcrdhi.Ptr()->GetPlexSEIdAltL().GetBestWeight() == 1. &&
00837                    smcrdhi.Ptr()->GetPlexSEIdAltL().GetBestSEId().GetStrip() == fDeMuxedStrip &&
00838                    smcrdhi.Ptr()->GetPlexSEIdAltL().GetEnd() == StripEnd::kEast)  mated = true;
00839                 smcrdhi.Next();
00840               }
00841               
00842               if( mated ) fMated = 1;
00843 
00844               Int_t chip = digit->GetChannelId().GetVaChip();
00845               Int_t channel = digit->GetChannelId().GetVaChannel();
00846               Int_t pixel = util.GetDigitPixel(channel);
00847               
00848               //get the ratio of this digits charge to the sum of its 4 nearest neighbors
00849               Float_t nearestNeighborSignal = -1.;
00850               if(chip == 1){nearestNeighborSignal = util.CheckForXTalk(pixel, westSet1);}
00851               if(chip == 2){nearestNeighborSignal = util.CheckForXTalk(pixel, westSet2) 
00852                               + util.CheckForXTalk(pixel, west10);}
00853               
00854               if(nearestNeighborSignal > 0.){fXTalkSignalRatio = fDigitCharge / (nearestNeighborSignal/55.);}
00855               
00856               //MSG("DMX12", Msg::kDebug)<< fDigitCharge << "\t" << nearestNeighborSignal/55. 
00857               //                  << "\t" << fXTalkSignalRatio << endl;
00858               
00859               
00860               if( strip >= 56 && strip <= 75 ){
00861                 fSingleModuleCorrectDigits += 1.;
00862                 fSingleModuleCorrectCharge += fDigitCharge;
00863                 fDigitDeMuxedCorrectly = 1;
00864               }
00865               else if( strip >= 116 && strip <= 135 ){
00866                 fSingleModuleCorrectDigits += 1.;
00867                 fSingleModuleCorrectCharge += fDigitCharge;
00868                 fDigitDeMuxedCorrectly = 1;
00869               }
00870               else{
00871                 fDigitDeMuxedCorrectly = 0;
00872                 //MSG("DMX", Msg::kDebug)<<"XTalkSignalRatio = " << fXTalkSignalRatio << "\tNearestNeighborsSignal = "
00873                 //              <<nearestNeighborSignal/55. << "\tDigitCharge = " << fDigitCharge << endl;
00874               } //end reconstructed in wrong module
00875               
00876               //MSG("DMX", Msg::kDebug)<<"SingleModuleCharge = " << fSingleModuleCharge 
00877               //                << "\tSingleModuleCorrectCharge = " <<fSingleModuleCorrectCharge 
00878               //                << "\tSingleModuleDigits = " << fSingleModuleDigits 
00879               //                << "\tSingleModuleCorrectDigits = " << fSingleModuleCorrectDigits 
00880               //                << endl;
00881               
00882               //fill the digit information in the tree
00883               fSingleModuleTree->Fill();
00884               if ( fEventNumber%1000 == 0 ) {
00885                 TDirectory* savedir = gDirectory; // save current working directory
00886                 fDeMuxFile->cd();  // move to file directory of tree, oddly SaveSelf doesn't work without it
00887                 fSingleModuleTree->AutoSave();  // save tree to file
00888                 fDeMuxFile->SaveSelf();  // save file directory containing this tree
00889                 savedir->cd();  // change back to working to directory
00890               }
00891               fXTalkSignalRatio = -1.;
00892               fMated = 0;
00893               fDigitDeMuxedCorrectly = 0;
00894             } //end if from west side and set
00895           crdhi.Next();
00896         } //end loop over digits
00897         
00898         crdhi.GetSet()->Slice();
00899         crdhi.ResetFirst();
00900         smcrdhi.GetSet()->Slice();
00901         smcrdhi.ResetFirst();
00902       }
00903       
00904       if( fUnsetDigitCheck && status->GetEventDeMuxed() ){
00905         
00906         //slice to get planes between the vertex and end
00907         planeItr.GetSet()->Slice(status->GetVertexPlaneNumber(), status->GetEndPlaneNumber());
00908         planeItr.ResetFirst();
00909         
00910         //loop over the planes and print their reconstructions
00911         while( planeItr.IsValid() ){
00912           DmxPlane *plane = dynamic_cast<DmxPlane *>(planeItr.Ptr());
00913           
00914           Int_t planeNumber = plane->GetPlaneNumber();
00915           
00916           //slice the digit iterator to the current plane
00917           crdhi.GetSet()->Slice(planeNumber);
00918           
00919           //array to keep track of which pixels on which planes were hit for
00920           //the set digits
00921           Float_t westSet0[16];
00922           Float_t eastSet0[16];
00923           Float_t westSet1[16];
00924           Float_t eastSet1[16];
00925           Float_t westSet2[16];
00926           Float_t eastSet2[16];
00927           for(Int_t i = 0; i < 16; i++){
00928             westSet0[i] = 0.;
00929             eastSet0[i] = 0.;
00930             westSet1[i] = 0.;
00931             eastSet1[i] = 0.;
00932             westSet2[i] = 0.;
00933             eastSet2[i] = 0.;
00934           }
00935           
00936           util.FillHitPixels(crdhi, 0, eastSet0, westSet0);
00937           crdhi.ResetFirst();
00938           util.FillHitPixels(crdhi, 1, eastSet1, westSet1);
00939           crdhi.ResetFirst();
00940           util.FillHitPixels(crdhi, 2, eastSet2, westSet2);
00941           
00942           crdhi.ResetFirst();
00943           
00944           //loop over the digits and see if they have been set
00945           while( crdhi.IsValid() ){
00946             
00947             //get the digit and it's strip, plane, and side
00948             CandDeMuxDigitHandle *digit = crdhi.Ptr();
00949             fDigitCharge = digit->GetCharge()/55.;
00950             
00951             Int_t chip = digit->GetChannelId().GetVaChip();
00952             Int_t pixel = util.GetDigitPixel(digit->GetChannelId().GetVaChannel());
00953             
00954             //see if the best weight is < 1.0 - if so, the digit had no strip chosen
00955             if(digit->GetPlexSEIdAltL().GetBestWeight() < 1.0){
00956               
00957               Float_t nearestNeighborSignal = -1.;
00958               if(digit->GetPlexSEIdAltL().GetEnd() == StripEnd::kEast){
00959                 if(chip == 0){nearestNeighborSignal = util.CheckForXTalk(pixel, eastSet0);}
00960                 if(chip == 1){nearestNeighborSignal = util.CheckForXTalk(pixel, eastSet1);}
00961                 if(chip == 2){nearestNeighborSignal = util.CheckForXTalk(pixel, eastSet2);}
00962                 fDigitSide = 0;
00963               }
00964               if(digit->GetPlexSEIdAltL().GetEnd() == StripEnd::kWest){
00965                 if(chip == 0){nearestNeighborSignal = util.CheckForXTalk(pixel, westSet0);}
00966                 if(chip == 1){nearestNeighborSignal = util.CheckForXTalk(pixel, westSet1);}
00967                 if(chip == 2){nearestNeighborSignal = util.CheckForXTalk(pixel, westSet2);}
00968                 fDigitSide = 1;
00969               }
00970               
00971               if(nearestNeighborSignal > 0.){fXTalkSignalRatio = fDigitCharge / (nearestNeighborSignal/55.);}
00972               
00973               fUnusedDigitsTree->Fill();
00974               if ( fEventNumber%1000 == 0 ) {
00975                 TDirectory* savedir = gDirectory; // save current working directory
00976                 fDeMuxFile->cd();  // move to file directory of tree, oddly SaveSelf doesn't work without it
00977                 fUnusedDigitsTree->AutoSave();  // save tree to file
00978                 fDeMuxFile->SaveSelf();  // save file directory containing this tree
00979                 savedir->cd();  // change back to working to directory
00980               }
00981 
00982               fXTalkSignalRatio = -1.;
00983             }
00984             crdhi.Next();
00985           }
00986           
00987           //clear the digit slice
00988           crdhi.GetSet()->Slice();
00989           planeItr.Next();
00990         }
00991         
00992         //reset the digit itr
00993         crdhi.GetSet()->Slice();
00994         crdhi.ResetFirst();
00995         
00996         //reset the planeItr
00997         planeItr.GetSet()->Slice();
00998         planeItr.ResetFirst();
00999         
01000       } //end UnsetDigitCheck test
01001       
01002       if( fEventLength ){
01003         
01004         if( status->GetValidPlanesFailure() ){ 
01005           //MSG("DmxDigit", Msg::kDebug) << "Event = " << status->GetEventNumber() << endl;
01006           
01007           while( planeItr.IsValid() ){
01008             
01009             crdhi.GetSet()->Slice(dynamic_cast<DmxPlane *>(planeItr.Ptr())->GetPlaneNumber());
01010             
01011             //declare variables to see if the digits from this plane come from each side
01012             Bool_t westDigits = false;
01013             Bool_t eastDigits = false;
01014             
01015             while( crdhi.IsValid() ){
01016               
01017               if(crdhi.Ptr()->GetPlexSEIdAltL().GetEnd() == StripEnd::kWest ){
01018                 //  MSG("DmxDigit", Msg::kDebug) << "\tPlane = " 
01019                 //                                        << dynamic_cast<DmxPlane *>(planeItr.Ptr())->GetPlaneNumber() 
01020                 //                                        << "\tSide = West\t" << "chip = " 
01021                 //                                        << crdhi.Ptr()->GetChannelId().GetVaChip()
01022                 //                                        << "\tpixel = " 
01023                 //                                        << status->GetDigitPixel(crdhi.Ptr()->GetChannelId().GetVaChannel()) 
01024                 //                                        << "\tcharge = " << crdhi.Ptr()->GetCharge() << endl;
01025                 westDigits = true;
01026               }
01027               if(crdhi.Ptr()->GetPlexSEIdAltL().GetEnd() == StripEnd::kEast ){
01028                 //  MSG("DmxDigit", Msg::kDebug) << "\tPlane = " 
01029                 //                                        << dynamic_cast<DmxPlane *>(planeItr.Ptr())->GetPlaneNumber() 
01030                 //                                        << "\tSide = East\t" << "chip = " 
01031                 //                                        << crdhi.Ptr()->GetChannelId().GetVaChip()
01032                 //                                        << "\tpixel = " 
01033                 //                                        << status->GetDigitPixel(crdhi.Ptr()->GetChannelId().GetVaChannel()) 
01034                 //                                        << "\tcharge = " << crdhi.Ptr()->GetCharge() << endl;
01035                 eastDigits = true;
01036               }
01037               crdhi.Next();
01038               
01039             } //end loop over digits
01040             
01041             crdhi.GetSet()->Slice();
01042             crdhi.ResetFirst();
01043             
01044             
01045             if( dynamic_cast<DmxPlane *>(planeItr.Ptr())->GetPlaneView() == PlaneView::kU){
01046               if( !westDigits || !eastDigits){ fOneSidedUPlanes += 1; }
01047             }
01048             if( dynamic_cast<DmxPlane *>(planeItr.Ptr())->GetPlaneView() == PlaneView::kV){
01049               if( !westDigits || !eastDigits){ fOneSidedVPlanes += 1; }
01050             }
01051             planeItr.Next();
01052             
01053           } //end loop over planes
01054           
01055           planeItr.ResetFirst();
01056           
01057         }//end valid plane failure
01058         else if( status->GetVertexPlaneFailure() ){ 
01059           if( fNumberOfPlanesInEvent > 3 ){
01060             //MSG("DmxVertex", Msg::kDebug) << "Event = " << status->GetEventNumber() << endl;
01061             
01062             bool westSide = false;
01063             bool eastSide = false;
01064             
01065             while( planeItr.IsValid() ){
01066               
01067               crdhi.GetSet()->Slice(dynamic_cast<DmxPlane *>(planeItr.Ptr())->GetPlaneNumber());
01068               
01069               while( crdhi.IsValid() ){
01070                 
01071                 if(crdhi.Ptr()->GetPlexSEIdAltL().GetEnd() == StripEnd::kWest ){
01072                   //  MSG("DmxVertex", Msg::kDebug) << "\tPlane = " 
01073                   //                                         << dynamic_cast<DmxPlane *>(planeItr.Ptr())->GetPlaneNumber() 
01074                   //                                         << "\tIsValid = "
01075                   //                                         << (Int_t)dynamic_cast<DmxPlane *>(planeItr.Ptr())->IsValid() 
01076                   //                                         << "\tSide = West\t" << "chip = " 
01077                   //                                         << crdhi.Ptr()->GetChannelId().GetVaChip()
01078                   //                                         << "\tpixel = " 
01079                   //                                         << status->GetDigitPixel(crdhi.Ptr()->GetChannelId().GetVaChannel()) 
01080                   //                                         << "\tcharge = " << crdhi.Ptr()->GetCharge() << endl;
01081                   westSide = true;
01082                 }
01083                 if(crdhi.Ptr()->GetPlexSEIdAltL().GetEnd() == StripEnd::kEast ){
01084                   //  MSG("DmxVertex", Msg::kDebug) << "\tPlane = " 
01085                   //                                         << dynamic_cast<DmxPlane *>(planeItr.Ptr())->GetPlaneNumber() 
01086                   //                                         << "\tIsValid = "
01087                   //                                         << (Int_t)dynamic_cast<DmxPlane *>(planeItr.Ptr())->IsValid() 
01088                   //                                         << "\tSide = East\t" << "chip = " 
01089                   //                                         << crdhi.Ptr()->GetChannelId().GetVaChip()
01090                   //                                         << "\tpixel = " 
01091                   //                                         << status->GetDigitPixel(crdhi.Ptr()->GetChannelId().GetVaChannel()) 
01092                   //                                         << "\tcharge = " << crdhi.Ptr()->GetCharge() << endl;
01093                   eastSide = true;
01094                 }
01095                 crdhi.Next();
01096                 
01097               } //end loop over digits
01098               
01099               crdhi.GetSet()->Slice();
01100               crdhi.ResetFirst();
01101               
01102               planeItr.Next();
01103               
01104             } //end loop over planes
01105             
01106             planeItr.ResetFirst();
01107           } //if more than 10 planes
01108           
01109         }// end vertex plane failure
01110       }// end if EventLength test
01111       
01112                 //Find Raw Data CandDeMuxDigitList fragment in PrimaryCandidateRecord.
01113                 CandDeMuxDigitListHandle *crdlh1 = dynamic_cast<CandDeMuxDigitListHandle *>
01114                 (candrec->FindCandHandle("CandDeMuxDigitListHandle", "canddigitlist"));
01115                 
01116                 // Check that crdlh exists.
01117                 assert(crdlh1);
01118                 
01119                 //check that there are digits present
01120                 //MSG("DeMuxCosmics", Msg::kWarning) << crdlh1->GetNDaughters() << " digits present at end of real data" << endl;
01121                 
01122                 
01123                 
01124     } //end if FarDetector data
01125     
01126     else if( fDataType == 1 ){
01127 
01128       //MSG("Dmx", Msg::kDebug) << "event " << fEventNumber << endl;
01129       //*-* Find Raw Data CandDigitList fragment in PrimaryCandidateRecord.
01130       CandDigitListHandle *cmdlh = dynamic_cast<CandDigitListHandle *>
01131         (candrec->FindCandHandle("CandDigitListHandle", "candmcdigitlist"));
01132       
01133       // Check that cmdlh exists.
01134       assert(cmdlh);
01135       
01136       // Get CandDigitHandleItr over MC Truth digits.
01137       CandDigitHandleItr cmdhi(cmdlh->GetDaughterIterator());
01138        
01139       //create the KeyFunc
01140       CandDigitHandleKeyFunc *mcplaneKF = cmdhi.CreateKeyFunc();
01141       
01142       //program the KeyFunc with the sort function
01143       mcplaneKF->SetFun(KeyFromDigitPlane);
01144             
01145       //get the NavSet from the iterator and pass the KeyFunc to it
01146       cmdhi.GetSet()->AdoptSortKeyFunc(mcplaneKF);
01147       
01148       //clear the KF pointer because we no longer own the KeyFunc
01149       mcplaneKF = 0;
01150        
01151       //reset the mc and raw digit iterators
01152       cmdhi.ResetFirst();
01153       crdhi.ResetFirst();
01154       
01155       //reset the plane iterator
01156       planeItr.ResetFirst();
01157       
01158 
01159       //make arrays to hold the strip hit information
01160       Float_t reconStripsW[192], reconStripsE[192], mcStripsW[192], mcStripsE[192];
01161       Float_t chargeCorrect = 0., stripsCorrect = 0.;
01162       Float_t totalCharge = 0., totalStrips = 0.;
01163       Float_t totalCharge1Hyp = 0.;//, chargeCorrect1Hyp = 0.;
01164       Float_t mcCoG = 0.;
01165       Float_t mcNum = 0.;
01166       Float_t mcDeNom = 0.;
01167       Int_t firstStrip = 0;
01168       Int_t lastStrip = 0;
01169       fMCStripSpread24Planes = 0;
01170       fMCShowerSpread = 0;
01171       Int_t lowShowerStrip = 192;
01172       Int_t highShowerStrip = -1;
01173       //loop over the planes in the event
01174       while( planeItr.IsValid() ){
01175         DmxPlane *currentPlane = dynamic_cast<DmxPlane *>(planeItr.Ptr());
01176         fPlane = currentPlane->GetPlaneNumber();
01177         mcNum = 0.;
01178         mcDeNom = 0.;
01179         mcCoG = 0.;
01180         firstStrip = 0;
01181         lastStrip = 0;
01182 
01183         //MSG("Dmx", Msg::kDebug) << "event " << fEventNumber << "plane " << fPlane << endl;
01184         //-------------------get digit info----------------------------------//
01185         //zero the arrays
01186         for(Int_t i = 0; i < 192; i++){
01187           reconStripsW[i] = 0;
01188           mcStripsW[i] = 0;
01189           reconStripsE[i] = 0;
01190           mcStripsE[i] = 0;
01191         }
01192       
01193         //slice for the digits in this plane
01194         crdhi.GetSet()->Slice(fPlane);
01195         cmdhi.GetSet()->Slice(fPlane);
01196         
01197         //loop over the digits to fill the demuxed digit info
01198         while( crdhi.IsValid() ){
01199           CandDeMuxDigitHandle *digit = crdhi.Ptr();
01200           //get the strip, charge, crate for the digit
01201           if(digit->GetPlexSEIdAltL().GetEnd() == StripEnd::kWest){
01202             reconStripsW[digit->GetPlexSEIdAltL().GetBestSEId().GetStrip()] += digit->GetCharge();
01203           }
01204           else if(digit->GetPlexSEIdAltL().GetEnd() == StripEnd::kEast){
01205             reconStripsE[digit->GetPlexSEIdAltL().GetBestSEId().GetStrip()] += digit->GetCharge();
01206           }
01207           
01208           crdhi.Next();
01209         }
01210 
01211         //now for the mc digits
01212         while( cmdhi.IsValid() ){
01213           CandDigitHandle *digit = cmdhi.Ptr();
01214           //get the strip, charge, crate for the digit
01215           if(digit->GetPlexSEIdAltL().GetEnd() == StripEnd::kWest){
01216             mcStripsW[digit->GetPlexSEIdAltL().GetBestSEId().GetStrip()] += digit->GetCharge();
01217           }
01218           else if(digit->GetPlexSEIdAltL().GetEnd() == StripEnd::kEast){
01219             mcStripsE[digit->GetPlexSEIdAltL().GetBestSEId().GetStrip()] += digit->GetCharge();
01220           }
01221           mcNum += digit->GetCharge() * digit->GetPlexSEIdAltL().GetBestSEId().GetStrip();
01222           mcDeNom += digit->GetCharge();
01223           
01224           cmdhi.Next();
01225         }
01226 
01227         if(mcDeNom > 0.) mcCoG = mcNum/mcDeNom;
01228 
01229         crdhi.GetSet()->Slice();
01230         crdhi.ResetFirst();
01231         cmdhi.GetSet()->Slice();
01232         cmdhi.ResetFirst();
01233         
01234         for(Int_t ss = 0; ss<192; ss++){
01235           if(mcStripsE[ss]>0. && firstStrip == 0) firstStrip = ss;
01236           else if(mcStripsW[ss]>0. && firstStrip == 0) firstStrip = ss;
01237           if(mcStripsE[ss]>0. || mcStripsW[ss]>0.) lastStrip = ss;
01238 
01239           //fill variables to check and see if the shower extends more than a meter in the detector
01240           if(currentPlane->GetPlaneType()==DmxPlaneTypes::kShower && (mcStripsE[ss]>0.||mcStripsW[ss]>0.)){
01241             if(ss>highShowerStrip) highShowerStrip = ss;
01242             if(ss<lowShowerStrip) lowShowerStrip = ss;
01243           }
01244         }
01245 
01246         fMCStripSpread = lastStrip - firstStrip;
01247 
01248         for(Int_t s = 0; s<192; s++){
01249           fDeMuxedStrip = s;
01250           fDigitCharge = -1.;
01251           fMCDigitChargeE = -1.;
01252           fDigitChargeW = -1.;
01253           fMCDigitChargeW = -1.;
01254           fDigitSide = -1;
01255 
01256           if(mcStripsE[s] != 0.){
01257             fMCDigitChargeE = mcStripsE[s];
01258             totalCharge += mcStripsE[s];
01259             totalStrips += 1.;
01260             if(TMath::Abs(mcCoG-s)<=23) totalCharge1Hyp += mcStripsE[s];
01261           }
01262           if(mcStripsW[s] != 0.){
01263             fMCDigitChargeW = mcStripsW[s];
01264             totalCharge += mcStripsW[s];
01265             totalStrips += 1.;
01266             if(TMath::Abs(mcCoG-s)<=23) totalCharge1Hyp += mcStripsW[s];
01267           }
01268           if(reconStripsE[s] != 0.) fDigitCharge = reconStripsE[s];
01269           if(reconStripsW[s] != 0.) fDigitChargeW = reconStripsW[s];
01270             
01271 
01272           if(reconStripsW[s] == mcStripsW[s] && reconStripsW[s] != 0.){
01273             chargeCorrect += mcStripsW[s];
01274             //if(TMath::Abs(mcCoG-s)<=23) chargeCorrect1Hyp += reconStripsW[s];
01275           }
01276           if(reconStripsE[s] == mcStripsE[s] && reconStripsE[s] != 0.){
01277             chargeCorrect += mcStripsE[s];
01278             //if(TMath::Abs(mcCoG-s)<=23) chargeCorrect1Hyp += reconStripsE[s];
01279           }
01280           if((reconStripsE[s] == mcStripsE[s]) && (reconStripsW[s] == mcStripsW[s])) stripsCorrect += 1.;
01281          
01282           
01283           fMCDeMuxDigitTree->Fill();
01284           if ( fEventNumber%1000 == 0 ) {
01285             TDirectory* savedir = gDirectory; // save current working directory
01286             fDeMuxFile->cd();  // move to file directory of tree, oddly SaveSelf doesn't work without it
01287             fMCDeMuxDigitTree->AutoSave();  // save tree to file
01288             fDeMuxFile->SaveSelf();  // save file directory containing this tree
01289             savedir->cd();  // change back to working to directory
01290           }
01291 
01292         }//end loop to fill digit tree
01293 
01294         if(fMCStripSpread>23) ++fMCStripSpread24Planes;
01295              
01296         planeItr.Next();
01297       } //end loop over planes in event
01298       
01299       fMCChargeCorrect = -1.;
01300       fMCChargeCorrect1Hyp = -1.;
01301       fMCStripsCorrect = -1.;
01302      
01303       if(totalCharge != 0.){
01304         fMCChargeCorrect = chargeCorrect/totalCharge;
01305         fMCTotalCharge = totalCharge;
01306       }
01307       if(totalCharge1Hyp != 0.){
01308         fMCChargeCorrect1Hyp = chargeCorrect/totalCharge1Hyp;
01309         fMCTotalCharge1Hyp = totalCharge1Hyp;
01310       }
01311       if(totalStrips != 0.) fMCStripsCorrect = stripsCorrect/totalStrips;
01312       fMCShowerSpread = highShowerStrip-lowShowerStrip;
01313 
01314       //cout << "filling mc demux tree" << endl;
01315       fMCDeMuxTree->Fill();
01316       if ( fEventNumber%1000 == 0 ) {
01317         TDirectory* savedir = gDirectory; // save current working directory
01318         fDeMuxFile->cd();  // move to file directory of tree, oddly SaveSelf doesn't work without it
01319         fMCDeMuxTree->AutoSave();  // save tree to file
01320         fDeMuxFile->SaveSelf();  // save file directory containing this tree
01321         savedir->cd();  // change back to working to directory
01322       }
01323 
01324     } //end if MonteCarlo data
01325     
01326     //fill the DeMux info Tree
01327 
01328     fDeMuxTree->Fill();
01329     if ( fEventNumber%1000 == 0 ) {
01330       TDirectory* savedir = gDirectory; // save current working directory
01331       fDeMuxFile->cd();  // move to file directory of tree, oddly SaveSelf doesn't work without it
01332       fDeMuxTree->AutoSave();  // save tree to file
01333       fDeMuxFile->SaveSelf();  // save file directory containing this tree
01334       savedir->cd();  // change back to working to directory
01335     }
01336 
01337   }
01338   //MSG("JobCDmx", Msg::kDebug) << "finished ana" << endl;
01339   
01340   // Find PrimaryCandidateRecord fragment in MOM.
01341   CandRecord *candrec = dynamic_cast<CandRecord *>
01342           (mom->GetFragment("CandRecord", "PrimaryCandidateRecord"));
01343   if(candrec == 0){
01344           result.SetError().SetFailed();
01345           return result;
01346   }
01347   
01348   
01349   //Find Raw Data CandDeMuxDigitList fragment in PrimaryCandidateRecord.
01350   CandDeMuxDigitListHandle *crdlh = dynamic_cast<CandDeMuxDigitListHandle *>
01351       (candrec->FindCandHandle("CandDeMuxDigitListHandle", "canddigitlist"));
01352   
01353   // Check that crdlh exists.
01354   assert(crdlh);
01355   
01356   //check that there are digits present
01357   //MSG("DeMuxCosmics", Msg::kWarning) << crdlh->GetNDaughters() << " digits present at end of ana" << endl;
01358   
01359   return result;
01360 }

void DmxDeMuxCosmicsModule::BeginJob ( void   )  [virtual]

Implement for notification of begin of job

Reimplemented from JobCModule.

Definition at line 233 of file DmxDeMuxCosmicsModule.cxx.

References fAverageTimingOffset, fCrate, fDeMuxedDigitTree, fDeMuxedStrip, fDeMuxFile, fDeMuxTree, fDigitCharge, fDigitChargeW, fDigitDeMuxedCorrectly, fDigitSide, fDigitsInEvent, fDirection, fDmxPlaneTree, fEndPlane, fEventCharge, fEventDeMuxed, fEventNumber, fHistoFileName, fHypothesisCoG, fHypothesisCoGTPos, fHypothesisMatedSignalRatio, fHypothesisNumber, fHypothesisRank, fHypothesisStat, fHypothesisTieBreaker, fHypothesisValid, fMakeTrees, fMated, fMCChargeCorrect, fMCChargeCorrect1Hyp, fMCDeMuxDigitTree, fMCDeMuxTree, fMCDigitChargeE, fMCDigitChargeW, fMCEndPlane, fMCShowerSpread, fMCStripsCorrect, fMCStripSpread, fMCStripSpread24Planes, fMCTotalCharge, fMCTotalCharge1Hyp, fMCVertexPlane, fMultiple, fNonPhysicalFailure, fNonPhysicalPlanes, fNoVertexFailure, fNumberOfPlanesInEvent, fOneSidedUPlanes, fOneSidedVPlanes, fPlane, fPlaneDeMuxedCoG, fPlaneStray, fPlaneType, fPlaneZ, fSingleModuleCharge, fSingleModuleCorrectCharge, fSingleModuleCorrectDigits, fSingleModuleDeMux, fSingleModuleDigits, fSingleModuleTree, fStrip0, fStrip1, fStrip2, fStrip3, fStrip4, fStrip5, fStrip6, fStrip7, fTime, fUnsetDigitCheck, fUnusedDigitsTree, fUOverlap, fUStrayPlanes, fUValidPlanes, fValidPlanesFailure, fVertexPlane, fVertexPlaneZ, fVOverlap, fVStrayPlanes, fVValidPlanes, fXTalkDigit, and fXTalkSignalRatio.

00234 { 
00235 
00236   if(fMakeTrees && !fDeMuxFile){
00237     // save the current working directory
00238     TDirectory* savedir  = gDirectory;  
00239 
00240     //create the new TFile for demuxing
00241     // this changes the value of gDirectory
00242     fDeMuxFile = new TFile(fHistoFileName,"RECREATE");  
00243     
00244     // create TTree's, these will attach themselves to the current 
00245     //working directory (demux_cosmics.root)
00246    
00247     fDeMuxTree = new TTree("fDeMuxTree", "DeMux Info Tree");
00248     fDeMuxedDigitTree = new TTree("fDeMuxedDigitTree", "DeMuxed Digit Info");
00249     fDmxPlaneTree = new TTree("fDmxPlaneTree", "DeMux Plane Info");
00250     
00251     fDeMuxTree->Branch("Event", &fEventNumber, "fEventNumber/I"); 
00252     fDeMuxTree->Branch("DeMuxed", &fEventDeMuxed, "fEventDeMuxed/I");
00253     fDeMuxTree->Branch("Vertex", &fVertexPlane, "fVertexPlane/I");
00254     fDeMuxTree->Branch("VertexZ", &fVertexPlaneZ, "fVertexPlaneZ/F");
00255     fDeMuxTree->Branch("Direction", &fDirection, "fDirection/I");
00256     fDeMuxTree->Branch("End", &fEndPlane, "fEndPlane/I");
00257     fDeMuxTree->Branch("NumberOfPlanesHit", &fNumberOfPlanesInEvent, "fNumberOfPlanesInEvent/I");
00258     fDeMuxTree->Branch("EventCharge", &fEventCharge, "fEventCharge/F");
00259     fDeMuxTree->Branch("DigitsInEvent", &fDigitsInEvent, "fDigitsInEvent/I");
00260     fDeMuxTree->Branch("Multiple", &fMultiple, "fMultiple/I");
00261     fDeMuxTree->Branch("NonPhysicalPlanes", &fNonPhysicalPlanes, "fNonPhysicalPlanes/I");
00262     fDeMuxTree->Branch("ValidPlanesFailure", &fValidPlanesFailure, "fValidPlanesFailure/I");
00263     fDeMuxTree->Branch("NoVertexFailure", &fNoVertexFailure, "fNoVertexFailure/I");
00264     fDeMuxTree->Branch("NonPhysicalFailure", &fNonPhysicalFailure, "fNonPhysicalFailure/I");
00265     fDeMuxTree->Branch("OneSidedUPlanes", &fOneSidedUPlanes, "fOneSidedUPlanes/I");
00266     fDeMuxTree->Branch("OneSidedVPlanes", &fOneSidedVPlanes, "fOneSidedVPlanes/I");
00267     fDeMuxTree->Branch("SingleModuleCharge", &fSingleModuleCharge, "fSingleModuleCharge/F");
00268     fDeMuxTree->Branch("SingleModuleCorrectCharge", &fSingleModuleCorrectCharge, "fSingleModuleCorrectCharge/F");
00269     fDeMuxTree->Branch("SingleModuleDigits", &fSingleModuleDigits, "fSingleModuleDigits/F");
00270     fDeMuxTree->Branch("SingleModuleCorrectDigits", &fSingleModuleCorrectDigits, "fSingleModuleCorrectDigits/F");
00271     fDeMuxTree->Branch("UStrayPlanes", &fUStrayPlanes, "fUStrayPlanes/I");
00272     fDeMuxTree->Branch("VStrayPlanes", &fVStrayPlanes, "fVStrayPlanes/I");
00273     fDeMuxTree->Branch("UValidPlanes", &fUValidPlanes, "fUValidPlanes/I");
00274     fDeMuxTree->Branch("VValidPlanes", &fVValidPlanes, "fVValidPlanes/I");
00275     fDeMuxTree->Branch("UOverlappingMultiple", &fUOverlap, "fUOverlap/I");
00276     fDeMuxTree->Branch("VOverlappingMultiple", &fVOverlap, "fVOverlap/I");
00277     fDeMuxTree->Branch("AvTimingOffset", &fAverageTimingOffset, "fAverageTimingOffset/F");
00278     //fDeMuxTree->SetAutoSave(10000);
00279     
00280     fDeMuxedDigitTree->Branch("Event", &fEventNumber, "fEventNumber/I");
00281     fDeMuxedDigitTree->Branch("Plane", &fPlane, "fPlane/I");
00282     fDeMuxedDigitTree->Branch("Crate", &fCrate, "fCrate/I");
00283     fDeMuxedDigitTree->Branch("ADC", &fDigitCharge, "fDigitCharge/F");
00284     fDeMuxedDigitTree->Branch("Time", &fTime, "fTime/D");
00285     fDeMuxedDigitTree->Branch("Strip0", &fStrip0, "fStrip0/I");
00286     fDeMuxedDigitTree->Branch("Strip1", &fStrip1, "fStrip1/I");
00287     fDeMuxedDigitTree->Branch("Strip2", &fStrip2, "fStrip2/I");
00288     fDeMuxedDigitTree->Branch("Strip3", &fStrip3, "fStrip3/I");
00289     fDeMuxedDigitTree->Branch("Strip4", &fStrip4, "fStrip4/I");
00290     fDeMuxedDigitTree->Branch("Strip5", &fStrip5, "fStrip5/I");
00291     fDeMuxedDigitTree->Branch("Strip6", &fStrip6, "fStrip6/I");
00292     fDeMuxedDigitTree->Branch("Strip7", &fStrip7, "fStrip7/I");
00293     fDeMuxedDigitTree->Branch("DeMuxedStrip", &fDeMuxedStrip, "fDeMuxedStrip/I");
00294     fDeMuxedDigitTree->Branch("XTalkDigit", &fXTalkDigit, "fXTalkDigit/I");
00295     //fDeMuxedDigitTree->SetAutoSave(100000);
00296     
00297     fDmxPlaneTree->Branch("Event", &fEventNumber, "fEventNumber/I");
00298     fDmxPlaneTree->Branch("Plane", &fPlane, "fPlane/I");
00299     fDmxPlaneTree->Branch("PlaneZ", &fPlaneZ, "fPlaneZ/F");
00300     fDmxPlaneTree->Branch("PlaneType", &fPlaneType, "fPlaneType/I");
00301     fDmxPlaneTree->Branch("PlaneCoG", &fPlaneDeMuxedCoG, "fPlaneDeMuxedCoG/F");
00302     fDmxPlaneTree->Branch("Stray", &fPlaneStray, "fPlaneStray/I");
00303     fDmxPlaneTree->Branch("HypothesisCoG", &fHypothesisCoG, "fHypothesisCoG/F");
00304     fDmxPlaneTree->Branch("HypothesisCoGTPos", &fHypothesisCoGTPos, "fHypothesisCoGTPos/F");
00305     fDmxPlaneTree->Branch("Hypothesis", &fHypothesisNumber, "fHypothesisNumber/I");
00306     fDmxPlaneTree->Branch("MatedSignal", &fHypothesisMatedSignalRatio, "fHypothesisMatedSignalRatio/F");
00307     fDmxPlaneTree->Branch("Statistic", &fHypothesisStat, "fHypothesisStat/F");
00308     fDmxPlaneTree->Branch("TieBreaker", &fHypothesisTieBreaker, "fHypothesisTieBreaker/F");
00309     fDmxPlaneTree->Branch("Rank", &fHypothesisRank, "fHypothesisRank/I");
00310     fDmxPlaneTree->Branch("Valid", &fHypothesisValid, "fHypothesisValid/I");
00311     //fDmxPlaneTree->SetAutoSave(10000);
00312 
00313     fMCDeMuxDigitTree = new TTree("fMCDeMuxDigitTree", "MC DeMux Digit Tree");
00314     fMCDeMuxDigitTree->Branch("Event", &fEventNumber, "fEventNumber/I");
00315     fMCDeMuxDigitTree->Branch("TruthDigitChargeE", &fMCDigitChargeE, "fMCDigitChargeE/F");
00316     fMCDeMuxDigitTree->Branch("TruthDigitChargeW", &fMCDigitChargeW, "fMCDigitChargeW/F");
00317     fMCDeMuxDigitTree->Branch("DigitChargeE", &fDigitCharge, "fDigitCharge/F");
00318     fMCDeMuxDigitTree->Branch("DigitChargeW", &fDigitChargeW, "fDigitChargeW/F");
00319     fMCDeMuxDigitTree->Branch("Plane", &fPlane, "fPlane/I");
00320     fMCDeMuxDigitTree->Branch("Strip", &fDeMuxedStrip, "fDeMuxedStrip/I");
00321     fMCDeMuxDigitTree->Branch("MCStripSpread", &fMCStripSpread, "fMCStripSpread/I");
00322     //fMCDeMuxDigitTree->SetAutoSave(10000);
00323         
00324     fMCDeMuxTree = new TTree("fMCDeMuxTree", "MC DeMux Tree");
00325     fMCDeMuxTree->Branch("Event", &fEventNumber, "fEventNumber/I"); 
00326     fMCDeMuxTree->Branch("Vertex", &fMCVertexPlane, "fVertexPlane/I");
00327     fMCDeMuxTree->Branch("End", &fMCEndPlane, "fEndPlane/I");
00328     fMCDeMuxTree->Branch("ChargeCorrect", &fMCChargeCorrect, "fMCChargeCorrect/F");
00329     fMCDeMuxTree->Branch("ChargeCorrect1Hyp", &fMCChargeCorrect1Hyp, "fMCChargeCorrect1Hyp/F");
00330     fMCDeMuxTree->Branch("TotalCharge", &fMCTotalCharge, "fMCTotalCorrect/F");
00331     fMCDeMuxTree->Branch("TotalCharge1Hyp", &fMCTotalCharge1Hyp, "fMCTotalCharge1Hyp/F");
00332     fMCDeMuxTree->Branch("StripsCorrect", &fMCStripsCorrect, "fMCStripsCorrect/F");
00333     fMCDeMuxTree->Branch("StripSpread24Planes", &fMCStripSpread24Planes, "fMCStripSpread24Planes/I");
00334     fMCDeMuxTree->Branch("ShowerSpread", &fMCShowerSpread, "fMCShowerSpread/I");
00335     
00336     
00337     //fMCDeMuxTree->SetAutoSave(10000);
00338     
00339     // change back to current working directory before leaving constructor
00340     savedir->cd();   
00341   }
00342 
00343   //set up the TTrees for the various tests
00344   if( fSingleModuleDeMux && fMakeTrees){
00345     
00346     // save the current working directory
00347     TDirectory* savedir = gDirectory; 
00348     fDeMuxFile->cd();
00349 
00350     fSingleModuleTree = new TTree("fSingleModuleTree", "SingleModule Test Tree");
00351     fSingleModuleTree->Branch("Event", &fEventNumber, "fEventNumber/I"); 
00352     fSingleModuleTree->Branch("DigitCharge", &fDigitCharge, "fDigitCharge/F");
00353     fSingleModuleTree->Branch("XTalkSignalRatio", &fXTalkSignalRatio, "fXTalkSignalRatio/D");
00354     fSingleModuleTree->Branch("Strip", &fDeMuxedStrip, "fDeMuxedStrip/I");
00355     fSingleModuleTree->Branch("Mated", &fMated, "fMated/I");
00356     fSingleModuleTree->Branch("DigitDeMuxedCorrectly", &fDigitDeMuxedCorrectly, "fDigitDeMuxedCorrectly/I");
00357     
00358     // change back to current working directory
00359     savedir->cd(); 
00360   }
00361   if( fUnsetDigitCheck && fMakeTrees){
00362 
00363     // save the current working directory
00364     TDirectory* savedir = gDirectory; 
00365     fDeMuxFile->cd();
00366 
00367     fUnusedDigitsTree = new TTree("fUnusedDigitsTree", "UnsetDigitCheck Test Tree");
00368     fUnusedDigitsTree->Branch("Event", &fEventNumber, "fEventNumber/I"); 
00369     fUnusedDigitsTree->Branch("DigitCharge", &fDigitCharge, "fDigitCharge/F");
00370     fUnusedDigitsTree->Branch("XTalkSignalRatio", &fXTalkSignalRatio, "fXTalkSignalRatio/D");
00371     fUnusedDigitsTree->Branch("DigitSide", &fDigitSide, "fDigitSide/F");
00372     
00373     // change back to current working directory
00374     savedir->cd(); 
00375   }
00376   
00377   return;
00378 }

void DmxDeMuxCosmicsModule::Config ( const Registry r  )  [virtual]

Return the actual configuration. If your module directly pulls its configuration from the fConfig Registry, you don't need to override this. Override if you have local config variables.

Reimplemented from JobCModule.

Definition at line 1467 of file DmxDeMuxCosmicsModule.cxx.

References fDataType, fDontUseCandDigitMasks, fEventLength, fFilter, fHistoFileName, fHoughIntercept, fHoughPeak, fHoughSlope, fMakeTrees, fMatedSignalForValid, fPlanesInWindow, fSignalFractionLimit, fSingleModuleDeMux, fStrayDeltaStripLimit, fStrayPlanesLimit, fUnsetDigitCheck, fUseStrayPlaneCheck, fWriteHistos, and Registry::Get().

01468 {
01469   int         tmpb;  // a temp bool. See comment under DefaultConfig...
01470   int         tmpi;  // a temp int.
01471   double      tmpd;  // a temp double.
01472   const char* tmps;  // a temp string
01473 
01474   if (r.Get("SingleModuleDemux",   tmpb)) fSingleModuleDeMux     =  tmpb;
01475   if (r.Get("EventLength",         tmpb)) fEventLength           =  tmpb;
01476   if (r.Get("UnsetDigitCheck",     tmpb)) fUnsetDigitCheck       =  tmpb;
01477   if (r.Get("UseCandDigitMasks",   tmpb)) fDontUseCandDigitMasks = !tmpb;
01478   if (r.Get("WriteHistos",         tmpb)) fWriteHistos           =  tmpb;
01479   if (r.Get("MakeTrees",           tmpb)) fMakeTrees             =  tmpb;
01480   if (r.Get("HistoFileName",       tmps)) fHistoFileName         =  tmps;
01481   if (r.Get("DataType",            tmpi)) fDataType              =  tmpi;
01482   if (r.Get("WindowSize",          tmpi)) fPlanesInWindow        =  tmpi;
01483   if (r.Get("StrayDeltaStripLimit",tmpi)) fStrayDeltaStripLimit  =  tmpi;
01484   if (r.Get("StrayPlaneLimit",     tmpi)) fStrayPlanesLimit      =  tmpi;
01485   if (r.Get("UseFigureOfMerit",    tmpb)) fUseStrayPlaneCheck    =  tmpb;
01486   if (r.Get("Filter",              tmpb)) fFilter                =  tmpb;
01487   if (r.Get("HoughSlopeRMS",       tmpd)) fHoughSlope            =  tmpd;
01488   if (r.Get("HoughInterceptRMS",   tmpd)) fHoughIntercept        =  tmpd;
01489   if (r.Get("HoughPeak",           tmpd)) fHoughPeak             =  tmpd;
01490   if (r.Get("XTalkFractionLimit",  tmpd)) fSignalFractionLimit   =  tmpd;
01491   if (r.Get("RatioMatedSignalForValid",  tmpd)) fMatedSignalForValid   =  tmpd;
01492  
01493 }

const Registry & DmxDeMuxCosmicsModule::DefaultConfig ( void   )  const [virtual]

Get the default configuration registry. This should normally be overridden. One useful idiom is to implement it like:

const Registry& MyModule::DefaultConfig() const { static Registry cfg; // never is destroyed if (cfg.Size()) return cfg; // already filled it // set defaults: cfg.Set("TheAnswer",42); cfg.Set("Units","unknown"); return cfg; }

Reimplemented from JobCModule.

Definition at line 1418 of file DmxDeMuxCosmicsModule.cxx.

References Msg::kDebug, Registry::LockValues(), MSG, Registry::Set(), and Registry::UnLockValues().

01419 {
01420   //  Commands implemented:
01421   //    Set TestToMake  Set the test to make to obtain a figure of merit - fraction of
01422   //                    digits within n strips from a track, fraction of mated signal
01423   //                    DigitsAlongTrack, and MatedSignalFraction respectively
01424   //    Set DataType    Set the type of data to test - MonteCarlo or FarDetector
01425   //    Set MatedSignalLimit  Set the lower limit for fraction of signal coming from opposite
01426   //                          sides of the same strip in a plane.
01427   //    Set DeltaStripsFromTrack  Set the number of strips a digit can be off from a track and
01428   //                              still be considered along that track.
01429   //
01430   //  see http://beaker.astro.indiana.edu/brebel/demux_notes/how_to_demux.html for details
01431    int itrue = 1;  // work around for lack of bool in registry
01432    int ifalse = 0; // work around for lack of bool in registry
01433 
01434    MSG("JobC", Msg::kDebug) << "DeMuxCosmicsModule::DefaultConfig" << endl;
01435 
01436    static Registry r;
01437  
01438    r.UnLockValues();
01439 
01440    r.Set("SingleModuleDeMux",ifalse);
01441    r.Set("EventLength",      ifalse);
01442    r.Set("UnsetDigitCheck",  ifalse);
01443    r.Set("DataType",         0);
01444    
01445    r.Set("WriteHistos",          itrue);
01446    r.Set("MakeTrees",            ifalse);
01447    r.Set("HistoFileName",        "demux_cosmics.root");
01448    r.Set("Filter",               ifalse);
01449    r.Set("UseCandDigitMasks",    itrue);
01450    r.Set("WindowSize",           6);
01451    r.Set("StrayDeltaStripLimit", 6);
01452    r.Set("StrayPlaneLimit",      4);
01453    r.Set("UseFigureOfMerit",     ifalse);
01454    r.Set("HoughSlopeRMS",        5.);
01455    r.Set("HoughInterceptRMS",    10.);
01456    r.Set("HoughPeak",            0.66);
01457    r.Set("XTalkFractionLimit",  0.1);
01458    r.Set("RatioMatedSignalForValid",  0.5);
01459    
01460    r.LockValues();
01461       
01462    return r;
01463 }

void DmxDeMuxCosmicsModule::EndJob (  )  [virtual]

Implement for notification of end of job

Reimplemented from JobCModule.

Definition at line 1506 of file DmxDeMuxCosmicsModule.cxx.

References fDeMuxFile, and fMakeTrees.

01507 {
01508   //save the trees to a file
01509   if(fMakeTrees && fDeMuxFile){
01510     
01511 //     if(fDataType==1){
01512 //       fMCDeMuxTree->Write();
01513 //       fMCDeMuxDigitTree->Write();
01514 //     }
01515     fDeMuxFile->Write();
01516     fDeMuxFile->Close();
01517   }
01518   return;
01519 }

void DmxDeMuxCosmicsModule::FindDigitsChiSq ( Double_t &  uChiSq,
Double_t &  vChiSq,
CandDeMuxDigitHandleItr &  digitItr,
Double_t  uIntercept,
Double_t  uSlope,
Double_t  vIntercept,
Double_t  vSlope 
)

Definition at line 1521 of file DmxDeMuxCosmicsModule.cxx.

References digit(), PlexSEIdAltL::GetBestSEId(), PlexSEIdAltL::GetPlane(), PlexSEIdAltL::GetPlaneView(), CandDigitHandle::GetPlexSEIdAltL(), PlexStripEndId::GetStrip(), PlaneView::kU, and PlaneView::kV.

01524 {
01525   uChiSq = 0.;
01526   vChiSq = 0.;
01527   Double_t xi = 0.;
01528   Double_t weight = 0.;
01529   Double_t yi = 0.;
01530   Double_t yxi = 0.;
01531   Double_t quotient = 0.;
01532   Int_t uDigits = -1;
01533   Int_t vDigits = -1;
01534   digitItr.ResetFirst();
01535     
01536   while( digitItr.IsValid() ){
01537 
01538     CandDeMuxDigitHandle *digit = digitItr.Ptr();
01539 
01540     if( digitItr.GetSet()->GetMasks().GetMask(digit) ){
01541       xi = digit->GetPlexSEIdAltL().GetPlane();
01542 
01543       //make the weight the inverse of the charge - that means that digits with more
01544       //charge make a bigger contribution to the chi^2 and you are more interested 
01545       //in getting those right.
01546       weight = 1.; //10000. / digit->GetCharge();
01547       yi = 1. * digit->GetPlexSEIdAltL().GetBestSEId().GetStrip();
01548       
01549       if( digit->GetPlexSEIdAltL().GetPlaneView() == PlaneView::kU ){
01550         ++uDigits;
01551         yxi = uIntercept + (xi * uSlope);
01552         quotient = (yi - yxi) / weight;
01553       
01554         uChiSq += quotient * quotient;
01555       }
01556       else if( digit->GetPlexSEIdAltL().GetPlaneView() == PlaneView::kV ){
01557         ++vDigits;
01558         yxi = vIntercept + (xi * vSlope);
01559         quotient = (yi - yxi) / weight;
01560       
01561         vChiSq += quotient * quotient;
01562       }
01563     }
01564     digitItr.Next();
01565   }  
01566 
01567   digitItr.ResetFirst();
01568   
01569   if(vDigits > 0){ vChiSq /= 1.*vDigits; }
01570   if(uDigits > 0){ uChiSq /= 1.*uDigits; }
01571   return;
01572 }

void DmxDeMuxCosmicsModule::FindPlanesChiSq ( Double_t &  uChiSq,
Double_t &  vChiSq,
TObjectItr &  planeItr,
Double_t  uIntercept,
Double_t  uSlope,
Double_t  vIntercept,
Double_t  vSlope 
)

Definition at line 1574 of file DmxDeMuxCosmicsModule.cxx.

References DmxPlane::GetCoG(), DmxPlane::GetPlaneNumber(), DmxPlane::GetPlaneView(), PlaneView::kU, and PlaneView::kV.

01577 {
01578   uChiSq = 0.;
01579   vChiSq = 0.;
01580   Double_t xi = 0.;
01581   Double_t weight = 0.;
01582   Double_t yi = 0.;
01583   Double_t yxi = 0.;
01584   Double_t quotient = 0.;
01585   Int_t uPlanes = -1;
01586   Int_t vPlanes = -1;
01587   planeItr.ResetFirst();
01588     
01589   while( planeItr.IsValid() ){
01590 
01591     DmxPlane *plane = dynamic_cast<DmxPlane *>(planeItr.Ptr());
01592 
01593     xi = plane->GetPlaneNumber();
01594 
01595     //weight each plane as 1.  this means that the chi^2 is the square of the 
01596     //difference between the fit and actual cog
01597     weight = 1.; 
01598     yi = plane->GetCoG();
01599       
01600     if( plane->GetPlaneView() == PlaneView::kU ){
01601         ++uPlanes;
01602         yxi = uIntercept + (xi * uSlope);
01603         quotient = (yi - yxi) / weight;
01604       
01605         uChiSq += quotient * quotient;
01606     }
01607     else if( plane->GetPlaneView() == PlaneView::kV ){
01608         ++vPlanes;
01609         yxi = vIntercept + (xi * vSlope);
01610         quotient = (yi - yxi) / weight;
01611       
01612         vChiSq += quotient * quotient;
01613     }
01614     
01615     planeItr.Next();
01616   }  
01617 
01618   planeItr.ResetFirst();
01619   
01620   if(vPlanes > 0){ vChiSq /= 1.*vPlanes; }
01621   if(uPlanes > 0){ uChiSq /= 1.*uPlanes; }
01622   return;
01623 }

void DmxDeMuxCosmicsModule::HandleCommand ( JobCommand command  )  [virtual]

Implement to handle a JobCommand

Reimplemented from JobCModule.

Definition at line 1364 of file DmxDeMuxCosmicsModule.cxx.

References fDataType, fDontUseCandDigitMasks, fEventLength, fFilter, fHistoFileName, fMakeTrees, fPlanesInWindow, fSingleModuleDeMux, fStrayDeltaStripLimit, fStrayPlanesLimit, fUnsetDigitCheck, fUseStrayPlaneCheck, fWriteHistos, Msg::kDebug, Msg::kWarning, MSG, JobCommand::PopCmd(), JobCommand::PopIntOpt(), and JobCommand::PopOpt().

01365 {
01366   //
01367   //  Purpose:  Method to interpret module commands.
01368   //
01369   //  Arguments:
01370   //    command   in    Command to interpret.
01371   //
01372   //  Return:   n/a
01373   //
01374   //  Commands implemented:
01375   //    Set TestToMake  Set the test to make to obtain a figure of merit - fraction of
01376   //                    digits within n strips from a track, fraction of mated signal
01377   //                    DigitsAlongTrack, and MatedSignalFraction respectively
01378   //    Set DataType    Set the type of data to test - MonteCarlo or FarDetector
01379   //    Set MatedSignalLimit  Set the lower limit for fraction of signal coming from opposite
01380   //                          sides of the same strip in a plane.
01381   //    Set DeltaStripsFromTrack  Set the number of strips a digit can be off from a track and
01382   //                              still be considered along that track.
01383   //
01384   //  see http://beaker.astro.indiana.edu/brebel/demux_notes/how_to_demux.html for details
01385    MSG("JobC", Msg::kDebug) << "DeMuxCosmicsModule::HandleCommand" << endl;
01386 
01387    TString cmd = command->PopCmd();
01388    if(cmd == "Set"){   
01389      TString opt = command->PopOpt();
01390      if(opt == "DataType"){ fDataType = command->PopIntOpt();}
01391      else if(opt == "TestToMake"){ 
01392        TString testopt = command->PopOpt();
01393        if(testopt == "SingleModuleDeMux"){ fSingleModuleDeMux = true;}
01394        if(testopt == "EventLength"){ fEventLength = true;}
01395        if(testopt == "UnsetDigitCheck"){ fUnsetDigitCheck = true;}
01396      }
01397      else if(opt == "UseStrayPlanesCheck"){ fUseStrayPlaneCheck = true;}
01398      else if(opt == "DontUseCandDigitMasks"){ fDontUseCandDigitMasks = true;}
01399      else if(opt == "WriteHistos"){ fWriteHistos = true;}
01400      else if(opt == "DontMakeTrees"){ fMakeTrees = false;}
01401      else if(opt == "WindowSize"){ fPlanesInWindow = command->PopIntOpt();}
01402      else if(opt == "StrayDeltaStripLimit"){ fStrayDeltaStripLimit = command->PopIntOpt();}
01403      else if(opt == "StrayPlanesLimit"){ fStrayPlanesLimit = command->PopIntOpt();}
01404      else if(opt == "Filter"){ cout << fFilter << endl; fFilter = 1;}
01405      else if(opt == "HistoFileName"){ fHistoFileName = command->PopOpt();}
01406      else {
01407          MSG("JobC", Msg::kWarning)<< "DeMuxCosmicsModule: Unrecognized option " << opt << endl;
01408       }
01409    }
01410    else {
01411      MSG("JobC", Msg::kWarning)<< "DeMuxCosmicsModule: Unrecognized command " << cmd << endl;
01412    }
01413    return;
01414 }

void DmxDeMuxCosmicsModule::Help (  )  [virtual]

Implement to spew some useful help to cout

Reimplemented from JobCModule.

Definition at line 1496 of file DmxDeMuxCosmicsModule.cxx.

References Msg::kInfo, and MSG.

01497 {
01498   MSG("JobC", Msg::kInfo) 
01499     << "DeMuxCosmicsModule::Help\n"
01500     <<"DmxDeMuxCosmicsModule is a module which demultiplexes events "
01501     <<"in the far detector." << endl
01502     << "see http://beaker.astro.indiana.edu/brebel/demux_notes/how_to_demux.html for details"
01503     << endl;
01504 }

JobCResult DmxDeMuxCosmicsModule::Reco ( MomNavigator mom  )  [virtual]

Implement this for read-write access to the MomNavigator

Reimplemented from JobCModule.

Definition at line 382 of file DmxDeMuxCosmicsModule.cxx.

References CandRecord::FindCandHandle(), AlgFactory::GetAlgHandle(), MomNavigator::GetFragment(), AlgFactory::GetInstance(), JobCResult::kPassed, AlgHandle::RunAlg(), JobCResult::SetError(), and JobCResult::SetFailed().

00383 {
00384   JobCResult result(JobCResult::kPassed);
00385 
00386   //MSG("JobCDmx", Msg::kDebug) << "DeMuxCosmicsModule::Reco starting" << endl;
00387 
00388   // Check that mom exists.
00389   assert(mom);
00390 
00391   // Find PrimaryCandidateRecord fragment in MOM.
00392   CandRecord *candrec = dynamic_cast<CandRecord *>
00393     (mom->GetFragment("CandRecord", "PrimaryCandidateRecord"));
00394   if (candrec == 0) {
00395     result.SetError().SetFailed();
00396     return result;
00397   }
00398 
00399   //MSG("JobCDmx", Msg::kDebug) << "got cand record" << endl;
00400   //*-* Find Raw Data CandDeMuxDigitList fragment in PrimaryCandidateRecord.
00401   CandDeMuxDigitListHandle *crdlh = dynamic_cast<CandDeMuxDigitListHandle *>
00402     (candrec->FindCandHandle("CandDeMuxDigitListHandle", "canddigitlist"));
00403   if (crdlh == 0) {
00404     result.SetError().SetFailed();
00405     return result;
00406   }
00407     
00408   AlgFactory &af = AlgFactory::GetInstance();
00409   AlgHandle ah = af.GetAlgHandle("AlgDeMuxCosmics", "default");
00410   //AlgHandle ah = af.GetAlgHandle("AlgDeMuxGolden", "default");
00411     
00412   CandContext cx(this, mom);
00413   //cx.SetDataIn(status);
00414   
00415   //MSG("JobCDmx", Msg::kDebug) << "starting demux algorithm " << snarl << endl;
00416   ah.RunAlg(*crdlh, cx);
00417   //MSG("JobCDmx", Msg::kDebug) << "finished demux algorithm " << snarl << endl;
00418   
00419   
00420   //MSG("JobCDmx", Msg::kDebug) << "Event DeMuxed" << endl;
00421   
00422   return result;
00423 }


Member Data Documentation

Definition at line 52 of file DmxDeMuxCosmicsModule.h.

Referenced by Ana(), and BeginJob().

Definition at line 53 of file DmxDeMuxCosmicsModule.h.

Referenced by Ana(), and BeginJob().

Definition at line 54 of file DmxDeMuxCosmicsModule.h.

Referenced by Ana(), Config(), and HandleCommand().

Definition at line 55 of file DmxDeMuxCosmicsModule.h.

Definition at line 163 of file DmxDeMuxCosmicsModule.h.

Referenced by Ana(), and BeginJob().

Definition at line 56 of file DmxDeMuxCosmicsModule.h.

Referenced by Ana(), and BeginJob().

Definition at line 57 of file DmxDeMuxCosmicsModule.h.

Definition at line 158 of file DmxDeMuxCosmicsModule.h.

Referenced by Ana(), BeginJob(), EndJob(), and ~DmxDeMuxCosmicsModule().

Definition at line 161 of file DmxDeMuxCosmicsModule.h.

Referenced by Ana(), and BeginJob().

Definition at line 58 of file DmxDeMuxCosmicsModule.h.

Referenced by Ana(), and BeginJob().

Definition at line 59 of file DmxDeMuxCosmicsModule.h.

Referenced by Ana(), and BeginJob().

Definition at line 60 of file DmxDeMuxCosmicsModule.h.

Referenced by Ana(), and BeginJob().

Definition at line 62 of file DmxDeMuxCosmicsModule.h.

Referenced by Ana(), and BeginJob().

Definition at line 61 of file DmxDeMuxCosmicsModule.h.

Referenced by Ana(), and BeginJob().

Definition at line 63 of file DmxDeMuxCosmicsModule.h.

Referenced by Ana(), and BeginJob().

Definition at line 164 of file DmxDeMuxCosmicsModule.h.

Referenced by Ana(), and BeginJob().

Definition at line 64 of file DmxDeMuxCosmicsModule.h.

Referenced by Config(), and HandleCommand().

Definition at line 65 of file DmxDeMuxCosmicsModule.h.

Referenced by Ana(), and BeginJob().

Definition at line 66 of file DmxDeMuxCosmicsModule.h.

Referenced by Ana(), and BeginJob().

Definition at line 67 of file DmxDeMuxCosmicsModule.h.

Referenced by Ana(), and BeginJob().

Definition at line 68 of file DmxDeMuxCosmicsModule.h.

Referenced by Ana(), Config(), and HandleCommand().

Definition at line 69 of file DmxDeMuxCosmicsModule.h.

Referenced by Ana(), and BeginJob().

Definition at line 70 of file DmxDeMuxCosmicsModule.h.

Referenced by Ana(), Config(), and HandleCommand().

Definition at line 71 of file DmxDeMuxCosmicsModule.h.

const Char_t* DmxDeMuxCosmicsModule::fHistoFileName [private]

Definition at line 72 of file DmxDeMuxCosmicsModule.h.

Referenced by BeginJob(), Config(), and HandleCommand().

Definition at line 74 of file DmxDeMuxCosmicsModule.h.

Referenced by Config().

Definition at line 75 of file DmxDeMuxCosmicsModule.h.

Referenced by Config().

Definition at line 73 of file DmxDeMuxCosmicsModule.h.

Referenced by Config().

Definition at line 76 of file DmxDeMuxCosmicsModule.h.

Referenced by Ana(), and BeginJob().

Definition at line 77 of file DmxDeMuxCosmicsModule.h.

Referenced by Ana(), and BeginJob().

Definition at line 78 of file DmxDeMuxCosmicsModule.h.

Referenced by Ana(), and BeginJob().

Definition at line 79 of file DmxDeMuxCosmicsModule.h.

Referenced by Ana(), and BeginJob().

Definition at line 80 of file DmxDeMuxCosmicsModule.h.

Referenced by Ana(), and BeginJob().

Definition at line 81 of file DmxDeMuxCosmicsModule.h.

Referenced by Ana(), and BeginJob().

Definition at line 82 of file DmxDeMuxCosmicsModule.h.

Referenced by Ana(), and BeginJob().

Definition at line 83 of file DmxDeMuxCosmicsModule.h.

Referenced by Ana(), and BeginJob().

Definition at line 84 of file DmxDeMuxCosmicsModule.h.

Referenced by Ana(), BeginJob(), Config(), EndJob(), and HandleCommand().

Definition at line 85 of file DmxDeMuxCosmicsModule.h.

Referenced by Ana(), and BeginJob().

Definition at line 86 of file DmxDeMuxCosmicsModule.h.

Referenced by Config().

Definition at line 89 of file DmxDeMuxCosmicsModule.h.

Referenced by Ana(), and BeginJob().

Definition at line 90 of file DmxDeMuxCosmicsModule.h.

Referenced by Ana(), and BeginJob().

Definition at line 169 of file DmxDeMuxCosmicsModule.h.

Referenced by Ana(), and BeginJob().

Definition at line 168 of file DmxDeMuxCosmicsModule.h.

Referenced by Ana(), and BeginJob().

Definition at line 87 of file DmxDeMuxCosmicsModule.h.

Referenced by Ana(), and BeginJob().

Definition at line 88 of file DmxDeMuxCosmicsModule.h.

Referenced by Ana(), and BeginJob().

Definition at line 95 of file DmxDeMuxCosmicsModule.h.

Referenced by BeginJob().

Definition at line 96 of file DmxDeMuxCosmicsModule.h.

Referenced by Ana(), and BeginJob().

Definition at line 93 of file DmxDeMuxCosmicsModule.h.

Referenced by Ana(), and BeginJob().

Definition at line 97 of file DmxDeMuxCosmicsModule.h.

Referenced by Ana(), and BeginJob().

Definition at line 98 of file DmxDeMuxCosmicsModule.h.

Referenced by Ana(), and BeginJob().

Definition at line 91 of file DmxDeMuxCosmicsModule.h.

Referenced by Ana(), and BeginJob().

Definition at line 92 of file DmxDeMuxCosmicsModule.h.

Referenced by Ana(), and BeginJob().

Definition at line 94 of file DmxDeMuxCosmicsModule.h.

Referenced by BeginJob().

Definition at line 99 of file DmxDeMuxCosmicsModule.h.

Referenced by Ana(), and BeginJob().

Definition at line 100 of file DmxDeMuxCosmicsModule.h.

Referenced by Ana(), and BeginJob().

Definition at line 101 of file DmxDeMuxCosmicsModule.h.

Referenced by Ana(), and BeginJob().

Definition at line 102 of file DmxDeMuxCosmicsModule.h.

Referenced by Ana(), and BeginJob().

Definition at line 103 of file DmxDeMuxCosmicsModule.h.

Referenced by Ana(), and BeginJob().

Definition at line 104 of file DmxDeMuxCosmicsModule.h.

Referenced by Ana(), and BeginJob().

Definition at line 105 of file DmxDeMuxCosmicsModule.h.

Referenced by Ana(), and BeginJob().

Definition at line 106 of file DmxDeMuxCosmicsModule.h.

Referenced by Ana(), and BeginJob().

Definition at line 108 of file DmxDeMuxCosmicsModule.h.

Referenced by Ana(), and BeginJob().

Definition at line 110 of file DmxDeMuxCosmicsModule.h.

Referenced by Config(), and HandleCommand().

Definition at line 109 of file DmxDeMuxCosmicsModule.h.

Referenced by Ana(), and BeginJob().

Definition at line 111 of file DmxDeMuxCosmicsModule.h.

Referenced by Ana(), and BeginJob().

Float_t DmxDeMuxCosmicsModule::fPlaneZ [private]

Definition at line 107 of file DmxDeMuxCosmicsModule.h.

Referenced by Ana(), and BeginJob().

Definition at line 112 of file DmxDeMuxCosmicsModule.h.

Referenced by Config().

Definition at line 114 of file DmxDeMuxCosmicsModule.h.

Referenced by Ana(), and BeginJob().

Definition at line 115 of file DmxDeMuxCosmicsModule.h.

Referenced by Ana(), and BeginJob().

Definition at line 117 of file DmxDeMuxCosmicsModule.h.

Referenced by Ana(), and BeginJob().

Definition at line 113 of file DmxDeMuxCosmicsModule.h.

Referenced by Ana(), BeginJob(), Config(), and HandleCommand().

Definition at line 116 of file DmxDeMuxCosmicsModule.h.

Referenced by Ana(), and BeginJob().

Definition at line 165 of file DmxDeMuxCosmicsModule.h.

Referenced by Ana(), and BeginJob().

Definition at line 118 of file DmxDeMuxCosmicsModule.h.

Definition at line 119 of file DmxDeMuxCosmicsModule.h.

Referenced by Config(), and HandleCommand().

Definition at line 156 of file DmxDeMuxCosmicsModule.h.

Referenced by Config(), and HandleCommand().

Definition at line 120 of file DmxDeMuxCosmicsModule.h.

Referenced by Ana(), and BeginJob().

Definition at line 121 of file DmxDeMuxCosmicsModule.h.

Referenced by Ana(), and BeginJob().

Definition at line 122 of file DmxDeMuxCosmicsModule.h.

Referenced by Ana(), and BeginJob().

Definition at line 123 of file DmxDeMuxCosmicsModule.h.

Referenced by Ana(), and BeginJob().

Definition at line 124 of file DmxDeMuxCosmicsModule.h.

Referenced by Ana(), and BeginJob().

Definition at line 125 of file DmxDeMuxCosmicsModule.h.

Referenced by Ana(), and BeginJob().

Definition at line 126 of file DmxDeMuxCosmicsModule.h.

Referenced by Ana(), and BeginJob().

Definition at line 127 of file DmxDeMuxCosmicsModule.h.

Referenced by Ana(), and BeginJob().

TFolder* DmxDeMuxCosmicsModule::fTFolder [private]

Definition at line 170 of file DmxDeMuxCosmicsModule.h.

Double_t DmxDeMuxCosmicsModule::fTime [private]

Definition at line 128 of file DmxDeMuxCosmicsModule.h.

Referenced by Ana(), and BeginJob().

Definition at line 166 of file DmxDeMuxCosmicsModule.h.

Definition at line 148 of file DmxDeMuxCosmicsModule.h.

Definition at line 129 of file DmxDeMuxCosmicsModule.h.

Definition at line 130 of file DmxDeMuxCosmicsModule.h.

Double_t DmxDeMuxCosmicsModule::fUChiSq [private]

Definition at line 138 of file DmxDeMuxCosmicsModule.h.

Referenced by Ana().

Definition at line 132 of file DmxDeMuxCosmicsModule.h.

Referenced by Ana().

Definition at line 137 of file DmxDeMuxCosmicsModule.h.

Referenced by Ana().

Definition at line 149 of file DmxDeMuxCosmicsModule.h.

Referenced by Ana(), BeginJob(), Config(), and HandleCommand().

Definition at line 167 of file DmxDeMuxCosmicsModule.h.

Referenced by Ana(), and BeginJob().

Definition at line 136 of file DmxDeMuxCosmicsModule.h.

Referenced by Ana(), and BeginJob().

Definition at line 155 of file DmxDeMuxCosmicsModule.h.

Referenced by Ana(), Config(), and HandleCommand().

Double_t DmxDeMuxCosmicsModule::fUSlope [private]

Definition at line 131 of file DmxDeMuxCosmicsModule.h.

Referenced by Ana().

Definition at line 133 of file DmxDeMuxCosmicsModule.h.

Referenced by Ana().

Definition at line 134 of file DmxDeMuxCosmicsModule.h.

Referenced by Ana(), and BeginJob().

Definition at line 135 of file DmxDeMuxCosmicsModule.h.

Referenced by Ana(), and BeginJob().

Definition at line 150 of file DmxDeMuxCosmicsModule.h.

Referenced by Ana(), and BeginJob().

Double_t DmxDeMuxCosmicsModule::fVChiSq [private]

Definition at line 146 of file DmxDeMuxCosmicsModule.h.

Referenced by Ana().

Definition at line 151 of file DmxDeMuxCosmicsModule.h.

Referenced by Ana(), and BeginJob().

Definition at line 152 of file DmxDeMuxCosmicsModule.h.

Referenced by Ana(), and BeginJob().

Definition at line 140 of file DmxDeMuxCosmicsModule.h.

Referenced by Ana().

Definition at line 145 of file DmxDeMuxCosmicsModule.h.

Referenced by Ana().

Definition at line 144 of file DmxDeMuxCosmicsModule.h.

Referenced by Ana(), and BeginJob().

Double_t DmxDeMuxCosmicsModule::fVSlope [private]

Definition at line 139 of file DmxDeMuxCosmicsModule.h.

Referenced by Ana().

Definition at line 141 of file DmxDeMuxCosmicsModule.h.

Referenced by Ana().

Definition at line 142 of file DmxDeMuxCosmicsModule.h.

Referenced by Ana(), and BeginJob().

Definition at line 143 of file DmxDeMuxCosmicsModule.h.

Referenced by Ana(), and BeginJob().

Definition at line 153 of file DmxDeMuxCosmicsModule.h.

Referenced by Config(), and HandleCommand().

Definition at line 147 of file DmxDeMuxCosmicsModule.h.

Referenced by Ana(), and BeginJob().

Definition at line 154 of file DmxDeMuxCosmicsModule.h.

Referenced by Ana(), and BeginJob().


The documentation for this class was generated from the following files:

Generated on 22 Nov 2017 for loon by  doxygen 1.6.1