ROOT logo
#include <TString.h>
#include <TVectorD.h>
#include <TObjArray.h>
#include <TFile.h>

#include <AliTPCComposedCorrection.h>
#include <AliTPCCorrectionLookupTable.h>

#include <AliToyMCEventGenerator.h>


AliTPCComposedCorrection* GetComposedResidualDistortion(TString fluctuationMap, TString averageMap, Bool_t rescale=kTRUE)
{
  //
  //
  //


  TFile fFluct(fluctuationMap);
  AliTPCCorrectionLookupTable *corrFluct = (AliTPCCorrectionLookupTable*)fFluct.Get("map");
  fFluct.Close();

  TFile fAverage(averageMap);
  AliTPCCorrectionLookupTable *corrAverage = (AliTPCCorrectionLookupTable*)fAverage.Get("map");
  fAverage.Close();

  TObjArray *arrMaps = new TObjArray(2);
  // !!!!! In AliTPCComposedCorrection::GetDistortion MakeInverseIterator is called !!!!
  // for this reason we have to add the maps in the wrong order
  
  arrMaps->Add(corrAverage); // correction with the average Map
  arrMaps->Add(corrFluct);   // distortion with the fluctuation Map

  // create the composed correction
  // if the weight are set to +1 and -1, the first map will be responsible for the distortions
  // The second map for the corrections
  AliTPCComposedCorrection *residualDistortion = new AliTPCComposedCorrection(arrMaps, AliTPCComposedCorrection::kQueueResidual);
  TVectorD weights(2);
  weights(0)=+1.;
  weights(1)=-1.;
  if (rescale) {
    Float_t dummy=0;
    weights(1)=-AliToyMCEventGenerator::GetSCScalingFactor(corrFluct, corrAverage,dummy);
  }
  residualDistortion->SetWeights(&weights);

  return residualDistortion;
}

AliTPCCorrectionLookupTable* GetResidualTable(TString fluctuationMap, TString averageMap, Bool_t rescale=kTRUE)
{
  TFile fFluct(fluctuationMap);
  AliTPCCorrectionLookupTable *corrFluct = (AliTPCCorrectionLookupTable*)fFluct.Get("map");
  fFluct.Close();
  
  TFile fAverage(averageMap);
  AliTPCCorrectionLookupTable *corrAverage = (AliTPCCorrectionLookupTable*)fAverage.Get("map");
  fAverage.Close();

  Double_t scale=AliToyMCEventGenerator::GetSCScalingFactor(corrFluct, corrAverage,dummy);

  corrAverage->SetCorrScaleFactor(scale);

  AliTPCCorrectionLookupTable *tab=new AliTPCCorrectionLookupTable;
  tab->CreateResidual(corrFluct, corrAverage);
  
 GetComposedResidualDistortion.C:1
 GetComposedResidualDistortion.C:2
 GetComposedResidualDistortion.C:3
 GetComposedResidualDistortion.C:4
 GetComposedResidualDistortion.C:5
 GetComposedResidualDistortion.C:6
 GetComposedResidualDistortion.C:7
 GetComposedResidualDistortion.C:8
 GetComposedResidualDistortion.C:9
 GetComposedResidualDistortion.C:10
 GetComposedResidualDistortion.C:11
 GetComposedResidualDistortion.C:12
 GetComposedResidualDistortion.C:13
 GetComposedResidualDistortion.C:14
 GetComposedResidualDistortion.C:15
 GetComposedResidualDistortion.C:16
 GetComposedResidualDistortion.C:17
 GetComposedResidualDistortion.C:18
 GetComposedResidualDistortion.C:19
 GetComposedResidualDistortion.C:20
 GetComposedResidualDistortion.C:21
 GetComposedResidualDistortion.C:22
 GetComposedResidualDistortion.C:23
 GetComposedResidualDistortion.C:24
 GetComposedResidualDistortion.C:25
 GetComposedResidualDistortion.C:26
 GetComposedResidualDistortion.C:27
 GetComposedResidualDistortion.C:28
 GetComposedResidualDistortion.C:29
 GetComposedResidualDistortion.C:30
 GetComposedResidualDistortion.C:31
 GetComposedResidualDistortion.C:32
 GetComposedResidualDistortion.C:33
 GetComposedResidualDistortion.C:34
 GetComposedResidualDistortion.C:35
 GetComposedResidualDistortion.C:36
 GetComposedResidualDistortion.C:37
 GetComposedResidualDistortion.C:38
 GetComposedResidualDistortion.C:39
 GetComposedResidualDistortion.C:40
 GetComposedResidualDistortion.C:41
 GetComposedResidualDistortion.C:42
 GetComposedResidualDistortion.C:43
 GetComposedResidualDistortion.C:44
 GetComposedResidualDistortion.C:45
 GetComposedResidualDistortion.C:46
 GetComposedResidualDistortion.C:47
 GetComposedResidualDistortion.C:48
 GetComposedResidualDistortion.C:49
 GetComposedResidualDistortion.C:50
 GetComposedResidualDistortion.C:51
 GetComposedResidualDistortion.C:52
 GetComposedResidualDistortion.C:53
 GetComposedResidualDistortion.C:54
 GetComposedResidualDistortion.C:55
 GetComposedResidualDistortion.C:56
 GetComposedResidualDistortion.C:57
 GetComposedResidualDistortion.C:58
 GetComposedResidualDistortion.C:59
 GetComposedResidualDistortion.C:60
 GetComposedResidualDistortion.C:61
 GetComposedResidualDistortion.C:62
 GetComposedResidualDistortion.C:63
 GetComposedResidualDistortion.C:64
 GetComposedResidualDistortion.C:65
 GetComposedResidualDistortion.C:66
 GetComposedResidualDistortion.C:67