BeamMomCalc Class Reference

Class which extracts TrkCand's and optionally compares beam momentum to SPFit and writes momentum value to DB table. More...

#include <BeamMomCalc.h>

Inheritance diagram for BeamMomCalc:

JobCModule CfgObserver List of all members.

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
BeamNtfBeamNt
MCTruthfTruth
int fDebug
int fWriteToDB

Detailed Description

Class which extracts TrkCand's and optionally compares beam momentum to SPFit and writes momentum value to DB table.

Definition at line 47 of file BeamMomCalc.h.


Constructor & Destructor Documentation

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 (  ) 

Definition at line 57 of file BeamMomCalc.cxx.

References fBeamNt, and fTree.

00058 {
00059   fTree->Write(); 
00060   delete fTree;
00061   delete fBeamNt;
00062 }


Member Function Documentation

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 }


Member Data Documentation

TH1F* BeamMomCalc::fBeamMomHist [private]

Definition at line 64 of file BeamMomCalc.h.

Referenced by Ana(), EndRun(), and NewRun().

BeamNt* BeamMomCalc::fBeamNt [private]

Definition at line 66 of file BeamMomCalc.h.

Referenced by Ana(), BeamMomCalc(), FillMC(), FillResiduals(), and ~BeamMomCalc().

int BeamMomCalc::fDebug [private]

Definition at line 69 of file BeamMomCalc.h.

Referenced by FillMC().

TTree* BeamMomCalc::fTree [private]

Definition at line 65 of file BeamMomCalc.h.

Referenced by Ana(), BeamMomCalc(), and ~BeamMomCalc().

MCTruth* BeamMomCalc::fTruth [private]

Definition at line 67 of file BeamMomCalc.h.

Referenced by Ana(), FillMC(), and Reco().

int BeamMomCalc::fWriteToDB [private]

Definition at line 70 of file BeamMomCalc.h.

Referenced by EndRun().


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