void TrendQAtrainSDD(TString period,
TString recoPass,
- TString qaTrain1,
- TString qaTrain2,
+ TString qaTrain="QA",
+ Bool_t useOnlyMerged=kFALSE,
+ TString runListFile="",
Int_t firstRun=0,
Int_t lastRun=999999999,
TString fileName="QAresults.root"){
else if(period.Contains("LHC10")) year=2010;
else if(period.Contains("LHC11")) year=2011;
- TString outFilNam=Form("TrendingSDD_%s_%s_%s.root",period.Data(),recoPass.Data(),qaTrain1.Data());
+ Bool_t useExternalList=kFALSE;
+ Int_t runList[10000];
+ Int_t totRuns=0;
+ if(runListFile.Length()>0){
+ if(!gSystem->Exec(Form("ls -l %s > /dev/null 2>&1",runListFile.Data()))){
+ printf("Use Run List from %s --- runs to be analyzed:\n",runListFile.Data());
+ useExternalList=kTRUE;
+ FILE* rfil=fopen(runListFile.Data(),"r");
+ Int_t nrun;
+ while(!feof(rfil)){
+ fscanf(rfil,"%d, ",&nrun);
+ if(feof(rfil)) break;
+ runList[totRuns++]=nrun;
+ }
+ for(Int_t ir=0; ir<totRuns; ir++){
+ printf("%d\n",runList[ir]);
+ }
+ }else{
+ printf("File with run list does not exist\n");
+ }
+ }
+
+ TString outFilNam=Form("TrendingSDD_%s_%s_%s.root",period.Data(),recoPass.Data(),qaTrain.Data());
- const Int_t nVariables=27;
- TNtuple* ntsdd=new TNtuple("ntsdd","SDD trending","nrun:fracTrackWithClu1:errfracTrackWithClu1:fracTrackWithClu2:errfracTrackWithClu2:fracTrackWithClu3:errfracTrackWithClu3:fracTrackWithClu4:errfracTrackWithClu4:fracTrackWithClu5:errfracTrackWithClu5:fracTrackWithClu6:errfracTrackWithClu6:meanTrPts3:errmeanTrPts3:meanTrPts4:errmeanTrPts4:minDrTime:errminDrTime:meanDrTime:errmeanDrTime:fracExtra:errfracExtra:meandEdxTB0:errmeandEdxTB0:meandEdxTB5:errmeandEdxTB5");
+
+ const Int_t nVariables=35;
+ TNtuple* ntsdd=new TNtuple("ntsdd","SDD trending","nrun:fracTrackWithClu1:errfracTrackWithClu1:fracTrackWithClu2:errfracTrackWithClu2:fracTrackWithClu3:errfracTrackWithClu3:fracTrackWithClu4:errfracTrackWithClu4:fracTrackWithClu5:errfracTrackWithClu5:fracTrackWithClu6:errfracTrackWithClu6:meanTrPts3:errmeanTrPts3:meanTrPts4:errmeanTrPts4:minDrTime:errminDrTime:meanDrTime:errmeanDrTime:fracExtra:errfracExtra:meandEdxLay3:errmeandEdxLay3:meandEdxLay4:errmeandEdxLay4:meandEdxTB0:errmeandEdxTB0:meandEdxTB5:errmeandEdxTB5:nMod95:nMod80:nMod60:nModEmpty");
Float_t xnt[nVariables];
TBits* readRun=new TBits(999999);
readRun->ResetAllBits();
- if(!gSystem->Exec(Form("ls -l %s > /dev/null 2>&1",outFilNam.Data()))){
- TFile* oldfil=new TFile(outFilNam.Data());
- TNtuple* ntmp=(TNtuple*)oldfil->Get("ntsdd");
- Bool_t isOK=kFALSE;
- if(ntmp){
- if(ntmp->GetNvar()==ntsdd->GetNvar()){
- isOK=kTRUE;
- TObjArray* arr1=(TObjArray*)ntsdd->GetListOfBranches();
- TObjArray* arr2=(TObjArray*)ntmp->GetListOfBranches();
- for(Int_t iV=0; iV<ntmp->GetNvar(); iV++){
- TString vnam1=arr1->At(iV)->GetName();
- TString vnam2=arr2->At(iV)->GetName();
- if(vnam1!=vnam2) isOK=kFALSE;
- ntmp->SetBranchAddress(vnam2.Data(),&xnt[iV]);
- }
- if(isOK){
- for(Int_t nE=0; nE<ntmp->GetEntries(); nE++){
- ntmp->GetEvent(nE);
- Int_t theRun=(Int_t)(xnt[0]+0.0001);
- readRun->SetBitNumber(theRun);
- ntsdd->Fill(xnt);
+ if(!useExternalList){
+ if(!gSystem->Exec(Form("ls -l %s > /dev/null 2>&1",outFilNam.Data()))){
+ TFile* oldfil=new TFile(outFilNam.Data());
+ TNtuple* ntmp=(TNtuple*)oldfil->Get("ntsdd");
+ Bool_t isOK=kFALSE;
+ if(ntmp){
+ if(ntmp->GetNvar()==ntsdd->GetNvar()){
+ isOK=kTRUE;
+ TObjArray* arr1=(TObjArray*)ntsdd->GetListOfBranches();
+ TObjArray* arr2=(TObjArray*)ntmp->GetListOfBranches();
+ for(Int_t iV=0; iV<ntmp->GetNvar(); iV++){
+ TString vnam1=arr1->At(iV)->GetName();
+ TString vnam2=arr2->At(iV)->GetName();
+ if(vnam1!=vnam2) isOK=kFALSE;
+ ntmp->SetBranchAddress(vnam2.Data(),&xnt[iV]);
+ }
+ if(isOK){
+ for(Int_t nE=0; nE<ntmp->GetEntries(); nE++){
+ ntmp->GetEvent(nE);
+ Int_t theRun=(Int_t)(xnt[0]+0.0001);
+ readRun->SetBitNumber(theRun);
+ ntsdd->Fill(xnt);
+ }
}
}
}
+ if(!isOK){
+ printf("Ntuple in local file not OK -> will be recreated\n");
+ }
+ oldfil->Close();
+ delete oldfil;
}
- if(!isOK){
- printf("Ntuple in local file not OK -> will be recreated\n");
- }
- oldfil->Close();
- delete oldfil;
}
if(!gGrid||!gGrid->IsConnected()) {
return;
}
- TString path=Form("/alice/data/%d/%s/",year,period.Data(),recoPass.Data());
+ TString path=Form("/alice/data/%d/%s/",year,period.Data());
TGridResult *gr = gGrid->Query(path,fileName);
Int_t nFiles = gr->GetEntries();
printf("================>%d files found\n", nFiles);
if (nFiles < 1) return;
-
+ Int_t nAnalyzedFiles=0;
if (nFiles > 1){
for (Int_t iFil = 0; iFil <nFiles ; iFil++) {
TString fileNameLong=Form("%s",gr->GetKey(iFil,"turl"));
if(!fileNameLong.Contains(recoPass.Data())) continue;
- if(!fileNameLong.Contains(qaTrain1.Data()) &&
- !fileNameLong.Contains(qaTrain2.Data())) continue;
- if(!fileNameLong.Contains(Form("%s/%s",qaTrain1.Data(),fileName.Data())) &&
- !fileNameLong.Contains(Form("%s/%s",qaTrain2.Data(),fileName.Data()))) continue;
+ if(!fileNameLong.Contains(qaTrain.Data())) continue;
TString runNumber=fileNameLong;
runNumber.ReplaceAll(Form("alien:///alice/data/%d/%s/",year,period.Data()),"");
runNumber.Remove(9,runNumber.Sizeof());
Int_t iRun=atoi(runNumber.Data());
+ if(useExternalList){
+ Bool_t keepRun=kFALSE;
+ for(Int_t ir=0; ir<totRuns; ir++){
+ if(iRun==runList[ir]){
+ keepRun=kTRUE;
+ break;
+ }
+ }
+ if(!keepRun) continue;
+ }
if(readRun->TestBitNumber(iRun)){
printf("Run %d aleady in local ntuple -> skipping it\n",iRun);
continue;
}
if(iRun<firstRun) continue;
- if(iRun>lastRun) continue;
+ if(iRun>lastRun) continue;
+
+ if(useOnlyMerged){
+ TString isMerged=fileNameLong;
+ isMerged.Remove(isMerged.Sizeof()-16);
+ isMerged.Remove(0,isMerged.Sizeof()-5);
+ if(!isMerged.Contains("QA")) continue;
+ }
+ printf("Open File %s Run %d\n",fileNameLong.Data(),iRun);
+
+
TFile* f=TFile::Open(fileNameLong.Data());
printf("Run %d coutputRP TList MISSING -> Exit\n",iRun);
continue;
}
+
+ nAnalyzedFiles++;
+ if(!useOnlyMerged) readRun->SetBitNumber(iRun);
+
TH1F* hcllay=(TH1F*)l->FindObject("hCluInLay");
Float_t fracT[6]={0.,0.,0.,0.,0.,0.};
Float_t efracT[6]={0.,0.,0.,0.,0.,0.};
if(nTrigEvents>0){
nEvents=nTrigEvents;
}
-
+ if(nTotEvents==0) continue;
Int_t nModGood3=0;
Int_t nModGood4=0;
Int_t nModBadAn=0;
}
}
+ TH1F* hapmod=(TH1F*)l->FindObject("hAllPmod");
+ TH1F* hgpmod=(TH1F*)l->FindObject("hGoodPmod");
+ // TH1F* hmpmod=(TH1F*)l->FindObject("hMissPmod");
+ TH1F* hbrmod=(TH1F*)l->FindObject("hBadRegmod");
+ TH1F* hskmod=(TH1F*)l->FindObject("hSkippedmod");
+ TH1F* hoamod=(TH1F*)l->FindObject("hOutAccmod");
+ TH1F* hnrmod=(TH1F*)l->FindObject("hNoRefitmod");
+ Int_t nBelow95=0;
+ Int_t nBelow80=0;
+ Int_t nBelow60=0;
+ Int_t nZeroP=0;
+ for(Int_t imod=0; imod<260;imod++){
+ Float_t numer=hgpmod->GetBinContent(imod+1)+hbrmod->GetBinContent(imod+1)+hoamod->GetBinContent(imod+1)+hnrmod->GetBinContent(imod+1)+hskmod->GetBinContent(imod+1);
+ Float_t denom=hapmod->GetBinContent(imod+1);
+ if(denom>0){
+ Float_t eff=numer/denom;
+ if(eff<0.95) nBelow95++;
+ if(eff<0.80) nBelow80++;
+ if(eff<0.60) nBelow60++;
+ }
+ if(hmodT->GetBinContent(imod+1)<1.){
+ nZeroP++;
+ }
+ }
+
TH1F* htimT=(TH1F*)l->FindObject("hDrTimTPAll");
TH1F* htimTe=(TH1F*)l->FindObject("hDrTimTPExtra");
}
}
}
+ TH2F* hdedxmod=(TH2F*)l->FindObject("hdEdxVsMod");
+ TH1D* hdedxLay3=hdedxmod->ProjectionY("hdedxLay3",1,84);
+ TH1D* hdedxLay4=hdedxmod->ProjectionY("hdedxLay4",85,260);
+
TH1F* hSigTim0=(TH1F*)l->FindObject("hSigTimeInt0");
TH1F* hSigTim5=(TH1F*)l->FindObject("hSigTimeInt5");
xnt[index++]=htimT->GetMeanError();
xnt[index++]=fracExtra;
xnt[index++]=errFracExtra;
+ xnt[index++]=hdedxLay3->GetMean();
+ xnt[index++]=hdedxLay3->GetMeanError();
+ xnt[index++]=hdedxLay4->GetMean();
+ xnt[index++]=hdedxLay4->GetMeanError();
xnt[index++]=hSigTim0->GetMean();
xnt[index++]=hSigTim0->GetMeanError();
xnt[index++]=hSigTim5->GetMean();
xnt[index++]=hSigTim5->GetMeanError();
-
+ xnt[index++]=(Float_t)nBelow95;
+ xnt[index++]=(Float_t)nBelow80;
+ xnt[index++]=(Float_t)nBelow60;
+ xnt[index++]=(Float_t)nZeroP;
ntsdd->Fill(xnt);
}
}
-
- TFile* outfil=new TFile(outFilNam.Data(),"recreate");
- outfil->cd();
- ntsdd->Write();
- outfil->Close();
-
- MakePlots(outFilNam);
-
+ printf("Number of analyzed files = %d\n",nAnalyzedFiles);
+
+ if(nAnalyzedFiles>0){
+ TFile* outfil=new TFile(outFilNam.Data(),"recreate");
+ outfil->cd();
+ ntsdd->Write();
+ outfil->Close();
+
+ MakePlots(outFilNam);
+ }
}
void MakePlots(TString ntupleFileName){
Float_t fracTrackWithClu3,fracTrackWithClu4,errfracTrackWithClu3,errfracTrackWithClu4;
Float_t fracTrackWithClu5,fracTrackWithClu6,errfracTrackWithClu5,errfracTrackWithClu6;
Float_t fracExtra,errfracExtra;
+ Float_t meandEdxLay3,errmeandEdxLay3,meandEdxLay4,errmeandEdxLay4;
Float_t meandEdxTB0,errmeandEdxTB0,meandEdxTB5,errmeandEdxTB5;
-
+ Float_t nMod95,nMod80,nMod60,nModEmpty;
+
ntsdd->SetBranchAddress("nrun",&nrun);
ntsdd->SetBranchAddress("fracTrackWithClu1",&fracTrackWithClu1);
ntsdd->SetBranchAddress("errfracTrackWithClu1",&errfracTrackWithClu1);
ntsdd->SetBranchAddress("errfracTrackWithClu5",&errfracTrackWithClu5);
ntsdd->SetBranchAddress("fracTrackWithClu6",&fracTrackWithClu6);
ntsdd->SetBranchAddress("errfracTrackWithClu6",&errfracTrackWithClu6);
+ ntsdd->SetBranchAddress("nMod95",&nMod95);
+ ntsdd->SetBranchAddress("nMod80",&nMod80);
+ ntsdd->SetBranchAddress("nMod60",&nMod60);
+ ntsdd->SetBranchAddress("nModEmpty",&nModEmpty);
ntsdd->SetBranchAddress("meanTrPts3",&meanTrPts3);
ntsdd->SetBranchAddress("errmeanTrPts3",&errmeanTrPts3);
ntsdd->SetBranchAddress("errmeandEdxTB0",&errmeandEdxTB0);
ntsdd->SetBranchAddress("meandEdxTB5",&meandEdxTB5);
ntsdd->SetBranchAddress("errmeandEdxTB5",&errmeandEdxTB5);
+ ntsdd->SetBranchAddress("meandEdxLay3",&meandEdxLay3);
+ ntsdd->SetBranchAddress("errmeandEdxLay3",&errmeandEdxLay3);
+ ntsdd->SetBranchAddress("meandEdxLay4",&meandEdxLay4);
+ ntsdd->SetBranchAddress("errmeandEdxLay4",&errmeandEdxLay4);
TH1F* histotrp3=new TH1F("histotrp3","",(Int_t)ntsdd->GetEntries(),0.,ntsdd->GetEntries());
TH1F* histotrp4=new TH1F("histotrp4","",(Int_t)ntsdd->GetEntries(),0.,ntsdd->GetEntries());
TH1F* histofracExtra=new TH1F("histofracExtra","",(Int_t)ntsdd->GetEntries(),0.,ntsdd->GetEntries());
TH1F* histodEdxTB0=new TH1F("histodEdxTB0","",(Int_t)ntsdd->GetEntries(),0.,ntsdd->GetEntries());
TH1F* histodEdxTB5=new TH1F("histodEdxTB5","",(Int_t)ntsdd->GetEntries(),0.,ntsdd->GetEntries());
+ TH1F* histodEdxLay3=new TH1F("histodEdxLay3","",(Int_t)ntsdd->GetEntries(),0.,ntsdd->GetEntries());
+ TH1F* histodEdxLay4=new TH1F("histodEdxLay4","",(Int_t)ntsdd->GetEntries(),0.,ntsdd->GetEntries());
TH1F* histoTrackClu1=new TH1F("histoTrackClu1","",(Int_t)ntsdd->GetEntries(),0.,ntsdd->GetEntries());
TH1F* histoTrackClu2=new TH1F("histoTrackClu2","",(Int_t)ntsdd->GetEntries(),0.,ntsdd->GetEntries());
TH1F* histoTrackClu3=new TH1F("histoTrackClu3","",(Int_t)ntsdd->GetEntries(),0.,ntsdd->GetEntries());
TH1F* histoTrackClu5=new TH1F("histoTrackClu5","",(Int_t)ntsdd->GetEntries(),0.,ntsdd->GetEntries());
TH1F* histoTrackClu6=new TH1F("histoTrackClu6","",(Int_t)ntsdd->GetEntries(),0.,ntsdd->GetEntries());
+ TH1F* histoNmodEffBelow95=new TH1F("histoNmodEffBelow95","",(Int_t)ntsdd->GetEntries(),0.,ntsdd->GetEntries());
+ TH1F* histoNmodEffBelow80=new TH1F("histoNmodEffBelow80","",(Int_t)ntsdd->GetEntries(),0.,ntsdd->GetEntries());
+ TH1F* histoNmodEffBelow60=new TH1F("histoNmodEffBelow60","",(Int_t)ntsdd->GetEntries(),0.,ntsdd->GetEntries());
+ TH1F* histoNmodEmpty=new TH1F("histoNmodEmpty","",(Int_t)ntsdd->GetEntries(),0.,ntsdd->GetEntries());
for(Int_t i=0; i<ntsdd->GetEntries();i++){
ntsdd->GetEvent(i);
histodEdxTB5->SetBinContent(i+1,meandEdxTB5);
histodEdxTB5->SetBinError(i+1,errmeandEdxTB5);
histodEdxTB5->GetXaxis()->SetBinLabel(i+1,Form("%d",(Int_t)nrun));
+ histodEdxLay3->SetBinContent(i+1,meandEdxLay3);
+ histodEdxLay3->SetBinError(i+1,errmeandEdxLay3);
+ histodEdxLay3->GetXaxis()->SetBinLabel(i+1,Form("%d",(Int_t)nrun));
+ histodEdxLay4->SetBinContent(i+1,meandEdxLay4);
+ histodEdxLay4->SetBinError(i+1,errmeandEdxLay4);
+ histodEdxLay4->GetXaxis()->SetBinLabel(i+1,Form("%d",(Int_t)nrun));
+
+ histoNmodEffBelow95->SetBinContent(i+1,nMod95);
+ histoNmodEffBelow95->SetBinError(i+1,0.0000001);
+ histoNmodEffBelow95->GetXaxis()->SetBinLabel(i+1,Form("%d",(Int_t)nrun));
+ histoNmodEffBelow80->SetBinContent(i+1,nMod80);
+ histoNmodEffBelow80->SetBinError(i+1,0.0000001);
+ histoNmodEffBelow80->GetXaxis()->SetBinLabel(i+1,Form("%d",(Int_t)nrun));
+ histoNmodEffBelow60->SetBinContent(i+1,nMod60);
+ histoNmodEffBelow60->SetBinError(i+1,0.0000001);
+ histoNmodEffBelow60->GetXaxis()->SetBinLabel(i+1,Form("%d",(Int_t)nrun));
+ histoNmodEmpty->SetBinContent(i+1,nModEmpty);
+ histoNmodEmpty->SetBinError(i+1,0.000001);
+ histoNmodEmpty->GetXaxis()->SetBinLabel(i+1,Form("%d",(Int_t)nrun));
}
gStyle->SetOptStat(0);
leg2->Draw();
c4->Update();
+ TCanvas* c4b=new TCanvas("c4b","Charge per Layer");
+ histodEdxLay3->SetLineColor(1);
+ histodEdxLay3->SetMarkerStyle(20);
+ histodEdxLay3->Draw();
+ histodEdxLay3->SetMinimum(0.);
+ histodEdxLay4->SetLineColor(4);
+ histodEdxLay4->SetMarkerColor(4);
+ histodEdxLay4->SetMarkerStyle(23);
+ histodEdxLay4->Draw("same");
+ histodEdxLay3->GetYaxis()->SetTitle("<dE/dx> (keV/300 #mum)");
+ TLegend* leg2b=new TLegend(0.6,0.15,0.88,0.35);
+ ent=leg2b->AddEntry(histodEdxLay3,"Layer 3","PL");
+ ent=leg2b->AddEntry(histodEdxLay4,"Layer 4","PL");
+ ent->SetTextColor(histodEdxLay4->GetMarkerColor());
+ leg2b->SetFillStyle(0);
+ leg2b->Draw();
+ c4b->Update();
+
TCanvas* c5=new TCanvas("c5","TrackWithSDD");
histoTrackClu3->Draw();
histoTrackClu3->SetLineColor(1);
leg3->Draw();
c5->Update();
+ TCanvas* c6=new TCanvas("c6","Modules with low eff",800,1000);
+ c6->Divide(1,4);
+ c6->cd(1);
+ histoNmodEffBelow95->SetMinimum(histoNmodEffBelow95->GetMinimum()-2);
+ histoNmodEffBelow95->SetMaximum(histoNmodEffBelow95->GetMaximum()+2);
+ histoNmodEffBelow95->Draw("E");
+ histoNmodEffBelow95->GetYaxis()->SetTitle("N. modules with eff<0.95");
+ histoNmodEffBelow95->GetYaxis()->SetTitleSize(0.075);
+ histoNmodEffBelow95->GetYaxis()->SetTitleOffset(0.5);
+ c6->cd(2);
+ histoNmodEffBelow80->SetMinimum(histoNmodEffBelow80->GetMinimum()-2);
+ histoNmodEffBelow80->SetMaximum(histoNmodEffBelow80->GetMaximum()+2);
+ histoNmodEffBelow80->Draw("E");
+ histoNmodEffBelow80->GetYaxis()->SetTitle("N. modules with eff<0.80");
+ histoNmodEffBelow80->GetYaxis()->SetTitleSize(0.075);
+ histoNmodEffBelow80->GetYaxis()->SetTitleOffset(0.5);
+ c6->cd(3);
+ histoNmodEffBelow60->SetMinimum(histoNmodEffBelow60->GetMinimum()-2);
+ histoNmodEffBelow60->SetMaximum(histoNmodEffBelow60->GetMaximum()+2);
+ histoNmodEffBelow60->Draw("E");
+ histoNmodEffBelow60->GetYaxis()->SetTitle("N. modules with eff<0.60");
+ histoNmodEffBelow60->GetYaxis()->SetTitleSize(0.075);
+ histoNmodEffBelow60->GetYaxis()->SetTitleOffset(0.5);
+ c6->cd(4);
+ histoNmodEmpty->SetMinimum(histoNmodEmpty->GetMinimum()-2);
+ histoNmodEmpty->SetMaximum(histoNmodEmpty->GetMaximum()+2);
+ histoNmodEmpty->Draw("E");
+ histoNmodEmpty->GetYaxis()->SetTitle("N. modules with no points");
+ histoNmodEmpty->GetYaxis()->SetTitleSize(0.075);
+ histoNmodEmpty->GetYaxis()->SetTitleOffset(0.5);
+
+
}
Double_t LangausFun(Double_t *x, Double_t *par) {