ROOT logo

TString  kCalorimeter = "EMCAL";
Int_t    kYears       = 2011;
Int_t    kDebug       = -1;
Bool_t   kPrint       = kFALSE;

AliAnalysisTaskCaloTrackCorrelation *AddTaskGenKine(TString outputfile, const Double_t scaleFactor   = -1)
{
  // Creates a CaloTrackCorr 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;
  }  
    
  // #### Configure analysis ####
    
  AliAnaCaloTrackCorrMaker * maker = new AliAnaCaloTrackCorrMaker();
  printf("SCALE FACTOR %e\n",scaleFactor);
  maker->SetScaleFactor(scaleFactor); // for MC, negative (not scaled) by default
  
  // 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(ConfigureGenKine(), n++); // Photon cluster selection
   
  maker->SetAnaDebug(kDebug)  ;
  maker->SwitchOnHistogramsMaker()  ;
  maker->SwitchOffAODsMaker() ;
  
  if(kPrint) maker->Print("");
  
  // Create task
  
  AliAnalysisTaskCaloTrackCorrelation * task = new AliAnalysisTaskCaloTrackCorrelation ("GeneratorKineAnalysis");
  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("GenKine", TList::Class(), 
                                                             AliAnalysisManager::kOutputContainer, 
                                                             Form("%s",outputfile.Data()));
	
  AliAnalysisDataContainer *cout_cuts = mgr->CreateContainer("Param_GemKine", TList::Class(), 
                                                             AliAnalysisManager::kParamContainer, 
                                                             "AnalysisParameters.root");
  
  // 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, 1, cout_pc);
  mgr->ConnectOutput (task, 2, cout_cuts);
      
  return task;
}

//____________________________________
AliCaloTrackReader * ConfigureReader()
{
  
  AliCaloTrackReader * reader = new AliCaloTrackMCReader();
  
  reader->SetDebug(kDebug);//10 for lots of messages
    
//  reader->SetPtHardAndJetPtComparison(kTRUE);
//  reader->SetPtHardAndJetPtFactor(4);
//  
//  reader->SetPtHardAndClusterPtComparison(kTRUE);
//  reader->SetPtHardAndClusterPtFactor(1.);

  
  reader->SwitchOffWriteDeltaAOD()  ;
  
  reader->SwitchOnStack();          
  reader->SwitchOffAODMCParticles(); 
  
  //------------------------
  // Detector input filling
  //------------------------
  
  //Min cluster/track E
  reader->SetEMCALEMin(0.3); 
  reader->SetEMCALEMax(1000); 
  reader->SetPHOSEMin(0.3);
  reader->SetPHOSEMax(1000);
  reader->SetCTSPtMin(0.2);
  reader->SetCTSPtMax(1000);

  reader->SwitchOnFiducialCut();
  //reader->GetFiducialCut()->SetSimpleCTSFiducialCut(0.8, 0, 360) ;

  reader->SwitchOffCTS();
  reader->SwitchOffEMCALCells();  
  reader->SwitchOffEMCAL();
  reader->SwitchOffPHOSCells();  
  reader->SwitchOffPHOS();
  
  reader->SetZvertexCut(10.);               // Open cut
  reader->SwitchOnPrimaryVertexSelection(); // and besides primary vertex

  reader->SwitchOffPileUpEventRejection();  // remove pileup by default
  reader->SwitchOffV0ANDSelection() ;       // and besides v0 AND
        
  if(kPrint)reader->Print("");
  
  return reader;
  
}


//_______________________________________
AliCalorimeterUtils* ConfigureCaloUtils()
{
  
  AliCalorimeterUtils *cu = new AliCalorimeterUtils;
  cu->SetDebug(kDebug);
  
  
  cu->SwitchOffClusterPlot();
  
  cu->SwitchOffRecalculateClusterTrackMatching(); // Done in clusterization
  
  cu->SwitchOffBadChannelsRemoval() ;
  
  cu->SwitchOffLoadOwnEMCALGeometryMatrices();
  
  AliEMCALRecoUtils * recou = cu->GetEMCALRecoUtils();
  
  cu->SwitchOffRecalibration(); 
  cu->SwitchOffTimeRecalibration();     
  cu->SwitchOffRunDepCorrection(); 
  cu->SwitchOffCorrectClusterLinearity();
  cu->SwitchOffEMCALOADB() ; 
  
  // PHOS 
  cu->SwitchOffLoadOwnPHOSGeometryMatrices();
  
  if(kPrint) cu->Print("");
  
  return cu;
  
}


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

    
  ana->AddToHistogramsName("AnaGenKine_");
  SetHistoRangeAndNBins(ana->GetHistogramRanges()); // see method below
    
  if(kPrint)ana->Print("");
  
  return ana;
  
}

