/* This macros setup the TPC calibration task AddTaskTPCCalib for CPass0. - the run number is required to config TPC OCDB The following calibration components are added to the AliTPCAnalysisTaskcalib task: 1. AliTPCcalibCalib - redo reconstruction with current calibration 2. AliTPCcalibTimeGain - TPC time dependent gain calibration 3. AliTPCcalibTime - TPC time dependent drift time calibration */ // function to set TPC OCDB parameters void ConfigOCDB(Int_t crun); Int_t debugLevel=0; Int_t streamLevel=0; //_____________________________________________________________________________ AliAnalysisTask *AddTaskTPCCalib(Int_t runNumber) { // // add calibration task // AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager(); if (!mgr) { ::Error("AddTaskTPCCalib", "No analysis manager to connect to."); return NULL; } // check the input handler if (!mgr->GetInputEventHandler()) { ::Error("AddTaskTPCCalib", "This task requires an input event handler"); return NULL; } // set TPC OCDB parameters ConfigOCDB(runNumber); // setup task TPCCalib TString outputFileName=mgr->GetCommonFileName(); AliTPCAnalysisTaskcalib *task1=new AliTPCAnalysisTaskcalib("CalibObjectsTrain1"); SetupCalibTaskTrain1(task1); mgr->AddTask(task1); AliAnalysisDataContainer *cinput1 = mgr->GetCommonInputContainer(); if (!cinput1) cinput1 = mgr->CreateContainer("cchain",TChain::Class(), AliAnalysisManager::kInputContainer); for (Int_t i=0; iGetJobs()->GetEntries(); i++) { if (task1->GetJobs()->At(i)) { AliAnalysisDataContainer* coutput = mgr->CreateContainer(task1->GetJobs()->At(i)->GetName(), AliTPCcalibBase::Class(), AliAnalysisManager::kOutputContainer, "AliESDfriends_v1.root:TPCCalib"); mgr->ConnectOutput(task1,i,coutput); } } mgr->ConnectInput(task1,0,cinput1); // // setup task TPCAlign AliTPCAnalysisTaskcalib *taskAlign=new AliTPCAnalysisTaskcalib("CalibObjectsTrain1"); SetupCalibTaskTrainAlign(taskAlign); mgr->AddTask(taskAlign); AliAnalysisDataContainer *cinput1 = mgr->GetCommonInputContainer(); if (!cinput1) cinput1 = mgr->CreateContainer("cchain",TChain::Class(), AliAnalysisManager::kInputContainer); for (Int_t i=0; iGetJobs()->GetEntries(); i++) { if (taskAlign->GetJobs()->At(i)) { AliAnalysisDataContainer* coutput = mgr->CreateContainer(taskAlign->GetJobs()->At(i)->GetName(), AliTPCcalibBase::Class(), AliAnalysisManager::kOutputContainer, "AliESDfriends_v1.root:TPCAlign"); mgr->ConnectOutput(taskAlign,i,coutput); } } mgr->ConnectInput(taskAlign,0,cinput1); // // setup task TPCCluster AliTPCAnalysisTaskcalib *taskCluster=new AliTPCAnalysisTaskcalib("CalibObjectsTrain1"); SetupCalibTaskTrainCluster(taskCluster); mgr->AddTask(taskCluster); AliAnalysisDataContainer *cinput1 = mgr->GetCommonInputContainer(); if (!cinput1) cinput1 = mgr->CreateContainer("cchain",TChain::Class(), AliAnalysisManager::kInputContainer); for (Int_t i=0; iGetJobs()->GetEntries(); i++) { if (taskCluster->GetJobs()->At(i)) { AliAnalysisDataContainer* coutput = mgr->CreateContainer(taskCluster->GetJobs()->At(i)->GetName(), AliTPCcalibBase::Class(), AliAnalysisManager::kOutputContainer, "AliESDfriends_v1.root:TPCCluster"); mgr->ConnectOutput(taskCluster,i,coutput); } } mgr->ConnectInput(taskCluster,0,cinput1); // return task1; } //_____________________________________________________________________________ void AddCalibCalib(TObject* task){ // // Responsible: Marian Ivanov // Description: // calibCalib is a prefilter // The current OCDB entries transformation are applied on cluster, tracks are refitted // AliTPCAnalysisTaskcalib* myTask = (AliTPCAnalysisTaskcalib*) task; AliTPCcalibCalib *calibCalib = new AliTPCcalibCalib("calibTPC","calibTPC"); calibCalib->SetDebugLevel(0); calibCalib->SetStreamLevel(0); calibCalib->SetTriggerMask(-1,-1,kFALSE); //accept everything myTask->AddJob(calibCalib); } //_____________________________________________________________________________ void AddCalibTimeGain(TObject* task, Bool_t isCosmic = kFALSE, char * name = "calibTimeGain"){ // // Responsible: Alexander Kalweit // Description: Time Gain calibration // // Set run time ranges (time stamps) AliCDBEntry* entry = AliCDBManager::Instance()->Get("GRP/GRP/Data"); if(!entry) { ::Error("AddCalibTimeGain","Cannot get AliCDBEntry"); return; } const AliGRPObject* grpData = dynamic_cast(entry->GetObject()); if(!grpData) { ::Error("AddCalibTimeGain","Cannot get AliGRPObject"); return; } time_t sTime = grpData->GetTimeStart(); time_t eTime = grpData->GetTimeEnd(); TTimeStamp startRunTime(sTime); TTimeStamp stopRunTime(eTime); UInt_t year; startRunTime.GetDate(kTRUE,0,&year); TTimeStamp startTime(year,1,1,0,0,0); TTimeStamp stopTime(year,12,31,23,59,59); // // setup calibration component // Bool_t useQmax = (grpData->GetBeamType()).Contains("Pb-Pb"); AliTPCAnalysisTaskcalib* myTask = (AliTPCAnalysisTaskcalib*) task; AliTPCcalibTimeGain *calibTimeGain = new AliTPCcalibTimeGain(name,"calibTimeGain", startTime.GetSec(), stopTime.GetSec(), 10*60); calibTimeGain->SetIsCosmic(isCosmic); calibTimeGain->SetUseCookAnalytical(kTRUE); calibTimeGain->SetUseMax(useQmax); calibTimeGain->SetDebugLevel(0); calibTimeGain->SetStreamLevel(0); calibTimeGain->SetTriggerMask(-1,-1,kTRUE); //reject laser calibTimeGain->SetLowerTrunc(0.02); calibTimeGain->SetUpperTrunc(0.6); myTask->AddJob(calibTimeGain); AliTPCcalibGainMult *calibGainMult = new AliTPCcalibGainMult("calibGainMult","calibGainMult"); calibGainMult->SetUseMax(useQmax); calibGainMult->SetDebugLevel(0); calibGainMult->SetStreamLevel(0); calibGainMult->SetTriggerMask(-1,-1,kTRUE); //reject laser calibGainMult->SetLowerTrunc(0.02); calibGainMult->SetUpperTrunc(0.6); myTask->AddJob(calibGainMult); } //_____________________________________________________________________________ void AddCalibTime(TObject* task){ // // Responsible: Dag Larsen // Description: Time V drift calibration // // Set run time ranges (time stamps) AliCDBEntry* entry = AliCDBManager::Instance()->Get("GRP/GRP/Data"); if(!entry) { ::Error("AddCalibTime","Cannot get AliCDBEntry"); return; } const AliGRPObject* grpData = dynamic_cast(entry->GetObject()); if(!grpData) { ::Error("AddCalibTime","Cannot get AliGRPObject"); return; } time_t sTime = grpData->GetTimeStart(); time_t eTime = grpData->GetTimeEnd(); TTimeStamp startRunTime(sTime); TTimeStamp stopRunTime(eTime); UInt_t year; startRunTime.GetDate(kTRUE,0,&year); TTimeStamp startTime(year,1,1,0,0,0); TTimeStamp stopTime(year,12,31,23,59,59); // // setup calibration component // AliTPCAnalysisTaskcalib* myTask = (AliTPCAnalysisTaskcalib*) task; AliTPCcalibTime *calibTime = new AliTPCcalibTime("calibTime","calibTime", startTime.GetSec(), stopTime.GetSec(), 10*60, 2); calibTime->SetDebugLevel(0); calibTime->SetStreamLevel(0); calibTime->SetTriggerMask(-1,-1,kFALSE); //accept everything // max 15000 tracks per event calibTime->SetCutTracks(15000); myTask->AddJob(calibTime); } void AddCalibTracks(TObject* task){ // // Responsible: Marian Ivanov // Description: // Histogram residuals and pulls of the track parameters in bins of track parameters // AliTPCAnalysisTaskcalib* myTask = (AliTPCAnalysisTaskcalib*) task; AliTPCClusterParam * clusterParam = AliTPCcalibDB::Instance()->GetClusterParam(); AliTPCcalibTracksCuts *cuts = new AliTPCcalibTracksCuts(30, 0.4, 5, 0.13, 0.018); // AliTPCcalibTracks *calibTracks = new AliTPCcalibTracks("calibTracks", "Resolution calibration object for tracks", clusterParam, cuts); calibTracks->SetDebugLevel(debugLevel); calibTracks->SetStreamLevel(streamLevel); calibTracks->SetTriggerMask(-1,-1,kTRUE); myTask->AddJob(calibTracks); } void AddCalibAlign(TObject* task){ // // Responsible: Marian Ivanov // Description: // AliTPCAnalysisTaskcalib* myTask = (AliTPCAnalysisTaskcalib*) task; AliTPCcalibAlign *calibAlign = new AliTPCcalibAlign("alignTPC","Alignment of the TPC sectors"); calibAlign->SetDebugLevel(debugLevel); calibAlign->SetStreamLevel(streamLevel); calibAlign->SetTriggerMask(-1,-1,kTRUE); //accept everything myTask->AddJob(calibAlign); } void AddCalibLaser(TObject* task){ // // Responsible: Marian Ivanov // Description: // AliTPCAnalysisTaskcalib* myTask = (AliTPCAnalysisTaskcalib*) task; AliTPCcalibLaser *calibLaser = new AliTPCcalibLaser("laserTPC","laserTPC"); calibLaser->SetDebugLevel(debugLevel); calibLaser->SetStreamLevel(streamLevel); calibLaser->SetTriggerMask(-1,-1,kFALSE); //accept everything myTask->AddJob(calibLaser); } void AddCalibCosmic(TObject* task){ // // Responsible: Marian Ivanov // Description: // Histogram residuals and pulls of the track parameters in bins of track parameters // Dump cosmic tracks to the tree // AliTPCAnalysisTaskcalib* myTask = (AliTPCAnalysisTaskcalib*) task; AliTPCcalibCosmic *calibCosmic = new AliTPCcalibCosmic("cosmicTPC","cosmicTPC"); calibCosmic->SetDebugLevel(debugLevel); calibCosmic->SetStreamLevel(1); calibCosmic->SetTriggerMask(-1,-1,kTRUE); //accept everything myTask->AddJob(calibCosmic); } //_____________________________________________________________________________ void SetupCalibTaskTrain1(TObject* task){ // // Setup tasks for calibration train // AddCalibCalib(task); AddCalibTimeGain(task); AddCalibTime(task); } void SetupCalibTaskTrainAlign(TObject* task){ // // Setup tasks for calibration train // AddCalibAlign(task); AddCalibLaser(task); //AddCalibCosmic(task); } void SetupCalibTaskTrainCluster(TObject* task){ // // Setup tasks for calibration train // AddCalibTracks(task); } //_____________________________________________________________________________ void ConfigOCDB(Int_t run){ // // Configure TPC OCDB // printf("SETUP OCBD for TPC\n"); printf("SETUP OCBD for TPC\n"); printf("SETUP OCBD for TPC Run =%d\n", run); // // AliTPCParam *param= AliTPCcalibDB::Instance()->GetParameters(); param->ReadGeoMatrices(); // AliMagF* magF= TGeoGlobalMagField::Instance()->GetField(); printf("\n\nSET EXB FIELD\t\n\n"); AliTPCcalibDB::Instance()->SetExBField(magF); // // // AliTPCTransform *transform = AliTPCcalibDB::Instance()->GetTransform() ; // //AliTPCRecoParam * tpcRecoParam = AliTPCRecoParam::GetCosmicTestParam(kTRUE); // AliCDBEntry* entry = AliCDBManager::Instance()->Get("TPC/Calib/RecoParam"); if (!entry){ ::Error("AddTaskTPCCalib","TPC reco param not available"); return; } TObjArray * array = (TObjArray*)entry->GetObject(); if (!array){ ::Error("AddTaskTPCCalib","TPC reco param not available"); return; } //get the beam type from OCDB to decide which type of reco param we need - //high or low flux entry = AliCDBManager::Instance()->Get("GRP/GRP/Data"); AliGRPObject* grpData = dynamic_cast(entry->GetObject()); // new GRP entry TString beamType = grpData->GetBeamType(); if (beamType==AliGRPObject::GetInvalidString()) { ::Error("AddTaskTPCCalib","GRP/GRP/Data entry: missing value for the beam type ! Using UNKNOWN"); beamType = "UNKNOWN"; } // 0 - Low Flux (pp), 1- High Flux (Pb-Pb) Int_t fluxType=0; if (beamType.Contains("p-p")) {fluxType=0;} if (beamType.Contains("A-A")) {fluxType=1;} AliTPCRecoParam * tpcRecoParam = (AliTPCRecoParam*)array->At(fluxType); ::Info("AddTaskTPCCalib","Beam type: %s, using fluxType=%i",beamType.Data(),fluxType); tpcRecoParam->Print(); transform->SetCurrentRecoParam(tpcRecoParam); tpcRecoParam->SetUseGainCorrectionTime(0); tpcRecoParam->SetUseRPHICorrection(kFALSE); tpcRecoParam->SetUseTOFCorrection(kFALSE); // tpcRecoParam->SetUseDriftCorrectionTime(0); tpcRecoParam->SetUseDriftCorrectionGY(0); // tpcRecoParam->SetUseRadialCorrection(kFALSE); tpcRecoParam->SetUseQuadrantAlignment(kFALSE); // tpcRecoParam->SetUseSectorAlignment(kFALSE); tpcRecoParam->SetUseFieldCorrection(kFALSE); tpcRecoParam->SetUseExBCorrection(kFALSE); // tpcRecoParam->SetUseMultiplicityCorrectionDedx(kFALSE); tpcRecoParam->SetUseAlignmentTime(kFALSE); tpcRecoParam->SetUseComposedCorrection(kTRUE); // tpcRecoParam->SetCorrectionHVandPTMode(1); AliTPCcalibDB::Instance()->SetRun(run); }