3 This macros setup the TPC calibration task AddTaskTPCCalib
5 - the run number is required to config TPC OCDB
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
14 // function to set TPC OCDB parameters
15 void ConfigOCDB(Int_t crun);
20 //_____________________________________________________________________________
21 AliAnalysisTask *AddTaskTPCCalib(Int_t runNumber)
24 // add calibration task
26 AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
28 ::Error("AddTaskTPCCalib", "No analysis manager to connect to.");
32 // check the input handler
33 if (!mgr->GetInputEventHandler()) {
34 ::Error("AddTaskTPCCalib", "This task requires an input event handler");
38 // set TPC OCDB parameters
39 ConfigOCDB(runNumber);
41 // setup task TPCCalib
42 TString outputFileName=mgr->GetCommonFileName();
43 AliTPCAnalysisTaskcalib *task1=new AliTPCAnalysisTaskcalib("CalibObjectsTrain1");
44 SetupCalibTaskTrain1(task1);
46 AliAnalysisDataContainer *cinput1 = mgr->GetCommonInputContainer();
47 if (!cinput1) cinput1 = mgr->CreateContainer("cchain",TChain::Class(),
48 AliAnalysisManager::kInputContainer);
49 for (Int_t i=0; i<task1->GetJobs()->GetEntries(); i++) {
50 if (task1->GetJobs()->At(i)) {
51 AliAnalysisDataContainer* coutput = mgr->CreateContainer(task1->GetJobs()->At(i)->GetName(),
52 AliTPCcalibBase::Class(),
53 AliAnalysisManager::kOutputContainer,
54 "AliESDfriends_v1.root:TPCCalib");
55 mgr->ConnectOutput(task1,i,coutput);
58 mgr->ConnectInput(task1,0,cinput1);
60 // setup task TPCAlign
61 AliTPCAnalysisTaskcalib *taskAlign=new AliTPCAnalysisTaskcalib("CalibObjectsTrain1");
62 SetupCalibTaskTrainAlign(taskAlign);
63 mgr->AddTask(taskAlign);
64 AliAnalysisDataContainer *cinput1 = mgr->GetCommonInputContainer();
65 if (!cinput1) cinput1 = mgr->CreateContainer("cchain",TChain::Class(),
66 AliAnalysisManager::kInputContainer);
67 for (Int_t i=0; i<taskAlign->GetJobs()->GetEntries(); i++) {
68 if (taskAlign->GetJobs()->At(i)) {
69 AliAnalysisDataContainer* coutput = mgr->CreateContainer(taskAlign->GetJobs()->At(i)->GetName(),
70 AliTPCcalibBase::Class(),
71 AliAnalysisManager::kOutputContainer,
72 "AliESDfriends_v1.root:TPCAlign");
73 mgr->ConnectOutput(taskAlign,i,coutput);
76 mgr->ConnectInput(taskAlign,0,cinput1);
78 // setup task TPCCluster
79 AliTPCAnalysisTaskcalib *taskCluster=new AliTPCAnalysisTaskcalib("CalibObjectsTrain1");
80 SetupCalibTaskTrainCluster(taskCluster);
81 mgr->AddTask(taskCluster);
82 AliAnalysisDataContainer *cinput1 = mgr->GetCommonInputContainer();
83 if (!cinput1) cinput1 = mgr->CreateContainer("cchain",TChain::Class(),
84 AliAnalysisManager::kInputContainer);
85 for (Int_t i=0; i<taskCluster->GetJobs()->GetEntries(); i++) {
86 if (taskCluster->GetJobs()->At(i)) {
87 AliAnalysisDataContainer* coutput = mgr->CreateContainer(taskCluster->GetJobs()->At(i)->GetName(),
88 AliTPCcalibBase::Class(),
89 AliAnalysisManager::kOutputContainer,
90 "AliESDfriends_v1.root:TPCCluster");
91 mgr->ConnectOutput(taskCluster,i,coutput);
94 mgr->ConnectInput(taskCluster,0,cinput1);
100 //_____________________________________________________________________________
101 void AddCalibCalib(TObject* task){
103 // Responsible: Marian Ivanov
105 // calibCalib is a prefilter
106 // The current OCDB entries transformation are applied on cluster, tracks are refitted
108 AliTPCAnalysisTaskcalib* myTask = (AliTPCAnalysisTaskcalib*) task;
109 AliTPCcalibCalib *calibCalib = new AliTPCcalibCalib("calibTPC","calibTPC");
110 calibCalib->SetDebugLevel(0);
111 calibCalib->SetStreamLevel(0);
112 calibCalib->SetTriggerMask(-1,-1,kFALSE); //accept everything
113 myTask->AddJob(calibCalib);
116 //_____________________________________________________________________________
117 void AddCalibTimeGain(TObject* task, Bool_t isCosmic = kFALSE, char * name = "calibTimeGain"){
119 // Responsible: Alexander Kalweit
120 // Description: Time Gain calibration
123 // Set run time ranges (time stamps)
124 AliCDBEntry* entry = AliCDBManager::Instance()->Get("GRP/GRP/Data");
126 ::Error("AddCalibTimeGain","Cannot get AliCDBEntry");
129 const AliGRPObject* grpData = dynamic_cast<AliGRPObject*>(entry->GetObject());
131 ::Error("AddCalibTimeGain","Cannot get AliGRPObject");
134 time_t sTime = grpData->GetTimeStart();
135 time_t eTime = grpData->GetTimeEnd();
136 TTimeStamp startRunTime(sTime);
137 TTimeStamp stopRunTime(eTime);
140 startRunTime.GetDate(kTRUE,0,&year);
141 TTimeStamp startTime(year,1,1,0,0,0);
142 TTimeStamp stopTime(year,12,31,23,59,59);
145 // setup calibration component
148 Bool_t useQmax = (grpData->GetBeamType()).Contains("Pb-Pb");
150 AliTPCAnalysisTaskcalib* myTask = (AliTPCAnalysisTaskcalib*) task;
151 AliTPCcalibTimeGain *calibTimeGain = new AliTPCcalibTimeGain(name,"calibTimeGain", startTime.GetSec(), stopTime.GetSec(), 10*60);
152 calibTimeGain->SetIsCosmic(isCosmic);
153 calibTimeGain->SetUseCookAnalytical(kTRUE);
154 calibTimeGain->SetUseMax(useQmax);
155 calibTimeGain->SetDebugLevel(0);
156 calibTimeGain->SetStreamLevel(0);
157 calibTimeGain->SetTriggerMask(-1,-1,kTRUE); //reject laser
158 calibTimeGain->SetLowerTrunc(0.02);
159 calibTimeGain->SetUpperTrunc(0.6);
161 myTask->AddJob(calibTimeGain);
163 AliTPCcalibGainMult *calibGainMult = new AliTPCcalibGainMult("calibGainMult","calibGainMult");
164 calibGainMult->SetUseMax(useQmax);
165 calibGainMult->SetDebugLevel(0);
166 calibGainMult->SetStreamLevel(0);
167 calibGainMult->SetTriggerMask(-1,-1,kTRUE); //reject laser
168 calibGainMult->SetLowerTrunc(0.02);
169 calibGainMult->SetUpperTrunc(0.6);
171 myTask->AddJob(calibGainMult);
175 //_____________________________________________________________________________
176 void AddCalibTime(TObject* task){
178 // Responsible: Dag Larsen
179 // Description: Time V drift calibration
182 // Set run time ranges (time stamps)
183 AliCDBEntry* entry = AliCDBManager::Instance()->Get("GRP/GRP/Data");
185 ::Error("AddCalibTime","Cannot get AliCDBEntry");
188 const AliGRPObject* grpData = dynamic_cast<AliGRPObject*>(entry->GetObject());
190 ::Error("AddCalibTime","Cannot get AliGRPObject");
193 time_t sTime = grpData->GetTimeStart();
194 time_t eTime = grpData->GetTimeEnd();
196 TTimeStamp startRunTime(sTime);
197 TTimeStamp stopRunTime(eTime);
200 startRunTime.GetDate(kTRUE,0,&year);
201 TTimeStamp startTime(year,1,1,0,0,0);
202 TTimeStamp stopTime(year,12,31,23,59,59);
205 // setup calibration component
207 AliTPCAnalysisTaskcalib* myTask = (AliTPCAnalysisTaskcalib*) task;
208 AliTPCcalibTime *calibTime = new AliTPCcalibTime("calibTime","calibTime", startTime.GetSec(), stopTime.GetSec(), 10*60, 2);
209 calibTime->SetDebugLevel(0);
210 calibTime->SetStreamLevel(0);
211 calibTime->SetTriggerMask(-1,-1,kFALSE); //accept everything
213 // max 15000 tracks per event
214 calibTime->SetCutTracks(15000);
216 myTask->AddJob(calibTime);
220 void AddCalibTracks(TObject* task){
222 // Responsible: Marian Ivanov
224 // Histogram residuals and pulls of the track parameters in bins of track parameters
226 AliTPCAnalysisTaskcalib* myTask = (AliTPCAnalysisTaskcalib*) task;
227 AliTPCClusterParam * clusterParam = AliTPCcalibDB::Instance()->GetClusterParam();
229 AliTPCcalibTracksCuts *cuts = new AliTPCcalibTracksCuts(30, 0.4, 5, 0.13, 0.018);
231 AliTPCcalibTracks *calibTracks = new AliTPCcalibTracks("calibTracks", "Resolution calibration object for tracks", clusterParam, cuts);
232 calibTracks->SetDebugLevel(debugLevel);
233 calibTracks->SetStreamLevel(streamLevel);
234 calibTracks->SetTriggerMask(-1,-1,kTRUE);
235 myTask->AddJob(calibTracks);
239 void AddCalibAlign(TObject* task){
241 // Responsible: Marian Ivanov
244 AliTPCAnalysisTaskcalib* myTask = (AliTPCAnalysisTaskcalib*) task;
245 AliTPCcalibAlign *calibAlign = new AliTPCcalibAlign("alignTPC","Alignment of the TPC sectors");
246 calibAlign->SetDebugLevel(debugLevel);
247 calibAlign->SetStreamLevel(streamLevel);
248 calibAlign->SetTriggerMask(-1,-1,kTRUE); //accept everything
249 myTask->AddJob(calibAlign);
253 void AddCalibLaser(TObject* task){
255 // Responsible: Marian Ivanov
258 AliTPCAnalysisTaskcalib* myTask = (AliTPCAnalysisTaskcalib*) task;
259 AliTPCcalibLaser *calibLaser = new AliTPCcalibLaser("laserTPC","laserTPC");
260 calibLaser->SetDebugLevel(debugLevel);
261 calibLaser->SetStreamLevel(streamLevel);
262 calibLaser->SetTriggerMask(-1,-1,kFALSE); //accept everything
263 myTask->AddJob(calibLaser);
267 void AddCalibCosmic(TObject* task){
269 // Responsible: Marian Ivanov
271 // Histogram residuals and pulls of the track parameters in bins of track parameters
272 // Dump cosmic tracks to the tree
274 AliTPCAnalysisTaskcalib* myTask = (AliTPCAnalysisTaskcalib*) task;
275 AliTPCcalibCosmic *calibCosmic = new AliTPCcalibCosmic("cosmicTPC","cosmicTPC");
276 calibCosmic->SetDebugLevel(debugLevel);
277 calibCosmic->SetStreamLevel(1);
278 calibCosmic->SetTriggerMask(-1,-1,kTRUE); //accept everything
279 myTask->AddJob(calibCosmic);
284 //_____________________________________________________________________________
285 void SetupCalibTaskTrain1(TObject* task){
287 // Setup tasks for calibration train
290 AddCalibTimeGain(task);
294 void SetupCalibTaskTrainAlign(TObject* task){
296 // Setup tasks for calibration train
300 //AddCalibCosmic(task);
303 void SetupCalibTaskTrainCluster(TObject* task){
305 // Setup tasks for calibration train
307 AddCalibTracks(task);
310 //_____________________________________________________________________________
311 void ConfigOCDB(Int_t run){
313 // Configure TPC OCDB
315 printf("SETUP OCBD for TPC\n");
316 printf("SETUP OCBD for TPC\n");
317 printf("SETUP OCBD for TPC Run =%d\n", run);
320 AliTPCParam *param= AliTPCcalibDB::Instance()->GetParameters();
321 param->ReadGeoMatrices();
323 AliMagF* magF= TGeoGlobalMagField::Instance()->GetField();
324 printf("\n\nSET EXB FIELD\t\n\n");
325 AliTPCcalibDB::Instance()->SetExBField(magF);
329 AliTPCTransform *transform = AliTPCcalibDB::Instance()->GetTransform() ;
331 //AliTPCRecoParam * tpcRecoParam = AliTPCRecoParam::GetCosmicTestParam(kTRUE);
333 AliCDBEntry* entry = AliCDBManager::Instance()->Get("TPC/Calib/RecoParam");
335 ::Error("AddTaskTPCCalib","TPC reco param not available");
338 TObjArray * array = (TObjArray*)entry->GetObject();
340 ::Error("AddTaskTPCCalib","TPC reco param not available");
344 //get the beam type from OCDB to decide which type of reco param we need -
346 entry = AliCDBManager::Instance()->Get("GRP/GRP/Data");
347 AliGRPObject* grpData = dynamic_cast<AliGRPObject*>(entry->GetObject()); // new GRP entry
348 TString beamType = grpData->GetBeamType();
349 if (beamType==AliGRPObject::GetInvalidString()) {
350 ::Error("AddTaskTPCCalib","GRP/GRP/Data entry: missing value for the beam type ! Using UNKNOWN");
351 beamType = "UNKNOWN";
353 // 0 - Low Flux (pp), 1- High Flux (Pb-Pb)
355 if (beamType.Contains("p-p")) {fluxType=0;}
356 if (beamType.Contains("A-A")) {fluxType=1;}
357 AliTPCRecoParam * tpcRecoParam = (AliTPCRecoParam*)array->At(fluxType);
358 ::Info("AddTaskTPCCalib","Beam type: %s, using fluxType=%i",beamType.Data(),fluxType);
359 tpcRecoParam->Print();
361 transform->SetCurrentRecoParam(tpcRecoParam);
362 tpcRecoParam->SetUseGainCorrectionTime(0);
363 tpcRecoParam->SetUseRPHICorrection(kFALSE);
364 tpcRecoParam->SetUseTOFCorrection(kFALSE);
366 tpcRecoParam->SetUseDriftCorrectionTime(0);
367 tpcRecoParam->SetUseDriftCorrectionGY(0);
369 tpcRecoParam->SetUseRadialCorrection(kFALSE);
370 tpcRecoParam->SetUseQuadrantAlignment(kFALSE);
372 tpcRecoParam->SetUseSectorAlignment(kFALSE);
373 tpcRecoParam->SetUseFieldCorrection(kFALSE);
374 tpcRecoParam->SetUseExBCorrection(kFALSE);
376 tpcRecoParam->SetUseMultiplicityCorrectionDedx(kFALSE);
377 tpcRecoParam->SetUseAlignmentTime(kFALSE);
378 tpcRecoParam->SetUseComposedCorrection(kTRUE);
380 tpcRecoParam->SetCorrectionHVandPTMode(1);
382 AliTPCcalibDB::Instance()->SetRun(run);