//handeling of CutString
static const char * fgkCutNames[kNCuts];
- Bool_t SetCutIds(TString cutString);
- Int_t fCuts[kNCuts];
- Bool_t SetCut(cutIds cutID, Int_t cut);
- Bool_t UpdateCutString();
- void PrintCuts();
- void PrintCutsWithValues();
+ Bool_t SetCutIds(TString cutString);
+ Int_t fCuts[kNCuts];
+ Bool_t SetCut(cutIds cutID, Int_t cut);
+ Bool_t UpdateCutString();
+ void PrintCuts();
+ void PrintCutsWithValues();
- Bool_t InitializeCutsFromCutString(const TString analysisCutSelection);
- TString GetCutNumber();
+ Bool_t InitializeCutsFromCutString(const TString analysisCutSelection);
+ TString GetCutNumber();
+ Int_t GetClusterType() {return fClusterType; }
//Constructors
AliCaloPhotonCuts(const char *name="ClusterCuts", const char * title="Cluster Cuts");
AliCaloPhotonCuts& operator=(const AliCaloPhotonCuts&);
//virtual destructor
- virtual ~AliCaloPhotonCuts();
+ virtual ~AliCaloPhotonCuts();
- virtual Bool_t IsSelected(TObject* /*obj*/){return kTRUE;}
- virtual Bool_t IsSelected(TList* /*list*/) {return kTRUE;}
+ virtual Bool_t IsSelected(TObject* /*obj*/) {return kTRUE;}
+ virtual Bool_t IsSelected(TList* /*list*/) {return kTRUE;}
- Bool_t ClusterIsSelected(AliVCluster* cluster, AliVEvent *event, Bool_t isMC);
- Bool_t PhotonIsSelectedMC(TParticle *particle,AliStack *fMCStack,Bool_t checkForConvertedGamma=kTRUE);
- Bool_t PhotonIsSelectedAODMC(AliAODMCParticle *particle,TClonesArray *aodmcArray,Bool_t checkForConvertedGamma=kTRUE);
+ Bool_t ClusterIsSelected(AliVCluster* cluster, AliVEvent *event, Bool_t isMC);
+ Bool_t ClusterIsSelectedMC(TParticle *particle,AliStack *fMCStack);
+ Bool_t ClusterIsSelectedAODMC(AliAODMCParticle *particle,TClonesArray *aodmcArray);
- void InitCutHistograms(TString name="");
- void SetFillCutHistograms(TString name=""){if(!fHistograms){InitCutHistograms(name);};}
- TList *GetCutHistograms(){return fHistograms;}
- void FillClusterCutIndex(Int_t photoncut){if(fHistCutIndex)fHistCutIndex->Fill(photoncut);}
+ void InitCutHistograms(TString name="");
+ void SetFillCutHistograms(TString name="") {if(!fHistograms){InitCutHistograms(name);}}
+ TList* GetCutHistograms() {return fHistograms;}
+ void FillClusterCutIndex(Int_t photoncut) {if(fHistCutIndex)fHistCutIndex->Fill(photoncut);}
+
+ void SetExtendedMatching(Bool_t extendedMatching) {fExtendedMatching = extendedMatching;}
///Cut functions
- Bool_t AcceptanceCuts(AliVCluster* cluster, AliVEvent *event);
- Bool_t ClusterQualityCuts(AliVCluster* cluster,AliVEvent *event, Bool_t isMC);
+ Bool_t AcceptanceCuts(AliVCluster* cluster, AliVEvent *event);
+ Bool_t ClusterQualityCuts(AliVCluster* cluster,AliVEvent *event, Bool_t isMC);
+
+ Bool_t MatchConvPhotonToCluster(AliAODConversionPhoton* convPhoton, AliVCluster* cluster, AliVEvent* event );
// Set Individual Cuts
- Bool_t SetClusterTypeCut(Int_t);
- Bool_t SetMinEtaCut(Int_t);
- Bool_t SetMaxEtaCut(Int_t);
- Bool_t SetMinPhiCut(Int_t);
- Bool_t SetMaxPhiCut(Int_t);
- Bool_t SetDistanceToBadChannelCut(Int_t);
- Bool_t SetTimingCut(Int_t);
- Bool_t SetTrackMatchingCut(Int_t);
- Bool_t SetExoticCellCut(Int_t);
- Bool_t SetMinEnergyCut(Int_t);
- Bool_t SetMinNCellsCut(Int_t);
- Bool_t SetMaxM02(Int_t);
- Bool_t SetMinM02(Int_t);
- Bool_t SetMaxM20(Int_t);
- Bool_t SetMinM20(Int_t);
- Bool_t SetDispersion(Int_t);
- Bool_t SetNLM(Int_t);
+ Bool_t SetClusterTypeCut(Int_t);
+ Bool_t SetMinEtaCut(Int_t);
+ Bool_t SetMaxEtaCut(Int_t);
+ Bool_t SetMinPhiCut(Int_t);
+ Bool_t SetMaxPhiCut(Int_t);
+ Bool_t SetDistanceToBadChannelCut(Int_t);
+ Bool_t SetTimingCut(Int_t);
+ Bool_t SetTrackMatchingCut(Int_t);
+ Bool_t SetExoticCellCut(Int_t);
+ Bool_t SetMinEnergyCut(Int_t);
+ Bool_t SetMinNCellsCut(Int_t);
+ Bool_t SetMaxM02(Int_t);
+ Bool_t SetMinM02(Int_t);
+ Bool_t SetMaxM20(Int_t);
+ Bool_t SetMinM20(Int_t);
+ Bool_t SetDispersion(Int_t);
+ Bool_t SetNLM(Int_t);
protected:
- TList *fHistograms;
+ TList *fHistograms;
//cuts
- Int_t fClusterType; // which cluster do we have
- Double_t fMinEtaCut; // min eta cut
- Double_t fMaxEtaCut; // max eta cut
- Double_t fMinPhiCut; // phi cut
- Double_t fMaxPhiCut; // phi cut
- Double_t fMinDistanceToBadChannel; // minimum distance to bad channel
- Double_t fMaxTimeDiff; // maximum time difference to triggered collision
- Double_t fMinDistTrackToCluster; // minimum distance between track and cluster
- Double_t fExoticCell; // exotic cell cut
- Double_t fMinEnergy; // minium energy per cluster
- Int_t fMinNCells; // minimum number of cells
- Double_t fMaxM02; // maximum M02
- Double_t fMinM02; // minimum M02
- Double_t fMaxM20; // maximum M20
- Double_t fMinM20; // minimum M20
- Double_t fMaxDispersion; // maximum dispersion
- Int_t fMinNLM; // minimum number of local maxima in cluster
- Int_t fMaxNLM; // maximum number of local maxima in cluster
+ Int_t fClusterType; // which cluster do we have
+ Double_t fMinEtaCut; // min eta cut
+ Double_t fMaxEtaCut; // max eta cut
+ Bool_t fUseEtaCut; // flag for switching on eta cut
+ Double_t fMinPhiCut; // phi cut
+ Double_t fMaxPhiCut; // phi cut
+ Bool_t fUsePhiCut; // flag for switching on phi cut
+ Double_t fMinDistanceToBadChannel; // minimum distance to bad channel
+ Bool_t fUseDistanceToBadChannel; // flag for switching on distance to bad channel cut
+ Double_t fMaxTimeDiff; // maximum time difference to triggered collision
+ Bool_t fUseTimeDiff; // flag for switching on time difference cut
+ Double_t fMaxDistTrackToClusterEta; // minimum distance between track and cluster in eta
+ Double_t fMinDistTrackToClusterPhi; // minimum distance between track and cluster in phi
+ Double_t fMaxDistTrackToClusterPhi; // maximum distance between track and cluster in phi
+ Bool_t fUseDistTrackToCluster; // flag for switching on distance between track and cluster cut
+ Bool_t fExtendedMatching; // flag for switching on extended matching histograms
+ Double_t fExoticCell; // exotic cell cut
+ Bool_t fUseExoticCell; // flag for switching on exotic cell cut
+ Double_t fMinEnergy; // minium energy per cluster
+ Bool_t fUseMinEnergy; // flag for switching on minimum energy cut
+ Int_t fMinNCells; // minimum number of cells
+ Bool_t fUseNCells; // flag for switching on minimum N Cells cut
+ Double_t fMaxM02; // maximum M02
+ Double_t fMinM02; // minimum M02
+ Bool_t fUseM02; // flag for switching on M02 cut
+ Double_t fMaxM20; // maximum M20
+ Double_t fMinM20; // minimum M20
+ Bool_t fUseM20; // flag for switching on M20 cut
+ Double_t fMaxDispersion; // maximum dispersion
+ Bool_t fUseDispersion; // flag for switching on dispersion cut
+ Int_t fMinNLM; // minimum number of local maxima in cluster
+ Int_t fMaxNLM; // maximum number of local maxima in cluster
+ Bool_t fUseNLM; // flag for switching on NLM cut
// CutString
- TObjString *fCutString; // cut number used for analysis
+ TObjString* fCutString; // cut number used for analysis
// Histograms
- TH1F *fHistCutIndex; // bookkeeping for cuts
- TH1F *fHistAcceptanceCuts; // bookkeeping for acceptance cuts
- TH1F *fHistClusterIdentificationCuts; // bookkeeping for cluster identification cuts
+ TH1F* fHistCutIndex; // bookkeeping for cuts
+ TH1F* fHistAcceptanceCuts; // bookkeeping for acceptance cuts
+ TH1F* fHistClusterIdentificationCuts; // bookkeeping for cluster identification cuts
- TH2F* fHistClusterEtavsPhiBeforeAcc; // eta-phi-distribution before acceptance cuts
- TH2F* fHistClusterEtavsPhiAfterAcc; // eta-phi-distribution of all after acceptance cuts
- TH2F* fHistClusterEtavsPhiAfterQA; // eta-phi-distribution of all after cluster quality cuts
- TH1F* fHistDistanceToBadChannelBeforeAcc; // distance to bad channel before acceptance cuts
- TH1F* fHistDistanceToBadChannelAfterAcc; // distance to bad channel after acceptance cuts
- TH2F* fHistClusterTimevsEBeforeQA; // Cluster time vs E before cluster quality cuts
- TH2F* fHistClusterTimevsEAfterQA; // Cluster time vs E after cluster quality cuts
- TH2F* fHistExoticCellBeforeQA; // Exotic cell: 1-Ecross/E cell vs Ecluster before acceptance cuts
- TH2F* fHistExoticCellAfterQA; // Exotic cell: 1-Ecross/E cell vs Ecluster after cluster quality cuts
- TH1F* fHistDistanceTrackToClusterBeforeQA; // distance cluster to track before acceptance cuts
- TH1F* fHistDistanceTrackToClusterAfterQA; // distance cluster to track after cluster quality cuts
- TH1F* fHistEnergyOfClusterBeforeQA; // enery per cluster before acceptance cuts
- TH1F* fHistEnergyOfClusterAfterQA; // enery per cluster after cluster quality cuts
- TH1F* fHistNCellsBeforeQA; // number of cells per cluster before acceptance cuts
- TH1F* fHistNCellsAfterQA; // number of cells per cluster after cluster quality cuts
- TH1F* fHistM02BeforeQA; // M02 before acceptance cuts
- TH1F* fHistM02AfterQA; // M02 after cluster quality cuts
- TH1F* fHistM20BeforeQA; // M20 before acceptance cuts
- TH1F* fHistM20AfterQA; // M20 after cluster quality cuts
- TH1F* fHistDispersionBeforeQA; // dispersion before acceptance cuts
- TH1F* fHistDispersionAfterQA; // dispersion after cluster quality cuts
- TH1F* fHistNLMBeforeQA; // number of local maxima in cluster before acceptance cuts
- TH1F* fHistNLMAfterQA; // number of local maxima in cluster after cluster quality cuts
-
+ TH2F* fHistClusterEtavsPhiBeforeAcc; // eta-phi-distribution before acceptance cuts
+ TH2F* fHistClusterEtavsPhiAfterAcc; // eta-phi-distribution of all after acceptance cuts
+ TH2F* fHistClusterEtavsPhiAfterQA; // eta-phi-distribution of all after cluster quality cuts
+// TH1F* fHistDistanceToBadChannelBeforeAcc; // distance to bad channel before acceptance cuts
+// TH1F* fHistDistanceToBadChannelAfterAcc; // distance to bad channel after acceptance cuts
+ TH2F* fHistClusterTimevsEBeforeQA; // Cluster time vs E before cluster quality cuts
+ TH2F* fHistClusterTimevsEAfterQA; // Cluster time vs E after cluster quality cuts
+// TH2F* fHistExoticCellBeforeQA; // Exotic cell: 1-Ecross/E cell vs Ecluster before acceptance cuts
+// TH2F* fHistExoticCellAfterQA; // Exotic cell: 1-Ecross/E cell vs Ecluster after cluster quality cuts
+// TH1F* fHistNMatchedTracks; // number of matched tracks
+ TH1F* fHistEnergyOfClusterBeforeQA; // enery per cluster before acceptance cuts
+ TH1F* fHistEnergyOfClusterAfterQA; // enery per cluster after cluster quality cuts
+ TH1F* fHistNCellsBeforeQA; // number of cells per cluster before acceptance cuts
+ TH1F* fHistNCellsAfterQA; // number of cells per cluster after cluster quality cuts
+ TH1F* fHistM02BeforeQA; // M02 before acceptance cuts
+ TH1F* fHistM02AfterQA; // M02 after cluster quality cuts
+ TH1F* fHistM20BeforeQA; // M20 before acceptance cuts
+ TH1F* fHistM20AfterQA; // M20 after cluster quality cuts
+ TH1F* fHistDispersionBeforeQA; // dispersion before acceptance cuts
+ TH1F* fHistDispersionAfterQA; // dispersion after cluster quality cuts
+// TH1F* fHistNLMBeforeQA; // number of local maxima in cluster before acceptance cuts
+// TH1F* fHistNLMAfterQA; // number of local maxima in cluster after cluster quality cuts
+
+ //Track matching histograms
+ TH1F* fHistClusterRBeforeQA; // cluster position in R=SQRT(x^2+y^2) (before QA)
+ TH1F* fHistClusterRAfterQA; // cluster position in R=SQRT(x^2+y^2) for matched tracks (After QA)
+ TH2F* fHistClusterdEtadPhiBeforeQA; // 2-dim plot dEta vs. dPhi
+ TH2F* fHistClusterdEtadPhiAfterQA; // 2-dim plot dEta vs. dPhi for matched tracks (after QA)
+ TH1F* fHistDistanceTrackToClusterBeforeQA; // distance cluster to track before acceptance cuts
+ TH1F* fHistDistanceTrackToClusterAfterQA; // distance cluster to track after cluster quality cuts
+
+ //Extended track matching histograms
+ TH2F* fHistClusterdEtadPhiPosTracksBeforeQA; // 2-dim plot dEta vs. dPhi
+ TH2F* fHistClusterdEtadPhiNegTracksBeforeQA; // 2-dim plot dEta vs. dPhi
+ TH2F* fHistClusterdEtadPhiPosTracksAfterQA; // 2-dim plot dEta vs. dPhi
+ TH2F* fHistClusterdEtadPhiNegTracksAfterQA; // 2-dim plot dEta vs. dPhi
+ TH2F* fHistClusterdEtadPhiPosTracksP_000_075BeforeQA;// 2-dim plot dEta vs. dPhi, positive Tracks, P < 0.75
+ TH2F* fHistClusterdEtadPhiPosTracksP_075_125BeforeQA;// 2-dim plot dEta vs. dPhi, positive Tracks, 0.75 < P < 1.25
+ TH2F* fHistClusterdEtadPhiPosTracksP_125_999BeforeQA;// 2-dim plot dEta vs. dPhi, positive Tracks, P > 1.25
+ TH2F* fHistClusterdEtadPhiNegTracksP_000_075BeforeQA;// 2-dim plot dEta vs. dPhi, negative Tracks, P < 0.75
+ TH2F* fHistClusterdEtadPhiNegTracksP_075_125BeforeQA;// 2-dim plot dEta vs. dPhi, negative Tracks, 0.75 < P < 1.25
+ TH2F* fHistClusterdEtadPhiNegTracksP_125_999BeforeQA;// 2-dim plot dEta vs. dPhi, negative Tracks, P > 1.25
+ TH2F* fHistClusterdEtadPtBeforeQA; // 2-dim plot dEta vs. Pt
+ TH2F* fHistClusterdPhidPtBeforeQA; // 2-dim plot dEta vs. Pt
+ TH2F* fHistClusterM20Pt_dPhiBeforeQA; // 2-dim plot M20 vs. Pt for given dPhi>0.05
+ TH2F* fHistClusterM02Pt_dPhiBeforeQA; // 2-dim plot M02 vs. Pt for given dPhi>0.05
+ TH2F* fHistClusterM20M02BeforeQA; // 2-dim plot M20 vs. M02
+ TH2F* fHistClusterM20M02AfterQA; // 2-dim plot M20 vs. M20
+
private:
- ClassDef(AliCaloPhotonCuts,1)
+ ClassDef(AliCaloPhotonCuts,2)
};
#endif