o one more fix: the weight need to stay in order. Funny ...
[u/mrichter/AliRoot.git] / TPC / Upgrade / macros / GetComposedResidualDistortion.C
1 #include <TString.h>
2 #include <TVectorD.h>
3 #include <TObjArray.h>
4 #include <TFile.h>
5
6 #include <AliTPCComposedCorrection.h>
7 #include <AliTPCCorrectionLookupTable.h>
8
9 #include <AliToyMCEventGenerator.h>
10
11
12 AliTPCComposedCorrection* GetComposedResidualDistortion(TString fluctuationMap, TString averageMap, Bool_t rescale=kTRUE)
13 {
14   //
15   //
16   //
17
18
19   TFile fFluct(fluctuationMap);
20   AliTPCCorrectionLookupTable *corrFluct = (AliTPCCorrectionLookupTable*)fFluct.Get("map");
21   fFluct.Close();
22
23   TFile fAverage(averageMap);
24   AliTPCCorrectionLookupTable *corrAverage = (AliTPCCorrectionLookupTable*)fAverage.Get("map");
25   fAverage.Close();
26
27   TObjArray *arrMaps = new TObjArray(2);
28   // !!!!! In AliTPCComposedCorrection::GetDistortion MakeInverseIterator is called !!!!
29   // for this reason we have to add the maps in the wrong order
30   
31   arrMaps->Add(corrAverage); // correction with the average Map
32   arrMaps->Add(corrFluct);   // distortion with the fluctuation Map
33
34   // create the composed correction
35   // if the weight are set to +1 and -1, the first map will be responsible for the distortions
36   // The second map for the corrections
37   AliTPCComposedCorrection *residualDistortion = new AliTPCComposedCorrection(arrMaps, AliTPCComposedCorrection::kQueueResidual);
38   TVectorD weights(2);
39   weights(0)=+1.;
40   weights(1)=-1.;
41   if (rescale) {
42     Float_t dummy=0;
43     weights(1)=-AliToyMCEventGenerator::GetSCScalingFactor(corrFluct, corrAverage,dummy);
44   }
45   residualDistortion->SetWeights(&weights);
46
47   return residualDistortion;
48 }