00001 #include "MCText.h"
00002 #include <Midad/Gui/GuiTextView.h>
00003 #include <Midad/Base/Mint.h>
00004 #include <Midad/Base/Jint.h>
00005
00006 #include <MinosObjectMap/MomNavigator.h>
00007 #include <Record/SimSnarlRecord.h>
00008 #include <Record/SimSnarlHeader.h>
00009
00010 #include <REROOT_Classes/REROOT_NeuVtx.h>
00011 #include <REROOT_Classes/REROOT_NeuKin.h>
00012
00013 #include <Validity/VldContext.h>
00014 #include <Validity/VldTimeStamp.h>
00015
00016 #include <TParticle.h>
00017 #include <TClonesArray.h>
00018
00019 #include <string>
00020 using namespace std;
00021
00022 #include "pdg_kludge.h"
00023
00024
00025
00026 MCText::MCText(GuiTextView* gtv)
00027 : fText(gtv)
00028 {
00029 const_cast<TGWindow*>(fText->GetParent())->Resize(750,250);
00030
00031 pdg_kludge();
00032 }
00033 MCText::~MCText()
00034 {
00035 cerr << "MCText::~MCText()\n";
00036 }
00037
00038 void MCText::Update(Mint* mint)
00039 {
00040 if (!fText) return;
00041 fText->Clear();
00042
00043 if (!mint) {
00044 fText->AddLine("No Mint Object!");
00045 return;
00046 }
00047 const MomNavigator* mom = mint->GetJint().GetMom();
00048 if (!mom) {
00049 fText->AddLine("No MomNavigator Object!");
00050 return;
00051 }
00052
00053 SimSnarlRecord* ssr =
00054 dynamic_cast<SimSnarlRecord*>(mom->GetFragment("SimSnarlRecord"));
00055 if (!ssr) {
00056 fText->AddLine("No SimSnarlRecord!");
00057 fText->AddLine("Make sure either ReRootToTruthModule::Get is in your path");
00058 fText->AddLine("or the file has SimSnarls and SimSnarl streams are on");
00059 return;
00060 }
00061
00062 this->AddSimSnarl(ssr);
00063 }
00064
00065 void MCText::AddSimSnarl(SimSnarlRecord* ssr)
00066 {
00067 const SimSnarlHeader* ssh = ssr->GetSimSnarlHeader();
00068 if (!ssh) return;
00069
00070 const REROOT_NeuKin* kin =
00071 dynamic_cast<const REROOT_NeuKin*>
00072 (ssr->FindComponent("REROOT_NeuKin"));
00073 if (!kin) return;
00074
00075 const TClonesArray* ctca =
00076 dynamic_cast<const TClonesArray*>
00077 (ssr->FindComponent("TClonesArray","StdHep"));
00078 if (!ctca) return;
00079
00080 fText->AddLine(ssh->GetVldContext().AsString());
00081 fText->AddLine(Form("Run=%d Sub=%d Snarl=%d",
00082 ssh->GetRun(), ssh->GetSubRun(), ssh->GetSnarl()));
00083 string reaction;
00084 int ind, siz = ctca->GetEntriesFast();
00085 for (ind=0; ind < siz; ++ind) {
00086 TParticle* part = dynamic_cast<TParticle*>((*ctca)[ind]);
00087 if (!part) {
00088 cerr << "Non particle: " << (*ctca)[ind]->GetName() << endl;
00089 continue;
00090 }
00091 if (part->GetFirstMother() != -1) continue;
00092
00093 if (ind == 1 || ind > 2) reaction += " + ";
00094 if (ind == 2) reaction += " --> ";
00095 reaction += part->GetName();
00096 }
00097 fText->AddLine(reaction.c_str());
00098
00099 fText->AddLine(Form("kin: id=%d nu=%d targ=%d(A=%.1f,Z=%.1f)",
00100 kin->ID(), kin->INu(), kin->ITg(), kin->A(), kin->Z()));
00101 fText->AddLine(Form(" boson=%d res=%d act=%d",
00102 kin->IBoson(), kin->IResonance(), kin->IAction()));
00103 fText->AddLine(Form(" X=%8.6f Y=%8.6f EMFrac=%8.6f Q2=%8.6f W2=%8.6f",
00104 kin->X(), kin->Y(), kin->EMFrac(), kin->Q2(), kin->W2()));
00105 fText->AddLine(Form(" Pnu=(%8.6f %8.6f %8.6f %8.6f), xsec=%8.6f",
00106 kin->P4Neu()[0],kin->P4Neu()[1],kin->P4Neu()[2],kin->P4Neu()[3],
00107 kin->Sigma()));
00108 fText->AddLine(Form(" Pshw=(%8.6f %8.6f %8.6f %8.6f)",
00109 kin->P4Shw()[0],kin->P4Shw()[1],kin->P4Shw()[2],kin->P4Shw()[3]));
00110 fText->AddLine(Form(" Pmu1=(%8.6f %8.6f %8.6f %8.6f)",
00111 kin->P4Mu1()[0],kin->P4Mu1()[1],kin->P4Mu1()[2],kin->P4Mu1()[3]));
00112 fText->AddLine(Form(" Pel1=(%8.6f %8.6f %8.6f %8.6f)",
00113 kin->P4El1()[0],kin->P4El1()[1],kin->P4El1()[2],kin->P4El1()[3]));
00114
00115 }