X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=PWGJE%2FAliAnalysisTaskJetCore.cxx;h=a9f92cb8650b3e8e5780106ffa4521d6c5fe714b;hb=5a35c43fc45daf6c8d9c7b2c6c28d28fffa50869;hp=452cc9b85a340d027f79369215ecd022faf1d1f7;hpb=9807c9a11ba33398b8b9ea5744751879ca4a4336;p=u%2Fmrichter%2FAliRoot.git diff --git a/PWGJE/AliAnalysisTaskJetCore.cxx b/PWGJE/AliAnalysisTaskJetCore.cxx index 452cc9b85a3..a9f92cb8650 100644 --- a/PWGJE/AliAnalysisTaskJetCore.cxx +++ b/PWGJE/AliAnalysisTaskJetCore.cxx @@ -1,4 +1,3 @@ - // ****************************************** // This task computes several jet observables like // the fraction of energy in inner and outer coronnas, @@ -32,7 +31,7 @@ #include "TH3F.h" #include "THnSparse.h" #include "TCanvas.h" - +#include "TRandom3.h" #include "AliLog.h" #include "AliAnalysisTask.h" @@ -82,12 +81,20 @@ fCentMin(0.), fCentMax(100.), fNInputTracksMin(0), fNInputTracksMax(-1), +fRequireITSRefit(0), +fApplySharedClusterCut(0), fAngStructCloseTracks(0), fCheckMethods(0), fDoEventMixing(0), fFlagPhiBkg(0), fFlagEtaBkg(0), fFlagJetHadron(0), +fFrac(0.8), +fTTLowRef(11), +fTTUpRef(13), +fTTLowSig(15), +fTTUpSig(19), +fHardest(0), fFlagRandom(0), fFlagOnlyRecoil(0), fFlagOnlyHardest(1), @@ -143,6 +150,8 @@ fh2AngStructpt1C60(0x0), fh2AngStructpt2C60(0x0), fh2AngStructpt3C60(0x0), fh2AngStructpt4C60(0x0), +fh1TrigRef(0x0), +fh1TrigSig(0x0), fh2Ntriggers(0x0), fh2Ntriggers2C10(0x0), fh2Ntriggers2C20(0x0), @@ -154,8 +163,8 @@ fh2RPTC10(0x0), fh2RPTC20(0x0), fHJetSpec(0x0), fhTTPt(0x0), -fHJetPhiCorr(0x0) - +fHJetPhiCorr(0x0), +fRandom(0x0) { // default Constructor @@ -203,12 +212,20 @@ fCentMin(0.), fCentMax(100.), fNInputTracksMin(0), fNInputTracksMax(-1), +fRequireITSRefit(0), +fApplySharedClusterCut(0), fAngStructCloseTracks(0), fCheckMethods(0), fDoEventMixing(0), fFlagPhiBkg(0), fFlagEtaBkg(0), fFlagJetHadron(0), +fFrac(0.8), +fTTLowRef(11), +fTTUpRef(13), +fTTLowSig(15), +fTTUpSig(19), +fHardest(0), fFlagRandom(0), fFlagOnlyRecoil(0), fFlagOnlyHardest(1), @@ -264,6 +281,8 @@ fh2AngStructpt1C60(0x0), fh2AngStructpt2C60(0x0), fh2AngStructpt3C60(0x0), fh2AngStructpt4C60(0x0), +fh1TrigRef(0x0), +fh1TrigSig(0x0), fh2Ntriggers(0x0), fh2Ntriggers2C10(0x0), fh2Ntriggers2C20(0x0), @@ -275,7 +294,8 @@ fh2RPTC10(0x0), fh2RPTC20(0x0), fHJetSpec(0x0), fhTTPt(0x0), -fHJetPhiCorr(0x0) +fHJetPhiCorr(0x0), +fRandom(0x0) { // Constructor @@ -332,6 +352,12 @@ void AliAnalysisTaskJetCore::UserCreateOutputObjects() TH1::AddDirectory(kFALSE); + // set seed + fRandom = new TRandom3(0); + + + + fHistEvtSelection = new TH1I("fHistEvtSelection", "event selection", 6, -0.5, 5.5); fHistEvtSelection->GetXaxis()->SetBinLabel(1,"ACCEPTED"); fHistEvtSelection->GetXaxis()->SetBinLabel(2,"events IN"); @@ -408,12 +434,13 @@ void AliAnalysisTaskJetCore::UserCreateOutputObjects() fh2AngStructpt4C60 = new TH2F("Ang struct pt4 C60","",15,0.,1.5,150,0.,10.); } - - fh2Ntriggers=new TH2F("# of triggers","",10,0.,100.,50,0.,50.); + fh1TrigRef=new TH1D("Trig Ref","",10,0.,10); + fh1TrigSig=new TH1D("Trig Sig","",10,0.,10); + fh2Ntriggers=new TH2F("# of triggers","",100,0.,100.,50,0.,50.); fh2Ntriggers2C10=new TH2F("# of triggers2C10","",50,0.,50.,50,0.,50.); fh2Ntriggers2C20=new TH2F("# of triggers2C20","",50,0.,50.,50,0.,50.); - fh3JetDensity=new TH3F("Jet density vs mutliplicity A>0.4","",100,0.,4000.,100,0.,5.,10,0.,50.); - fh3JetDensityA4=new TH3F("Jet density vs multiplicity A>0.4","",100,0.,4000.,100,0.,5.,10,0.,50.); + fh3JetDensity=new TH3F("Jet density vs mutliplicity A>0.07","",100,0.,4000.,100,0.,5.,25,0.,50.); + fh3JetDensityA4=new TH3F("Jet density vs multiplicity A>0.4","",100,0.,4000.,100,0.,5.,25,0.,50.); fh2RPJetsC10=new TH2F("RPJetC10","",35,0.,3.5,100,0.,100.); fh2RPJetsC20=new TH2F("RPJetC20","",35,0.,3.5,100,0.,100.); fh2RPTC10=new TH2F("RPTriggerC10","",35,0.,3.5,50,0.,50.); @@ -469,7 +496,8 @@ void AliAnalysisTaskJetCore::UserCreateOutputObjects() - + fOutputList->Add(fh1TrigRef); + fOutputList->Add(fh1TrigSig); fOutputList->Add(fh2Ntriggers); fOutputList->Add(fh2Ntriggers2C10); fOutputList->Add(fh2Ntriggers2C20); @@ -481,10 +509,27 @@ void AliAnalysisTaskJetCore::UserCreateOutputObjects() fOutputList->Add(fh2RPTC20); const Int_t dimSpec = 5; - const Int_t nBinsSpec[dimSpec] = {10,100, 140, 50, fNRPBins}; + const Int_t nBinsSpec[dimSpec] = {100,6, 140, 50, fNRPBins}; const Double_t lowBinSpec[dimSpec] = {0,0,-80, 0, 0}; - const Double_t hiBinSpec[dimSpec] = {100,1, 200, 50, fNRPBins}; + const Double_t hiBinSpec[dimSpec] = {100,1, 200, 50, static_cast(fNRPBins)}; fHJetSpec = new THnSparseF("fHJetSpec","Recoil jet spectrum",dimSpec,nBinsSpec,lowBinSpec,hiBinSpec); + + //change binning in jet area + Double_t *xPt6 = new Double_t[7]; + xPt6[0] = 0.; + xPt6[1]=0.07; + xPt6[2]=0.2; + xPt6[3]=0.4; + xPt6[4]=0.6; + xPt6[5]=0.8; + xPt6[6]=1; + fHJetSpec->SetBinEdges(1,xPt6); + delete [] xPt6; + + + + + fOutputList->Add(fHJetSpec); @@ -557,7 +602,17 @@ void AliAnalysisTaskJetCore::UserExec(Option_t *) // -- event selection -- fHistEvtSelection->Fill(1); // number of events before event selection - // physics selection + + Bool_t selected=kTRUE; + selected = AliAnalysisHelperJetTasks::Selected(); + if(!selected){ + // no selection by the service task, we continue + PostData(1,fOutputList); + return;} + + + + // physics selection: this is now redundant, all should appear as accepted after service task selection AliInputEventHandler* inputHandler = (AliInputEventHandler*) ((AliAnalysisManager::GetAnalysisManager())->GetInputEventHandler()); std::cout<IsEventSelected()<<" "<(fAODIn->FindListObject(fJetBranchName[1].Data())); } - //Double_t ptsub[aodJets[0]->GetEntriesFast()]; - //Int_t inord[aodJets[0]->GetEntriesFast()]; - //for(Int_t n=0;nGetEntriesFast();n++){ - // ptsub[n]=0; - // inord[n]=0;} + Int_t nT=0; TList ParticleList; - Int_t nT = GetListOfTracks(&ParticleList); + Double_t minT=0; + Double_t maxT=0; + Int_t number=0; + Double_t dice=fRandom->Uniform(0,1); + if(dice>fFrac){ minT=fTTLowRef; + maxT=fTTUpRef;} + if(dice<=fFrac){minT=fTTLowSig; + maxT=fTTUpSig;} + + + + if(fHardest==1 || fHardest==2) nT = GetListOfTracks(&ParticleList); + if(fHardest==0) nT=SelectTrigger(&ParticleList,minT,maxT,number); + if(nT<0){ + PostData(1, fOutputList); + return;} + + if(dice>fFrac) fh1TrigRef->Fill(number); + if(dice<=fFrac)fh1TrigSig->Fill(number); + for (Int_t iJetType = 0; iJetType < 2; iJetType++) { fListJets[iJetType]->Clear(); if (!aodJets[iJetType]) continue; @@ -695,30 +767,44 @@ void AliAnalysisTaskJetCore::UserExec(Option_t *) Int_t trigInTrack=-1; fRPAngle = aod->GetHeader()->GetEventplane(); + if(fHardest==0 || fHardest==1){ AliVParticle *partback = (AliVParticle*)ParticleList.At(nT); if(!partback){ PostData(1, fOutputList); return;} + if(fSemigoodCorrect){ + Double_t disthole=RelativePhi(partback->Phi(),fHolePos); + if(TMath::Abs(disthole)+fHoleWidth>TMath::Pi()-0.6){ + PostData(1, fOutputList); + return;}} - //for(Int_t tt=0;ttFill(centValue,partback->Pt()); - Double_t phiBinT = RelativePhi(partback->Phi(),fRPAngle); - if(centValue<20.) fh2RPTC20->Fill(TMath::Abs(phiBinT),partback->Pt()); - if(centValue<10.) fh2RPTC10->Fill(TMath::Abs(phiBinT),partback->Pt()); + } + + + for(Int_t tt=0;ttPt()<8) continue; + Double_t accep=2.*TMath::Pi()*1.8; Int_t injet4=0; Int_t injet=0; + if(fSemigoodCorrect){ Double_t disthole=RelativePhi(partback->Phi(),fHolePos); - if(TMath::Abs(disthole)+fHoleWidth>TMath::Pi()-0.6){ - PostData(1, fOutputList); - return;} + if(TMath::Abs(disthole)+fHoleWidth>TMath::Pi()-0.6) continue;} + + + + fh2Ntriggers->Fill(centValue,partback->Pt()); + Double_t phiBinT = RelativePhi(partback->Phi(),fRPAngle); + if(centValue<20.) fh2RPTC20->Fill(TMath::Abs(phiBinT),partback->Pt()); + if(centValue<10.) fh2RPTC10->Fill(TMath::Abs(phiBinT),partback->Pt()); + - } for(Int_t i=0; iGetEntries(); ++i){ AliAODJet* jetbig = (AliAODJet*)(fListJets[0]->At(i)); @@ -746,8 +832,10 @@ void AliAnalysisTaskJetCore::UserExec(Option_t *) if(fFlagJetHadron==0){ - if(fFlagPhiBkg!=0) if((TMath::Abs(dphi)TMath::Pi()/2.+0.1)) continue; - if(fFlagPhiBkg==0) if(TMath::Abs(dphi)TMath::Pi()/2.+0.1)) continue; + if(fFlagPhiBkg==0) if(TMath::Abs(dphi)0.4) continue; @@ -763,7 +851,7 @@ void AliAnalysisTaskJetCore::UserExec(Option_t *) if(phitt<0)phitt+=TMath::Pi()*2.; Int_t phiBintt = GetPhiBin(phitt-fRPAngle); - Double_t fillspec[] = {centValue,jetbig->EffectiveAreaCharged(),ptcorr,partback->Pt(),phiBintt}; + Double_t fillspec[] = {centValue,jetbig->EffectiveAreaCharged(),ptcorr,partback->Pt(), static_cast(phiBintt)}; fHJetSpec->Fill(fillspec); @@ -774,15 +862,18 @@ void AliAnalysisTaskJetCore::UserExec(Option_t *) Int_t ippt=0; Double_t ppt=-10; if(fFlagJetHadron==0){ - TRefArray *genTrackList = jetbig->GetRefTracks(); - Int_t nTracksGenJet = genTrackList->GetEntriesFast(); - AliAODTrack* genTrack; - for(Int_t ir=0; irAt(ir)); - if(genTrack->Pt()>ppt){ppt=genTrack->Pt(); - ippt=ir;}} - leadtrack=(AliAODTrack*)(genTrackList->At(ippt)); - if(!leadtrack) continue;} + TRefArray *genTrackList = jetbig->GetRefTracks(); + Int_t nTracksGenJet = genTrackList->GetEntriesFast(); + AliAODTrack* genTrack; + for(Int_t ir=0; irAt(ir)); + if(genTrack->Pt()>ppt){ppt=genTrack->Pt(); + ippt=ir;}} + leadtrack=(AliAODTrack*)(genTrackList->At(ippt)); + if(!leadtrack) continue; + } + + AliVParticle* leadtrackb=0; if(fFlagJetHadron!=0){ @@ -795,26 +886,26 @@ void AliAnalysisTaskJetCore::UserExec(Option_t *) - //store one trigger info - if(iCount==0){ - trigJet=i; - trigBBTrack=nT; - trigInTrack=ippt; - iCount=iCount+1;} - + //store one trigger info + if(iCount==0){ + trigJet=i; + trigBBTrack=nT; + trigInTrack=ippt; + iCount=iCount+1;} + - if(fCheckMethods){ - for(Int_t j=0; jGetEntries(); ++j){ - AliAODJet* jetsmall = (AliAODJet*)(fListJets[1]->At(j)); - etasmall = jetsmall->Eta(); - phismall = jetsmall->Phi(); - ptsmall = jetsmall->Pt(); - areasmall = jetsmall->EffectiveAreaCharged(); - Double_t tmpDeltaR=(phismall-phibig)*(phismall-phibig)+(etasmall-etabig)*(etasmall-etabig); - tmpDeltaR=TMath::Sqrt(tmpDeltaR); - //Fraction in the jet core - if((ptsmall>ptmax)&&(tmpDeltaR<=fRadioFrac)){ptmax=ptsmall; - index2=j;} + if(fCheckMethods){ + for(Int_t j=0; jGetEntries(); ++j){ + AliAODJet* jetsmall = (AliAODJet*)(fListJets[1]->At(j)); + etasmall = jetsmall->Eta(); + phismall = jetsmall->Phi(); + ptsmall = jetsmall->Pt(); + areasmall = jetsmall->EffectiveAreaCharged(); + Double_t tmpDeltaR=(phismall-phibig)*(phismall-phibig)+(etasmall-etabig)*(etasmall-etabig); + tmpDeltaR=TMath::Sqrt(tmpDeltaR); + //Fraction in the jet core + if((ptsmall>ptmax)&&(tmpDeltaR<=fRadioFrac)){ptmax=ptsmall; + index2=j;} if(tmpDeltaR<=dismin){ dismin=tmpDeltaR; index1=j;}} //en of loop over R=0.2 jets //method1:most concentric jet=core @@ -830,8 +921,8 @@ void AliAnalysisTaskJetCore::UserExec(Option_t *) if((centValue>20)&&(centValue<40)) fh2JetCoreMethod2C20->Fill(ptcorr,jetmethod2->Pt()/ptbig); if((centValue>30)&&(centValue<60)) fh2JetCoreMethod2C30->Fill(ptcorr,jetmethod2->Pt()/ptbig); if(centValue>60) fh2JetCoreMethod2C60->Fill(ptcorr,jetmethod2->Pt()/ptbig); }} - if(centValue<10) fh2Ntriggers2C10->Fill(leadtrack->Pt(),partback->Pt()); - if(centValue<20) fh2Ntriggers2C20->Fill(leadtrack->Pt(),partback->Pt()); + if(centValue<10&&leadtrack) fh2Ntriggers2C10->Fill(leadtrack->Pt(),partback->Pt()); + if(centValue<20&&leadtrack) fh2Ntriggers2C20->Fill(leadtrack->Pt(),partback->Pt()); if(fDoEventMixing==0 && fFlagOnlyRecoil==0){ for(int it = 0;itIsHybridTPCConstrainedGlobal(); else if(fFilterType == 2)bGood = tr->IsHybridGlobalConstrainedGlobal(); - if((fFilterMask>0)&&!(tr->TestFilterBit(fFilterMask)))continue; + if((fFilterMask>0)&&!(tr->TestFilterBit(fFilterMask)))continue; + if(fRequireITSRefit==1){if((tr->GetStatus()&AliESDtrack::kITSrefit)==0)continue;} if(bGood==false) continue; - if(TMath::Abs(tr->Eta())>0.9)continue; + if (fApplySharedClusterCut) { + Double_t frac = Double_t(tr->GetTPCnclsS()) /Double_t(tr->GetTPCncls()); + if (frac > 0.4) continue; + } + if(TMath::Abs(tr->Eta())>0.9)continue; if(tr->Pt()<0.15)continue; list->Add(tr); iCount++; @@ -1117,6 +1216,70 @@ Int_t AliAnalysisTaskJetCore::GetListOfTracks(TList *list){ } + + +Int_t AliAnalysisTaskJetCore::SelectTrigger(TList *list,Double_t minT,Double_t maxT,Int_t &number){ + Int_t iCount = 0; + AliAODEvent *aod = 0; + if(!fESD)aod = fAODIn; + else aod = fAODOut; + if(!aod)return 0; + Int_t index=-1; + Int_t triggers[100]; + for(Int_t cr=0;cr<100;cr++){triggers[cr]=-1;} + Int_t im=0; + for(int it = 0;it < aod->GetNumberOfTracks();++it){ + AliAODTrack *tr = aod->GetTrack(it); + Bool_t bGood = false; + if(fFilterType == 0)bGood = true; + else if(fFilterType == 1)bGood = tr->IsHybridTPCConstrainedGlobal(); + else if(fFilterType == 2)bGood = tr->IsHybridGlobalConstrainedGlobal(); + if((fFilterMask>0)&&!(tr->TestFilterBit(fFilterMask)))continue; + if(fRequireITSRefit==1){if((tr->GetStatus()&AliESDtrack::kITSrefit)==0)continue;} + if(bGood==false) continue; + if (fApplySharedClusterCut) { + Double_t frac = Double_t(tr->GetTPCnclsS()) /Double_t(tr->GetTPCncls()); + if (frac > 0.4) continue; + } + if(TMath::Abs(tr->Eta())>0.9)continue; + if(tr->Pt()<0.15)continue; + list->Add(tr); + iCount++; + + if(tr->Pt()>=minT && tr->Pt()0) rd=fRandom->Integer(im); + index=triggers[rd]; + + + + + + return index; + +} + + + + + + + + + + + + + + + + Int_t AliAnalysisTaskJetCore::GetHardestTrackBackToJet(AliAODJet *jetbig){ AliAODEvent *aod = 0;