Main Page | Modules | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

MuParentHelper.cxx

Go to the documentation of this file.
00001 #ifndef muparenthelper_cxx
00002 #define muparenthelper_cxx
00003 #include "StandardNtuple/NtpStRecord.h"
00004 #include "MCNtuple/NtpMCRecord.h"
00005 #include "MCNtuple/NtpMCTruth.h"
00006 #include "MCNtuple/NtpMCStdHep.h"
00007 #include "MCNtuple/NtpMCFluxInfo.h"
00008 #include "AnalysisNtuples/ANtpTruthInfoBeam.h"
00009 #include "MCReweight/MuParentHelper.h"
00010 #include "MCReweight/NuParent.h"
00011 #include <iostream>
00012 #include "TString.h"
00013 #include "TClonesArray.h"
00014 
00015 Int_t GEANTtoPDG(Int_t);
00016 
00017 using namespace std;
00018 
00019 //****************************
00020 MuParentHelper::MuParentHelper()
00021 {
00022   fok = false;
00023   fFile = NULL;
00024   fTree = NULL;
00025   fusemini = true;
00026   char *dir = getenv("GNUMIAUX");
00027   if(dir!=NULL) fdir = dir;
00028   else fdir = ".";
00029   if(OpenFile()) {
00030     SetAddresses();
00031     SetVectorEntries();
00032   }
00033 }
00034 
00035 //****************************
00036 MuParentHelper::~MuParentHelper()
00037 {
00038   CloseFile();
00039 }
00040 
00041 //****************************
00042 Bool_t MuParentHelper::SetFileDir(std::string dir, bool usemini)
00043 {
00044   fdir = dir;
00045   fusemini=usemini;
00046   if(OpenFile()) {
00047     SetAddresses();
00048     SetVectorEntries();
00049     return true;
00050   }
00051   return false;
00052 } 
00053 
00054 //****************************
00055 Bool_t MuParentHelper::OpenFile()
00056 {
00057   if(fFile) {
00058     fFile->Close();
00059     delete fFile;       //delete TFile
00060   }
00061   char name[256];
00062   char slash = '/';
00063   TString st(fdir.c_str());  
00064   st.Remove(0,st.Last(slash)+1);
00065   if(fusemini){
00066     sprintf(name,"%s/mupiTreeMini_%s.root",fdir.c_str(),st.Data());
00067   }
00068   else{
00069     sprintf(name,"%s/mupiTree_%s.root",fdir.c_str(),st.Data());
00070   }
00071   cout << name << endl;
00072   fFile = new TFile(name,"READ");
00073   if(fFile->IsOpen() && !fFile->IsZombie()){
00074     fTree = (TTree*) fFile->Get("mupitree");
00075     fok = true;
00076     return true;
00077   }
00078   return false;
00079 }
00080 
00081 //****************************
00082 void MuParentHelper::SetAddresses()
00083 {
00084   if(!fok) return;  
00085   fTree->SetBranchAddress("run",&fRunNum);
00086   fTree->SetBranchAddress("evtno",&fEvtNum);
00087   fTree->SetBranchAddress("tvx",&fX);
00088   fTree->SetBranchAddress("tvy",&fY);
00089   fTree->SetBranchAddress("tvz",&fZ);
00090   fTree->SetBranchAddress("tpx",&fPX);
00091   fTree->SetBranchAddress("tpy",&fPY);
00092   fTree->SetBranchAddress("tpz",&fPZ);
00093   fTree->SetBranchAddress("tptype",&fPID);
00094   fTree->SetBranchAddress("tgen",&fGen);
00095   if(!fusemini){
00096     fTree->SetBranchAddress("Ndxdz",&fNdxdz);
00097     fTree->SetBranchAddress("Ndydz",&fNdydz);
00098     fTree->SetBranchAddress("Npz",&fNpz);
00099     fTree->SetBranchAddress("Nenergy",&fNenergy);
00100     fTree->SetBranchAddress("Ndxdznea",&fNdxdznear);
00101     fTree->SetBranchAddress("Ndydznea",&fNdydznear);
00102     fTree->SetBranchAddress("Nenergyn",&fNenergynear);
00103     fTree->SetBranchAddress("Nwtnear",&fNwtnear);
00104     fTree->SetBranchAddress("Ndxdzfar",&fNdxdzfar);
00105     fTree->SetBranchAddress("Ndydzfar",&fNdydzfar);
00106     fTree->SetBranchAddress("Nenergyf",&fNenergyfar);
00107     fTree->SetBranchAddress("Nwtfar",&fNwtfar);
00108     fTree->SetBranchAddress("Norig",&fNorig);
00109     fTree->SetBranchAddress("Ndecay",&fNdecay);
00110     fTree->SetBranchAddress("Ntype",&fNtype);
00111     fTree->SetBranchAddress("Vx",&fVx);
00112     fTree->SetBranchAddress("Vy",&fVy);
00113     fTree->SetBranchAddress("Vz",&fVz);
00114     fTree->SetBranchAddress("pdpx",&fPdpx);
00115     fTree->SetBranchAddress("pdpy",&fPdpy);
00116     fTree->SetBranchAddress("pdpz",&fPdpz);  
00117     fTree->SetBranchAddress("ppdxdz",&fPpdxdz);
00118     fTree->SetBranchAddress("ppdydz",&fPpdydz);
00119     fTree->SetBranchAddress("pppz",&fPppz);  
00120     fTree->SetBranchAddress("ppenergy",&fPpenergy);
00121     fTree->SetBranchAddress("ppmedium",&fPpmedium);
00122     fTree->SetBranchAddress("ptype",&fPtype);
00123     fTree->SetBranchAddress("ppvx",&fPpvx);
00124     fTree->SetBranchAddress("ppvy",&fPpvy);
00125     fTree->SetBranchAddress("ppvz",&fPpvz);
00126     fTree->SetBranchAddress("muparpx",&fMuparpx);
00127     fTree->SetBranchAddress("muparpy",&fMuparpy);
00128     fTree->SetBranchAddress("muparpz",&fMuparpz);
00129     fTree->SetBranchAddress("mupare",&fMupare);
00130     fTree->SetBranchAddress("Necm",&fNecm);
00131     fTree->SetBranchAddress("Nimpwt",&fNimpwt);
00132     fTree->SetBranchAddress("xpoint",&fXpoint);
00133     fTree->SetBranchAddress("ypoint",&fYpoint);
00134     fTree->SetBranchAddress("zpoint",&fZpoint);
00135   }
00136 
00137   fTree->SetBranchAddress("mu_tvx",&fMuX);
00138   fTree->SetBranchAddress("mu_tvy",&fMuY);
00139   fTree->SetBranchAddress("mu_tvz",&fMuZ);
00140   fTree->SetBranchAddress("mu_tpx",&fMuPX);
00141   fTree->SetBranchAddress("mu_tpy",&fMuPY);
00142   fTree->SetBranchAddress("mu_tpz",&fMuPZ);
00143   fTree->SetBranchAddress("mu_tptype",&fMuPID);
00144   fTree->SetBranchAddress("mu_tgen",&fMuGen);
00145   if(!fusemini){
00146     fTree->SetBranchAddress("mu_Ndxdz",&fMuNdxdz);
00147     fTree->SetBranchAddress("mu_Ndydz",&fMuNdydz);
00148     fTree->SetBranchAddress("mu_Npz",&fMuNpz);
00149     fTree->SetBranchAddress("mu_Nenergy",&fMuNenergy);
00150     fTree->SetBranchAddress("mu_Ndxdznea",&fMuNdxdznear);
00151     fTree->SetBranchAddress("mu_Ndydznea",&fMuNdydznear);
00152     fTree->SetBranchAddress("mu_Nenergyn",&fMuNenergynear);
00153     fTree->SetBranchAddress("mu_Nwtnear",&fMuNwtnear);
00154     fTree->SetBranchAddress("mu_Ndxdzfar",&fMuNdxdzfar);
00155     fTree->SetBranchAddress("mu_Ndydzfar",&fMuNdydzfar);
00156     fTree->SetBranchAddress("mu_Nenergyf",&fMuNenergyfar);
00157     fTree->SetBranchAddress("mu_Nwtfar",&fMuNwtfar);
00158     fTree->SetBranchAddress("mu_Norig",&fMuNorig);
00159     fTree->SetBranchAddress("mu_Ndecay",&fMuNdecay);
00160     fTree->SetBranchAddress("mu_Ntype",&fMuNtype);
00161     fTree->SetBranchAddress("mu_Vx",&fMuVx);
00162     fTree->SetBranchAddress("mu_Vy",&fMuVy);
00163     fTree->SetBranchAddress("mu_Vz",&fMuVz);
00164     fTree->SetBranchAddress("mu_pdpx",&fMuPdpx);
00165     fTree->SetBranchAddress("mu_pdpy",&fMuPdpy);
00166     fTree->SetBranchAddress("mu_pdpz",&fMuPdpz);  
00167     fTree->SetBranchAddress("mu_ppdxdz",&fMuPpdxdz);
00168     fTree->SetBranchAddress("mu_ppdydz",&fMuPpdydz);
00169     fTree->SetBranchAddress("mu_pppz",&fMuPppz);  
00170     fTree->SetBranchAddress("mu_ppenergy",&fMuPpenergy);
00171     fTree->SetBranchAddress("mu_ppmedium",&fMuPpmedium);
00172     fTree->SetBranchAddress("mu_ptype",&fMuPtype);
00173     fTree->SetBranchAddress("mu_ppvx",&fMuPpvx);
00174     fTree->SetBranchAddress("mu_ppvy",&fMuPpvy);
00175     fTree->SetBranchAddress("mu_ppvz",&fMuPpvz);
00176     fTree->SetBranchAddress("mu_muparpx",&fMuMuparpx);
00177     fTree->SetBranchAddress("mu_muparpy",&fMuMuparpy);
00178     fTree->SetBranchAddress("mu_muparpz",&fMuMuparpz);
00179     fTree->SetBranchAddress("mu_mupare",&fMuMupare);
00180     fTree->SetBranchAddress("mu_Necm",&fMuNecm);
00181     fTree->SetBranchAddress("mu_Nimpwt",&fMuNimpwt);
00182     fTree->SetBranchAddress("mu_xpoint",&fMuXpoint);
00183     fTree->SetBranchAddress("mu_ypoint",&fMuYpoint);
00184     fTree->SetBranchAddress("mu_zpoint",&fMuZpoint);
00185   }
00186 }
00187 
00188 //****************************
00189 void MuParentHelper::SetVectorEntries()
00190 {
00191   if(!fok) return;
00192   map<Int_t,map<Int_t,Int_t> >::iterator beg = fVec.begin();
00193   map<Int_t,map<Int_t,Int_t> >::iterator end = fVec.end();
00194   while(beg!=end){
00195     beg->second.clear();
00196   }
00197   fVec.clear();
00198   Int_t nentries = fTree->GetEntries();
00199   for(int i=0;i<nentries;i++){
00200     fTree->GetEntry(i);
00201     fVec[fRunNum][fEvtNum] = i;
00202   }
00203 }
00204 
00205 //****************************
00206 void MuParentHelper::CloseFile()
00207 {
00208   if(fFile) {
00209     fFile->Close();
00210     delete fFile;
00211   }
00212   fok = false;
00213 }
00214 
00215 //****************************
00216 void MuParentHelper::GetMuParent(Int_t runnum, Int_t evtnum,
00217                                  Float_t mu_tpx, Float_t mu_tpy, 
00218                                  Float_t mu_tpz, NuParent &par)
00219 {
00220   const std::map<Int_t,std::map<Int_t,Int_t> >::const_iterator run_it = fVec.find(runnum);
00221   if(run_it == fVec.end())
00222   {
00223     //     std::cerr << "MuParentHelper: failed to find run number " << runnum << endl;
00224      return;
00225   }
00226 
00227   const std::map<Int_t,Int_t> &evt_map = run_it -> second;
00228   const std::map<Int_t,Int_t>::const_iterator evt_it = evt_map.find(evtnum);
00229   if(evt_it == evt_map.end())
00230   {
00231     //     std::cerr << "MuParentHelper: failed to find event number " << evtnum << endl;
00232      return;
00233   }
00234   
00235   const int entry = evt_it -> second;
00236 
00237   fTree->GetEntry(entry);
00238   if(runnum==fRunNum && evtnum==fEvtNum &&
00239      2.*TMath::Abs(mu_tpx-fMuPX)/(mu_tpx+fMuPX)<1e-4 && 
00240      2.*TMath::Abs(mu_tpy-fMuPY)/(mu_tpy+fMuPY)<1e-4 && 
00241      2.*TMath::Abs(mu_tpz-fMuPZ)/(mu_tpz+fMuPZ)<1e-4) {    
00242     //have an entry in the tree:
00243     if(fPID!=0 && fGen!=0) {
00244       //found parent!
00245       //return parent info
00246       par.SetX(fX);
00247       par.SetY(fY);
00248       par.SetZ(fZ);
00249       par.SetPx(fPX);
00250       par.SetPy(fPY);
00251       par.SetPz(fPZ);
00252       par.SetPID(GEANTtoPDG(fPID));
00253       par.SetGen(fGen);
00254     }
00255     else {
00256       //couldn't find the parent
00257       //return muon parameters
00258       par.SetX(fMuX);
00259       par.SetY(fMuY);
00260       par.SetZ(fMuZ);
00261       par.SetPx(fMuPX);
00262       par.SetPy(fMuPY);
00263       par.SetPz(fMuPZ);
00264       par.SetPID(GEANTtoPDG(fMuPID));
00265       par.SetGen(fMuGen);
00266     }
00267   }
00268   else {
00269     //have no info about this event
00270     //return zeros
00271     par.SetX(0);
00272     par.SetY(0);
00273     par.SetZ(0);
00274     par.SetPx(0);
00275     par.SetPy(0);
00276     par.SetPz(0);
00277     par.SetPID(0);
00278     par.SetGen(0);
00279   }
00280 }
00281 
00282 //****************************
00283 void MuParentHelper::GetMuParent(NtpMCRecord *rec,int mcevent,
00284                                  NuParent &par)
00285 {
00286   TClonesArray& mcarray = *(rec->mc);
00287   NtpMCTruth *mc = static_cast<NtpMCTruth*>(mcarray[mcevent]);
00288   Int_t runnum = mc->flux.fluxrun;
00289   Int_t evtnum = mc->flux.fluxevtno;
00290   Float_t mu_tpx = mc->flux.tpx;
00291   Float_t mu_tpy = mc->flux.tpy;
00292   Float_t mu_tpz = mc->flux.tpz;
00293   this->GetMuParent(runnum,evtnum,mu_tpx,mu_tpy,mu_tpz,par);
00294 }
00295 
00296 //****************************
00297 void MuParentHelper::GetMuParent(NtpStRecord *rec,int mcevent,
00298                                  NuParent &par)
00299 {
00300   TClonesArray& mcarray = *(rec->mc);
00301   NtpMCTruth *mc = static_cast<NtpMCTruth*>(mcarray[mcevent]);
00302   Int_t runnum = mc->flux.fluxrun;
00303   Int_t evtnum = mc->flux.fluxevtno;
00304   Float_t mu_tpx = mc->flux.tpx;
00305   Float_t mu_tpy = mc->flux.tpy;
00306   Float_t mu_tpz = mc->flux.tpz;
00307   this->GetMuParent(runnum,evtnum,mu_tpx,mu_tpy,mu_tpz,par);
00308 }
00309 
00310 //****************************
00311 void MuParentHelper::FillANtpTruth(NtpMCRecord *rec,int mcevent,
00312                                    ANtpTruthInfoBeam &ntpBeam)
00313 {
00314   NuParent parent;
00315   this->GetMuParent(rec,mcevent,parent);
00316   ntpBeam.parentX   = parent.GetX();
00317   ntpBeam.parentY   = parent.GetY();
00318   ntpBeam.parentZ   = parent.GetZ();
00319   ntpBeam.parentPX  = parent.GetPx();
00320   ntpBeam.parentPY  = parent.GetPy();
00321   ntpBeam.parentPZ  = parent.GetPz();
00322   ntpBeam.parentPID = parent.GetPID();
00323   ntpBeam.parentGen = parent.GetGen();
00324 }
00325 
00326 //****************************
00327 void MuParentHelper::FillANtpTruth(NtpStRecord *rec,int mcevent,
00328                                    ANtpTruthInfoBeam &ntpBeam)
00329 {
00330   NuParent parent;
00331   this->GetMuParent(rec,mcevent,parent);
00332   ntpBeam.parentX   = parent.GetX();
00333   ntpBeam.parentY   = parent.GetY();
00334   ntpBeam.parentZ   = parent.GetZ();
00335   ntpBeam.parentPX  = parent.GetPx();
00336   ntpBeam.parentPY  = parent.GetPy();
00337   ntpBeam.parentPZ  = parent.GetPz();
00338   ntpBeam.parentPID = parent.GetPID();
00339   ntpBeam.parentGen = parent.GetGen();
00340 }
00341 
00342 //****************************
00343 Int_t GEANTtoPDG(Int_t gCode)
00344 {
00345   if(gCode==1)  return  22;
00346   if(gCode==2)  return -11;
00347   if(gCode==3)  return  11;
00348   if(gCode==4)  return  14;
00349   if(gCode==5)  return -13;
00350   if(gCode==6)  return  13;
00351   if(gCode==7)  return  111;
00352   if(gCode==8)  return  211;
00353   if(gCode==9)  return -211;
00354   if(gCode==10) return  130;
00355   if(gCode==11) return  321;
00356   if(gCode==12) return -321;
00357   if(gCode==13) return  2112;
00358   if(gCode==14) return  2212;
00359   if(gCode==15) return -2212;
00360   if(gCode==16) return  310;
00361   if(gCode==17) return  221;
00362   if(gCode==18) return  3122;
00363   if(gCode==19) return  3222;
00364   if(gCode==20) return  3212;
00365   if(gCode==21) return  3112;
00366   if(gCode==22) return  3322;
00367   if(gCode==23) return  3312;
00368   if(gCode==24) return  3332;
00369   if(gCode==25) return -2112;
00370   if(gCode==26) return -3122;
00371   if(gCode==27) return -3112;
00372   if(gCode==28) return -3212;
00373   if(gCode==29) return -3112;
00374   if(gCode==30) return -3322;
00375   if(gCode==31) return -3312;
00376   if(gCode==32) return -3332;
00377   if(gCode==33) return -15;
00378   if(gCode==34) return  15;
00379   if(gCode==35) return  411;
00380   if(gCode==36) return -411;
00381   if(gCode==37) return  421;
00382   if(gCode==38) return -421;
00383   if(gCode==39) return  431;
00384   if(gCode==40) return -431;
00385   if(gCode==41) return  4122;
00386   if(gCode==42) return  24;
00387   if(gCode==43) return -24;
00388   if(gCode==44) return  23;
00389   return 0;
00390 }
00391 
00392 //****************************
00393 void MuParentHelper::GetMuParent(NtpMCFluxInfo *mufi, NtpMCFluxInfo &fi)
00394 {
00395   GetMuParent(mufi->fluxrun,mufi->fluxevtno,mufi->tpx,mufi->tpy,mufi->tpz,fi);
00396 
00397 }
00398 
00399 //****************************
00400 void MuParentHelper::GetMuParent(Int_t runnum, Int_t evtnum,
00401                                  Float_t mu_tpx, Float_t mu_tpy, 
00402                                  Float_t mu_tpz, NtpMCFluxInfo &fi)
00403 {
00404   const std::map<Int_t,std::map<Int_t,Int_t> >::const_iterator run_it = fVec.find(runnum);
00405   if(run_it == fVec.end())
00406   {
00407     //     std::cerr << "MuParentHelper: failed to find run number " << runnum << endl;
00408      return;
00409   }
00410 
00411   const std::map<Int_t,Int_t> &evt_map = run_it -> second;
00412   const std::map<Int_t,Int_t>::const_iterator evt_it = evt_map.find(evtnum);
00413   if(evt_it == evt_map.end())
00414   {
00415     //     std::cerr << "MuParentHelper: failed to find event number " << evtnum << endl;
00416      return;
00417   }
00418   
00419   const int entry = evt_it -> second;
00420 
00421   fTree->GetEntry(entry);
00422   if(runnum==fRunNum && evtnum==fEvtNum &&
00423      2.*TMath::Abs(mu_tpx-fMuPX)/(mu_tpx+fMuPX)<1e-4 && 
00424      2.*TMath::Abs(mu_tpy-fMuPY)/(mu_tpy+fMuPY)<1e-4 && 
00425      2.*TMath::Abs(mu_tpz-fMuPZ)/(mu_tpz+fMuPZ)<1e-4) {    
00426     //have an entry in the tree:
00427     if(fPID!=0 && fGen!=0) {
00428       //found parent!
00429       //return parent info
00430       fi.index=-1;
00431       fi.fluxrun=runnum;
00432       fi.fluxevtno=evtnum;
00433       fi.ndxdz=fNdxdz;
00434       fi.ndydz=fNdydz;
00435       fi.npz=fNpz;
00436       fi.nenergy=fNenergy;
00437       fi.ndxdznear=fNdxdznear;
00438       fi.ndydznear=fNdydznear;
00439       fi.nenergynear=fNenergynear;
00440       fi.nwtnear=fNwtnear;
00441       fi.ndxdzfar=fNdxdzfar;
00442       fi.ndydzfar=fNdydzfar;
00443       fi.nenergyfar=fNenergyfar;
00444       fi.nwtfar=fNwtfar;
00445       fi.norig=fNorig;
00446       fi.ndecay=fNdecay;
00447       fi.ntype=fNtype;
00448       fi.vx=fVx;
00449       fi.vy=fVy;
00450       fi.vz=fVz;
00451       fi.pdpx=fPdpx;
00452       fi.pdpy=fPdpy;
00453       fi.pdpz=fPdpz;
00454       fi.ppdxdz=fPpdxdz;
00455       fi.ppdydz=fPpdydz;
00456       fi.pppz=fPppz;
00457       fi.ppenergy=fPpenergy;
00458       fi.ppmedium=fPpmedium;
00459       fi.ptype=fPtype;
00460       fi.ppvx=fPpvx;
00461       fi.ppvy=fPpvy;
00462       fi.ppvz=fPpvz;
00463       fi.muparpx=fMuparpx;
00464       fi.muparpy=fMuparpy;
00465       fi.muparpz=fMuparpz;
00466       fi.mupare=fMupare;
00467       fi.necm=fNecm;
00468       fi.nimpwt=fNimpwt;
00469       fi.xpoint=fXpoint;
00470       fi.ypoint=fYpoint;
00471       fi.zpoint=fZpoint;
00472       fi.tvx=fX;
00473       fi.tvy=fY;
00474       fi.tvz=fZ;
00475       fi.tpx=fPX;
00476       fi.tpy=fPY;
00477       fi.tpz=fPZ;
00478       fi.tptype=GEANTtoPDG(fPID);
00479       fi.tgen=fGen;
00480     }
00481     else {
00482       //couldn't find the parent
00483       //return muon parameters
00484       fi.index=-1;
00485       fi.fluxrun=runnum;
00486       fi.fluxevtno=evtnum;
00487       fi.ndxdz=fMuNdxdz;
00488       fi.ndydz=fMuNdydz;
00489       fi.npz=fMuNpz;
00490       fi.nenergy=fMuNenergy;
00491       fi.ndxdznear=fMuNdxdznear;
00492       fi.ndydznear=fMuNdydznear;
00493       fi.nenergynear=fMuNenergynear;
00494       fi.nwtnear=fMuNwtnear;
00495       fi.ndxdzfar=fMuNdxdzfar;
00496       fi.ndydzfar=fMuNdydzfar;
00497       fi.nenergyfar=fMuNenergyfar;
00498       fi.nwtfar=fMuNwtfar;
00499       fi.norig=fMuNorig;
00500       fi.ndecay=fMuNdecay;
00501       fi.ntype=fMuNtype;
00502       fi.vx=fMuVx;
00503       fi.vy=fMuVy;
00504       fi.vz=fMuVz;
00505       fi.pdpx=fMuPdpx;
00506       fi.pdpy=fMuPdpy;
00507       fi.pdpz=fMuPdpz;
00508       fi.ppdxdz=fMuPpdxdz;
00509       fi.ppdydz=fMuPpdydz;
00510       fi.pppz=fMuPppz;
00511       fi.ppenergy=fMuPpenergy;
00512       fi.ppmedium=fMuPpmedium;
00513       fi.ptype=fMuPtype;
00514       fi.ppvx=fMuPpvx;
00515       fi.ppvy=fMuPpvy;
00516       fi.ppvz=fMuPpvz;
00517       fi.muparpx=fMuMuparpx;
00518       fi.muparpy=fMuMuparpy;
00519       fi.muparpz=fMuMuparpz;
00520       fi.mupare=fMuMupare;
00521       fi.necm=fMuNecm;
00522       fi.nimpwt=fMuNimpwt;
00523       fi.xpoint=fMuXpoint;
00524       fi.ypoint=fMuYpoint;
00525       fi.zpoint=fMuZpoint;
00526       fi.tvx=fMuX;
00527       fi.tvy=fMuY;
00528       fi.tvz=fMuZ;
00529       fi.tpx=fMuPX;
00530       fi.tpy=fMuPY;
00531       fi.tpz=fMuPZ;
00532       fi.tptype=GEANTtoPDG(fMuPID);
00533       fi.tgen=fMuGen;
00534     }
00535   }
00536   else {
00537     //have no info about this event
00538     //return zeros
00539       fi.index=-1;
00540       fi.fluxrun=runnum;
00541       fi.fluxevtno=evtnum;
00542       fi.ndxdz=0.;
00543       fi.ndydz=0.;
00544       fi.npz=0.;
00545       fi.nenergy=0.;
00546       fi.ndxdznear=0.;
00547       fi.ndydznear=0.;
00548       fi.nenergynear=0.;
00549       fi.nwtnear=0.;
00550       fi.ndxdzfar=0.;
00551       fi.ndydzfar=0.;
00552       fi.nenergyfar=0.;
00553       fi.nwtfar=0.;
00554       fi.norig=0;
00555       fi.ndecay=0;
00556       fi.ntype=0;
00557       fi.vx=0.;
00558       fi.vy=0.;
00559       fi.vz=0.;
00560       fi.pdpx=0.;
00561       fi.pdpy=0.;
00562       fi.pdpz=0.;
00563       fi.ppdxdz=0.;
00564       fi.ppdydz=0.;
00565       fi.pppz=0.;
00566       fi.ppenergy=0.;
00567       fi.ppmedium=0;
00568       fi.ptype=0;
00569       fi.ppvx=0.;
00570       fi.ppvy=0.;
00571       fi.ppvz=0.;
00572       fi.muparpx=0.;
00573       fi.muparpy=0.;
00574       fi.muparpz=0.;
00575       fi.mupare=0.;
00576       fi.necm=0.;
00577       fi.nimpwt=0.;
00578       fi.xpoint=0.;
00579       fi.ypoint=0.;
00580       fi.zpoint=0.;
00581       fi.tvx=0.;
00582       fi.tvy=0.;
00583       fi.tvz=0.;
00584       fi.tpx=0.;
00585       fi.tpy=0.;
00586       fi.tpz=0.;
00587       fi.tptype=0;
00588       fi.tgen=0;
00589   }
00590 }
00591 
00592 //****************************
00593 void MuParentHelper::GetMuDaughter(NtpMCFluxInfo *oldfi,
00594                                    NtpMCFluxInfo &newfi, int desirednu)
00595 {
00596   Int_t runnum = oldfi->fluxrun;
00597   Int_t evtnum = oldfi->fluxevtno;
00598   Float_t tpx = oldfi->tpx;
00599   Float_t tpy = oldfi->tpy;
00600   Float_t tpz = oldfi->tpz;
00601   this->GetMuDaughter(runnum,evtnum,tpx,tpy,tpz,newfi,desirednu);
00602 }
00603 
00604 //****************************
00605 void MuParentHelper::GetMuDaughter(Int_t runnum, Int_t evtnum,
00606                                  Float_t tpx, Float_t tpy, 
00607                                  Float_t tpz, NtpMCFluxInfo &fi, int desirednu)
00608 {
00609   const std::map<Int_t,std::map<Int_t,Int_t> >::const_iterator run_it = fVec.find(runnum);
00610   if(run_it == fVec.end())
00611   {
00612     //     std::cerr << "MuParentHelper: failed to find run number " << runnum << endl;
00613      return;
00614   }
00615 
00616   const std::map<Int_t,Int_t> &evt_map = run_it -> second;
00617   const std::map<Int_t,Int_t>::const_iterator evt_it = evt_map.find(evtnum);
00618   if(evt_it == evt_map.end())
00619   {
00620     //     std::cerr << "MuParentHelper: failed to find event number " << evtnum << endl;
00621      return;
00622   }
00623   
00624   const int entry = evt_it -> second;
00625 
00626   bool foundit=false;
00627 
00628   fTree->GetEntry(entry);
00629   if(fMuNtype==desirednu&&runnum==fRunNum&&evtnum==fEvtNum){ 
00630     foundit=true;
00631   }
00632   else{
00633     fTree->GetEntry(entry-1);
00634     if(fMuNtype==desirednu&&runnum==fRunNum&&evtnum==fEvtNum){
00635       foundit=true;
00636     }
00637     else{
00638       fTree->GetEntry(entry+1);    
00639       if(fMuNtype==desirednu&&runnum==fRunNum&&evtnum==fEvtNum){
00640         foundit=true;
00641       }
00642       else{
00643         foundit=false;
00644       }
00645     }
00646   }
00647 
00648   if(runnum==fRunNum && evtnum==fEvtNum &&
00649      2.*TMath::Abs(tpx-fPX)/(tpx+fPX)<1e-4 && 
00650      2.*TMath::Abs(tpy-fPY)/(tpy+fPY)<1e-4 && 
00651      2.*TMath::Abs(tpz-fPZ)/(tpz+fPZ)<1e-4) {    
00652     //have an entry in the tree:
00653     if(fPID!=0 && fGen!=0 && foundit) {
00654       //found parent!
00655       //return parent info
00656       fi.index=-1;
00657       fi.fluxrun=runnum;
00658       fi.fluxevtno=evtnum;
00659       fi.ndxdz=fMuNdxdz;
00660       fi.ndydz=fMuNdydz;
00661       fi.npz=fMuNpz;
00662       fi.nenergy=fMuNenergy;
00663       fi.ndxdznear=fMuNdxdznear;
00664       fi.ndydznear=fMuNdydznear;
00665       fi.nenergynear=fMuNenergynear;
00666       fi.nwtnear=fMuNwtnear;
00667       fi.ndxdzfar=fMuNdxdzfar;
00668       fi.ndydzfar=fMuNdydzfar;
00669       fi.nenergyfar=fMuNenergyfar;
00670       fi.nwtfar=fMuNwtfar;
00671       fi.norig=fMuNorig;
00672       fi.ndecay=fMuNdecay;
00673       fi.ntype=fMuNtype;
00674       fi.vx=fMuVx;
00675       fi.vy=fMuVy;
00676       fi.vz=fMuVz;
00677       fi.pdpx=fMuPdpx;
00678       fi.pdpy=fMuPdpy;
00679       fi.pdpz=fMuPdpz;
00680       fi.ppdxdz=fMuPpdxdz;
00681       fi.ppdydz=fMuPpdydz;
00682       fi.pppz=fMuPppz;
00683       fi.ppenergy=fMuPpenergy;
00684       fi.ppmedium=fMuPpmedium;
00685       fi.ptype=fMuPtype;
00686       fi.ppvx=fMuPpvx;
00687       fi.ppvy=fMuPpvy;
00688       fi.ppvz=fMuPpvz;
00689       fi.muparpx=fMuMuparpx;
00690       fi.muparpy=fMuMuparpy;
00691       fi.muparpz=fMuMuparpz;
00692       fi.mupare=fMuMupare;
00693       fi.necm=fMuNecm;
00694       fi.nimpwt=fMuNimpwt;
00695       fi.xpoint=fMuXpoint;
00696       fi.ypoint=fMuYpoint;
00697       fi.zpoint=fMuZpoint;
00698       fi.tvx=fMuX;
00699       fi.tvy=fMuY;
00700       fi.tvz=fMuZ;
00701       fi.tpx=fMuPX;
00702       fi.tpy=fMuPY;
00703       fi.tpz=fMuPZ;
00704       fi.tptype=GEANTtoPDG(fPID);
00705       fi.tgen=fMuGen;
00706     }
00707     else {
00708       //couldn't find the daughter
00709       //return zeros
00710       fi.index=-1;
00711       fi.fluxrun=runnum;
00712       fi.fluxevtno=evtnum;
00713       fi.ndxdz=0.;
00714       fi.ndydz=0.;
00715       fi.npz=0.;
00716       fi.nenergy=0.;
00717       fi.ndxdznear=0.;
00718       fi.ndydznear=0.;
00719       fi.nenergynear=0.;
00720       fi.nwtnear=0.;
00721       fi.ndxdzfar=0.;
00722       fi.ndydzfar=0.;
00723       fi.nenergyfar=0.;
00724       fi.nwtfar=0.;
00725       fi.norig=0;
00726       fi.ndecay=0;
00727       fi.ntype=0;
00728       fi.vx=0.;
00729       fi.vy=0.;
00730       fi.vz=0.;
00731       fi.pdpx=0.;
00732       fi.pdpy=0.;
00733       fi.pdpz=0.;
00734       fi.ppdxdz=0.;
00735       fi.ppdydz=0.;
00736       fi.pppz=0.;
00737       fi.ppenergy=0.;
00738       fi.ppmedium=0;
00739       fi.ptype=0;
00740       fi.ppvx=0.;
00741       fi.ppvy=0.;
00742       fi.ppvz=0.;
00743       fi.muparpx=0.;
00744       fi.muparpy=0.;
00745       fi.muparpz=0.;
00746       fi.mupare=0.;
00747       fi.necm=0.;
00748       fi.nimpwt=0.;
00749       fi.xpoint=0.;
00750       fi.ypoint=0.;
00751       fi.zpoint=0.;
00752       fi.tvx=0.;
00753       fi.tvy=0.;
00754       fi.tvz=0.;
00755       fi.tpx=0.;
00756       fi.tpy=0.;
00757       fi.tpz=0.;
00758       fi.tptype=0;
00759       fi.tgen=0;
00760     }
00761   }
00762   else {
00763     //couldn't find the daughter
00764     //return zeros
00765     fi.index=-1;
00766     fi.fluxrun=runnum;
00767     fi.fluxevtno=evtnum;
00768     fi.ndxdz=0.;
00769     fi.ndydz=0.;
00770     fi.npz=0.;
00771     fi.nenergy=0.;
00772     fi.ndxdznear=0.;
00773     fi.ndydznear=0.;
00774     fi.nenergynear=0.;
00775     fi.nwtnear=0.;
00776     fi.ndxdzfar=0.;
00777     fi.ndydzfar=0.;
00778     fi.nenergyfar=0.;
00779     fi.nwtfar=0.;
00780     fi.norig=0;
00781     fi.ndecay=0;
00782     fi.ntype=0;
00783     fi.vx=0.;
00784     fi.vy=0.;
00785     fi.vz=0.;
00786     fi.pdpx=0.;
00787     fi.pdpy=0.;
00788     fi.pdpz=0.;
00789     fi.ppdxdz=0.;
00790     fi.ppdydz=0.;
00791     fi.pppz=0.;
00792     fi.ppenergy=0.;
00793     fi.ppmedium=0;
00794     fi.ptype=0;
00795     fi.ppvx=0.;
00796     fi.ppvy=0.;
00797     fi.ppvz=0.;
00798     fi.muparpx=0.;
00799     fi.muparpy=0.;
00800     fi.muparpz=0.;
00801     fi.mupare=0.;
00802     fi.necm=0.;
00803     fi.nimpwt=0.;
00804     fi.xpoint=0.;
00805     fi.ypoint=0.;
00806     fi.zpoint=0.;
00807     fi.tvx=0.;
00808     fi.tvy=0.;
00809     fi.tvz=0.;
00810     fi.tpx=0.;
00811     fi.tpy=0.;
00812     fi.tpz=0.;
00813     fi.tptype=0;
00814     fi.tgen=0;
00815   }
00816 }
00817 
00818 //****************************
00819 
00820 
00821 
00822 #endif

Generated on Mon Feb 15 11:07:02 2010 for loon by  doxygen 1.3.9.1