-AliAnalysisTaskParticleCorrelation *AddTaskPartCorr(Char_t * analysis, TString data, TString calorimeter)
+AliAnalysisTaskParticleCorrelation *AddTaskPartCorr(TString data, TString calorimeter, Bool_t kUseKinematics = kFALSE, Bool_t kPrintSettings = kFALSE)
{
// Creates a PartCorr task, configures it and adds it to the analysis manager.
::Error("AddTaskPartCorr", "This task requires an input event handler");
return NULL;
}
- //TString dataType = mgr->GetInputEventHandler()->GetDataType(); // can be "ESD" or "AOD"
-
+ TString inputDataType = mgr->GetInputEventHandler()->GetDataType(); // can be "ESD" or "AOD"
+ //cout<<"DATA TYPE :: "<<inputDataType<<endl;
+ // inputDataType: data managed by the input handler
+ // data: can be same as one managed by input handler, or the output AOD created by the filter. By default use AOD
+
// Configure analysis
//===========================================================================
AliCaloTrackReader * reader = 0x0;
if(data=="AOD") reader = new AliCaloTrackAODReader();
else if(data=="ESD") reader = new AliCaloTrackESDReader();
- else if(data=="MC") reader = new AliCaloTrackMCReader();
+ else if(data=="MC" && dataType == "ESD") reader = new AliCaloTrackMCReader();
reader->SetDebug(-1);//10 for lots of messages
-
- AliAnaPartCorrMaker * maker = new AliAnaPartCorrMaker();
- switch (analysis) {
- case "Pi0":
- AnalysisPi0(maker,reader,calorimeter);
- break;
- case "GammaJetFinder":
- //JETAN must run before
- AnalysisGammaJetFinderCorrelation(maker,reader,calorimeter);
- break;
- case "GammaHadron":
- AnalysisGammaHadronCorrelation(maker,reader,calorimeter);
- break;
+ reader->SwitchOnCTS();
+ if(calorimeter == "EMCAL") {
+ reader->SwitchOnEMCALCells();
+ reader->SwitchOnEMCAL();
}
-
-
- // Create task
- //===========================================================================
- AliAnalysisTaskParticleCorrelation * task = new AliAnalysisTaskParticleCorrelation (analysis);
- task->SetConfigFileName(""); //Don't configure the analysis via configuration file.
- //task->SetDebugLevel(-1);
- task->SetAnalysisMaker(maker);
- mgr->AddTask(task);
-
- AliAnalysisDataContainer *cout_pc = mgr->CreateContainer(Form("%s", analysis),TList::Class(),
- AliAnalysisManager::kOutputContainer, Form("%s_%s.root",analysis,calorimeter.Data()));
-
- // Create ONLY the output containers for the data produced by the task.
- // Get and connect other common input/output containers via the manager as below
- //==============================================================================
- mgr->ConnectInput (task, 0, mgr->GetCommonInputContainer());
- // AOD output slot will be used in a different way in future
- mgr->ConnectOutput (task, 0, mgr->GetCommonOutputContainer());
- mgr->ConnectOutput (task, 1, cout_pc);
-
- return task;
-}
-
-//_________________________________________________________________________________________________
-void AnalysisPi0(AliAnaPartCorrMaker * maker, AliCaloTrackReader * reader, TString calorimeter){
- //Configuration for pi0 invariant mass analysis
-
- // #### Reader ####
- //Switch on or off the detectors
- if(calorimeter=="EMCAL"){
- reader->SwitchOnEMCAL();
- reader->SwitchOffPHOS();
+ if(calorimeter == "PHOS") {
+ reader->SwitchOnPHOSCells();
+ reader->SwitchOnPHOS();
}
- else if(calorimeter=="PHOS"){
- reader->SwitchOffEMCAL();
- reader->SwitchOnPHOS();
+ if(kUseKinematics){
+ if(inputDataType == "ESD"){
+ reader->SwitchOnStack();
+ reader->SwitchOffAODMCParticles();
+ }
+ else if(inputDataType == "AOD"){
+ reader->SwitchOffStack();
+ reader->SwitchOnAODMCParticles();
+ }
}
- else if {
- printf("ABORT analysis: Wrong calorimeter in configuration: %s\n",calorimeter.Data());
- abort();
- }
- reader->SwitchOffCTS();
-
+
//Min particle pT
- reader->SetEMCALPtMin(0.5);
- reader->SetPHOSPtMin(0.5);
- reader->Print("");
-
- // ##### Analysis algorithm ####
+ reader->SetEMCALPtMin(0.2);
+ reader->SetPHOSPtMin(0.2);
+ reader->SetCTSPtMin(0.2);
+ if(kPrintSettings) reader->Print("");
+
+ // ##### Analysis algorithm settings ####
+
+ // --------------------
+ // --- Pi0 Analysis ---
+ // --------------------
AliCaloPID * pid = new AliCaloPID();
pid->SetDispersionCut(1.5);
pid->SetTOFCut(5.e-9);
pid->SetDebug(-1);
- pid->Print("");
-
- AliAnaPhoton *anaphoton = new AliAnaPhoton();
- anaphoton->SetDebug(-1); //10 for lots of messages
+ if(kPrintSettings) pid->Print("");
+
+ AliFiducialCut * fidCut = new AliFiducialCut();
+ fidCut->DoCTSFiducialCut(kFALSE) ;
+ fidCut->DoEMCALFiducialCut(kTRUE) ;
+ fidCut->DoPHOSFiducialCut(kTRUE) ;
+
+ AliAnaCalorimeterQA *qa = new AliAnaCalorimeterQA();
+ qa->SetDebug(-1); //10 for lots of messages
+ qa->SetCalorimeter(calorimeter);
+ if(kUseKinematics && inputDataType!="AOD") qa->SwitchOnDataMC() ;//Access MC stack and fill more histograms, AOD MC not implemented yet.
+ else qa->SwitchOffDataMC() ;
+ //qa->AddToHistogramsName(Form("AnaCaloQA_%s",calorimeter.Data()));
+ qa->AddToHistogramsName("AnaCaloQA_");
+ qa->SetFiducialCut(fidCut);
+ qa->SwitchOnFiducialCut();
+ if(kPrintSettings) qa->Print("");
+
+ AliFiducialCut * fidCut1stYear = new AliFiducialCut();
+ fidCut1stYear->DoCTSFiducialCut(kFALSE) ;
+ fidCut1stYear->DoEMCALFiducialCut(kTRUE) ;
+ fidCut1stYear->DoPHOSFiducialCut(kTRUE) ;
+ fidCut1stYear->SetSimpleEMCALFiducialCut(0.7,80.,120.);
+ fidCut1stYear->SetSimplePHOSFiducialCut(0.12,260.,320.);
+
+ AliAnaPhoton *anaphoton1 = new AliAnaPhoton();
+ anaphoton1->SetDebug(-1); //10 for lots of messages
//anaphoton->SetMinPt(0.5);
- anaphoton->SetMinDistanceToBadChannel(2, 4, 5);
- anaphoton->SetCaloPID(pid);
- anaphoton->SetCalorimeter(calorimeter);
- anaphoton->SwitchOffDataMC() ;//Access MC stack and fill more histograms
- anaphoton->SwitchOffCaloPID();
- anaphoton->SwitchOffCaloPIDRecalculation(); //recommended for EMCAL
- anaphoton->SwitchOffFidutialCut();
- anaphoton->SetOutputAODName("Photons"+calorimeter);
- anaphoton->SetOutputAODClassName("AliAODPWG4Particle");
-
+ anaphoton1->SetMinDistanceToBadChannel(2, 4, 5);
+ anaphoton1->SetCaloPID(pid);
+ anaphoton1->SetCalorimeter(calorimeter);
+ if(kUseKinematics) anaphoton1->SwitchOnDataMC() ;//Access MC stack and fill more histograms
+ else anaphoton1->SwitchOffDataMC() ;
+ anaphoton1->SwitchOffCaloPID();
+ anaphoton1->SwitchOffCaloPIDRecalculation(); //recommended for EMCAL
+ anaphoton1->SwitchOnFiducialCut();
+ anaphoton1->SetFiducialCut(fidCut1stYear);
+ anaphoton1->SetOutputAODName(Form("PhotonsForIM%s",calorimeter.Data()));
+ if(kPrintSettings) anaphoton1->Print("");
+
AliAnaPi0 *anapi0 = new AliAnaPi0();
anapi0->SetDebug(-1);//10 for lots of messages
- anapi0->SetInputAODName("Photons"+calorimeter);
+ anapi0->SetInputAODName(Form("PhotonsForIM%s",calorimeter.Data()));
anapi0->SetCaloPID(pid);
anapi0->SetCalorimeter(calorimeter);
- anapi0->SwitchOnFidutialCut();
+ anapi0->SwitchOnFiducialCut();
anapi0->SwitchOffDataMC() ;//Access MC stack and fill more histograms
- anapi0->Print("");
-
- // #### Configure Maker ####
- maker->SetReader(reader);//pointer to reader
- maker->AddAnalysis(anaphoton,0);
- maker->AddAnalysis(anapi0,1);
- maker->SetAnaDebug(-1) ;
- maker->SwitchOnHistogramsMaker() ;
- maker->SwitchOnAODsMaker() ;
- maker->Print("");
- //
- printf("======================== \n");
- printf("End Configuration of AnalysisPi0() \n");
- printf("======================== \n");
-
-
-}
-//_________________________________________________________________________________________________
-void AnalysisGammaJetFinderCorrelation(AliAnaPartCorrMaker * maker, AliCaloTrackReader * reader, TString calorimeter){
- //Configuration for pi0 invariant mass analysis
-
- // #### Reader ####
- //Switch on or off the detectors
- if(calorimeter=="PHOS")
- reader->SwitchOnPHOS();
- else if(calorimeter=="EMCAL")
- reader->SwitchOffPHOS();
- else if {
- printf("ABORT analysis: Wrong calorimeter in configuration: %s\n",calorimeter.Data());
- abort();
- }
- reader->SwitchOnEMCAL();
- reader->SwitchOnCTS();
-
- //Min particle pT
- reader->SetEMCALPtMin(0.5);
- reader->SetPHOSPtMin(0.5);
- reader->SetCTSPtMin(0.1);
- reader->Print("");
-
- // ##### Analysis algorithm ####
- // ### Photon analysis ###
- //AliCaloPID * pid = new AliCaloPID();
- //pid->Print("");
-
- AliAnaPhoton *anaphoton = new AliAnaPhoton();
- anaphoton->SetDebug(-1); //10 for lots of messages
- anaphoton->SetMinPt(5);
- //anaphoton->SetCaloPID(pid);
- anaphoton->SetCalorimeter(calorimeter);
- anaphoton->SwitchOffDataMC() ;//Access MC stack and fill more histograms
- anaphoton->SwitchOnCaloPID();
- if(calorimeter == "EMCAL") anaphoton->SwitchOnCaloPIDRecalculation();
- anaphoton->SwitchOffFidutialCut();
- anaphoton->SetOutputAODName("DirectPhotonsJet"+calorimeter);
- anaphoton->SetOutputAODClassName("AliAODPWG4ParticleCorrelation");
-
- // ### Isolation analysis ###
-
- AliIsolationCut * ic = new AliIsolationCut();
- ic->SetConeSize(0.5);
- ic->SetPtThreshold(1.);
- ic->SetICMethod(AliIsolationCut::kPtThresIC);
- ic->Print("");
-
- AliAnaParticleIsolation *anaisol = new AliAnaParticleIsolation();
- anaisol->SetDebug(-1);
- //anaisol->SetMinPt(5);
- anaisol->SetInputAODName("DirectPhotonsJet"+calorimeter);
- anaisol->SetCalorimeter(calorimeter);
- anaisol->SwitchOffDataMC() ;//Access MC stack and fill more histograms
- //Select clusters with no pair, if both clusters with pi0 mass
- anaisol->SwitchOffInvariantMass();
- //anaisol->SetNeutralMesonSelection(nms);
- //Do isolation cut
- anaisol->SetIsolationCut(ic);
- //Do or not do isolation with previously produced AODs.
- //No effect if use of SwitchOnSeveralIsolation()
- anaisol->SwitchOffReIsolation();
- //Multiple IC
- anaisol->SwitchOffSeveralIsolation() ;
- anaisol->Print("");
-
- // ### Correlatio with Jet Finder AOD output
- AliAnaParticleJetFinderCorrelation *anacorr = new AliAnaParticleJetFinderCorrelation();
- anacorr->SetInputAODName("DirectPhotonsJet"+calorimeter);
- anacorr->SwitchOffFidutialCut();
- anacorr->SetDebug(-1);
- anacorr->SetConeSize(1);
- anacorr->SelectIsolated(kTRUE); // do correlation with isolated photons
- anacorr->SetPtThresholdInCone(0.2);
- anacorr->SetDeltaPhiCutRange(0.5,5.5);//Mostly Open Cuts
- anacorr->SetRatioCutRange(0.01,3); //Mostly Open Cuts
- anacorr->UseJetRefTracks(kFALSE); //Not working now
- anacorr->Print("");
-
- // #### Configure Maker ####
- maker->SetReader(reader);//pointer to reader
- maker->AddAnalysis(anaphoton,0);
- maker->AddAnalysis(anaisol,1);
- maker->AddAnalysis(anacorr,2);
- maker->SetAnaDebug(-1) ;
- maker->SwitchOnHistogramsMaker() ;
- maker->SwitchOnAODsMaker() ;
- maker->Print("");
- //
- printf("======================== \n");
- printf("End Configuration of AnalysisGammaJetFinderCorrelation() \n");
- printf("======================== \n");
-
-
-}
-
-
-//_________________________________________________________________________________________________
-void AnalysisGammaHadronCorrelation(AliAnaPartCorrMaker * maker, AliCaloTrackReader * reader, TString calorimeter){
- //Configuration for pi0 invariant mass analysis
-
- // #### Reader ####
- //Switch on or off the detectors
- if(calorimeter=="PHOS")
- reader->SwitchOnPHOS();
- else if(calorimeter=="EMCAL")
- reader->SwitchOffPHOS();
- else if {
- printf("ABORT analysis: Wrong calorimeter in configuration: %s\n",calorimeter.Data());
- abort();
- }
- reader->SwitchOnEMCAL();
- reader->SwitchOnCTS();
-
- //Min particle pT
- reader->SetEMCALPtMin(0.5);
- reader->SetPHOSPtMin(0.5);
- reader->SetCTSPtMin(0.1);
- reader->Print("");
-
- // ##### Analysis algorithm ####
- // ### Photon analysis ###
- //AliCaloPID * pid = new AliCaloPID();
- //pid->Print("");
-
- AliAnaPhoton *anaphoton = new AliAnaPhoton();
- anaphoton->SetDebug(-1); //10 for lots of messages
- anaphoton->SetMinPt(5);
- //anaphoton->SetCaloPID(pid);
- anaphoton->SetCalorimeter(calorimeter);
- anaphoton->SwitchOffDataMC() ;//Access MC stack and fill more histograms
- anaphoton->SwitchOnCaloPID();
- if(calorimeter == "EMCAL") anaphoton->SwitchOnCaloPIDRecalculation();
- anaphoton->SwitchOffFidutialCut();
- anaphoton->SetOutputAODName("DirectPhotonsHadron"+calorimeter);
- anaphoton->SetOutputAODClassName("AliAODPWG4ParticleCorrelation");
-
+ if(calorimeter=="PHOS") anapi0->SetNumberOfModules(3); //PHOS first year
+ else anapi0->SetNumberOfModules(4); //EMCAL first year
+ if(kPrintSettings) anapi0->Print("");
+
+
+ // -------------------------------------------------
+ // --- Photon Isolation and Correlation Analysis ---
+ // -------------------------------------------------
+
+ AliAnaPhoton *anaphoton2 = new AliAnaPhoton();
+ anaphoton2->SetDebug(-1); //10 for lots of messages
+ anaphoton2->SetMinPt(5);
+ anaphoton2->SetCaloPID(pid);
+ anaphoton2->SetCalorimeter(calorimeter);
+ if(kUseKinematics) anaphoton2->SwitchOnDataMC() ;//Access MC stack and fill more histograms
+ else anaphoton2->SwitchOffDataMC() ;
+ anaphoton2->SwitchOnCaloPID();
+ if(calorimeter == "EMCAL") anaphoton2->SwitchOnCaloPIDRecalculation();
+ anaphoton2->SwitchOffFiducialCut();
+ anaphoton2->SetOutputAODName(Form("DirectPhotons%s",calorimeter.Data()));
+ anaphoton2->SetOutputAODClassName("AliAODPWG4ParticleCorrelation");
+ anaphoton2->AddToHistogramsName("AnaPhotonCorr_");
+ if(kPrintSettings) anaphoton2->Print("");
// ### Isolation analysis ###
AliIsolationCut * ic = new AliIsolationCut();
ic->SetConeSize(0.5);
ic->SetPtThreshold(1.);
ic->SetICMethod(AliIsolationCut::kPtThresIC);
- ic->Print("");
+ if(kPrintSettings) ic->Print("");
AliAnaParticleIsolation *anaisol = new AliAnaParticleIsolation();
anaisol->SetDebug(-1);
//anaisol->SetMinPt(5);
- anaisol->SetInputAODName("DirectPhotonsHadron"+calorimeter);
+ anaisol->SetInputAODName(Form("DirectPhotons%s",calorimeter.Data()));
anaisol->SetCalorimeter(calorimeter);
- anaisol->SwitchOffDataMC() ;//Access MC stack and fill more histograms
+ if(kUseKinematics) anaisol->SwitchOnDataMC() ;//Access MC stack and fill more histograms
+ else anaisol->SwitchOffDataMC() ;
//Select clusters with no pair, if both clusters with pi0 mass
anaisol->SwitchOffInvariantMass();
//anaisol->SetNeutralMesonSelection(nms);
anaisol->SwitchOffReIsolation();
//Multiple IC
anaisol->SwitchOffSeveralIsolation() ;
- anaisol->Print("");
+ if(kPrintSettings) anaisol->Print("");
+
+ // ### Correlation with Jet Finder AOD output
+ AliAnaParticleJetFinderCorrelation *anacorrjet = new AliAnaParticleJetFinderCorrelation();
+ anacorrjet->SetInputAODName(Form("DirectPhotons%s",calorimeter.Data()));
+ anacorrjet->SwitchOffFiducialCut();
+ anacorrjet->SetDebug(-1);
+ anacorrjet->SetConeSize(1);
+ anacorrjet->SelectIsolated(kTRUE); // do correlation with isolated photons
+ anacorrjet->SetPtThresholdInCone(0.2);
+ anacorrjet->SetDeltaPhiCutRange(0.5,5.5);//Mostly Open Cuts
+ anacorrjet->SetRatioCutRange(0.01,3); //Mostly Open Cuts
+ anacorrjet->UseJetRefTracks(kFALSE); //Not working now
+ if(kPrintSettings) anacorrjet->Print("");
// ### Correlation with hadrons
- AliAnaParticleHadronCorrelation *anacorr = new AliAnaParticleHadronCorrelation();
- anacorr->SetInputAODName("DirectPhotonsHadron"+calorimeter);
- anacorr->SetDebug(-1);
- anacorr->SwitchOffFidutialCut();
- anacorr->SetPtCutRange(1,100);
- anacorr->SetDeltaPhiCutRange(1.5,4.5);
+ AliAnaParticleHadronCorrelation *anacorrhadron = new AliAnaParticleHadronCorrelation();
+ anacorrhadron->SetInputAODName(Form("DirectPhotons%s",calorimeter.Data()));
+ anacorrhadron->SetOutputAODName(Form("CorrelatedPi0s%s",calorimeter.Data()));
+ anacorrhadron->SetOutputAODClassName("AliAODPWG4ParticleCorrelation");
+ anacorrhadron->SetDebug(-1);
+ anacorrhadron->SwitchOffCaloPID();
+ anacorrhadron->SwitchOffFiducialCut();
+ anacorrhadron->SetPtCutRange(1,100);
+ anacorrhadron->SetDeltaPhiCutRange(1.5,4.5);
+ anacorrhadron->SelectIsolated(kTRUE); // do correlation with isolated photons
if(calorimeter=="PHOS"){
//Correlate with particles in EMCAL
- anacorr->SwitchOnCaloPID();
- anacorr->SwitchOnCaloPIDRecalculation(); //recommended for EMCAL
+ anacorrhadron->SwitchOnCaloPID();
+ anacorrhadron->SwitchOnCaloPIDRecalculation(); //recommended for EMCAL
}
- anacorr->Print("");
+ if(kPrintSettings) anacorrhadron->Print("");
// #### Configure Maker ####
+ AliAnaPartCorrMaker * maker = new AliAnaPartCorrMaker();
maker->SetReader(reader);//pointer to reader
- maker->AddAnalysis(anaphoton,0);
- maker->AddAnalysis(anaisol,1);
- maker->AddAnalysis(anacorr,2);
+ maker->AddAnalysis(qa,0);
+ maker->AddAnalysis(anaphoton1,1);
+ maker->AddAnalysis(anapi0,2);
+ maker->AddAnalysis(anaphoton2,3);
+ maker->AddAnalysis(anaisol,4);
+ maker->AddAnalysis(anacorrjet,5);
+ maker->AddAnalysis(anacorrhadron,6);
maker->SetAnaDebug(-1) ;
maker->SwitchOnHistogramsMaker() ;
maker->SwitchOnAODsMaker() ;
- maker->Print("");
- //
+ if(kPrintSettings) maker->Print("");
+
printf("======================== \n");
- printf("End Configuration of AnalysisGammaJetFinderCorrelation() \n");
+ printf(" End Configuration of PartCorr analysis with detector %s \n",calorimeter.Data());
printf("======================== \n");
+ // Create task
+ //===========================================================================
+ AliAnalysisTaskParticleCorrelation * task = new AliAnalysisTaskParticleCorrelation (Form("PartCorr%s",calorimeter.Data()));
+ task->SetConfigFileName(""); //Don't configure the analysis via configuration file.
+ //task->SetDebugLevel(-1);
+ task->SetAnalysisMaker(maker);
+ mgr->AddTask(task);
+
+ char name[128];
+ sprintf(name,"PartCorr_%s",calorimeter.Data());
+ cout<<"Name of task "<<name<<endl;
+ //AliAnalysisDataContainer *cout_pc = mgr->CreateContainer(Form(name),TList::Class(),
+ // AliAnalysisManager::kOutputContainer, Form("PartCorr_%s.root",calorimeter.Data()));
+
+ TString outputfile = AliAnalysisManager::GetCommonFileName();
+ // AliAnalysisDataContainer *cout_pc = mgr->CreateContainer(Form("PartCorr_%s",calorimeter.Data()), TList::Class(), AliAnalysisManager::kOutputContainer, Form("%s:PartCorr_%s",outputfile.Data(),calorimeter.Data()));
+ AliAnalysisDataContainer *cout_pc = mgr->CreateContainer(calorimeter.Data(), TList::Class(), AliAnalysisManager::kOutputContainer, Form("%s:PartCorr",outputfile.Data()));
+
+ // Create ONLY the output containers for the data produced by the task.
+ // Get and connect other common input/output containers via the manager as below
+ //==============================================================================
+ mgr->ConnectInput (task, 0, mgr->GetCommonInputContainer());
+ // AOD output slot will be used in a different way in future
+ mgr->ConnectOutput (task, 0, mgr->GetCommonOutputContainer());
+ mgr->ConnectOutput (task, 1, cout_pc);
+
+ return task;
}
+
+