ROOT logo

AliAnalysisTaskCaloTrackCorrelation *AddTaskPi0EMCALPbPb(
                                                         const TString data          = "AOD",
                                                         const TString calorimeter   = "EMCAL", 
                                                         const Bool_t  printSettings = kFALSE,
                                                         const Bool_t  simulation    = kFALSE,
                                                         const Bool_t  outputAOD     = kFALSE, 
                                                         const TString outputfile    = "",
                                                         const Int_t   year          = 2011,
                                                         const TString col           = "PbPb",
                                                         const TString trig          = "",
                                                         const TString clustersArray = "" 
                                                        )
{
  // Creates a PartCorr task, configures it and adds it to the analysis manager.
    
  // 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;
  }
  Bool_t kInputDataType = "AOD";
  if(!data.Contains("delta"))
    kInputDataType = mgr->GetInputEventHandler()->GetDataType(); // can be "ESD" or "AOD"
  
  Bool_t kUseKinematics = kFALSE; 
  if(simulation) { 
    kUseKinematics = (mgr->GetMCtruthEventHandler())?kTRUE:kFALSE; 
    if (!kUseKinematics && data=="AOD" && kInputDataType != "ESD") kUseKinematics = kTRUE; //AOD primary should be available ... 
  } 
  
  //cout<<"********* ACCESS KINE? "<<kUseKinematics<<endl;
  
  // #### Configure analysis ####
    
  AliAnaPartCorrMaker * maker = new AliAnaPartCorrMaker();
  
  // General frame setting and configuration
  maker->SetReader   (ConfigureReader(data,kInputDataType,calorimeter,clustersArray,col,outputAOD,kUseKinematics,printSettings)   ); 
  maker->SetCaloUtils(ConfigureCaloUtils(year,col,clustersArray, simulation, printSettings)); 
  
  // Analysis tasks setting and configuration
  Int_t n = 0;//Analysis number, order is important
  maker->AddAnalysis(ConfigurePhotonAnalysis(data,calorimeter,year,col,clustersArray,simulation,"",printSettings), n++); // Photon cluster selection
  maker->AddAnalysis(ConfigurePi0Analysis   (data,calorimeter,year,col,clustersArray,simulation,"",printSettings), n++); // Pi0 invariant mass analysis
  
  maker->SetAnaDebug(-1)  ;
  maker->SwitchOnHistogramsMaker()  ;
  if(data.Contains("delta")) maker->SwitchOffAODsMaker() ;
  else                       maker->SwitchOnAODsMaker()  ;
	
  if(printSettings) maker->Print("");
  
  //printf("<< End Configuration of %d analysis for calorimeter %s >>\n",n, calorimeter.Data());
  
  // Create task
  
  AliAnalysisTaskCaloTrackCorrelation * task = new AliAnalysisTaskCaloTrackCorrelation (Form("PartCorr%s_Trig%s_Cl%s",calorimeter.Data(),trig.Data(),clustersArray.Data()));
  task->SetConfigFileName(""); //Don't configure the analysis via configuration file.
  //task->SetDebugLevel(-1);
  task->SetBranches("ESD:AliESDRun.,AliESDHeader"); //just a trick to get Constantin's analysis to work
  task->SetAnalysisMaker(maker);
  mgr->AddTask(task);
  
  //Create containers
  
  if(outputfile.Length()==0)outputfile = AliAnalysisManager::GetCommonFileName(); 
  TString name(Form("%s_Trig%s_Cl%s",calorimeter.Data(),trig.Data(),clustersArray.Data()));
  AliAnalysisDataContainer *cout_pc   = mgr->CreateContainer(name.Data(), TList::Class(), 
                                                             AliAnalysisManager::kOutputContainer, 
                                                             Form("%s:%s",outputfile.Data(),name.Data()));
	
  AliAnalysisDataContainer *cout_cuts = mgr->CreateContainer(Form("%sCuts",name.Data()), TList::Class(), 
                                                             AliAnalysisManager::kParamContainer, 
                                                             Form("%s:%sCuts",outputfile.Data(),name.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(!data.Contains("delta")   && outputAOD) mgr->ConnectOutput (task, 0, mgr->GetCommonOutputContainer());
  mgr->ConnectOutput (task, 1, cout_pc);
  mgr->ConnectOutput (task, 2, cout_cuts);
    
  return task;
}

//____________________________________
AliCaloTrackReader * ConfigureReader(TString kData,TString kInputDataType, TString kCalorimeter, 
                                     TString kClusterArray, TString kCollisions,
                                     Bool_t kOutputAOD, Bool_t kUseKinematics, Bool_t kPrint)
{
  
  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(-1);//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.5); 
  reader->SetEMCALEMax(1000); 
  reader->SetPHOSEMin(0.3);
  reader->SetPHOSEMax(1000);
  reader->SetCTSPtMin(0.1);
  reader->SetCTSPtMax(1000);
  
  reader->SwitchOffFiducialCut();
  
  // Tracks
  reader->SwitchOffCTS();
  //gROOT->LoadMacro("$ALICE_ROOT/PWG4/macros/CreateTrackCutsPWG4.C"); 
  //AliESDtrackCuts * esdTrackCuts = CreateTrackCutsPWG4(10011004); 
  //reader->SetTrackCuts(esdTrackCuts);
  
  // Calorimeter
  
  reader->SetEMCALClusterListName(kClusterArray);
  if(kClusterArray == "") {
    //printf("**************** Normal analysis **************** \n");
    reader->SwitchOnClusterRecalculation(); // Bad map removal
  }
  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
  
  if     (kCollisions=="pp"  ) {
    reader->SwitchOffPileUpEventRejection();   // remove pileup by default
    reader->SwitchOffV0ANDSelection() ;        // and besides v0 AND
    reader->SwitchOffPrimaryVertexSelection(); // and besides primary vertex
    reader->SetZvertexCut(50.);                // Open cut
  }
  else if(kCollisions=="PbPb") {
    reader->SwitchOffPileUpEventRejection();   // remove pileup by default
    reader->SwitchOffV0ANDSelection() ;        // and besides v0 AND
    reader->SwitchOffPrimaryVertexSelection(); // and besides primary vertex
    reader->SetZvertexCut(10.);                // Centrality defined in this range.
    
    // Centrality
    reader->SetCentralityClass("V0M");
    reader->SetCentralityOpt(10);  // 10 centrality bins
    reader->SetCentralityBin(-1,-1); // 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(Int_t kYears, TString kCollisions, TString kClusterArray, 
                                        Bool_t kSimulation, Bool_t kPrint)
{
  
  AliCalorimeterUtils *cu = new AliCalorimeterUtils;
  cu->SetDebug(-1);
  
  if(kYears==2010) cu->SetEMCALGeometryName("EMCAL_FIRSTYEARV1");
  else             cu->SetEMCALGeometryName("EMCAL_COMPLETEV1");
  
  // Remove clusters close to borders, at least max energy cell is 1 cell away 
  cu->SetNumberOfCellsFromEMCALBorder(1);
  cu->SetNumberOfCellsFromPHOSBorder(2);
  
  //if(kClusterArray == "") 
  //  cu->SwitchOffRecalculateClusterTrackMatching(); // Done in clusterization
  //else            
  //  cu->SwitchOnRecalculateClusterTrackMatching();
  
  //EMCAL only settings
  AliEMCALRecoUtils * recou = cu->GetEMCALRecoUtils();
  
  
  if(kCollisions=="pp"  ) { // Do only for pp for the moment
    cu->SwitchOnCorrectClusterLinearity();
    if(!kSimulation) recou->SetNonLinearityFunction(AliEMCALRecoUtils::kBeamTestCorrected);
    else             recou->SetNonLinearityFunction(AliEMCALRecoUtils::kPi0MC);
  }
  
  recou->SwitchOnRejectExoticCell();
  if(kClusterArray == "") recou->SwitchOnRejectExoticCluster();
  else                    recou->SwitchOffRejectExoticCluster();
  
  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);
  }

  
  if(kPrint) cu->Print("");
  
  return cu;
  
}

