//#include "FullAmp.h" #include "Intensity.h" #include "Resonance.h" #include "Particle.h" #include #include #include #include #include #include "TH2.h" #include "TH1.h" #include "TLorentzVector.h" #include "TLorentzRotation.h" #include "TGenPhaseSpace.h" #include #include #include #include "TParticlePDG.h" #include "TDatabasePDG.h" #include "QNCooking.h" using namespace TMath; //(Momentum, Energy units are GeV/C, GeV) int main(int __argc,char *__argv[]){ /// Read parameters set by user ---------------------------------- int sizemass = 10; std::string nStr=""; // decode arguments if( __argc>1 && ( strcmp( __argv[1], "-help" ) == 0 || strcmp( __argv[1], "--help" ) == 0 ) ){ std::cout << "This is Dalitz Plot generation with parameters\n" <<"-n Number of events \n" <<"Have fun! \n" << std::endl; return 0; } while ((optind < (__argc-1) ) && (__argv[optind][0]=='-')) { bool found=false; std::string sw = __argv[optind]; if (sw=="-n"){ optind++; nStr = __argv[optind]; found=true; } if (!found){ std::cout<< "Unknown switch: " << __argv[optind] <> sizemass; ///-------------------------------------------------------------- /// Open\Read file(s) ----------------------------------- std::ofstream output("DalitzPlotIntencity.txt"); output<<"-------------------------"<>sout; if (sout=="Particles"){ while(sout!="}"){ input>>sout; if(sout=="#"){ input>>sout; // output<>sout; output<<"(PDGid="<> idIP; input>>sout; pStr=sout; std::stringstream pSStr(pStr); pSStr>>MassDP; input>>sout; pStr=sout; std::stringstream pSStr1(pStr); pSStr1>>sDP; input>>sout; pStr=sout; std::stringstream pSStr2(pStr); pSStr2>>pDP; } if(sout=="*"){ input>>sout; output<>sout; output<> idFP[ip]; input>>sout; pStr=sout; std::stringstream pSStr(pStr); pSStr>>mFP[ip]; input>>sout; pStr=sout; std::stringstream pSStr1(pStr); pSStr1>>sFP[ip]; input>>sout; pStr=sout; std::stringstream pSStr2(pStr); pSStr2>>pFP[ip]; ip++; } } } if(sout=="Resonances"){ output<<"Resonance(s):"<>sout; if(sout=="*"){ input>>sout; output<<" "<>sout; output<<"(PDGid="<> idR[ir]; input>>sout; pStr = sout; std::stringstream pSStr(pStr); pSStr >> mR[ir]; input>>sout; pStr = sout; std::stringstream pSStr1(pStr); pSStr1 >> wR[ir]; input>>sout; pStr = sout; std::stringstream pSStr2(pStr); pSStr2 >> sR[ir]; input>>sout; pStr = sout; std::stringstream pSStr3(pStr); pSStr3 >> pR[ir]; input>>sout; output<>sout; idStr = sout; std::stringstream idSStrp1(idStr); idSStrp1 >> idRd[ir][0]; input>>sout; output<>sout; idStr = sout; std::stringstream idSStrp2(idStr); idSStrp2 >> idRd[ir][1]; ir++; } } } } ///-------------------------------------------------------------- ///DP -> f1 f2 f3 //initial particle // TParticlePDG *inP = fdbPDG->GetParticle(idIP); // inP->Print(); //final particles // TParticlePDG *outP[3] = {fdbPDG->GetParticle(idFP[0]), fdbPDG->GetParticle(idFP[1]), fdbPDG->GetParticle(idFP[2])}; // outP[0]->Print(); outP[1]->Print(); outP[2]->Print(); // double MassDP = inP->Mass();//mass of initial particle // double massf1 = outP[0]->Mass(); // mass of 1st finale particle // double massf2 = outP[1]->Mass(); // mass of 2nd finale particle // double massf3 = outP[2]->Mass(); // mass of 3nd finale particle Particle pi1(mFP[0],sFP[0],pFP[0]); Particle pi2(mFP[1],sFP[1],pFP[1]); Particle pi3(mFP[2],sFP[2],pFP[2]); pi1.Print(); pi2.Print(); pi3.Print(); /// Setting Resonance(s) and Calculation of Quantum numbers -------------- ///resonances for pair (1,2) ---------------------------------- //TODO: check coherent\incoheren sum! std::vector resonance12; for(int ir=0;ir<24;ir++){ // std::cout<<"ir#"< l; QNCalc->AngularMomenta(l); f0.setl(l); // int sRes = sR[ir]; resonance12.push_back(f0); // f0.Print(); // std::cout<<"resonance #"< resonance23; for(int ir=0;ir<24;ir++){ // std::cout<<"ir#"< l; QNCalc->AngularMomenta(l); f0.setl(l); // int sRes = sR[ir]; resonance23.push_back(f0); // f0.Print(); // std::cout<<"resonance #"< resonance13; for(int ir=0;ir<24;ir++){ // std::cout<<"ir#"< l; QNCalc->AngularMomenta(l); f0.setl(l); // int sRes = sR[ir]; resonance13.push_back(f0); // f0.Print(); // std::cout<<"resonance #"< // f0_pi_pi_s->PrintPar(); /// Test Histogramm ------------------------------------------ double minx = TMath::Power((mFP[0]+mFP[1]),2)-0.1; double maxx = TMath::Power((MassDP-mFP[2]),2)+0.1; double miny = TMath::Power((mFP[1]+mFP[2]),2)-0.1; double maxy = TMath::Power((MassDP-mFP[0]),2)+0.1; // std::cout<Divide(3,3); ///--------------------------------------------------------- TLorentzVector W(0.0,0.0,0.0,MassDP); // Double_t masses[3] = {massf1, massf2, massf3} ; Double_t *masses = mFP; TGenPhaseSpace event; event.SetDecay(W, 3, masses); // const int sizemass=20000; for (Int_t n=0;nFill(p12.M2(), p23.M2() ,weight); h1m12i->Fill(p12.M(),weight); // std::cout<<" h1m12i filled by: "<Fill(p23.M(),weight); ///--------------------------------------------------------- ///Intensity calculation in helicity formalizm ------------- ///phi and theta are calculated by boost std::complex itensity_sum = f0_pi_pi_s->Calc(p1_3.Phi(),p1_3.Theta(),mass12,p2_1.Phi(),p2_1.Theta(),mass23, p1_2.Phi(),p1_2.Theta(),mass13); double intensbin = real(itensity_sum)*weight; // std::complex itensity_sum2 = f0_pi_pi_s->Calc(p2_1.Phi(),p2_1.Theta(),mass23, // p1_2.Phi(),p1_2.Theta(),mass13,p1_3.Phi(),p1_3.Theta(),mass12); // std::complex itensity_sum3 = f0_pi_pi_s->Calc(p1_2.Phi(),p1_2.Theta(),mass13,p1_3.Phi(),p1_3.Theta(),mass12,p2_1.Phi(),p2_1.Theta(),mass23); // double intensbin = real(itensity_sum+itensity_sum2+itensity_sum3)*weight; // for(int idem=0;idem<10;idem++){ // if(resonance12[idem].size()!=0 || resonance23[idem].size()!=0 || resonance13[idem].size()!=0){ // Intensity *f0_pi_pi_p = new Intensity(resonance12[idem],resonance23[idem], resonance13[idem], pi1, pi2, pi3); // itensity_sum+=f0_pi_pi_p->Calc(p1_3.Phi(),p1_3.Theta(),mass12,p2_1.Phi(),p2_1.Theta(),mass23, // p1_2.Phi(),p1_2.Theta(),mass13); // } // } // double intensbin = real(itensity_sum); // std::cout<<"itensity_sum="<Fill(intensbin); h2r->Fill(p12.M2(), p23.M2(),intensbin); h2r2->Fill(p13.M2(),p23.M2(),intensbin); h1m12->Fill(p12.M(),intensbin); h1m23->Fill(p23.M(),intensbin); h1m13->Fill(p13.M(),intensbin); output<<" "<cd(1); h2->Draw("COLZ"); c1->cd(2); // h2->ProjectionX()->Draw(); h1m12i->Draw(); //h1m12i->DrawCopy(); c1->cd(3); // h2->ProjectionY()->Draw(); h1m23i->Draw(); c1->cd(4); h2r->Draw("COLZ"); c1->cd(5); // h2r->ProjectionX()->Draw(); h1m12->Draw(); c1->cd(6); // h2r->ProjectionY()->Draw(); h1m23->Draw(); c1->cd(7); h2r2->Draw("COLZ"); c1->cd(8); // h2r2->ProjectionX()->Draw(); h1m13->Draw(); c1->cd(9); h1m23->Draw(); // h2r2->ProjectionY()->Draw(); c1->SaveAs("testDalitzPlot.pdf"); TCanvas *c2 = new TCanvas("DalitzPlot"); h2r->Draw("COLZ"); c2->SaveAs("testDalitzPlot_onlyDP.root"); TCanvas *c3 = new TCanvas("IntencityTest"); hinttest->Draw(); c3->SaveAs("testIntenc.root"); }