ROOT logo

Bool_t  kPrint         = kFALSE;
Bool_t  kSimulation    = kFALSE;
Bool_t  kUseKinematics = kFALSE;
Bool_t  kOutputAOD     = kFALSE;
Bool_t  kEventSelection= kFALSE;
Bool_t  kExotic        = kTRUE;
Bool_t  kNonLinearity  = kFALSE;
Int_t   kYears         = 2011;
TString kCollisions    = "pp";
TString kTrig          = "EMC7" ;
TString kClusterArray  = "";
TString kData          = "ESD";
TString kInputDataType = "ESD";
TString kCalorimeter   = "EMCAL";
Bool_t  kTM            = kTRUE;
Bool_t  kRecalTM       = kTRUE;
Int_t   kMinCen        = -1;
Int_t   kMaxCen        = -1;
TString kName          = "";
Int_t   kDebug         = -1; 
Bool_t  kQA            = kFALSE;
Bool_t  kCalibE        = kTRUE;
Bool_t  kCalibT        = kTRUE;
Bool_t  kBadMap        = kTRUE;

AliAnalysisTaskCaloTrackCorrelation *AddTaskShowerShapeStudies(const TString data          = "AOD",
                                                               const TString calorimeter   = "EMCAL", 
                                                               const Bool_t  simulation    = kFALSE,
                                                               const Bool_t  eventsel      = kFALSE,
                                                               const Bool_t  exotic        = kTRUE,
                                                               const Bool_t  nonlin        = kFALSE,
                                                               TString       outputfile    = "",
                                                               const Int_t   year          = 2011,
                                                               const TString col           = "pp", 
                                                               const TString trigger       = "MB", 
                                                               const TString clustersArray = "V1",
                                                               const Bool_t  recaltm       = kTRUE,
                                                               const Bool_t  tm            = kTRUE,
                                                               const Int_t   minCen        = -1,
                                                               const Int_t   maxCen        = -1,
                                                               const Bool_t  qaan          = kFALSE,
                                                               const Bool_t  calibE        = kTRUE,
                                                               const Bool_t  badmap        = kTRUE,
                                                               const Bool_t  calibT        = kTRUE,
                                                               const Bool_t  outputAOD     = kFALSE, 
                                                               const Bool_t  printSettings = kFALSE
                                                               )
{
  // Creates a CaloTrackCorr task, configures it and adds it to the analysis manager.
  
  kPrint         = printSettings;
  kSimulation    = simulation;
  kYears         = year;
  kCollisions    = col;
  kExotic        = exotic;
  kNonLinearity  = nonlin;
  kTrig          = trigger;
  kClusterArray  = clustersArray;
  kData          = data;
  kCalorimeter   = calorimeter;
  kOutputAOD     = outputAOD;
  kTM            = tm;
  kRecalTM       = recaltm;
  kMinCen        = minCen;
  kMaxCen        = maxCen;
  kEventSelection= eventsel;
  kQA            = qaan;
  kCalibE        = calibE;
  kCalibT        = calibT;
  kBadMap        = badmap;
  
  // Get the pointer to the existing analysis manager via the static access method.
  
  AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
  if (!mgr) 
  {
    ::Error("AddTask", "No analysis manager to connect to.");
    return NULL;
  }  
  
  // Check the analysis type using the event handlers connected to the analysis manager.
  
  if (!mgr->GetInputEventHandler()) 
  {
    ::Error("AddTask", "This task requires an input event handler");
    return NULL;
  }
  
  kInputDataType = "AOD";
  if(!kData.Contains("delta"))
    kInputDataType = mgr->GetInputEventHandler()->GetDataType(); // can be "ESD" or "AOD"
  
  if(kSimulation) 
  { 
    kUseKinematics = (mgr->GetMCtruthEventHandler())?kTRUE:kFALSE; 
    if (!kUseKinematics && data=="AOD" && kInputDataType != "ESD") kUseKinematics = kTRUE; //AOD primary should be available ... 
  } 
  
  cout<<"********* ACCESS KINE? "<<kUseKinematics<<endl;
  
  // Name for containers
  
  kName = Form("%s_Trig%s_Cl%s_TM%d",kCalorimeter.Data(), kTrig.Data(),kClusterArray.Data(),kTM);

  if(kCollisions=="PbPb" && kMaxCen>=0) kName+=Form("Cen%d_%d",kMinCen,kMaxCen);
    
  printf("<<<< NAME: %s >>>>>\n",kName.Data());
  
  // #### Configure analysis ####
    
  AliAnaCaloTrackCorrMaker * maker = new AliAnaCaloTrackCorrMaker();
  
  // General frame setting and configuration
  maker->SetReader   (ConfigureReader()   ); 
  maker->SetCaloUtils(ConfigureCaloUtils()); 
  
  // Analysis tasks setting and configuration
  Int_t n = 0;//Analysis number, order is important
  
  maker->AddAnalysis(ConfigurePhotonAnalysis(), n++); // Photon cluster selection
  maker->AddAnalysis(ConfigureElectronAnalysis(),n++); // Electron cluster selection
  maker->AddAnalysis(ConfigurePi0EbEAnalysis("Pi0", AliAnaPi0EbE::kIMCalo), n++); // Pi0 event by event selection, and photon tagging from decay    
  maker->AddAnalysis(ConfigurePi0EbEAnalysis("Eta", AliAnaPi0EbE::kIMCalo), n++); // Eta event by event selection, and photon tagging from decay
  
  if(kCalorimeter=="EMCAL")
  {
    maker->AddAnalysis(ConfigurePi0EbEAnalysis("Pi0", AliAnaPi0EbE::kSSCalo), n++); // Pi0 event by event selection, and photon tagging from decay    
    maker->AddAnalysis(ConfigureInClusterIMAnalysis(0.5,100), n++); 
  }
  
  if(kQA) maker->AddAnalysis(ConfigureQAAnalysis(),n++);
  
  maker->SetAnaDebug(kDebug)  ;
  maker->SwitchOnHistogramsMaker()  ;
  if(kData.Contains("delta")) maker->SwitchOffAODsMaker() ;
  else                        maker->SwitchOnAODsMaker()  ;
  
  if(kPrint) maker->Print("");
  
  printf("<< End Configuration of %d analysis for calorimeter %s >>\n",n, kCalorimeter.Data());
  // CAREFUL
  //kName = Form("%s_Trig%s_Cl%s_TM%d",kCalorimeter.Data(), kTrig.Data(),kClusterArray.Data(),kFALSE);
  kName = Form("%s_Trig%s_Cl%s",kCalorimeter.Data(), kTrig.Data(),kClusterArray.Data());
  if(kCollisions=="PbPb" && kMaxCen>=0) kName+=Form("Cen%d_%d",kMinCen,kMaxCen);

  // Create task
  
  AliAnalysisTaskCaloTrackCorrelation * task = new AliAnalysisTaskCaloTrackCorrelation (Form("CaloTrackCorr%s",kName.Data()));
  task->SetConfigFileName(""); //Don't configure the analysis via configuration file.
  task->SetDebugLevel(kDebug);
  task->SetBranches("ESD:AliESDRun.,AliESDHeader"); 
  task->SetAnalysisMaker(maker);
  mgr->AddTask(task);
  
  //Create containers
  
  if(outputfile.Length()==0) outputfile = AliAnalysisManager::GetCommonFileName(); 
  
  AliAnalysisDataContainer *cout_pc   = mgr->CreateContainer(kName, TList::Class(), 
                                                             AliAnalysisManager::kOutputContainer, 
                                                             Form("%s",outputfile.Data()));
	
  AliAnalysisDataContainer *cout_cuts = mgr->CreateContainer(Form("Cuts_%s",kName.Data()), TList::Class(), 
                                                             AliAnalysisManager::kParamContainer, 
                                                             Form("%s",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
  if(!kData.Contains("delta")   && outputAOD) mgr->ConnectOutput (task, 0, mgr->GetCommonOutputContainer());
  mgr->ConnectOutput (task, 1, cout_pc);
  mgr->ConnectOutput (task, 2, cout_cuts);
  
  
  if(kTrig=="EMC7")
  {
    printf("CaloTrackCorr trigger EMC7\n");
    task->SelectCollisionCandidates(AliVEvent::kEMC7);
  }
  else if (kTrig=="INT7")
  {
    printf("CaloTrackCorr trigger INT7\n");
    task->SelectCollisionCandidates(AliVEvent::kINT7);
  }
  else if(kTrig=="EMC1")
  {
    printf("CaloTrackCorr trigger EMC1\n");
    task->SelectCollisionCandidates(AliVEvent::kEMC1);
  }
  else if(kTrig=="MB")
  {
    printf("CaloTrackCorr trigger MB\n");
    task->SelectCollisionCandidates(AliVEvent::kMB);
  }  
  else if(kTrig=="PHOS")
  {
    printf("CaloTrackCorr trigger PHOS\n");
    task->SelectCollisionCandidates(AliVEvent::kPHI7);
  }  
  else if(kTrig=="PHOSPb")
  {
    printf("CaloTrackCorr trigger PHOSPb\n");
    task->SelectCollisionCandidates(AliVEvent::kPHOSPb);
  }
  else if(kTrig=="AnyINT")
  {
    printf("CaloTrackCorr trigger AnyINT\n");
    task->SelectCollisionCandidates(AliVEvent::kAnyINT);
  }  
  else if(kTrig=="INT")
  {
    printf("CaloTrackCorr trigger AnyINT\n");
    task->SelectCollisionCandidates(AliVEvent::kAny);
  }
  else if(kTrig=="EMCEGA")
  {
    printf("CaloTrackCorr trigger EMC Gamma\n");
    task->SelectCollisionCandidates(AliVEvent::kEMCEGA);
  } 
  else if(kTrig=="EMCEJE")
  {
    printf("CaloTrackCorr trigger EMC Jet\n");
    task->SelectCollisionCandidates(AliVEvent::kEMCEJE);
  }
  else if(kTrig=="Central")
  {
    printf("CaloTrackCorr trigger Central\n");
    task->SelectCollisionCandidates(AliVEvent::kCentral);
  } 
  else if(kTrig=="SemiCentral")
  {
    printf("CaloTrackCorr trigger SemiCentral\n");
    task->SelectCollisionCandidates(AliVEvent::kSemiCentral);
  }
  
  return task;
}

//____________________________________
AliCaloTrackReader * ConfigureReader()
{
  
  AliCaloTrackReader * reader = 0;
  if     (kData.Contains("AOD"))   reader = new AliCaloTrackAODReader();
  else if(kData=="ESD")            reader = new AliCaloTrackESDReader();
  else if(kData=="MC" && 
          kInputDataType == "ESD") reader = new AliCaloTrackMCReader();
  
  reader->SetDebug(kDebug);//10 for lots of messages
  
  //Delta AOD?
  //reader->SetDeltaAODFileName("");
  if(kOutputAOD) reader->SwitchOnWriteDeltaAOD()  ;
  
  // MC settings
  if(kUseKinematics){
    if(kInputDataType == "ESD"){
      reader->SwitchOnStack();          
      reader->SwitchOffAODMCParticles(); 
    }
    else if(kInputDataType == "AOD"){
      reader->SwitchOffStack();          
      reader->SwitchOnAODMCParticles(); 
    }
  }  
  
  //------------------------
  // Detector input filling
  //------------------------
  
  //Min cluster/track E
  reader->SetEMCALEMin(0.3); 
  reader->SetEMCALEMax(1000); 
  reader->SetPHOSEMin(0.3);
  reader->SetPHOSEMax(1000);
  reader->SetCTSPtMin(0.1);
  reader->SetCTSPtMax(1000);
  
  if(!kSimulation && kCalibT) reader->SetEMCALTimeCut(-30,30); 
  else                        reader->SetEMCALTimeCut(-1000,1000); // Open time cut
  
  reader->SwitchOnFiducialCut();
  reader->GetFiducialCut()->SetSimpleCTSFiducialCut(0.8, 0, 360) ;

  // Tracks (do not filter tracks for SS studies)
  reader->SwitchOffCTS();
  
  if(kInputDataType=="ESD")
  {
    gROOT->LoadMacro("$ALICE_ROOT/PWGJE/macros/CreateTrackCutsPWGJE.C");
    AliESDtrackCuts * esdTrackCuts = CreateTrackCutsPWGJE(10041004);
    reader->SetTrackCuts(esdTrackCuts);
  }
  else if(kInputDataType=="AOD")
  {
    reader->SetTrackFilterMask(128); // Filter bit, not mask
  }
  
  // Calorimeter
  
  reader->SetEMCALClusterListName(kClusterArray);
  if(kClusterArray == "") 
  {
    printf("**************** Standard EMCAL clusters branch analysis **************** \n");
    reader->SwitchOnClusterRecalculation();
    // Check in ConfigureCaloUtils that the recalibration and bad map are ON 
  }
  else 
  {
    printf("**************** Input for analysis is Clusterizer %s **************** \n", kClusterArray.Data());
    reader->SwitchOffClusterRecalculation();
  }  
  
  if(kCalorimeter == "EMCAL") 
  {
    reader->SwitchOnEMCALCells();  
    reader->SwitchOnEMCAL();
  }
  if(kCalorimeter == "PHOS") 
  { 
    reader->SwitchOnPHOSCells();  
    reader->SwitchOnPHOS();
  }
  
  // for case data="deltaAOD", no need to fill the EMCAL/PHOS cluster lists
  if(kData.Contains("delta"))
  {
    reader->SwitchOffEMCAL();
    reader->SwitchOffPHOS();
    reader->SwitchOffEMCALCells(); 
    reader->SwitchOffPHOSCells(); 
  }
  
  //-----------------
  // Event selection
  //-----------------
  
  //if(!kUseKinematics) reader->SetFiredTriggerClassName("CEMC7EGA-B-NOPF-CENTNOTRD"); // L1 Gamma
  
  reader->SetZvertexCut(10.);               
  
  if(kEventSelection)
  {
    reader->SwitchOnPileUpEventRejection();   // remove pileup by default
    reader->SwitchOnV0ANDSelection() ;        // and besides v0 AND
    reader->SwitchOnPrimaryVertexSelection(); // and besides primary vertex
  }
  else 
  {
    reader->SwitchOffPileUpRejection();        // remove pileup by default
    reader->SwitchOffV0ANDSelection() ;        // and besides v0 AND
    reader->SwitchOffPrimaryVertexSelection(); // and besides primary vertex    
  }
    
  if(kCollisions=="PbPb") 
  {
    // Centrality
    reader->SetCentralityClass("V0M");
    reader->SetCentralityOpt(10);  // 10 (c= 0-10, 10-20 ...), 20  (c= 0-5, 5-10 ...) or 100 (c= 1, 2, 3 ..)
    reader->SetCentralityBin(kMinCen,kMaxCen); // Accept all events, if not select range
    
    // Event plane (only used in AliAnaPi0 for the moment)
    reader->SetEventPlaneMethod("Q");
  }
    
  if(kPrint) reader->Print("");
  
  return reader;
  
}

//_______________________________________
AliCalorimeterUtils* ConfigureCaloUtils()
{
  
  AliCalorimeterUtils *cu = new AliCalorimeterUtils;
  cu->SetDebug(kDebug);
  
  // Remove clusters close to borders, at least max energy cell is 1 cell away 
  cu->SetNumberOfCellsFromEMCALBorder(1);
  cu->SetNumberOfCellsFromPHOSBorder(2);
  
  // Search of local maxima in cluster
  if(kCollisions=="pp")
  {
    cu->SetLocalMaximaCutE(0.1);
    cu->SetLocalMaximaCutEDiff(0.03);
  }
  else 
  {
    cu->SetLocalMaximaCutE(0.2);
    cu->SetLocalMaximaCutEDiff(0.03);
  }
  
  cu->SwitchOffClusterPlot();

  if(kRecalTM) cu->SwitchOnRecalculateClusterTrackMatching(); // Done in clusterization
  else         cu->SwitchOffRecalculateClusterTrackMatching();
  
  cu->SwitchOnBadChannelsRemoval() ;
  
  //EMCAL settings

  if(!kSimulation)
    cu->SwitchOnLoadOwnEMCALGeometryMatrices();
  
  AliEMCALRecoUtils * recou = cu->GetEMCALRecoUtils();
  

  cu->SwitchOnRecalibration(); // Check the reader if it is taken into account during filtering
  
  
  gROOT->LoadMacro("$ALICE_ROOT/PWGGA/EMCALTasks/macros/ConfigureEMCALRecoUtils.C");
  ConfigureEMCALRecoUtils(recou,
                          kSimulation,                             
                          kExotic,
                          kNonLinearity,
                          kCalibE, 
                          kBadMap,
                          kCalibT);   
  
  if( kNonLinearity ) 
  { 
    printf("ConfigureCaloUtils() - Apply non linearity to EMCAL\n");
    cu->SwitchOnCorrectClusterLinearity();
  }
    
  printf("ConfigureCaloUtils() - EMCAL Recalibration ON? %d %d\n",recou->IsRecalibrationOn(), cu->IsRecalibrationOn());
  printf("ConfigureCaloUtils() - EMCAL BadMap        ON? %d %d\n",recou->IsBadChannelsRemovalSwitchedOn(), cu->IsBadChannelsRemovalSwitchedOn());
  
  
  if(kCalorimeter=="PHOS")
  {
    if (kYears <  2014) cu->SetNumberOfSuperModulesUsed(3);
    else                cu->SetNumberOfSuperModulesUsed(4);
  }
  else
  {
    if      (kYears == 2010) cu->SetNumberOfSuperModulesUsed(4); //EMCAL first year
    else if (kYears <  2014) cu->SetNumberOfSuperModulesUsed(10);
    else                     cu->SetNumberOfSuperModulesUsed(20);
  }
  
  // PHOS 
  cu->SwitchOffLoadOwnPHOSGeometryMatrices();
    
  if(kPrint) cu->Print("");
  
  return cu;
  
}

//_____________________________________
AliAnaPhoton* ConfigurePhotonAnalysis()
{
  
  AliAnaPhoton *ana = new AliAnaPhoton();
  ana->SetDebug(kDebug); //10 for lots of messages
  
  // cluster selection cuts
  
  ana->SwitchOffFiducialCut();

  ana->SetCalorimeter(kCalorimeter);
  
  if(kCalorimeter == "PHOS")
  {
    ana->SetNCellCut(2);// At least 3 cells
    ana->SetMinPt(0.3);
    ana->SetMinDistanceToBadChannel(2, 4, 5);
    ana->SetTimeCut(-2000,2000); // open cut
  }
  else 
  {//EMCAL
    ana->SetNCellCut(1);// At least 2 cells
    ana->SetMinEnergy(0.5); // avoid mip peak at E = 260 MeV
    ana->SetMaxEnergy(1000); 
    ana->SetTimeCut(-1000,1000); // Open time cut
    ana->SetMinDistanceToBadChannel(2, 4, 6); 
  }
  
  if(kTM)
  {
    ana->SwitchOnTrackMatchRejection() ;
    ana->SwitchOffTMHistoFill() ;
  }
  else
  {
    ana->SwitchOffTrackMatchRejection() ;
    ana->SwitchOnTMHistoFill() ;
  }
  
  //PID cuts (shower shape)
  ana->SwitchOffCaloPID(); // do PID selection, unless specified in GetCaloPID, selection not based on bayesian
  AliCaloPID* caloPID = ana->GetCaloPID();
  
  //EMCAL
  caloPID->SetEMCALLambda0CutMax(0.27);
  caloPID->SetEMCALLambda0CutMin(0.10);
  
  caloPID->SetEMCALDEtaCut(0.025);
  caloPID->SetEMCALDPhiCut(0.030);
    
  //PHOS
  caloPID->SetPHOSDispersionCut(2.5);
  caloPID->SetPHOSRCut(2.);
  if(kData=="AOD") caloPID->SetPHOSRCut(2000.); // Open cut since dX, dZ not stored
      
  ana->SwitchOnFillShowerShapeHistograms();  // Filled before photon shower shape selection
  
  // Input / output delta AOD settings
  
  if(!kData.Contains("delta")) 
  {
    ana->SetOutputAODName(Form("Photon%s",kName.Data()));
    ana->SetOutputAODClassName("AliAODPWG4ParticleCorrelation");
    //ana->SetOutputAODClassName("AliAODPWG4Particle"); // use if no correlation done
  }
  else ana->SetInputAODName(Form("Photon%s",kName.Data()));
  
  //Set Histograms name tag, bins and ranges
  
  ana->AddToHistogramsName(Form("AnaPhoton_TM%d_",kTM));
  SetHistoRangeAndNBins(ana->GetHistogramRanges()); // see method below
  
  // Number of particle type MC histograms
  ana->FillNOriginHistograms(8);
  ana->FillNPrimaryHistograms(4);
  
  ConfigureMC(ana);
  
  if(kPrint) ana->Print("");
  
  return ana;
  
}

//________________________________________________________________________________
AliAnaElectron* ConfigureElectronAnalysis()
{

  AliAnaElectron *ana = new AliAnaElectron();
  ana->SetDebug(kDebug); //10 for lots of messages

  ana->SwitchOnFillShowerShapeHistograms();  
  ana->SwitchOffFillWeightHistograms()  ;
  
  if(kCalorimeter == "PHOS")
  {
    ana->SetNCellCut(2);// At least 2 cells
    ana->SetMinPt(0.3);
    ana->SetMinDistanceToBadChannel(2, 4, 5);
  }
  else 
  {//EMCAL
    ana->SetNCellCut(1);// At least 2 cells
    ana->SetMinPt(0.5); // no effect minimum EMCAL cut.
    ana->SetMaxPt(100); 
    ana->SetMinDistanceToBadChannel(2, 4, 6);
    ana->SetTimeCut(-1000,1000); // Open time cut
  }
  
  //Electron selection cuts with tracks
  
  ana->SetEOverP(0.85, 1.2);
  // TO DO, find a more suitable way to set this
  if(kSimulation)
  { // LHC11a
    ana->SetdEdxCut(76, 85);
  }
  else // LHC11c
  {
    ana->SetdEdxCut(56, 64);
  }
  
  ana->SetCalorimeter(kCalorimeter);

  ana->SwitchOffCaloPID();
  
  ana->SwitchOffFiducialCut();
  
  if(!kData.Contains("delta")) 
  {
    ana->SetOutputAODName(Form("Electron%s",kName.Data()));
    ana->SetOutputAODClassName("AliAODPWG4ParticleCorrelation");
  }
  else ana->SetInputAODName(Form("Electron%s",kName.Data()));

  //Set Histograms name tag, bins and ranges
  
  ana->AddToHistogramsName(Form("AnaElectron_TM%d_",kTM));
  SetHistoRangeAndNBins(ana->GetHistogramRanges()); // see method below
  
  ConfigureMC(ana);
  
  if(kPrint) ana->Print("");
  
  return ana ;

}

//__________________________________________________________________________________________
AliAnaInsideClusterInvariantMass* ConfigureInClusterIMAnalysis(Float_t l0min, Float_t l0max)
{

  AliAnaInsideClusterInvariantMass *ana = new AliAnaInsideClusterInvariantMass();
  ana->SetDebug(kDebug); //10 for lots of messages
  
  // selection cuts
  
  ana->SetMinEnergy(5); 
  ana->SetMaxEnergy(200.);   
  ana->SetMinNCells(3);
  ana->SetM02Cut(l0min,l0max);
  ana->SetCalorimeter(kCalorimeter);
  
  //ana->AddToHistogramsName(Form("AnaInClusterIM_%1.2f_%1.2f_",l0min,l0max));
  ana->AddToHistogramsName("AnaInClusterIM_");

  SetHistoRangeAndNBins(ana->GetHistogramRanges()); // see method below
  
  AliCaloPID* caloPID = ana->GetCaloPID();
  caloPID->SetEMCALDEtaCut(0.025);
  caloPID->SetEMCALDPhiCut(0.030);
  caloPID->SetClusterSplittingM02Cut(0,100); // Do the selection in the analysis class and not in the PID method to fill SS histograms
  
  caloPID->SetPi0MassRange(0.10, 0.18);
  caloPID->SetEtaMassRange(0.40, 0.60);
  caloPID->SetPhotonMassRange(0.00, 0.08);

  ConfigureMC(ana);
  
  if(kPrint) ana->Print("");
  
  return ana;
  
}

//_____________________________________________________
AliAnaPi0EbE* ConfigurePi0EbEAnalysis(TString particle, 
                                      Int_t analysis)
{
  
  AliAnaPi0EbE *ana = new AliAnaPi0EbE();
  ana->SetDebug(kDebug);//10 for lots of messages
  
  ana->SetAnalysisType(analysis);
  TString opt = "";
  if(analysis==AliAnaPi0EbE::kIMCaloTracks) opt = "Conv";
  if(analysis==AliAnaPi0EbE::kSSCalo)       opt = "SS";
  
  ana->SetMinPt(0.5);
  
  if(kCalorimeter=="EMCAL")ana->SetPairTimeCut(15); // More strict than in pi0 inv mass analysis
  
  ana->SetCalorimeter(kCalorimeter);
  
  // Input / output delta AOD settings
  
  ana->SetInputAODName(Form("Photon%s",kName.Data()));
  if(!kInputDataType.Contains("delta")) 
  {
    ana->SetOutputAODName(Form("%s%s%s",particle.Data(), opt.Data(), kName.Data()));
    ana->SetOutputAODClassName("AliAODPWG4ParticleCorrelation");
  }
  else  
    ana->SetInputAODName(Form("%s%s%s",particle.Data(),opt.Data(),kName.Data()));
  
  if(analysis == AliAnaPi0EbE::kIMCaloTracks) ana->SetInputAODGammaConvName("PhotonsCTS");
  
  if(analysis!=AliAnaPi0EbE::kSSCalo)
  {
    AliNeutralMesonSelection *nms = ana->GetNeutralMesonSelection();
    nms->SetParticle(particle);
    // Tighten a bit mass cut with respect to default window
    if(particle=="Pi0") nms->SetInvMassCutRange(0.120,0.150);
    if(particle=="Eta") nms->SetInvMassCutRange(0.520,0.580);
    
    nms->SwitchOnAngleSelection();
    nms->KeepNeutralMesonSelectionHistos(kTRUE);
    //nms->SetAngleMaxParam(2,0.2);
    nms->SetHistoERangeAndNBins(0, 20, 80) ;
    //nms->SetHistoIMRangeAndNBins(0, 1, 400);
  }
  else
  { // cluster splitting settings
    ana->SetTimeCut(-1000,1000); // Open time cut
    AliCaloPID* caloPID = ana->GetCaloPID();
    caloPID->SetPi0MassRange(0.10, 0.18);
    caloPID->SetEtaMassRange(0.40, 0.60);
    caloPID->SetPhotonMassRange(0.00, 0.08);
    caloPID->SetClusterSplittingM02Cut(0.5,100); // Do the selection in the analysis class and not in the PID method to fill SS histograms
  }
  
  ana->SwitchOnSelectedClusterHistoFill(); // Shower shape et al. 
  ana->SwitchOffFillWeightHistograms();
  
  if(!kTM) ana->SwitchOnTMHistoFill();
  else     ana->SwitchOffTMHistoFill();
  
  //Set Histograms name tag, bins and ranges
  
  ana->AddToHistogramsName(Form("Ana%s%sEbE_TM%d_",particle.Data(),opt.Data(),kTM));
  SetHistoRangeAndNBins(ana->GetHistogramRanges()); // see method below
  
  ConfigureMC(ana);
  
  if(kPrint) ana->Print("");
  
  return  ana;
  
}

//________________________________________
AliAnaCalorimeterQA* ConfigureQAAnalysis()
{
  
  AliAnaCalorimeterQA *ana = new AliAnaCalorimeterQA();
  ana->SetDebug(kDebug); //10 for lots of messages
  ana->SetCalorimeter(kCalorimeter);
  
  ana->SetTimeCut(-1000,1000); // Open time cut
  
  // Study inter detector correlation (PHOS, EMCAL, Tracks, V0)
  ana->SwitchOffCorrelation(); // make sure you switch in the reader PHOS and EMCAL cells and clusters if option is ON
  
  // correlation between calorimeters, tracks, v0 ...
  // make sure you switch in the reader PHOS and EMCAL cells and clusters if option is ON
  if(kCalorimeter=="EMCAL" && kClusterArray=="") ana->SwitchOnCorrelation(); 
   else                                          ana->SwitchOffCorrelation();
  
  // Study exotic clusters PHOS and EMCAL
  if(kClusterArray=="") ana->SwitchOnStudyBadClusters() ; 
  else                  ana->SwitchOffStudyBadClusters() ;

  ana->SwitchOffFiducialCut();
  ana->SwitchOffFillAllTH3Histogram();
  ana->SwitchOffFillAllPositionHistogram();
  ana->SwitchOffFillAllPositionHistogram2();
  if(!kExotic)ana->SwitchOnStudyBadClusters();
  else        ana->SwitchOffStudyBadClusters();
  ana->SwitchOffStudyClustersAsymmetry();
  ana->SwitchOffStudyWeight();
  ana->SwitchOnFillAllTrackMatchingHistogram();
  
  ana->AddToHistogramsName("QA_"); //Begining of histograms name
  SetHistoRangeAndNBins(ana->GetHistogramRanges()); // see method below
  
  ConfigureMC(ana);
  
  if(kPrint) ana->Print("");	
  
  return ana;
  
}

//________________________________________________________
void ConfigureMC(AliAnaCaloTrackCorrBaseClass* ana)
{
  if(kSimulation) ana->SwitchOnDataMC() ;//Access MC stack and fill more histograms, AOD MC not implemented yet.
  else            ana->SwitchOffDataMC() ;

  //Set here generator name, default pythia
  //ana->GetMCAnalysisUtils()->SetMCGenerator("");
}  

//________________________________________________________
void SetHistoRangeAndNBins (AliHistogramRanges* histoRanges)
{
  // Set common bins for all analysis and MC histograms filling
    
  histoRanges->SetHistoPtRangeAndNBins(0, 100, 200) ; // Energy and pt histograms
  
  if(kCalorimeter=="EMCAL")
  {
    if(kYears==2010)
    {
      histoRanges->SetHistoPhiRangeAndNBins(78*TMath::DegToRad(), 122*TMath::DegToRad(), 78) ;
      histoRanges->SetHistoXRangeAndNBins(-230,90,120); // QA
      histoRanges->SetHistoYRangeAndNBins(370,450,40);  // QA
    }
    else if(kYears==2011)
    {           
      histoRanges->SetHistoPhiRangeAndNBins(78*TMath::DegToRad(), 182*TMath::DegToRad(), 108) ;
      histoRanges->SetHistoXRangeAndNBins(-600,90,200); // QA
      histoRanges->SetHistoYRangeAndNBins(100,450,100); // QA
    }
    else
    {
      histoRanges->SetHistoPhiRangeAndNBins(78*TMath::DegToRad(), 190*TMath::DegToRad(), 122) ;
      histoRanges->SetHistoXRangeAndNBins(-100,90,200); // QA
      histoRanges->SetHistoYRangeAndNBins(50,450,100);  // QA
    }

    histoRanges->SetHistoEtaRangeAndNBins(-0.72, 0.72, 144) ;
  }
  else
  {
    histoRanges->SetHistoPhiRangeAndNBins(260*TMath::DegToRad(), 320*TMath::DegToRad(), 60) ;
    histoRanges->SetHistoEtaRangeAndNBins(-0.13, 0.13, 130) ;
  }
  
  histoRanges->SetHistoShowerShapeRangeAndNBins(-0.1, 4.9, 500);
  
  // Invariant mass histoRangeslysis
  histoRanges->SetHistoMassRangeAndNBins(0., 1., 200) ;
  histoRanges->SetHistoAsymmetryRangeAndNBins(0., 1. , 100) ;
  
  // check if time calibration is on
  histoRanges->SetHistoTimeRangeAndNBins(-1000.,1000,1000);
  histoRanges->SetHistoDiffTimeRangeAndNBins(-200, 200, 800);
  
  // track-cluster residuals
  histoRanges->SetHistoTrackResidualEtaRangeAndNBins(-0.15,0.15,300);
  histoRanges->SetHistoTrackResidualPhiRangeAndNBins(-0.15,0.15,300);

  // QA, electron, charged
  histoRanges->SetHistoPOverERangeAndNBins(0,10.,100);
  histoRanges->SetHistodEdxRangeAndNBins(0.,200.,200);
  
  // QA
  histoRanges->SetHistoFinePtRangeAndNBins(0, 10, 200) ; // bining for fhAmpId
  histoRanges->SetHistodRRangeAndNBins(0.,TMath::Pi(),150);
  histoRanges->SetHistoRatioRangeAndNBins(0.,2.,100);
  histoRanges->SetHistoVertexDistRangeAndNBins(0.,500.,500);
  histoRanges->SetHistoNClusterCellRangeAndNBins(0,500,500);
  histoRanges->SetHistoZRangeAndNBins(-400,400,200);
  histoRanges->SetHistoRRangeAndNBins(400,450,25);
  histoRanges->SetHistoV0SignalRangeAndNBins(0,5000,500);
  histoRanges->SetHistoV0MultiplicityRangeAndNBins(0,5000,500);
  histoRanges->SetHistoTrackMultiplicityRangeAndNBins(0,5000,500);
  
}


 AddTaskShowerShapeStudies.C:1
 AddTaskShowerShapeStudies.C:2
 AddTaskShowerShapeStudies.C:3
 AddTaskShowerShapeStudies.C:4
 AddTaskShowerShapeStudies.C:5
 AddTaskShowerShapeStudies.C:6
 AddTaskShowerShapeStudies.C:7
 AddTaskShowerShapeStudies.C:8
 AddTaskShowerShapeStudies.C:9
 AddTaskShowerShapeStudies.C:10
 AddTaskShowerShapeStudies.C:11
 AddTaskShowerShapeStudies.C:12
 AddTaskShowerShapeStudies.C:13
 AddTaskShowerShapeStudies.C:14
 AddTaskShowerShapeStudies.C:15
 AddTaskShowerShapeStudies.C:16
 AddTaskShowerShapeStudies.C:17
 AddTaskShowerShapeStudies.C:18
 AddTaskShowerShapeStudies.C:19
 AddTaskShowerShapeStudies.C:20
 AddTaskShowerShapeStudies.C:21
 AddTaskShowerShapeStudies.C:22
 AddTaskShowerShapeStudies.C:23
 AddTaskShowerShapeStudies.C:24
 AddTaskShowerShapeStudies.C:25
 AddTaskShowerShapeStudies.C:26
 AddTaskShowerShapeStudies.C:27
 AddTaskShowerShapeStudies.C:28
 AddTaskShowerShapeStudies.C:29
 AddTaskShowerShapeStudies.C:30
 AddTaskShowerShapeStudies.C:31
 AddTaskShowerShapeStudies.C:32
 AddTaskShowerShapeStudies.C:33
 AddTaskShowerShapeStudies.C:34
 AddTaskShowerShapeStudies.C:35
 AddTaskShowerShapeStudies.C:36
 AddTaskShowerShapeStudies.C:37
 AddTaskShowerShapeStudies.C:38
 AddTaskShowerShapeStudies.C:39
 AddTaskShowerShapeStudies.C:40
 AddTaskShowerShapeStudies.C:41
 AddTaskShowerShapeStudies.C:42
 AddTaskShowerShapeStudies.C:43
 AddTaskShowerShapeStudies.C:44
 AddTaskShowerShapeStudies.C:45
 AddTaskShowerShapeStudies.C:46
 AddTaskShowerShapeStudies.C:47
 AddTaskShowerShapeStudies.C:48
 AddTaskShowerShapeStudies.C:49
 AddTaskShowerShapeStudies.C:50
 AddTaskShowerShapeStudies.C:51
 AddTaskShowerShapeStudies.C:52
 AddTaskShowerShapeStudies.C:53
 AddTaskShowerShapeStudies.C:54
 AddTaskShowerShapeStudies.C:55
 AddTaskShowerShapeStudies.C:56
 AddTaskShowerShapeStudies.C:57
 AddTaskShowerShapeStudies.C:58
 AddTaskShowerShapeStudies.C:59
 AddTaskShowerShapeStudies.C:60
 AddTaskShowerShapeStudies.C:61
 AddTaskShowerShapeStudies.C:62
 AddTaskShowerShapeStudies.C:63
 AddTaskShowerShapeStudies.C:64
 AddTaskShowerShapeStudies.C:65
 AddTaskShowerShapeStudies.C:66
 AddTaskShowerShapeStudies.C:67
 AddTaskShowerShapeStudies.C:68
 AddTaskShowerShapeStudies.C:69
 AddTaskShowerShapeStudies.C:70
 AddTaskShowerShapeStudies.C:71
 AddTaskShowerShapeStudies.C:72
 AddTaskShowerShapeStudies.C:73
 AddTaskShowerShapeStudies.C:74
 AddTaskShowerShapeStudies.C:75
 AddTaskShowerShapeStudies.C:76
 AddTaskShowerShapeStudies.C:77
 AddTaskShowerShapeStudies.C:78
 AddTaskShowerShapeStudies.C:79
 AddTaskShowerShapeStudies.C:80
 AddTaskShowerShapeStudies.C:81
 AddTaskShowerShapeStudies.C:82
 AddTaskShowerShapeStudies.C:83
 AddTaskShowerShapeStudies.C:84
 AddTaskShowerShapeStudies.C:85
 AddTaskShowerShapeStudies.C:86
 AddTaskShowerShapeStudies.C:87
 AddTaskShowerShapeStudies.C:88
 AddTaskShowerShapeStudies.C:89
 AddTaskShowerShapeStudies.C:90
 AddTaskShowerShapeStudies.C:91
 AddTaskShowerShapeStudies.C:92
 AddTaskShowerShapeStudies.C:93
 AddTaskShowerShapeStudies.C:94
 AddTaskShowerShapeStudies.C:95
 AddTaskShowerShapeStudies.C:96
 AddTaskShowerShapeStudies.C:97
 AddTaskShowerShapeStudies.C:98
 AddTaskShowerShapeStudies.C:99
 AddTaskShowerShapeStudies.C:100
 AddTaskShowerShapeStudies.C:101
 AddTaskShowerShapeStudies.C:102
 AddTaskShowerShapeStudies.C:103
 AddTaskShowerShapeStudies.C:104
 AddTaskShowerShapeStudies.C:105
 AddTaskShowerShapeStudies.C:106
 AddTaskShowerShapeStudies.C:107
 AddTaskShowerShapeStudies.C:108
 AddTaskShowerShapeStudies.C:109
 AddTaskShowerShapeStudies.C:110
 AddTaskShowerShapeStudies.C:111
 AddTaskShowerShapeStudies.C:112
 AddTaskShowerShapeStudies.C:113
 AddTaskShowerShapeStudies.C:114
 AddTaskShowerShapeStudies.C:115
 AddTaskShowerShapeStudies.C:116
 AddTaskShowerShapeStudies.C:117
 AddTaskShowerShapeStudies.C:118
 AddTaskShowerShapeStudies.C:119
 AddTaskShowerShapeStudies.C:120
 AddTaskShowerShapeStudies.C:121
 AddTaskShowerShapeStudies.C:122
 AddTaskShowerShapeStudies.C:123
 AddTaskShowerShapeStudies.C:124
 AddTaskShowerShapeStudies.C:125
 AddTaskShowerShapeStudies.C:126
 AddTaskShowerShapeStudies.C:127
 AddTaskShowerShapeStudies.C:128
 AddTaskShowerShapeStudies.C:129
 AddTaskShowerShapeStudies.C:130
 AddTaskShowerShapeStudies.C:131
 AddTaskShowerShapeStudies.C:132
 AddTaskShowerShapeStudies.C:133
 AddTaskShowerShapeStudies.C:134
 AddTaskShowerShapeStudies.C:135
 AddTaskShowerShapeStudies.C:136
 AddTaskShowerShapeStudies.C:137
 AddTaskShowerShapeStudies.C:138
 AddTaskShowerShapeStudies.C:139
 AddTaskShowerShapeStudies.C:140
 AddTaskShowerShapeStudies.C:141
 AddTaskShowerShapeStudies.C:142
 AddTaskShowerShapeStudies.C:143
 AddTaskShowerShapeStudies.C:144
 AddTaskShowerShapeStudies.C:145
 AddTaskShowerShapeStudies.C:146
 AddTaskShowerShapeStudies.C:147
 AddTaskShowerShapeStudies.C:148
 AddTaskShowerShapeStudies.C:149
 AddTaskShowerShapeStudies.C:150
 AddTaskShowerShapeStudies.C:151
 AddTaskShowerShapeStudies.C:152
 AddTaskShowerShapeStudies.C:153
 AddTaskShowerShapeStudies.C:154
 AddTaskShowerShapeStudies.C:155
 AddTaskShowerShapeStudies.C:156
 AddTaskShowerShapeStudies.C:157
 AddTaskShowerShapeStudies.C:158
 AddTaskShowerShapeStudies.C:159
 AddTaskShowerShapeStudies.C:160
 AddTaskShowerShapeStudies.C:161
 AddTaskShowerShapeStudies.C:162
 AddTaskShowerShapeStudies.C:163
 AddTaskShowerShapeStudies.C:164
 AddTaskShowerShapeStudies.C:165
 AddTaskShowerShapeStudies.C:166
 AddTaskShowerShapeStudies.C:167
 AddTaskShowerShapeStudies.C:168
 AddTaskShowerShapeStudies.C:169
 AddTaskShowerShapeStudies.C:170
 AddTaskShowerShapeStudies.C:171
 AddTaskShowerShapeStudies.C:172
 AddTaskShowerShapeStudies.C:173
 AddTaskShowerShapeStudies.C:174
 AddTaskShowerShapeStudies.C:175
 AddTaskShowerShapeStudies.C:176
 AddTaskShowerShapeStudies.C:177
 AddTaskShowerShapeStudies.C:178
 AddTaskShowerShapeStudies.C:179
 AddTaskShowerShapeStudies.C:180
 AddTaskShowerShapeStudies.C:181
 AddTaskShowerShapeStudies.C:182
 AddTaskShowerShapeStudies.C:183
 AddTaskShowerShapeStudies.C:184
 AddTaskShowerShapeStudies.C:185
 AddTaskShowerShapeStudies.C:186
 AddTaskShowerShapeStudies.C:187
 AddTaskShowerShapeStudies.C:188
 AddTaskShowerShapeStudies.C:189
 AddTaskShowerShapeStudies.C:190
 AddTaskShowerShapeStudies.C:191
 AddTaskShowerShapeStudies.C:192
 AddTaskShowerShapeStudies.C:193
 AddTaskShowerShapeStudies.C:194
 AddTaskShowerShapeStudies.C:195
 AddTaskShowerShapeStudies.C:196
 AddTaskShowerShapeStudies.C:197
 AddTaskShowerShapeStudies.C:198
 AddTaskShowerShapeStudies.C:199
 AddTaskShowerShapeStudies.C:200
 AddTaskShowerShapeStudies.C:201
 AddTaskShowerShapeStudies.C:202
 AddTaskShowerShapeStudies.C:203
 AddTaskShowerShapeStudies.C:204
 AddTaskShowerShapeStudies.C:205
 AddTaskShowerShapeStudies.C:206
 AddTaskShowerShapeStudies.C:207
 AddTaskShowerShapeStudies.C:208
 AddTaskShowerShapeStudies.C:209
 AddTaskShowerShapeStudies.C:210
 AddTaskShowerShapeStudies.C:211
 AddTaskShowerShapeStudies.C:212
 AddTaskShowerShapeStudies.C:213
 AddTaskShowerShapeStudies.C:214
 AddTaskShowerShapeStudies.C:215
 AddTaskShowerShapeStudies.C:216
 AddTaskShowerShapeStudies.C:217
 AddTaskShowerShapeStudies.C:218
 AddTaskShowerShapeStudies.C:219
 AddTaskShowerShapeStudies.C:220
 AddTaskShowerShapeStudies.C:221
 AddTaskShowerShapeStudies.C:222
 AddTaskShowerShapeStudies.C:223
 AddTaskShowerShapeStudies.C:224
 AddTaskShowerShapeStudies.C:225
 AddTaskShowerShapeStudies.C:226
 AddTaskShowerShapeStudies.C:227
 AddTaskShowerShapeStudies.C:228
 AddTaskShowerShapeStudies.C:229
 AddTaskShowerShapeStudies.C:230
 AddTaskShowerShapeStudies.C:231
 AddTaskShowerShapeStudies.C:232
 AddTaskShowerShapeStudies.C:233
 AddTaskShowerShapeStudies.C:234
 AddTaskShowerShapeStudies.C:235
 AddTaskShowerShapeStudies.C:236
 AddTaskShowerShapeStudies.C:237
 AddTaskShowerShapeStudies.C:238
 AddTaskShowerShapeStudies.C:239
 AddTaskShowerShapeStudies.C:240
 AddTaskShowerShapeStudies.C:241
 AddTaskShowerShapeStudies.C:242
 AddTaskShowerShapeStudies.C:243
 AddTaskShowerShapeStudies.C:244
 AddTaskShowerShapeStudies.C:245
 AddTaskShowerShapeStudies.C:246
 AddTaskShowerShapeStudies.C:247
 AddTaskShowerShapeStudies.C:248
 AddTaskShowerShapeStudies.C:249
 AddTaskShowerShapeStudies.C:250
 AddTaskShowerShapeStudies.C:251
 AddTaskShowerShapeStudies.C:252
 AddTaskShowerShapeStudies.C:253
 AddTaskShowerShapeStudies.C:254
 AddTaskShowerShapeStudies.C:255
 AddTaskShowerShapeStudies.C:256
 AddTaskShowerShapeStudies.C:257
 AddTaskShowerShapeStudies.C:258
 AddTaskShowerShapeStudies.C:259
 AddTaskShowerShapeStudies.C:260
 AddTaskShowerShapeStudies.C:261
 AddTaskShowerShapeStudies.C:262
 AddTaskShowerShapeStudies.C:263
 AddTaskShowerShapeStudies.C:264
 AddTaskShowerShapeStudies.C:265
 AddTaskShowerShapeStudies.C:266
 AddTaskShowerShapeStudies.C:267
 AddTaskShowerShapeStudies.C:268
 AddTaskShowerShapeStudies.C:269
 AddTaskShowerShapeStudies.C:270
 AddTaskShowerShapeStudies.C:271
 AddTaskShowerShapeStudies.C:272
 AddTaskShowerShapeStudies.C:273
 AddTaskShowerShapeStudies.C:274
 AddTaskShowerShapeStudies.C:275
 AddTaskShowerShapeStudies.C:276
 AddTaskShowerShapeStudies.C:277
 AddTaskShowerShapeStudies.C:278
 AddTaskShowerShapeStudies.C:279
 AddTaskShowerShapeStudies.C:280
 AddTaskShowerShapeStudies.C:281
 AddTaskShowerShapeStudies.C:282
 AddTaskShowerShapeStudies.C:283
 AddTaskShowerShapeStudies.C:284
 AddTaskShowerShapeStudies.C:285
 AddTaskShowerShapeStudies.C:286
 AddTaskShowerShapeStudies.C:287
 AddTaskShowerShapeStudies.C:288
 AddTaskShowerShapeStudies.C:289
 AddTaskShowerShapeStudies.C:290
 AddTaskShowerShapeStudies.C:291
 AddTaskShowerShapeStudies.C:292
 AddTaskShowerShapeStudies.C:293
 AddTaskShowerShapeStudies.C:294
 AddTaskShowerShapeStudies.C:295
 AddTaskShowerShapeStudies.C:296
 AddTaskShowerShapeStudies.C:297
 AddTaskShowerShapeStudies.C:298
 AddTaskShowerShapeStudies.C:299
 AddTaskShowerShapeStudies.C:300
 AddTaskShowerShapeStudies.C:301
 AddTaskShowerShapeStudies.C:302
 AddTaskShowerShapeStudies.C:303
 AddTaskShowerShapeStudies.C:304
 AddTaskShowerShapeStudies.C:305
 AddTaskShowerShapeStudies.C:306
 AddTaskShowerShapeStudies.C:307
 AddTaskShowerShapeStudies.C:308
 AddTaskShowerShapeStudies.C:309
 AddTaskShowerShapeStudies.C:310
 AddTaskShowerShapeStudies.C:311
 AddTaskShowerShapeStudies.C:312
 AddTaskShowerShapeStudies.C:313
 AddTaskShowerShapeStudies.C:314
 AddTaskShowerShapeStudies.C:315
 AddTaskShowerShapeStudies.C:316
 AddTaskShowerShapeStudies.C:317
 AddTaskShowerShapeStudies.C:318
 AddTaskShowerShapeStudies.C:319
 AddTaskShowerShapeStudies.C:320
 AddTaskShowerShapeStudies.C:321
 AddTaskShowerShapeStudies.C:322
 AddTaskShowerShapeStudies.C:323
 AddTaskShowerShapeStudies.C:324
 AddTaskShowerShapeStudies.C:325
 AddTaskShowerShapeStudies.C:326
 AddTaskShowerShapeStudies.C:327
 AddTaskShowerShapeStudies.C:328
 AddTaskShowerShapeStudies.C:329
 AddTaskShowerShapeStudies.C:330
 AddTaskShowerShapeStudies.C:331
 AddTaskShowerShapeStudies.C:332
 AddTaskShowerShapeStudies.C:333
 AddTaskShowerShapeStudies.C:334
 AddTaskShowerShapeStudies.C:335
 AddTaskShowerShapeStudies.C:336
 AddTaskShowerShapeStudies.C:337
 AddTaskShowerShapeStudies.C:338
 AddTaskShowerShapeStudies.C:339
 AddTaskShowerShapeStudies.C:340
 AddTaskShowerShapeStudies.C:341
 AddTaskShowerShapeStudies.C:342
 AddTaskShowerShapeStudies.C:343
 AddTaskShowerShapeStudies.C:344
 AddTaskShowerShapeStudies.C:345
 AddTaskShowerShapeStudies.C:346
 AddTaskShowerShapeStudies.C:347
 AddTaskShowerShapeStudies.C:348
 AddTaskShowerShapeStudies.C:349
 AddTaskShowerShapeStudies.C:350
 AddTaskShowerShapeStudies.C:351
 AddTaskShowerShapeStudies.C:352
 AddTaskShowerShapeStudies.C:353
 AddTaskShowerShapeStudies.C:354
 AddTaskShowerShapeStudies.C:355
 AddTaskShowerShapeStudies.C:356
 AddTaskShowerShapeStudies.C:357
 AddTaskShowerShapeStudies.C:358
 AddTaskShowerShapeStudies.C:359
 AddTaskShowerShapeStudies.C:360
 AddTaskShowerShapeStudies.C:361
 AddTaskShowerShapeStudies.C:362
 AddTaskShowerShapeStudies.C:363
 AddTaskShowerShapeStudies.C:364
 AddTaskShowerShapeStudies.C:365
 AddTaskShowerShapeStudies.C:366
 AddTaskShowerShapeStudies.C:367
 AddTaskShowerShapeStudies.C:368
 AddTaskShowerShapeStudies.C:369
 AddTaskShowerShapeStudies.C:370
 AddTaskShowerShapeStudies.C:371
 AddTaskShowerShapeStudies.C:372
 AddTaskShowerShapeStudies.C:373
 AddTaskShowerShapeStudies.C:374
 AddTaskShowerShapeStudies.C:375
 AddTaskShowerShapeStudies.C:376
 AddTaskShowerShapeStudies.C:377
 AddTaskShowerShapeStudies.C:378
 AddTaskShowerShapeStudies.C:379
 AddTaskShowerShapeStudies.C:380
 AddTaskShowerShapeStudies.C:381
 AddTaskShowerShapeStudies.C:382
 AddTaskShowerShapeStudies.C:383
 AddTaskShowerShapeStudies.C:384
 AddTaskShowerShapeStudies.C:385
 AddTaskShowerShapeStudies.C:386
 AddTaskShowerShapeStudies.C:387
 AddTaskShowerShapeStudies.C:388
 AddTaskShowerShapeStudies.C:389
 AddTaskShowerShapeStudies.C:390
 AddTaskShowerShapeStudies.C:391
 AddTaskShowerShapeStudies.C:392
 AddTaskShowerShapeStudies.C:393
 AddTaskShowerShapeStudies.C:394
 AddTaskShowerShapeStudies.C:395
 AddTaskShowerShapeStudies.C:396
 AddTaskShowerShapeStudies.C:397
 AddTaskShowerShapeStudies.C:398
 AddTaskShowerShapeStudies.C:399
 AddTaskShowerShapeStudies.C:400
 AddTaskShowerShapeStudies.C:401
 AddTaskShowerShapeStudies.C:402
 AddTaskShowerShapeStudies.C:403
 AddTaskShowerShapeStudies.C:404
 AddTaskShowerShapeStudies.C:405
 AddTaskShowerShapeStudies.C:406
 AddTaskShowerShapeStudies.C:407
 AddTaskShowerShapeStudies.C:408
 AddTaskShowerShapeStudies.C:409
 AddTaskShowerShapeStudies.C:410
 AddTaskShowerShapeStudies.C:411
 AddTaskShowerShapeStudies.C:412
 AddTaskShowerShapeStudies.C:413
 AddTaskShowerShapeStudies.C:414
 AddTaskShowerShapeStudies.C:415
 AddTaskShowerShapeStudies.C:416
 AddTaskShowerShapeStudies.C:417
 AddTaskShowerShapeStudies.C:418
 AddTaskShowerShapeStudies.C:419
 AddTaskShowerShapeStudies.C:420
 AddTaskShowerShapeStudies.C:421
 AddTaskShowerShapeStudies.C:422
 AddTaskShowerShapeStudies.C:423
 AddTaskShowerShapeStudies.C:424
 AddTaskShowerShapeStudies.C:425
 AddTaskShowerShapeStudies.C:426
 AddTaskShowerShapeStudies.C:427
 AddTaskShowerShapeStudies.C:428
 AddTaskShowerShapeStudies.C:429
 AddTaskShowerShapeStudies.C:430
 AddTaskShowerShapeStudies.C:431
 AddTaskShowerShapeStudies.C:432
 AddTaskShowerShapeStudies.C:433
 AddTaskShowerShapeStudies.C:434
 AddTaskShowerShapeStudies.C:435
 AddTaskShowerShapeStudies.C:436
 AddTaskShowerShapeStudies.C:437
 AddTaskShowerShapeStudies.C:438
 AddTaskShowerShapeStudies.C:439
 AddTaskShowerShapeStudies.C:440
 AddTaskShowerShapeStudies.C:441
 AddTaskShowerShapeStudies.C:442
 AddTaskShowerShapeStudies.C:443
 AddTaskShowerShapeStudies.C:444
 AddTaskShowerShapeStudies.C:445
 AddTaskShowerShapeStudies.C:446
 AddTaskShowerShapeStudies.C:447
 AddTaskShowerShapeStudies.C:448
 AddTaskShowerShapeStudies.C:449
 AddTaskShowerShapeStudies.C:450
 AddTaskShowerShapeStudies.C:451
 AddTaskShowerShapeStudies.C:452
 AddTaskShowerShapeStudies.C:453
 AddTaskShowerShapeStudies.C:454
 AddTaskShowerShapeStudies.C:455
 AddTaskShowerShapeStudies.C:456
 AddTaskShowerShapeStudies.C:457
 AddTaskShowerShapeStudies.C:458
 AddTaskShowerShapeStudies.C:459
 AddTaskShowerShapeStudies.C:460
 AddTaskShowerShapeStudies.C:461
 AddTaskShowerShapeStudies.C:462
 AddTaskShowerShapeStudies.C:463
 AddTaskShowerShapeStudies.C:464
 AddTaskShowerShapeStudies.C:465
 AddTaskShowerShapeStudies.C:466
 AddTaskShowerShapeStudies.C:467
 AddTaskShowerShapeStudies.C:468
 AddTaskShowerShapeStudies.C:469
 AddTaskShowerShapeStudies.C:470
 AddTaskShowerShapeStudies.C:471
 AddTaskShowerShapeStudies.C:472
 AddTaskShowerShapeStudies.C:473
 AddTaskShowerShapeStudies.C:474
 AddTaskShowerShapeStudies.C:475
 AddTaskShowerShapeStudies.C:476
 AddTaskShowerShapeStudies.C:477
 AddTaskShowerShapeStudies.C:478
 AddTaskShowerShapeStudies.C:479
 AddTaskShowerShapeStudies.C:480
 AddTaskShowerShapeStudies.C:481
 AddTaskShowerShapeStudies.C:482
 AddTaskShowerShapeStudies.C:483
 AddTaskShowerShapeStudies.C:484
 AddTaskShowerShapeStudies.C:485
 AddTaskShowerShapeStudies.C:486
 AddTaskShowerShapeStudies.C:487
 AddTaskShowerShapeStudies.C:488
 AddTaskShowerShapeStudies.C:489
 AddTaskShowerShapeStudies.C:490
 AddTaskShowerShapeStudies.C:491
 AddTaskShowerShapeStudies.C:492
 AddTaskShowerShapeStudies.C:493
 AddTaskShowerShapeStudies.C:494
 AddTaskShowerShapeStudies.C:495
 AddTaskShowerShapeStudies.C:496
 AddTaskShowerShapeStudies.C:497
 AddTaskShowerShapeStudies.C:498
 AddTaskShowerShapeStudies.C:499
 AddTaskShowerShapeStudies.C:500
 AddTaskShowerShapeStudies.C:501
 AddTaskShowerShapeStudies.C:502
 AddTaskShowerShapeStudies.C:503
 AddTaskShowerShapeStudies.C:504
 AddTaskShowerShapeStudies.C:505
 AddTaskShowerShapeStudies.C:506
 AddTaskShowerShapeStudies.C:507
 AddTaskShowerShapeStudies.C:508
 AddTaskShowerShapeStudies.C:509
 AddTaskShowerShapeStudies.C:510
 AddTaskShowerShapeStudies.C:511
 AddTaskShowerShapeStudies.C:512
 AddTaskShowerShapeStudies.C:513
 AddTaskShowerShapeStudies.C:514
 AddTaskShowerShapeStudies.C:515
 AddTaskShowerShapeStudies.C:516
 AddTaskShowerShapeStudies.C:517
 AddTaskShowerShapeStudies.C:518
 AddTaskShowerShapeStudies.C:519
 AddTaskShowerShapeStudies.C:520
 AddTaskShowerShapeStudies.C:521
 AddTaskShowerShapeStudies.C:522
 AddTaskShowerShapeStudies.C:523
 AddTaskShowerShapeStudies.C:524
 AddTaskShowerShapeStudies.C:525
 AddTaskShowerShapeStudies.C:526
 AddTaskShowerShapeStudies.C:527
 AddTaskShowerShapeStudies.C:528
 AddTaskShowerShapeStudies.C:529
 AddTaskShowerShapeStudies.C:530
 AddTaskShowerShapeStudies.C:531
 AddTaskShowerShapeStudies.C:532
 AddTaskShowerShapeStudies.C:533
 AddTaskShowerShapeStudies.C:534
 AddTaskShowerShapeStudies.C:535
 AddTaskShowerShapeStudies.C:536
 AddTaskShowerShapeStudies.C:537
 AddTaskShowerShapeStudies.C:538
 AddTaskShowerShapeStudies.C:539
 AddTaskShowerShapeStudies.C:540
 AddTaskShowerShapeStudies.C:541
 AddTaskShowerShapeStudies.C:542
 AddTaskShowerShapeStudies.C:543
 AddTaskShowerShapeStudies.C:544
 AddTaskShowerShapeStudies.C:545
 AddTaskShowerShapeStudies.C:546
 AddTaskShowerShapeStudies.C:547
 AddTaskShowerShapeStudies.C:548
 AddTaskShowerShapeStudies.C:549
 AddTaskShowerShapeStudies.C:550
 AddTaskShowerShapeStudies.C:551
 AddTaskShowerShapeStudies.C:552
 AddTaskShowerShapeStudies.C:553
 AddTaskShowerShapeStudies.C:554
 AddTaskShowerShapeStudies.C:555
 AddTaskShowerShapeStudies.C:556
 AddTaskShowerShapeStudies.C:557
 AddTaskShowerShapeStudies.C:558
 AddTaskShowerShapeStudies.C:559
 AddTaskShowerShapeStudies.C:560
 AddTaskShowerShapeStudies.C:561
 AddTaskShowerShapeStudies.C:562
 AddTaskShowerShapeStudies.C:563
 AddTaskShowerShapeStudies.C:564
 AddTaskShowerShapeStudies.C:565
 AddTaskShowerShapeStudies.C:566
 AddTaskShowerShapeStudies.C:567
 AddTaskShowerShapeStudies.C:568
 AddTaskShowerShapeStudies.C:569
 AddTaskShowerShapeStudies.C:570
 AddTaskShowerShapeStudies.C:571
 AddTaskShowerShapeStudies.C:572
 AddTaskShowerShapeStudies.C:573
 AddTaskShowerShapeStudies.C:574
 AddTaskShowerShapeStudies.C:575
 AddTaskShowerShapeStudies.C:576
 AddTaskShowerShapeStudies.C:577
 AddTaskShowerShapeStudies.C:578
 AddTaskShowerShapeStudies.C:579
 AddTaskShowerShapeStudies.C:580
 AddTaskShowerShapeStudies.C:581
 AddTaskShowerShapeStudies.C:582
 AddTaskShowerShapeStudies.C:583
 AddTaskShowerShapeStudies.C:584
 AddTaskShowerShapeStudies.C:585
 AddTaskShowerShapeStudies.C:586
 AddTaskShowerShapeStudies.C:587
 AddTaskShowerShapeStudies.C:588
 AddTaskShowerShapeStudies.C:589
 AddTaskShowerShapeStudies.C:590
 AddTaskShowerShapeStudies.C:591
 AddTaskShowerShapeStudies.C:592
 AddTaskShowerShapeStudies.C:593
 AddTaskShowerShapeStudies.C:594
 AddTaskShowerShapeStudies.C:595
 AddTaskShowerShapeStudies.C:596
 AddTaskShowerShapeStudies.C:597
 AddTaskShowerShapeStudies.C:598
 AddTaskShowerShapeStudies.C:599
 AddTaskShowerShapeStudies.C:600
 AddTaskShowerShapeStudies.C:601
 AddTaskShowerShapeStudies.C:602
 AddTaskShowerShapeStudies.C:603
 AddTaskShowerShapeStudies.C:604
 AddTaskShowerShapeStudies.C:605
 AddTaskShowerShapeStudies.C:606
 AddTaskShowerShapeStudies.C:607
 AddTaskShowerShapeStudies.C:608
 AddTaskShowerShapeStudies.C:609
 AddTaskShowerShapeStudies.C:610
 AddTaskShowerShapeStudies.C:611
 AddTaskShowerShapeStudies.C:612
 AddTaskShowerShapeStudies.C:613
 AddTaskShowerShapeStudies.C:614
 AddTaskShowerShapeStudies.C:615
 AddTaskShowerShapeStudies.C:616
 AddTaskShowerShapeStudies.C:617
 AddTaskShowerShapeStudies.C:618
 AddTaskShowerShapeStudies.C:619
 AddTaskShowerShapeStudies.C:620
 AddTaskShowerShapeStudies.C:621
 AddTaskShowerShapeStudies.C:622
 AddTaskShowerShapeStudies.C:623
 AddTaskShowerShapeStudies.C:624
 AddTaskShowerShapeStudies.C:625
 AddTaskShowerShapeStudies.C:626
 AddTaskShowerShapeStudies.C:627
 AddTaskShowerShapeStudies.C:628
 AddTaskShowerShapeStudies.C:629
 AddTaskShowerShapeStudies.C:630
 AddTaskShowerShapeStudies.C:631
 AddTaskShowerShapeStudies.C:632
 AddTaskShowerShapeStudies.C:633
 AddTaskShowerShapeStudies.C:634
 AddTaskShowerShapeStudies.C:635
 AddTaskShowerShapeStudies.C:636
 AddTaskShowerShapeStudies.C:637
 AddTaskShowerShapeStudies.C:638
 AddTaskShowerShapeStudies.C:639
 AddTaskShowerShapeStudies.C:640
 AddTaskShowerShapeStudies.C:641
 AddTaskShowerShapeStudies.C:642
 AddTaskShowerShapeStudies.C:643
 AddTaskShowerShapeStudies.C:644
 AddTaskShowerShapeStudies.C:645
 AddTaskShowerShapeStudies.C:646
 AddTaskShowerShapeStudies.C:647
 AddTaskShowerShapeStudies.C:648
 AddTaskShowerShapeStudies.C:649
 AddTaskShowerShapeStudies.C:650
 AddTaskShowerShapeStudies.C:651
 AddTaskShowerShapeStudies.C:652
 AddTaskShowerShapeStudies.C:653
 AddTaskShowerShapeStudies.C:654
 AddTaskShowerShapeStudies.C:655
 AddTaskShowerShapeStudies.C:656
 AddTaskShowerShapeStudies.C:657
 AddTaskShowerShapeStudies.C:658
 AddTaskShowerShapeStudies.C:659
 AddTaskShowerShapeStudies.C:660
 AddTaskShowerShapeStudies.C:661
 AddTaskShowerShapeStudies.C:662
 AddTaskShowerShapeStudies.C:663
 AddTaskShowerShapeStudies.C:664
 AddTaskShowerShapeStudies.C:665
 AddTaskShowerShapeStudies.C:666
 AddTaskShowerShapeStudies.C:667
 AddTaskShowerShapeStudies.C:668
 AddTaskShowerShapeStudies.C:669
 AddTaskShowerShapeStudies.C:670
 AddTaskShowerShapeStudies.C:671
 AddTaskShowerShapeStudies.C:672
 AddTaskShowerShapeStudies.C:673
 AddTaskShowerShapeStudies.C:674
 AddTaskShowerShapeStudies.C:675
 AddTaskShowerShapeStudies.C:676
 AddTaskShowerShapeStudies.C:677
 AddTaskShowerShapeStudies.C:678
 AddTaskShowerShapeStudies.C:679
 AddTaskShowerShapeStudies.C:680
 AddTaskShowerShapeStudies.C:681
 AddTaskShowerShapeStudies.C:682
 AddTaskShowerShapeStudies.C:683
 AddTaskShowerShapeStudies.C:684
 AddTaskShowerShapeStudies.C:685
 AddTaskShowerShapeStudies.C:686
 AddTaskShowerShapeStudies.C:687
 AddTaskShowerShapeStudies.C:688
 AddTaskShowerShapeStudies.C:689
 AddTaskShowerShapeStudies.C:690
 AddTaskShowerShapeStudies.C:691
 AddTaskShowerShapeStudies.C:692
 AddTaskShowerShapeStudies.C:693
 AddTaskShowerShapeStudies.C:694
 AddTaskShowerShapeStudies.C:695
 AddTaskShowerShapeStudies.C:696
 AddTaskShowerShapeStudies.C:697
 AddTaskShowerShapeStudies.C:698
 AddTaskShowerShapeStudies.C:699
 AddTaskShowerShapeStudies.C:700
 AddTaskShowerShapeStudies.C:701
 AddTaskShowerShapeStudies.C:702
 AddTaskShowerShapeStudies.C:703
 AddTaskShowerShapeStudies.C:704
 AddTaskShowerShapeStudies.C:705
 AddTaskShowerShapeStudies.C:706
 AddTaskShowerShapeStudies.C:707
 AddTaskShowerShapeStudies.C:708
 AddTaskShowerShapeStudies.C:709
 AddTaskShowerShapeStudies.C:710
 AddTaskShowerShapeStudies.C:711
 AddTaskShowerShapeStudies.C:712
 AddTaskShowerShapeStudies.C:713
 AddTaskShowerShapeStudies.C:714
 AddTaskShowerShapeStudies.C:715
 AddTaskShowerShapeStudies.C:716
 AddTaskShowerShapeStudies.C:717
 AddTaskShowerShapeStudies.C:718
 AddTaskShowerShapeStudies.C:719
 AddTaskShowerShapeStudies.C:720
 AddTaskShowerShapeStudies.C:721
 AddTaskShowerShapeStudies.C:722
 AddTaskShowerShapeStudies.C:723
 AddTaskShowerShapeStudies.C:724
 AddTaskShowerShapeStudies.C:725
 AddTaskShowerShapeStudies.C:726
 AddTaskShowerShapeStudies.C:727
 AddTaskShowerShapeStudies.C:728
 AddTaskShowerShapeStudies.C:729
 AddTaskShowerShapeStudies.C:730
 AddTaskShowerShapeStudies.C:731
 AddTaskShowerShapeStudies.C:732
 AddTaskShowerShapeStudies.C:733
 AddTaskShowerShapeStudies.C:734
 AddTaskShowerShapeStudies.C:735
 AddTaskShowerShapeStudies.C:736
 AddTaskShowerShapeStudies.C:737
 AddTaskShowerShapeStudies.C:738
 AddTaskShowerShapeStudies.C:739
 AddTaskShowerShapeStudies.C:740
 AddTaskShowerShapeStudies.C:741
 AddTaskShowerShapeStudies.C:742
 AddTaskShowerShapeStudies.C:743
 AddTaskShowerShapeStudies.C:744
 AddTaskShowerShapeStudies.C:745
 AddTaskShowerShapeStudies.C:746
 AddTaskShowerShapeStudies.C:747
 AddTaskShowerShapeStudies.C:748
 AddTaskShowerShapeStudies.C:749
 AddTaskShowerShapeStudies.C:750
 AddTaskShowerShapeStudies.C:751
 AddTaskShowerShapeStudies.C:752
 AddTaskShowerShapeStudies.C:753
 AddTaskShowerShapeStudies.C:754
 AddTaskShowerShapeStudies.C:755
 AddTaskShowerShapeStudies.C:756
 AddTaskShowerShapeStudies.C:757
 AddTaskShowerShapeStudies.C:758
 AddTaskShowerShapeStudies.C:759
 AddTaskShowerShapeStudies.C:760
 AddTaskShowerShapeStudies.C:761
 AddTaskShowerShapeStudies.C:762
 AddTaskShowerShapeStudies.C:763
 AddTaskShowerShapeStudies.C:764
 AddTaskShowerShapeStudies.C:765
 AddTaskShowerShapeStudies.C:766
 AddTaskShowerShapeStudies.C:767
 AddTaskShowerShapeStudies.C:768
 AddTaskShowerShapeStudies.C:769
 AddTaskShowerShapeStudies.C:770
 AddTaskShowerShapeStudies.C:771
 AddTaskShowerShapeStudies.C:772
 AddTaskShowerShapeStudies.C:773
 AddTaskShowerShapeStudies.C:774
 AddTaskShowerShapeStudies.C:775
 AddTaskShowerShapeStudies.C:776
 AddTaskShowerShapeStudies.C:777
 AddTaskShowerShapeStudies.C:778
 AddTaskShowerShapeStudies.C:779
 AddTaskShowerShapeStudies.C:780
 AddTaskShowerShapeStudies.C:781
 AddTaskShowerShapeStudies.C:782
 AddTaskShowerShapeStudies.C:783
 AddTaskShowerShapeStudies.C:784
 AddTaskShowerShapeStudies.C:785
 AddTaskShowerShapeStudies.C:786
 AddTaskShowerShapeStudies.C:787
 AddTaskShowerShapeStudies.C:788
 AddTaskShowerShapeStudies.C:789
 AddTaskShowerShapeStudies.C:790
 AddTaskShowerShapeStudies.C:791
 AddTaskShowerShapeStudies.C:792
 AddTaskShowerShapeStudies.C:793
 AddTaskShowerShapeStudies.C:794
 AddTaskShowerShapeStudies.C:795
 AddTaskShowerShapeStudies.C:796
 AddTaskShowerShapeStudies.C:797
 AddTaskShowerShapeStudies.C:798
 AddTaskShowerShapeStudies.C:799
 AddTaskShowerShapeStudies.C:800
 AddTaskShowerShapeStudies.C:801
 AddTaskShowerShapeStudies.C:802
 AddTaskShowerShapeStudies.C:803
 AddTaskShowerShapeStudies.C:804
 AddTaskShowerShapeStudies.C:805
 AddTaskShowerShapeStudies.C:806
 AddTaskShowerShapeStudies.C:807
 AddTaskShowerShapeStudies.C:808
 AddTaskShowerShapeStudies.C:809
 AddTaskShowerShapeStudies.C:810
 AddTaskShowerShapeStudies.C:811
 AddTaskShowerShapeStudies.C:812
 AddTaskShowerShapeStudies.C:813
 AddTaskShowerShapeStudies.C:814
 AddTaskShowerShapeStudies.C:815
 AddTaskShowerShapeStudies.C:816
 AddTaskShowerShapeStudies.C:817
 AddTaskShowerShapeStudies.C:818
 AddTaskShowerShapeStudies.C:819
 AddTaskShowerShapeStudies.C:820
 AddTaskShowerShapeStudies.C:821
 AddTaskShowerShapeStudies.C:822
 AddTaskShowerShapeStudies.C:823
 AddTaskShowerShapeStudies.C:824
 AddTaskShowerShapeStudies.C:825
 AddTaskShowerShapeStudies.C:826
 AddTaskShowerShapeStudies.C:827
 AddTaskShowerShapeStudies.C:828
 AddTaskShowerShapeStudies.C:829
 AddTaskShowerShapeStudies.C:830
 AddTaskShowerShapeStudies.C:831
 AddTaskShowerShapeStudies.C:832
 AddTaskShowerShapeStudies.C:833
 AddTaskShowerShapeStudies.C:834
 AddTaskShowerShapeStudies.C:835
 AddTaskShowerShapeStudies.C:836
 AddTaskShowerShapeStudies.C:837
 AddTaskShowerShapeStudies.C:838
 AddTaskShowerShapeStudies.C:839