/* * main.cpp * * Created on: Jan 11, 2012 * Author: Anastasia Karavdina */ #include "ResonanceP.h" #include "StableP.h" #include "Particle.h" #include "TwoParticleState.h" #include "Chain.h" #include "Amplitude.h" #include "Intensity.h" #include "Util.h" #include "TLorentzVector.h" #include "TGenPhaseSpace.h" #include "TH1F.h" #include "TH2F.h" #include "TCanvas.h" #include #include #include #include #include #include int main(int __argc,char *__argv[]){ ///Read input from command line ----------------------- int sizemass = 20000000;//number of events to be generated std::string nStr=""; // decode arguments if( __argc>1 && ( strcmp( __argv[1], "-help" ) == 0 || strcmp( __argv[1], "--help" ) == 0 ) ){ std::cout << "This is generator based on amplitude calculation in helicity formalism 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; ///---------------------------------------------------- ///External parameters-------------------------------- double Esys=1;//Initial energy double Jsys;//Initial momenta list lParticles;//list of final particles vector pParticles; list lResonances;//list of resonances vector pResonances;//list of resonances IDs vector chResonances;//number of element in chain (1=last decay) ///---------------------------------------------------- ///Read input ASCII file ------------------------------ // decode arguments from input file string idStr=""; string pStr=""; int ip=0; ifstream input("HelGenParams.txt"); string sout; while(!input.eof()){ input>>sout; if(sout=="Input"){ //TODO: read\take into account more parameters from initial state while(sout!="}"){ input>>sout; if(sout=="*"){ input>>sout; if(sout=="energy"){ input>>sout; idStr = sout; stringstream eSStr(idStr); eSStr >> Esys; } if(sout=="J"){ input>>sout; idStr = sout; stringstream jSStr(idStr); jSStr >> Jsys; } } } } if (sout=="Output"){ int fpID;// IDs of final particle double fpM;//mass of final particle double fpS;//spin of final particle int fpP;//P parity of final particle int fpC;//C parity of final particle //TODO: take into account C parity! while(sout!="}"){ input>>sout; if(sout=="*"){ input>>sout; input>>sout; idStr = sout; stringstream idSStr(idStr); idSStr >> fpID; pParticles.push_back(fpID); input>>sout; pStr=sout; stringstream pSStr(pStr); pSStr>>fpM; input>>sout; pStr=sout; stringstream pSStr1(pStr); pSStr1>>fpS; input>>sout; pStr=sout; stringstream pSStr2(pStr); pSStr2>>fpP; input>>sout; pStr=sout; stringstream pSStr3(pStr); pSStr3>>fpC; Particle *stab1 = new StableP(fpID,fpM,fpS,fpP,fpC); lParticles.push_back(*stab1); } } } //cout<<"size(list of particles)="<>sout; if(sout=="*"){ input>>sout; input>>sout; idStr = sout; stringstream idSStr(idStr); idSStr >> rID; pResonances.push_back(rID); input>>sout; pStr = sout; stringstream pSStr(pStr); pSStr >> rM; input>>sout; pStr = sout; stringstream pSStr1(pStr); pSStr1 >> rW; input>>sout; pStr = sout; stringstream pSStr2(pStr); pSStr2 >> rS; input>>sout; pStr = sout; stringstream pSStr3(pStr); pSStr3 >> rP; input>>sout; pStr = sout; stringstream pSStr4(pStr); pSStr4 >> rC; input>>sout; input>>sout; idStr = sout; stringstream idSStrp1(idStr); idSStrp1 >> fpID1; input>>sout; input>>sout; idStr = sout; stringstream idSStrp2(idStr); idSStrp2 >> fpID2; ResonanceP res1(rID,rM,rS,rP,rC); res1.SetWidth(rW);//? res1.SetDecay(fpID1,fpID2); res1.Print(); lResonances.push_back(res1); }//if(sout=="*") }// while(sout!="}") }//if(sout=="Resonances") }//while(!input.eof()) ///---------------------------------------------------- ///Fill list of chain ------------------------------------ //list lchain = FillChain(lParticles, pParticles, lResonances, pResonances, chResonances); Util uhelp; list lchain = uhelp.FillChain(lParticles, pParticles, lResonances, pResonances); ///------------------------------------------------------ /// Phase Space generation ------------------------------ vector pf_lab;//output 4-vectors list lpf_lab;//output list of 4-vectors vector lfpcode;//output particle code TLorentzVector W(0.0,0.0,0.0,Esys); cout<<"Esys = "<::iterator it = lParticles.begin(); it != lParticles.end(); it++){ masses[mi]=(*it).Mass(); lfpcode.push_back((*it).Code()); cout<<(*it).Code()<<", "; mi++; } cout<<""< lAmpl; for (list::iterator it = lchain.begin(); it != lchain.end(); it++){ //cout<<"size of chain for ampl calc="<<(*it).GetStates().size()<Divide(3,3); //input TH1F *h1t12 = new TH1F("h1t12",";m_{12};Events",100,TMath::Sqrt(minx+0.1)-0.1,TMath::Sqrt(maxx)); TH1F *h1t13 = new TH1F("h1t13",";m_{13};Events",100,TMath::Sqrt(minx+0.1)-0.1,TMath::Sqrt(maxx)); TH1F *h1t14 = new TH1F("h1t14",";m_{14};Events",100,TMath::Sqrt(minx+0.1)-0.1,TMath::Sqrt(maxx)); TH1F *h1t23 = new TH1F("h1t23",";m_{23};Events",100,TMath::Sqrt(minx+0.1)-0.1,TMath::Sqrt(maxx)); TH1F *h1t24 = new TH1F("h1t24",";m_{24};Events",100,TMath::Sqrt(minx+0.1)-0.1,TMath::Sqrt(maxx)); //result TH1F *h1tr12 = new TH1F("h1tr12",";m_{12};Events",100,TMath::Sqrt(minx+0.1)-0.1,TMath::Sqrt(maxx)); TH1F *h1tr13 = new TH1F("h1tr13",";m_{13};Events",100,TMath::Sqrt(minx+0.1)-0.1,TMath::Sqrt(maxx)); TH1F *h1tr14 = new TH1F("h1tr14",";m_{14};Events",100,TMath::Sqrt(minx+0.1)-0.1,TMath::Sqrt(maxx)); TH1F *h1tr23 = new TH1F("h1tr23",";m_{23};Events",100,TMath::Sqrt(minx+0.1)-0.1,TMath::Sqrt(maxx)); TH1F *h1tr24 = new TH1F("h1tr24",";m_{24};Events",100,TMath::Sqrt(minx+0.1)-0.1,TMath::Sqrt(maxx)); TCanvas *cIm = new TCanvas("PairInvarMass"); cIm->Divide(5,2); ///--------------------------------------------------------- ///------------------------------------------------------ TGenPhaseSpace event; event.SetDecay(W, sizem, masses); for (Int_t n=0;ncd(1); h2->Draw("COLZ"); c1->cd(2); h1m12i->Draw(); c1->cd(3); h1m23i->Draw(); c1->cd(4); h2r->Draw("COLZ"); c1->cd(5); h1m12->Draw(); c1->cd(6); h1m23->Draw(); c1->cd(7); h2r2->Draw("COLZ"); c1->cd(8); h1m13->Draw(); c1->cd(9); h1m23->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.pdf"); TCanvas *c4 = new TCanvas("ThetaTest"); c4->Divide(3,1); c4->cd(1); hthetatest->Draw(); c4->cd(2); hphitest->Draw(); c4->cd(3); hcostheta->Draw(); c4->SaveAs("testAngles.pdf"); cout<<"well done! "<