/* // Make a summary information of calibration. // Store results in the summary trees // OCDB configuration gSystem->AddIncludePath("-I$ALICE_ROOT/TPC"); .L $ALICE_ROOT/TPC/AliTPCcalibSummary.cxx+ AliTPCcalibSummary calib; calib.Procces("run.list",run0,run1); */ #include #include #include #include #include #include #include #include #include "AliTPCcalibDB.h" #include "AliTPCcalibDButil.h" #include "AliTPCAltroMapping.h" #include "AliTPCExB.h" #include "AliTPCCalROC.h" #include "AliTPCCalPad.h" #include "AliTPCSensorTempArray.h" #include "AliGRPObject.h" #include "AliTPCTransform.h" #include "TFile.h" #include "TKey.h" #include "TObjArray.h" #include "TObjString.h" #include "TString.h" #include "AliTPCCalPad.h" #include "AliTPCROC.h" #include "AliTPCParam.h" #include "AliTPCCalibPulser.h" #include "AliTPCCalibPedestal.h" #include "AliTPCCalibCE.h" #include "AliTPCExBFirst.h" #include "TTreeStream.h" #include "AliTPCTempMap.h" #include "TVectorD.h" #include "TMatrixD.h" #include "AliTPCCalibRaw.h" #include "AliSplineFit.h" #include "TGraphErrors.h" #include #include // // // AliTPCcalibSummary::AliTPCcalibSummary(): TNamed(), fCalibDB(0), fDButil(0), fPcstream(0) { // // default constructor // OCDB have to be setupe before - not part of class // usualy ConfigOCDB.C macro used // fPcstream = new TTreeSRedirector("dcsTime.root"); fCalibDB = AliTPCcalibDB::Instance(); fDButil= new AliTPCcalibDButil; } AliTPCcalibSummary::~AliTPCcalibSummary(){ // // destructor - close streamer // delete fPcstream; } void AliTPCcalibSummary::Process(const char * runList, Int_t first, Int_t last){ // // runList - listOfRuns to process // first - first run to process // last - last to process // // // make list of runs // ifstream inputFile; inputFile.open("run.list"); Int_t irun=0; TArrayI runArray(100000); Int_t indexes[100000]; Int_t nruns=0; printf("Runs to process:\n"); if (!inputFile.is_open()) { printf("Problem to open file %s\n",runList); } while( inputFile.good() ) { inputFile >> irun; printf("Run \t%d\n",irun); if (irun0 && irun>last) continue; // process only subset of list runArray[nruns]=irun; nruns++; } TMath::Sort(nruns, runArray.fArray, indexes,kFALSE); Int_t startTime = 0; Int_t endTime = 0; for (Int_t run=0; runSetRun(irun); fDButil->UpdateFromCalibDB(); fDButil->SetReferenceRun(irun); fDButil->UpdateRefDataFromOCDB(); // AliDCSSensorArray *arrHV=fCalibDB->GetVoltageSensors(irun); if (!arrHV) continue; for (Int_t isenHV=0; isenHVNumSensors(); ++isenHV){ AliDCSSensor *senHV=arrHV->GetSensorNum(isenHV); if (!senHV) { printf("Not interesting OCDB info\n"); continue; } startTime=senHV->GetStartTime(); endTime =senHV->GetEndTime(); if (startTime>0&&endTime>0) break; } AliDCSSensorArray* goofieArray = fCalibDB->GetGoofieSensors(irun); if (goofieArray) fDButil->FilterGoofie(goofieArray,0.5,4.,6.85,7.05,fPcstream); // don't filter goofie for the moment ProcessRun(irun, startTime,endTime); } } void AliTPCcalibSummary::ProcessRun(Int_t irun, Int_t startTime, Int_t endTime){ // // Process run irun // fCalibDB->SetRun(irun); fDButil->UpdateFromCalibDB(); fDButil->SetReferenceRun(irun); fDButil->UpdateRefDataFromOCDB(); // AliSplineFit *fitVdrift=0x0; Int_t startTimeGRP=0, stopTimeGRP=0; if (fCalibDB->GetGRP(irun)){ startTimeGRP = AliTPCcalibDB::GetGRP(irun)->GetTimeStart(); stopTimeGRP = AliTPCcalibDB::GetGRP(irun)->GetTimeEnd(); } if (startTime==0){ startTime=startTimeGRP; endTime=stopTimeGRP; } AliTPCSensorTempArray * tempArray = fCalibDB->GetTemperatureSensor(irun); AliTPCTempMap * tempMap = new AliTPCTempMap(tempArray); AliDCSSensorArray* goofieArray = fCalibDB->GetGoofieSensors(irun); // Int_t dtime = TMath::Max((endTime-startTime)/20,10*60); // //Goofie statistical data // TVectorD vecEntries, vecMean, vecMedian,vecRMS; fDButil->ProcessGoofie(vecEntries ,vecMedian, vecMean, vecRMS); // //CE data processing - see ProcessCEdata function for description of the results // TVectorD fitResultsA, fitResultsC; Int_t nmaskedCE; Double_t chi2ACE=0,chi2CCE=0; // fDButil->ProcessCEdata("(sector<36)++gx++gy++lx++lx**2",fitResultsA,fitResultsC,nmaskedCE); fDButil->ProcessCEdata("(sector<36)++gx++gy++(lx-134)++(sector<36)*(lx-134)++(ly/lx)^2",fitResultsA,fitResultsC,nmaskedCE,chi2ACE,chi2CCE); TVectorD fitCEResultsA(7), fitCEResultsC(7); Int_t noutCE; Double_t chi2CEA=0,chi2CEC=0; AliTPCCalPad *time0 = fDButil->CreatePadTime0CE(fitCEResultsA, fitCEResultsC, noutCE, chi2CEA, chi2CEC); delete time0; // // TVectorD vecTEntries, vecTMean, vecTRMS, vecTMedian, vecQEntries, vecQMean, vecQRMS, vecQMedian; Float_t driftTimeA, driftTimeC; fDButil->ProcessCEgraphs(vecTEntries, vecTMean, vecTRMS, vecTMedian, vecQEntries, vecQMean, vecQRMS, vecQMedian, driftTimeA, driftTimeC ); // // // //drift velocity using tracks // // fitVdrift=fCalibDB->GetVdriftSplineFit("ALISPLINEFIT_MEAN_VDRIFT_COSMICS_ALL",irun); fitVdrift=fCalibDB->CreateVdriftSplineFit("TGRAPHERRORS_MEAN_VDRIFT_COSMICS_ALL",irun); //noise data Processing - see ProcessNoiseData function for description of the results TVectorD vNoiseMean, vNoiseMeanSenRegions, vNoiseRMS, vNoiseRMSSenRegions; Int_t nonMaskedZero=0, nNaN=0; fDButil->ProcessNoiseData(vNoiseMean, vNoiseMeanSenRegions, vNoiseRMS, vNoiseRMSSenRegions, nonMaskedZero, nNaN); // // comparisons // TVectorF pedestalDeviations; TVectorF noiseDeviations; TVectorF pulserQdeviations; Float_t varQMean; Int_t npadsOutOneTB; Int_t npadsOffAdd; fDButil->ProcessPedestalVariations(pedestalDeviations); fDButil->ProcessNoiseVariations(noiseDeviations); fDButil->ProcessPulserVariations(pulserQdeviations,varQMean,npadsOutOneTB,npadsOffAdd); // //L3 data // Float_t bz=AliTPCcalibDB::GetBz(irun); Char_t l3pol=AliTPCcalibDB::GetL3Polarity(irun); // //calibration Pulser data processing // Int_t nOffChannels=0; TVectorD vTimePulser; nOffChannels=fDButil->GetNPulserOutliers(); fDButil->ProcessPulser(vTimePulser); // //ALTRO data // Int_t nMasked=0; fDButil->ProcessALTROConfig(nMasked); // //Calib RAW data // Int_t nFailL1=-1; if (fCalibDB->GetCalibRaw()) nFailL1=fCalibDB->GetCalibRaw()->GetNFailL1Phase(); // //production information // Int_t nalien=0,nRawAlien=0,nlocal=0,nRawLocal=0; //run type TObjString runType(AliTPCcalibDB::GetRunType(irun).Data()); // // // for (Int_t itime=startTime; itimeGetPressure(tstamp,irun,0); Float_t valuePressure2 = fCalibDB->GetPressure(tstamp,irun,1); Double_t ptrelative0 = AliTPCcalibDB::GetPTRelative((UInt_t)itime,irun,0); Double_t ptrelative1 = AliTPCcalibDB::GetPTRelative((UInt_t)itime,irun,1); //temperature fits TLinearFitter * fitter = 0; TVectorD vecTemp[10]; for (Int_t itype=0; itype<5; itype++) for (Int_t iside=0; iside<2; iside++){ fitter= tempMap->GetLinearFitter(itype,iside,tstamp); if (!fitter) continue; fitter->Eval(); fitter->GetParameters(vecTemp[itype+iside*5]); delete fitter; } // //measured skirt temperatures // TVectorD vecSkirtTempA(18); TVectorD vecSkirtTempC(18); Int_t nsenTemp=tempArray->NumSensors(); for (Int_t isenTemp=0;isenTempGetSensorNum(isenTemp); if (senTemp->GetType()!=3) continue; if (TMath::Sqrt(senTemp->GetX()*senTemp->GetX()+senTemp->GetY()*senTemp->GetY())<100) continue; //only skirt, outer FC vessel Double_t val=senTemp->GetValue(tstamp); if (senTemp->GetSide()==0) vecSkirtTempA[senTemp->GetSector()]=val; else vecSkirtTempC[senTemp->GetSector()]=val; } // //goofie data // TVectorD vecGoofie; if (goofieArray){ vecGoofie.ResizeTo(goofieArray->NumSensors()); for (Int_t isensor=0; isensorNumSensors();isensor++){ AliDCSSensor *gsensor = goofieArray->GetSensor(isensor); if (gsensor){ vecGoofie[isensor] = gsensor->GetValue(tstamp); } } } else { vecGoofie.ResizeTo(19); } // TVectorD voltagesIROC(36); TVectorD voltagesOROC(36); for(Int_t j=1; j<36; j++) voltagesIROC[j-1] = fCalibDB->GetChamberHighVoltage(irun, j,itime); for(Int_t j=36; j<72; j++) voltagesOROC[j-36] = fCalibDB->GetChamberHighVoltage(irun, j,itime); Double_t voltIROC = TMath::Median(36, voltagesIROC.GetMatrixArray()); Double_t voltOROC = TMath::Median(36, voltagesOROC.GetMatrixArray()); // Float_t coverIA=AliTPCcalibDB::GetCoverVoltage(irun,0,itime); Float_t coverIC=AliTPCcalibDB::GetCoverVoltage(irun,18,itime); Float_t coverOA=AliTPCcalibDB::GetCoverVoltage(irun,36,itime); Float_t coverOC=AliTPCcalibDB::GetCoverVoltage(irun,54,itime); Float_t skirtA=AliTPCcalibDB::GetSkirtVoltage(irun,0,itime); Float_t skirtC=AliTPCcalibDB::GetSkirtVoltage(irun,18,itime); Float_t ggOffA=AliTPCcalibDB::GetGGoffsetVoltage(irun,0,itime); Float_t ggOffC=AliTPCcalibDB::GetGGoffsetVoltage(irun,18,itime); //drift velocity Float_t dvCorr=-5; if (fitVdrift) dvCorr=fitVdrift->Eval(itime); //tempMap->GetLinearFitter(0,0,itime); (*fPcstream)<<"dcs"<< "run="<GetTimeVdriftSplineRun(run); TGraphErrors *laserA[3]={0,0,0}; TGraphErrors *laserC[3]={0,0,0}; TGraphErrors *cosmicAll=0; static Double_t vlaserA[3]={0,0,0}; static Double_t vlaserC[3]={0,0,0}; static Double_t vcosmicAll=0; static Double_t vdrift1=0; vdrift1=fCalibDB->GetVDriftCorrectionTime(timeStamp,run,0,1); if (array){ laserA[0]=(TGraphErrors*)array->FindObject("GRAPH_MEAN_DELAY_LASER_ALL_A"); laserA[1]=(TGraphErrors*)array->FindObject("GRAPH_MEAN_DRIFT_LASER_ALL_A"); laserA[2]=(TGraphErrors*)array->FindObject("GRAPH_MEAN_GLOBALYGRADIENT_LASER_ALL_A"); laserC[0]=(TGraphErrors*)array->FindObject("GRAPH_MEAN_DELAY_LASER_ALL_C"); laserC[1]=(TGraphErrors*)array->FindObject("GRAPH_MEAN_DRIFT_LASER_ALL_C"); laserC[2]=(TGraphErrors*)array->FindObject("GRAPH_MEAN_GLOBALYGRADIENT_LASER_ALL_C"); cosmicAll =(TGraphErrors*)array->FindObject("TGRAPHERRORS_MEAN_VDRIFT_COSMICS_ALL"); } if (laserA[0]) vlaserA[0]= AliTPCcalibDButil::EvalGraphConst(laserA[0],timeStamp); if (laserA[1]) vlaserA[1]= AliTPCcalibDButil::EvalGraphConst(laserA[1],timeStamp); if (laserA[2]) vlaserA[2]= AliTPCcalibDButil::EvalGraphConst(laserA[2],timeStamp); if (laserC[0]) vlaserC[0]= AliTPCcalibDButil::EvalGraphConst(laserC[0],timeStamp); if (laserC[1]) vlaserC[1]= AliTPCcalibDButil::EvalGraphConst(laserC[1],timeStamp); if (laserC[2]) vlaserC[2]= AliTPCcalibDButil::EvalGraphConst(laserC[2],timeStamp); if (cosmicAll) vcosmicAll= AliTPCcalibDButil::EvalGraphConst(cosmicAll,timeStamp); (*fPcstream)<<"dcs"<< "vlaserA0="<GetObject(); } } static TVectorD krMean(74); static TVectorD krErr(74); static TVectorD krDist(74); TGraphErrors *gr=0; Double_t deltaT=0,gry=0; if (krArray){ for (Int_t isec=0; isec<72; isec++){ krMean[isec]=0; krDist[isec]=0; krErr[isec]=0; gr=(TGraphErrors*)krArray->At(isec); if (gr) { krMean[isec]=gr->Eval(timeStamp); AliTPCcalibDButil::GetNearest(gr, timeStamp,deltaT,gry); krDist[isec]=deltaT; } if (72+isecGetEntries()) { gr=(TGraphErrors*)krArray->At(72+isec); if (gr) krErr[isec]=gr->Eval(timeStamp); } } krMean[72]= TMath::Median(36,krMean.GetMatrixArray()); krMean[73]= TMath::Median(36,&(krMean.GetMatrixArray()[36])); krErr[72]= TMath::Median(36,krErr.GetMatrixArray()); krErr[73]= TMath::Median(36,&(krErr.GetMatrixArray()[36])); } (*fPcstream)<<"dcs"<< "krMean.="<<&krMean<< "krErr.="<<&krErr<< "krDist.="<<&krDist; } void AliTPCcalibSummary::ProcessCTP(Int_t irun, Int_t timeStamp){ // // // static TClonesArray *pcarray = new TClonesArray("AliCTPInputTimeParams",1); static AliCTPTimeParams *ctpParams =0; ctpParams = fCalibDB->GetCTPTimeParams(); // const TObjArray *arr = ctpParams->GetInputTimeParams(); pcarray->ExpandCreateFast(TMath::Max(arr->GetEntries(),1)); for (Int_t i=0; iGetEntries(); i++){ new ((*pcarray)[i]) AliCTPInputTimeParams(*((AliCTPInputTimeParams*)arr->At(i))); } (*fPcstream)<<"ctp"<< "run="<FindObject("TGRAPHERRORS_MEAN_GAIN_COSMIC_ALL"); if (graphMIP) gainMIP = AliTPCcalibDButil::EvalGraphConst(graphMIP,timeStamp); if (graphCosmic) gainCosmic = AliTPCcalibDButil::EvalGraphConst(graphCosmic,timeStamp); } // time dependence of gain (*fPcstream)<<"dcs"<< "gainMIP="<GetTimeVdriftSplineRun(run); TGraphErrors *gr=0; for (Int_t idet=0; idet<12; idet++){ for (Int_t ipar=0; ipar<9; ipar++){ TString grName=grnames[idet]; grName+="_TPC_"; grName+=grpar[ipar]; if (array){ gr = (TGraphErrors*)array->FindObject(grName.Data()); } values[9*idet+ipar]=0; errs[9*idet+ipar]=0; if (gr) values[9*idet+ipar]=gr->Eval(timeStamp); (*fPcstream)<<"dcs"<< Form("%s=",grName.Data())<