#include "StHiCorrEta.h" #include "TSystem.h" #include "TClonesArray.h" #include "TChain.h" #include #include #include #include #include "TF2.h" #include "TProfile.h" #include "TVector2.h" #include "TString.h" #include "TROOT.h" #include "TObjString.h" #include "../StHiMicroEvent/StHiMicroEvent.h" #include "StarClassLibrary/StThreeVectorF.hh" //define binning const int StHiCorrEta::mNTrigBin=24; const float StHiCorrEta::mMinPtTrig=3; const float StHiCorrEta::mMaxPtTrig=15; const int StHiCorrEta::mNdPhiBin=2*24; // Phi range needs to be a multiple of 1 or 2 pi const float StHiCorrEta::mMindPhi=-TMath::Pi(); const float StHiCorrEta::mMaxdPhi=TMath::Pi(); const int StHiCorrEta::mNdEtaBin=2*20; // 2*20 TPC only const float StHiCorrEta::mMindEta=-2.0; // -2 TPC only const float StHiCorrEta::mMaxdEta=2.0; // 2 TPC only const int StHiCorrEta::mNVtxZBin=12; // Vtx-z binning for mixed events const float StHiCorrEta::mMinVtxZ=-30; const float StHiCorrEta::mMaxVtxZ=30; const float StHiCorrEta::minEtaFtpc=3; const float StHiCorrEta::maxEtaFtpc=3.5; //const double StHiCorrEta::mPtAssocThres[mNAssocThres+1]={2,3,4,5,10}; //last value is dummy for histogramming (standard) const double StHiCorrEta::mPtAssocThres[mNAssocThres+1]={2,2.5,3,3.5,10}; const bool includeFtpc=false; // Help Functions int getHighPtCentBin(int centrality) { Int_t centhighpt=-1; // analog zu highpt ? if (centrality==9) centhighpt=6; else if (centrality==8) centhighpt=5; else if (centrality==7) centhighpt=4; else if (centrality==6) centhighpt=3; else if (centrality==5) centhighpt=2; else if (centrality==4 || centrality==3) centhighpt=1; else if (centrality==2 || centrality==1) centhighpt=0; else centhighpt=-1; return centhighpt; } // ---------------------------------------------------------- StHiCorrEta::StHiCorrEta() { } StHiCorrEta::~StHiCorrEta() { } Float_t StHiCorrEta::dPhi(Float_t phi1, Float_t phi2) { static float twopi=2*TMath::Pi(); Float_t d_phi=phi1-phi2; //if (d_phi < mMindPhi) d_phi += twopi - mMindPhi; //if (d_phi > mMindPhi + twopi) d_phi -= twopi - mMindPhi; //if (d_phi > mMaxdPhi) d_phi = mMindPhi + twopi - d_phi; //if (d_phi < mMindPhi) d_phi += twopi; //if (d_phi > mMindPhi + twopi) d_phi -= twopi - mMindPhi; //if (d_phi > mMaxdPhi) d_phi -= twopi; if (d_phi < mMindPhi) {d_phi = twopi + d_phi;} if (d_phi > mMaxdPhi) {d_phi = d_phi - twopi;} // DEBUG: //if (fabs(d_phi)>TMath::Pi()) //cout<SetXTitle("P_{t} (GeV)"); // mFlowPt = new TH1D("FlowPt","FlowPt",30,0,15); // mFlowPt->SetXTitle("P_{t} (GeV)"); // mFlowPt->Sumw2(); /* mPairYield2D = new TH2D("PairYield2D", "mHistPairYield2D", mNTrigBin, mMinPtTrig, mMaxPtTrig, mNAssocBin, mMinPtAssoc, mMaxPtAssoc); mPairYield2D->SetXTitle("P_{t,trig} (GeV)"); mPairYield2D->SetYTitle("P_{t,assoc} (GeV)"); */ //mEtaPhiPtTrig=new TH3D("EtaPhiPtTrig","EtaPhiPtTrig",20,-1,1,48,-TMath::Pi(),TMath::Pi(),mNTrigBin,mMinPtTrig,mMaxPtTrig); mEtadPhiPtTrig=new TH3D("EtadPhiPtTrig","EtadPhiPtTrig",20,-1,1,mNdPhiBin,mMindPhi,mMaxdPhi,mNTrigBin,mMinPtTrig,mMaxPtTrig); for (Int_t iAssoc=0; iAssoc < mNAssocThres; iAssoc++) { Char_t hname[64]; Char_t htitle[128]; // Signal Histos sprintf(hname,"PtTrigdEtadPhi_%d",iAssoc); sprintf(htitle,"PtTrigdEtadPhi_%d: P_{t,assoc} > %4.2f GeV", iAssoc,mPtAssocThres[iAssoc]); mPtTrigdEtadPhi[iAssoc] = new TH3D(hname,htitle, mNTrigBin, mMinPtTrig, mMaxPtTrig, mNdEtaBin, mMindEta, mMaxdEta, mNdPhiBin, mMindPhi, mMaxdPhi ); mPtTrigdEtadPhi[iAssoc]->SetXTitle("P_{t,trig} (GeV)"); mPtTrigdEtadPhi[iAssoc]->SetYTitle("#Delta #eta"); mPtTrigdEtadPhi[iAssoc]->SetZTitle("#Delta #phi"); // Mixed Histos sprintf(hname,"PtTrigdEtadPhiMix_%d",iAssoc); sprintf(htitle,"PtTrigdEtadPhiMix_%d: P_{t,assoc} > %4.2f GeV", iAssoc,mPtAssocThres[iAssoc]); mPtTrigdEtadPhiMix[iAssoc] = new TH3D(hname,htitle, mNTrigBin, mMinPtTrig, mMaxPtTrig, mNdEtaBin, mMindEta, mMaxdEta, mNdPhiBin, mMindPhi, mMaxdPhi ); mPtTrigdEtadPhiMix[iAssoc]->SetXTitle("P_{t,trig} (GeV)"); mPtTrigdEtadPhiMix[iAssoc]->SetYTitle("#Delta #eta"); mPtTrigdEtadPhiMix[iAssoc]->SetZTitle("#Delta #phi"); } mNTrigPtTrig = new TH1D("NTrigPtTrig", "NTrigPtTrig", mNTrigBin, mMinPtTrig, mMaxPtTrig); mNTrigPtTrig->SetXTitle("P_{t,trig} (GeV)"); // Efficiency histos mAssocEffPtTrigPtAssoc = new TH2D("AssocEffPtTrigPtAssoc", "AssocEffPtTrigPtAssoc", mNTrigBin, mMinPtTrig, mMaxPtTrig, mNAssocThres, mPtAssocThres); mAssocEffPtTrigPtAssoc->Sumw2(); mAssocEffPtTrigPtAssoc->SetXTitle("P_{t,trig} (GeV)"); mAssocEffPtTrigPtAssoc->SetYTitle("P_{t,assoc} (GeV)"); // mPtTrigPtAssocFlowAssoc = new TH2D("PtTrigPtAssocFlowAssoc", "PtTrigPtAssocFlowAssoc", // mNTrigBin, mMinPtTrig, mMaxPtTrig, // mNAssocThres, mPtAssocThres); // mPtTrigPtAssocFlowAssoc->Sumw2(); // mPtTrigPtAssocFlowAssoc->SetXTitle("P_{t,trig} (GeV)"); // mPtTrigPtAssocFlowAssoc->SetYTitle("P_{t,assoc} (GeV)"); // mPtTrigPtAssocFlowTrig = new TH2D("PtTrigPtAssocFlowTrig", "PtTrigPtAssocFlowTrig", // mNTrigBin, mMinPtTrig, mMaxPtTrig, // mNAssocThres, mPtAssocThres); // mPtTrigPtAssocFlowTrig->Sumw2(); // mPtTrigPtAssocFlowTrig->SetXTitle("P_{t,trig} (GeV)"); // mPtTrigPtAssocFlowTrig->SetYTitle("P_{t,assoc} (GeV)"); } //----------------------------------------------------------------------- void StHiCorrEta::histofill(Int_t maxevents, Int_t cent, Float_t etacut,Int_t mId) { //_____________________________ //Float_t phi_bite=(Float_t)phi_bite_deg/180.*TMath::Pi(); TF2* mEfficiencyMap; TString mEfficiencyFileName; TString fName = "fEfficiency"; /* if(cent==99) mEfficiencyFileName="effic/P02gd.Highpt_minbias.M1311ny.efficiencyfcn.hist.root"; //if(cent==1) //mEfficiencyFileName="effic/P02gd.Highpt_minbias.01311ny.efficiencyfcn.hist.root"; if(cent==0) mEfficiencyFileName="effic/P02gd.Highpt_minbias.01311ny.efficiencyfcn.hist.root"; if(cent==1) mEfficiencyFileName="effic/P02gd.Highpt_minbias.11311ny.efficiencyfcn.hist.root"; //if(cent==2) //mEfficiencyFileName="effic/P02gd.Highpt_minbias.11311ny.efficiencyfcn.hist.root"; if(cent==2) mEfficiencyFileName="effic/P02gd.Highpt_minbias.21311ny.efficiencyfcn.hist.root"; if(cent==3) mEfficiencyFileName="effic/P02gd.Highpt_minbias.31311ny.efficiencyfcn.hist.root"; if(cent==4) mEfficiencyFileName="effic/P02gd.Highpt_minbias.41311ny.efficiencyfcn.hist.root"; if(cent==5) mEfficiencyFileName="effic/P02gd.Highpt_minbias.51311ny.efficiencyfcn.hist.root"; if(cent==6) mEfficiencyFileName="effic/P02gd.Highpt_minbias.61311ny.efficiencyfcn.hist.root"; */ /* if(cent==99) mEfficiencyFileName="effic/P02gd.HighpT_embedding_minbias.M1211ny.efficiencyfcn.hist.root"; //if(cent==1) //mEfficiencyFileName="effic/P02gd.HighpT_embedding_minbias.01311ny.efficiencyfcn.hist.root"; if(cent==0) mEfficiencyFileName="effic/P02gd.HighpT_embedding_minbias.01211ny.efficiencyfcn.hist.root"; if(cent==1) mEfficiencyFileName="effic/P02gd.HighpT_embedding_minbias.11211ny.efficiencyfcn.hist.root"; //if(cent==2) //mEfficiencyFileName="effic/P02gd.HighpT_embedding_minbias.11311ny.efficiencyfcn.hist.root"; if(cent==2) mEfficiencyFileName="effic/P02gd.HighpT_embedding_minbias.21211ny.efficiencyfcn.hist.root"; if(cent==3) mEfficiencyFileName="effic/P02gd.HighpT_embedding_minbias.31211ny.efficiencyfcn.hist.root"; if(cent==4) mEfficiencyFileName="effic/P02gd.HighpT_embedding_minbias.41211ny.efficiencyfcn.hist.root"; if(cent==5) mEfficiencyFileName="effic/P02gd.HighpT_embedding_minbias.51211ny.efficiencyfcn.hist.root"; if(cent==6) mEfficiencyFileName="effic/P02gd.HighpT_embedding_minbias.61211ny.efficiencyfcn.hist.root"; */ if(cent==99) mEfficiencyFileName="effic/P02gd.HighpT_embedding_minbias.M1211ny.efficiencyfcn.hist.root"; if(cent==100) mEfficiencyFileName="effic/Piplusminus.61211ny.efficiencyfcn.hist.root"; //if(cent==1) //mEfficiencyFileName="effic/Piplusminus.01211ny.efficiencyfcn.hist.root"; if(cent==0) mEfficiencyFileName="effic/Piplusminus.01211ny.efficiencyfcn.hist.root"; if(cent==1) mEfficiencyFileName="effic/Piplusminus.11211ny.efficiencyfcn.hist.root"; //if(cent==2) //mEfficiencyFileName="effic/Piplusminus.11211ny.efficiencyfcn.hist.root"; if(cent==2) mEfficiencyFileName="effic/Piplusminus.21211ny.efficiencyfcn.hist.root"; if(cent==3) mEfficiencyFileName="effic/Piplusminus.31211ny.efficiencyfcn.hist.root"; if(cent==4) mEfficiencyFileName="effic/Piplusminus.41211ny.efficiencyfcn.hist.root"; if(cent==5) mEfficiencyFileName="effic/Piplusminus.51211ny.efficiencyfcn.hist.root"; if(cent==6) mEfficiencyFileName="effic/Piplusminus.61211ny.efficiencyfcn.hist.root"; TFile* file=0; if(mEfficiencyFileName==""){ std::cout << "no efficiency file set " << std::endl; } else{ file=new TFile(mEfficiencyFileName.Data()); if(!file ||!file->IsOpen()){ std::cout << "Cannot find efficiency file : " << mEfficiencyFileName << std::endl; } else{ mEfficiencyMap = (TF2*)file->Get(fName.Data()); delete file; } } if(!mEfficiencyMap){ std::cout << "Cannot find efficency function : " << fName.Data() << std::endl; std::cout << "WARNING-USING DUMMY EFFIENCY" << std::endl; mEfficiencyMap = new TF2("fEfficiency","1"); } std::cout << "\tefficiency file : " << mEfficiencyFileName << std::endl; std::cout << "\tefficiency fcn title : " << mEfficiencyMap->GetTitle() << std::endl; TStopwatch timer; timer.Start(); Float_t mbytes =0; StHiMicroEvent* event = new StHiMicroEvent(); TChain* pPicoChain = new TChain("StHiMicroTree"); pPicoChain->SetBranchAddress("StHiMicroEvent", &event); for(int ii=0; iiGetLast()+1;ii++){ //cout << "Adding file " << ((TObjString*) mInputFileList->At(ii))->GetString() << endl; pPicoChain->Add(((TObjString*) mInputFileList->At(ii))->GetString()); } cout<<" ..."<GetEntries() << endl; TString mLastFile=((TObjString*) mInputFileList->At(mInputFileList->GetLast()))->GetString(); // DEBUG: //mLastFile="/eliza2/rnc/putschke/himicro_mid/st_physics_5033127_raw_4010003.himicro.root"; cout<<"Last file in list : "<FindObject("histos.root"); if (hfile) hfile->Close(); char fileName[80]; /* if(cent==21) sprintf(fileName, "root.flow.pttrig_%d-%d_GeV/ana%2d.root", int(pttriglow),int(pttrighigh),cent); else */ //sprintf(fileName, "root.flow.corr/ana%2d.root",cent+10); //Char_t outDir[256]; //sprintf(outDir,"deltaEta.eta_cut%02f",(etacut)); //if (gSystem->OpenDirectory(outDir)==0) //gSystem->mkdir(outDir); if (cent<99) sprintf(fileName, "deltaEtaCent%1d.root",cent); else if (cent==99) sprintf(fileName, "deltaEtaMinBias.root"); else if (cent==100) sprintf(fileName, "deltaEtaCentral_mId_%1d.root",mId); //sprintf(fileName, "root.flow/ana.central.%2d.root", cent+10); hfile = new TFile(fileName,"RECREATE","file with histograms"); initHistos(); //Float_t pi=TMath::Pi(); //Float_t twopi=2*pi; Int_t nev=0; long int countTracks=0; int mixed_events_ready[mNVtxZBin]; const int nmixed_events=50; // 50 events mixed Float_t mphi[mNVtxZBin][nmixed_events+1][1000]; Float_t meta[mNVtxZBin][nmixed_events+1][1000]; Float_t mpt[mNVtxZBin][nmixed_events+1][1000]; Int_t n_associated_per_event[mNVtxZBin][nmixed_events+1]; Int_t cur_mix_event[mNVtxZBin]; //Int_t nres_events=0; //Int_t assoc_inplane=0; //Int_t assoc_outplane=0; Int_t assoc_simple=0; for(Int_t i_vtx_z=0;i_vtx_z < mNVtxZBin; i_vtx_z++){ for(Int_t imixed_event=0;imixed_eventGetEntries(); i++){ for(Int_t i=0; iClear(); if(nev%10000 == 0) cout << "event " << nev << endl; if(nev>maxevents)break; mbytes += pPicoChain->GetEntry(i)*1.e-6; newfile=pPicoChain->GetFile()->GetName(); if (mLastFile==newfile) break; if(newfile != oldfile) cout << "analyzing file " << pPicoChain->GetFile()->GetName() << endl; oldfile=newfile; nev++; // select only events with the trigger particle Bool_t goodevent=0; // centrality check if (cent<99) if(getHighPtCentBin(event->Centrality())!=cent) continue; // check Vertex-z position if (fabs(event->VertexZ())>30) continue; for (Int_t nrt=0; nrt < event->NTrack(); nrt++) { StHiMicroTrack* track = (StHiMicroTrack*) event->tracks()->At(nrt); if(track->FitPts()<20)continue; if(fabs(track->DcaGl())>1.0)continue; if(fabs(track->EtaPr())>etacut)continue; if(track->PtPr()>mMaxPtTrig)continue; if(track->PtPr()nSigmaPion()<FitPts()<20)continue; if(fabs(tr->DcaGl())>1.0)continue; if(fabs(tr->EtaPr())>etacut)continue; if(tr->PtPr()