]> git.uio.no Git - u/mrichter/AliRoot.git/blob - ANALYSIS/CalibMacros/Pass0/AddTaskTPCCalib.C
38f03c274628f43e884d38eac2098a772a7d4f55
[u/mrichter/AliRoot.git] / ANALYSIS / CalibMacros / Pass0 / AddTaskTPCCalib.C
1 /*
2
3  This macros setup the TPC calibration task AddTaskTPCCalib
4  for Pass0.
5  - the run number is required to config TPC OCDB
6  
7  The following calibration components are added to the AliTPCAnalysisTaskcalib task:
8  1. AliTPCcalibCalib - redo reconstruction with current calibration
9  2. AliTPCcalibTimeGain - TPC time dependent gain calibration
10  3. AliTPCcalibTime - TPC time dependent drift time calibration
11
12 */
13
14 // function to set TPC OCDB parameters
15 void ConfigOCDB(Int_t crun);
16
17 //_____________________________________________________________________________
18 AliAnalysisTask  *AddTaskTPCCalib(Int_t runNumber)
19 {
20   //
21   // add calibration task
22   //
23   AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
24   if (!mgr) {
25     ::Error("AddTaskTPCCalib", "No analysis manager to connect to.");
26     return NULL;
27   }  
28   
29   // check the input handler
30   if (!mgr->GetInputEventHandler()) {
31     ::Error("AddTaskTPCCalib", "This task requires an input event handler");
32     return NULL;
33   }  
34
35   // set TPC OCDB parameters
36   ConfigOCDB(runNumber);
37
38   // setup task
39   AliTPCAnalysisTaskcalib *task1=new AliTPCAnalysisTaskcalib("CalibObjectsTrain1");
40   SetupCalibTaskTrain1(task1);
41   mgr->AddTask(task1);
42
43   AliAnalysisDataContainer *cinput1 = mgr->GetCommonInputContainer();
44   if (!cinput1) cinput1 = mgr->CreateContainer("cchain",TChain::Class(), 
45                                       AliAnalysisManager::kInputContainer);
46   AliAnalysisDataContainer *coutput1 = mgr->CreateContainer("TPCCalib",TObjArray::Class(), AliAnalysisManager::kOutputContainer, "AliESDfriends_v1.root");  
47
48   mgr->ConnectInput(task1,0,cinput1);
49   mgr->ConnectOutput(task1,0,coutput1);
50   return task1;
51 }
52
53 //_____________________________________________________________________________
54 void AddCalibCalib(TObject* task){
55   //
56   // Responsible: Marian Ivanov
57   // Description:
58   // calibCalib is a prefilter 
59   // The current OCDB entries transformation are applied on cluster, tracks are refitted
60   //
61   AliTPCAnalysisTaskcalib* myTask = (AliTPCAnalysisTaskcalib*) task;
62   AliTPCcalibCalib *calibCalib = new AliTPCcalibCalib("calibTPC","calibTPC");
63   calibCalib->SetDebugLevel(0);
64   calibCalib->SetStreamLevel(0);
65   calibCalib->SetTriggerMask(-1,-1,kFALSE);        //accept everything 
66   myTask->AddJob(calibCalib);
67 }
68
69 //_____________________________________________________________________________
70 void AddCalibTimeGain(TObject* task, Bool_t isCosmic = kFALSE, char * name = "calibTimeGain"){
71   //
72   //  Responsible: Alexander Kalweit
73   //  Description: Time Gain calibration
74   //
75
76   // Set run time ranges (time stamps)
77   AliCDBEntry* entry = AliCDBManager::Instance()->Get("GRP/GRP/Data");
78   if(!entry) { 
79     ::Error("AddCalibTimeGain","Cannot get AliCDBEntry");
80     return;
81   }
82   const AliGRPObject* grpData = dynamic_cast<AliGRPObject*>(entry->GetObject());
83   if(!grpData) { 
84     ::Error("AddCalibTimeGain","Cannot get AliGRPObject");
85     return;
86   }
87   time_t sTime = grpData->GetTimeStart(); 
88   time_t eTime = grpData->GetTimeEnd(); 
89   TTimeStamp startRunTime(sTime);
90   TTimeStamp stopRunTime(eTime);
91
92   UInt_t year;
93   startRunTime.GetDate(kTRUE,0,&year);
94   TTimeStamp startTime(year,1,1,0,0,0);
95   TTimeStamp stopTime(year,12,31,23,59,59);
96
97   // 
98   // setup calibration component
99   //
100   AliTPCAnalysisTaskcalib* myTask = (AliTPCAnalysisTaskcalib*) task;
101   AliTPCcalibTimeGain *calibTimeGain = new AliTPCcalibTimeGain(name,"calibTimeGain", startTime.GetSec(), stopTime.GetSec(), 10*60);
102   calibTimeGain->SetIsCosmic(isCosmic);
103   calibTimeGain->SetUseCookAnalytical(kTRUE);
104   calibTimeGain->SetUseMax(kFALSE);
105   calibTimeGain->SetDebugLevel(0);
106   calibTimeGain->SetStreamLevel(0);
107   calibTimeGain->SetTriggerMask(-1,-1,kTRUE);        //reject laser
108   calibTimeGain->SetLowerTrunc(0.02);
109   calibTimeGain->SetUpperTrunc(0.6);
110
111   myTask->AddJob(calibTimeGain);
112
113   AliTPCcalibGainMult *calibGainMult = new AliTPCcalibGainMult("calibGainMult","calibGainMult");
114   calibGainMult->SetUseMax(kTRUE);
115   calibGainMult->SetDebugLevel(0);
116   calibGainMult->SetStreamLevel(0);
117   calibGainMult->SetTriggerMask(-1,-1,kTRUE);        //reject laser
118   calibGainMult->SetLowerTrunc(0.02);
119   calibGainMult->SetUpperTrunc(0.6);
120
121   myTask->AddJob(calibGainMult);
122
123 }
124
125 //_____________________________________________________________________________
126 void AddCalibTime(TObject* task){
127   //
128   // Responsible: Dag Larsen
129   // Description: Time V drift calibration
130   //
131
132   // Set run time ranges (time stamps)
133   AliCDBEntry* entry = AliCDBManager::Instance()->Get("GRP/GRP/Data");
134   if(!entry) { 
135     ::Error("AddCalibTime","Cannot get AliCDBEntry");
136     return;
137   }
138   const AliGRPObject* grpData = dynamic_cast<AliGRPObject*>(entry->GetObject());
139   if(!grpData) { 
140     ::Error("AddCalibTime","Cannot get AliGRPObject");
141     return;
142   }
143   time_t sTime = grpData->GetTimeStart(); 
144   time_t eTime = grpData->GetTimeEnd(); 
145
146   TTimeStamp startRunTime(sTime);
147   TTimeStamp stopRunTime(eTime);
148
149   UInt_t year;
150   startRunTime.GetDate(kTRUE,0,&year);
151   TTimeStamp startTime(year,1,1,0,0,0);
152   TTimeStamp stopTime(year,12,31,23,59,59);
153
154   // 
155   // setup calibration component
156   //
157   AliTPCAnalysisTaskcalib* myTask = (AliTPCAnalysisTaskcalib*) task;
158   AliTPCcalibTime *calibTime = new AliTPCcalibTime("calibTime","calibTime",  startTime.GetSec(), stopTime.GetSec(), 10*60, 2);
159   calibTime->SetDebugLevel(0);
160   calibTime->SetStreamLevel(0);
161   calibTime->SetTriggerMask(-1,-1,kFALSE);        //accept everything 
162
163   // max 200 tracks per event
164   calibTime->SetCutTracks(200);
165
166   myTask->AddJob(calibTime);
167 }
168
169 //_____________________________________________________________________________
170 void SetupCalibTaskTrain1(TObject* task){
171   //
172   // Setup tasks for calibration train
173   //
174   AddCalibCalib(task);
175   AddCalibTimeGain(task);
176   AddCalibTime(task);
177 }
178
179 //_____________________________________________________________________________
180 void ConfigOCDB(Int_t run){
181   //
182   // Configure TPC OCDB
183   //
184   printf("SETUP OCBD for TPC\n");
185   printf("SETUP OCBD for TPC\n");
186   printf("SETUP OCBD for TPC Run =%d\n", run);
187   //
188   //
189   AliTPCParam *param= AliTPCcalibDB::Instance()->GetParameters();
190   param->ReadGeoMatrices();
191   //
192   AliMagF* magF= TGeoGlobalMagField::Instance()->GetField();
193   printf("\n\nSET EXB FIELD\t\n\n");
194   AliTPCcalibDB::Instance()->SetExBField(magF);
195   //
196   //
197   //
198   AliTPCTransform *transform     = AliTPCcalibDB::Instance()->GetTransform() ;
199   AliTPCRecoParam * tpcRecoParam = AliTPCRecoParam::GetCosmicTestParam(kTRUE);
200   //
201   transform->SetCurrentRecoParam(tpcRecoParam);
202   tpcRecoParam->SetUseGainCorrectionTime(0);
203   tpcRecoParam->SetUseRPHICorrection(kFALSE); 
204   tpcRecoParam->SetUseTOFCorrection(kFALSE);
205   //
206   tpcRecoParam->SetUseDriftCorrectionTime(0);
207   tpcRecoParam->SetUseDriftCorrectionGY(0);
208   //
209   tpcRecoParam->SetUseRadialCorrection(kFALSE);
210   tpcRecoParam->SetUseQuadrantAlignment(kFALSE);
211   //
212   tpcRecoParam->SetUseSectorAlignment(kFALSE);
213   tpcRecoParam->SetUseFieldCorrection(kFALSE);
214   tpcRecoParam->SetUseExBCorrection(kFALSE);
215   //
216   tpcRecoParam->SetUseMultiplicityCorrectionDedx(kFALSE);
217   tpcRecoParam->SetUseAlignmentTime(kFALSE);
218   tpcRecoParam->SetUseComposedCorrection(kTRUE);
219
220   AliTPCcalibDB::Instance()->SetRun(run); 
221 }