#include <BeamSwimMC.h>
Inheritance diagram for BeamSwimMC:

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 |
| BeamSwimNt * | fNt |
Definition at line 63 of file BeamSwimMC.h.
| 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 | ( | ) |
| 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] |
BeamSwimNt* BeamSwimMC::fNt [private] |
TTree* BeamSwimMC::fTree [private] |
1.4.7