//_____________________________________
AliAnaPhoton* ConfigurePhotonAnalysis(TString kData, TString kCalorimeter, Int_t kYears, TString kCollisions, TString kClusterArray, 
                                      Bool_t kSimulation, TString kTrig = "", Bool_t kPrint)
{
  
  AliAnaPhoton *anaphoton = new AliAnaPhoton();
  anaphoton->SetDebug(-1); //10 for lots of messages
  
  // cluster selection cuts
  
  anaphoton->SwitchOffFiducialCut();
  
  anaphoton->SetCalorimeter(kCalorimeter);
  
  if(kCalorimeter == "PHOS"){
    anaphoton->SetNCellCut(2);// At least 2 cells
    anaphoton->SetMinPt(0.3);
    anaphoton->SetMinDistanceToBadChannel(2, 4, 5);
  }
  else {//EMCAL
    anaphoton->SetNCellCut(1);// At least 2 cells
    anaphoton->SetMinPt(0.5); // avoid mip peak at E = 260 MeV
    anaphoton->SetMaxPt(1000); 
    anaphoton->SetTimeCut(-1000,1000); // open cut, usual time window of [425-825] ns if time recalibration is off 
    anaphoton->SetMinDistanceToBadChannel(1, 2, 3); // For filtered AODs, new releases.
  }
  
  anaphoton->SwitchOnTrackMatchRejection() ;
  
  //PID cuts (shower shape)
  anaphoton->SwitchOnCaloPID(); // do PID selection, unless specified in GetCaloPID, selection not based on bayesian
  AliCaloPID* caloPID = anaphoton->GetCaloPID();
  //Not used in bayesian
  
  //EMCAL
  caloPID->SetEMCALLambda0CutMax(0.30);
  caloPID->SetEMCALLambda0CutMin(0.10);
  
  caloPID->SetEMCALDEtaCut(0.025);
  caloPID->SetEMCALDPhiCut(0.05);
  // In case of official AODs when dX and dZ was not stored, open the cuts 
  // and rely on having a match recorded. In case of reclusterization, try.
  if(kData=="AOD" && kClusterArray==""){
    caloPID->SetEMCALDEtaCut(2000);  
    caloPID->SetEMCALDPhiCut(2000); 
  }
  
  //PHOS
  caloPID->SetPHOSDispersionCut(2.5);
  caloPID->SetPHOSRCut(2.);
  if(kData=="AOD") caloPID->SetPHOSRCut(2000.); // Open cut since dX, dZ not stored
  
  if(kCalorimeter=="PHOS"){
    caloPID->SetHistoDEtaRangeAndNBins(-200, 200, 200); // dZ
    caloPID->SetHistoDPhiRangeAndNBins(-200, 200, 200); // dX
  }
  
  //caloPID->SetTOFCut(10000000); // Not used, only to set PID bits
  
  anaphoton->SwitchOffFillShowerShapeHistograms();  // Filled before photon shower shape selection
  
  // Input / output delta AOD settings
  
  if(!kData.Contains("delta")) {
    anaphoton->SetOutputAODName(Form("Photon%s_Trig%s_Cl%s",kCalorimeter.Data(), kTrig.Data(),kClusterArray.Data()));
    anaphoton->SetOutputAODClassName("AliAODPWG4ParticleCorrelation");
    //anaphoton->SetOutputAODClassName("AliAODPWG4Particle"); // use if no correlation done
  }
  else anaphoton->SetInputAODName(Form("Photon%s_Trig%s_Cl%s",kCalorimeter.Data(), kTrig.Data(),kClusterArray.Data()));
  
  //Set Histograms name tag, bins and ranges
  
  anaphoton->AddToHistogramsName("AnaPhoton_");
  SetHistoRangeAndNBins(anaphoton); // see method below
  
  // Number of particle type MC histograms
  anaphoton->FillNOriginHistograms(8);
  anaphoton->FillNPrimaryHistograms(4);
  
  if(kPrint) anaphoton->Print("");
  
  return anaphoton;
  
}



