]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGPP/CalibMacros/CPass0/AddTaskT0Calib.C
Improved messages and protections
[u/mrichter/AliRoot.git] / PWGPP / CalibMacros / CPass0 / AddTaskT0Calib.C
1 void    readCDB (TObject *task1);
2 //_____________________________________________________________________________
3 AliAnalysisTask  *AddTaskT0Calib(Int_t runNumber)
4 {
5   //
6   // add calibration task
7   //
8   AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
9   if (!mgr) {
10     ::Error("AddTaskT0Calib", "No analysis manager to connect to.");
11     return NULL;
12   }  
13   
14   // check the input handler
15   if (!mgr->GetInputEventHandler()) {
16     ::Error("AddTaskT0Calib", "This task requires an input event handler");
17     return NULL;
18   }  
19
20   // set TPC OCDB parameters
21   //ConfigOCDB(runNumber);
22
23   // setup task
24   AliT0CalibOffsetChannelsTask  *task1 = new AliT0CalibOffsetChannelsTask("CalibObjectsTrain1");
25   readCDB(task1, runNumber);
26    mgr->AddTask(task1);
27   
28   //  AliT0AnalysisTaskQA * task2 = new AliT0AnalysisTaskQA("QA task");
29   //    mgr->AddTask(task2);
30
31   AliAnalysisDataContainer *cinput1 = mgr->GetCommonInputContainer();
32   if (!cinput1) cinput1 = mgr->CreateContainer("cchain",TChain::Class(), 
33                                       AliAnalysisManager::kInputContainer);
34   AliAnalysisDataContainer *coutput1 = mgr->CreateContainer("T0Calib",TObjArray::Class(), AliAnalysisManager::kOutputContainer, "AliESDfriends_v1.root");  
35
36   mgr->ConnectInput(task1,0,cinput1);
37   mgr->ConnectOutput(task1,1,coutput1);
38   return task1;
39 }
40 //_____________________________________________________________________________
41 void    readCDB (TObject *task1,  Int_t runNumber) {
42
43   Float_t zero_timecdb[24]={0};
44   Float_t *timecdb = zero_timecdb;
45   Float_t cfdvalue[24][5];
46   for(Int_t i=0; i<24; i++) 
47     for (Int_t i0=0; i0<5; i0++)
48       cfdvalue[i][i0] = 0;
49       
50   Float_t zero_shiftcdb[4]={0};
51   Float_t *shiftcdb = zero_shiftcdb;
52   AliT0CalibOffsetChannelsTask *mytask = (AliT0CalibOffsetChannelsTask*)task1;
53
54   AliCDBManager* man = AliCDBManager::Instance();
55   AliCDBEntry *entry = AliCDBManager::Instance()->Get("GRP/CTP/CTPtiming");
56   if (!entry) AliFatal("CTP timing parameters are not found in OCDB !");
57   AliCTPTimeParams *ctpParams = (AliCTPTimeParams*)entry->GetObject();
58   Float_t l1Delay = (Float_t)ctpParams->GetDelayL1L0()*25.0;
59
60   AliCDBEntry *entry1 = AliCDBManager::Instance()->Get("GRP/CTP/TimeAlign");
61   if (!entry1) AliFatal("CTP time-alignment is not found in OCDB !");
62   AliCTPTimeParams *ctpTimeAlign = (AliCTPTimeParams*)entry1->GetObject();
63   l1Delay += ((Float_t)ctpTimeAlign->GetDelayL1L0()*25.0);
64  
65   AliCDBEntry *entry4 = AliCDBManager::Instance()->Get("GRP/Calib/LHCClockPhase");
66   if (!entry4) AliFatal("LHC clock-phase shift is not found in OCDB !");
67   AliLHCClockPhase *phase = (AliLHCClockPhase*)entry4->GetObject();
68   Float_t fGRPdelays = l1Delay - phase->GetMeanPhase();
69
70   AliCDBEntry* entry5 = AliCDBManager::Instance()->Get("GRP/GRP/Data");
71   AliGRPObject* grpData = dynamic_cast<AliGRPObject*>(entry5->GetObject());
72   if (!grpData) {
73     ::Error("AddTaskT0Calib","Failed to get GRP data for run %d",runNumber);
74     return;
75   }
76
77   TString LHCperiod = grpData->GetLHCPeriod();
78   Bool_t isLHC10b =  LHCperiod.Contains("LHC10b");
79   Bool_t isLHC10c =  LHCperiod.Contains("LHC10c");
80
81   ::Info("AddTaskT0Calib","LHCperiod:%s  --->  isLHC10b:%d isLHC10c:%d",
82          LHCperiod.Data(),(Int_t)isLHC10b, (Int_t)isLHC10c);
83
84   if(isLHC10b || isLHC10c) mytask-> SetRefPMT(12,2);
85
86   AliCDBEntry *entryCalib0 = man->Get("T0/Calib/Latency");
87   if(!entryCalib0) {
88     ::Error("AddTastT0Calib","Cannot find any AliCDBEntry for [Calib, Latency]!");
89     return;
90   }
91   AliT0CalibLatency *calibda=(AliT0CalibLatency*)entryCalib0->GetObject();
92   Float_t fLatencyL1 = calibda->GetLatencyL1();
93   Float_t fLatencyHPTDC = calibda->GetLatencyHPTDC();
94  
95   AliCDBEntry *entryCalib1 = man->Get("T0/Calib/TimeDelay");
96   if(!entryCalib1) {
97     ::Error("AddTaskT0Calib","Cannot find any AliCDBEntry for [Calib, TimeDelay]!");
98     return;
99   }
100   else
101     {
102       AliT0CalibTimeEq *clb = (AliT0CalibTimeEq*)entryCalib1->GetObject();
103       timecdb = clb->GetTimeEq();
104       for(Int_t i=0; i<24; i++) 
105         for (Int_t i0=0; i0<5; i0++){
106           cfdvalue[i][i0] = clb->GetCFDvalue(i, i0);
107         }
108     }
109  
110   for (Int_t i=0; i<24; i++) {
111     Float_t cfdmean = cfdvalue[i][0];
112     if( cfdvalue[i][0] < 500 || cfdvalue[i][0] > 50000) cfdmean = ( 1000.*fLatencyHPTDC - 1000.*fLatencyL1 + 1000.*fGRPdelays)/24.4;
113      mytask->SetCFDvalue(i, cfdmean);
114     mytask->SetTimeEq(i, timecdb[i]);
115   } 
116
117   AliCDBEntry *entryCalib2 = man->Get("T0/Calib/TimeAdjust");
118   if(!entryCalib2) {
119     ::Error("AddTaskT0Calib","Cannot find any AliCDBEntry for [Calib, TimeAdjust]!");
120   }
121  else
122     {
123       AliT0CalibSeasonTimeShift *clb1 = (AliT0CalibSeasonTimeShift*)entryCalib2->GetObject();
124       shiftcdb = clb1->GetT0Means();
125     }
126   
127   for (Int_t i=0; i<4; i++)  mytask->SetT0Means(i,shiftcdb[i]);
128 }