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

Public Member Functions | |
| BeamMomCalc (const char *version) | |
| ~BeamMomCalc () | |
| void | NewRun (int run, int subrun) |
| void | EndRun (int run, int subrun) |
| JobCResult | Ana (const EDMEventHandle &evt) |
| JobCResult | Reco (EDMEventHandle &evt) |
| void | Update (const CfgConfig &c) |
Private Member Functions | |
| void | FillResiduals (const TrkCand *trk) |
| void | FillMC (const TrkCand *trk) |
Private Attributes | |
| TH1F * | fBeamMomHist |
| TTree * | fTree |
| BeamNt * | fBeamNt |
| MCTruth * | fTruth |
| int | fDebug |
| int | fWriteToDB |
Definition at line 47 of file BeamMomCalc.h.
| BeamMomCalc::BeamMomCalc | ( | const char * | version | ) |
Definition at line 39 of file BeamMomCalc.cxx.
References JobCModule::CheckInit(), fBeamNt, fTree, BeamNt::ntrkmc, BeamNt::parmc, and JobCModule::SetCfgVersion().
00039 : 00040 JobCModule("BeamMomCalc"), 00041 fTruth(0), 00042 fDebug(0), 00043 fWriteToDB(1) 00044 { 00045 SetCfgVersion(version); 00046 CheckInit(); 00047 00048 fBeamNt = new BeamNt; 00049 fBeamNt->ntrkmc = 0; 00050 memset(fBeamNt->parmc, 0, sizeof(fBeamNt->parmc)); 00051 fTree = new TTree("beamnt", "Beam Ntuple"); 00052 fTree->Branch("fBeamNt", "BeamNt", &fBeamNt); 00053 }
| BeamMomCalc::~BeamMomCalc | ( | ) |
| JobCResult BeamMomCalc::Ana | ( | const EDMEventHandle & | evt | ) | [virtual] |
Reimplemented from JobCModule.
Definition at line 78 of file BeamMomCalc.cxx.
References EDMEventHandle::Cal(), BeamNt::chi2trk, fBeamMomHist, fBeamNt, FillMC(), FillResiduals(), fTree, fTruth, EDMDataBucket::Get(), JobCModule::kFailed, JobCModule::kPassed, BeamNt::ndf, BeamNt::partrk, EDMEventHandle::Raw(), and EDMEventHandle::Reco().
00079 { 00080 vector<const TrkCand*> trkCand(0); 00081 evt.Raw(); 00082 evt.Cal(); 00083 00084 try { 00085 evt.Reco().Get("/TrkCand", trkCand); 00086 if (trkCand.empty()) return kFailed; 00087 } 00088 catch (...) { return kFailed; } 00089 00090 for (unsigned int i = 0; i < trkCand.size(); ++i) { 00091 const TrkCand* trk = trkCand[i]; 00092 00093 fBeamMomHist->Fill(trk->PQ()); 00094 00095 fBeamNt->ndf = trk->NDF(); 00096 fBeamNt->chi2trk = trk->Chi2(); 00097 for (int i = 0; i < 5; ++i) fBeamNt->partrk[i] = trk->Param(i); 00098 00099 FillResiduals(trk); 00100 00101 if (fTruth) FillMC(trk); 00102 00103 fTree->Fill(); 00104 } 00105 00106 return kPassed; 00107 }
| void BeamMomCalc::EndRun | ( | int | run, | |
| int | subrun | |||
| ) | [virtual] |
Reimplemented from JobCModule.
Definition at line 210 of file BeamMomCalc.cxx.
References fBeamMomHist, fWriteToDB, BeamMomTable::Instance(), BeamMomTable::Set(), BeamMomTable::SetRunRange(), and BeamMomTable::WriteToDB().
00211 { 00212 if (fBeamMomHist->GetEntries() < 20) return ; 00213 00214 if (fBeamMomHist->GetMaximum() < 10) fBeamMomHist->Rebin(); 00215 fBeamMomHist->Fit("gaus", "Q0+"); 00216 00217 if (fWriteToDB) { 00218 BeamMomTable& bmt = BeamMomTable::Instance(); 00219 bmt.SetRunRange(run, run); 00220 TF1* fu = fBeamMomHist->GetFunction("gaus"); 00221 bmt.Set(fu->GetParameter(1), fu->GetParameter(2)); 00222 bmt.WriteToDB(); 00223 } 00224 00225 00226 fBeamMomHist->Write(); 00227 delete fBeamMomHist; 00228 }
| void BeamMomCalc::FillMC | ( | const TrkCand * | trk | ) | [private] |
Definition at line 152 of file BeamMomCalc.cxx.
References fBeamNt, fDebug, fTruth, TrkCand::GetMCTracks(), MCCParticle::GetName(), BeamNt::ntrkmc, BeamNt::parmc, MCTrack::Particle(), BeamNt::partrk, MCCParticle::Q(), and MCTruth::Track().
Referenced by Ana().
00153 { 00154 vector<int> mcTrk(0); 00155 trk->GetMCTracks(mcTrk); 00156 if (fDebug) { 00157 cout << "Trk Momentum: " << 1/fBeamNt->partrk[4] << "\nMC tracks: "; 00158 for (unsigned int i = 0; i < mcTrk.size(); ++i) { 00159 const MCCParticle& part = fTruth->Track(mcTrk[i]).Particle(); 00160 cout << mcTrk[i] << " (" << part.P() << "GeV/c " << 00161 part.GetName() << ") "; 00162 } 00163 cout << endl; 00164 } 00165 00166 fBeamNt->ntrkmc = mcTrk.size(); 00167 if (mcTrk.empty()) memset(fBeamNt->parmc, 0, sizeof(fBeamNt->parmc)); 00168 else { 00169 const MCCParticle& part = fTruth->Track(mcTrk[0]).Particle(); 00170 if (part.P() > 0) fBeamNt->parmc[4] = (float) part.Q() / part.P(); 00171 else fBeamNt->parmc[4] = 0; 00172 fBeamNt->parmc[0] = part.Vx(); 00173 fBeamNt->parmc[1] = part.Vy(); 00174 fBeamNt->parmc[2] = part.Px() * fabs(fBeamNt->parmc[4]); 00175 fBeamNt->parmc[3] = part.Py() * fabs(fBeamNt->parmc[4]); 00176 } 00177 }
| void BeamMomCalc::FillResiduals | ( | const TrkCand * | trk | ) | [private] |
Definition at line 111 of file BeamMomCalc.cxx.
References GMIPPGeo::Cham(), cham, TrkCand::Clust(), BeamNt::dxdz, BeamNt::dydz, fBeamNt, geo, TrkCand::GetChamberXY(), TrkCand::GetClusterXY(), GMIPPGeo::Instance(), kBC3, kNCham, kNPlane, TrkCand::NClust(), p, BeamNt::restrk, TrkCand::SegBC(), BeamNt::uptrk, BeamNt::utrk, x, and y.
Referenced by Ana().
00112 { 00113 for (int i = 0; i < kNCham; ++i) { 00114 if (i > kBC3 || trk->SegBC()) { 00115 double x, y, z, dx, dy; 00116 trk->GetChamberXY(i, x, y, z, dx, dy); 00117 fBeamNt->dxdz[i] = dx; 00118 fBeamNt->dydz[i] = dy; 00119 } 00120 else { 00121 fBeamNt->dxdz[i] = 1e3; 00122 fBeamNt->dydz[i] = 1e3; 00123 } 00124 00125 for (int j = 0; j < kNPlane; ++j) { 00126 fBeamNt->utrk[i][j] = 1e3; 00127 fBeamNt->uptrk[i][j] = 1e3; 00128 fBeamNt->restrk[i][j] = 1e3; 00129 } 00130 } 00131 00132 double x[3]; 00133 00134 for (int i = 0; i < trk->NClust(); ++i) { 00135 const WireClust* wc = trk->Clust(i); 00136 trk->GetClusterXY(i, x, 0); 00137 int cham = wc->Chamber(); 00138 int p = wc->Plane() - 1; 00139 GChamGeo& geo = GMIPPGeo::Instance().Cham(cham); 00140 double tmp; 00141 geo.XYToU(p + 1, x[0], x[1], tmp); 00142 fBeamNt->utrk[cham][p] = tmp; 00143 geo.XYToUperp(p + 1, x[0], x[1], tmp); 00144 fBeamNt->uptrk[cham][p] = tmp; 00145 fBeamNt->restrk[cham][p] = fBeamNt->utrk[cham][p] - wc->U(); 00146 00147 } 00148 }
| void BeamMomCalc::NewRun | ( | int | run, | |
| int | subrun | |||
| ) | [virtual] |
Reimplemented from JobCModule.
Definition at line 195 of file BeamMomCalc.cxx.
References config_bfield(), fBeamMomHist, RIRunConfig::Instance(), GMIPPGeo::Instance(), mom, and RIRunConfig::Momentum().
00196 { 00197 config_bfield(run, subrun); 00198 GMIPPGeo::Instance(run); 00199 float mom = RIRunConfig::Instance(run).Momentum(); 00200 char title[64]; 00201 sprintf(title, "Expected beam momentum of %.1f GeV/c for run %d", 00202 mom, run); 00203 float range = fabs(mom) * 0.2; 00204 fBeamMomHist = 00205 new TH1F("beamMomHist", title, 40, mom - range, mom + range); 00206 }
| JobCResult BeamMomCalc::Reco | ( | EDMEventHandle & | evt | ) | [virtual] |
Reimplemented from JobCModule.
Definition at line 66 of file BeamMomCalc.cxx.
References fTruth, EDMEventHandle::Header(), EDMEventHeader::IsMC(), and JobCModule::kPassed.
00067 { 00068 if (fTruth) { 00069 delete fTruth; 00070 fTruth = 0; 00071 } 00072 if (evt.Header().IsMC()) fTruth = new MCTruth(evt); 00073 return kPassed; 00074 }
| void BeamMomCalc::Update | ( | const CfgConfig & | c | ) | [virtual] |
Implements CfgObserver.
Definition at line 181 of file BeamMomCalc.cxx.
References JobCModule::fIsInit, GET_VAL, and WriteToDB().
00182 { 00183 #define GET_VAL(arg) c(#arg).Get(f##arg) 00184 00185 GET_VAL(Debug); 00186 GET_VAL(WriteToDB); 00187 00188 #undef GET_VAL 00189 fIsInit = true; 00190 }
TH1F* BeamMomCalc::fBeamMomHist [private] |
BeamNt* BeamMomCalc::fBeamNt [private] |
Definition at line 66 of file BeamMomCalc.h.
Referenced by Ana(), BeamMomCalc(), FillMC(), FillResiduals(), and ~BeamMomCalc().
int BeamMomCalc::fDebug [private] |
TTree* BeamMomCalc::fTree [private] |
Definition at line 65 of file BeamMomCalc.h.
Referenced by Ana(), BeamMomCalc(), and ~BeamMomCalc().
MCTruth* BeamMomCalc::fTruth [private] |
int BeamMomCalc::fWriteToDB [private] |
1.4.7