//_______________________________
AliAnaPi0* ConfigurePi0Analysis(TString kData, TString kCalorimeter, Int_t kYears, TString kCollisions, TString kClusterArray, 
                                Bool_t kSimulation, TString kTrig = "", Bool_t kPrint)
{
  
  AliAnaPi0 *anapi0 = new AliAnaPi0();
  
  anapi0->SetDebug(-1);//10 for lots of messages
  if(kPrint) anapi0->Print("");
  
  // Input delta AOD settings
  anapi0->SetInputAODName(Form("Photon%s_Trig%s_Cl%s",kCalorimeter.Data(), kTrig.Data(),kClusterArray.Data()));
  
  // Calorimeter settings
  anapi0->SetCalorimeter(kCalorimeter);
  
  //settings for pp collision mixing
  anapi0->SwitchOnOwnMix(); //Off when mixing done with general mixing frame
  
  // Cuts 
  if(kCalorimeter=="EMCAL") anapi0->SetPairTimeCut(70);
  
  if     (kCollisions=="pp"  ) {
    printf("****** Configure Pi0 for pp analysis\n");
    anapi0->SetNCentrBin(1);
    anapi0->SetNZvertBin(10);
    anapi0->SetNRPBin(1);
    anapi0->SetNMaxEvMix(100);    
  }
  else if(kCollisions=="PbPb") {
    printf("****** Configure Pi0 for PbPb analysis\n");
    anapi0->SetNCentrBin(5);
    anapi0->SetNZvertBin(3);
    anapi0->SetNRPBin(1);
    anapi0->SetNMaxEvMix(5);
  }
  
  anapi0->SwitchOffMultipleCutAnalysis();
  anapi0->SwitchOffSMCombinations();

  //Set Histograms name tag, bins and ranges
  
  anapi0->AddToHistogramsName("AnaPi0_");
  SetHistoRangeAndNBins(anapi0, kCalorimeter, kYears, kCollisions, kSimulation); // see method below
  
  return anapi0;
  
}

