fFilterMask(0),
fRPMethod(0),
fCollisionType(kPbPb),
+ fNTrigger(0),
fAvgTrials(1),
fVtxXMean(0),
fVtxYMean(0),
fRPAngle(0),
fPsiVZEROA(0),
fPsiVZEROC(0),
+ fTriggerBit(0x0),
fRandomizer(0),
fNonStdFile(""),
+ fTriggerName(0x0),
fh1Xsec(0x0),
fh1Trials(0x0),
fh1PtHard(0x0),
fh1EventCutInfoESD(0),
fh1CentralityESD(0),
fh1Centrality(0),
+ fh1ReducedTrigger(0),
fh1RP(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),
fRPAngle(0),
fPsiVZEROA(0),
fPsiVZEROC(0),
+ fTriggerBit(0x0),
fRandomizer(0),
fNonStdFile(""),
+ fTriggerName(0x0),
fh1Xsec(0x0),
fh1Trials(0x0),
fh1PtHard(0x0),
fh1EventCutInfoESD(0),
fh1CentralityESD(0),
fh1Centrality(0),
+ fh1ReducedTrigger(0),
fh1RP(0),
+ fh2CentralityTriggerESD(0),
+ fh2CentralityTrigger(0),
fh2TriggerCount(0x0),
fh2ESDTriggerCount(0x0),
fh2TriggerVtx(0x0),
fh1RP = new TH1F("fh1RP","RP;#Psi",440, -1.*TMath::Pi(), 2.*TMath::Pi());
fHistList->Add(fh1RP);
+ fh1ReducedTrigger = new TH1F("fh1ReducedTrigger","red trigger;red trigger",1<<fNTrigger,-0.5,(1<<fNTrigger)-0.5);
+ fHistList->Add(fh1ReducedTrigger);
+
+ 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+2,fTriggerName[i].Data());
+ fh2CentralityTrigger->GetYaxis()->SetBinLabel(i+2,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);
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);
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);
+ }
+ }
+ fh1ReducedTrigger->Fill(ir);
}
}
}
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){
delete fp1CalibRPYA;
delete fp1CalibRPXC;
delete fp1CalibRPYC;
+ delete [] fTriggerBit;
+ delete [] fTriggerName;
}
}
+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());
+
+ }
+}
class TList;
class TClonesArray;
+class TObjArray;
class TChain;
class TH1F;
class TH2F;
virtual void SetV0Centroids(TProfile *xa,TProfile *ya,
TProfile *xc,TProfile *yc);
+ virtual void SetNTrigger(Int_t n);
+ virtual void SetTrigger(Int_t i,UInt_t it,const char* c = "");
+
Bool_t CalculateReactionPlaneAngleVZERO(AliAODEvent *aod);
Int_t GetListOfTracks(TList *list);
UInt_t fEventCutInfoESD; // event selection info of what is cutted after physics selection
UInt_t fFilterMask; // filter bit for slecected tracks
Int_t fRPMethod; // method for subevent calculation
- Int_t fCollisionType; // type of collisions
+ Int_t fCollisionType; // type of collisions
+ Int_t fNTrigger; // Number of different triggers
Float_t fAvgTrials; // Average number of trials
Float_t fVtxXMean; // mean x for cuts
Float_t fVtxYMean; // mean y for cuts
Float_t fMaxCosmicAngle; // Max deviation from pi (angle between two tracks) in case of cosmic candidate
Float_t fRunRange[2]; // only important for real data for
Float_t fCentrality; // ! centrality
- Float_t fTrackRecEtaWindow; // eta window for rec tracks
- Float_t fMinTrackPt; // limits the track p_T
- Float_t fRPAngle; // ! RP angle of the reaction plane
- Float_t fPsiVZEROA; // ! RP angle from vzeroa
- Float_t fPsiVZEROC; // ! RP angle from vzeroc
+ Float_t fTrackRecEtaWindow; // eta window for rec tracks
+ Float_t fMinTrackPt; // limits the track p_T
+ Float_t fRPAngle; // ! RP angle of the reaction plane
+ Float_t fPsiVZEROA; // ! RP angle from vzeroa
+ Float_t fPsiVZEROC; // ! RP angle from vzeroc
+ UInt_t *fTriggerBit ; //[fNTrigger]
TRandom3 *fRandomizer; // ! randomizer
TString fNonStdFile; // outputName for replication
+ TString *fTriggerName; //[fNTrigger] array of trigger names
TProfile* fh1Xsec; //! pythia cross section and trials
TH1F* fh1Trials; //! trials are added
TH1F* fh1PtHard; //! Pt har of the event...
TH1F* fh1EventCutInfoESD; //! Masks that satisfy fSelectionInfo
TH1F* fh1CentralityESD; //! centrality
TH1F* fh1Centrality; //! centrality
+ TH1F* fh1ReducedTrigger; //! reduced trigger count
TH1F* fh1RP; //! RP distribution
+ TH2F* fh2CentralityTriggerESD; //! centrality
+ TH2F* fh2CentralityTrigger; //! centrality
TH2F* fh2TriggerCount; //! number of fire triggers in each case
TH2F* fh2ESDTriggerCount; //! number of fire triggers in each case
TH2F* fh2TriggerVtx; //! vtx. position vs. trigger decision
static AliAODHeader* fgAODHeader; //! Header for replication
static AliAODVZERO* fgAODVZERO; //! vzero for replication
static TClonesArray* fgAODVertices; //! primary vertex for replication
- ClassDef(AliAnalysisTaskJetServices,14)
+ ClassDef(AliAnalysisTaskJetServices,15)
};
#endif
fJetTriggerExcludeMask(AliAODJet::kHighTrackPtTriggered),
fFilterMask(0),
fEventSelectionMask(0),
+ fNTrigger(0),
+ fTriggerBit(0x0),
fAnalysisType(0),
fTrackTypeRec(kTrackUndef),
fTrackTypeGen(kTrackUndef),
fRPAngle(0),
fMultRec(0),
fMultGen(0),
+ fTriggerName(0x0),
fh1Xsec(0x0),
fh1Trials(0x0),
fh1PtHard(0x0),
fJetTriggerExcludeMask(AliAODJet::kHighTrackPtTriggered),
fFilterMask(0),
fEventSelectionMask(0),
+ fNTrigger(0),
+ fTriggerBit(0x0),
fAnalysisType(0),
fTrackTypeRec(kTrackUndef),
fTrackTypeGen(kTrackUndef),
fRPAngle(0),
fMultRec(0),
fMultGen(0),
+ fTriggerName(0x0),
fh1Xsec(0x0),
fh1Trials(0x0),
fh1PtHard(0x0),
// event npsparse cent, mult
- const Int_t nBinsSparse0 = 2;
- const Int_t nBins0[nBinsSparse0] = { 100, 500};
- const Double_t xmin0[nBinsSparse0] = { 0, 0};
- const Double_t xmax0[nBinsSparse0] = { 100,5000};
+ const Int_t nBinsSparse0 = 3;
+ const Int_t nBins0[nBinsSparse0] = { 100, 500,fNTrigger};
+ const Double_t xmin0[nBinsSparse0] = { 0, 0, -0.5};
+ const Double_t xmax0[nBinsSparse0] = { 100,5000,fNTrigger-0.5};
fhnEvent = new THnSparseF("fhnEvent",";cent;mult",nBinsSparse0,
fp2CentRPPhiTrackPt[ij] = new TProfile2D(Form("fp2CentRPPhiTrackPt%s",cAdd.Data()),"RP phi vs cent;# cent;#Delta#phi_{RP}; <p_{T}>",10,0,100,181,-1./180.*TMath::Pi(),TMath::Pi(),"S");
fHistList->Add(fp2CentRPPhiTrackPt[ij]);
- // Bins: Jet number: pTJet, cent, mult, RP, Area. total bins = 4.5M
- const Int_t nBinsSparse1 = 6;
- Int_t nBins1[nBinsSparse1] = { kMaxJets+1,120, 10, 25, fNRPBins, 10};
+ // Bins: Jet number: pTJet, cent, mult, RP, Area, trigger total bins = 4.5M
+ const Int_t nBinsSparse1 = 7;
+ Int_t nBins1[nBinsSparse1] = { kMaxJets+1,120, 10, 25, fNRPBins, 10,fNTrigger};
if(cJetBranch.Contains("RandomCone")){
nBins1[1] = 600;
nBins1[5] = 1;
}
- const Double_t xmin1[nBinsSparse1] = { -0.5,-50, 0, 0, -0.5, 0.};
- const Double_t xmax1[nBinsSparse1] = {kMaxJets+0.5,250,100,5000,fNRPBins-0.5,1.0};
+ const Double_t xmin1[nBinsSparse1] = { -0.5,-50, 0, 0, -0.5, 0.,-0.5};
+ const Double_t xmax1[nBinsSparse1] = {kMaxJets+0.5,250,100,5000,fNRPBins-0.5,1.0,fNTrigger-0.5};
- fhnJetPt[ij] = new THnSparseF(Form("fhnJetPt%s",cAdd.Data()),";jet number;p_{T,jet};cent;# tracks;RP;area",nBinsSparse1,nBins1,xmin1,xmax1);
+ fhnJetPt[ij] = new THnSparseF(Form("fhnJetPt%s",cAdd.Data()),";jet number;p_{T,jet};cent;# tracks;RP;area;trigger",nBinsSparse1,nBins1,xmin1,xmax1);
fHistList->Add(fhnJetPt[ij]);
// Bins: Jet number: pTJet, cent, eta, phi, Area. total bins = 9.72 M
Double_t var0[2] = {0,};
var0[0] = fCentrality;
var0[1] = fMultRec;
- fhnEvent->Fill(var0);
-
+ for(int it=0;it<fNTrigger;it++){
+ if(fInputHandler->IsEventSelected()&fTriggerBit[it]){
+ var0[2] = it;
+ fhnEvent->Fill(var0);
+ }
+ }
// the loops for rec and gen should be indentical... pass it to a separate
// function ...
// Jet Loop
if(leadTrack)fh2LTrackPtJetPt[iType][ij]->Fill(leadTrack->Pt(),ptJet);
var1[0] = ij;
var2[0] = ij;
- fhnJetPt[iType]->Fill(var1);
+ for(int it = 0;it <fNTrigger;it++){
+ if(fInputHandler->IsEventSelected()&fTriggerBit[it]){
+ var1[6] = it;
+ fhnJetPt[iType]->Fill(var1);
+ }
+ }
fhnJetPtQA[iType]->Fill(var2);
}
var1[0] = kMaxJets;// fill for all jets
var2[0] = kMaxJets;// fill for all jets
- fhnJetPt[iType]->Fill(var1);
+ for(int it = 0;it <fNTrigger;it++){
+ if(fInputHandler->IsEventSelected()&fTriggerBit[it]){
+ var1[6] = it;
+ fhnJetPt[iType]->Fill(var1);
+ }
+ }
+
fhnJetPtQA[iType]->Fill(var2);
if(leadTrack)fh2LTrackPtJetPt[iType][kMaxJets]->Fill(leadTrack->Pt(),ptJet);
return phibin;
}
+void AliAnalysisTaskJetSpectrum2::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 AliAnalysisTaskJetSpectrum2::SetTrigger(Int_t i,UInt_t it,const char* c){
+ if(i<fNTrigger){
+ fTriggerBit[i] = it;
+ fTriggerName[i] = c;
+ }
+}
+
+AliAnalysisTaskJetSpectrum2::~AliAnalysisTaskJetSpectrum2(){
+ //
+ delete [] fTriggerBit;
+ delete [] fTriggerName;
+}
public:
AliAnalysisTaskJetSpectrum2();
AliAnalysisTaskJetSpectrum2(const char* name);
- virtual ~AliAnalysisTaskJetSpectrum2() {;}
+ virtual ~AliAnalysisTaskJetSpectrum2();
// Implementation of interface methods
virtual void UserCreateOutputObjects();
virtual void Init();
virtual void SetNonStdFile(char* c){fNonStdFile = c;}
+ virtual void SetNTrigger(Int_t n);
+ virtual void SetTrigger(Int_t i,UInt_t it,const char* c = "");
+
// Helper
//
Bool_t fDoMatching; // switch on the matching between rec and gen
Short_t fNMatchJets; // number of leading jets considered from the list
Short_t fNRPBins; // number of bins with respect to RP
- UChar_t fJetTriggerExcludeMask; // mask for jet triggers to exclude
+ UChar_t fJetTriggerExcludeMask; // mask for jet triggers to exclude
UInt_t fFilterMask; // filter bit for slecected tracks
UInt_t fEventSelectionMask; // Selection information used to filter events
+ Int_t fNTrigger; // number of triggers for selection
+ UInt_t *fTriggerBit; //[fNTrigger] trigger bits
Int_t fAnalysisType; // Analysis type
Int_t fTrackTypeRec; // type of tracks used for FF
Int_t fTrackTypeGen; // type of tracks used for FF
Float_t fRPAngle; // ! RP angle of the reaction plane
Int_t fMultRec; // ! reconstructed track multiplicity
Int_t fMultGen; // ! generated track multiplicity
-
+ TString *fTriggerName; //[fNTrigger] array of trigger names
TProfile* fh1Xsec; //! pythia cross section and trials
TH1F* fh1Trials; //! trials are added