TComplex TComplex::sqrt(long n, long i) { /* n(q) = n(r)* (cos ((fi + 2*k*pi)/n)+ i* sin ((fi + 2*k*pi)/n))*/ double sqrt_r = pow(module(), 1.0 / n); double _real = sqrt_r * cos((angle_rad() + 2 * 3.1415926535897932384 * i) / n); //3.1415926535897932384 double _imagine = sqrt_r * sin((angle_rad() + 2 * 3.1415926535897932384 * i) / n); //3.1415926535897932384 return TComplex(_real, _imagine); }
void TDSPPsk::InitSymbols() { Double_t pi2 = 2*TMath::Pi(); for(Int_t i=0;i<fNumSymbols;++i) { // Book the PSK-Symbols // Double_t t=i*pi2; t/=fNumSymbols; Double_t cosine = TMath::Cos(t); Double_t sine = TMath::Sin(t); // not nice if (TMath::Abs(cosine)<1.e-15) cosine=0; if ( TMath::Abs(sine)<1.e-15) sine=0; fSymbols[i] = TComplex(cosine,sine); // Flat props for Generation // fProbs[i] = 1; // Init the Sigmas for Detection fDetectSigmas[i] = 1; } NormalizeProbs(); }
TComplex TComplex::operator= (TComplex complex) { //проверка на самоприсваивание if (this == &complex) { return *this; } this->real = complex.get_re(); this->imagine = complex.get_im(); return TComplex(complex.get_re(), complex.get_im()); }
QString TCtrl::execute_operation(TOprn command, QString arg) { QString res; switch (state) { case c_start: case c_editing: if (processor.get_lop() == TComplex()) { processor.set_lop(TComplex(arg)); } else { processor.set_rop(TComplex(arg)); processor.run_oprtn(); processor.set_rop(TComplex()); } processor.set_operation(command); res = processor.get_lop().get_complex(); state = c_op_change; break; case c_op_change: processor.set_operation(command); res = arg; break; case c_exp_done: processor.reset(); processor.set_lop(TComplex(arg)); processor.set_operation(command); state = c_op_change; res = arg; break; case c_fun_done: if (processor.get_lop() == TComplex()) { processor.reset(); processor.set_lop(TComplex(arg)); } else { processor.set_rop(TComplex(arg)); processor.run_oprtn(); processor.set_rop(TComplex()); } processor.set_operation(command); res = processor.get_lop().get_complex(); state = c_op_change; break; default: break; } return res; }
bool TProtoSerial::SerialRepeated(TComplex& v, int idx, int protoField) { CHECK_FIELD(); switch (Mode) { case ESerialMode::IN: { const auto& messageField = Refl->GetRepeatedMessage(Message, GetFieldDescr(protoField), idx); const NGroundProto::TComplex& cpx = dynamic_cast<const NGroundProto::TComplex&>(messageField); v = TComplex(cpx.real(), cpx.imag()); } break; case ESerialMode::OUT: { NPb::Message* messageField = Refl->AddMessage(&Message, GetFieldDescr(protoField)); NGroundProto::TComplex* cpx = dynamic_cast<NGroundProto::TComplex*>(messageField); cpx->set_real(v.real()); cpx->set_imag(v.imag()); } break; } return true; }
void getResv(){ double theta[ntheta]; TFile *f[nFileAlltrack]; for(int itheta=0;itheta<ntheta;itheta++) theta[itheta]=itheta*TMath::Pi()/ntheta/nn; string SumorProd = getenv("SUMORPROD"); string mdir = getenv("DIR"); ofstream fstrv; if(SumorProd=="Sum")fstrv.open("v.txt"); else fstrv.open("v_2.txt"); TVectorD totmult[nbin], totpt[nbin]; TVectorD Nevent, totmultall, totmultall_; TVectorD totmulthisto[nbin], totmulthistocorr[nbin]; TVectorD V_int, V_interr; TVectorD V_intcorr, V_intcorrerr; TVectorD* V_mean; TVectorD* deltaV_mean; TVectorD* V[nbin]; TVectorD* chi[nbin]; TVectorD* dDRe[nbin]; TVectorD* dDIm[nbin]; TVectorD* dNRe[nbin][ntheta]; TVectorD* dNIm[nbin][ntheta]; TComplex dD[nbin][ntheta], dN[nbin][ntheta][nptv]; TVectorD avgmult[nbin]; TVectorD avgmultall; TVectorD avgpt[nbin]; TVectorD v[nbin][ntheta],vmean[nbin],deltav[nbin][ntheta],deltavmean[nbin]; if(SumorProd=="Sum") TFile *infile = TFile::Open("mergedV_Sum.root"); else TFile *infile = TFile::Open("mergedV_Prod.root"); Nevent.ResizeTo(nbin); Nevent.Zero(); totmultall.ResizeTo(nbin); totmultall.Zero(); totmultall_.ResizeTo(nbin); totmultall_.Zero(); avgmultall.ResizeTo(nbin); V_int.ResizeTo(nbin); V_int.Zero(); V_interr.ResizeTo(nbin); V_interr.Zero(); V_intcorr.ResizeTo(nbin); V_intcorr.Zero(); V_intcorrerr.ResizeTo(nbin); V_intcorrerr.Zero(); for(int ibin=0;ibin<nbin;ibin++){ totmult[ibin].ResizeTo(nptv); totmult[ibin].Zero(); totmulthisto[ibin].ResizeTo(nptv); totmulthistocorr[ibin].ResizeTo(nptv); avgmult[ibin].ResizeTo(nptv); avgpt[ibin].ResizeTo(nptv); totpt[ibin].ResizeTo(nptv); totpt[ibin].Zero(); vmean[ibin].ResizeTo(nptv); deltavmean[ibin].ResizeTo(nptv); V[ibin] = (TVectorD*) infile->Get(Form("D_%d/D_0/V",ibin)); chi[ibin] = (TVectorD*) infile->Get(Form("D_%d/chi",ibin)); V_mean = (TVectorD*) infile->Get(Form("D_%d/Vmean",ibin)); deltaV_mean = (TVectorD*) infile->Get(Form("D_%d/deltaVmean",ibin)); for(int itheta=0;itheta<ntheta;itheta++){ v[ibin][itheta].ResizeTo(nptv); deltav[ibin][itheta].ResizeTo(nptv); dD[ibin][itheta]=0; for(int iptbin=0;iptbin<nptv;iptbin++){ dN[ibin][itheta][iptbin]=0; } } } for(int ifile=0; ifile<nFileAlltrack; ifile++){ if(SumorProd=="Sum") f[ifile] = TFile::Open(Form("/lio/lfs/cms/store/user/qixu/flow/pbsjoboutput/PFcandpt01to10tracknormcpt03to6/%s/Anav_Prod_%d.root",mdir.c_str(),ifile)); else f[ifile] = TFile::Open(Form("/lio/lfs/cms/store/user/qixu/flow/pbsjoboutput/PFcandpt01to10tracknormcpt03to6/%s/Anav_Prod2_%d.root",mdir.c_str(),ifile)); TVectorD* Nevent_t = (TVectorD*)f[ifile]->Get("Nevent"); TVectorD* totmultall_t = (TVectorD*)f[ifile]->Get("totmultall"); for(int ibin=0;ibin<nbin;ibin++){ TVectorD* totmult_t = (TVectorD*)f[ifile]->Get(Form("totmult_%d",ibin)); TVectorD* totpt_t = (TVectorD*)f[ifile]->Get(Form("totpt_%d",ibin)); dDRe[ibin] = (TVectorD*)f[ifile]->Get(Form("dDRe_%d",ibin)); dDIm[ibin] = (TVectorD*)f[ifile]->Get(Form("dDIm_%d",ibin)); Nevent[ibin]+=(*Nevent_t)[ibin]; totmultall[ibin]+=(*totmultall_t)[ibin]; for(int iptbin=0;iptbin<nptv;iptbin++){ totmult[ibin][iptbin]+=(*totmult_t)[iptbin]; totpt[ibin][iptbin]+=(*totpt_t)[iptbin]; } for(int itheta=0;itheta<ntheta;itheta++){ dNRe[ibin][itheta] = (TVectorD*)f[ifile]->Get(Form("dNRe_%d_%d",ibin,itheta)); dNIm[ibin][itheta] = (TVectorD*)f[ifile]->Get(Form("dNIm_%d_%d",ibin,itheta)); dD[ibin][itheta]+=TComplex((*dDRe[ibin])[itheta],(*dDIm[ibin])[itheta]); for(int iptbin=0;iptbin<nptv;iptbin++) dN[ibin][itheta][iptbin]+=TComplex((*dNRe[ibin][itheta])[iptbin],(*dNIm[ibin][itheta])[iptbin]); } } f[ifile]->Close(); } TH1D* hpt[nbin]; TH1D* hpteffcorr[nbin]; TFile *fhisto = TFile::Open("histomerged.root"); TFile *feff = TFile::Open("/home/xuq7/HI/flow/LYZ/v2/TrackCorrections_HIJING_538_OFFICIAL_Mar24.root"); TH2F* heff = (TH2F*)feff->Get("rTotalEff3D"); TH1D* hpteff = (TH1D*)heff->ProjectionY("hpteff",heff->GetXaxis()->FindBin(-2.4),heff->GetXaxis()->FindBin(2.4)-1,"o"); TArrayD *ptarr = (TArrayD*)heff->GetYaxis()->GetXbins(); double *ptbinhisto = ptarr->GetArray(); int NbinX = heff->GetXaxis()->GetNbins(); int NbinY = heff->GetYaxis()->GetNbins(); hpteff->Scale(1.0/NbinX); for(int ibin=0;ibin<nbin;ibin++) for(int itheta=0;itheta<ntheta;itheta++) dD[ibin][itheta]*=TComplex::Power(TComplex::I(),mm-1)/(Double_t)Nevent[ibin]; for(int ibin=0;ibin<nbin;ibin++){ avgmultall[ibin]=1.0*totmultall[ibin]/Nevent[ibin]; hpt[ibin] = (TH1D*)fhisto->Get(Form("D_%d/hpt",ibin)); TH1D* hptre = (TH1D*)hpt[ibin]->Rebin(NbinY,"hptre",ptbinhisto); hpteffcorr[ibin] = (TH1D*)hptre->Clone(Form("hpteffcorr_%d",ibin)); hpteffcorr[ibin]->Divide(hpteff); for(int iptbin=0;iptbin<nptv; iptbin++){ vmean[ibin][iptbin]=0; deltavmean[ibin][iptbin]=0; avgmult[ibin][iptbin]=1.0*totmult[ibin][iptbin]/Nevent[ibin]; avgpt[ibin][iptbin]=1.0*totpt[ibin][iptbin]/totmult[ibin][iptbin]; for(int itheta=0;itheta<ntheta;itheta++){ dN[ibin][itheta][iptbin]/=totmult[ibin][iptbin]; TComplex Res=dN[ibin][itheta][iptbin]/dD[ibin][itheta]; v[ibin][itheta][iptbin]=(*V[ibin])[itheta]*avgmultall[ibin]*TMath::BesselJ1(j01)/Besselj01(mm)*Res.Re(); vmean[ibin][iptbin]+=v[ibin][itheta][iptbin]; deltav[ibin][itheta][iptbin]=TMath::Cos(mm*nn*theta[itheta])/totmult[ibin][iptbin]*(TMath::Exp(j01*j01/2./(*chi[ibin])[0]/(*chi[ibin])[0]*TMath::Cos(nn*theta[itheta]))*TMath::BesselJ0(2*j01*TMath::Sin(nn*theta[itheta]/2.))+TMath::Power(-1,mm)*TMath::Exp(-j01*j01/2./(*chi[ibin])[0]/(*chi[ibin])[0]*TMath::Cos(nn*theta[itheta]))*TMath::BesselJ0(2*j01*TMath::Cos(nn*theta[itheta]/2.))); deltavmean[ibin][iptbin]+=deltav[ibin][itheta][iptbin]; // fstrv<<itheta<<"\t"<<v[ibin][itheta][iptbin]<<"\t"<<deltav[ibin][itheta][iptbin]<<endl; } deltavmean[ibin][iptbin]=TMath::Sqrt(deltavmean[ibin][iptbin])/2./Besselj01(mm); //fstrv<<endl; vmean[ibin][iptbin]/=ntheta; deltavmean[ibin][iptbin]/=TMath::Sqrt(ntheta); fstrv<<ptbinv[iptbin]<<"-"<<ptbinv[iptbin+1]<<"\t"<<vmean[ibin][iptbin]<<"\t"<<deltavmean[ibin][iptbin]<<endl; if(ptbinv[iptbin+1]>3.0) continue; totmulthisto[ibin][iptbin]=hpt[ibin]->Integral(hpt[ibin]->GetXaxis()->FindBin(ptbinv[iptbin]),hpt[ibin]->GetXaxis()->FindBin(ptbinv[iptbin+1])-1); totmulthistocorr[ibin][iptbin]=hpteffcorr[ibin]->Integral(hpteffcorr[ibin]->GetXaxis()->FindBin(ptbinv[iptbin]),hpteffcorr[ibin]->GetXaxis()->FindBin(ptbinv[iptbin+1])-1); V_int[ibin]+=vmean[ibin][iptbin]*totmult[ibin][iptbin]; V_interr[ibin]+=deltavmean[ibin][iptbin]*totmult[ibin][iptbin]; V_intcorr[ibin]+=vmean[ibin][iptbin]*totmulthistocorr[ibin][iptbin]; V_intcorrerr[ibin]+=deltavmean[ibin][iptbin]*totmulthistocorr[ibin][iptbin]; totmultall_[ibin]+=totmult[ibin][iptbin]; } V_int[ibin]/=totmultall_[ibin]; V_interr[ibin]/=totmultall_[ibin]; V_intcorr[ibin]/=hpteffcorr[ibin]->Integral(hpteffcorr[ibin]->GetXaxis()->FindBin(ptbinv[0]),hpteffcorr[ibin]->GetXaxis()->FindBin(3.0)-1); V_intcorrerr[ibin]/=hpteffcorr[ibin]->Integral(hpteffcorr[ibin]->GetXaxis()->FindBin(ptbinv[0]),hpteffcorr[ibin]->GetXaxis()->FindBin(3.0)-1); } fstrv<<endl<<"pt range\t\t"<<"totmult"<<"\t\t"<<"totmult from histo"<<"\t"<<"totmult corrected"<<endl; for(int ibin=0;ibin<nbin;ibin++){ for(int iptbin=0;iptbin<nptv; iptbin++){ fstrv<<ptbinv[iptbin]<<"-"<<ptbinv[iptbin+1]<<"\t\t"<<totmult[ibin][iptbin]<<"\t"<<totmulthisto[ibin][iptbin]<<"\t"<<totmulthistocorr[ibin][iptbin]<<endl; } fstrv<<"Integral\t\t"<<totmultall[ibin]<<"\t"<<hpt[ibin]->Integral(hpt[ibin]->GetXaxis()->FindBin(ptbinv[0]),hpt[ibin]->GetXaxis()->FindBin(3.0)-1)<<"\t"<<hpteffcorr[ibin]->Integral(hpteffcorr[ibin]->GetXaxis()->FindBin(ptbinv[0]),hpteffcorr[ibin]->GetXaxis()->FindBin(3.0)-1)<<endl; fstrv<<"V ref="<<(*V_mean)[ibin]<<"\t"<<"V int="<<V_int[ibin]<<"\t"<<"V int corr="<<V_intcorr[ibin]<<endl; fstrv<<"V ref err="<<(*deltaV_mean)[ibin]<<"\t"<<"V int err="<<V_interr[ibin]<<"\t"<<"V int corr err="<<V_intcorrerr[ibin]<<endl; } if(SumorProd=="Sum")TFile *fout = new TFile("mergedv_Prod.root","Recreate"); else TFile *fout = new TFile("mergedv_Prod2.root","Recreate"); for(ibin=0;ibin<nbin;ibin++){ Nevent.Write("Nevent"); V_int.Write("V_int"); V_interr.Write("V_interr"); V_intcorr.Write("V_intcorr"); V_intcorrerr.Write("V_intcorrerr"); TDirectory *dir = fout->mkdir(Form("D_%d",ibin)); dir->cd(); avgpt[ibin].Write("avgpt"); totmult[ibin].Write("totmult"); vmean[ibin].Write("vmean"); deltavmean[ibin].Write("deltavmean"); } infile->Close(); fout->Close(); }
void getResv(){ double theta[ntheta]; TFile *f[nFileAll]; for(int itheta=0;itheta<ntheta;itheta++) theta[itheta]=itheta*TMath::Pi()/ntheta/nn; ofstream fstrv; if(isSum)fstrv.open("v.txt"); else fstrv.open("v_2.txt"); TVectorD totmult[nbin], totpt[nbin]; TVectorD Nevent, totmultall; TVectorD* V[nbin]; TVectorD* chi[nbin]; TVectorD* dDRe[nbin]; TVectorD* dDIm[nbin]; TVectorD* dNRe[nbin][ntheta]; TVectorD* dNIm[nbin][ntheta]; TComplex dD[nbin][ntheta], dN[nbin][ntheta][nptv]; TVectorD avgmult[nbin]; TVectorD avgmultall; TVectorD avgpt[nbin]; TVectorD v[nbin][ntheta],vmean[nbin],deltav[nbin][ntheta],deltavmean[nbin]; if(isSum) TFile *infile = TFile::Open("mergedV_Sum.root"); else TFile *infile = TFile::Open("mergedV_Prod.root"); Nevent.ResizeTo(nbin); Nevent.Zero(); totmultall.ResizeTo(nbin); totmultall.Zero(); avgmultall.ResizeTo(nbin); for(int ibin=0;ibin<nbin;ibin++){ totmult[ibin].ResizeTo(nptv); totmult[ibin].Zero(); avgmult[ibin].ResizeTo(nptv); avgpt[ibin].ResizeTo(nptv); totpt[ibin].ResizeTo(nptv); totpt[ibin].Zero(); vmean[ibin].ResizeTo(nptv); deltavmean[ibin].ResizeTo(nptv); V[ibin] = (TVectorD*) infile->Get(Form("D_%d/D_0/V",ibin)); chi[ibin] = (TVectorD*) infile->Get(Form("D_%d/D_0/chi",ibin)); for(int itheta=0;itheta<ntheta;itheta++){ v[ibin][itheta].ResizeTo(nptv); deltav[ibin][itheta].ResizeTo(nptv); dD[ibin][itheta]=0; for(int iptbin=0;iptbin<nptv;iptbin++){ dN[ibin][itheta][iptbin]=0; } } } for(int ifile=0; ifile<nFileAll; ifile++){ if(isSum) f[ifile] = TFile::Open(Form("./jobout/Anav_Prod_%d.root",ifile)); else f[ifile] = TFile::Open(Form("./jobout/Anav_Prod2_%d.root",ifile)); TVectorD* Nevent_t = (TVectorD*)f[ifile]->Get("Nevent"); TVectorD* totmultall_t = (TVectorD*)f[ifile]->Get("totmultall"); for(int ibin=0;ibin<nbin;ibin++){ TVectorD* totmult_t = (TVectorD*)f[ifile]->Get(Form("totmult_%d",ibin)); TVectorD* totpt_t = (TVectorD*)f[ifile]->Get(Form("totpt_%d",ibin)); dDRe[ibin] = (TVectorD*)f[ifile]->Get(Form("dDRe_%d",ibin)); dDIm[ibin] = (TVectorD*)f[ifile]->Get(Form("dDIm_%d",ibin)); Nevent[ibin]+=(*Nevent_t)[ibin]; totmultall[ibin]+=(*totmultall_t)[ibin]; for(int iptbin=0;iptbin<nptv;iptbin++){ totmult[ibin][iptbin]+=(*totmult_t)[iptbin]; totpt[ibin][iptbin]+=(*totpt_t)[iptbin]; } for(int itheta=0;itheta<ntheta;itheta++){ dNRe[ibin][itheta] = (TVectorD*)f[ifile]->Get(Form("dNRe_%d_%d",ibin,itheta)); dNIm[ibin][itheta] = (TVectorD*)f[ifile]->Get(Form("dNIm_%d_%d",ibin,itheta)); dD[ibin][itheta]+=TComplex((*dDRe[ibin])[itheta],(*dDIm[ibin])[itheta]); for(int iptbin=0;iptbin<nptv;iptbin++) dN[ibin][itheta][iptbin]+=TComplex((*dNRe[ibin][itheta])[iptbin],(*dNIm[ibin][itheta])[iptbin]); } } f[ifile]->Close(); } for(int ibin=0;ibin<nbin;ibin++) for(int itheta=0;itheta<ntheta;itheta++) dD[ibin][itheta]*=TComplex::Power(TComplex::I(),mm-1)/(Double_t)Nevent[ibin]; for(int ibin=0;ibin<nbin;ibin++){ avgmultall[ibin]=1.0*totmultall[ibin]/Nevent[ibin]; for(int iptbin=0;iptbin<nptv; iptbin++){ vmean[ibin][iptbin]=0; deltavmean[ibin][iptbin]=0; avgmult[ibin][iptbin]=1.0*totmult[ibin][iptbin]/Nevent[ibin]; avgpt[ibin][iptbin]=1.0*totpt[ibin][iptbin]/totmult[ibin][iptbin]; for(int itheta=0;itheta<ntheta;itheta++){ dN[ibin][itheta][iptbin]/=totmult[ibin][iptbin]; TComplex Res=dN[ibin][itheta][iptbin]/dD[ibin][itheta]; v[ibin][itheta][iptbin]=(*V[ibin])[itheta]*avgmultall[ibin]*TMath::BesselJ1(j01)/Besselj01(mm)*Res.Re(); vmean[ibin][iptbin]+=v[ibin][itheta][iptbin]; deltav[ibin][itheta][iptbin]=TMath::Cos(mm*nn*theta[itheta])/totmult[ibin][iptbin]*(TMath::Exp(j01*j01/2./(*chi[ibin])[itheta]/(*chi[ibin])[itheta]*TMath::Cos(nn*theta[itheta]))*TMath::BesselJ0(2*j01*TMath::Sin(nn*theta[itheta]/2.))+TMath::Power(-1,mm)*TMath::Exp(-j01*j01/2./(*chi[ibin])[itheta]/(*chi[ibin])[itheta]*TMath::Cos(nn*theta[itheta]))*TMath::BesselJ0(2*j01*TMath::Cos(nn*theta[itheta]/2.))); deltavmean[ibin][iptbin]+=deltav[ibin][itheta][iptbin]; // fstrv<<itheta<<"\t"<<v[ibin][itheta][iptbin]<<"\t"<<deltav[ibin][itheta][iptbin]<<endl; } deltavmean[ibin][iptbin]=TMath::Sqrt(deltavmean[ibin][iptbin])/2./Besselj01(mm); //fstrv<<endl; vmean[ibin][iptbin]/=ntheta; deltavmean[ibin][iptbin]/=ntheta; fstrv<<ptbinv[iptbin]<<"-"<<ptbinv[iptbin+1]<<"\t"<<vmean[ibin][iptbin]<<"\t"<<deltavmean[ibin][iptbin]<<endl; } } if(isSum)TFile *fout = new TFile("mergedv_Prod.root","Recreate"); else TFile *fout = new TFile("mergedv_Prod2.root","Recreate"); for(ibin=0;ibin<nbin;ibin++){ Nevent.Write("Nevent"); TDirectory *dir = fout->mkdir(Form("D_%d",ibin)); dir->cd(); avgpt[ibin].Write("avgpt"); vmean[ibin].Write("vmean"); deltavmean[ibin].Write("deltavmean"); } infile->Close(); fout->Close(); }
void getResvsub(int ispt=1){ double theta[ntheta]; TFile *f[nFileAll]; for(int itheta=0;itheta<ntheta;itheta++) theta[itheta]=itheta*TMath::Pi()/ntheta/nn; int nvv; const double *binv; if(ispt){ nvv = nptv; binv = ptbinv;} else{ nvv = netav; binv = etabinv;} string SumorProd = getenv("SUMORPROD"); string mdir = getenv("DIR"); ofstream fstrv; if(ispt){ if(SumorProd=="Sum")fstrv.open("v_sub.txt"); else fstrv.open("v_2_sub.txt"); } else{ if(SumorProd=="Sum")fstrv.open("v_eta_sub.txt"); else fstrv.open("v_2_coarse_eta_sub.txt"); } TVectorD Nevent[nbin], totmultall[nbin], totmultall_[nbin]; TVectorD totmult[nbin], totpt[nbin],toteta[nbin]; TVectorD totmulthisto[nbin], totmulthistocorr[nbin]; TVectorD V_int[nbin], V_interr[nbin]; TVectorD V_intcorr[nbin], V_intcorrerr[nbin]; TVectorD* V_mean; TVectorD* deltaV_mean; TVectorD vmeanmean[nbin], deltavmeanmean[nbin], sigmavmeanmean[nbin], avgavgpt[nbin], avgavgeta[nbin]; TVectorD* V[nbin]; TVectorD* chi[nbin]; TVectorD* dDRe[nbin]; TVectorD* dDIm[nbin]; TVectorD* dNRe[nbin][ntheta]; TVectorD* dNIm[nbin][ntheta]; TComplex dD[nbin][ntheta], dN[nbin][ntheta][nvv]; TVectorD avgmult[nbin]; TVectorD avgmultall; TVectorD avgpt[nbin],avgeta[nbin]; TVectorD v[nbin][ntheta],vmean[nbin],deltav[nbin][ntheta],deltavmean[nbin]; TVectorD IFILE[nbin]; if(SumorProd=="Sum") TFile *infile = TFile::Open("mergedV_Sum.root"); else TFile *infile = TFile::Open("mergedV_Prod.root"); if(ispt){ if(SumorProd=="Sum")TFile *fout = new TFile("mergedv_Prod_sub.root","Recreate"); else TFile *fout = new TFile("mergedv_Prod2_sub.root","Recreate"); } else{ if(SumorProd=="Sum")TFile *fout = new TFile("mergedv_Prod_eta_sub.root","Recreate"); else TFile *fout = new TFile("mergedv_Prod2_coarse_eta_sub.root","Recreate"); } TVectorD Nevent_; Nevent_.ResizeTo(nbin); Nevent_.Zero(); TH1D* hpt[nbin]; TH1D* hpteffcorr[nbin]; for(int ibin=0;ibin<nbin;ibin++){ for(int ifile=0; ifile<nFileAll; ifile++){ if(ispt){ if(SumorProd=="Sum") f[ifile] = TFile::Open(Form("/scratch/xuq7/flow/pbsjoboutput/tracknormcpt03to6/%s/Anav_Prod_%d.root",mdir.c_str(),ifile)); else f[ifile] = TFile::Open(Form("/scratch/xuq7/flow/pbsjoboutput/tracknormcpt03to6/%s/Anav_Prod2_%d.root",mdir.c_str(),ifile)); } else{ if(SumorProd=="Sum") f[ifile] = TFile::Open(Form("/scratch/xuq7/flow/pbsjoboutput/tracknormcpt03to6c/coarsebins/%s/Anaveta_Prod_%d.root",mdir.c_str(),ifile)); else f[ifile] = TFile::Open(Form("/scratch/xuq7/flow/pbsjoboutput/tracknormcpt03to6/coarsebins/%s/Anaveta_Prod2_%d.root",mdir.c_str(),ifile)); } TVectorD* Nevent_t = (TVectorD*)f[ifile]->Get(Form("Nevent")); Nevent_[ibin]+=(*Nevent_t)[ibin]; f[ifile]->Close(); } IFILE[ibin].ResizeTo(nsamples); Nevent[ibin].ResizeTo(nsamples); Nevent[ibin].Zero(); totmultall[ibin].ResizeTo(nsamples); totmultall[ibin].Zero(); totmultall_[ibin].ResizeTo(nsamples); totmultall_[ibin].Zero(); TDirectory *dir0 = fout->mkdir(Form("D_%d",ibin)); vmeanmean[ibin].ResizeTo(nvv); vmeanmean[ibin].Zero(); deltavmeanmean[ibin].ResizeTo(nvv); deltavmeanmean[ibin].Zero(); sigmavmeanmean[ibin].ResizeTo(nvv); sigmavmeanmean[ibin].Zero(); avgavgpt[ibin].ResizeTo(nvv); avgavgpt[ibin].Zero(); avgavgeta[ibin].ResizeTo(nvv); avgavgeta[ibin].Zero(); V_interr[ibin].ResizeTo(nsamples); V_interr[ibin].Zero(); V_int[ibin].ResizeTo(nsamples); V_int[ibin].Zero(); if(ispt){ V_intcorr[ibin].ResizeTo(nsamples); V_intcorr[ibin].Zero(); V_intcorrerr[ibin].ResizeTo(nsamples); V_intcorrerr[ibin].Zero(); } for(int isample=0;isample<nsamples;isample++){ TVectorD Nevent0; Nevent0.ResizeTo(nbin); Nevent0.Zero(); avgmultall.ResizeTo(nbin); totmult[ibin].ResizeTo(nvv); totmult[ibin].Zero(); if(ispt){ totmulthisto[ibin].ResizeTo(nvv); totmulthisto[ibin].Zero(); totmulthistocorr[ibin].ResizeTo(nvv);totmulthistocorr[ibin].Zero(); } avgmult[ibin].ResizeTo(nvv); avgpt[ibin].ResizeTo(nvv); avgeta[ibin].ResizeTo(nvv); totpt[ibin].ResizeTo(nvv); totpt[ibin].Zero(); toteta[ibin].ResizeTo(nvv); toteta[ibin].Zero(); vmean[ibin].ResizeTo(nvv); deltavmean[ibin].ResizeTo(nvv); V[ibin] = (TVectorD*) infile->Get(Form("D_%d/V",ibin,isample)); chi[ibin] = (TVectorD*) infile->Get(Form("chi",ibin,isample)); V_mean = (TVectorD*) infile->Get(Form("Vmean",ibin,isample)); deltaV_mean = (TVectorD*) infile->Get(Form("deltaVmean",ibin,isample)); for(int itheta=0;itheta<ntheta;itheta++){ v[ibin][itheta].ResizeTo(nvv); deltav[ibin][itheta].ResizeTo(nvv); dD[ibin][itheta]=0; for(int ivbin=0;ivbin<nvv;ivbin++){ dN[ibin][itheta][ivbin]=0; } } for(int ifile=0; ifile<nFileAll; ifile++){ if(ispt){ if(SumorProd=="Sum") f[ifile] = TFile::Open(Form("/scratch/xuq7/flow/pbsjoboutput/tracknormcpt03to6/%s/Anav_Prod_%d.root",mdir.c_str(),ifile)); else f[ifile] = TFile::Open(Form("/scratch/xuq7/flow/pbsjoboutput/tracknormcpt03to6/%s/Anav_Prod2_%d.root",mdir.c_str(),ifile)); } else{ if(SumorProd=="Sum") f[ifile] = TFile::Open(Form("/scratch/xuq7/flow/pbsjoboutput/tracknormcpt03to6/coarsebins/%s/Anaveta_Prod_%d.root",mdir.c_str(),ifile)); else f[ifile] = TFile::Open(Form("/scratch/xuq7/flow/pbsjoboutput/tracknormcpt03to6/coarsebins/%s/Anaveta_Prod2_%d.root",mdir.c_str(),ifile)); } TVectorD* Nevent_t = (TVectorD*)f[ifile]->Get("Nevent"); TVectorD* totmultall_t = (TVectorD*)f[ifile]->Get("totmultall"); Nevent0[ibin] += (*Nevent_t)[ibin]; double start=isample*Nevent_[ibin]/nsamples; double end=(isample+1)*Nevent_[ibin]/nsamples; if(Nevent0[ibin]>start && Nevent0[ibin]<=end){ IFILE[ibin][isample]=(double)ifile; Nevent[ibin][isample] += (*Nevent_t)[ibin]; TVectorD* totmult_t = (TVectorD*)f[ifile]->Get(Form("totmult_%d",ibin)); TVectorD* totpt_t = (TVectorD*)f[ifile]->Get(Form("totpt_%d",ibin)); TVectorD* toteta_t = (TVectorD*)f[ifile]->Get(Form("toteta_%d",ibin)); dDRe[ibin] = (TVectorD*)f[ifile]->Get(Form("dDRe_%d",ibin)); dDIm[ibin] = (TVectorD*)f[ifile]->Get(Form("dDIm_%d",ibin)); totmultall[ibin][isample]+=(*totmultall_t)[ibin]; for(int ivbin=0;ivbin<nvv;ivbin++){ totmult[ibin][ivbin]+=(*totmult_t)[ivbin]; totpt[ibin][ivbin]+=(*totpt_t)[ivbin]; toteta[ibin][ivbin]+=(*toteta_t)[ivbin]; } for(int itheta=0;itheta<ntheta;itheta++){ dNRe[ibin][itheta] = (TVectorD*)f[ifile]->Get(Form("dNRe_%d_%d",ibin,itheta)); dNIm[ibin][itheta] = (TVectorD*)f[ifile]->Get(Form("dNIm_%d_%d",ibin,itheta)); dD[ibin][itheta]+=TComplex((*dDRe[ibin])[itheta],(*dDIm[ibin])[itheta]); for(int ivbin=0;ivbin<nvv;ivbin++){ if(ifile<188) dN[ibin][itheta][ivbin]+=TComplex((*dNRe[ibin][itheta])[ivbin],(*dNIm[ibin][itheta])[ivbin]); else dN[ibin][itheta][nvv-ivbin-1]+=TComplex((*dNRe[ibin][itheta])[ivbin],(*dNIm[ibin][itheta])[ivbin]); } } } f[ifile]->Close(); } TFile *fhisto = TFile::Open("histomerged.root"); TFile *feff = TFile::Open("/home/xuq7/HI/flow/LYZ/v2/TrackCorrections_HIJING_538_OFFICIAL_Mar24.root"); TH2F* heff = (TH2F*)feff->Get("rTotalEff3D"); TH1D* hpteff = (TH1D*)heff->ProjectionY("hpteff",heff->GetXaxis()->FindBin(-2.4),heff->GetXaxis()->FindBin(2.4)-1,"o"); TArrayD *ptarr = (TArrayD*)heff->GetYaxis()->GetXbins(); double *ptbinhisto = ptarr->GetArray(); int NbinX = heff->GetXaxis()->GetNbins(); int NbinY = heff->GetYaxis()->GetNbins(); hpteff->Scale(1.0/NbinX); for(int itheta=0;itheta<ntheta;itheta++) dD[ibin][itheta]*=TComplex::Power(TComplex::I(),mm-1)/(Double_t)Nevent[ibin][isample]; avgmultall[ibin]=1.0*totmultall[ibin][isample]/Nevent[ibin][isample]; hpt[ibin] = (TH1D*)fhisto->Get(Form("D_%d/hpt",ibin)); //TH1D* hptre = (TH1D*)hpt[ibin]->Rebin(NbinY,"hptre",ptbinhisto); //hpteffcorr[ibin] = (TH1D*)hptre->Clone(Form("hpteffcorr_%d",ibin)); //hpteffcorr[ibin]->Divide(hpteff); for(int ivbin=0;ivbin<nvv; ivbin++){ vmean[ibin][ivbin]=0; deltavmean[ibin][ivbin]=0; avgmult[ibin][ivbin]=1.0*totmult[ibin][ivbin]/Nevent[ibin][isample]; avgpt[ibin][ivbin]=1.0*totpt[ibin][ivbin]/totmult[ibin][ivbin]; avgeta[ibin][ivbin]=1.0*toteta[ibin][ivbin]/totmult[ibin][ivbin]; for(int itheta=0;itheta<ntheta;itheta++){ dN[ibin][itheta][ivbin]/=totmult[ibin][ivbin]; TComplex Res=dN[ibin][itheta][ivbin]/dD[ibin][itheta]; v[ibin][itheta][ivbin]=(*V[ibin])[itheta]*avgmultall[ibin]*TMath::BesselJ1(j01)/Besselj01(mm)*Res.Re(); vmean[ibin][ivbin]+=v[ibin][itheta][ivbin]; deltav[ibin][itheta][ivbin]=TMath::Cos(mm*nn*theta[itheta])/totmult[ibin][ivbin]*(TMath::Exp(j01*j01/2./(*chi[ibin])[0]/(*chi[ibin])[0]*TMath::Cos(nn*theta[itheta]))*TMath::BesselJ0(2*j01*TMath::Sin(nn*theta[itheta]/2.))+TMath::Power(-1,mm)*TMath::Exp(-j01*j01/2./(*chi[ibin])[0]/(*chi[ibin])[0]*TMath::Cos(nn*theta[itheta]))*TMath::BesselJ0(2*j01*TMath::Cos(nn*theta[itheta]/2.))); deltavmean[ibin][ivbin]+=deltav[ibin][itheta][ivbin]; // fstrv<<itheta<<"\t"<<v[ibin][itheta][ivbin]<<"\t"<<deltav[ibin][itheta][ivbin]<<endl; } deltavmean[ibin][ivbin]=TMath::Sqrt(deltavmean[ibin][ivbin])/2./Besselj01(mm); //fstrv<<endl; vmean[ibin][ivbin]/=ntheta; deltavmean[ibin][ivbin]/=TMath::Sqrt(ntheta); fstrv<<binv[ivbin]<<"-"<<binv[ivbin+1]<<"\t"<<vmean[ibin][ivbin]<<"\t"<<deltavmean[ibin][ivbin]<<endl; if(ispt){ if(binv[ivbin+1]>3.0) continue; totmulthisto[ibin][ivbin]=hpt[ibin]->Integral(hpt[ibin]->GetXaxis()->FindBin(binv[ivbin]),hpt[ibin]->GetXaxis()->FindBin(binv[ivbin+1])-1); // totmulthistocorr[ibin][ivbin]=hpteffcorr[ibin]->Integral(hpteffcorr[ibin]->GetXaxis()->FindBin(binv[ivbin]),hpteffcorr[ibin]->GetXaxis()->FindBin(binv[ivbin+1])-1); totmulthistocorr[ibin][ivbin]=totmulthisto[ibin][ivbin]/hpteff->GetBinContent(hpteff->FindBin((binv[ivbin]+binv[ivbin+1])/2)); V_int[ibin][isample]+=vmean[ibin][ivbin]*totmult[ibin][ivbin]; V_interr[ibin][isample]+=deltavmean[ibin][ivbin]*totmult[ibin][ivbin]; V_intcorr[ibin][isample]+=vmean[ibin][ivbin]*totmulthistocorr[ibin][ivbin]; V_intcorrerr[ibin][isample]+=deltavmean[ibin][ivbin]*totmulthistocorr[ibin][ivbin]; } totmultall_[ibin][isample]+=totmult[ibin][ivbin]; } V_int[ibin][isample]/=totmultall_[ibin][isample]; V_interr[ibin][isample]/=totmultall_[ibin][isample]; //V_intcorr[ibin][isample]/=hpteffcorr[ibin]->Integral(hpteffcorr[ibin]->GetXaxis()->FindBin(binv[0]),hpteffcorr[ibin]->GetXaxis()->FindBin(3.0)-1); //V_intcorr[ibin][isample]/=totmulthistocorr[ibin]; //V_intcorrerr[ibin][isample]/=hpteffcorr[ibin]->Integral(hpteffcorr[ibin]->GetXaxis()->FindBin(binv[0]),hpteffcorr[ibin]->GetXaxis()->FindBin(3.0)-1); if(ispt){ fstrv<<endl<<"pt range\t\t"<<"totmult"<<"\t\t"<<"totmult from histo"<<"\t"<<"totmult corrected"<<endl; for(int ivbin=0;ivbin<nvv; ivbin++){ fstrv<<binv[ivbin]<<"-"<<binv[ivbin+1]<<"\t\t"<<totmult[ibin][ivbin]<<"\t"<<totmulthisto[ibin][ivbin]<<"\t"<<totmulthistocorr[ibin][ivbin]<<endl; } //fstrv<<"Integral\t\t"<<totmultall[ibin][isample]<<"\t"<<hpt[ibin]->Integral(hpt[ibin]->GetXaxis()->FindBin(binv[0]),hpt[ibin]->GetXaxis()->FindBin(3.0)-1)<<"\t"<<hpteffcorr[ibin]->Integral(hpteffcorr[ibin]->GetXaxis()->FindBin(binv[0]),hpteffcorr[ibin]->GetXaxis()->FindBin(3.0)-1)<<endl; fstrv<<"V ref="<<(*V_mean)[ibin]<<"\t"<<"V int="<<V_int[ibin][isample]<<"\t"<<"V int corr="<<V_intcorr[ibin][isample]<<endl; fstrv<<"V ref err="<<(*deltaV_mean)[ibin]<<"\t"<<"V int err="<<V_interr[ibin][isample]<<"\t"<<"V int corr err="<<V_intcorrerr[ibin][isample]<<endl; } TDirectory *dirsample = dir0->mkdir(Form("s_%d",isample)); dirsample->cd(); avgpt[ibin].Write("avgpt"); avgeta[ibin].Write("avgeta"); totmult[ibin].Write("totmult"); vmean[ibin].Write("vmean"); deltavmean[ibin].Write("deltavmean"); for(int ivbin=0;ivbin<nvv; ivbin++){ avgavgpt[ibin][ivbin]+=avgpt[ibin][ivbin]*Nevent[ibin][isample]; avgavgeta[ibin][ivbin]+=avgeta[ibin][ivbin]*Nevent[ibin][isample]; vmeanmean[ibin][ivbin]+=vmean[ibin][ivbin]/nsamples; deltavmeanmean[ibin][ivbin]+=deltavmean[ibin][ivbin]/nsamples; sigmavmeanmean[ibin][ivbin]+=TMath::Power(vmean[ibin][ivbin]/nsamples,2); } }//subsample loop dir0->cd(); IFILE[ibin].Write("IFILE"); V_int[ibin].Write("V_int"); V_interr[ibin].Write("V_interr"); V_intcorr[ibin].Write("V_intcorr"); V_intcorrerr[ibin].Write("V_intcorrerr"); Nevent[ibin].Write("Nevent"); totmultall[ibin].Write("totmultall"); for(int ivbin=0;ivbin<nvv; ivbin++){ avgavgpt[ibin][ivbin]/=Nevent_[ibin]; avgavgeta[ibin][ivbin]/=Nevent_[ibin]; sigmavmeanmean[ibin][ivbin]=TMath::Sqrt(sigmavmeanmean[ibin][ivbin]*nsamples-vmeanmean[ibin][ivbin]*vmeanmean[ibin][ivbin])/TMath::Sqrt(nsamples); } avgavgpt[ibin].Write("avgavgpt"); avgavgeta[ibin].Write("avgavgeta"); vmeanmean[ibin].Write("vmeanmean"); deltavmeanmean[ibin].Write("deltavmeanmean"); sigmavmeanmean[ibin].Write("sigmavmeanmean"); }//ntrk bin loop infile->Close(); fout->Close(); }
//Calculate the function value double DPTotalAmplitudePDF_withAcc_withBkg::Evaluate(DataPoint * measurement) { // Observables m23 = measurement->GetObservable( m23Name )->GetValue(); cosTheta1 = measurement->GetObservable( cosTheta1Name )->GetValue(); cosTheta2 = measurement->GetObservable( cosTheta2Name )->GetValue(); phi = measurement->GetObservable( phiName )->GetValue(); //m13 = measurement->GetObservable( m13Name )->GetValue(); //cosZ = measurement->GetObservable( cosZName )->GetValue(); //cosPsiZ = measurement->GetObservable( cosPsiZName )->GetValue(); //phiZ = measurement->GetObservable( phiZName )->GetValue(); //alpha = measurement->GetObservable( alphaName )->GetValue(); pionID = measurement->GetObservable( pionIDName )->GetValue(); double m23_mapped = (m23 - 0.64)/(1.59 - 0.64)*2. + (-1); // should really do this in a generic way //double m23_mapped = (m23 - 0.64)/(1.68 - 0.64)*2. + (-1); // should really do this in a generic way #ifdef __RAPIDFIT_USE_GSL double angularAcc(0.); double Q_l(0.); double P_i(0.); double Y_jk(0.); if ( useAngularAcceptance ) { for ( int l = 0; l < l_max+1; l++ ) { for ( int i = 0; i < i_max+1; i++ ) { for ( int k = 0; k < 3; k++ ) { for ( int j = 0; j < 3; j+=2 ) // limiting the loop here to only look at terms we need { if (j < k) continue; // must have l >= k Q_l = gsl_sf_legendre_Pl (l, m23_mapped); P_i = gsl_sf_legendre_Pl (i, cosTheta2); // only consider case where k >= 0 // these are the real valued spherical harmonics if ( k == 0 ) Y_jk = gsl_sf_legendre_sphPlm (j, k, cosTheta1); else Y_jk = sqrt(2) * gsl_sf_legendre_sphPlm (j, k, cosTheta1) * cos(k*phi); angularAcc += c[l][i][k][j]*(Q_l * P_i * Y_jk); } } } } } else { angularAcc = 1.;//0.0195; } //if (angularAcc <= 0.) cout << "angular acc " << angularAcc << " " << m23 << " " << m23_mapped << " " << cosTheta1 << " " << phi << " " << cosTheta2 << endl; // Calculate the Z angles //DPHelpers::calculateFinalStateMomenta(massB, m23, massPsi, //cosTheta1, cosTheta2, phi, pionID, 0.1056583715, 0.1056583715, 0.13957018, 0.493677, //pMuPlus, pMuMinus, pPi, pK); DPHelpers::calculateFinalStateMomentaBelle(massB, m23, massPsi, cosTheta1, cosTheta2, phi, 0.1056583715, 0.139570, 0.493677, pMuPlus, pMuMinus, pPi, pK); double belle_m23(0.); double belle_cosKPi(0.); double belle_cosPsi(0.); double belle_phiKPiPsi(0.); double belle_m13(0.); double belle_cosZ(0.); double belle_cosPsi_Z(0.); double belle_phiPsiZ(0.); double belle_phiZPsiPsi(0.); const TLorentzVector myMuPlus(pMuPlus); const TLorentzVector myMuMinus(pMuMinus); const TLorentzVector myPi(pPi); const TLorentzVector myK(pK); DPHelpers::Belle(myMuPlus, myMuMinus, myPi, myK , belle_m23 , belle_cosKPi , belle_cosPsi , belle_phiKPiPsi , belle_m13 , belle_cosZ , belle_cosPsi_Z , belle_phiPsiZ , belle_phiZPsiPsi ); //cout << "K* ntuple " << m23 << " " << cosTheta2 << " " << cosTheta1 << " " << phi << " " << pionID << endl; //cout << "K* calcul " << belle_m23 << " " << belle_cosKPi << " " << belle_cosPsi << " " << belle_phiKPiPsi << endl; //cout << "Z ntuple " << m13 << " " << cosZ << " " << cosPsiZ << " " << phiZ << " " << alpha << endl; //cout << "Z calcul " << belle_m13 << " " << belle_cosZ << " " << belle_cosPsi_Z << " " << belle_phiPsiZ << " " << belle_phiZPsiPsi << endl; double result = 0.; TComplex tmp(0,0); // This deals with the separate Kpi components unsigned int lower = (unsigned)(componentIndex - 1); unsigned int upper = (unsigned)componentIndex; unsigned int lowerZ = 0; unsigned int upperZ = 0; // And this switchs things to deal with the Z components. if ( (unsigned)componentIndex > KpiComponents.size() ) { lower = 0; upper = 0; lowerZ = (unsigned)(componentIndex - KpiComponents.size() - 1); upperZ = (unsigned)(componentIndex - KpiComponents.size()); } // just plot the background if ( componentIndex == 13 ) { lower = 0; upper = 0; lowerZ = 0; upperZ = 0; } if ( componentIndex == 100 ){ lower = 0; upper = (unsigned)KpiComponents.size(); lowerZ = 0; upperZ = 0; } // Finally, for the total of all components if ( componentIndex == 0 ) { lower = 0; upper = (unsigned)KpiComponents.size(); lowerZ = 0; upperZ = (unsigned)ZComponents.size(); } // Now sum over final state helicities (this is not general code, but // knows about internals of components for (int twoLambda = -2; twoLambda <= 2; twoLambda += 4) // Sum over +-1 { tmp = TComplex(0,0); for (int twoLambdaPsi = -2; twoLambdaPsi <= 2; twoLambdaPsi += 2) // Sum over -1,0,+1 { for (unsigned int i = lower; i < upper; ++i) // sum over all components { tmp += KpiComponents[i]->amplitude(m23, cosTheta1, cosTheta2, phi, twoLambda, twoLambdaPsi); } // Now comes sum over Z+ components and lambdaPsiPrime for (unsigned int i = lowerZ; i < upperZ; ++i) { //tmp += ZComponents[i]->amplitudeProperVars(belle_m13, belle_cosZ, belle_cosPsi_Z, belle_phiPsiZ, pionID, twoLambda, twoLambdaPsi); tmp += TComplex::Exp((0.5*TComplex::I())*(twoLambda*belle_phiZPsiPsi))*(ZComponents[i]->amplitudeProperVars(belle_m13, belle_cosZ, belle_cosPsi_Z, belle_phiPsiZ, pionID, twoLambda, twoLambdaPsi)); //std::cout << TComplex::Exp(0.5*TComplex::I()*twoLambda*belle_phiZPsiPsi) << " " << TComplex(cos(belle_phiZPsiPsi), 0.5*twoLambda*sin(belle_phiZPsiPsi)) << std::endl; } } result += tmp.Rho2(); } //momenta are defined on eq 39.20a/b of the 2010 PDG const double m1 = 0.493677; // kaon mass const double m2 = 0.139570; // pion mass const double MB0= massB; // B0 mass double t1 = m23*m23-(m1+m2)*(m1+m2); double t2 = m23*m23-(m1-m2)*(m1-m2); double t31 = MB0*MB0 - (m23 + massPsi)*(m23 + massPsi); double t32 = MB0*MB0 - (m23 - massPsi)*(m23 - massPsi); double p1_st = sqrt(t1*t2)/m23/2.; double p3 = sqrt(t31*t32)/MB0/2.; //std::cout << result << " " << angularAcc << " " << p1_st << " " << p3 << " " << result*p1_st*p3 << std::endl; double returnable_value = result * angularAcc * p1_st * p3; double background(0.); if ( (componentIndex == 0 || componentIndex == 13) && fraction > 0. ) { for ( int l = 0; l < l_max_b+1; l++ ) { for ( int i = 0; i < i_max_b+1; i++ ) { for ( int k = 0; k < k_max_b+1; k++) { for ( int j = 0; j < 3; j+=2 ) // limiting the loop here to only look at terms we need { //cout << "likj" << l << " " << i << " " << k << " " << j << endl; if (j < k) continue; // must have l >= k Q_l = gsl_sf_legendre_Pl (l, m23_mapped); P_i = gsl_sf_legendre_Pl (i, cosTheta2); // only consider case where k >= 0 // these are the real valued spherical harmonics if ( k == 0 ) Y_jk = gsl_sf_legendre_sphPlm (j, k, cosTheta1); else Y_jk = sqrt(2) * gsl_sf_legendre_sphPlm (j, k, cosTheta1) * cos(k*phi); background += b[l][i][k][j]*(Q_l * P_i * Y_jk); } } } } } //cout << background << " " << fraction << " " << returnable_value << endl; //returnable_value = background; returnable_value = returnable_value + fraction*background; if( std::isnan(returnable_value) || returnable_value < 0. ) return 0.; else return returnable_value; #endif return 0.; }
void getResV(){ //------------------------Deal with the number and get the output stored in txt files and root files double Vmax[nbin], eps[nbin]; for(int ibin=0; ibin<nbin ;ibin++){ Vmax[ibin]=0.065*(trkbin[ibin]+30); eps[ibin]=0.00025*(trkbin[ibin]+30); } ofstream fstrV; double theta[ntheta]; TVectorD Gmod2[nbin][ntheta]; TVectorD sigma2[nbin],deltaV[nbin]; TVectorD r[nbin]; TVectorD r0[nbin], r01[nbin], V[nbin], chi[nbin]; TVectorD GRe[nbin][ntheta]; TVectorD* GRe_t[nbin][ntheta]; TVectorD GIm[nbin][ntheta]; TVectorD* GIm_t[nbin][ntheta]; TComplex G[nbin][ntheta][nstepr]; TF1 *ffit[nbin]; TF1 *ffit0[nbin][ntheta]; if(isSum) fstrV.open("V_Sum.txt"); else fstrV.open("V_Prod.txt"); TFile *f[nFileAll]; for(int ibin=0; ibin<nbin; ibin++){ r[ibin].ResizeTo(nstepr); for(int ir=0; ir<nstepr; ir++){ if(isSimple==0) r[ibin][ir]=j01/(Vmax[ibin]-eps[ibin]*ir); else r[ibin][ir]=0.00025*20*(ir+1); } } TVectorD Nevent; Nevent.ResizeTo(nbin); Nevent.Zero(); TVectorD totmultall; totmultall.ResizeTo(nbin); totmultall.Zero(); TVectorD avgmultall; avgmultall.ResizeTo(nbin); avgmultall.Zero(); TVectorD tottrk; tottrk.ResizeTo(nbin); tottrk.Zero(); TVectorD totptall; totptall.ResizeTo(nbin); totptall.Zero(); TVectorD totetaall; totetaall.ResizeTo(nbin); totetaall.Zero(); TVectorD avgtrk; avgtrk.ResizeTo(nbin); avgtrk.Zero(); TVectorD deltaVmean; deltaVmean.ResizeTo(nbin); TVectorD Vmean; Vmean.ResizeTo(nbin); TVectorD avgpt; avgpt.ResizeTo(nbin); TVectorD avgeta; avgeta.ResizeTo(nbin); TVectorD Qx1; Qx1.ResizeTo(nbin); Qx1.Zero(); TVectorD Qy1; Qy1.ResizeTo(nbin); Qy1.Zero(); TVectorD Q2; Q2.ResizeTo(nbin); Q2.Zero(); TVectorD sigma2_; sigma2_.ResizeTo(nbin); sigma2_.Zero(); TVectorD chi_; chi_.ResizeTo(nbin); chi_.Zero(); TH1D* hq[nbin][ntheta]; TH1D* hqx[nbin]; TH1D* hqy[nbin]; TH1D* hq2[nbin]; TH1D* hq2nonf[nbin]; for(int itheta=0;itheta<ntheta;itheta++) theta[itheta]=itheta*TMath::Pi()/ntheta/nn; for(int ibin=0;ibin<nbin;ibin++){ r0[ibin].ResizeTo(ntheta); r01[ibin].ResizeTo(ntheta); sigma2[ibin].ResizeTo(ntheta); V[ibin].ResizeTo(ntheta); deltaV[ibin].ResizeTo(ntheta); chi[ibin].ResizeTo(ntheta); for(int itheta=0;itheta<ntheta;itheta++){ Gmod2[ibin][itheta].ResizeTo(nstepr); GRe[ibin][itheta].ResizeTo(nstepr); GRe[ibin][itheta].Zero(); GIm[ibin][itheta].ResizeTo(nstepr); GIm[ibin][itheta].Zero(); hq[ibin][itheta] = new TH1D(Form("hq"),Form("hq"),1000,0,10); } hqx[ibin] = new TH1D(Form("hqx"),Form("hqx"),1000,0,10); hqy[ibin] = new TH1D(Form("hqy"),Form("hqy"),1000,0,10); hq2[ibin] = new TH1D(Form("hq2"),Form("hq2"),1000,0,10); hq2nonf[ibin] = new TH1D(Form("hq2nonf"),Form("hq2nonf"),1000,0,10); } for(int ifile=0; ifile<nFileAll; ifile++){ if(isSum) f[ifile] = TFile::Open(Form("/scratch/xuq7/flow/pbsjoboutput/Bessfun/pPbDataV200m30/AnaV_Sum_%d.root",ifile)); else f[ifile] = TFile::Open(Form("/scratch/xuq7/flow/pbsjoboutput/Bessfun/pPbDataV200m30/AnaV_Prod_%d.root",ifile)); TVectorD* Nevent_t = (TVectorD*)f[ifile]->Get(Form("Nevent")); TVectorD* totmultall_t = (TVectorD*)f[ifile]->Get(Form("totmultall")); TVectorD* tottrk_t = (TVectorD*)f[ifile]->Get(Form("tottrk")); TVectorD* totptall_t = (TVectorD*)f[ifile]->Get(Form("totptall")); TVectorD* totetaall_t = (TVectorD*)f[ifile]->Get(Form("totetaall")); TVectorD* Qx1_t = (TVectorD*)f[ifile]->Get(Form("Qx1")); TVectorD* Qy1_t = (TVectorD*)f[ifile]->Get(Form("Qy1")); TVectorD* Q2_t = (TVectorD*)f[ifile]->Get(Form("Q2")); for(int ibin=0;ibin<nbin;ibin++){ TH1D* hqx_t = (TH1D*)f[ifile]->Get(Form("hqx_%d",ibin)); hqx[ibin]->Add(hqx_t); TH1D* hqy_t = (TH1D*)f[ifile]->Get(Form("hqy_%d",ibin)); hqy[ibin]->Add(hqy_t); TH1D* hq2_t = (TH1D*)f[ifile]->Get(Form("hq2_%d",ibin)); hq2[ibin]->Add(hq2_t); TH1D* hq2nonf_t = (TH1D*)f[ifile]->Get(Form("hq2nonf_%d",ibin)); hq2nonf[ibin]->Add(hq2nonf_t); for(int itheta=0;itheta<ntheta;itheta++){ GRe_t[ibin][itheta] = (TVectorD*)f[ifile]->Get(Form("GRe_%d_%d",ibin,itheta)); GIm_t[ibin][itheta] = (TVectorD*)f[ifile]->Get(Form("GIm_%d_%d",ibin,itheta)); TH1D* hq_t = (TH1D*)f[ifile]->Get(Form("hq_%d_%d",ibin,itheta)); hq[ibin][itheta]->Add(hq_t); for(ir=0; ir<nstepr; ir++){ GRe[ibin][itheta][ir] += (*GRe_t[ibin][itheta])[ir]; GIm[ibin][itheta][ir] += (*GIm_t[ibin][itheta])[ir]; } } Qx1[ibin] += (*Qx1_t)[ibin]; Qy1[ibin] += (*Qy1_t)[ibin]; Q2[ibin] += (*Q2_t)[ibin]; totptall[ibin] += (*totptall_t)[ibin]; totetaall[ibin] += (*totetaall_t)[ibin]; Nevent[ibin] += (*Nevent_t)[ibin]; totmultall[ibin] += (*totmultall_t)[ibin]; tottrk[ibin] += (*tottrk_t)[ibin]; } f[ifile]->Close(); } fstrV<<setprecision(4)<<fixed; fstrV<<"ibin"<<"\t"<<"itheta"<<"\t"<<"r0"<<"\t"<<"V"<<"\t"<<"sigma2"<<"\t"<<"chi"<<"\t"<<"Vn Errors"<<endl; for(int ibin=0;ibin<nbin;ibin++){ avgmultall[ibin]=totmultall[ibin]/Nevent[ibin]; avgtrk[ibin]=tottrk[ibin]/Nevent[ibin]; for(int itheta=0;itheta<ntheta;itheta++){ for(ir=0; ir<nstepr; ir++){ G[ibin][itheta][ir]=TComplex(GRe[ibin][itheta][ir],GIm[ibin][itheta][ir]); G[ibin][itheta][ir]/=Nevent[ibin]; Gmod2[ibin][itheta][ir]=TMath::Power(TComplex::Abs(G[ibin][itheta][ir]),2); } for(ir=0; ir<nstepr-1; ir++) if(ir!=0 && Gmod2[ibin][itheta][ir]<=Gmod2[ibin][itheta][ir-1] && Gmod2[ibin][itheta][ir]<=Gmod2[ibin][itheta][ir+1]) break; if(ir!=0 && ir<nstepr-1) r01[ibin][itheta]=r[ibin][ir]; else if(ir==0) {cout<<"ibin="<<ibin<<"\t"<<"itheta="<<itheta<<"\tminimum lies on ir = 0, please select proper range!"<<endl; continue;} else {cout<<"ibin="<<ibin<<"\t"<<"itheta="<<itheta<<"\tminimum lies on ir = maximum "<<nstepr-1<<", please select proper range!"<<endl; continue;} avgpt[ibin]=1.0*totptall[ibin]/totmultall[ibin]; avgeta[ibin]=1.0*totetaall[ibin]/totmultall[ibin]; if(isSimple==0) V[ibin][itheta]=Vmax[ibin]-ir*eps[ibin]+eps[ibin]*(Gmod2[ibin][itheta][ir+1]-Gmod2[ibin][itheta][ir-1])/2./(Gmod2[ibin][itheta][ir-1]-2*Gmod2[ibin][itheta][ir]+Gmod2[ibin][itheta][ir+1]); else V[ibin][itheta]=j01/r01[ibin][itheta]; //simple method r0[ibin][itheta]=j01/V[ibin][itheta]; V[ibin][itheta]/=avgmultall[ibin]; sigma2[ibin][itheta]=Q2[ibin]/Nevent[ibin]-(Qx1[ibin]/Nevent[ibin])*(Qx1[ibin]/Nevent[ibin])-(Qy1[ibin]/Nevent[ibin])*(Qy1[ibin]/Nevent[ibin]); sigma2_[ibin]+=sigma2[ibin][itheta]; Vmean[ibin]+=V[ibin][itheta]; chi[ibin][itheta]=V[ibin][itheta]*avgmultall[ibin]/TMath::Sqrt(sigma2[ibin][itheta]); } //deltaVmean[ibin]+=TMath::Exp(j01*j01/2./chi[ibin][itheta]/chi[ibin][itheta]*TMath::Cos(nn*theta[itheta]))*TMath::BesselJ0(2*j01*TMath::Sin(nn*theta[itheta]/2.))+TMath::Exp(-j01*j01/2./chi[ibin][itheta]/chi[ibin][itheta]*TMath::Cos(nn*theta[itheta]))*TMath::BesselJ0(2*j01*TMath::Cos(nn*theta[itheta]/2.)); sigma2_[ibin]/=ntheta; Vmean[ibin]/=ntheta; sigma2_[ibin]-=TMath::Power(Vmean[ibin]*avgmultall[ibin],2); chi_[ibin]=Vmean[ibin]*avgmultall[ibin]/TMath::Sqrt(sigma2_[ibin]); for(int itheta=0;itheta<ntheta;itheta++){ deltaV[ibin][itheta]=V[ibin][itheta]/j01/TMath::BesselJ1(j01)*TMath::Sqrt((TMath::Exp(j01*j01/2./chi_[ibin]/chi_[ibin])+TMath::Exp(-j01*j01/2./chi_[ibin]/chi_[ibin])*TMath::BesselJ0(2*j01))/2./Nevent[ibin]); deltaVmean[ibin]+=TMath::Exp(j01*j01/2./chi_[ibin]/chi_[ibin]*TMath::Cos(nn*theta[itheta]))*TMath::BesselJ0(2*j01*TMath::Sin(nn*theta[itheta]/2.))+TMath::Exp(-j01*j01/2./chi_[ibin]/chi_[ibin]*TMath::Cos(nn*theta[itheta]))*TMath::BesselJ0(2*j01*TMath::Cos(nn*theta[itheta]/2.)); fstrV<<ibin<<"\t"<<itheta<<"\t"<<r0[ibin][itheta]<<"\t"<<V[ibin][itheta]<<"\t"<<sigma2[ibin][itheta]<<"\t"<<chi[ibin][itheta]<<"\t"<<deltaV[ibin][itheta]<<endl; } fstrV<<"\t\t\t\t\t"<<sigma2_[ibin]<<"\t"<<chi_[ibin]<<endl; deltaVmean[ibin]=Vmean[ibin]/j01/TMath::BesselJ1(j01)*TMath::Sqrt(deltaVmean[ibin]/ntheta/2./Nevent[ibin]); fstrV<<endl; } fstrV<<"ibin"<<"\t"<<"avgmult"<<"\t"<<"avgpt"<<"\t"<<"avgeta"<<"\t"<<"Vn mean"<<"\t"<<"Vn mean Error"<<endl; for(int ibin=0;ibin<nbin;ibin++){ fstrV<<ibin<<"\t"<<avgmultall[ibin]<<"\t"<<avgpt[ibin]<<"\t"<<avgeta[ibin]<<"\t"<<Vmean[ibin]<<"\t"<<deltaVmean[ibin]<<endl; fstrV<<endl; } fstrV<<"ibin"<<"\t"<<"Nevent"<<"\t"<<"totmultall"<<"\t"<<"avgmultall"<<"\t"<<"avgtrk"<<endl; for(int ibin=0;ibin<nbin;ibin++){ fstrV<<ibin<<"\t"<<Nevent[ibin]<<"\t"<<totmultall[ibin]<<"\t"<<avgmultall[ibin]<<"\t"<<avgtrk[ibin]<<endl; fstrV<<endl; } if(isSum) TString outname = "mergedV_Sum.root"; else TString outname="mergedV_Prod.root"; TFile *outf = new TFile(outname,"Recreate"); Nevent.Write("Nevent"); totmultall.Write("totmultall"); avgmultall.Write("avgmultall"); tottrk.Write("tottrk"); avgtrk.Write("avgtrk"); Qx1.Write("Qx1"); Qy1.Write("Qy1"); Q2.Write("Q2"); avgpt.Write("avgpt"); avgeta.Write("avgeta"); Vmean.Write("Vmean"); deltaVmean.Write("deltaVmean"); chi_.Write("chi"); sigma2_.Write("sigma2"); for(int ibin=0;ibin<nbin;ibin++){ TDirectory *dir0 = outf->mkdir(Form("D_%d",ibin));dir0->cd(); r[ibin].Write("r"); sigma2[ibin].Write("sigma2"); chi[ibin].Write("chi0"); deltaV[ibin].Write("deltaV"); r0[ibin].Write("r0"); r01[ibin].Write("r01"); V[ibin].Write("V"); hqx[ibin]->Write(); hqy[ibin]->Write();hq2[ibin]->Write();hq2nonf[ibin]->Write(); for(int itheta=0;itheta<ntheta;itheta++){ TDirectory *dir1 = dir0->mkdir(Form("D_%d",itheta));dir1->cd(); GRe[ibin][itheta].Write(Form("GRe")); GIm[ibin][itheta].Write(Form("GIm")); Gmod2[ibin][itheta].Write(Form("G2")); hq[ibin][itheta]->Write(); } } outf->Close(); }
TComplex TComplex::operator- () { return TComplex(0,0) - *this; }
TComplex TComplex::operator/ (TComplex right) { /*(a1*a2 + b1*b2)/(a2**2 + b2**2)+i*(a2*b1 – a1*b2)/(a2**2 + b2**2))*/ double _real = (real * right.get_re() + imagine * right.get_im()) / (right.get_re()*right.get_re() + right.get_im()*right.get_im()); double _imagine = (imagine * right.get_re() - real * right.get_im()) / (right.get_re()*right.get_re() + right.get_im()*right.get_im()); return TComplex(_real, _imagine); }
TComplex TComplex::operator* (TComplex right) { /*(a1*a2 - b1*b2)+i*(a1*b2+ a2*b1))*/ double _real = real * right.get_re() - imagine * right.get_im(); double _imagine = real * right.get_im() + imagine * right.get_re(); return TComplex(_real, _imagine); }
TComplex TComplex::operator- (TComplex right) { return TComplex(real - right.get_re(), imagine - right.get_im()); }
TComplex TComplex::operator+ (TComplex right) { return TComplex(real + right.get_re(), imagine + right.get_im()); }
void getResv(int ispt){ double theta[ntheta]; TFile *f[nFileAll]; for(int itheta=0;itheta<ntheta;itheta++) theta[itheta]=itheta*TMath::Pi()/ntheta/nn; int nvv; const double *binv; if(ispt){ nvv = nptv; binv = ptbinv;} else{ nvv = netav; binv = etabinv;} string SumorProd = getenv("SUMORPROD"); ofstream fstrv; if(ispt){ if(SumorProd=="Sum")fstrv.open("v.txt"); else fstrv.open("v_2.txt"); } else{ if(SumorProd=="Sum")fstrv.open("v_finer_eta.txt"); else fstrv.open("v_2_finer_eta.txt"); } TVectorD totmult[nbin],totpt[nbin], toteta[nbin]; TVectorD Nevent, totmultall, tottrkall,totmultall_, totmultallcorr; TVectorD V_int, V_interr; TVectorD* V_mean; TVectorD* deltaV_mean; TVectorD* V[nbin]; TVectorD* chi; TVectorD V_intcorr, V_intcorrerr; TVectorD totmulthisto_f[nbin][netav]; TVectorD totmulthisto[nbin], totmulthistocorr[nbin]; TVectorD* dDRe[nbin]; TVectorD* dDIm[nbin]; TVectorD* dNRe[nbin][ntheta]; TVectorD* dNIm[nbin][ntheta]; TComplex dD[nbin][ntheta], dN[nbin][ntheta][nvv]; TVectorD avgmult[nbin]; TVectorD avgmultall; TVectorD avgtrk[nbin]; TVectorD avgtrkall; TVectorD avgpt[nbin], avgeta[nbin]; TVectorD v[nbin][ntheta],vmean[nbin],deltav[nbin][ntheta],deltavmean[nbin]; if(SumorProd=="Sum") TFile *infile = TFile::Open("mergedV_Sum.root"); else TFile *infile = TFile::Open("mergedV_Prod.root"); Nevent.ResizeTo(nbin); Nevent.Zero(); totmultall.ResizeTo(nbin); totmultall.Zero(); tottrkall.ResizeTo(nbin); tottrkall.Zero(); totmultall_.ResizeTo(nbin); totmultall_.Zero(); totmultallcorr.ResizeTo(nbin); totmultallcorr.Zero(); avgmultall.ResizeTo(nbin); avgtrkall.ResizeTo(nbin); V_int.ResizeTo(nbin); V_int.Zero(); V_interr.ResizeTo(nbin); V_interr.Zero(); if(ispt){ V_intcorr.ResizeTo(nbin); V_intcorr.Zero(); V_intcorrerr.ResizeTo(nbin); V_intcorrerr.Zero(); } for(int ibin=0;ibin<nbin;ibin++){ totmult[ibin].ResizeTo(nvv); totmult[ibin].Zero(); if(ispt){ for(int ietabin=0;ietabin<netav;ietabin++){ totmulthisto_f[ibin][ietabin].ResizeTo(nvv); totmulthisto_f[ibin][ietabin].Zero(); } totmulthisto[ibin].ResizeTo(nvv); totmulthisto[ibin].Zero(); totmulthistocorr[ibin].ResizeTo(nvv); totmulthistocorr[ibin].Zero(); } avgmult[ibin].ResizeTo(nvv); avgpt[ibin].ResizeTo(nvv); avgeta[ibin].ResizeTo(nvv); totpt[ibin].ResizeTo(nvv); totpt[ibin].Zero(); toteta[ibin].ResizeTo(nvv); toteta[ibin].Zero(); vmean[ibin].ResizeTo(nvv); deltavmean[ibin].ResizeTo(nvv); V[ibin] = (TVectorD*) infile->Get(Form("D_%d/V",ibin)); chi = (TVectorD*) infile->Get(Form("chi")); V_mean = (TVectorD*) infile->Get(Form("Vmean")); deltaV_mean = (TVectorD*) infile->Get(Form("deltaVmean")); for(int itheta=0;itheta<ntheta;itheta++){ v[ibin][itheta].ResizeTo(nvv); deltav[ibin][itheta].ResizeTo(nvv); dD[ibin][itheta]=0; for(int ivbin=0;ivbin<nvv;ivbin++){ dN[ibin][itheta][ivbin]=0; } } } for(int ifile=0; ifile<nFileAll; ifile++){ if(ispt){ if(SumorProd=="Sum") f[ifile] = TFile::Open(Form("/scratch/xuq7/flow/pbsjoboutput/PbPb2011MB/Anav_Prod_%d.root",ifile)); else f[ifile] = TFile::Open(Form("/scratch/xuq7/flow/pbsjoboutput/PbPb2011MB/Anav_Prod2_%d.root",ifile)); } else{ if(SumorProd=="Sum") f[ifile] = TFile::Open(Form("/scratch/xuq7/flow/pbsjoboutput/PbPb2011MB/finereta/Anaveta_Prod_%d.root",ifile)); else f[ifile] = TFile::Open(Form("/scratch/xuq7/flow/pbsjoboutput/PbPb2011MB/finereta/Anaveta_Prod2_%d.root",ifile)); } TVectorD* Nevent_t = (TVectorD*)f[ifile]->Get("Nevent"); TVectorD* totmultall_t = (TVectorD*)f[ifile]->Get("totmultall"); TVectorD* tottrkall_t = (TVectorD*)f[ifile]->Get("tottrk"); for(int ibin=0;ibin<nbin;ibin++){ TVectorD* totmult_t = (TVectorD*)f[ifile]->Get(Form("totmult_%d",ibin)); TVectorD* totpt_t = (TVectorD*)f[ifile]->Get(Form("totpt_%d",ibin)); TVectorD* toteta_t = (TVectorD*)f[ifile]->Get(Form("toteta_%d",ibin)); dDRe[ibin] = (TVectorD*)f[ifile]->Get(Form("dDRe_%d",ibin)); dDIm[ibin] = (TVectorD*)f[ifile]->Get(Form("dDIm_%d",ibin)); Nevent[ibin]+=(*Nevent_t)[ibin]; totmultall[ibin]+=(*totmultall_t)[ibin]; tottrkall[ibin]+=(*tottrkall_t)[ibin]; for(int ivbin=0;ivbin<nvv;ivbin++){ totmult[ibin][ivbin]+=(*totmult_t)[ivbin]; totpt[ibin][ivbin]+=(*totpt_t)[ivbin]; toteta[ibin][ivbin]+=(*toteta_t)[ivbin]; } for(int itheta=0;itheta<ntheta;itheta++){ dNRe[ibin][itheta] = (TVectorD*)f[ifile]->Get(Form("dNRe_%d_%d",ibin,itheta)); dNIm[ibin][itheta] = (TVectorD*)f[ifile]->Get(Form("dNIm_%d_%d",ibin,itheta)); dD[ibin][itheta]+=TComplex((*dDRe[ibin])[itheta],(*dDIm[ibin])[itheta]); for(int ivbin=0;ivbin<nvv;ivbin++) dN[ibin][itheta][ivbin]+=TComplex((*dNRe[ibin][itheta])[ivbin],(*dNIm[ibin][itheta])[ivbin]); } } f[ifile]->Close(); } double eff[netav]; if(ispt){ TH2F* hetapt[nbin]; TH1D* hpt[nbin]; TH2F* hetapteffcorr[nbin]; TFile *fhisto = TFile::Open("histomerged.root"); //TFile *feff = TFile::Open("/home/xuq7/HI/dNchdeta/Correction/trkEff_pp_all_42X_origin.root"); TFile *feff = TFile::Open("/home/xuq7/HI/flow/LYZ/v2/TrackCorrections_HYDJET_442_OFFICIAL_Mar25.root"); TH2F* heff = (TH2F*)feff->Get("rTotalEff3D"); //TH1D* hpteff = (TH1D*)heff->ProjectionY("hpteff",heff->GetXaxis()->FindBin(-2.4),heff->GetXaxis()->FindBin(2.4)-1,"o"); //TGraphError* hpteff = (TGraphErrors*)feff->Get("gEffPt"); TArrayD *ptarr = (TArrayD*)heff->GetYaxis()->GetXbins(); double *ptbinhisto = ptarr->GetArray(); int NbinX = heff->GetXaxis()->GetNbins(); int NbinY = heff->GetYaxis()->GetNbins(); //hpteff->Scale(1.0/NbinX); } for(int ibin=0;ibin<nbin;ibin++) for(int itheta=0;itheta<ntheta;itheta++) dD[ibin][itheta]*=TComplex::Power(TComplex::I(),mm-1)/(Double_t)Nevent[ibin]; for(int ibin=0;ibin<nbin;ibin++){ avgmultall[ibin]=1.0*totmultall[ibin]/Nevent[ibin]; avgtrkall[ibin]=1.0*tottrkall[ibin]/Nevent[ibin]; if(ispt){ hetapt[ibin] = (TH2F*)fhisto->Get(Form("D_%d/hetapt",ibin)); hpt[ibin] = (TH1D*)fhisto->Get(Form("D_%d/hpt",ibin)); //TH1D* hptre = (TH1D*)hpt[ibin]->Rebin(NbinY,Form("hptre_%d",ibin),ptbinhisto); //TH1D* hptre = (TH1D*)hpt[ibin]->Rebin(NbinY,Form("hptre_%d",ibin),ptbinhisto); hetapteffcorr[ibin] = (TH2F*)hetapt[ibin]->Clone(Form("hetapteffcorr_%d",ibin)); //hpteffcorr[ibin]->Divide(hpteff); } for(int ivbin=0;ivbin<nvv; ivbin++){ vmean[ibin][ivbin]=0; deltavmean[ibin][ivbin]=0; avgmult[ibin][ivbin]=1.0*totmult[ibin][ivbin]/Nevent[ibin]; avgpt[ibin][ivbin]=1.0*totpt[ibin][ivbin]/totmult[ibin][ivbin]; avgeta[ibin][ivbin]=1.0*toteta[ibin][ivbin]/totmult[ibin][ivbin]; for(int itheta=0;itheta<ntheta;itheta++){ dN[ibin][itheta][ivbin]/=totmult[ibin][ivbin]; TComplex Res=dN[ibin][itheta][ivbin]/dD[ibin][itheta]; v[ibin][itheta][ivbin]=(*V[ibin])[itheta]*avgmultall[ibin]*TMath::BesselJ1(j01)/Besselj01(mm)*Res.Re(); vmean[ibin][ivbin]+=v[ibin][itheta][ivbin]; deltav[ibin][itheta][ivbin]=TMath::Cos(mm*nn*theta[itheta])/totmult[ibin][ivbin]*(TMath::Exp(j01*j01/2./(*chi)[ibin]/(*chi)[ibin]*TMath::Cos(nn*theta[itheta]))*TMath::BesselJ0(2*j01*TMath::Sin(nn*theta[itheta]/2.))+TMath::Power(-1,mm)*TMath::Exp(-j01*j01/2./(*chi)[ibin]/(*chi)[ibin]*TMath::Cos(nn*theta[itheta]))*TMath::BesselJ0(2*j01*TMath::Cos(nn*theta[itheta]/2.))); deltavmean[ibin][ivbin]+=deltav[ibin][itheta][ivbin]; // fstrv<<itheta<<"\t"<<v[ibin][itheta][ivbin]<<"\t"<<deltav[ibin][itheta][ivbin]<<endl; } deltavmean[ibin][ivbin]=TMath::Sqrt(deltavmean[ibin][ivbin])/2./Besselj01(mm); //fstrv<<endl; vmean[ibin][ivbin]/=ntheta; deltavmean[ibin][ivbin]/=TMath::Sqrt(ntheta); fstrv<<binv[ivbin]<<"-"<<binv[ivbin+1]<<"\t"<<vmean[ibin][ivbin]<<"\t"<<deltavmean[ibin][ivbin]<<endl; if(ispt){ for(int ietabin=0;ietabin<netav;ietabin++){ eff[ietabin] = heff->GetBinContent(heff->FindBin((etabinv[ietabin]+etabinv[ietabin+1])/2,(binv[ivbin]+binv[ivbin+1])/2)); totmulthisto_f[ibin][ietabin][ivbin]=hetapt[ibin]->Integral(hetapt[ibin]->GetXaxis()->FindBin(etabinv[ietabin]+1e-4),hetapt[ibin]->GetXaxis()->FindBin(etabinv[ietabin+1]-1e-4),hetapt[ibin]->GetYaxis()->FindBin(binv[ivbin]+1e-4),hetapt[ibin]->GetYaxis()->FindBin(binv[ivbin+1]+1e-4)); totmulthisto[ibin][ivbin]+=totmulthisto_f[ibin][ietabin][ivbin]; } } V_int[ibin]+=vmean[ibin][ivbin]*totmult[ibin][ivbin]; V_interr[ibin]+=deltavmean[ibin][ivbin]*totmult[ibin][ivbin]; totmultall_[ibin]+=totmult[ibin][ivbin]; if(ispt){ if(binv[ivbin+1]>3.0) continue; for(int ietabin=0;ietabin<netav;ietabin++) totmulthistocorr[ibin][ivbin]+=totmulthisto_f[ibin][ietabin][ivbin]/eff[ietabin]; V_intcorr[ibin]+=vmean[ibin][ivbin]*totmulthistocorr[ibin][ivbin]; V_intcorrerr[ibin]+=deltavmean[ibin][ivbin]*totmulthistocorr[ibin][ivbin]; totmultallcorr[ibin]+=totmulthistocorr[ibin][ivbin]; } } V_int[ibin]/=totmultall_[ibin]; V_interr[ibin]/=totmultall_[ibin]; if(ispt){ V_intcorr[ibin]/=totmultallcorr[ibin]; V_intcorrerr[ibin]/=totmultallcorr[ibin]; } } if(ispt){ fstrv<<endl<<"pt range\t\t"<<"totmult"<<"\t\t"<<"totmult from histo"<<"\t"<<"totmult corrected"<<endl; for(int ibin=0;ibin<nbin;ibin++){ for(int ivbin=0;ivbin<nvv; ivbin++){ fstrv<<binv[ivbin]<<"-"<<binv[ivbin+1]<<"\t\t"<<totmult[ibin][ivbin]<<"\t"<<totmulthisto[ibin][ivbin]<<"\t"<<totmulthistocorr[ibin][ivbin]<<endl; } fstrv<<"Integral\t\t"<<totmultall_[ibin]<<"\t"<<hpt[ibin]->Integral(hpt[ibin]->GetXaxis()->FindBin(binv[0]),hpt[ibin]->GetXaxis()->FindBin(3.0)-1)<<"\t"<<totmultallcorr[ibin]<<endl; fstrv<<"V ref="<<(*V_mean)[ibin]<<"\t"<<"V int="<<V_int[ibin]<<"\t"<<"V int corr="<<V_intcorr[ibin]<<endl; fstrv<<"V ref err="<<(*deltaV_mean)[ibin]<<"\t"<<"V int err="<<V_interr[ibin]<<"\t"<<"V int corr err="<<V_intcorrerr[ibin]<<endl; } } else for(int ibin=0;ibin<nbin;ibin++){ for(int ivbin=0;ivbin<nvv; ivbin++){ fstrv<<binv[ivbin]<<"-"<<binv[ivbin+1]<<"\t\t"<<totmult[ibin][ivbin]<<endl; } fstrv<<"V ref="<<(*V_mean)[ibin]<<"\t"<<"V int="<<V_int[ibin]<<endl; fstrv<<"V ref err="<<(*deltaV_mean)[ibin]<<"\t"<<"V int err="<<V_interr[ibin]<<endl; } if(ispt){ if(SumorProd=="Sum")TFile *fout = new TFile("mergedv_Prod.root","Recreate"); else TFile *fout = new TFile("mergedv_Prod2.root","Recreate"); } else{ if(SumorProd=="Sum")TFile *fout = new TFile("mergedv_Prod_finer_eta.root","Recreate"); else TFile *fout = new TFile("mergedv_Prod2_finer_eta.root","Recreate"); } for(ibin=0;ibin<nbin;ibin++){ Nevent.Write("Nevent"); avgtrkall.Write("avgtrk"); V_int.Write("V_int"); V_interr.Write("V_interr"); if(ispt){ V_intcorr.Write("V_intcorr"); V_intcorrerr.Write("V_intcorrerr"); } TDirectory *dir0 = fout->mkdir(Form("D_%d",ibin)); dir0->cd(); avgpt[ibin].Write("avgpt"); avgeta[ibin].Write("avgeta"); totmult[ibin].Write("totmult"); vmean[ibin].Write("vmean"); deltavmean[ibin].Write("deltavmean"); for(int itheta=0;itheta<ntheta;itheta++){ TDirectory *dir1 = dir0->mkdir(Form("D_%d",itheta));dir1->cd(); v[ibin][itheta].Write("v"); deltav[ibin][itheta].Write("deltav"); } } infile->Close(); fout->Close(); }
void getResVsub(){ string SumorProd = getenv("SUMORPROD"); //------------------------Deal with the number and get the output stored in txt files and root files double Vmax[nbin], eps[nbin]; string dir = getenv("DIR"); for(int ibin=0; ibin<nbin ;ibin++){ Vmax[ibin]=0.065*(trkbin[ibin]+30); eps[ibin]=0.00025*(trkbin[ibin]+30); } ofstream fstrV; double theta[ntheta]; TVectorD Nevent[nbin], totmultall[nbin]; TVectorD avgmult[nbin], avgpt[nbin], totmult[nbin], totpt[nbin]; TVectorD Qx1[nbin], Qy1[nbin], Q2[nbin]; TVectorD Gmod2[nbin][nptV][ntheta]; TVectorD sigma2[nbin][nptV],deltaV[nbin][nptV]; TVectorD sigma2_[nbin],chi_[nbin]; TVectorD deltaVmean[nbin], Vmean[nbin]; TVectorD Vmeanmean, deltaVmeanmean, sigmaVmeanmean; TVectorD r[nbin]; TVectorD r0[nbin][nptV], r01[nbin][nptV], V[nbin][nptV], chi[nbin][nptV]; TVectorD GRe[nbin][nptV][ntheta]; TVectorD* GRe_t[nbin][nptV][ntheta]; TVectorD GIm[nbin][nptV][ntheta]; TVectorD* GIm_t[nbin][nptV][ntheta]; TVectorD IFILE[nbin]; TComplex G[nbin][nptV][ntheta][nstepr]; if(SumorProd=="Sum") fstrV.open("V_Sum_sub.txt"); else fstrV.open("V_Prod_sub.txt"); if(SumorProd=="Sum") TString outname = "mergedV_Sum_sub.root"; else TString outname="mergedV_Prod_sub.root"; TFile *outf = new TFile(outname,"Recreate"); TFile *f[nFileAll]; TVectorD Nevent_; Nevent_.ResizeTo(nbin); Nevent_.Zero(); Vmeanmean.ResizeTo(nbin); Vmeanmean.Zero(); deltaVmeanmean.ResizeTo(nbin); deltaVmeanmean.Zero(); sigmaVmeanmean.ResizeTo(nbin); sigmaVmeanmean.Zero(); for(int ibin=0; ibin<nbin; ibin++){ r[ibin].ResizeTo(nstepr); for(int ir=0; ir<nstepr; ir++){ if(isSimple==0) r[ibin][ir]=j01/(Vmax[ibin]-eps[ibin]*ir); else r[ibin][ir]=0.00025*20*(ir+1); } for(int ifile=0; ifile<nFileAll; ifile++){ if(SumorProd=="Sum") f[ifile] = TFile::Open(Form("/scratch/xuq7/flow/pbsjoboutput/tracknormcpt03to6/%s/AnaV_Sum_%d.root",dir.c_str(),ifile)); else f[ifile] = TFile::Open(Form("/scratch/xuq7/flow/pbsjoboutput/tracknormcpt03to6/%s/AnaV_Prod_%d.root",dir.c_str(),ifile)); TVectorD* Nevent_t = (TVectorD*)f[ifile]->Get(Form("Nevent")); Nevent_[ibin]+=(*Nevent_t)[ibin]; f[ifile]->Close(); } IFILE[ibin].ResizeTo(nsamples); Nevent[ibin].ResizeTo(nsamples); Nevent[ibin].Zero(); totmultall[ibin].ResizeTo(nsamples); totmultall[ibin].Zero(); TDirectory *dir0 = outf->mkdir(Form("D_%d",ibin)); for(int isample=0;isample<nsamples;isample++){ TVectorD Nevent0; Nevent0.ResizeTo(nbin); Nevent0.Zero(); for(int itheta=0;itheta<ntheta;itheta++) theta[itheta]=itheta*TMath::Pi()/ntheta/nn; for(int iptbin=0;iptbin<nptV;iptbin++){ r0[ibin][iptbin].ResizeTo(ntheta); r01[ibin][iptbin].ResizeTo(ntheta); sigma2[ibin][iptbin].ResizeTo(ntheta); V[ibin][iptbin].ResizeTo(ntheta); deltaV[ibin][iptbin].ResizeTo(ntheta); chi[ibin][iptbin].ResizeTo(ntheta); for(int itheta=0;itheta<ntheta;itheta++){ Gmod2[ibin][iptbin][itheta].ResizeTo(nstepr); GRe[ibin][iptbin][itheta].ResizeTo(nstepr); GRe[ibin][iptbin][itheta].Zero(); GIm[ibin][iptbin][itheta].ResizeTo(nstepr); GIm[ibin][iptbin][itheta].Zero(); } } avgmult[ibin].ResizeTo(nptV); deltaVmean[ibin].ResizeTo(nptV); Vmean[ibin].ResizeTo(nptV); deltaVmean[ibin].Zero(); Vmean[ibin].Zero(); Vmean[ibin].Zero(); deltaVmean[ibin].Zero(); totpt[ibin].ResizeTo(nptV); totpt[ibin].Zero(); totmult[ibin].ResizeTo(nptV); totmult[ibin].Zero(); avgpt[ibin].ResizeTo(nptV); Qx1[ibin].ResizeTo(nptV); Qx1[ibin].Zero(); Qy1[ibin].ResizeTo(nptV); Qy1[ibin].Zero(); Q2[ibin].ResizeTo(nptV); Q2[ibin].Zero(); sigma2_[ibin].ResizeTo(nptV);sigma2_[ibin].Zero(); chi_[ibin].ResizeTo(nptV);chi_[ibin].Zero(); for(int ifile=0; ifile<nFileAll; ifile++){ if(SumorProd=="Sum") f[ifile] = TFile::Open(Form("/scratch/xuq7/flow/pbsjoboutput/tracknormcpt03to6/%s/AnaV_Sum_%d.root",dir.c_str(),ifile)); else f[ifile] = TFile::Open(Form("/scratch/xuq7/flow/pbsjoboutput/tracknormcpt03to6/%s/AnaV_Prod_%d.root",dir.c_str(),ifile)); TVectorD* Nevent_t = (TVectorD*)f[ifile]->Get(Form("Nevent")); TVectorD* totmultall_t = (TVectorD*)f[ifile]->Get(Form("totmultall")); Nevent0[ibin] += (*Nevent_t)[ibin]; double start=isample*Nevent_[ibin]/nsamples; double end=(isample+1)*Nevent_[ibin]/nsamples; if(Nevent0[ibin]>start && Nevent0[ibin]<=end){ IFILE[ibin][isample]=(double)ifile; Nevent[ibin][isample] += (*Nevent_t)[ibin]; for(int iptbin=0;iptbin<nptV;iptbin++){ for(int itheta=0;itheta<ntheta;itheta++){ GRe_t[ibin][iptbin][itheta] = (TVectorD*)f[ifile]->Get(Form("GRe_%d_%d_%d",ibin,iptbin,itheta)); GIm_t[ibin][iptbin][itheta] = (TVectorD*)f[ifile]->Get(Form("GIm_%d_%d_%d",ibin,iptbin,itheta)); for(ir=0; ir<nstepr; ir++){ GRe[ibin][iptbin][itheta][ir] += (*GRe_t[ibin][iptbin][itheta])[ir]; GIm[ibin][iptbin][itheta][ir] += (*GIm_t[ibin][iptbin][itheta])[ir]; } } } TVectorD* Qx1_t = (TVectorD*)f[ifile]->Get(Form("Qx1_%d",ibin)); TVectorD* Qy1_t = (TVectorD*)f[ifile]->Get(Form("Qy1_%d",ibin)); TVectorD* Q2_t = (TVectorD*)f[ifile]->Get(Form("Q2_%d",ibin)); TVectorD* totmult_t = (TVectorD*)f[ifile]->Get(Form("totmult_%d",ibin)); TVectorD* totpt_t = (TVectorD*)f[ifile]->Get(Form("totpt_%d",ibin)); for(int iptbin=0;iptbin<nptV;iptbin++){ Qx1[ibin][iptbin] += (*Qx1_t)[iptbin]; Qy1[ibin][iptbin] += (*Qy1_t)[iptbin]; Q2[ibin][iptbin] += (*Q2_t)[iptbin]; totmult[ibin][iptbin] += (*totmult_t)[iptbin]; totpt[ibin][iptbin] += (*totpt_t)[iptbin]; } totmultall[ibin][isample] += (*totmultall_t)[ibin]; } f[ifile]->Close(); }//file loop fstrV<<setprecision(4)<<fixed; fstrV<<"ibin"<<"\t"<<"iptbin"<<"\t"<<"itheta"<<"\t"<<"r0"<<"\t"<<"V"<<"\t"<<"sigma2"<<"\t"<<"chi"<<"\t"<<"Vn Errors"<<endl; for(int iptbin=0;iptbin<nptV;iptbin++){ for(int itheta=0;itheta<ntheta;itheta++){ for(ir=0; ir<nstepr; ir++){ G[ibin][iptbin][itheta][ir]=TComplex(GRe[ibin][iptbin][itheta][ir],GIm[ibin][iptbin][itheta][ir]); G[ibin][iptbin][itheta][ir]/=Nevent[ibin][isample]; Gmod2[ibin][iptbin][itheta][ir]=TMath::Power(TComplex::Abs(G[ibin][iptbin][itheta][ir]),2); } for(ir=0; ir<nstepr-1; ir++) if(ir!=0 && Gmod2[ibin][iptbin][itheta][ir]<=Gmod2[ibin][iptbin][itheta][ir-1] && Gmod2[ibin][iptbin][itheta][ir]<=Gmod2[ibin][iptbin][itheta][ir+1]) break; if(ir!=0 && ir<nstepr-1) r01[ibin][iptbin][itheta]=r[ibin][ir]; else if(ir==0) {cout<<"ibin="<<ibin<<"\t"<<"iptbin="<<iptbin<<"\t"<<"itheta="<<itheta<<"\tminimum lies on ir = 0, please select proper range!"<<endl; continue;} else {cout<<"ibin="<<ibin<<"\t"<<"iptbin="<<iptbin<<"\t"<<"itheta="<<itheta<<"\tminimum lies on ir = maximum "<<nstepr-1<<", please select proper range!"<<endl; continue;} avgmult[ibin][iptbin]=1.0*totmult[ibin][iptbin]/Nevent[ibin][isample]; avgpt[ibin][iptbin]=1.0*totpt[ibin][iptbin]/totmult[ibin][iptbin]; if(isSimple==0) V[ibin][iptbin][itheta]=Vmax[ibin]-ir*eps[ibin]+eps[ibin]*(Gmod2[ibin][iptbin][itheta][ir+1]-Gmod2[ibin][iptbin][itheta][ir-1])/2./(Gmod2[ibin][iptbin][itheta][ir-1]-2*Gmod2[ibin][iptbin][itheta][ir]+Gmod2[ibin][iptbin][itheta][ir+1]); else V[ibin][iptbin][itheta]=j01/r0[ibin][iptbin][itheta]; //simple method r0[ibin][iptbin][itheta]=j01/V[ibin][iptbin][itheta]; V[ibin][iptbin][itheta]/=avgmult[ibin][iptbin]; //sigma2[ibin][iptbin][itheta]=Q2[ibin][iptbin]/Nevent[ibin]-(Qx1[ibin][iptbin]/Nevent[ibin])*(Qx1[ibin][iptbin]/Nevent[ibin])-(Qy1[ibin][iptbin]/Nevent[ibin])*(Qy1[ibin][iptbin]/Nevent[ibin])-(V[ibin][iptbin][itheta]*avgmult[ibin][iptbin])*(V[ibin][iptbin][itheta]*avgmult[ibin][iptbin]); sigma2[ibin][iptbin][itheta]=Q2[ibin][iptbin]/Nevent[ibin][isample]-(Qx1[ibin][iptbin]/Nevent[ibin][isample])*(Qx1[ibin][iptbin]/Nevent[ibin][isample])-(Qy1[ibin][iptbin]/Nevent[ibin][isample])*(Qy1[ibin][iptbin]/Nevent[ibin][isample]); sigma2_[ibin][iptbin]+=sigma2[ibin][iptbin][itheta]; Vmean[ibin][iptbin]+=V[ibin][iptbin][itheta]; chi[ibin][iptbin][itheta]=V[ibin][iptbin][itheta]*avgmult[ibin][iptbin]/TMath::Sqrt(sigma2[ibin][iptbin][itheta]); //deltaV[ibin][iptbin][itheta]=V[ibin][iptbin][itheta]/j01/TMath::BesselJ1(j01)*TMath::Sqrt((TMath::Exp(j01*j01/2./chi[ibin][iptbin][itheta]/chi[ibin][iptbin][itheta])+TMath::Exp(-j01*j01/2./chi[ibin][iptbin][itheta]/chi[ibin][iptbin][itheta])*TMath::BesselJ0(2*j01))/2./Nevent[ibin]); } sigma2_[ibin][iptbin]/=ntheta; Vmean[ibin][iptbin]/=ntheta; sigma2_[ibin][iptbin]-=TMath::Power(Vmean[ibin][iptbin]*avgmult[ibin][iptbin],2); chi_[ibin][iptbin]=Vmean[ibin][iptbin]*avgmult[ibin][iptbin]/TMath::Sqrt(sigma2_[ibin][iptbin]); //deltaVmean[ibin][iptbin]+=TMath::Exp(j01*j01/2./chi[ibin][iptbin][itheta]/chi[ibin][iptbin][itheta]*TMath::Cos(nn*theta[itheta]))*TMath::BesselJ0(2*j01*TMath::Sin(nn*theta[itheta]/2.))+TMath::Exp(-j01*j01/2./chi[ibin][iptbin][itheta]/chi[ibin][iptbin][itheta]*TMath::Cos(nn*theta[itheta]))*TMath::BesselJ0(2*j01*TMath::Cos(nn*theta[itheta]/2.)); for(int itheta=0;itheta<ntheta;itheta++){ deltaV[ibin][iptbin][itheta]=V[ibin][iptbin][itheta]/j01/TMath::BesselJ1(j01)*TMath::Sqrt((TMath::Exp(j01*j01/2./chi_[ibin][iptbin]/chi_[ibin][iptbin])+TMath::Exp(-j01*j01/2./chi_[ibin][iptbin]/chi_[ibin][iptbin])*TMath::BesselJ0(2*j01))/2./Nevent[ibin][isample]); deltaVmean[ibin][iptbin]+=TMath::Exp(j01*j01/2./chi_[ibin][iptbin]/chi_[ibin][iptbin]*TMath::Cos(nn*theta[itheta]))*TMath::BesselJ0(2*j01*TMath::Sin(nn*theta[itheta]/2.))+TMath::Exp(-j01*j01/2./chi_[ibin][iptbin]/chi_[ibin][iptbin]*TMath::Cos(nn*theta[itheta]))*TMath::BesselJ0(2*j01*TMath::Cos(nn*theta[itheta]/2.)); fstrV<<ibin<<"\t"<<iptbin<<"\t"<<itheta<<"\t"<<r0[ibin][iptbin][itheta]<<"\t"<<V[ibin][iptbin][itheta]<<"\t"<<sigma2[ibin][iptbin][itheta]<<"\t"<<chi[ibin][iptbin][itheta]<<"\t"<<deltaV[ibin][iptbin][itheta]<<endl; } fstrV<<endl; deltaVmean[ibin][iptbin]=Vmean[ibin][iptbin]/j01/TMath::BesselJ1(j01)*TMath::Sqrt(deltaVmean[ibin][iptbin]/ntheta/2./Nevent[ibin][isample]); } fstrV<<endl; fstrV<<"ibin"<<"\t"<<"iptbin"<<"\t"<<"avgmult"<<"\t"<<"avgpt"<<"\t"<<"Vn mean"<<"\t"<<"Vn mean Error"<<endl; for(int iptbin=0;iptbin<nptV;iptbin++){ fstrV<<ibin<<"\t"<<iptbin<<"\t"<<avgmult[ibin][iptbin]<<"\t"<<avgpt[ibin][iptbin]<<"\t"<<Vmean[ibin][iptbin]<<"\t"<<deltaVmean[ibin][iptbin]<<endl; } fstrV<<endl; TDirectory *dirsample = dir0->mkdir(Form("s_%d",isample)); dirsample->cd(); r[ibin].Write("r"); Qx1[ibin].Write("Qx1"); Qy1[ibin].Write("Qy1"); Q2[ibin].Write("Q2"); totmult[ibin].Write("totmult"); totpt[ibin].Write("totpt"); avgmult[ibin].Write("avgmult"); avgpt[ibin].Write("avgpt"); Vmean[ibin].Write("Vmean"); deltaVmean[ibin].Write("deltaVmean"); Vmeanmean[ibin]+=Vmean[ibin][0]/nsamples; deltaVmeanmean[ibin]+=deltaVmean[ibin][0]/nsamples; sigmaVmeanmean[ibin]+=TMath::Power(Vmean[ibin][0]/nsamples,2); chi_[ibin].Write("chi"); for(int iptbin=0;iptbin<nptV;iptbin++){ TDirectory *dir1 = dirsample->mkdir(Form("D_%d",iptbin));dir1->cd(); sigma2[ibin][iptbin].Write("sigma2"); chi[ibin][iptbin].Write("chi0"); deltaV[ibin][iptbin].Write("deltaV"); r0[ibin][iptbin].Write("r0"); r01[ibin][iptbin].Write("r01"); V[ibin][iptbin].Write("V"); for(int itheta=0;itheta<ntheta;itheta++){ TDirectory *dir2 = dir1->mkdir(Form("D_%d",itheta));dir2->cd(); GRe[ibin][iptbin][itheta].Write(Form("GRe")); GIm[ibin][iptbin][itheta].Write(Form("GIm")); Gmod2[ibin][iptbin][itheta].Write(Form("G2")); } } }//subsample loop dir0->cd(); IFILE[ibin].Write("IFILE"); Nevent[ibin].Write("Nevent"); totmultall[ibin].Write("totmultall"); sigmaVmeanmean[ibin]=TMath::Sqrt(sigmaVmeanmean[ibin]*nsamples-Vmeanmean[ibin]*Vmeanmean[ibin])/TMath::Sqrt(nsamples); }//ntrk bin loop outf->cd(); Vmeanmean.Write("Vmeanmean"); deltaVmeanmean.Write("deltaVmeanmean"); sigmaVmeanmean.Write("sigmaVmeanmean"); outf->Close(); }
TComplex TComplex::to_power (long power) { /*qn = rn(cos (n*fi)+ i* sin (n*fi))*/ double fi = angle_rad(); double mod = module(); return TComplex(pow(mod,power) * cos(power * fi), pow(mod,power) * sin(power * fi)); }
QString TCtrl::execute_calc_command(TCommand command, QString arg) { TComplex tmp_comp; QStringList list_arg; QString res; switch (command) { case com_Number: state = c_editing; break; case com_Rev: if (state == c_exp_done) { processor.reset(); } processor.set_rop(TComplex(arg)); processor.run_func(Rev); res = processor.get_rop().get_complex(); execute_editor_command(com_Set_str, res); state = c_fun_done; break; case com_Sqr: if (state == c_exp_done) { processor.reset(); } processor.set_rop(TComplex(arg)); processor.run_func(Sqr); res = processor.get_rop().get_complex(); execute_editor_command(com_Set_str, res); state = c_fun_done; break; case com_Mod: tmp_comp = TComplex(arg); res = QString::number(round(tmp_comp.module()*10000)/10000); break; case com_Arg_rad: tmp_comp = TComplex(arg); res = QString::number(round(tmp_comp.angle_rad()*10000)/10000); break; case com_Arg_deg: tmp_comp = TComplex(arg); res = QString::number(round(tmp_comp.angle_deg()*10000)/10000); break; case com_Pwr: list_arg = arg.split("|"); tmp_comp = TComplex(list_arg[0]); tmp_comp = tmp_comp.to_power(list_arg[1].toLong()); //tmp_comp = TComplex(round(tmp_comp.get_re()*10000)/10000, round(tmp_comp.get_im()*10000)/10000); tmp_comp = TComplex(tmp_comp.get_re(), tmp_comp.get_im()); res = tmp_comp.get_complex(); break; case com_Root: list_arg = arg.split("|"); tmp_comp = TComplex(list_arg[0]); //res = QString::number(list_arg[1].toLong()) + " " + QString::number(list_arg[2].toLong()); tmp_comp = tmp_comp.sqrt(list_arg[1].toLong(), list_arg[2].toLong()); //res = arg; //tmp_comp = TComplex(round(tmp_comp.get_re()*10000)/10000, round(tmp_comp.get_im()*10000)/10000); tmp_comp = TComplex(tmp_comp.get_re(), tmp_comp.get_im()); res = tmp_comp.get_complex(); break; case com_Add: res = execute_operation(Add, arg); break; case com_Sub: res = execute_operation(Sub, arg); break; case com_Mul: res = execute_operation(Mul, arg); break; case com_Div: res = execute_operation(Dvd, arg); break; case com_Eq: switch (state) { case c_op_change: processor.set_rop(processor.get_lop()); state = c_exp_done; processor.run_oprtn(); res = processor.get_lop().get_complex(); break; case c_editing: if (processor.is_operation()) { processor.set_rop(TComplex(arg)); state = c_exp_done; processor.run_oprtn(); res = processor.get_lop().get_complex(); } else { processor.set_lop(TComplex(arg)); state = c_exp_done; res = arg; } break; case c_fun_done: if (processor.is_operation()) { processor.run_oprtn(); res = processor.get_lop().get_complex(); } else { processor.set_lop(TComplex(arg)); res = arg; } state = c_exp_done; break; case c_exp_done: if (processor.is_operation()) { processor.run_oprtn(); res = processor.get_lop().get_complex(); } else { processor.set_lop(TComplex(arg)); res = arg; } break; case c_start: res = arg; break;res = arg; default: res = arg; break; } break; case com_MC: memory.clear(); res = arg; break; case com_MS: memory.store(TComplex(arg)); res = arg; break; case com_MR: if (state == c_op_change) { processor.set_rop(memory.extract()); state = c_editing; } res = memory.extract().get_complex(); break; case com_MAdd: memory.add(TComplex(arg)); res = arg; break; } return res; }
TComplex TComplex::rev () { /*a1/(a1**2 + b1**2) - i* b1/( a1**2 + b1**2 ))*/ double _real = real / (real*real + imagine*imagine); double _imagine = imagine / (real*real + imagine*imagine); return TComplex(_real, -_imagine); }
void getResV(){ //------------------------Deal with the number and get the output stored in txt files and root files string SumorProd = getenv("SUMORPROD"); double Vmax[nbin], eps[nbin]; for(int ibin=0; ibin<nbin ;ibin++){ //Vmax[ibin]=0.065*(trkbin[ibin]+30); Vmax[ibin]=0.065*avgmultIn; //eps[ibin]=0.00025*(trkbin[ibin]+30); eps[ibin]=0.00025*avgmultIn; } ofstream fstrV; double theta[ntheta]; TVectorD avgmult[nbin], avgpt[nbin], totmult[nbin], totpt[nbin]; TVectorD Qx1[nbin], Qy1[nbin], Q2[nbin]; TVectorD Gmod2[nbin][nptV][ntheta]; TVectorD sigma2[nbin][nptV],deltaV[nbin][nptV]; TVectorD sigma2_[nbin],chi_[nbin]; TVectorD deltaVmean[nbin], Vmean[nbin]; TVectorD r[nbin]; TVectorD r0[nbin][nptV], V[nbin][nptV], chi[nbin][nptV]; TVectorD GRe[nbin][nptV][ntheta]; TVectorD* GRe_t[nbin][nptV][ntheta]; TVectorD GIm[nbin][nptV][ntheta]; TVectorD* GIm_t[nbin][nptV][ntheta]; TComplex G[nbin][nptV][ntheta][nstepr]; if(SumorProd=="Sum") fstrV.open("V_Sum.txt"); else fstrV.open("V_Prod.txt"); TFile *f[nFileAll]; for(int ibin=0; ibin<nbin; ibin++){ r[ibin].ResizeTo(nstepr); for(int ir=0; ir<nstepr; ir++){ if(isSimple==0) r[ibin][ir]=j01/(Vmax[ibin]-eps[ibin]*ir); else r[ibin][ir]=0.00025*20*(ir+1); } } TVectorD Nevent; Nevent.ResizeTo(nbin); Nevent.Zero(); TVectorD totmultall; totmultall.ResizeTo(nbin); totmultall.Zero(); TVectorD avgmultall; avgmultall.ResizeTo(nbin); avgmultall.Zero(); TVectorD tottrk; tottrk.ResizeTo(nbin); tottrk.Zero(); TVectorD avgtrk; avgtrk.ResizeTo(nbin); avgtrk.Zero(); for(int itheta=0;itheta<ntheta;itheta++) theta[itheta]=itheta*TMath::Pi()/ntheta/nn; for(int ibin=0;ibin<nbin;ibin++){ for(int iptbin=0;iptbin<nptV;iptbin++){ r0[ibin][iptbin].ResizeTo(ntheta); sigma2[ibin][iptbin].ResizeTo(ntheta); V[ibin][iptbin].ResizeTo(ntheta); deltaV[ibin][iptbin].ResizeTo(ntheta); chi[ibin][iptbin].ResizeTo(ntheta); for(int itheta=0;itheta<ntheta;itheta++){ Gmod2[ibin][iptbin][itheta].ResizeTo(nstepr); GRe[ibin][iptbin][itheta].ResizeTo(nstepr); GRe[ibin][iptbin][itheta].Zero(); GIm[ibin][iptbin][itheta].ResizeTo(nstepr); GIm[ibin][iptbin][itheta].Zero(); } } avgmult[ibin].ResizeTo(nptV); deltaVmean[ibin].ResizeTo(nptV); Vmean[ibin].ResizeTo(nptV); totpt[ibin].ResizeTo(nptV); totpt[ibin].Zero(); totmult[ibin].ResizeTo(nptV); totmult[ibin].Zero(); avgpt[ibin].ResizeTo(nptV); Qx1[ibin].ResizeTo(nptV); Qx1[ibin].Zero(); Qy1[ibin].ResizeTo(nptV); Qy1[ibin].Zero(); Q2[ibin].ResizeTo(nptV); Q2[ibin].Zero(); sigma2_[ibin].ResizeTo(nptV);sigma2_[ibin].Zero(); chi_[ibin].ResizeTo(nptV);chi_[ibin].Zero(); } for(int ifile=0; ifile<nFileAll; ifile++){ if(SumorProd=="Sum") f[ifile] = TFile::Open(Form("/lio/lfs/cms/store/user/qixu/flow/pbsjoboutput/PFcandpt03to6/M300260/AnaV_Sum_%d.root",ifile)); else f[ifile] = TFile::Open(Form("/lio/lfs/cms/store/user/qixu/flow/pbsjoboutput/PFcandpt03to6/M300260/AnaV_Prod_%d.root",ifile)); TVectorD* Nevent_t = (TVectorD*)f[ifile]->Get(Form("Nevent")); TVectorD* totmultall_t = (TVectorD*)f[ifile]->Get(Form("totmultall")); TVectorD* tottrk_t = (TVectorD*)f[ifile]->Get(Form("tottrk")); for(int ibin=0;ibin<nbin;ibin++){ for(int iptbin=0;iptbin<nptV;iptbin++){ for(int itheta=0;itheta<ntheta;itheta++){ GRe_t[ibin][iptbin][itheta] = (TVectorD*)f[ifile]->Get(Form("GRe_%d_%d_%d",ibin,iptbin,itheta)); GIm_t[ibin][iptbin][itheta] = (TVectorD*)f[ifile]->Get(Form("GIm_%d_%d_%d",ibin,iptbin,itheta)); for(ir=0; ir<nstepr; ir++){ GRe[ibin][iptbin][itheta][ir] += (*GRe_t[ibin][iptbin][itheta])[ir]; GIm[ibin][iptbin][itheta][ir] += (*GIm_t[ibin][iptbin][itheta])[ir]; } } } TVectorD* Qx1_t = (TVectorD*)f[ifile]->Get(Form("Qx1_%d",ibin)); TVectorD* Qy1_t = (TVectorD*)f[ifile]->Get(Form("Qy1_%d",ibin)); TVectorD* Q2_t = (TVectorD*)f[ifile]->Get(Form("Q2_%d",ibin)); TVectorD* totmult_t = (TVectorD*)f[ifile]->Get(Form("totmult_%d",ibin)); TVectorD* totpt_t = (TVectorD*)f[ifile]->Get(Form("totpt_%d",ibin)); for(int iptbin=0;iptbin<nptV;iptbin++){ Qx1[ibin][iptbin] += (*Qx1_t)[iptbin]; Qy1[ibin][iptbin] += (*Qy1_t)[iptbin]; Q2[ibin][iptbin] += (*Q2_t)[iptbin]; totmult[ibin][iptbin] += (*totmult_t)[iptbin]; totpt[ibin][iptbin] += (*totpt_t)[iptbin]; } Nevent[ibin] += (*Nevent_t)[ibin]; totmultall[ibin] += (*totmultall_t)[ibin]; tottrk[ibin] += (*tottrk_t)[ibin]; } f[ifile]->Close(); } fstrV<<setprecision(4)<<fixed; fstrV<<"ibin"<<"\t"<<"iptbin"<<"\t"<<"itheta"<<"\t"<<"r0"<<"\t"<<"V"<<"\t"<<"sigma2"<<"\t"<<"chi"<<"\t"<<"Vn Errors"<<endl; for(int ibin=0;ibin<nbin;ibin++){ avgmultall[ibin]=totmultall[ibin]/Nevent[ibin]; avgtrk[ibin]=tottrk[ibin]/Nevent[ibin]; for(int iptbin=0;iptbin<nptV;iptbin++){ for(int itheta=0;itheta<ntheta;itheta++){ for(ir=0; ir<nstepr; ir++){ G[ibin][iptbin][itheta][ir]=TComplex(GRe[ibin][iptbin][itheta][ir],GIm[ibin][iptbin][itheta][ir]); G[ibin][iptbin][itheta][ir]/=Nevent[ibin]; Gmod2[ibin][iptbin][itheta][ir]=TMath::Power(TComplex::Abs(G[ibin][iptbin][itheta][ir]),2); } for(ir=0; ir<nstepr-1; ir++) if(ir!=0 && Gmod2[ibin][iptbin][itheta][ir]<=Gmod2[ibin][iptbin][itheta][ir-1] && Gmod2[ibin][iptbin][itheta][ir]<=Gmod2[ibin][iptbin][itheta][ir+1]) break; if(ir!=0 && ir<nstepr-1) r0[ibin][iptbin][itheta]=r[ibin][ir]; else if(ir==0) {cout<<"ibin="<<ibin<<"\t"<<"iptbin="<<iptbin<<"\t"<<"itheta="<<itheta<<"\tminimum lies on ir = 0, please select proper range!"<<endl; continue;} else {cout<<"ibin="<<ibin<<"\t"<<"iptbin="<<iptbin<<"\t"<<"itheta="<<itheta<<"\tminimum lies on ir = maximum "<<nstepr-1<<", please select proper range!"<<endl; continue;} avgmult[ibin][iptbin]=1.0*totmult[ibin][iptbin]/Nevent[ibin]; avgpt[ibin][iptbin]=1.0*totpt[ibin][iptbin]/totmult[ibin][iptbin]; if(isSimple==0) V[ibin][iptbin][itheta]=Vmax[ibin]-ir*eps[ibin]+eps[ibin]*(Gmod2[ibin][iptbin][itheta][ir+1]-Gmod2[ibin][iptbin][itheta][ir-1])/2./(Gmod2[ibin][iptbin][itheta][ir-1]-2*Gmod2[ibin][iptbin][itheta][ir]+Gmod2[ibin][iptbin][itheta][ir+1]); else V[ibin][iptbin][itheta]=j01/r0[ibin][iptbin][itheta]; //simple method V[ibin][iptbin][itheta]/=avgmult[ibin][iptbin]; sigma2[ibin][iptbin][itheta]=Q2[ibin][iptbin]/Nevent[ibin]-(Qx1[ibin][iptbin]/Nevent[ibin])*(Qx1[ibin][iptbin]/Nevent[ibin])-(Qy1[ibin][iptbin]/Nevent[ibin])*(Qy1[ibin][iptbin]/Nevent[ibin])-(V[ibin][iptbin][itheta]*avgmult[ibin][iptbin])*(V[ibin][iptbin][itheta]*avgmult[ibin][iptbin]); sigma2_[ibin][iptbin]+=sigma2[ibin][iptbin][itheta]; Vmean[ibin][iptbin]+=V[ibin][iptbin][itheta]; chi[ibin][iptbin][itheta]=V[ibin][iptbin][itheta]*avgmult[ibin][iptbin]/TMath::Sqrt(sigma2[ibin][iptbin][itheta]); deltaV[ibin][iptbin][itheta]=V[ibin][iptbin][itheta]/j01/TMath::BesselJ1(j01)*TMath::Sqrt((TMath::Exp(j01*j01/2./chi[ibin][iptbin][itheta]/chi[ibin][iptbin][itheta])+TMath::Exp(-j01*j01/2./chi[ibin][iptbin][itheta]/chi[ibin][iptbin][itheta])*TMath::BesselJ0(2*j01))/2./Nevent[ibin]); fstrV<<ibin<<"\t"<<iptbin<<"\t"<<itheta<<"\t"<<r0[ibin][iptbin][itheta]<<"\t"<<V[ibin][iptbin][itheta]<<"\t"<<sigma2[ibin][iptbin][itheta]<<"\t"<<chi[ibin][iptbin][itheta]<<"\t"<<deltaV[ibin][iptbin][itheta]<<endl; } //deltaVmean[ibin][iptbin]+=TMath::Exp(j01*j01/2./chi[ibin][iptbin][itheta]/chi[ibin][iptbin][itheta]*TMath::Cos(nn*theta[itheta]))*TMath::BesselJ0(2*j01*TMath::Sin(nn*theta[itheta]/2.))+TMath::Exp(-j01*j01/2./chi[ibin][iptbin][itheta]/chi[ibin][iptbin][itheta]*TMath::Cos(nn*theta[itheta]))*TMath::BesselJ0(2*j01*TMath::Cos(nn*theta[itheta]/2.)); sigma2_[ibin][iptbin]/=ntheta; Vmean[ibin][iptbin]/=ntheta; sigma2_[ibin][iptbin]-=TMath::Power(Vmean[ibin][iptbin]*avgmult[ibin][iptbin],2); chi_[ibin][iptbin]=Vmean[ibin][iptbin]*avgmult[ibin][iptbin]/TMath::Sqrt(sigma2_[ibin][iptbin]); for(int itheta=0;itheta<ntheta;itheta++){ deltaVmean[ibin][iptbin]+=TMath::Exp(j01*j01/2./chi_[ibin][iptbin]/chi_[ibin][iptbin]*TMath::Cos(nn*theta[itheta]))*TMath::BesselJ0(2*j01*TMath::Sin(nn*theta[itheta]/2.))+TMath::Exp(-j01*j01/2./chi_[ibin][iptbin]/chi_[ibin][iptbin]*TMath::Cos(nn*theta[itheta]))*TMath::BesselJ0(2*j01*TMath::Cos(nn*theta[itheta]/2.)); } fstrV<<endl; deltaVmean[ibin][iptbin]=Vmean[ibin][iptbin]/j01/TMath::BesselJ1(j01)*TMath::Sqrt(deltaVmean[ibin][iptbin]/ntheta/2./Nevent[ibin]); } fstrV<<endl; } fstrV<<"ibin"<<"\t"<<"iptbin"<<"\t"<<"avgmult"<<"\t"<<"avgpt"<<"\t"<<"Vn mean"<<"\t"<<"Vn mean Error"<<endl; for(int ibin=0;ibin<nbin;ibin++){ for(int iptbin=0;iptbin<nptV;iptbin++){ fstrV<<ibin<<"\t"<<iptbin<<"\t"<<avgmult[ibin][iptbin]<<"\t"<<avgpt[ibin][iptbin]<<"\t"<<Vmean[ibin][iptbin]<<"\t"<<deltaVmean[ibin][iptbin]<<endl; } fstrV<<endl; } fstrV<<"ibin"<<"\t"<<"Nevent"<<"\t"<<"totmultall"<<"\t"<<"avgmultall"<<"\t"<<"avgtrk"<<endl; for(int ibin=0;ibin<nbin;ibin++){ fstrV<<ibin<<"\t"<<Nevent[ibin]<<"\t"<<totmultall[ibin]<<"\t"<<avgmultall[ibin]<<"\t"<<avgtrk[ibin]<<endl; fstrV<<endl; } if(SumorProd=="Sum") TString outname = "mergedV_Sum.root"; else TString outname="mergedV_Prod.root"; TFile *outf = new TFile(outname,"Recreate"); Nevent.Write("Nevent"); totmultall.Write("totmultall"); avgmultall.Write("avgmultall"); tottrk.Write("tottrk"); avgtrk.Write("avgtrk"); for(int ibin=0;ibin<nbin;ibin++){ TDirectory *dir0 = outf->mkdir(Form("D_%d",ibin,itheta));dir0->cd(); r[ibin].Write("r"); Qx1[ibin].Write("Qx1"); Qy1[ibin].Write("Qy1"); Q2[ibin].Write("Q2"); totmult[ibin].Write("totmult"); totpt[ibin].Write("totpt"); avgmult[ibin].Write("avgmult"); avgpt[ibin].Write("avgpt"); Vmean[ibin].Write("Vmean"); deltaVmean[ibin].Write("deltaVmean"); for(int iptbin=0;iptbin<nptV;iptbin++){ TDirectory *dir1 = dir0->mkdir(Form("D_%d",iptbin));dir1->cd(); sigma2[ibin][iptbin].Write("sigma2"); chi[ibin][iptbin].Write("chi"); deltaV[ibin][iptbin].Write("deltaV"); r0[ibin][iptbin].Write("r0"); V[ibin][iptbin].Write("V"); for(int itheta=0;itheta<ntheta;itheta++){ TDirectory *dir2 = dir1->mkdir(Form("D_%d",itheta));dir2->cd(); GRe[ibin][iptbin][itheta].Write(Form("GRe")); GIm[ibin][iptbin][itheta].Write(Form("GIm")); Gmod2[ibin][iptbin][itheta].Write(Form("G2")); } } } outf->Close(); }
//------------------------Deal with the number and get the output stored in txt files and root files void getResVsub(){ double Vmax[nbin], eps[nbin]; for(int ibin=0; ibin<nbin ;ibin++){ Vmax[ibin]=0.065*(trkbin[ibin]+30); eps[ibin]=0.00025*(trkbin[ibin]+30); } ofstream fstrV; double theta[ntheta]; TVectorD avgmult, avgpt, totptall; TVectorD Qx1, Qy1, Q2; TVectorD Gmod2[nbin][ntheta]; TVectorD sigma2[nbin],deltaV[nbin]; TVectorD sigma2_,chi_; TVectorD deltaVmean, Vmean; TVectorD deltaVmeanmean, Vmeanmean, sigmaVmeanmean; TVectorD r[nbin]; TVectorD r0[nbin], r01[nbin], V[nbin], chi[nbin]; TVectorD GRe[nbin][ntheta]; TVectorD* GRe_t[nbin][ntheta]; TVectorD GIm[nbin][ntheta]; TVectorD* GIm_t[nbin][ntheta]; TComplex G[nbin][ntheta][nstepr]; if(isSum) fstrV.open("V_Sum_sub.txt"); else fstrV.open("V_Prod_sub.txt"); if(isSum) TString outname = "mergedV_Sum_sub.root"; else TString outname="mergedV_Prod_sub.root"; TFile *outf = new TFile(outname,"Recreate"); int subsample = (int)(nFileAll/nsamples); TFile *f[nFileAll]; for(int ibin=0; ibin<nbin; ibin++){ r[ibin].ResizeTo(nstepr); for(int ir=0; ir<nstepr; ir++){ if(isSimple==0) r[ibin][ir]=j01/(Vmax[ibin]-eps[ibin]*ir); else r[ibin][ir]=0.00025*20*(ir+1); } } Vmeanmean.ResizeTo(nbin); Vmeanmean.Zero(); deltaVmeanmean.ResizeTo(nbin); deltaVmeanmean.Zero(); sigmaVmeanmean.ResizeTo(nbin); sigmaVmeanmean.Zero(); for(int isample=0;isample<nsamples;isample++){ cout<<"start with "<<isample<<"\t"; int start=isample*subsample; int end=(isample+1)*subsample; TVectorD Nevent; Nevent.ResizeTo(nbin); Nevent.Zero(); TVectorD totmultall; totmultall.ResizeTo(nbin); totmultall.Zero(); for(int itheta=0;itheta<ntheta;itheta++) theta[itheta]=itheta*TMath::Pi()/ntheta/nn; for(int ibin=0;ibin<nbin;ibin++){ r0[ibin].ResizeTo(ntheta); r01[ibin].ResizeTo(ntheta); sigma2[ibin].ResizeTo(ntheta); V[ibin].ResizeTo(ntheta); deltaV[ibin].ResizeTo(ntheta); chi[ibin].ResizeTo(ntheta); for(int itheta=0;itheta<ntheta;itheta++){ Gmod2[ibin][itheta].ResizeTo(nstepr); GRe[ibin][itheta].ResizeTo(nstepr); GRe[ibin][itheta].Zero(); GIm[ibin][itheta].ResizeTo(nstepr); GIm[ibin][itheta].Zero(); } } avgmult.ResizeTo(nbin); deltaVmean.ResizeTo(nbin); Vmean.ResizeTo(nbin); deltaVmean.Zero(); Vmean.Zero(); deltaVmean.Zero(); totptall.ResizeTo(nbin); totptall.Zero(); avgpt.ResizeTo(nbin); Qx1.ResizeTo(nbin); Qx1.Zero(); Qy1.ResizeTo(nbin); Qy1.Zero(); Q2.ResizeTo(nbin); Q2.Zero(); sigma2_.ResizeTo(nbin);sigma2_.Zero(); chi_.ResizeTo(nbin);chi_.Zero(); for(int ifile=start; ifile<end; ifile++){ if(isSum) f[ifile] = TFile::Open(Form("/scratch/xuq7/flow/pbsjoboutput/ToyMCHole/pPbDataV205m185/AnaV_Sum_%d.root",ifile)); else f[ifile] = TFile::Open(Form("/scratch/xuq7/flow/pbsjoboutput/ToyMCHole/pPbDataV205m185/AnaV_Prod_%d.root",ifile)); TVectorD* Nevent_t = (TVectorD*)f[ifile]->Get(Form("Nevent")); TVectorD* totmultall_t = (TVectorD*)f[ifile]->Get(Form("totmultall")); TVectorD* Qx1_t = (TVectorD*)f[ifile]->Get(Form("Qx1")); TVectorD* Qy1_t = (TVectorD*)f[ifile]->Get(Form("Qy1")); TVectorD* Q2_t = (TVectorD*)f[ifile]->Get(Form("Q2")); TVectorD* totptall_t = (TVectorD*)f[ifile]->Get(Form("totptall")); for(int ibin=0;ibin<nbin;ibin++){ for(int itheta=0;itheta<ntheta;itheta++){ GRe_t[ibin][itheta] = (TVectorD*)f[ifile]->Get(Form("GRe_%d_%d",ibin,itheta)); GIm_t[ibin][itheta] = (TVectorD*)f[ifile]->Get(Form("GIm_%d_%d",ibin,itheta)); for(ir=0; ir<nstepr; ir++){ GRe[ibin][itheta][ir] += (*GRe_t[ibin][itheta])[ir]; GIm[ibin][itheta][ir] += (*GIm_t[ibin][itheta])[ir]; } } Qx1[ibin] += (*Qx1_t)[ibin]; Qy1[ibin] += (*Qy1_t)[ibin]; Q2[ibin] += (*Q2_t)[ibin]; totptall[ibin] += (*totptall_t)[ibin]; Nevent[ibin] += (*Nevent_t)[ibin]; totmultall[ibin] += (*totmultall_t)[ibin]; } f[ifile]->Close(); } fstrV<<setprecision(4)<<fixed; fstrV<<"ibin"<<"\t"<<"itheta"<<"\t"<<"r0"<<"\t"<<"V"<<"\t"<<"sigma2"<<"\t"<<"chi"<<"\t"<<"Vn Errors"<<endl; for(int ibin=0;ibin<nbin;ibin++){ for(int itheta=0;itheta<ntheta;itheta++){ for(ir=0; ir<nstepr; ir++){ G[ibin][itheta][ir]=TComplex(GRe[ibin][itheta][ir],GIm[ibin][itheta][ir]); G[ibin][itheta][ir]/=Nevent[ibin]; Gmod2[ibin][itheta][ir]=TMath::Power(TComplex::Abs(G[ibin][itheta][ir]),2); } for(ir=0; ir<nstepr-1; ir++) if(ir!=0 && Gmod2[ibin][itheta][ir]<=Gmod2[ibin][itheta][ir-1] && Gmod2[ibin][itheta][ir]<=Gmod2[ibin][itheta][ir+1]) break; if(ir!=0 && ir<nstepr-1) r01[ibin][itheta]=r[ibin][ir]; else if(ir==0) {cout<<"ibin="<<ibin<<"\t"<<"itheta="<<itheta<<"\tminimum lies on ir = 0, please select proper range!"<<endl; continue;} else {cout<<"ibin="<<ibin<<"\t"<<"itheta="<<itheta<<"\tminimum lies on ir = maximum "<<nstepr-1<<", please select proper range!"<<endl; continue;} avgmult[ibin]=1.0*totmultall[ibin]/Nevent[ibin]; avgpt[ibin]=1.0*totptall[ibin]/totmultall[ibin]; if(isSimple==0) V[ibin][itheta]=Vmax[ibin]-ir*eps[ibin]+eps[ibin]*(Gmod2[ibin][itheta][ir+1]-Gmod2[ibin][itheta][ir-1])/2./(Gmod2[ibin][itheta][ir-1]-2*Gmod2[ibin][itheta][ir]+Gmod2[ibin][itheta][ir+1]); else V[ibin][itheta]=j01/r0[ibin][itheta]; //simple method r0[ibin][itheta]=j01/V[ibin][itheta]; V[ibin][itheta]/=avgmult[ibin]; //sigma2[ibin][itheta]=Q2[ibin]/Nevent[ibin]-(Qx1[ibin]/Nevent[ibin])*(Qx1[ibin]/Nevent[ibin])-(Qy1[ibin]/Nevent[ibin])*(Qy1[ibin]/Nevent[ibin])-(V[ibin][itheta]*avgmult[ibin])*(V[ibin][itheta]*avgmult[ibin]); sigma2[ibin][itheta]=Q2[ibin]/Nevent[ibin]-(Qx1[ibin]/Nevent[ibin])*(Qx1[ibin]/Nevent[ibin])-(Qy1[ibin]/Nevent[ibin])*(Qy1[ibin]/Nevent[ibin]); sigma2_[ibin]+=sigma2[ibin][itheta]; Vmean[ibin]+=V[ibin][itheta]; chi[ibin][itheta]=V[ibin][itheta]*avgmult[ibin]/TMath::Sqrt(sigma2[ibin][itheta]); //deltaV[ibin][itheta]=V[ibin][itheta]/j01/TMath::BesselJ1(j01)*TMath::Sqrt((TMath::Exp(j01*j01/2./chi[ibin][itheta]/chi[ibin][itheta])+TMath::Exp(-j01*j01/2./chi[ibin][itheta]/chi[ibin][itheta])*TMath::BesselJ0(2*j01))/2./Nevent[ibin]); } sigma2_[ibin]/=ntheta; Vmean[ibin]/=ntheta; sigma2_[ibin]-=TMath::Power(Vmean[ibin]*avgmult[ibin],2); chi_[ibin]=Vmean[ibin]*avgmult[ibin]/TMath::Sqrt(sigma2_[ibin]); //deltaVmean[ibin]+=TMath::Exp(j01*j01/2./chi[ibin][itheta]/chi[ibin][itheta]*TMath::Cos(nn*theta[itheta]))*TMath::BesselJ0(2*j01*TMath::Sin(nn*theta[itheta]/2.))+TMath::Exp(-j01*j01/2./chi[ibin][itheta]/chi[ibin][itheta]*TMath::Cos(nn*theta[itheta]))*TMath::BesselJ0(2*j01*TMath::Cos(nn*theta[itheta]/2.)); for(int itheta=0;itheta<ntheta;itheta++){ deltaV[ibin][itheta]=V[ibin][itheta]/j01/TMath::BesselJ1(j01)*TMath::Sqrt((TMath::Exp(j01*j01/2./chi_[ibin]/chi_[ibin])+TMath::Exp(-j01*j01/2./chi_[ibin]/chi_[ibin])*TMath::BesselJ0(2*j01))/2./Nevent[ibin]); deltaVmean[ibin]+=TMath::Exp(j01*j01/2./chi_[ibin]/chi_[ibin]*TMath::Cos(nn*theta[itheta]))*TMath::BesselJ0(2*j01*TMath::Sin(nn*theta[itheta]/2.))+TMath::Exp(-j01*j01/2./chi_[ibin]/chi_[ibin]*TMath::Cos(nn*theta[itheta]))*TMath::BesselJ0(2*j01*TMath::Cos(nn*theta[itheta]/2.)); fstrV<<ibin<<"\t"<<itheta<<"\t"<<r0[ibin][itheta]<<"\t"<<V[ibin][itheta]<<"\t"<<sigma2[ibin][itheta]<<"\t"<<chi[ibin][itheta]<<"\t"<<deltaV[ibin][itheta]<<endl; } fstrV<<endl; deltaVmean[ibin]=Vmean[ibin]/j01/TMath::BesselJ1(j01)*TMath::Sqrt(deltaVmean[ibin]/ntheta/2./Nevent[ibin]); } fstrV<<endl; fstrV<<"ibin"<<"\t"<<"avgmult"<<"\t"<<"avgpt"<<"\t"<<"Vn mean"<<"\t"<<"Vn mean Error"<<endl; for(int ibin=0;ibin<nbin;ibin++){ fstrV<<ibin<<"\t"<<avgmult[ibin]<<"\t"<<avgpt[ibin]<<"\t"<<Vmean[ibin]<<"\t"<<deltaVmean[ibin]<<endl; } fstrV<<endl; TDirectory *dirsample = outf->mkdir(Form("s_%d",isample)); dirsample->cd(); Nevent.Write("Nevent"); totmultall.Write("totmultall"); Qx1.Write("Qx1"); Qy1.Write("Qy1"); Q2.Write("Q2"); totptall.Write("totptall"); avgmult.Write("avgmult"); avgpt.Write("avgpt"); Vmean.Write("Vmean"); deltaVmean.Write("deltaVmean"); chi_.Write("chi"); for(int ibin=0;ibin<nbin;ibin++){ TDirectory *dir0 = dirsample->mkdir(Form("D_%d",ibin));dir0->cd(); r[ibin].Write("r"); Vmeanmean[ibin]+=Vmean[ibin]/nsamples; deltaVmeanmean[ibin]+=deltaVmean[ibin]/nsamples; sigmaVmeanmean[ibin]+=TMath::Power(Vmean[ibin]/nsamples,2); sigma2[ibin].Write("sigma2"); chi[ibin].Write("chi0"); deltaV[ibin].Write("deltaV"); r0[ibin].Write("r0"); r01[ibin].Write("r01"); V[ibin].Write("V"); for(int itheta=0;itheta<ntheta;itheta++){ TDirectory *dir1 = dir0->mkdir(Form("D_%d",itheta));dir1->cd(); GRe[ibin][itheta].Write(Form("GRe")); GIm[ibin][itheta].Write(Form("GIm")); Gmod2[ibin][itheta].Write(Form("G2")); } } } fstrV<<"ibin"<<"\t"<<"Vn mean mean"<<"\t"<<"Vn mean mean Error"<<"\t"<<"Vn mean deviation"<<endl; for(int ibin=0;ibin<nbin;ibin++){ sigmaVmeanmean[ibin]=TMath::Sqrt(sigmaVmeanmean[ibin]*nsamples-Vmeanmean[ibin]*Vmeanmean[ibin]); fstrV<<endl<<ibin<<"\t"<<Vmeanmean[ibin]<<"\t"<<deltaVmeanmean[ibin]<<"\t"<<sigmaVmeanmean[ibin]<<endl; } outf->cd(); Vmeanmean.Write("Vmeanmean"); deltaVmeanmean.Write("deltaVmeanmean"); sigmaVmeanmean.Write("sigmaVmeanmean"); cout<<endl; outf->Close(); }