fFilterMask(0),
fRPMethod(0),
fCollisionType(kPbPb),
+ fNTrigger(0),
fAvgTrials(1),
fVtxXMean(0),
fVtxYMean(0),
fVtxZMean(0),
fVtxRCut(1.),
fVtxZCut(8.),
+ fVtxDeltaZCut(0.1),
fPtMinCosmic(5.),
fRIsolMinCosmic(3.),
fMaxCosmicAngle(0.01),
fRPAngle(0),
fPsiVZEROA(0),
fPsiVZEROC(0),
+ fTriggerBit(0x0),
fRandomizer(0),
fNonStdFile(""),
+ fTriggerName(0x0),
fh1Xsec(0x0),
fh1Trials(0x0),
+ fh1AvgTrials(0x0),
fh1PtHard(0x0),
fh1PtHardTrials(0x0),
fh1SelectionInfoESD(0x0),
fh1CentralityESD(0),
fh1Centrality(0),
fh1RP(0),
+ fh2ReducedTrigger(0),
+ fh2CentralityTriggerESD(0),
+ fh2CentralityTrigger(0),
fh2TriggerCount(0x0),
fh2ESDTriggerCount(0x0),
fh2TriggerVtx(0x0),
fFilterMask(0),
fRPMethod(0),
fCollisionType(kPbPb),
+ fNTrigger(0),
fAvgTrials(1),
fVtxXMean(0),
fVtxYMean(0),
fVtxZMean(0),
fVtxRCut(1.),
fVtxZCut(8.),
+ fVtxDeltaZCut(0.1),
fPtMinCosmic(5.),
fRIsolMinCosmic(3.),
fMaxCosmicAngle(0.01),
fRPAngle(0),
fPsiVZEROA(0),
fPsiVZEROC(0),
+ fTriggerBit(0x0),
fRandomizer(0),
fNonStdFile(""),
+ fTriggerName(0x0),
fh1Xsec(0x0),
fh1Trials(0x0),
+ fh1AvgTrials(0x0),
fh1PtHard(0x0),
fh1PtHardTrials(0x0),
fh1SelectionInfoESD(0x0),
fh1CentralityESD(0),
fh1Centrality(0),
fh1RP(0),
+ fh2ReducedTrigger(0),
+ fh2CentralityTriggerESD(0),
+ fh2CentralityTrigger(0),
fh2TriggerCount(0x0),
fh2ESDTriggerCount(0x0),
fh2TriggerVtx(0x0),
// construct a poor man average trials
Float_t nEntries = (Float_t)tree->GetTree()->GetEntries();
if(ftrials>=nEntries && nEntries>0.)fAvgTrials = ftrials/nEntries;
+ fh1Trials->Fill("#sum{avg ntrials}",ftrials);
}
return kTRUE;
}
fh1Trials->GetXaxis()->SetBinLabel(1,"#sum{ntrials}");
fHistList->Add(fh1Trials);
- const Int_t nBinPt = 100;
+ fh1AvgTrials = new TH1F("fh1AvgTrials","avg trials root file",1,0,1);
+ fh1AvgTrials->GetXaxis()->SetBinLabel(1,"#sum{avg ntrials}");
+ fHistList->Add(fh1AvgTrials);
+
+ const Int_t nBinPt = 125;
Double_t binLimitsPt[nBinPt+1];
for(Int_t iPt = 0;iPt <= nBinPt;iPt++){
if(iPt == 0){
binLimitsPt[iPt] = 0.0;
}
else {// 1.0
- binLimitsPt[iPt] = binLimitsPt[iPt-1] + 2.5;
+ binLimitsPt[iPt] = binLimitsPt[iPt-1] + 2.;
}
}
fh1RP = new TH1F("fh1RP","RP;#Psi",440, -1.*TMath::Pi(), 2.*TMath::Pi());
fHistList->Add(fh1RP);
+ fh2ReducedTrigger = new TH2F("fh2ReducedTrigger","red trigger;red trigger;centrality",1<<fNTrigger,-0.5,(1<<fNTrigger)-0.5,100,-0.5,99.5);
+ fHistList->Add(fh2ReducedTrigger);
+
+ fh2CentralityTriggerESD = new TH2F("fh2CentralityTriggerESD",";cent;trigger no",103,-1,102,fNTrigger,-0.5,fNTrigger-0.5);
+ fHistList->Add(fh2CentralityTriggerESD);
+
+ fh2CentralityTrigger = new TH2F("fh2CentralityTrigger",";cent;trigger no",103,-1,102,fNTrigger,-0.5,fNTrigger-0.5);
+ fHistList->Add(fh2CentralityTrigger);
+
+ for(int i = 0;i<fNTrigger;++i){
+ fh2CentralityTriggerESD->GetYaxis()->SetBinLabel(i+1,fTriggerName[i].Data());
+ fh2CentralityTrigger->GetYaxis()->SetBinLabel(i+1,fTriggerName[i].Data());
+ }
+
+
fh2TriggerCount = new TH2F("fh2TriggerCount",";Trigger No.;constrained;Count",6,-0.5,5.5,kConstraints,-0.5,kConstraints-0.5);
fHistList->Add(fh2TriggerCount);
Bool_t aodVtxValid = false;
Bool_t aodVtxIn = false;
- if(esd){
- // trigger analyisis
- if(!fTriggerAnalysis){
- fTriggerAnalysis = new AliTriggerAnalysis;
- fTriggerAnalysis->SetAnalyzeMC(fMC);
- fTriggerAnalysis->SetSPDGFOThreshhold(1);
- }
- // fTriggerAnalysis->FillTriggerClasses(esd);
- Bool_t v0A = fTriggerAnalysis->IsOfflineTriggerFired(esd, AliTriggerAnalysis::kV0A);
- Bool_t v0C = fTriggerAnalysis->IsOfflineTriggerFired(esd, AliTriggerAnalysis::kV0C);
- Bool_t v0ABG = fTriggerAnalysis->IsOfflineTriggerFired(esd, AliTriggerAnalysis::kV0ABG);
- Bool_t v0CBG = fTriggerAnalysis->IsOfflineTriggerFired(esd, AliTriggerAnalysis::kV0CBG);
- Bool_t spdFO = fTriggerAnalysis->SPDFiredChips(esd, 0);;
- if(v0A)fSelectionInfoESD |= AliAnalysisHelperJetTasks::kV0A;
- if(v0C)fSelectionInfoESD |= AliAnalysisHelperJetTasks::kV0C;
- if(!(v0ABG||v0CBG))fSelectionInfoESD |= AliAnalysisHelperJetTasks::kNoV0BG;
- if(spdFO)fSelectionInfoESD |= AliAnalysisHelperJetTasks::kSPDFO;
- }
-
// Apply additional constraints
Bool_t esdEventSelected = IsEventSelected(esd);
Bool_t esdEventPileUp = IsEventPileUp(esd);
fEventCutInfoESD |= kPhysicsSelectionCut; // other alreay set via IsEventSelected
- fh1EventCutInfoESD->Fill(fEventCutInfoESD);
+ fh1EventCutInfoESD->Fill (fEventCutInfoESD);
if(esdEventSelected) fSelectionInfoESD |= AliAnalysisHelperJetTasks::kVertexIn;
if(esdEventPileUp) fSelectionInfoESD |= AliAnalysisHelperJetTasks::kIsPileUp;
if(physicsSelection) fSelectionInfoESD |= AliAnalysisHelperJetTasks::kPhysicsSelection;
+
+
// here we have all selection information, fill histogram
for(unsigned int i = 1;i<(UInt_t)fh1SelectionInfoESD->GetNbinsX();i++){
if((i&fSelectionInfoESD)==i)fh1SelectionInfoESD->Fill(i);
if(esd){
const AliESDVertex *vtxESD = esd->GetPrimaryVertex();
+ const AliESDVertex *vtxESDSPD = esd->GetPrimaryVertexSPD();
esdVtxValid = IsVertexValid(vtxESD);
- esdVtxIn = IsVertexIn(vtxESD);
+ esdVtxIn = IsVertexIn(vtxESD,vtxESDSPD);
if(aodH&&physicsSelection&&fFilterAODCollisions&&aod){
if(fDebug)Printf("%s:%d Centrality %3.3f vtxin %d",(char*)__FILE__,__LINE__,cent,esdVtxIn);
if(cent<=80&&esdVtxIn){
tmpCent = esd->GetCentrality()->GetCentralityPercentile("V0M");
if(tmpCent<0)tmpCent = 101;
fh1CentralityESD->Fill(tmpCent);
+ UInt_t ir = 0;
+ for(int it = 0;it<fNTrigger;++it){
+ if(fInputHandler->IsEventSelected()&fTriggerBit[it]){
+ fh2CentralityTriggerESD->Fill(tmpCent,it);
+ ir |= (1<<it);
+ }
+ }
+ fh2ReducedTrigger->Fill(ir,cent);
}
}
}
if(aod){
const AliAODVertex *vtxAOD = aod->GetPrimaryVertex();
+ const AliAODVertex *vtxAODSPD = aod->GetPrimaryVertexSPD();
aodVtxValid = IsVertexValid(vtxAOD);
- aodVtxIn = IsVertexIn(vtxAOD);
+ aodVtxIn = IsVertexIn(vtxAOD,vtxAODSPD);
Float_t zvtx = vtxAOD->GetZ();
Int_t iCl = GetEventClass(aod);
AliAnalysisHelperJetTasks::EventClass(kTRUE,iCl);
fh2TriggerCount->Fill(iCl,kSelected);
fh2TriggerCount->Fill(0.,kSelected);
fh1Centrality->Fill(cent);
+ for(int it = 0;it<fNTrigger;++it){
+ if(fInputHandler->IsEventSelected()&fTriggerBit[it])fh2CentralityTrigger->Fill(cent,it);
+ }
AliAnalysisHelperJetTasks::Selected(kTRUE,kTRUE);// select this event
if(aodH&&cand&&fFilterAODCollisions&&!esd){
if(fCentrality<=80&&aodVtxIn){
Double_t ptHard = 0;
Double_t nTrials = 1; // Trials for MC trigger
- fh1Trials->Fill("#sum{ntrials}",fAvgTrials);
+ fh1AvgTrials->Fill("#sum{avg ntrials}",fAvgTrials);
AliMCEvent* mcEvent = MCEvent();
// AliStack *pStack = 0;
if(mcEvent){
Bool_t AliAnalysisTaskJetServices::IsEventSelected(const AliESDEvent* esd){
if(!esd)return kFALSE;
const AliESDVertex *vtx = esd->GetPrimaryVertex();
- return IsVertexIn(vtx); // vertex in calls vertex valid
+ const AliESDVertex *vtxSPD = esd->GetPrimaryVertex();
+ return IsVertexIn(vtx,vtxSPD); // vertex in calls vertex valid
}
AliAnalysisTaskJetServices::~AliAnalysisTaskJetServices(){
delete fp1CalibRPYA;
delete fp1CalibRPXC;
delete fp1CalibRPYC;
+ delete [] fTriggerBit;
+ delete [] fTriggerName;
}
Bool_t AliAnalysisTaskJetServices::IsEventSelected(const AliAODEvent* aod) const {
if(!aod)return kFALSE;
const AliAODVertex *vtx = aod->GetPrimaryVertex();
- return IsVertexIn(vtx); // VertexIn calls VertexValid
+ const AliAODVertex *vtxSPD = aod->GetPrimaryVertexSPD();
+ return IsVertexIn(vtx,vtxSPD); // VertexIn calls VertexValid
}
Bool_t AliAnalysisTaskJetServices::IsVertexValid ( const AliESDVertex* vtx) {
return kFALSE;
}
-
+ TString vtxName(vtx->GetName());
if(fDebug){
Printf(" n contrib %d",vtx->GetNContributors());
+ Printf("vtxName: %s",vtxName.Data());
vtx->Print();
}
// if(vtx->GetNContributors()<3)return kFALSE;
// do not want tpc only primary vertex
- TString vtxName(vtx->GetName());
+
if(vtxName.Contains("TPCVertex"))return kFALSE;
- // no dispersion yet...
+ // no dispersion yet...
/*
TString vtxTitle(vtx->GetTitle());
if(vtxTitle.Contains("vertexer: Z")){
}
-Bool_t AliAnalysisTaskJetServices::IsVertexIn (const AliESDVertex* vtx) {
+Bool_t AliAnalysisTaskJetServices::IsVertexIn (const AliESDVertex* vtx,const AliESDVertex* vtxSPD) {
if(!IsVertexValid(vtx))return kFALSE;
Float_t zvtx = vtx->GetZ();
Float_t yvtx = vtx->GetY();
Float_t xvtx = vtx->GetX();
+ Float_t deltaZ = zvtx - vtxSPD->GetZ();
+ if(fDebug)Printf("%s:%d deltaz %3.3f ",__FILE__,__LINE__,deltaZ);
xvtx -= fVtxXMean;
yvtx -= fVtxYMean;
return kFALSE;
}
fEventCutInfoESD |= kVertexRCut;
+
+
+
+
+ if(TMath::Abs(deltaZ)>fVtxDeltaZCut)return kFALSE;
+ fEventCutInfoESD |= kVertexDeltaZCut;
return kTRUE;
}
-Bool_t AliAnalysisTaskJetServices::IsVertexIn (const AliAODVertex* vtx) const {
+Bool_t AliAnalysisTaskJetServices::IsVertexIn (const AliAODVertex* vtx,const AliAODVertex* vtxSPD) const {
if(!IsVertexValid(vtx))return kFALSE;
Float_t zvtx = vtx->GetZ();
Float_t yvtx = vtx->GetY();
Float_t xvtx = vtx->GetX();
+ Float_t deltaZ = zvtx - vtxSPD->GetZ();
+ if(fDebug)Printf("%s:%d deltaz %3.3f ",__FILE__,__LINE__,deltaZ);
xvtx -= fVtxXMean;
yvtx -= fVtxYMean;
Float_t r2 = yvtx*yvtx+xvtx*xvtx;
Bool_t vertexIn = TMath::Abs(zvtx)<fVtxZCut&&r2<(fVtxRCut*fVtxRCut);
+
+
+ if(TMath::Abs(deltaZ)>fVtxDeltaZCut)vertexIn = kFALSE;
+ if(fDebug)Printf("%s:%d vertexIn %d ",__FILE__,__LINE__,vertexIn);
+
+
return vertexIn;
}
}
+void AliAnalysisTaskJetServices::SetNTrigger(Int_t n){
+ if(n>0){
+ fNTrigger = n;
+ delete [] fTriggerName;
+ fTriggerName = new TString [fNTrigger];
+ delete [] fTriggerBit;fTriggerBit = 0;
+ fTriggerBit = new UInt_t [fNTrigger];
+ }
+ else{
+ fNTrigger = 0;
+ }
+}
+
+void AliAnalysisTaskJetServices::SetTrigger(Int_t i,UInt_t it,const char* c){
+ if(i<fNTrigger){
+ Printf("%d",it);
+ Printf("%p",c);
+ Printf("%s",c);
+ Printf("%p",&fTriggerName[i]);
+
+ fTriggerBit[i] = it;
+ fTriggerName[i] = c; // placement new
+ // new(&fTriggerName[i]) TString(c); // placement new
+ Printf("%s",fTriggerName[i].Data());
+
+ }
+}