//________________________________________________________
void SetHistoRangeAndNBins (AliAnaPartCorrBaseClass* ana, TString kCalorimeter, 
                            Int_t kYears, TString kCollisions, Bool_t kSimulation)
{
  // Set common bins for all analysis and MC histograms filling
  
  if(kSimulation) ana->SwitchOnDataMC() ;//Access MC stack and fill more histograms, AOD MC not implemented yet.
  else            ana->SwitchOffDataMC() ;
  
  ana->SetHistoPtRangeAndNBins(0, 100, 250) ; // Energy and pt histograms
  
  if(kCalorimeter=="EMCAL"){
    if(kYears==2010){
      ana->SetHistoPhiRangeAndNBins(78*TMath::DegToRad(), 122*TMath::DegToRad(), 78) ;
      ana->SetHistoXRangeAndNBins(-230,90,120); // QA
      ana->SetHistoYRangeAndNBins(370,450,40);  // QA
    }
    else {           
      ana->SetHistoPhiRangeAndNBins(78*TMath::DegToRad(), 182*TMath::DegToRad(), 108) ;
      ana->SetHistoXRangeAndNBins(-600,90,200); // QA
      ana->SetHistoYRangeAndNBins(100,450,100); // QA
    }
    
    ana->SetHistoEtaRangeAndNBins(-0.72, 0.72, 144) ;
  }
  else{
    ana->SetHistoPhiRangeAndNBins(260*TMath::DegToRad(), 320*TMath::DegToRad(), 60) ;
    ana->SetHistoEtaRangeAndNBins(-0.13, 0.13, 130) ;
    
  }
  
  ana->SetHistoShowerShapeRangeAndNBins(0, 3, 300);
  
  // Invariant mass analysis
  ana->SetHistoMassRangeAndNBins(0., 1., 200) ;
  ana->SetHistoAsymmetryRangeAndNBins(0., 1. , 100) ;
  
  // check if time calibration is on
  ana->SetHistoTimeRangeAndNBins(-1000.,1000,1000);
  ana->SetHistoDiffTimeRangeAndNBins(-200, 200, 800);
  
  // QA, electron, charged
  ana->SetHistoPOverERangeAndNBins(0,10.,100);
  ana->SetHistodEdxRangeAndNBins(0.,200.,200);
  
  // QA
  ana->SetHistoFinePtRangeAndNBins(0, 10, 200) ; // bining for fhAmpId
  ana->SetHistodRRangeAndNBins(0.,TMath::Pi(),150);
  ana->SetHistoRatioRangeAndNBins(0.,2.,100);
  ana->SetHistoVertexDistRangeAndNBins(0.,500.,500);
  ana->SetHistoNClusterCellRangeAndNBins(0,500,500);
  ana->SetHistoZRangeAndNBins(-400,400,200);
  ana->SetHistoRRangeAndNBins(400,450,25);
  ana->SetHistoV0SignalRangeAndNBins(0,5000,500);
  ana->SetHistoV0MultiplicityRangeAndNBins(0,5000,500);
  ana->SetHistoTrackMultiplicityRangeAndNBins(0,5000,500);
  
}

 AddTaskPi0EMCALPbPb.C:1
 AddTaskPi0EMCALPbPb.C:2
 AddTaskPi0EMCALPbPb.C:3
 AddTaskPi0EMCALPbPb.C:4
 AddTaskPi0EMCALPbPb.C:5
 AddTaskPi0EMCALPbPb.C:6
 AddTaskPi0EMCALPbPb.C:7
 AddTaskPi0EMCALPbPb.C:8
 AddTaskPi0EMCALPbPb.C:9
 AddTaskPi0EMCALPbPb.C:10
 AddTaskPi0EMCALPbPb.C:11
 AddTaskPi0EMCALPbPb.C:12
 AddTaskPi0EMCALPbPb.C:13
 AddTaskPi0EMCALPbPb.C:14
 AddTaskPi0EMCALPbPb.C:15
 AddTaskPi0EMCALPbPb.C:16
 AddTaskPi0EMCALPbPb.C:17
 AddTaskPi0EMCALPbPb.C:18
 AddTaskPi0EMCALPbPb.C:19
 AddTaskPi0EMCALPbPb.C:20
 AddTaskPi0EMCALPbPb.C:21
 AddTaskPi0EMCALPbPb.C:22
 AddTaskPi0EMCALPbPb.C:23
 AddTaskPi0EMCALPbPb.C:24
 AddTaskPi0EMCALPbPb.C:25
 AddTaskPi0EMCALPbPb.C:26
 AddTaskPi0EMCALPbPb.C:27
 AddTaskPi0EMCALPbPb.C:28
 AddTaskPi0EMCALPbPb.C:29
 AddTaskPi0EMCALPbPb.C:30
 AddTaskPi0EMCALPbPb.C:31
 AddTaskPi0EMCALPbPb.C:32
 AddTaskPi0EMCALPbPb.C:33
 AddTaskPi0EMCALPbPb.C:34
 AddTaskPi0EMCALPbPb.C:35
 AddTaskPi0EMCALPbPb.C:36
 AddTaskPi0EMCALPbPb.C:37
 AddTaskPi0EMCALPbPb.C:38
 AddTaskPi0EMCALPbPb.C:39
 AddTaskPi0EMCALPbPb.C:40
 AddTaskPi0EMCALPbPb.C:41
 AddTaskPi0EMCALPbPb.C:42
 AddTaskPi0EMCALPbPb.C:43
 AddTaskPi0EMCALPbPb.C:44
 AddTaskPi0EMCALPbPb.C:45
 AddTaskPi0EMCALPbPb.C:46
 AddTaskPi0EMCALPbPb.C:47
 AddTaskPi0EMCALPbPb.C:48
 AddTaskPi0EMCALPbPb.C:49
 AddTaskPi0EMCALPbPb.C:50
 AddTaskPi0EMCALPbPb.C:51
 AddTaskPi0EMCALPbPb.C:52
 AddTaskPi0EMCALPbPb.C:53
 AddTaskPi0EMCALPbPb.C:54
 AddTaskPi0EMCALPbPb.C:55
 AddTaskPi0EMCALPbPb.C:56
 AddTaskPi0EMCALPbPb.C:57
 AddTaskPi0EMCALPbPb.C:58
 AddTaskPi0EMCALPbPb.C:59
 AddTaskPi0EMCALPbPb.C:60
 AddTaskPi0EMCALPbPb.C:61
 AddTaskPi0EMCALPbPb.C:62
 AddTaskPi0EMCALPbPb.C:63
 AddTaskPi0EMCALPbPb.C:64
 AddTaskPi0EMCALPbPb.C:65
 AddTaskPi0EMCALPbPb.C:66
 AddTaskPi0EMCALPbPb.C:67
 AddTaskPi0EMCALPbPb.C:68
 AddTaskPi0EMCALPbPb.C:69
 AddTaskPi0EMCALPbPb.C:70
 AddTaskPi0EMCALPbPb.C:71
 AddTaskPi0EMCALPbPb.C:72
 AddTaskPi0EMCALPbPb.C:73
 AddTaskPi0EMCALPbPb.C:74
 AddTaskPi0EMCALPbPb.C:75
 AddTaskPi0EMCALPbPb.C:76
 AddTaskPi0EMCALPbPb.C:77
 AddTaskPi0EMCALPbPb.C:78
 AddTaskPi0EMCALPbPb.C:79
 AddTaskPi0EMCALPbPb.C:80
 AddTaskPi0EMCALPbPb.C:81
 AddTaskPi0EMCALPbPb.C:82
 AddTaskPi0EMCALPbPb.C:83
 AddTaskPi0EMCALPbPb.C:84
 AddTaskPi0EMCALPbPb.C:85
 AddTaskPi0EMCALPbPb.C:86
 AddTaskPi0EMCALPbPb.C:87
 AddTaskPi0EMCALPbPb.C:88
 AddTaskPi0EMCALPbPb.C:89
 AddTaskPi0EMCALPbPb.C:90
 AddTaskPi0EMCALPbPb.C:91
 AddTaskPi0EMCALPbPb.C:92
 AddTaskPi0EMCALPbPb.C:93
 AddTaskPi0EMCALPbPb.C:94
 AddTaskPi0EMCALPbPb.C:95
 AddTaskPi0EMCALPbPb.C:96
 AddTaskPi0EMCALPbPb.C:97
 AddTaskPi0EMCALPbPb.C:98
 AddTaskPi0EMCALPbPb.C:99
 AddTaskPi0EMCALPbPb.C:100
 AddTaskPi0EMCALPbPb.C:101
 AddTaskPi0EMCALPbPb.C:102
 AddTaskPi0EMCALPbPb.C:103
 AddTaskPi0EMCALPbPb.C:104
 AddTaskPi0EMCALPbPb.C:105
 AddTaskPi0EMCALPbPb.C:106
 AddTaskPi0EMCALPbPb.C:107
 AddTaskPi0EMCALPbPb.C:108
 AddTaskPi0EMCALPbPb.C:109
 AddTaskPi0EMCALPbPb.C:110
 AddTaskPi0EMCALPbPb.C:111
 AddTaskPi0EMCALPbPb.C:112
 AddTaskPi0EMCALPbPb.C:113
 AddTaskPi0EMCALPbPb.C:114
 AddTaskPi0EMCALPbPb.C:115
 AddTaskPi0EMCALPbPb.C:116
 AddTaskPi0EMCALPbPb.C:117
 AddTaskPi0EMCALPbPb.C:118
 AddTaskPi0EMCALPbPb.C:119
 AddTaskPi0EMCALPbPb.C:120
 AddTaskPi0EMCALPbPb.C:121
 AddTaskPi0EMCALPbPb.C:122
 AddTaskPi0EMCALPbPb.C:123
 AddTaskPi0EMCALPbPb.C:124
 AddTaskPi0EMCALPbPb.C:125
 AddTaskPi0EMCALPbPb.C:126
 AddTaskPi0EMCALPbPb.C:127
 AddTaskPi0EMCALPbPb.C:128
 AddTaskPi0EMCALPbPb.C:129
 AddTaskPi0EMCALPbPb.C:130
 AddTaskPi0EMCALPbPb.C:131
 AddTaskPi0EMCALPbPb.C:132
 AddTaskPi0EMCALPbPb.C:133
 AddTaskPi0EMCALPbPb.C:134
 AddTaskPi0EMCALPbPb.C:135
 AddTaskPi0EMCALPbPb.C:136
 AddTaskPi0EMCALPbPb.C:137
 AddTaskPi0EMCALPbPb.C:138
 AddTaskPi0EMCALPbPb.C:139
 AddTaskPi0EMCALPbPb.C:140
 AddTaskPi0EMCALPbPb.C:141
 AddTaskPi0EMCALPbPb.C:142
 AddTaskPi0EMCALPbPb.C:143
 AddTaskPi0EMCALPbPb.C:144
 AddTaskPi0EMCALPbPb.C:145
 AddTaskPi0EMCALPbPb.C:146
 AddTaskPi0EMCALPbPb.C:147
 AddTaskPi0EMCALPbPb.C:148
 AddTaskPi0EMCALPbPb.C:149
 AddTaskPi0EMCALPbPb.C:150
 AddTaskPi0EMCALPbPb.C:151
 AddTaskPi0EMCALPbPb.C:152
 AddTaskPi0EMCALPbPb.C:153
 AddTaskPi0EMCALPbPb.C:154
 AddTaskPi0EMCALPbPb.C:155
 AddTaskPi0EMCALPbPb.C:156
 AddTaskPi0EMCALPbPb.C:157
 AddTaskPi0EMCALPbPb.C:158
 AddTaskPi0EMCALPbPb.C:159
 AddTaskPi0EMCALPbPb.C:160
 AddTaskPi0EMCALPbPb.C:161
 AddTaskPi0EMCALPbPb.C:162
 AddTaskPi0EMCALPbPb.C:163
 AddTaskPi0EMCALPbPb.C:164
 AddTaskPi0EMCALPbPb.C:165
 AddTaskPi0EMCALPbPb.C:166
 AddTaskPi0EMCALPbPb.C:167
 AddTaskPi0EMCALPbPb.C:168
 AddTaskPi0EMCALPbPb.C:169
 AddTaskPi0EMCALPbPb.C:170
 AddTaskPi0EMCALPbPb.C:171
 AddTaskPi0EMCALPbPb.C:172
 AddTaskPi0EMCALPbPb.C:173
 AddTaskPi0EMCALPbPb.C:174
 AddTaskPi0EMCALPbPb.C:175
 AddTaskPi0EMCALPbPb.C:176
 AddTaskPi0EMCALPbPb.C:177
 AddTaskPi0EMCALPbPb.C:178
 AddTaskPi0EMCALPbPb.C:179
 AddTaskPi0EMCALPbPb.C:180
 AddTaskPi0EMCALPbPb.C:181
 AddTaskPi0EMCALPbPb.C:182
 AddTaskPi0EMCALPbPb.C:183
 AddTaskPi0EMCALPbPb.C:184
 AddTaskPi0EMCALPbPb.C:185
 AddTaskPi0EMCALPbPb.C:186
 AddTaskPi0EMCALPbPb.C:187
 AddTaskPi0EMCALPbPb.C:188
 AddTaskPi0EMCALPbPb.C:189
 AddTaskPi0EMCALPbPb.C:190
 AddTaskPi0EMCALPbPb.C:191
 AddTaskPi0EMCALPbPb.C:192
 AddTaskPi0EMCALPbPb.C:193
 AddTaskPi0EMCALPbPb.C:194
 AddTaskPi0EMCALPbPb.C:195
 AddTaskPi0EMCALPbPb.C:196
 AddTaskPi0EMCALPbPb.C:197
 AddTaskPi0EMCALPbPb.C:198
 AddTaskPi0EMCALPbPb.C:199
 AddTaskPi0EMCALPbPb.C:200
 AddTaskPi0EMCALPbPb.C:201
 AddTaskPi0EMCALPbPb.C:202
 AddTaskPi0EMCALPbPb.C:203
 AddTaskPi0EMCALPbPb.C:204
 AddTaskPi0EMCALPbPb.C:205
 AddTaskPi0EMCALPbPb.C:206
 AddTaskPi0EMCALPbPb.C:207
 AddTaskPi0EMCALPbPb.C:208
 AddTaskPi0EMCALPbPb.C:209
 AddTaskPi0EMCALPbPb.C:210
 AddTaskPi0EMCALPbPb.C:211
 AddTaskPi0EMCALPbPb.C:212
 AddTaskPi0EMCALPbPb.C:213
 AddTaskPi0EMCALPbPb.C:214
 AddTaskPi0EMCALPbPb.C:215
 AddTaskPi0EMCALPbPb.C:216
 AddTaskPi0EMCALPbPb.C:217
 AddTaskPi0EMCALPbPb.C:218
 AddTaskPi0EMCALPbPb.C:219
 AddTaskPi0EMCALPbPb.C:220
 AddTaskPi0EMCALPbPb.C:221
 AddTaskPi0EMCALPbPb.C:222
 AddTaskPi0EMCALPbPb.C:223
 AddTaskPi0EMCALPbPb.C:224
 AddTaskPi0EMCALPbPb.C:225
 AddTaskPi0EMCALPbPb.C:226
 AddTaskPi0EMCALPbPb.C:227
 AddTaskPi0EMCALPbPb.C:228
 AddTaskPi0EMCALPbPb.C:229
 AddTaskPi0EMCALPbPb.C:230
 AddTaskPi0EMCALPbPb.C:231
 AddTaskPi0EMCALPbPb.C:232
 AddTaskPi0EMCALPbPb.C:233
 AddTaskPi0EMCALPbPb.C:234
 AddTaskPi0EMCALPbPb.C:235
 AddTaskPi0EMCALPbPb.C:236
 AddTaskPi0EMCALPbPb.C:237
 AddTaskPi0EMCALPbPb.C:238
 AddTaskPi0EMCALPbPb.C:239
 AddTaskPi0EMCALPbPb.C:240
 AddTaskPi0EMCALPbPb.C:241
 AddTaskPi0EMCALPbPb.C:242
 AddTaskPi0EMCALPbPb.C:243
 AddTaskPi0EMCALPbPb.C:244
 AddTaskPi0EMCALPbPb.C:245
 AddTaskPi0EMCALPbPb.C:246
 AddTaskPi0EMCALPbPb.C:247
 AddTaskPi0EMCALPbPb.C:248
 AddTaskPi0EMCALPbPb.C:249
 AddTaskPi0EMCALPbPb.C:250
 AddTaskPi0EMCALPbPb.C:251
 AddTaskPi0EMCALPbPb.C:252
 AddTaskPi0EMCALPbPb.C:253
 AddTaskPi0EMCALPbPb.C:254
 AddTaskPi0EMCALPbPb.C:255
 AddTaskPi0EMCALPbPb.C:256
 AddTaskPi0EMCALPbPb.C:257
 AddTaskPi0EMCALPbPb.C:258
 AddTaskPi0EMCALPbPb.C:259
 AddTaskPi0EMCALPbPb.C:260
 AddTaskPi0EMCALPbPb.C:261
 AddTaskPi0EMCALPbPb.C:262
 AddTaskPi0EMCALPbPb.C:263
 AddTaskPi0EMCALPbPb.C:264
 AddTaskPi0EMCALPbPb.C:265
 AddTaskPi0EMCALPbPb.C:266
 AddTaskPi0EMCALPbPb.C:267
 AddTaskPi0EMCALPbPb.C:268
 AddTaskPi0EMCALPbPb.C:269
 AddTaskPi0EMCALPbPb.C:270
 AddTaskPi0EMCALPbPb.C:271
 AddTaskPi0EMCALPbPb.C:272
 AddTaskPi0EMCALPbPb.C:273
 AddTaskPi0EMCALPbPb.C:274
 AddTaskPi0EMCALPbPb.C:275
 AddTaskPi0EMCALPbPb.C:276
 AddTaskPi0EMCALPbPb.C:277
 AddTaskPi0EMCALPbPb.C:278
 AddTaskPi0EMCALPbPb.C:279
 AddTaskPi0EMCALPbPb.C:280
 AddTaskPi0EMCALPbPb.C:281
 AddTaskPi0EMCALPbPb.C:282
 AddTaskPi0EMCALPbPb.C:283
 AddTaskPi0EMCALPbPb.C:284
 AddTaskPi0EMCALPbPb.C:285
 AddTaskPi0EMCALPbPb.C:286
 AddTaskPi0EMCALPbPb.C:287
 AddTaskPi0EMCALPbPb.C:288
 AddTaskPi0EMCALPbPb.C:289
 AddTaskPi0EMCALPbPb.C:290
 AddTaskPi0EMCALPbPb.C:291
 AddTaskPi0EMCALPbPb.C:292
 AddTaskPi0EMCALPbPb.C:293
 AddTaskPi0EMCALPbPb.C:294
 AddTaskPi0EMCALPbPb.C:295
 AddTaskPi0EMCALPbPb.C:296
 AddTaskPi0EMCALPbPb.C:297
 AddTaskPi0EMCALPbPb.C:298
 AddTaskPi0EMCALPbPb.C:299
 AddTaskPi0EMCALPbPb.C:300
 AddTaskPi0EMCALPbPb.C:301
 AddTaskPi0EMCALPbPb.C:302
 AddTaskPi0EMCALPbPb.C:303
 AddTaskPi0EMCALPbPb.C:304
 AddTaskPi0EMCALPbPb.C:305
 AddTaskPi0EMCALPbPb.C:306
 AddTaskPi0EMCALPbPb.C:307
 AddTaskPi0EMCALPbPb.C:308
 AddTaskPi0EMCALPbPb.C:309
 AddTaskPi0EMCALPbPb.C:310
 AddTaskPi0EMCALPbPb.C:311
 AddTaskPi0EMCALPbPb.C:312
 AddTaskPi0EMCALPbPb.C:313
 AddTaskPi0EMCALPbPb.C:314
 AddTaskPi0EMCALPbPb.C:315
 AddTaskPi0EMCALPbPb.C:316
 AddTaskPi0EMCALPbPb.C:317
 AddTaskPi0EMCALPbPb.C:318
 AddTaskPi0EMCALPbPb.C:319
 AddTaskPi0EMCALPbPb.C:320
 AddTaskPi0EMCALPbPb.C:321
 AddTaskPi0EMCALPbPb.C:322
 AddTaskPi0EMCALPbPb.C:323
 AddTaskPi0EMCALPbPb.C:324
 AddTaskPi0EMCALPbPb.C:325
 AddTaskPi0EMCALPbPb.C:326
 AddTaskPi0EMCALPbPb.C:327
 AddTaskPi0EMCALPbPb.C:328
 AddTaskPi0EMCALPbPb.C:329
 AddTaskPi0EMCALPbPb.C:330
 AddTaskPi0EMCALPbPb.C:331
 AddTaskPi0EMCALPbPb.C:332
 AddTaskPi0EMCALPbPb.C:333
 AddTaskPi0EMCALPbPb.C:334
 AddTaskPi0EMCALPbPb.C:335
 AddTaskPi0EMCALPbPb.C:336
 AddTaskPi0EMCALPbPb.C:337
 AddTaskPi0EMCALPbPb.C:338
 AddTaskPi0EMCALPbPb.C:339
 AddTaskPi0EMCALPbPb.C:340
 AddTaskPi0EMCALPbPb.C:341
 AddTaskPi0EMCALPbPb.C:342
 AddTaskPi0EMCALPbPb.C:343
 AddTaskPi0EMCALPbPb.C:344
 AddTaskPi0EMCALPbPb.C:345
 AddTaskPi0EMCALPbPb.C:346
 AddTaskPi0EMCALPbPb.C:347
 AddTaskPi0EMCALPbPb.C:348
 AddTaskPi0EMCALPbPb.C:349
 AddTaskPi0EMCALPbPb.C:350
 AddTaskPi0EMCALPbPb.C:351
 AddTaskPi0EMCALPbPb.C:352
 AddTaskPi0EMCALPbPb.C:353
 AddTaskPi0EMCALPbPb.C:354
 AddTaskPi0EMCALPbPb.C:355
 AddTaskPi0EMCALPbPb.C:356
 AddTaskPi0EMCALPbPb.C:357
 AddTaskPi0EMCALPbPb.C:358
 AddTaskPi0EMCALPbPb.C:359
 AddTaskPi0EMCALPbPb.C:360
 AddTaskPi0EMCALPbPb.C:361
 AddTaskPi0EMCALPbPb.C:362
 AddTaskPi0EMCALPbPb.C:363
 AddTaskPi0EMCALPbPb.C:364
 AddTaskPi0EMCALPbPb.C:365
 AddTaskPi0EMCALPbPb.C:366
 AddTaskPi0EMCALPbPb.C:367
 AddTaskPi0EMCALPbPb.C:368
 AddTaskPi0EMCALPbPb.C:369
 AddTaskPi0EMCALPbPb.C:370
 AddTaskPi0EMCALPbPb.C:371
 AddTaskPi0EMCALPbPb.C:372
 AddTaskPi0EMCALPbPb.C:373
 AddTaskPi0EMCALPbPb.C:374
 AddTaskPi0EMCALPbPb.C:375
 AddTaskPi0EMCALPbPb.C:376
 AddTaskPi0EMCALPbPb.C:377
 AddTaskPi0EMCALPbPb.C:378
 AddTaskPi0EMCALPbPb.C:379
 AddTaskPi0EMCALPbPb.C:380
 AddTaskPi0EMCALPbPb.C:381
 AddTaskPi0EMCALPbPb.C:382
 AddTaskPi0EMCALPbPb.C:383
 AddTaskPi0EMCALPbPb.C:384
 AddTaskPi0EMCALPbPb.C:385
 AddTaskPi0EMCALPbPb.C:386
 AddTaskPi0EMCALPbPb.C:387
 AddTaskPi0EMCALPbPb.C:388
 AddTaskPi0EMCALPbPb.C:389
 AddTaskPi0EMCALPbPb.C:390
 AddTaskPi0EMCALPbPb.C:391
 AddTaskPi0EMCALPbPb.C:392
 AddTaskPi0EMCALPbPb.C:393
 AddTaskPi0EMCALPbPb.C:394
 AddTaskPi0EMCALPbPb.C:395
 AddTaskPi0EMCALPbPb.C:396
 AddTaskPi0EMCALPbPb.C:397
 AddTaskPi0EMCALPbPb.C:398
 AddTaskPi0EMCALPbPb.C:399
 AddTaskPi0EMCALPbPb.C:400
 AddTaskPi0EMCALPbPb.C:401
 AddTaskPi0EMCALPbPb.C:402
 AddTaskPi0EMCALPbPb.C:403
 AddTaskPi0EMCALPbPb.C:404
 AddTaskPi0EMCALPbPb.C:405
 AddTaskPi0EMCALPbPb.C:406
 AddTaskPi0EMCALPbPb.C:407
 AddTaskPi0EMCALPbPb.C:408
 AddTaskPi0EMCALPbPb.C:409
 AddTaskPi0EMCALPbPb.C:410
 AddTaskPi0EMCALPbPb.C:411
 AddTaskPi0EMCALPbPb.C:412
 AddTaskPi0EMCALPbPb.C:413
 AddTaskPi0EMCALPbPb.C:414
 AddTaskPi0EMCALPbPb.C:415
 AddTaskPi0EMCALPbPb.C:416
 AddTaskPi0EMCALPbPb.C:417
 AddTaskPi0EMCALPbPb.C:418
 AddTaskPi0EMCALPbPb.C:419
 AddTaskPi0EMCALPbPb.C:420
 AddTaskPi0EMCALPbPb.C:421
 AddTaskPi0EMCALPbPb.C:422
 AddTaskPi0EMCALPbPb.C:423
 AddTaskPi0EMCALPbPb.C:424
 AddTaskPi0EMCALPbPb.C:425
 AddTaskPi0EMCALPbPb.C:426
 AddTaskPi0EMCALPbPb.C:427
 AddTaskPi0EMCALPbPb.C:428
 AddTaskPi0EMCALPbPb.C:429
 AddTaskPi0EMCALPbPb.C:430
 AddTaskPi0EMCALPbPb.C:431
 AddTaskPi0EMCALPbPb.C:432
 AddTaskPi0EMCALPbPb.C:433
 AddTaskPi0EMCALPbPb.C:434
 AddTaskPi0EMCALPbPb.C:435
 AddTaskPi0EMCALPbPb.C:436
 AddTaskPi0EMCALPbPb.C:437
 AddTaskPi0EMCALPbPb.C:438
 AddTaskPi0EMCALPbPb.C:439
 AddTaskPi0EMCALPbPb.C:440
 AddTaskPi0EMCALPbPb.C:441
 AddTaskPi0EMCALPbPb.C:442
 AddTaskPi0EMCALPbPb.C:443
 AddTaskPi0EMCALPbPb.C:444
 AddTaskPi0EMCALPbPb.C:445
 AddTaskPi0EMCALPbPb.C:446
 AddTaskPi0EMCALPbPb.C:447
 AddTaskPi0EMCALPbPb.C:448
 AddTaskPi0EMCALPbPb.C:449
 AddTaskPi0EMCALPbPb.C:450
 AddTaskPi0EMCALPbPb.C:451
 AddTaskPi0EMCALPbPb.C:452
 AddTaskPi0EMCALPbPb.C:453
 AddTaskPi0EMCALPbPb.C:454
 AddTaskPi0EMCALPbPb.C:455
 AddTaskPi0EMCALPbPb.C:456
 AddTaskPi0EMCALPbPb.C:457
 AddTaskPi0EMCALPbPb.C:458