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

SRMom.cxx

Go to the documentation of this file.
00001 
00002 // $Id: SRMom.cxx,v 1.8 2009/02/28 21:46:14 gmieg Exp $
00003 //
00004 // Wrapper to the MomNavigator to provide a simple interface.
00005 //
00006 // Justin Evans
00007 // j.evans2@physics.ox.ac.uk
00008 //
00009 // $Log: SRMom.cxx,v $
00010 // Revision 1.8  2009/02/28 21:46:14  gmieg
00011 // Update for GCC 4.4.0.  Mostly add #includes
00012 // for reorganized C++ headers, such as -
00013 // algorithm for: sort, find
00014 // cassert for:   assert, abort
00015 // climits for:   SHRT_MAX, INT_MAX
00016 // cstdlib for:   abs, getenv, atoi, atof, strtod, exit
00017 // cstring for:   strcmp
00018 //
00019 // Revision 1.7  2008/05/02 15:46:25  rhatcher
00020 // Remove #include level circular dependency that P. Rodrigues discovered.
00021 //
00022 // Revision 1.6  2007/11/11 06:42:06  rhatcher
00023 // Part of the ongoing purge of "DetectorType" in favor of "Detector"
00024 // (the former is a synonym of the latter ...)
00025 //
00026 // Revision 1.5  2007/04/06 21:12:39  evans
00027 // Code to get at shower vertices.
00028 //
00029 // Revision 1.4  2007/03/27 13:31:20  evans
00030 // New code to calculate my charge PID (requires pdfs in /data).
00031 // Also includes code to calculate track jitter given an NtpSRTrack object.
00032 //
00033 // Revision 1.3  2007/02/07 20:42:41  evans
00034 // Removing the Mad dependency from SRMom.
00035 //
00036 // Revision 1.2  2007/02/05 22:03:30  rhatcher
00037 // #ifdef away the #include "NuMuBar/NuMadAnalysis.h" and most of the code
00038 // in SRMom::PID().  These introduce a dependency on the NuMuBar package
00039 // which *isn't* currently part of the base release (and thus breaks building
00040 // NtupleUtils on most sites).
00041 //
00042 // Revision 1.1  2007/02/05 14:45:51  evans
00043 // Adding the code to calculate the majority curvature for a track.
00044 //
00045 // To calculate the majority curvature for an NtpSRTrack object, pass it to the function MajorityCurvature::Curvature(const NtpSRTrack* track) const.
00046 // The return value is the majority curvature of the track.
00047 //
00048 // The class SRMom is a wrapper to the MomNavigator that has been submitted as MajorityCurvature uses some of its methods.
00049 //
00050 //
00051 //
00053 
00054 #include "TClonesArray.h"
00055 
00056 #include "BeamDataNtuple/NtpBDLiteRecord.h"
00057 #include "CandNtupleSR/NtpSREvent.h"
00058 #include "CandNtupleSR/NtpSRMomentum.h"
00059 #include "CandNtupleSR/NtpSRShower.h"
00060 #include "CandNtupleSR/NtpSRTrack.h"
00061 #include "CandNtupleSR/NtpSRVertex.h"
00062 #include "Conventions/Munits.h"
00063 #include "DataUtil/GetDetector.h"
00064 #include "DataUtil/PlaneOutline.h"
00065 // for now code that needs MadDpID is commented out
00066 //#include "Mad/MadDpID.h"
00067 #include "MessageService/MsgService.h"
00068 #include "MinosObjectMap/MomNavigator.h"
00069 #include "NtupleUtils/NuCuts.h"
00070 #include "Plex/PlexPlaneId.h"
00071 #include "StandardNtuple/NtpStRecord.h"
00072 #include "Validity/VldContext.h"
00073 
00074 #include "NtupleUtils/SRMom.h"
00075 //#include "NuMuBar/NuMadAnalysis.h"
00076 
00077 #include <cmath>
00078 #include <cstdlib>
00079 
00080 using std::multimap;
00081 
00082 ClassImp(SRMom)
00083 
00084 CVSID("$Id: SRMom.cxx,v 1.8 2009/02/28 21:46:14 gmieg Exp $");
00085 
00086 //____________________________________________________________________72
00087 SRMom::SRMom()
00088   : fbeamType(BeamType::kLE)
00089 {
00090   fmom = 0;
00091   fstRecord = 0;
00092   fbdLiteRec = 0;
00093   /*
00094   fbuffSREvt = 0;
00095   fbuffEvtNum = -1;
00096   fbuffSRTrk = 0;
00097   fbuffTrkNum = -1;
00098   */
00099 }
00100 
00101 //____________________________________________________________________72
00102 SRMom::SRMom(const MomNavigator* mom)
00103   : fbeamType(BeamType::kLE)
00104 {
00105   fmom = mom;
00106   if (!fmom){
00107     MSG("SRMom",Msg::kWarning) 
00108       << "No Mom in this snarl" << endl;
00109     fstRecord = 0;
00110     fbdLiteRec = 0;
00111   }
00112 
00113   else{
00114     fstRecord = dynamic_cast<NtpStRecord*>
00115       (fmom->GetFragment("NtpStRecord"));
00116     if (!fstRecord){
00117       MSG("SRMom",Msg::kWarning) 
00118         << "No NtpStRecord in Mom" << endl;
00119     }
00120 
00121     fbdLiteRec = dynamic_cast<NtpBDLiteRecord*>
00122       (fmom->GetFragment("NtpBDLiteRecord"));
00123     if (!fbdLiteRec){
00124       MAXMSG("SRMom",Msg::kWarning, 10)
00125         << "No NtpBDLiteRecord in Mom" << endl;
00126     }
00127   }
00128 
00129   /*
00130   fbuffSREvt = 0;
00131   fbuffEvtNum = -1;
00132   fbuffSRTrk = 0;
00133   fbuffTrkNum = -1;
00134   */
00135 }
00136 
00137 //____________________________________________________________________72
00138 SRMom::~SRMom()
00139 {
00140   fbdLiteRec = 0;
00141   fstRecord = 0;
00142   fmom = 0;
00143   /*
00144   fbuffSREvt = 0;
00145   fbuffEvtNum = -1;
00146   fbuffSRTrk = 0;
00147   fbuffTrkNum = -1;
00148   */
00149 }
00150 
00151 //____________________________________________________________________72
00152 const multimap<Float_t, Float_t>  SRMom::ArrayRAlongTrack(const Int_t eventNum,
00153                                                           const Int_t trackNum) const
00154 {
00155   multimap<Float_t, Float_t> md;
00156   md.clear();
00157   const NtpSRTrack* srTrack = SRTrack(eventNum, trackNum);
00158   if (!srTrack){
00159     MSG("SRMom",Msg::kWarning)
00160       << "No NtpSRTrack number " << trackNum
00161       << " in event number " << eventNum << endl;
00162     return md;
00163   }
00164   for (Int_t k=0; k<srTrack->nstrip; ++k){
00165 //     if(!srTrack->stpfit[k]){continue;}
00166     Float_t x = srTrack->stpx[k];
00167     Float_t y = srTrack->stpy[k];
00168     md.insert(pair<Float_t,Float_t>(srTrack->stpz[k],
00169                                     sqrt(x*x + y*y)));
00170   }
00171   return md;
00172 }
00173 
00174 //____________________________________________________________________72
00175 const multimap<Float_t, Float_t>  SRMom::ArrayUAlongTrack(const Int_t eventNum,
00176                                                           const Int_t trackNum) const
00177 {
00178   multimap<Float_t, Float_t> md;
00179   md.clear();
00180   const NtpSRTrack* srTrack = SRTrack(eventNum, trackNum);
00181   if (!srTrack){
00182     MSG("SRMom",Msg::kWarning)
00183       << "No NtpSRTrack number " << trackNum
00184       << " in event number " << eventNum << endl;
00185     return md;
00186   }
00187   for (Int_t k=0; k<srTrack->nstrip; ++k){
00188 //     if(!srTrack->stpfit[k]){continue;}
00189     md.insert(pair<Float_t,Float_t>(srTrack->stpz[k],
00190                                     srTrack->stpu[k]));
00191   }
00192   return md;
00193 }
00194 
00195 //____________________________________________________________________72
00196 const multimap<Float_t, Float_t>  SRMom::ArrayVAlongTrack(const Int_t eventNum,
00197                                                           const Int_t trackNum) const
00198 {
00199   multimap<Float_t, Float_t> md;
00200   md.clear();
00201   const NtpSRTrack* srTrack = SRTrack(eventNum, trackNum);
00202   if (!srTrack){
00203     MSG("SRMom",Msg::kWarning)
00204       << "No NtpSRTrack number " << trackNum
00205       << " in event number " << eventNum << endl;
00206     return md;
00207   }
00208   for (Int_t k=0; k<srTrack->nstrip; ++k){
00209 //     if(!srTrack->stpfit[k]){continue;}
00210     md.insert(pair<Float_t,Float_t>(srTrack->stpz[k],
00211                                     srTrack->stpv[k]));
00212   }
00213   return md;
00214 }
00215 
00216 //____________________________________________________________________72
00217 const multimap<Float_t, Float_t>  SRMom::ArrayXAlongTrack(const Int_t eventNum,
00218                                                           const Int_t trackNum) const
00219 {
00220   multimap<Float_t, Float_t> md;
00221   md.clear();
00222   const NtpSRTrack* srTrack = SRTrack(eventNum, trackNum);
00223   if (!srTrack){
00224     MSG("SRMom",Msg::kWarning)
00225       << "No NtpSRTrack number " << trackNum
00226       << " in event number " << eventNum << endl;
00227     return md;
00228   }
00229   
00230   for (Int_t k=0; k<srTrack->nstrip; ++k){
00231 //     if(!srTrack->stpfit[k]){continue;}
00232     // cout<<k<<"  "<<srTrack->stpx[k]<<"  "<<srTrack->stpz[k]<<endl;
00233     md.insert(pair<Float_t,Float_t>(srTrack->stpz[k],
00234                                     srTrack->stpx[k]));
00235   }/*
00236   multimap<Float_t,Float_t>::const_iterator it = md.begin();
00237   
00238   for(int k=0;k<srTrack->nstrip; ++k){
00239     cout<<"from SR MOM  "<<it->first<<"  "<<it->second<<endl;
00240     it++;
00241   }
00242    */
00243   return md;
00244 }
00245 
00246 //____________________________________________________________________72
00247 const multimap<Float_t, Float_t> 
00248 SRMom::ArrayXAlongTrack(const NtpSRTrack* srTrack) const
00249 {
00250   multimap<Float_t, Float_t> md;
00251   md.clear();
00252   if (!srTrack){
00253     MSG("SRMom",Msg::kWarning)
00254       << "No NtpSRTrack passed to SRMom::ArrayXAlongTrack" << endl;
00255     return md;
00256   }
00257   
00258   for (Int_t k=0; k<srTrack->nstrip; ++k){
00259     md.insert(pair<Float_t,Float_t>(srTrack->stpz[k],
00260                                     srTrack->stpx[k]));
00261   }
00262   return md;
00263 }
00264 
00265 //____________________________________________________________________72
00266 const multimap<Float_t, Float_t>  SRMom::ArrayYAlongTrack(const Int_t eventNum,
00267                                                           const Int_t trackNum) const
00268 {
00269   multimap<Float_t, Float_t> md;
00270   md.clear();
00271   const NtpSRTrack* srTrack = SRTrack(eventNum, trackNum);
00272   if (!srTrack){
00273     MSG("SRMom",Msg::kWarning)
00274       << "No NtpSRTrack number " << trackNum
00275       << " in event number " << eventNum << endl;
00276     return md;
00277   }
00278   for (Int_t k=0; k<srTrack->nstrip; ++k){
00279 //     if(!srTrack->stpfit[k]){continue;}
00280     md.insert(pair<Float_t,Float_t>(srTrack->stpz[k],
00281                                     srTrack->stpy[k]));
00282   }
00283   return md;
00284 }
00285 
00286 //____________________________________________________________________72
00287 const multimap<Float_t, Float_t>
00288 SRMom::ArrayYAlongTrack(const NtpSRTrack* srTrack) const
00289 {
00290   multimap<Float_t, Float_t> md;
00291   md.clear();
00292   if (!srTrack){
00293     MSG("SRMom",Msg::kWarning)
00294       << "No NtpSRTrack passed to SRMom::ArrayYAlongTrack" << endl;
00295     return md;
00296   }
00297   for (Int_t k=0; k<srTrack->nstrip; ++k){
00298     md.insert(pair<Float_t,Float_t>(srTrack->stpz[k],
00299                                     srTrack->stpy[k]));
00300   }
00301   return md;
00302 }
00303 
00304 //____________________________________________________________________72
00305 const Int_t SRMom::BiggestShwIndex(const Int_t eventNum) const
00306 {
00307   Float_t highestPH = 0.0;
00308   Int_t biggestShwIndex = -1;
00309   Int_t numShowers = this->NumShowers(eventNum);
00310   if (numShowers < 1){return -1;}
00311 
00312   for (Int_t j=0; j<numShowers; ++j){
00313     Float_t ph = this->ShwPHGeV(eventNum,j);
00314     if (ph > highestPH){
00315       highestPH = ph;
00316       biggestShwIndex = j;
00317     }
00318   }
00319   if (-1 == biggestShwIndex){
00320     MSG("SRMom",Msg::kWarning) 
00321       << "Showers in event " << eventNum << " have -ve energy." << endl;
00322   }
00323   return biggestShwIndex;
00324 }
00325 
00326 //____________________________________________________________________72
00327 const Float_t SRMom::ChiSq(const Int_t eventNum,
00328                            const Int_t trackNum) const
00329 {
00330   const NtpSRTrack* srTrack = SRTrack(eventNum, trackNum);
00331   if (!srTrack){
00332     MSG("SRMom",Msg::kWarning)
00333       << "No NtpSRTrack number " << trackNum
00334       << " in event number " << eventNum << endl;
00335     return -1.0;
00336   }
00337   if (!srTrack->fit.pass) return -1.0;
00338   
00339   return srTrack->fit.chi2;
00340 }
00341 
00342 //____________________________________________________________________72
00343 const Float_t SRMom::ChiSqPerNDoF(const Int_t eventNum,
00344                                   const Int_t trackNum) const
00345 {
00346   const NtpSRTrack* srTrack = SRTrack(eventNum, trackNum);
00347   if (!srTrack){
00348     MSG("SRMom",Msg::kWarning)
00349       << "No NtpSRTrack number " << trackNum
00350       << " in event number " << eventNum << endl;
00351     return -1.0;
00352   }
00353   if (!srTrack->fit.pass) return -1.0;
00354   if (!srTrack->fit.ndof) return -1.0;
00355 
00356   return srTrack->fit.chi2/srTrack->fit.ndof;
00357 }
00358 
00359 //____________________________________________________________________72
00360 const Detector::Detector_t SRMom::Detector() const
00361 {
00362   const VldContext* vc = this->VldCntxt();
00363   if (!vc){return Detector::kUnknown;}
00364   return vc->GetDetector();
00365 }
00366 
00367 //____________________________________________________________________72
00368 const Int_t SRMom::EvtLthPln(const Int_t eventNum) const
00369 {
00370   const NtpSREvent* srEvent = this->SREvent(eventNum);
00371   if(!srEvent){
00372     MSG("SRMom",Msg::kWarning) 
00373       << "No NtpSREvent with event number " << eventNum << endl;
00374     return -1;
00375   }
00376 
00377   return abs((Int_t) (srEvent->vtx.plane) -
00378               (Int_t) (srEvent->end.plane));
00379 }
00380 
00381 //____________________________________________________________________72
00382 const NtpSRVertex* SRMom::EvtVtx(const Int_t eventNum) const
00383 {
00384   const NtpSREvent* srEvent = this->SREvent(eventNum);
00385   if(!srEvent){
00386     MSG("SRMom",Msg::kWarning) 
00387       << "No NtpSREvent with event number " << eventNum << endl;
00388     return 0;
00389   }
00390 
00391   return &(srEvent->vtx);
00392 }
00393 
00394 //____________________________________________________________________72
00395 const Int_t SRMom::EventVtxPlane(const Int_t eventNum) const
00396 {
00397   const NtpSREvent* srEvent = this->SREvent(eventNum);
00398   if(!srEvent){
00399     MSG("SRMom",Msg::kWarning) 
00400       << "No NtpSREvent with event number " << eventNum << endl;
00401     return -1;
00402   }
00403 
00404   return srEvent->vtx.plane;
00405 }
00406 
00407 //____________________________________________________________________72
00408 const Float_t SRMom::EventVtxU(const Int_t eventNum) const
00409 {
00410   const NtpSREvent* srEvent = this->SREvent(eventNum);
00411   if(!srEvent){
00412     MSG("SRMom",Msg::kWarning) 
00413       << "No NtpSREvent with event number " << eventNum << endl;
00414     return -1;
00415   }
00416 
00417   return srEvent->vtx.u;
00418 }
00419 
00420 //____________________________________________________________________72
00421 const Float_t SRMom::EventVtxV(const Int_t eventNum) const
00422 {
00423   const NtpSREvent* srEvent = this->SREvent(eventNum);
00424   if(!srEvent){
00425     MSG("SRMom",Msg::kWarning) 
00426       << "No NtpSREvent with event number " << eventNum << endl;
00427     return -1;
00428   }
00429 
00430   return srEvent->vtx.v;
00431 }
00432 
00433 //____________________________________________________________________72
00434 const Float_t SRMom::EventVtxX(const Int_t eventNum) const
00435 {
00436   const NtpSREvent* srEvent = this->SREvent(eventNum);
00437   if(!srEvent){
00438     MSG("SRMom",Msg::kWarning) 
00439       << "No NtpSREvent with event number " << eventNum << endl;
00440     return -1;
00441   }
00442 
00443   return srEvent->vtx.x;
00444 }
00445 
00446 //____________________________________________________________________72
00447 const Float_t SRMom::EventVtxY(const Int_t eventNum) const
00448 {
00449   const NtpSREvent* srEvent = this->SREvent(eventNum);
00450   if(!srEvent){
00451     MSG("SRMom",Msg::kWarning) 
00452       << "No NtpSREvent with event number " << eventNum << endl;
00453     return -1;
00454   }
00455 
00456   return srEvent->vtx.y;
00457 }
00458 
00459 //____________________________________________________________________72
00460 const Float_t SRMom::EventVtxZ(const Int_t eventNum) const
00461 {
00462   const NtpSREvent* srEvent = this->SREvent(eventNum);
00463   if(!srEvent){
00464     MSG("SRMom",Msg::kWarning) 
00465       << "No NtpSREvent with event number " << eventNum << endl;
00466     return -1;
00467   }
00468 
00469   return srEvent->vtx.z;
00470 }
00471 
00472 //____________________________________________________________________72
00473 const Bool_t SRMom::LISnarl() const
00474 {
00475   if (!fstRecord){return false;}
00476   if (-1.0 == fstRecord->evthdr.litime){return false;}
00477   else {return true;}
00478 }
00479 
00480 //____________________________________________________________________72
00481 const Int_t SRMom::LongestTrackIndex(const Int_t eventNum) const
00482 {
00483   Float_t longestLength = 0.0;
00484   Int_t longestIndex = -1;
00485   Int_t numTracks = this->NumTracks(eventNum);
00486   if (numTracks < 1){return -1;}
00487 
00488   for (Int_t j=0; j<numTracks; ++j){
00489     Float_t length = this->TrackLength(eventNum,j);
00490     if (length > longestLength){
00491       longestLength = length;
00492       longestIndex = j;
00493     }
00494   }
00495   if (-1 == longestIndex){
00496     MSG("SRMom",Msg::kWarning) 
00497       << "Tracks in event " << eventNum << " have -ve length." << endl;
00498   }
00499   return longestIndex;
00500 }
00501 
00502 //____________________________________________________________________72
00503 const NtpSRTrack* SRMom::LongestTrackInEvent(const Int_t eventNum) const
00504 {
00505   Float_t longestLength = 0.0;
00506   Int_t longestIndex = -1;
00507   Int_t numTracks = this->NumTracks(eventNum);
00508   if (numTracks < 1){return 0;}
00509 
00510   for (Int_t j=0; j<numTracks; ++j){
00511     Float_t length = this->TrackLength(eventNum,j);
00512     if (length > longestLength){
00513       longestLength = length;
00514       longestIndex = j;
00515     }
00516   }
00517   if (-1 == longestIndex){
00518     MSG("SRMom",Msg::kWarning) 
00519       << "Tracks in event " << eventNum << " have -ve length." << endl;
00520     return 0;
00521   }
00522   return this->SRTrack(eventNum, longestIndex);
00523 }
00524 
00525 //____________________________________________________________________72
00526 const Int_t SRMom::NDoF(const Int_t eventNum,
00527                         const Int_t trackNum) const
00528 {
00529   const NtpSRTrack* srTrack = SRTrack(eventNum, trackNum);
00530   if (!srTrack){
00531     MSG("SRMom",Msg::kWarning)
00532       << "No NtpSRTrack number " << trackNum
00533       << " in event number " << eventNum << endl;
00534     return -1;
00535   }
00536   if (!srTrack->fit.pass) return -1;
00537 
00538   return srTrack->fit.ndof;
00539 }
00540 
00541 //____________________________________________________________________72
00542 const Int_t SRMom::NumEvents() const
00543 {
00544   if (!fstRecord){return -1;}
00545 
00546   TClonesArray* srArray = fstRecord->evt;
00547 
00548   TIter digitIter(srArray);
00549   NtpSREvent* srEvent;
00550   Int_t numEvents = 0;
00551   while ( (srEvent = dynamic_cast<NtpSREvent*> (digitIter.Next()) ) ){
00552     numEvents++;
00553   }
00554 
00555   return numEvents;
00556 }
00557 
00558 //____________________________________________________________________72
00559 const Int_t SRMom::NumShowers(const Int_t eventNum) const
00560 {
00561   const NtpSREvent* srEvent = this->SREvent(eventNum);
00562   if(!srEvent){
00563     MSG("SRMom",Msg::kWarning) 
00564       << "No NtpSREvent with event number " << eventNum << endl;
00565     return -1;
00566   }
00567 
00568   return srEvent->nshower;
00569 }
00570 
00571 //____________________________________________________________________72
00572 const Int_t SRMom::NumTracks(const Int_t eventNum) const
00573 {
00574   const NtpSREvent* srEvent = this->SREvent(eventNum);
00575   if(!srEvent){
00576     MSG("SRMom",Msg::kWarning) 
00577       << "No NtpSREvent with event number " << eventNum << endl;
00578     return -1;
00579   }
00580 
00581   return srEvent->ntrack;
00582 }
00583 /*
00584 //____________________________________________________________________72
00585 const Float_t SRMom::PID(const Int_t eventNum) const
00586 {
00587   if (!fstRecord){return -9999.9;}
00588   
00589   NuMadAnalysis madAnal;
00590   madAnal.SetEntry(fstRecord);
00591 
00592   MadDpID dpid;
00593   dpid.ChoosePDFs(fstRecord->GetHeader().GetVldContext().GetDetector(),
00594                   BeamType::kLE);
00595   Float_t pid = dpid.CalcPID(&madAnal,eventNum,0);
00596   return pid;
00597 }
00598 */
00599 //____________________________________________________________________72
00600 const Int_t SRMom::RunNumber() const
00601 {
00602   return fstRecord->GetHeader().GetRun();
00603 }
00604 
00605 //____________________________________________________________________72
00606 const Int_t SRMom::SnarlNumber() const
00607 {
00608   return fstRecord->GetHeader().GetSnarl();
00609 }
00610 
00611 //____________________________________________________________________72
00612 const Float_t SRMom::SnarlPoT() const
00613 {
00614   if (!fbdLiteRec){return 0;}
00615   return fbdLiteRec->tortgt;
00616 }
00617 
00618 //____________________________________________________________________72
00619 const Int_t SRMom::ShwEndPln(const Int_t eventNum,
00620                              const Int_t shwNum) const
00621 {
00622   const NtpSRShower* srShower = this->SRShower(eventNum,shwNum);
00623   if (!srShower){
00624     MSG("SRMom",Msg::kWarning)
00625       << "No NtpSRShower number " << shwNum
00626       << " in event number " << eventNum<< endl;
00627     return 0;
00628   }
00629   return (Int_t) srShower->plane.end;
00630 }
00631 
00632 //____________________________________________________________________72
00633 const Int_t SRMom::ShwLthPlanes(const Int_t eventNum,
00634                                 const Int_t shwNum) const
00635 {
00636   const NtpSRShower* srShower = this->SRShower(eventNum,shwNum);
00637   if (!srShower){
00638     MSG("SRMom",Msg::kWarning)
00639       << "No NtpSRShower number " << shwNum
00640       << " in event number " << eventNum<< endl;
00641     return 0;
00642   }
00643   return abs(((Int_t) srShower->plane.end)
00644              - ((Int_t) srShower->plane.beg));
00645 }
00646 
00647 //____________________________________________________________________72
00648 const Float_t SRMom::ShwPHGeV(const Int_t eventNum,
00649                               const Int_t shwNum) const
00650 {
00651   const NtpSRShower* srShower = this->SRShower(eventNum,shwNum);
00652   if (!srShower){
00653     MSG("SRMom",Msg::kWarning)
00654       << "No NtpSRShower number " << shwNum
00655       << " in event number " << eventNum<< endl;
00656     return 0.0;
00657   }
00658   return srShower->ph.gev;
00659 }
00660 
00661 //____________________________________________________________________72
00662 const NtpSRVertex* SRMom::ShwStartVtx(const Int_t eventNum,
00663                                       const Int_t shwNum) const
00664 {
00665   const NtpSRShower* srShower = this->SRShower(eventNum,shwNum);
00666   if (!srShower){
00667     MSG("SRMom",Msg::kWarning)
00668       << "No NtpSRShower number " << shwNum
00669       << " in event number " << eventNum<< endl;
00670     return 0;
00671   }
00672   return &(srShower->vtx);
00673 }
00674 
00675 //____________________________________________________________________72
00676 const NtpSREvent* SRMom::SREvent(const Int_t eventNum) const
00677 {
00678   /*
00679   if (fbuffEvtNum == eventNum){
00680     return fbuffSREvt;
00681   }
00682   */
00683   if (!fstRecord){
00684     /*
00685     fbuffSREvt = 0;
00686     fbuffEvtNum = eventNum;
00687     fbuffTrkNum = -1;
00688     fbuffSRTrk = 0;
00689     */
00690     return 0;
00691   }
00692   TClonesArray& srArray = *(fstRecord->evt);
00693   NtpSREvent* srEvent = dynamic_cast<NtpSREvent*> (srArray[eventNum]);
00694   /*
00695   fbuffSREvt = srEvent;
00696   fbuffEvtNum = eventNum;
00697   fbuffTrkNum = -1;
00698   fbuffSRTrk = 0;
00699   */
00700   return srEvent;
00701 }
00702 
00703 //____________________________________________________________________72
00704 const NtpSRShower* SRMom::SRShower(const Int_t eventNum,
00705                                    const Int_t shwNum) const
00706 {
00707   if (shwNum < 0){return 0;}
00708   if (shwNum >= this->NumShowers(eventNum)){return 0;}
00709 
00710   const NtpSREvent* srEvent = this->SREvent(eventNum);
00711   if (!srEvent){
00712     MSG("SRMom",Msg::kWarning) 
00713       << "No NtpSREvent with event number " << eventNum << endl;
00714     return 0;
00715   }
00716  
00717   Int_t shwIndex = srEvent->shw[shwNum];
00718   TClonesArray& shwArray = *(fstRecord->shw);
00719   NtpSRShower* shower = dynamic_cast<NtpSRShower*>
00720     (shwArray[shwIndex]); 
00721   return shower;
00722 }
00723 
00724 //____________________________________________________________________72
00725 const NtpSRTrack* SRMom::SRTrack(const Int_t eventNum,
00726                                  const Int_t trackNum) const
00727 {
00728   /*
00729   if ((fbuffTrkNum == trackNum) && (fbuffEvtNum == eventNum)){
00730     //    cout << "Returning bufferred track " << SnarlNumber() << ", " << eventNum << ", " << trackNum << endl;
00731     return fbuffSRTrk;
00732   }
00733   */
00734   const NtpSREvent* srEvent = this->SREvent(eventNum);
00735   if (!srEvent){
00736     MSG("SRMom",Msg::kWarning) 
00737       << "No NtpSREvent with event number " << eventNum << endl;
00738     /*
00739     fbuffSRTrk = 0;
00740     fbuffTrkNum = trackNum;
00741     //   cout << "Returning 0 for track " << SnarlNumber() << ", " << eventNum << ", " << trackNum << endl;
00742     */
00743     return 0;
00744   }
00745 
00746   Int_t trackIndex = srEvent->trk[trackNum];
00747   TClonesArray& trackArray = *(fstRecord->trk);
00748   NtpSRTrack* track = dynamic_cast<NtpSRTrack*>
00749     (trackArray[trackIndex]);
00750   /*
00751   fbuffSRTrk = track;
00752   fbuffTrkNum = trackNum;
00753   //  cout << "Returning non-buferred track " << SnarlNumber() << ", " << eventNum << ", " << trackNum << endl;
00754   */
00755   return track;
00756 }
00757 
00758 //____________________________________________________________________72
00759 const Int_t SRMom::TrkContained(const Int_t eventNum,
00760                                 const Int_t trackNum) const
00761 {
00762   Float_t dOut = this->TrackEndDistOuterTransEdge(eventNum,trackNum);
00763   Float_t dz = this->TrackEndDistZEnd(eventNum,trackNum);
00764   if (dOut < -999990){return -1;}
00765   if (dz < -999990){return -1;}
00766   if (dOut < 0.2){return 0;}
00767   if (dz < 0.2){return 0;}
00768   return 1;
00769   /*
00770   //Will only work with newer versions of the code
00771   const NtpSRTrack* srTrack = this->SRTrack(eventNum, trackNum);
00772   if (!srTrack){
00773     MSG("SRMom",Msg::kWarning)
00774       << "No NtpSRTrack number " << trackNum
00775       << " in event number " << eventNum << endl;
00776     return -1;
00777   }
00778   return srTrack->contained;
00779   */
00780 }
00781 
00782 //____________________________________________________________________72
00783 const Float_t SRMom::TrackEndDistOuterTransEdge(const Int_t eventNum,
00784                                                 const Int_t trackNum) const
00785 {
00786   const NtpSRTrack* srTrack = this->SRTrack(eventNum, trackNum);
00787   if (!srTrack){
00788     MSG("SRMom",Msg::kWarning)
00789       << "No NtpSRTrack number " << trackNum
00790       << " in event number " << eventNum << endl;
00791     return -999999.9;
00792   }
00793 
00794   const Int_t endPln = this->TrackEndPlane(srTrack);
00795   if (endPln < 0){
00796     MSG("SRMom",Msg::kWarning)
00797       << "Trying to find TrackEndDistOuterTransEdge for a plane "
00798       << "before the start of the detector."
00799       << endl;
00800     return -999999.9;
00801   }
00802   PlexPlaneId planeID(DataUtil::GetDetector(*fmom),
00803                       (UInt_t) endPln);
00804 
00805   Float_t distance = 0;
00806   Float_t xdist = 0;
00807   Float_t ydist = 0;
00808   PlaneOutline plnout;
00809   plnout.DistanceToOuterEdge(this->TrackEndX(srTrack),
00810                              this->TrackEndY(srTrack),
00811                              planeID.GetPlaneView(),
00812                              planeID.GetPlaneCoverage(),
00813                              distance,
00814                              xdist,
00815                              ydist);    
00816   return distance;
00817 }
00818 
00819 //____________________________________________________________________72
00820 const Float_t SRMom::TrackEndDistZEnd(const Int_t eventNum,
00821                                       const Int_t trackNum) const
00822 {
00823   const NtpSRTrack* srTrack = this->SRTrack(eventNum, trackNum);
00824   if (!srTrack){
00825     MSG("SRMom",Msg::kWarning)
00826       << "No NtpSRTrack number " << trackNum
00827       << " in event number " << eventNum << endl;
00828     return -999999.9;
00829   }
00830 
00831   Detector::Detector_t det = DataUtil::GetDetector(*fmom);
00832   Float_t detLength = 282*5.94*Munits::cm;
00833   if (Detector::kFar == det){
00834     detLength = 484*5.94*Munits::cm;
00835   }
00836   else{
00837     if (Detector::kNear != det){
00838       MSG("SRMom",Msg::kWarning)
00839         << "Trying to find TrkEndDistZEnd for non-existant detector."
00840         << endl;
00841       return -999999.9;
00842     }
00843   }
00844   return detLength - srTrack->end.z;
00845 }
00846 
00847 //____________________________________________________________________72
00848 const Int_t SRMom::TrackEndPlane(const Int_t eventNum,
00849                                    const Int_t trackNum) const
00850 {
00851   const NtpSRTrack* srTrack = this->SRTrack(eventNum, trackNum);
00852   if (!srTrack){
00853     MSG("SRMom",Msg::kWarning)
00854       << "No NtpSRTrack number " << trackNum
00855       << " in event number " << eventNum << endl;
00856     return -1;
00857   }
00858   return srTrack->end.plane;
00859 }
00860 
00861 //____________________________________________________________________72
00862 const Int_t SRMom::TrackEndPlane(const NtpSRTrack* srTrack) const
00863 {
00864   if (!srTrack){
00865     MSG("SRMom",Msg::kWarning)
00866       << "Trying to find TrackEndPlane for a null track." << endl;
00867     return -1;
00868   }
00869   return srTrack->end.plane;
00870 }
00871 
00872 //____________________________________________________________________72
00873 const Float_t SRMom::TrkEndR(const Int_t eventNum,
00874                                const Int_t trackNum) const
00875 {
00876   const NtpSRTrack* srTrack = this->SRTrack(eventNum, trackNum);
00877   if (!srTrack){
00878     MSG("SRMom",Msg::kWarning)
00879       << "No NtpSRTrack number " << trackNum
00880       << " in event number " << eventNum << endl;
00881     return -999999.9;
00882   }
00883   Float_t x = srTrack->end.x;
00884   Float_t y = srTrack->end.y;
00885   Float_t r = sqrt(x*x + y*y);
00886   return r;
00887 }
00888 
00889 //____________________________________________________________________72
00890 const Float_t SRMom::TrackEndU(const Int_t eventNum,
00891                                    const Int_t trackNum) const
00892 {
00893   const NtpSRTrack* srTrack = this->SRTrack(eventNum, trackNum);
00894   if (!srTrack){
00895     MSG("SRMom",Msg::kWarning)
00896       << "No NtpSRTrack number " << trackNum
00897       << " in event number " << eventNum << endl;
00898     return -999999.9;
00899   }
00900   return srTrack->end.u;
00901 }
00902 
00903 //____________________________________________________________________72
00904 const Float_t SRMom::TrackEndV(const Int_t eventNum,
00905                                    const Int_t trackNum) const
00906 {
00907   const NtpSRTrack* srTrack = this->SRTrack(eventNum, trackNum);
00908   if (!srTrack){
00909     MSG("SRMom",Msg::kWarning)
00910       << "No NtpSRTrack number " << trackNum
00911       << " in event number " << eventNum << endl;
00912     return -999999.9;
00913   }
00914   return srTrack->end.v;
00915 }
00916 
00917 //____________________________________________________________________72
00918 const Float_t SRMom::TrackEndX(const Int_t eventNum,
00919                                    const Int_t trackNum) const
00920 {
00921   const NtpSRTrack* srTrack = this->SRTrack(eventNum, trackNum);
00922   if (!srTrack){
00923     MSG("SRMom",Msg::kWarning)
00924       << "No NtpSRTrack number " << trackNum
00925       << " in event number " << eventNum << endl;
00926     return -999999.9;
00927   }
00928   return srTrack->end.x;
00929 }
00930 
00931 //____________________________________________________________________72
00932 const Float_t SRMom::TrackEndX(const NtpSRTrack* srTrack) const
00933 {
00934   if (!srTrack){
00935     MSG("SRMom",Msg::kWarning)
00936       << "Trying to find TrackEndX for a null track." << endl;
00937     return -999999.9;
00938   }
00939   return srTrack->end.x;
00940 }
00941 
00942 //____________________________________________________________________72
00943 const Float_t SRMom::TrackEndY(const Int_t eventNum,
00944                                const Int_t trackNum) const
00945 {
00946   const NtpSRTrack* srTrack = this->SRTrack(eventNum, trackNum);
00947   if (!srTrack){
00948     MSG("SRMom",Msg::kWarning)
00949       << "No NtpSRTrack number " << trackNum
00950       << " in event number " << eventNum << endl;
00951     return -999999.9;
00952   }
00953   return srTrack->end.y;
00954 }
00955 
00956 //____________________________________________________________________72
00957 const Float_t SRMom::TrackEndY(const NtpSRTrack* srTrack) const
00958 {
00959   if (!srTrack){
00960     MSG("SRMom",Msg::kWarning)
00961       << "Trying to find TrackEndY for a null track." << endl;
00962     return -999999.9;
00963   }
00964   return srTrack->end.y;
00965 }
00966 
00967 //____________________________________________________________________72
00968 const Float_t SRMom::TrackEndZ(const Int_t eventNum,
00969                                const Int_t trackNum) const
00970 {
00971   const NtpSRTrack* srTrack = this->SRTrack(eventNum, trackNum);
00972   if (!srTrack){
00973     MSG("SRMom",Msg::kWarning)
00974       << "No NtpSRTrack number " << trackNum
00975       << " in event number " << eventNum << endl;
00976     return -999999.9;
00977   }
00978   return srTrack->end.z;
00979 }
00980 
00981 //____________________________________________________________________72
00982 const Float_t SRMom::TrkEnergySimple(const Int_t eventNum,
00983                                      const Int_t trackNum) const
00984 {
00985   //Simple function that uses the SR's opinion on containment.
00986   Int_t contained = this->TrkContained(eventNum,trackNum);
00987   if (-1.0 == contained){
00988     return -999999.9;
00989   }
00990   if (!contained){
00991     return this->TrkMomCurv(eventNum,trackNum);
00992   }
00993   return TrkMomRange(eventNum,trackNum);
00994 }
00995 
00996 //____________________________________________________________________72
00997 const Int_t SRMom::TrkFitPass(const Int_t eventNum,
00998                               const Int_t trackNum) const
00999 {
01000   const NtpSRTrack* srTrack = this->SRTrack(eventNum, trackNum);
01001   if (!srTrack){
01002     MSG("SRMom",Msg::kWarning)
01003       << "No NtpSRTrack number " << trackNum
01004       << " in event number " << eventNum << endl;
01005     return -1;
01006   }
01007   return (Int_t) srTrack->fit.pass;
01008 }
01009 
01010 //____________________________________________________________________72
01011 const Float_t SRMom::TrackLength(const Int_t eventNum,
01012                                  const Int_t trackNum) const
01013 {
01014   const NtpSRTrack* srTrack = this->SRTrack(eventNum, trackNum);
01015   if (!srTrack){
01016     MSG("SRMom",Msg::kWarning)
01017       << "No NtpSRTrack number " << trackNum
01018       << " in event number " << eventNum << endl;
01019     return -1.0;
01020   }
01021   Float_t trackLength = srTrack->ds;
01022   return trackLength;
01023 }
01024 
01025 //____________________________________________________________________72
01026 const Int_t SRMom::TrackLengthPlanes(const Int_t eventNum,
01027                                      const Int_t trackNum) const
01028 {
01029   const NtpSRTrack* srTrack = this->SRTrack(eventNum, trackNum);
01030   if (!srTrack){
01031     MSG("SRMom",Msg::kWarning)
01032       << "No NtpSRTrack number " << trackNum
01033       << " in event number " << eventNum << endl;
01034     return -1;
01035   }
01036   Int_t vtxPlane = TrackVtxPlane(srTrack);
01037   Int_t endPlane = TrackEndPlane(srTrack);
01038   if (-1 == endPlane || -1 == vtxPlane){return -1;}
01039   Int_t trackLength = endPlane - vtxPlane;
01040   return trackLength;
01041 }
01042 
01043 //____________________________________________________________________72
01044 const Int_t SRMom::TrackLengthPlanes(const NtpSRTrack* srTrack) const
01045 {
01046   if (!srTrack){
01047     MSG("SRMom",Msg::kWarning)
01048       << "No NtpSRTrack given to SRMom::TrkLthPln" << endl;
01049     return -1;
01050   }
01051   Int_t vtxPlane = TrackVtxPlane(srTrack);
01052   Int_t endPlane = TrackEndPlane(srTrack);
01053   if (-1 == endPlane || -1 == vtxPlane){return -1;}
01054   Int_t trackLength = endPlane - vtxPlane;
01055   return trackLength;
01056 }
01057 
01058 //____________________________________________________________________72
01059 const Float_t SRMom::TrkMomCurv(const Int_t eventNum,
01060                                 const Int_t trackNum) const
01061 {
01062   const NtpSRTrack* srTrack = this->SRTrack(eventNum, trackNum);
01063   if (!srTrack){
01064     MSG("SRMom",Msg::kWarning)
01065       << "No NtpSRTrack number " << trackNum
01066       << " in event number " << eventNum << endl;
01067     return -999999.9;
01068   }
01069   Float_t qOvp = srTrack->momentum.qp;
01070   if (!qOvp) return -999999.9;
01071   return fabs(1.0/qOvp);
01072 }
01073 
01074 //____________________________________________________________________72
01075 const Float_t SRMom::TrkMomRange(const Int_t eventNum,
01076                                  const Int_t trackNum) const
01077 {
01078   const NtpSRTrack* srTrack = this->SRTrack(eventNum, trackNum);
01079   if (!srTrack){
01080     MSG("SRMom",Msg::kWarning)
01081       << "No NtpSRTrack number " << trackNum
01082       << " in event number " << eventNum << endl;
01083     return -999999.9;
01084   }
01085   return srTrack->momentum.range;
01086 }
01087 
01088 //____________________________________________________________________72
01089 const Int_t SRMom::TrkNumPln(const Int_t eventNum,
01090                              const Int_t trackNum) const
01091 {
01092   const NtpSRTrack* srTrack = this->SRTrack(eventNum, trackNum);
01093   if (!srTrack){
01094     MSG("SRMom",Msg::kWarning)
01095       << "No NtpSRTrack number " << trackNum
01096       << " in event number " << eventNum << endl;
01097     return -1;
01098   }
01099   return srTrack->plane.n;
01100 }
01101 
01102 //____________________________________________________________________72
01103 const Int_t SRMom::TrackNumStrips(const Int_t eventNum,
01104                                   const Int_t trackNum) const
01105 {
01106   const NtpSRTrack* srTrack = this->SRTrack(eventNum, trackNum);
01107   if (!srTrack){
01108     MSG("SRMom",Msg::kWarning)
01109       << "No NtpSRTrack number " << trackNum
01110       << " in event number " << eventNum << endl;
01111     return -1;
01112   }
01113   return srTrack->nstrip;
01114 }
01115 
01116 //____________________________________________________________________72
01117 const NtpSRVertex* SRMom::TrkStartVtx(const Int_t eventNum,
01118                                      const Int_t trackNum) const
01119 {
01120   const NtpSRTrack* srTrack = this->SRTrack(eventNum, trackNum);
01121   if (!srTrack){
01122     MSG("SRMom",Msg::kWarning)
01123       << "No NtpSRTrack number " << trackNum
01124       << " in event number " << eventNum << endl;
01125     return 0;
01126   }
01127   return &(srTrack->vtx);
01128 }
01129 
01130 //____________________________________________________________________72
01131 const Int_t SRMom::TrackVtxPlane(const Int_t eventNum,
01132                                  const Int_t trackNum) const
01133 {
01134   const NtpSRTrack* srTrack = this->SRTrack(eventNum, trackNum);
01135   if (!srTrack){
01136     MSG("SRMom",Msg::kWarning)
01137       << "No NtpSRTrack number " << trackNum
01138       << " in event number " << eventNum << endl;
01139     return -1;
01140   }
01141   return srTrack->vtx.plane;
01142 }
01143 
01144 //____________________________________________________________________72
01145 const Int_t SRMom::TrackVtxPlane(const NtpSRTrack* srTrack) const
01146 {
01147   if (!srTrack){
01148     MSG("SRMom",Msg::kWarning)
01149       << "Trying to find TrackEndX for a null track." << endl;
01150     return -1;
01151   }
01152   return srTrack->vtx.plane;
01153 }
01154 
01155 //____________________________________________________________________72
01156 const Float_t SRMom::TrackVtxQOvP(const Int_t eventNum,
01157                                   const Int_t trackNum) const
01158 {
01159   const NtpSRTrack* srTrack = this->SRTrack(eventNum, trackNum);
01160   if (!srTrack){
01161     MSG("SRMom",Msg::kWarning)
01162       << "No NtpSRTrack number " << trackNum
01163       << " in event number " << eventNum << endl;
01164     return -999999.9;
01165   }
01166   return srTrack->momentum.qp;
01167 }
01168 
01169 //____________________________________________________________________72
01170 const Float_t SRMom::TrackVtxQOvP(const NtpSRTrack* srTrack) const
01171 {
01172   if (!srTrack){
01173     MSG("SRMom",Msg::kWarning)
01174       << "No NtpSRTrack given to SRMom::TrackVtxQOvP" << endl;
01175     return -999999.9;
01176   }
01177   return srTrack->momentum.qp;
01178 }
01179 
01180 //____________________________________________________________________72
01181 const Float_t SRMom::TrackVtxQOvPError(const Int_t eventNum,
01182                                        const Int_t trackNum) const
01183 {
01184   const NtpSRTrack* srTrack = this->SRTrack(eventNum, trackNum);
01185   if (!srTrack){
01186     MSG("SRMom",Msg::kWarning)
01187       << "No NtpSRTrack number " << trackNum
01188       << " in event number " << eventNum << endl;
01189     return -999999.9;
01190   }
01191   return srTrack->momentum.eqp;
01192 }
01193 
01194 //____________________________________________________________________72
01195 const Float_t SRMom::TrkVtxR(const Int_t eventNum,
01196                              const Int_t trackNum) const
01197 {
01198   const NtpSRTrack* srTrack = this->SRTrack(eventNum, trackNum);
01199   if (!srTrack){
01200     MSG("SRMom",Msg::kWarning)
01201       << "No NtpSRTrack number " << trackNum
01202       << " in event number " << eventNum << endl;
01203     return -999999.9;
01204   }
01205   Float_t x = srTrack->vtx.x;
01206   Float_t y = srTrack->vtx.y;
01207   Float_t r = sqrt(x*x + y*y);
01208   return r;
01209 }
01210 
01211 //____________________________________________________________________72
01212 const Float_t SRMom::TrackVtxX(const Int_t eventNum,
01213                                const Int_t trackNum) const
01214 {
01215   const NtpSRTrack* srTrack = this->SRTrack(eventNum, trackNum);
01216   if (!srTrack){
01217     MSG("SRMom",Msg::kWarning)
01218       << "No NtpSRTrack number " << trackNum
01219       << " in event number " << eventNum << endl;
01220     return -999999.9;
01221   }
01222   return srTrack->vtx.x;
01223 }
01224 
01225 //____________________________________________________________________72
01226 const Float_t SRMom::TrackVtxY(const Int_t eventNum,
01227                                const Int_t trackNum) const
01228 {
01229   const NtpSRTrack* srTrack = this->SRTrack(eventNum, trackNum);
01230   if (!srTrack){
01231     MSG("SRMom",Msg::kWarning)
01232       << "No NtpSRTrack number " << trackNum
01233       << " in event number " << eventNum << endl;
01234     return -999999.9;
01235   }
01236   return srTrack->vtx.y;
01237 }
01238 
01239 //____________________________________________________________________72
01240 const Float_t SRMom::TrackVtxZ(const Int_t eventNum,
01241                                const Int_t trackNum) const
01242 {
01243   const NtpSRTrack* srTrack = this->SRTrack(eventNum, trackNum);
01244   if (!srTrack){
01245     MSG("SRMom",Msg::kWarning)
01246       << "No NtpSRTrack number " << trackNum
01247       << " in event number " << eventNum << endl;
01248     return -999999.9;
01249   }
01250   return srTrack->vtx.z;
01251 }
01252 
01253 //____________________________________________________________________72
01254 const VldContext* SRMom::VldCntxt() const
01255 {
01256   if (!fstRecord){
01257     return 0;
01258   }
01259   return fstRecord->GetVldContext();
01260 }
01261 
01262 //Jeff's Cuts:
01263 /*
01264 //____________________________________________________________________72
01265 const Bool_t SRMom::VtxInPittFidVol(const Int_t eventNum) const
01266 {
01267   const NtpSREvent* srEvent = this->SREvent(eventNum);
01268   if(!srEvent){
01269     MSG("SRMom",Msg::kWarning) 
01270       << "No NtpSREvent with event number " << eventNum << endl;
01271     return false;
01272   }
01273   const NuCuts cuts;
01274   return cuts.IsInPittFidVol(EventVtxX(eventNum),
01275                              EventVtxY(eventNum),
01276                              EventVtxZ(eventNum),
01277                              EventVtxU(eventNum),
01278                              EventVtxV(eventNum));
01279 }
01280 
01281 //____________________________________________________________________72
01282 const Bool_t SRMom::GoodBeyondTrackEnd(const Int_t eventNum) const
01283 {
01284   const NtpSREvent* srEvent = this->SREvent(eventNum);
01285   if(!srEvent){
01286     MSG("SRMom",Msg::kWarning) 
01287       << "No NtpSREvent with event number " << eventNum << endl;
01288     return false;
01289   }
01290   const NuCuts cuts;
01291   return cuts.IsGoodBeyondTrkEnd(*fstRecord,
01292                                  *srEvent);
01293 }
01294 
01295 //____________________________________________________________________72
01296 const Bool_t SRMom::GoodUVVtx(const Int_t eventNum,
01297                               const Int_t trackNum) const
01298 {
01299   if (!fstRecord){return 0;}
01300   const NuCuts cuts;
01301   return cuts.IsGoodUVVtx(*fstRecord,
01302                           *SREvent(eventNum),
01303                           *SRTrack(eventNum,trackNum));
01304 }
01305 */

Generated on Mon Feb 15 11:07:39 2010 for loon by  doxygen 1.3.9.1