#include "AliAnalysisNucleiMass.h" // ROOT includes #include #include "TChain.h" // AliRoot includes #include "AliInputEventHandler.h" #include "AliAODEvent.h" #include "AliESDEvent.h" #include "AliVEvent.h" #include "AliAODTrack.h" #include "AliAODPid.h" #include "AliCentrality.h" #include "TH2F.h" #include "TH2D.h" #include "TH1F.h" #include "TF1.h" #include "TGraph.h" #include "TProfile.h" #include "AliESDtrackCuts.h" #include "AliAnalysisManager.h" #include "TFile.h" ClassImp(AliAnalysisNucleiMass) //_____________________________________________________________________________ AliAnalysisNucleiMass::AliAnalysisNucleiMass(): AliAnalysisTaskSE(), fMC(kFALSE), FilterBit(16), NminTPCcluster(0), DCAzCUT(100), DCAxyCUT(0.1), kTPCcut(kTRUE), kTPC(0), kTOF(0), iBconf(0), isSignalCheck(kTRUE), NsigmaTPCCut(2.0), MomType(1), fAOD(NULL), fESD(NULL), fEvent(NULL), fPIDResponse(NULL), fmism(NULL), hmism(NULL), fchDist(NULL), hChDist(NULL) /*fBetaTofVSp(NULL), fCentrality(NULL), hNevent(NULL), hNeventSelected(NULL), hTOFSignalPion(NULL), hZvertex(NULL)*/ { // Default constructor (should not be used) fList1[0]=new TList(); fList1[0]->SetName("results"); fList1[1]=new TList(); fList1[1]->SetName("results2"); } //______________________________________________________________________________ AliAnalysisNucleiMass::AliAnalysisNucleiMass(const char *name): AliAnalysisTaskSE(name), fMC(kFALSE), FilterBit(16), NminTPCcluster(0), DCAzCUT(100), DCAxyCUT(0.1), kTPCcut(kTRUE), kTPC(0), kTOF(0), iBconf(0), isSignalCheck(kTRUE), NsigmaTPCCut(2.0), MomType(1), fAOD(NULL), fESD(NULL), fEvent(NULL), fPIDResponse(NULL), fmism(NULL), hmism(NULL), fchDist(NULL), hChDist(NULL) /*fBetaTofVSp(NULL), fCentrality(NULL), hNevent(NULL), hNeventSelected(NULL), hTOFSignalPion(NULL), hZvertex(NULL)*/ { fList1[0]=new TList(); DefineOutput(1, TList::Class()); fList1[0]->SetName("results"); fList1[1]=new TList(); DefineOutput(2, TList::Class()); fList1[1]->SetName("results2"); } //_____________________________________________________________________________ AliAnalysisNucleiMass::~AliAnalysisNucleiMass() { if(fList1[0]) delete fList1[0]; if(fList1[1]) delete fList1[1]; } //______________________________________________________________________________ void AliAnalysisNucleiMass::UserCreateOutputObjects() { fmism = new TFile("$ALICE_ROOT/TOF/data/TOFmismatchDistr.root"); hmism = (TH1F *)fmism->Get("TOFmismDistr"); fchDist = new TFile("$ALICE_ROOT/TOF/data/TOFchannelDist.root"); hChDist = (TH1D *)fchDist->Get("hTOFchanDist"); for(Int_t iB=0;iB<2;iB++) { hNevent[iB] = new TH1F("hNevent_Analyzed","Centrality(analyzed)",20,0,100); hNeventSelected[iB] = new TH1F("hNevent_Selected","Centrality(selected)",20,0,100); hZvertex[iB] = new TH1F("hZvertex","Vertex distribution of selected events; z vertex (cm)",240,-30,30); hEtaDistribution[iB] = new TH1F("hEtaDistribution","Eta distribution of the tracks; |#eta|",11,-0.1,1.0); hTOFSignalPion[iB] = new TH1F("hTOFSignalPion","TOF signal 0.9GetYaxis()->CenterTitle(); fNsigmaTOF[iB][i] = new TH2F(namePart_par_TOF[i],namePart_title_TOF[i],125,0,5,100,-5,5); fNsigmaTOF[iB][i]->GetYaxis()->CenterTitle(); hDeDxExp[iB][i] = new TProfile(namePart_par_ProfileTPC[i],namePart_title_ProfileTPC[i],500,0,5,0,1000,""); hBetaExp[iB][i] = new TProfile(namePart_par_ProfileTOF[i],namePart_title_ProfileTOF[i],400,0,5,0.4,1.05,""); } for(Int_t iS=0;iS<18;iS++) { fNsigmaTPCvsP_kTOFtrue[iB][iS] = new TH2F(namePart_par_TPCvsP_kTOFtrue[iS],namePart_title_TPCvsP_kTOFtrue[iS],125,0,5,100,-5,5); fNsigmaTPCvsP_kTOFtrue[iB][iS]->GetYaxis()->CenterTitle(); } for (Int_t i=0;i<18;i++) fM2vsP[iB][i] = new TH2F(name_par_MvsP[i],name_title_MvsP[i],8000,0,10,200,0,10); for (Int_t i=0;i<18;i++) fM2vsP_DCAxyCut[iB][i] = new TH2F(name_par_MvsP_DCAxyCut[i],name_title_MvsP_DCAxyCut[i],8000,0,10,200,0,10); } else{//IsSignalCheck is kFALSE fdEdxVSp[iB][0] = new TH2F("fdEdxVSp","dE/dx vs p; p/|Z| (GeV/c); dE/dx_{TPC} (a.u.)",1,0,5,1,0,1000); fdEdxVSp[iB][1] = new TH2F("fdEdxVSp_pos","dE/dx vs p positive charge; p/|Z| (GeV/c); dE/dx_{TPC} (a.u.)",1,0,5,1,0,1000); fdEdxVSp[iB][2] = new TH2F("fdEdxVSp_neg","dE/dx vs p negative charge; p/|Z| (GeV/c); dE/dx_{TPC} (a.u.)",1,0,5,1,0,1000); fBetaTofVSp[iB] = new TH2F("fBetaTofVSp","#beta_{TOF} vs p; p(GeV/c); #beta_{TOF}",1,0,5,1,0.4,1.05); fM2vsP_NoTpcCut[iB][0] = new TH2F("fM2vsP_NoTpcCut","M_{TOF}^{2} vs p; M_{TOF}^{2}/Z^{2} (GeV^{2}/c^{4}); p/|Z| (GeV/c)",1,0,10,1,0,8);//1250,...,80 fM2vsP_NoTpcCut[iB][1] = new TH2F("fM2vsP_NoTpcCut_Positive","M_{TOF}^{2} vs p Pos Part; M_{TOF}^{2}/Z^{2} (GeV^{2}/c^{4}); p/|Z| (GeV/c)",1,0,10,1,0,8); fM2vsP_NoTpcCut[iB][2] = new TH2F("fM2vsP_NoTpcCut_Negative","M_{TOF}^{2} vs p Neg Part; M_{TOF}^{2}/Z^{2} (GeV^{2}/c^{4}); p/|Z| (GeV/c)",1,0,10,1,0,8); fM2vsP_NoTpcCut_DCAxyCut[iB][0] = new TH2F("fM2vsP_NoTpcCut_DCAxycut","M_{TOF}^{2} vs p with DCAxy cut; M_{TOF}^{2}/Z^{2} (GeV^{2}/c^{4}); p/|Z| (GeV/c)",1,0,10,1,0,8); fM2vsP_NoTpcCut_DCAxyCut[iB][1] = new TH2F("fM2vsP_NoTpcCut_Positive_DCAxycut","M_{TOF}^{2} vs p Pos Part with DCAxy cut; M_{TOF}^{2}/Z^{2} (GeV^{2}/c^{4}); p/|Z| (GeV/c)",1,0,10,1,0,8); fM2vsP_NoTpcCut_DCAxyCut[iB][2] = new TH2F("fM2vsP_NoTpcCut_Negative_DCAxycut","M_{TOF}^{2} vs p Neg Part with DCAxy cut; M_{TOF}^{2}/Z^{2} (GeV^{2}/c^{4}); p/|Z| (GeV/c)",1,0,10,1,0,8); /*fM2vsP_NoTpcCut[iB][0] = new TH2F("fM2vsP_NoTpcCut","M_{TOF}^{2} vs p; M_{TOF}^{2}/Z^{2} (GeV^{2}/c^{4}); p/|Z| (GeV/c)",1,0,10,1,0,10); fM2vsP_NoTpcCut[iB][1] = new TH2F("fM2vsP_NoTpcCut_Positive","M_{TOF}^{2} vs p Pos Part; M_{TOF}^{2}/Z^{2} (GeV^{2}/c^{4}); p/|Z| (GeV/c)",1,0,10,1,0,10); fM2vsP_NoTpcCut[iB][2] = new TH2F("fM2vsP_NoTpcCut_Negative","M_{TOF}^{2} vs p Neg Part; M_{TOF}^{2}/Z^{2} (GeV^{2}/c^{4}); p/|Z| (GeV/c)",1,0,10,1,0,10); fM2vsP_NoTpcCut_DCAxyCut[iB][0] = new TH2F("fM2vsP_NoTpcCut_DCAxycut","M_{TOF}^{2} vs p with DCAxy cut; M_{TOF}^{2}/Z^{2} (GeV^{2}/c^{4}); p/|Z| (GeV/c)",1,0,10,1,0,10); fM2vsP_NoTpcCut_DCAxyCut[iB][1] = new TH2F("fM2vsP_NoTpcCut_Positive_DCAxycut","M_{TOF}^{2} vs p Pos Part with DCAxy cut; M_{TOF}^{2}/Z^{2} (GeV^{2}/c^{4}); p/|Z| (GeV/c)",1,0,10,1,0,10); fM2vsP_NoTpcCut_DCAxyCut[iB][2] = new TH2F("fM2vsP_NoTpcCut_Negative_DCAxycut","M_{TOF}^{2} vs p Neg Part with DCAxy cut; M_{TOF}^{2}/Z^{2} (GeV^{2}/c^{4}); p/|Z| (GeV/c)",1,0,10,1,0,10);*/ fM2vsZ[iB][0] = new TH2F("fM2vsZ","M_{TOF}^{2} vs Z^{2} Integrated p_{T};Z;M_{TOF}^{2}/Z^{2} (GeV^{2}/c^{4})",1,-4,4,1,0,10); fM2vsZ[iB][1] = new TH2F("fM2vsZ_0.3pT0.5","M_{TOF}^{2} vs Z^{2} 0.3GetYaxis()->CenterTitle(); fNsigmaTOF[iB][i] = new TH2F(namePart_par_TOF[i],namePart_title_TOF[i],1,0,5,1,-5,5); fNsigmaTOF[iB][i]->GetYaxis()->CenterTitle(); hDeDxExp[iB][i] = new TProfile(namePart_par_ProfileTPC[i],namePart_title_ProfileTPC[i],1,0,5,0,1000,""); hBetaExp[iB][i] = new TProfile(namePart_par_ProfileTOF[i],namePart_title_ProfileTOF[i],1,0,5,0.4,1.05,""); } for(Int_t iS=0;iS<18;iS++) { fNsigmaTPCvsP_kTOFtrue[iB][iS] = new TH2F(namePart_par_TPCvsP_kTOFtrue[iS],namePart_title_TPCvsP_kTOFtrue[iS],1,0,5,1,-5,5); fNsigmaTPCvsP_kTOFtrue[iB][iS]->GetYaxis()->CenterTitle(); } /*for (Int_t i=0;i<18;i++) fM2vsP[iB][i] = new TH2F(name_par_MvsP[i],name_title_MvsP[i],1,0,10,1,0,10); for (Int_t i=0;i<18;i++) fM2vsP_DCAxyCut[iB][i] = new TH2F(name_par_MvsP_DCAxyCut[i],name_title_MvsP_DCAxyCut[i],1,0,10,1,0,10);*/ for (Int_t i=0;i<18;i++) fM2vsP[iB][i] = new TH2F(name_par_MvsP[i],name_title_MvsP[i],1000,0,6,60,0,6);//1250,0,10,80,0,8 for (Int_t i=0;i<18;i++) fM2vsP_DCAxyCut[iB][i] = new TH2F(name_par_MvsP_DCAxyCut[i],name_title_MvsP_DCAxyCut[i],1000,0,6,60,0,6);//1250,0,10,80,0,8 } Float_t binPt[nbin+1]; for(Int_t i=0;iGetXaxis()->CenterTitle(); hDCAz[iB][iS][j] = new TH1D(nameDCAz[0][iS][j],titleDCAz[0][iS][j],875,-3.5,3.5);//125 bins hDCAz[iB][iS][j]->GetXaxis()->CenterTitle(); hDCAxy_pbin[iB][iS][j] = new TH1D(nameDCAxy[1][iS][j],titleDCAxy[1][iS][j],875,-3.5,3.5);//125 bins hDCAxy_pbin[iB][iS][j]->GetXaxis()->CenterTitle(); hDCAz_pbin[iB][iS][j] = new TH1D(nameDCAz[1][iS][j],titleDCAz[1][iS][j],875,-3.5,3.5);//125 bins hDCAz_pbin[iB][iS][j]->GetXaxis()->CenterTitle(); hDCAxy_pTpcbin[iB][iS][j] = new TH1D(nameDCAxy[2][iS][j],titleDCAxy[2][iS][j],875,-3.5,3.5);//125 bins hDCAxy_pTpcbin[iB][iS][j]->GetXaxis()->CenterTitle(); hDCAz_pTpcbin[iB][iS][j] = new TH1D(nameDCAz[2][iS][j],titleDCAz[2][iS][j],875,-3.5,3.5);//125 bins hDCAz_pTpcbin[iB][iS][j]->GetXaxis()->CenterTitle(); } } for(Int_t iBinMom=0;iBinMom<3;iBinMom++) { for(Int_t j=0;jGetXaxis()->CenterTitle(); } } const Int_t BinM2pT[9]={1,1,600,250,500,500,1000,400,600}; const Float_t RangeM2min[9]={0.0,0.0,-0.1,0.0,0.0,0.0,0.0,0.0,0.0}; const Float_t RangeM2max[9]={1.0,1.0,0.5,2.0,4.0,6.0,12.0,4.0,6.0}; for(Int_t iSp=0;iSp<9;iSp++) { for(Int_t j=0;jAdd(hNeventSelected[iB]); fList1[iB]->Add(hNevent[iB]); fList1[iB]->Add(hZvertex[iB]); fList1[iB]->Add(hEtaDistribution[iB]); fList1[iB]->Add(hTOFSignalPion[iB]); for(Int_t iS=0;iS<18;iS++) fList1[iB]->Add(fNsigmaTPCvsP_kTOFtrue[iB][iS]); for(Int_t i=0;i<3;i++) fList1[iB]->Add(fdEdxVSp[iB][i]); for(Int_t i=0;i<9;i++) fList1[iB]->Add(hDeDxExp[iB][i]); fList1[iB]->Add(fBetaTofVSp[iB]); for(Int_t i=0;i<9;i++) fList1[iB]->Add(hBetaExp[iB][i]); for(Int_t i=0;i<9;i++) fList1[iB]->Add(fNsigmaTPC[iB][i]); for(Int_t i=0;i<9;i++) fList1[iB]->Add(fNsigmaTOF[iB][i]); for(Int_t i=0;i<15;i++) fList1[iB]->Add(fM2vsZ[iB][i]); for(Int_t i=0;i<15;i++) fList1[iB]->Add(fM2vsZwithTPC[iB][i]); for(Int_t i=0;i<3;i++) fList1[iB]->Add(fM2vsP_NoTpcCut[iB][i]); for(Int_t i=3;i<6;i++) {//for(Int_t i=0;i<18;i++) fList1[iB]->Add(fM2vsP[iB][i]); fList1[iB]->Add(fM2vsP[iB][i+9]);//via-^ } for(Int_t i=0;i<3;i++) fList1[iB]->Add(fM2vsP_NoTpcCut_DCAxyCut[iB][i]); for(Int_t i=3;i<6;i++) {//for(Int_t i=0;i<18;i++) fList1[iB]->Add(fM2vsP_DCAxyCut[iB][i]); fList1[iB]->Add(fM2vsP_DCAxyCut[iB][i+9]);//via-^ } if(MomType & 1) { for(Int_t iSp=3;iSp<6;iSp++) {//for(Int_t iSp=2;iSp<9;iSp++) for(Int_t j=0;jAdd(hDCAxy[iB][iSp][j]); fList1[iB]->Add(hDCAz[iB][iSp][j]); fList1[iB]->Add(hM2CutDCAxy[iB][iSp][j]); fList1[iB]->Add(hM2CutGroundDCAxy[iB][iSp][j]); fList1[iB]->Add(hDCAxy[iB][iSp+9][j]); fList1[iB]->Add(hDCAz[iB][iSp+9][j]); fList1[iB]->Add(hM2CutDCAxy[iB][iSp+9][j]); fList1[iB]->Add(hM2CutGroundDCAxy[iB][iSp+9][j]); } } } if(MomType & 2) { for(Int_t iSp=3;iSp<6;iSp++) {//for(Int_t iSp=2;iSp<9;iSp++) for(Int_t j=0;jAdd(hDCAxy_pbin[iB][iSp][j]); fList1[iB]->Add(hDCAz_pbin[iB][iSp][j]); fList1[iB]->Add(hM2CutDCAxy_pbin[iB][iSp][j]); fList1[iB]->Add(hM2CutGroundDCAxy_pbin[iB][iSp][j]); fList1[iB]->Add(hDCAxy_pbin[iB][iSp+9][j]); fList1[iB]->Add(hDCAz_pbin[iB][iSp+9][j]); fList1[iB]->Add(hM2CutDCAxy_pbin[iB][iSp+9][j]); fList1[iB]->Add(hM2CutGroundDCAxy_pbin[iB][iSp+9][j]); } } } if(MomType & 4) { for(Int_t iSp=3;iSp<6;iSp++) {//for(Int_t iSp=2;iSp<9;iSp++) for(Int_t j=0;jAdd(hDCAxy_pTpcbin[iB][iSp][j]); fList1[iB]->Add(hDCAz_pTpcbin[iB][iSp][j]); fList1[iB]->Add(hM2CutDCAxy_pTpcbin[iB][iSp][j]); fList1[iB]->Add(hM2CutGroundDCAxy_pTpcbin[iB][iSp][j]); fList1[iB]->Add(hDCAxy_pTpcbin[iB][iSp+9][j]); fList1[iB]->Add(hDCAz_pTpcbin[iB][iSp+9][j]); fList1[iB]->Add(hM2CutDCAxy_pTpcbin[iB][iSp+9][j]); fList1[iB]->Add(hM2CutGroundDCAxy_pTpcbin[iB][iSp+9][j]); } } } if(MomType & 1) { for(Int_t j=0;jAdd(hM2BkgMism[iB][0][j]); } } if(MomType & 2) { for(Int_t j=0;jAdd(hM2BkgMism[iB][1][j]); } } if(MomType & 4) { for(Int_t j=0;jAdd(hM2BkgMism[iB][2][j]); } } // Post output data. PostData(1, fList1[0]); PostData(2, fList1[1]); }//close the iB loop } //______________________________________________________________________________ void AliAnalysisNucleiMass::UserExec(Option_t *) { // Main loop // Called for each event fAOD = dynamic_cast(InputEvent()); fESD = dynamic_cast(InputEvent()); if(!fAOD && !fESD){ Printf("%s:%d AODEvent and ESDEvent not found in Input Manager",(char*)__FILE__,__LINE__); return; } if(fESD) fEvent = fESD; else fEvent = fAOD; AliAnalysisManager *man=AliAnalysisManager::GetAnalysisManager(); AliInputEventHandler* inputHandler = (AliInputEventHandler*) (man->GetInputEventHandler()); fPIDResponse=inputHandler->GetPIDResponse(); // data member di tipo "const AliPIDResponse *fPIDResponse;" //Centrality Float_t v0Centr = -10.; //Float_t trkCentr = -10.; AliCentrality *centrality = fEvent->GetCentrality(); if (centrality){ v0Centr = centrality->GetCentralityPercentile("V0M"); // VZERO //trkCentr = centrality->GetCentralityPercentile("TRK"); // TPC } Double_t fBfield=fEvent->GetMagneticField(); if(fBfield<0.0) iBconf=0;//B-- else iBconf=1;//B++ hNeventSelected[iBconf]->Fill(v0Centr);//selected events //const AliAODVertex* vtxEVENT = (AliAODVertex*) fEvent->GetPrimaryVertex(); const AliVVertex* vtxEVENT = fEvent->GetPrimaryVertex(); Float_t zvtx = 10000.0; if(vtxEVENT->GetNContributors()>0) zvtx = vtxEVENT->GetZ(); hZvertex[iBconf]->Fill(zvtx); if(TMath::Abs(zvtx) < 10.0){ // consistency cut on centrality selection AND d(zPrimaryVertez;NominalPointInteraction)<10cm //Bool_t isTrack=1; Int_t nTracks = fEvent->GetNumberOfTracks(); if(v0Centr>=fCentrality[0] && v0Centr<=fCentrality[1]) {//window cut centrality open hNevent[iBconf]->Fill(v0Centr);//analyzed events for(Int_t iT = 0; iT < nTracks; iT++) { // loop on the tracks AliVTrack* track = (AliVTrack *) fEvent->GetTrack(iT); if (!track){ continue; } Bool_t trkFlag = 0; trkFlag = ((AliAODTrack *) track)->TestFilterBit(FilterBit); //TestFilterBit(16) -- Standard Cuts with very loose DCA: GetStandardITSTPCTrackCuts2011(kFALSE) && SetMaxDCAToVertexXY(2.4) && SetMaxDCAToVertexZ(3.2) && SetDCaToVertex2D(kTRUE) //TestFilterBit(32) (STARDARD) -- Standard Cuts with very tight DCA cut ( 7sigma^primaries: 7*(0.0015+0.0050/pt^1.1) ) : GetStandardITSTPCTrackCuts2011(). Int_t NTpcCls=track->GetTPCNcls(); if(NTpcCls>NminTPCcluster) kTPC=kTRUE; else kTPC=kFALSE; Float_t etaAbs = TMath::Abs(track->Eta()); //if(etaAbsEtaLimit[1]) continue; if(etaAbsEtaLimit[1]) continue; if ((track->Pt() < 0.2) || !trkFlag || !kTPC){ continue; } Double_t b[2] = {-99., -99.}; Double_t bCov[3] = {-99., -99., -99.}; if (!track->PropagateToDCA(fEvent->GetPrimaryVertex(), fEvent->GetMagneticField(), 100., b, bCov)) continue; //Float_t etaAbs = TMath::Abs(track->Eta()); Float_t charge = (Float_t)track->Charge(); Float_t p = track->P(); Float_t pt = track->Pt(); Float_t dedx = track->GetTPCsignal(); Float_t tof = track->GetTOFsignal()-fPIDResponse->GetTOFResponse().GetStartTime(p); Float_t pTPC = track->GetTPCmomentum(); Float_t beta = 0.0; Float_t M2 = 1000.0; Float_t M = 1000.0; Float_t Z2 = 1000.0; Float_t DCAxy = b[0]; Float_t DCAz = b[1]; hEtaDistribution[iBconf]->Fill(etaAbs); if(TMath::Abs(DCAz)>DCAzCUT)//CUT ON DCAz continue; Bool_t kTpcPure; kTpcPure = track->GetTPCsignal()>10; if(kTpcPure==kFALSE) continue; kTOF = (track->GetStatus() & AliVTrack::kTOFout) && (track->GetStatus() & AliVTrack::kTIME); Float_t nsigmaTPC[9]; Float_t nsigmaTOF[9]; Double_t expdedx[9]; for(Int_t iS=0;iS < 9;iS++){ //TPC expected signal expdedx[iS] = fPIDResponse->GetTPCResponse().GetExpectedSignal(track, (AliPID::EParticleType) iS, AliTPCPIDResponse::kdEdxDefault, kTRUE); } for(Int_t iS=0;iS < 9;iS++){ nsigmaTPC[iS] = fPIDResponse->NumberOfSigmasTPC(track,(AliPID::EParticleType) iS); fNsigmaTPC[iBconf][iS]->Fill(pt,nsigmaTPC[iS]); hDeDxExp[iBconf][iS]->Fill(pTPC,expdedx[iS]); } fdEdxVSp[iBconf][0]->Fill(pTPC,dedx); if(charge>0) fdEdxVSp[iBconf][1]->Fill(pTPC,dedx); else fdEdxVSp[iBconf][2]->Fill(pTPC,dedx); Float_t massOverZ[9] = {0.000511,0.105658,0.139570,0.493677,0.938272,1.877837,2.817402,1.408701,1.877837}; Double_t exptimes[9]; // TOF expected times track->GetIntegratedTimes(exptimes); exptimes[5] = exptimes[0] / p * massOverZ[5] * TMath::Sqrt(1+p*p/massOverZ[5]/massOverZ[5]); exptimes[6] = exptimes[0] / p * massOverZ[6] * TMath::Sqrt(1+p*p/massOverZ[6]/massOverZ[6]); exptimes[7] = exptimes[0] / p * massOverZ[7] * TMath::Sqrt(1+p*p/massOverZ[7]/massOverZ[7]); exptimes[8] = exptimes[0] / p * massOverZ[8] * TMath::Sqrt(1+p*p/massOverZ[8]/massOverZ[8]); beta=exptimes[0];//expected times of the electron (it will be diveded for the T.o.f.) if(kTOF) { for(Int_t iS=0;iS < 9;iS++){ nsigmaTOF[iS] = fPIDResponse->NumberOfSigmasTOF(track,(AliPID::EParticleType) iS); fNsigmaTOF[iBconf][iS]->Fill(pt,nsigmaTOF[iS]); hBetaExp[iBconf][iS]->Fill(p,beta/exptimes[iS]); } if(pt>0.9 && pt<1.0) hTOFSignalPion[iBconf]->Fill(tof-exptimes[2]); beta=beta/tof; fBetaTofVSp[iBconf]->Fill(p,beta); } Int_t stdFlagPid[9] = {1,2,4,8,16,32,64,128,256};//e,#mu,#pi,K,p,d,t,3He,4He Int_t FlagPid = 0; Float_t binPt[nbin+1]; for(Int_t i=0;iGetBinContent(channel); // generate random time Float_t timeRandom = hmism->GetRandom() + distIP*3.35655419905265973e+00; Float_t betaRandom = 1.0; Float_t M2Random = 1000.0; if(kTOF) { betaRandom=exptimes[0]; if(timeRandom!=0.0)betaRandom=betaRandom/timeRandom; M2Random = (p*p*(1-betaRandom*betaRandom))/(betaRandom*betaRandom); if(MomType & 1) { for(Int_t j=0;jbinPt[j] && ptFill(M2Random); break; } } } if(MomType & 2) { for(Int_t j=0;jbinPt[j] && pFill(M2Random); break; } } } if(MomType & 4) { for(Int_t j=0;jbinPt[j] && pTPCFill(M2Random); break; } } } } //M2 background distribution from mismatch (FINISH). Float_t binCutPt[10] = {0.3,0.5,1.0,1.5,2.0,2.5,3.0,3.5,4.0,4.5}; Float_t binCutLargePt[6] = {0.0,1.0,2.0,3.0,4.0,5.0}; if(kTOF) { M2 = (p*p*(1-beta*beta))/(beta*beta); fM2vsP_NoTpcCut[iBconf][0]->Fill(M2,p); if(TMath::Abs(DCAxy)Fill(M2,p); if(M2>0.0) { M=TMath::Sqrt(M2); Z2 = TMath::Power(dedx/fPIDResponse->GetTPCResponse().GetExpectedSignal(pTPC*massOverZ[4]/M, AliPID::kProton),0.862); fM2vsZ[iBconf][0]->Fill(charge*TMath::Sqrt(Z2),M2); for(Int_t i=0;i<9;i++) { if(pt>binCutPt[i] && ptFill(charge*TMath::Sqrt(Z2),M2); break; } } for(Int_t i=0;i<5;i++) { if(pt>binCutLargePt[i] && ptFill(charge*TMath::Sqrt(Z2),M2); break; } } } if(charge>0) { fM2vsP_NoTpcCut[iBconf][1]->Fill(M2,p); if(TMath::Abs(DCAxy)Fill(M2,p); for(Int_t iS=0;iS<9;iS++){ fNsigmaTPCvsP_kTOFtrue[iBconf][iS]->Fill(p,nsigmaTPC[iS]); } } else {//else charge<0 fM2vsP_NoTpcCut[iBconf][2]->Fill(M2,p); if(TMath::Abs(DCAxy)Fill(M2,p); for(Int_t iS=0;iS < 9;iS++){ fNsigmaTPCvsP_kTOFtrue[iBconf][iS+9]->Fill(p,nsigmaTPC[iS]); } } for(Int_t iS=0;iS<9;iS++) { if(TMath::Abs(nsigmaTPC[iS])0.0) { for(Int_t iS=0;iS<9;iS++) { if(FlagPid & stdFlagPid[iS]) { fM2vsZwithTPC[iBconf][0]->Fill(charge*TMath::Sqrt(Z2),M2); for(Int_t i=0;i<9;i++) { if(pt>binCutPt[i] && ptFill(charge*TMath::Sqrt(Z2),M2); break; } } for(Int_t i=0;i<5;i++) { if(pt>binCutLargePt[i] && ptFill(charge*TMath::Sqrt(Z2),M2); break; } } } } } for(Int_t iS=0;iS<9;iS++) { if(FlagPid & stdFlagPid[iS] || !kTPCcut) { if(charge>0) { fM2vsP[iBconf][iS]->Fill(M2,p); if(TMath::Abs(DCAxy)Fill(M2,p); } if(MomType & 1) { for(Int_t j=0;jbinPt[j] && ptFill(DCAxy); hDCAxy[iBconf][iS][j]->Fill(-DCAxy); hDCAz[iBconf][iS][j]->Fill(DCAz); hDCAz[iBconf][iS][j]->Fill(-DCAz); if(TMath::Abs(DCAxy)Fill(M2); } if(TMath::Abs(DCAxy+0.5)Fill(M2); break; } } } if(MomType & 2) { for(Int_t j=0;jbinPt[j] && pFill(DCAxy); hDCAxy_pbin[iBconf][iS][j]->Fill(-DCAxy); hDCAz_pbin[iBconf][iS][j]->Fill(DCAz); hDCAz_pbin[iBconf][iS][j]->Fill(-DCAz); if(TMath::Abs(DCAxy)Fill(M2); } if(TMath::Abs(DCAxy+0.5)Fill(M2); break; } } } if(MomType & 4) { for(Int_t j=0;jbinPt[j] && pTPCFill(DCAxy); hDCAxy_pTpcbin[iBconf][iS][j]->Fill(-DCAxy); hDCAz_pTpcbin[iBconf][iS][j]->Fill(DCAz); hDCAz_pTpcbin[iBconf][iS][j]->Fill(-DCAz); if(TMath::Abs(DCAxy)Fill(M2); } if(TMath::Abs(DCAxy+0.5)Fill(M2); break; } } } } else {//if(charge<0) fM2vsP[iBconf][iS+9]->Fill(M2,p); if(TMath::Abs(DCAxy)Fill(M2,p); } if(MomType & 1) { for(Int_t j=0;jbinPt[j] && ptFill(DCAxy); hDCAxy[iBconf][iS+9][j]->Fill(-DCAxy); hDCAz[iBconf][iS+9][j]->Fill(DCAz); hDCAz[iBconf][iS+9][j]->Fill(-DCAz); if(TMath::Abs(DCAxy)Fill(M2); } if(TMath::Abs(DCAxy+0.5)Fill(M2); break; } } } if(MomType & 2) { for(Int_t j=0;jbinPt[j] && pFill(DCAxy); hDCAxy_pbin[iBconf][iS+9][j]->Fill(-DCAxy); hDCAz_pbin[iBconf][iS+9][j]->Fill(DCAz); hDCAz_pbin[iBconf][iS+9][j]->Fill(-DCAz); if(TMath::Abs(DCAxy)Fill(M2); } if(TMath::Abs(DCAxy+0.5)Fill(M2); break; } } } if(MomType & 4) { for(Int_t j=0;jbinPt[j] && pTPCFill(DCAxy); hDCAxy_pTpcbin[iBconf][iS+9][j]->Fill(-DCAxy); hDCAz_pTpcbin[iBconf][iS+9][j]->Fill(DCAz); hDCAz_pTpcbin[iBconf][iS+9][j]->Fill(-DCAz); if(TMath::Abs(DCAxy)Fill(M2); } if(TMath::Abs(DCAxy+0.5)Fill(M2); break; } } } } } } }// close (KTOF request) } // end track loop } //window cut centrality close } } //_____________________________________________________________________________ void AliAnalysisNucleiMass::Terminate(Option_t *) { // Terminate loop Printf("Terminate()"); }