BeamSwimMC Class Reference

Module which retrieves MCTrack's, and swims charged tracks through the spectrometer,. More...

#include <BeamSwimMC.h>

Inheritance diagram for BeamSwimMC:

JobCModule CfgObserver List of all members.

Public Member Functions

 BeamSwimMC (const char *version)
 ~BeamSwimMC ()
void NewRun (int run, int subrun)
JobCResult Reco (EDMEventHandle &evt)
void Update (const CfgConfig &)

Private Attributes

TTree * fTree
BeamSwimNtfNt

Detailed Description

Module which retrieves MCTrack's, and swims charged tracks through the spectrometer,.

Definition at line 63 of file BeamSwimMC.h.


Constructor & Destructor Documentation

BeamSwimMC::BeamSwimMC ( const char *  version  ) 

Definition at line 28 of file BeamSwimMC.cxx.

References fNt, fTree, and JobCModule::SetCfgVersion().

00028                                           : 
00029   JobCModule("BeamSwimMC")
00030 {
00031   SetCfgVersion(version);
00032 
00033   fTree = new TTree("swimmc", "Comparison of swimmer to MC");
00034   fNt = new BeamSwimNt;
00035   fTree->Branch("fNt", "BeamSwimNt", &fNt);
00036 }

BeamSwimMC::~BeamSwimMC (  ) 

Definition at line 40 of file BeamSwimMC.cxx.

References fNt, and fTree.

00041 {
00042   fTree->Write();
00043   delete fTree;
00044   delete fNt;
00045 }


Member Function Documentation

void BeamSwimMC::NewRun ( int  run,
int  subrun 
) [virtual]

Reimplemented from JobCModule.

Definition at line 124 of file BeamSwimMC.cxx.

References config_bfield().

00125 {
00126   config_bfield(run, subrun);
00127 }

JobCResult BeamSwimMC::Reco ( EDMEventHandle evt  )  [virtual]

Reimplemented from JobCModule.

Definition at line 49 of file BeamSwimMC.cxx.

References fNt, fTree, SwimMIPP::GetXY(), SwimMIPP::kELoss, JobCModule::kPassed, SwimMIPP::kSlice, SwimMIPP::kStepS, BeamSwimNt::nPt, MCTruth::Ntrack(), BeamSwimNt::p0, MCTrack::Particle(), BeamSwimNt::ptot, BeamSwimNt::q, MCCParticle::Q(), SwimMIPP::Swim(), MCTruth::Track(), BeamSwimNt::x, x, BeamSwimNt::x0, BeamSwimNt::xelos, BeamSwimNt::xs, BeamSwimNt::xz, BeamSwimNt::y, y, BeamSwimNt::yelos, BeamSwimNt::ys, BeamSwimNt::yz, BeamSwimNt::z, and Z.

00050 {
00051   MCTruth tru(evt);
00052   SwimMIPP swim1, swim2, swim3;
00053 
00054   double x, y;
00055 
00056   for (int itrk = 0; itrk < tru.Ntrack(); ++itrk) {
00057     const MCTrack& trk = tru.Track(itrk);
00058     if (trk.empty()) continue;
00059     const MCCParticle& part = trk.Particle();
00060     if (part.Q() == 0 || 
00061     part.P() < 1 ||
00062     part.Pz() < 0.5 ||
00063     part.Vz() > 1400) continue;
00064 
00065 //     cout << "Tracking " << part.P() << " GeV/c " << part.GetName()
00066 //   << " from " << part.Vx() << ", " << part.Vx() << ", " << part.Vz()
00067 //   << endl;
00068 
00069     fNt->nPt = 0;
00070     fNt->q = part.Q();
00071     fNt->x0[0] = part.Vx();
00072     fNt->x0[1] = part.Vy();
00073     fNt->x0[2] = part.Vz();
00074     fNt->p0[0] = part.Px();
00075     fNt->p0[1] = part.Py();
00076     fNt->p0[2] = part.Pz();
00077     fNt->ptot = part.P();
00078 
00079     // Swim with StepS stepper
00080     swim1.Swim(part.Q(), part.P(), part.Vx(), part.Vy(), part.Vz(),
00081            part.Px() / part.Pz(), part.Py() / part.Pz(), SwimMIPP::kStepS);
00082 
00083     // Swim with StepZ stepper
00084     swim2.Swim(part.Q(), part.P(), part.Vx(), part.Vy(), part.Vz(),
00085            part.Px() / part.Pz(), part.Py() / part.Pz(), SwimMIPP::kSlice);
00086     
00087     // Swim with ELoss stepper
00088     swim3.Swim(part.Q(), part.P(), part.Vx(), part.Vy(), part.Vz(),
00089            part.Px() / part.Pz(), part.Py() / part.Pz(), SwimMIPP::kELoss);
00090     
00091     for (unsigned int i = 0; i < trk.size(); ++i) {
00092       if (i > 0 && trk[i]->Z() - fNt->z[fNt->nPt - 1] < 1) continue;
00093 
00094       fNt->x[fNt->nPt] = trk[i]->X();
00095       fNt->y[fNt->nPt] = trk[i]->Y();
00096       fNt->z[fNt->nPt] = trk[i]->Z();
00097       swim1.GetXY(trk[i]->Z(), &x, &y);
00098       fNt->xs[fNt->nPt] = x;
00099       fNt->ys[fNt->nPt] = y;
00100 
00101       swim2.GetXY(trk[i]->Z(), &x, &y);
00102       fNt->xz[fNt->nPt] = x;
00103       fNt->yz[fNt->nPt] = y;
00104 
00105       swim3.GetXY(trk[i]->Z(), &x, &y);
00106       fNt->xelos[fNt->nPt] = x;
00107       fNt->yelos[fNt->nPt] = y;
00108 
00109       if (++fNt->nPt >= 256) {
00110     cout << "Saved " << i << "/" << trk.size() << " points" 
00111          << endl;
00112     break;
00113       }
00114     }
00115 
00116     fTree->Fill();
00117   }
00118 
00119   return kPassed;
00120 }

void BeamSwimMC::Update ( const CfgConfig  )  [inline, virtual]

Implements CfgObserver.

Definition at line 70 of file BeamSwimMC.h.

00070 {;}


Member Data Documentation

BeamSwimNt* BeamSwimMC::fNt [private]

Definition at line 74 of file BeamSwimMC.h.

Referenced by BeamSwimMC(), Reco(), and ~BeamSwimMC().

TTree* BeamSwimMC::fTree [private]

Definition at line 73 of file BeamSwimMC.h.

Referenced by BeamSwimMC(), Reco(), and ~BeamSwimMC().


The documentation for this class was generated from the following files:
Generated on Mon Nov 23 08:03:58 2009 for MIPP(E907) by  doxygen 1.4.7