//________________________________________________________
void SetHistoRangeAndNBins (AliHistogramRanges* histoRanges)
{
  // Set common bins for all analysis and MC histograms filling
  
  histoRanges->SetHistoPtRangeAndNBins(0, 200, 400) ; // 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);
  histoRanges->SetHistodRRangeAndNBins(0.,0.15,150);//QA
  
  // QA, electron, charged
  histoRanges->SetHistoPOverERangeAndNBins(0,10.,100);
  histoRanges->SetHistodEdxRangeAndNBins(0.,200.,200);
  
  // QA
  histoRanges->SetHistoFinePtRangeAndNBins(0, 10, 200) ; // bining for fhAmpId
  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);
  
}
 AddTaskGenKine.C:1
 AddTaskGenKine.C:2
 AddTaskGenKine.C:3
 AddTaskGenKine.C:4
 AddTaskGenKine.C:5
 AddTaskGenKine.C:6
 AddTaskGenKine.C:7
 AddTaskGenKine.C:8
 AddTaskGenKine.C:9
 AddTaskGenKine.C:10
 AddTaskGenKine.C:11
 AddTaskGenKine.C:12
 AddTaskGenKine.C:13
 AddTaskGenKine.C:14
 AddTaskGenKine.C:15
 AddTaskGenKine.C:16
 AddTaskGenKine.C:17
 AddTaskGenKine.C:18
 AddTaskGenKine.C:19
 AddTaskGenKine.C:20
 AddTaskGenKine.C:21
 AddTaskGenKine.C:22
 AddTaskGenKine.C:23
 AddTaskGenKine.C:24
 AddTaskGenKine.C:25
 AddTaskGenKine.C:26
 AddTaskGenKine.C:27
 AddTaskGenKine.C:28
 AddTaskGenKine.C:29
 AddTaskGenKine.C:30
 AddTaskGenKine.C:31
 AddTaskGenKine.C:32
 AddTaskGenKine.C:33
 AddTaskGenKine.C:34
 AddTaskGenKine.C:35
 AddTaskGenKine.C:36
 AddTaskGenKine.C:37
 AddTaskGenKine.C:38
 AddTaskGenKine.C:39
 AddTaskGenKine.C:40
 AddTaskGenKine.C:41
 AddTaskGenKine.C:42
 AddTaskGenKine.C:43
 AddTaskGenKine.C:44
 AddTaskGenKine.C:45
 AddTaskGenKine.C:46
 AddTaskGenKine.C:47
 AddTaskGenKine.C:48
 AddTaskGenKine.C:49
 AddTaskGenKine.C:50
 AddTaskGenKine.C:51
 AddTaskGenKine.C:52
 AddTaskGenKine.C:53
 AddTaskGenKine.C:54
 AddTaskGenKine.C:55
 AddTaskGenKine.C:56
 AddTaskGenKine.C:57
 AddTaskGenKine.C:58
 AddTaskGenKine.C:59
 AddTaskGenKine.C:60
 AddTaskGenKine.C:61
 AddTaskGenKine.C:62
 AddTaskGenKine.C:63
 AddTaskGenKine.C:64
 AddTaskGenKine.C:65
 AddTaskGenKine.C:66
 AddTaskGenKine.C:67
 AddTaskGenKine.C:68
 AddTaskGenKine.C:69
 AddTaskGenKine.C:70
 AddTaskGenKine.C:71
 AddTaskGenKine.C:72
 AddTaskGenKine.C:73
 AddTaskGenKine.C:74
 AddTaskGenKine.C:75
 AddTaskGenKine.C:76
 AddTaskGenKine.C:77
 AddTaskGenKine.C:78
 AddTaskGenKine.C:79
 AddTaskGenKine.C:80
 AddTaskGenKine.C:81
 AddTaskGenKine.C:82
 AddTaskGenKine.C:83
 AddTaskGenKine.C:84
 AddTaskGenKine.C:85
 AddTaskGenKine.C:86
 AddTaskGenKine.C:87
 AddTaskGenKine.C:88
 AddTaskGenKine.C:89
 AddTaskGenKine.C:90
 AddTaskGenKine.C:91
 AddTaskGenKine.C:92
 AddTaskGenKine.C:93
 AddTaskGenKine.C:94
 AddTaskGenKine.C:95
 AddTaskGenKine.C:96
 AddTaskGenKine.C:97
 AddTaskGenKine.C:98
 AddTaskGenKine.C:99
 AddTaskGenKine.C:100
 AddTaskGenKine.C:101
 AddTaskGenKine.C:102
 AddTaskGenKine.C:103
 AddTaskGenKine.C:104
 AddTaskGenKine.C:105
 AddTaskGenKine.C:106
 AddTaskGenKine.C:107
 AddTaskGenKine.C:108
 AddTaskGenKine.C:109
 AddTaskGenKine.C:110
 AddTaskGenKine.C:111
 AddTaskGenKine.C:112
 AddTaskGenKine.C:113
 AddTaskGenKine.C:114
 AddTaskGenKine.C:115
 AddTaskGenKine.C:116
 AddTaskGenKine.C:117
 AddTaskGenKine.C:118
 AddTaskGenKine.C:119
 AddTaskGenKine.C:120
 AddTaskGenKine.C:121
 AddTaskGenKine.C:122
 AddTaskGenKine.C:123
 AddTaskGenKine.C:124
 AddTaskGenKine.C:125
 AddTaskGenKine.C:126
 AddTaskGenKine.C:127
 AddTaskGenKine.C:128
 AddTaskGenKine.C:129
 AddTaskGenKine.C:130
 AddTaskGenKine.C:131
 AddTaskGenKine.C:132
 AddTaskGenKine.C:133
 AddTaskGenKine.C:134
 AddTaskGenKine.C:135
 AddTaskGenKine.C:136
 AddTaskGenKine.C:137
 AddTaskGenKine.C:138
 AddTaskGenKine.C:139
 AddTaskGenKine.C:140
 AddTaskGenKine.C:141
 AddTaskGenKine.C:142
 AddTaskGenKine.C:143
 AddTaskGenKine.C:144
 AddTaskGenKine.C:145
 AddTaskGenKine.C:146
 AddTaskGenKine.C:147
 AddTaskGenKine.C:148
 AddTaskGenKine.C:149
 AddTaskGenKine.C:150
 AddTaskGenKine.C:151
 AddTaskGenKine.C:152
 AddTaskGenKine.C:153
 AddTaskGenKine.C:154
 AddTaskGenKine.C:155
 AddTaskGenKine.C:156
 AddTaskGenKine.C:157
 AddTaskGenKine.C:158
 AddTaskGenKine.C:159
 AddTaskGenKine.C:160
 AddTaskGenKine.C:161
 AddTaskGenKine.C:162
 AddTaskGenKine.C:163
 AddTaskGenKine.C:164
 AddTaskGenKine.C:165
 AddTaskGenKine.C:166
 AddTaskGenKine.C:167
 AddTaskGenKine.C:168
 AddTaskGenKine.C:169
 AddTaskGenKine.C:170
 AddTaskGenKine.C:171
 AddTaskGenKine.C:172
 AddTaskGenKine.C:173
 AddTaskGenKine.C:174
 AddTaskGenKine.C:175
 AddTaskGenKine.C:176
 AddTaskGenKine.C:177
 AddTaskGenKine.C:178
 AddTaskGenKine.C:179
 AddTaskGenKine.C:180
 AddTaskGenKine.C:181
 AddTaskGenKine.C:182
 AddTaskGenKine.C:183
 AddTaskGenKine.C:184
 AddTaskGenKine.C:185
 AddTaskGenKine.C:186
 AddTaskGenKine.C:187
 AddTaskGenKine.C:188
 AddTaskGenKine.C:189
 AddTaskGenKine.C:190
 AddTaskGenKine.C:191
 AddTaskGenKine.C:192
 AddTaskGenKine.C:193
 AddTaskGenKine.C:194
 AddTaskGenKine.C:195
 AddTaskGenKine.C:196
 AddTaskGenKine.C:197
 AddTaskGenKine.C:198
 AddTaskGenKine.C:199
 AddTaskGenKine.C:200
 AddTaskGenKine.C:201
 AddTaskGenKine.C:202
 AddTaskGenKine.C:203
 AddTaskGenKine.C:204
 AddTaskGenKine.C:205
 AddTaskGenKine.C:206
 AddTaskGenKine.C:207
 AddTaskGenKine.C:208
 AddTaskGenKine.C:209
 AddTaskGenKine.C:210
 AddTaskGenKine.C:211
 AddTaskGenKine.C:212
 AddTaskGenKine.C:213
 AddTaskGenKine.C:214
 AddTaskGenKine.C:215
 AddTaskGenKine.C:216
 AddTaskGenKine.C:217
 AddTaskGenKine.C:218
 AddTaskGenKine.C:219
 AddTaskGenKine.C:220
 AddTaskGenKine.C:221
 AddTaskGenKine.C:222
 AddTaskGenKine.C:223
 AddTaskGenKine.C:224
 AddTaskGenKine.C:225
 AddTaskGenKine.C:226
 AddTaskGenKine.C:227
 AddTaskGenKine.C:228
 AddTaskGenKine.C:229
 AddTaskGenKine.C:230
 AddTaskGenKine.C:231
 AddTaskGenKine.C:232
 AddTaskGenKine.C:233
 AddTaskGenKine.C:234
 AddTaskGenKine.C:235
 AddTaskGenKine.C:236
 AddTaskGenKine.C:237
 AddTaskGenKine.C:238
 AddTaskGenKine.C:239
 AddTaskGenKine.C:240
 AddTaskGenKine.C:241
 AddTaskGenKine.C:242
 AddTaskGenKine.C:243
 AddTaskGenKine.C:244
 AddTaskGenKine.C:245
 AddTaskGenKine.C:246
 AddTaskGenKine.C:247
 AddTaskGenKine.C:248