//////////////////////////////////////////////////////////////////////////////// // // // AliFemtoCorrFctnPairFractions - A correlation function that analyzes // // two particle correlations with respect to the azimuthal angle (phi) // // and pseudorapidity (eta) difference // // // // Authors: Malgorzata Janik, majanik@cern.ch // // // //////////////////////////////////////////////////////////////////////////////// #include "AliFemtoCorrFctnPairFractions.h" #include "AliFemtoModelHiddenInfo.h" //#include "AliFemtoHisto.hh" #include #include #ifdef __ROOT__ ClassImp(AliFemtoCorrFctnPairFractions) #endif #define PIH 1.57079632679489656 #define PIT 6.28318530717958623 //____________________________ AliFemtoCorrFctnPairFractions::AliFemtoCorrFctnPairFractions(char* title): AliFemtoCorrFctn(), fPairFractions(0), fPairFractionsDen(0), fphiL(0), fphiT(0) { //fphiL = (-(int)(aPhiBins/4)+0.5)*2.*TMath::Pi()/aPhiBins; //fphiT = 2*TMath::Pi()+(-(int)(aPhiBins/4)+0.5)*2.*TMath::Pi()/aPhiBins; TString hname = "hPairFraction"; hname+= title; TString htitle = "Pair Fraction "; htitle+= title; fPairFractions = new TH1F(hname.Data(),htitle.Data(), 9, 0, 9); fPairFractions->GetXaxis()->SetBinLabel(1,"#pi#pi, MC"); fPairFractions->GetXaxis()->SetBinLabel(2,"KK, MC"); fPairFractions->GetXaxis()->SetBinLabel(3,"pp, MC"); fPairFractions->GetXaxis()->SetBinLabel(4,"#pi K, MC"); fPairFractions->GetXaxis()->SetBinLabel(5,"#pi p, MC"); fPairFractions->GetXaxis()->SetBinLabel(6,"Kp, MC"); fPairFractions->GetXaxis()->SetBinLabel(7,"e+, MC"); fPairFractions->GetXaxis()->SetBinLabel(8,"#mu+, MC"); fPairFractions->GetXaxis()->SetBinLabel(9,"Other, MC"); hname = "hPairFractionDen"; hname+= title; htitle = "Pair Fraction in Mixing "; htitle+= title; fPairFractionsDen = new TH1F(hname.Data(),htitle.Data(), 9, 0, 9); fPairFractionsDen->GetXaxis()->SetBinLabel(1,"#pi#pi, MC"); fPairFractionsDen->GetXaxis()->SetBinLabel(2,"KK, MC"); fPairFractionsDen->GetXaxis()->SetBinLabel(3,"pp, MC"); fPairFractionsDen->GetXaxis()->SetBinLabel(4,"#pi K, MC"); fPairFractionsDen->GetXaxis()->SetBinLabel(5,"#pi p, MC"); fPairFractionsDen->GetXaxis()->SetBinLabel(6,"Kp, MC"); fPairFractionsDen->GetXaxis()->SetBinLabel(7,"e+, MC"); fPairFractionsDen->GetXaxis()->SetBinLabel(8,"#mu+, MC"); fPairFractionsDen->GetXaxis()->SetBinLabel(9,"Other, MC"); // to enable error bar calculation... fPairFractions->Sumw2(); fPairFractionsDen->Sumw2(); } //____________________________ AliFemtoCorrFctnPairFractions::AliFemtoCorrFctnPairFractions(const AliFemtoCorrFctnPairFractions& aCorrFctn) : AliFemtoCorrFctn(), fPairFractions(0), fPairFractionsDen(0), fphiL(0), fphiT(0) { // copy constructor if (aCorrFctn.fPairFractions) fPairFractions = new TH1F(*aCorrFctn.fPairFractions); else fPairFractions = 0; if (aCorrFctn.fPairFractions) fPairFractions = new TH1F(*aCorrFctn.fPairFractions); else fPairFractions = 0; fphiL = aCorrFctn.fphiL; fphiT = aCorrFctn.fphiT; } //____________________________ AliFemtoCorrFctnPairFractions::~AliFemtoCorrFctnPairFractions(){ // destructor if(fPairFractions) delete fPairFractions; if(fPairFractionsDen) delete fPairFractionsDen; } //_________________________ AliFemtoCorrFctnPairFractions& AliFemtoCorrFctnPairFractions::operator=(const AliFemtoCorrFctnPairFractions& aCorrFctn) { // assignment operator if (this == &aCorrFctn) return *this; if (aCorrFctn.fPairFractions) fPairFractions = new TH1F(*aCorrFctn.fPairFractions); else fPairFractions = 0; if (aCorrFctn.fPairFractionsDen) fPairFractionsDen = new TH1F(*aCorrFctn.fPairFractionsDen); else fPairFractionsDen = 0; fphiL = aCorrFctn.fphiL; fphiT = aCorrFctn.fphiT; return *this; } //_________________________ void AliFemtoCorrFctnPairFractions::Finish(){ // here is where we should normalize, fit, etc... // we should NOT Draw() the histos (as I had done it below), // since we want to insulate ourselves from root at this level // of the code. Do it instead at root command line with browser. // mShareNumerator->Draw(); // mShareDenominator->Draw(); // mRatio->Draw(); } //____________________________ AliFemtoString AliFemtoCorrFctnPairFractions::Report(){ // create report string stemp = "Pair Fractions Correlation Function Report:\n"; char ctemp[100]; snprintf(ctemp , 100, "Number of entries in numerator:\t%E\n",fPairFractions->GetEntries()); stemp += ctemp; snprintf(ctemp , 100, "Number of entries in denominator:\t%E\n",fPairFractions->GetEntries()); stemp += ctemp; // stemp += mCoulombWeight->Report(); AliFemtoString returnThis = stemp; return returnThis; } //____________________________ void AliFemtoCorrFctnPairFractions::AddRealPair( AliFemtoPair* pair){ // add real (effect) pair //Applying pair cuts if (fPairCut) if (!fPairCut->Pass(pair)) return; Int_t pdg1=0; AliFemtoModelHiddenInfo *info1 = ( AliFemtoModelHiddenInfo *) pair->Track1()->GetHiddenInfo(); if(info1)pdg1 = info1->GetPDGPid(); Int_t pdg2=0; AliFemtoModelHiddenInfo *info2 = ( AliFemtoModelHiddenInfo *) pair->Track2()->GetHiddenInfo(); if(info2)pdg2 = info2->GetPDGPid(); if(abs(pdg1)==211 && abs(pdg2)==211) //pi pi fPairFractions->Fill(0.5); else if(abs(pdg1)==321 && abs(pdg2)==321)// K K fPairFractions->Fill(1.5); else if(abs(pdg1)==2212 && abs(pdg2)==2212)// p p fPairFractions->Fill(2.5); else if((abs(pdg1)==211 && abs(pdg2)==321)||(abs(pdg1)==321 && abs(pdg2)==211))// pi K fPairFractions->Fill(3.5); else if((abs(pdg1)==211 && abs(pdg2)==2212)||(abs(pdg1)==2212 && abs(pdg2)==211))// pi p fPairFractions->Fill(4.5); else if((abs(pdg1)==321 && abs(pdg2)==2212)||(abs(pdg1)==2212 && abs(pdg2)==321))//K p fPairFractions->Fill(5.5); else if(abs(pdg1)==13 || abs(pdg2)==13)//one particle from the pair is electron fPairFractions->Fill(6.5); else if(abs(pdg1)==11 || abs(pdg2)==11)//one particle from the pair is muon fPairFractions->Fill(7.5); else //other { fPairFractions->Fill(8.5); } /*double phi1 = pair->Track1()->Track()->P().Phi(); double phi2 = pair->Track2()->Track()->P().Phi(); double eta1 = pair->Track1()->Track()->P().PseudoRapidity(); double eta2 = pair->Track2()->Track()->P().PseudoRapidity(); double phi1 = pair->Track1()->FourMomentum().Phi(); double phi2 = pair->Track2()->FourMomentum().Phi(); double eta1 = pair->Track1()->FourMomentum().PseudoRapidity(); double eta2 = pair->Track2()->FourMomentum().PseudoRapidity(); double dphi = phi1 - phi2; while (dphifphiT) dphi-=PIT; double deta = eta1 - eta2; double px1 = pair->Track1()->Track()->P().x(); double py1 = pair->Track1()->Track()->P().y(); double px2 = pair->Track2()->Track()->P().x(); double py2 = pair->Track2()->Track()->P().y(); double pt1 = TMath::Hypot(px1, py1); double pt2 = TMath::Hypot(px2, py2); double PionMass = 0.13956995;*/ } //____________________________ void AliFemtoCorrFctnPairFractions::AddMixedPair( AliFemtoPair* pair){ // add mixed (background) pair if (fPairCut) if (!fPairCut->Pass(pair)) return; Int_t pdg1=0; AliFemtoModelHiddenInfo *info1 = ( AliFemtoModelHiddenInfo *) pair->Track1()->GetHiddenInfo(); if(info1)pdg1 = info1->GetPDGPid(); Int_t pdg2=0; AliFemtoModelHiddenInfo *info2 = ( AliFemtoModelHiddenInfo *) pair->Track2()->GetHiddenInfo(); if(info2)pdg2 = info2->GetPDGPid(); if(abs(pdg1)==211 && abs(pdg2)==211) //pi pi fPairFractionsDen->Fill(0.5); else if(abs(pdg1)==321 && abs(pdg2)==321)// K K fPairFractionsDen->Fill(1.5); else if(abs(pdg1)==2212 && abs(pdg2)==2212)// p p fPairFractionsDen->Fill(2.5); else if((abs(pdg1)==211 && abs(pdg2)==321)||(abs(pdg1)==321 && abs(pdg2)==211))// pi K fPairFractionsDen->Fill(3.5); else if((abs(pdg1)==211 && abs(pdg2)==2212)||(abs(pdg1)==2212 && abs(pdg2)==211))// pi p fPairFractionsDen->Fill(4.5); else if((abs(pdg1)==321 && abs(pdg2)==2212)||(abs(pdg1)==2212 && abs(pdg2)==321))//K p fPairFractionsDen->Fill(5.5); else if(abs(pdg1)==13 || abs(pdg2)==13)//one particle from the pair is electron fPairFractionsDen->Fill(6.5); else if(abs(pdg1)==11 || abs(pdg2)==11)//one particle from the pair is muon fPairFractionsDen->Fill(7.5); else //other { fPairFractionsDen->Fill(8.5); } } void AliFemtoCorrFctnPairFractions::WriteHistos() { // Write out result histograms fPairFractions->Write(); fPairFractionsDen->Write(); } TList* AliFemtoCorrFctnPairFractions::GetOutputList() { // Prepare the list of objects to be written to the output TList *tOutputList = new TList(); tOutputList->Add(fPairFractions); tOutputList->Add(fPairFractionsDen); return tOutputList; }