1 #if !defined(__CINT__) || defined(__MAKECINT__)
6 #include <TGraphErrors.h>
11 #include <TGridResult.h>
19 #include <TLegendEntry.h>
20 #include "AliITSgeomTGeo.h"
23 Double_t LangausFun(Double_t *x, Double_t *par);
24 void MakePlots(TString ntupleFileName);
27 void TrendQAtrainSDD(TString period,
30 Bool_t useOnlyMerged=kFALSE,
31 TString runListFile="",
33 Int_t lastRun=999999999,
34 TString fileName="QAresults.root"){
36 gStyle->SetOptStat(0);
39 TGrid::Connect("alien:");
41 if(period.Contains("LHC09")) year=2009;
42 else if(period.Contains("LHC10")) year=2010;
43 else if(period.Contains("LHC11")) year=2011;
45 Bool_t useExternalList=kFALSE;
48 if(runListFile.Length()>0){
49 if(!gSystem->Exec(Form("ls -l %s > /dev/null 2>&1",runListFile.Data()))){
50 printf("Use Run List from %s --- runs to be analyzed:\n",runListFile.Data());
51 useExternalList=kTRUE;
52 FILE* rfil=fopen(runListFile.Data(),"r");
55 fscanf(rfil,"%d, ",&nrun);
57 runList[totRuns++]=nrun;
59 for(Int_t ir=0; ir<totRuns; ir++){
60 printf("%d\n",runList[ir]);
63 printf("File with run list does not exist\n");
67 TString outFilNam=Form("TrendingSDD_%s_%s_%s.root",period.Data(),recoPass.Data(),qaTrain.Data());
71 const Int_t nVariables=35;
72 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");
73 Float_t xnt[nVariables];
75 TBits* readRun=new TBits(999999);
76 readRun->ResetAllBits();
78 if(!gSystem->Exec(Form("ls -l %s > /dev/null 2>&1",outFilNam.Data()))){
79 TFile* oldfil=new TFile(outFilNam.Data());
80 TNtuple* ntmp=(TNtuple*)oldfil->Get("ntsdd");
83 if(ntmp->GetNvar()==ntsdd->GetNvar()){
85 TObjArray* arr1=(TObjArray*)ntsdd->GetListOfBranches();
86 TObjArray* arr2=(TObjArray*)ntmp->GetListOfBranches();
87 for(Int_t iV=0; iV<ntmp->GetNvar(); iV++){
88 TString vnam1=arr1->At(iV)->GetName();
89 TString vnam2=arr2->At(iV)->GetName();
90 if(vnam1!=vnam2) isOK=kFALSE;
91 ntmp->SetBranchAddress(vnam2.Data(),&xnt[iV]);
94 for(Int_t nE=0; nE<ntmp->GetEntries(); nE++){
96 Int_t theRun=(Int_t)(xnt[0]+0.0001);
97 readRun->SetBitNumber(theRun);
104 printf("Ntuple in local file not OK -> will be recreated\n");
111 if(!gGrid||!gGrid->IsConnected()) {
112 printf("gGrid not found! exit macro\n");
116 TString path=Form("/alice/data/%d/%s/",year,period.Data());
117 TGridResult *gr = gGrid->Query(path,fileName);
118 Int_t nFiles = gr->GetEntries();
119 printf("================>%d files found\n", nFiles);
120 if (nFiles < 1) return;
122 Int_t nAnalyzedFiles=0;
124 for (Int_t iFil = 0; iFil <nFiles ; iFil++) {
125 TString fileNameLong=Form("%s",gr->GetKey(iFil,"turl"));
126 if(!fileNameLong.Contains(recoPass.Data())) continue;
127 if(!fileNameLong.Contains(qaTrain.Data())) continue;
128 TString runNumber=fileNameLong;
129 runNumber.ReplaceAll(Form("alien:///alice/data/%d/%s/",year,period.Data()),"");
130 runNumber.Remove(9,runNumber.Sizeof());
132 Int_t iRun=atoi(runNumber.Data());
134 Bool_t keepRun=kFALSE;
135 for(Int_t ir=0; ir<totRuns; ir++){
136 if(iRun==runList[ir]){
141 if(!keepRun) continue;
143 if(readRun->TestBitNumber(iRun)){
144 printf("Run %d aleady in local ntuple -> skipping it\n",iRun);
147 if(iRun<firstRun) continue;
148 if(iRun>lastRun) continue;
151 TString isMerged=fileNameLong;
152 isMerged.Remove(isMerged.Sizeof()-16);
153 isMerged.Remove(0,isMerged.Sizeof()-5);
154 if(!isMerged.Contains("QA")) continue;
156 printf("Open File %s Run %d\n",fileNameLong.Data(),iRun);
160 TFile* f=TFile::Open(fileNameLong.Data());
162 TDirectoryFile* df=(TDirectoryFile*)f->Get("SDD_Performance");
164 printf("Run %d SDD_Performance MISSING -> Exit\n",iRun);
167 TList* l=(TList*)df->Get("coutputRP");
169 printf("Run %d coutputRP TList MISSING -> Exit\n",iRun);
174 if(!useOnlyMerged) readRun->SetBitNumber(iRun);
176 TH1F* hcllay=(TH1F*)l->FindObject("hCluInLay");
177 Float_t fracT[6]={0.,0.,0.,0.,0.,0.};
178 Float_t efracT[6]={0.,0.,0.,0.,0.,0.};
179 if(hcllay->GetBinContent(1)>0){
180 for(Int_t iLay=0; iLay<6; iLay++){
181 fracT[iLay]=hcllay->GetBinContent(iLay+2)/hcllay->GetBinContent(1);
182 efracT[iLay]=TMath::Sqrt(fracT[iLay]*(1-fracT[iLay])/hcllay->GetBinContent(1));
185 TH1F* hmodT=(TH1F*)l->FindObject("hTPMod");
186 TH1F* hgamod=(TH1F*)l->FindObject("hGAMod");
188 for(Int_t iMod=0; iMod<260;iMod++){
189 Int_t gda=(Int_t)hgamod->GetBinContent(iMod+1);
190 if(gda>bestMod) bestMod=gda;
194 nChunks=(Int_t)(bestMod/512.+0.5);
196 hgamod->Scale(1./nChunks);
198 TH1F* hev=(TH1F*)l->FindObject("hNEvents");
199 Int_t nTotEvents=hev->GetBinContent(2);
200 Int_t nTrigEvents=hev->GetBinContent(3);
201 Int_t nEvents=nTotEvents;
202 printf("Run %d Number of Events = %d Triggered=%d\n",iRun,nTotEvents,nTrigEvents);
206 if(nTotEvents==0) continue;
214 for(Int_t iMod=0; iMod<260; iMod++){
215 Float_t tps=hmodT->GetBinContent(iMod+1);
216 Float_t ga=hgamod->GetBinContent(iMod+1);
217 if(ga<500) nModBadAn++;
221 tpsN=tps/ga/(Float_t)nEvents;
222 etpsN=TMath::Sqrt(tps)/ga/(Float_t)nEvents;
225 sumEtp3+=(etpsN*etpsN);
230 sumEtp4+=(etpsN*etpsN);
236 TH1F* hapmod=(TH1F*)l->FindObject("hAllPmod");
237 TH1F* hgpmod=(TH1F*)l->FindObject("hGoodPmod");
238 // TH1F* hmpmod=(TH1F*)l->FindObject("hMissPmod");
239 TH1F* hbrmod=(TH1F*)l->FindObject("hBadRegmod");
240 TH1F* hskmod=(TH1F*)l->FindObject("hSkippedmod");
241 TH1F* hoamod=(TH1F*)l->FindObject("hOutAccmod");
242 TH1F* hnrmod=(TH1F*)l->FindObject("hNoRefitmod");
247 for(Int_t imod=0; imod<260;imod++){
248 Float_t numer=hgpmod->GetBinContent(imod+1)+hbrmod->GetBinContent(imod+1)+hoamod->GetBinContent(imod+1)+hnrmod->GetBinContent(imod+1)+hskmod->GetBinContent(imod+1);
249 Float_t denom=hapmod->GetBinContent(imod+1);
251 Float_t eff=numer/denom;
252 if(eff<0.95) nBelow95++;
253 if(eff<0.80) nBelow80++;
254 if(eff<0.60) nBelow60++;
256 if(hmodT->GetBinContent(imod+1)<1.){
261 TH1F* htimT=(TH1F*)l->FindObject("hDrTimTPAll");
262 TH1F* htimTe=(TH1F*)l->FindObject("hDrTimTPExtra");
264 Double_t fracExtra=0.;
265 Double_t errFracExtra=0.;
266 if(htimT->GetEntries()>0){
267 fracExtra=htimTe->GetEntries()/htimT->GetEntries();
268 errFracExtra=TMath::Sqrt(htimTe->GetEntries())/htimT->GetEntries();
270 Double_t averPoints=0.;
272 for(Int_t iBin=1; iBin<=htimT->GetNbinsX(); iBin++){
273 Float_t tim=htimT->GetBinCenter(iBin);
274 if(tim>2000. && tim<4000.){
275 averPoints+=htimT->GetBinContent(iBin);
279 Double_t minTime=-999.;
280 Double_t errMinTime=0.;
283 for(Int_t iBin=1; iBin<=htimT->GetNbinsX(); iBin++){
284 if(htimT->GetBinContent(iBin)>0.5*averPoints){
285 minTime=htimT->GetBinCenter(iBin);
286 errMinTime=0.5*htimT->GetBinWidth(iBin);
291 TH2F* hdedxmod=(TH2F*)l->FindObject("hdEdxVsMod");
292 TH1D* hdedxLay3=hdedxmod->ProjectionY("hdedxLay3",1,84);
293 TH1D* hdedxLay4=hdedxmod->ProjectionY("hdedxLay4",85,260);
295 TH1F* hSigTim0=(TH1F*)l->FindObject("hSigTimeInt0");
296 TH1F* hSigTim5=(TH1F*)l->FindObject("hSigTimeInt5");
299 xnt[index++]=(Float_t)iRun;
300 xnt[index++]=fracT[0];
301 xnt[index++]=efracT[0];
302 xnt[index++]=fracT[1];
303 xnt[index++]=efracT[1];
304 xnt[index++]=fracT[2];
305 xnt[index++]=efracT[2];
306 xnt[index++]=fracT[3];
307 xnt[index++]=efracT[3];
308 xnt[index++]=fracT[4];
309 xnt[index++]=efracT[4];
310 xnt[index++]=fracT[5];
311 xnt[index++]=efracT[5];
312 xnt[index++]=sumtp3/nModGood3;
313 xnt[index++]=TMath::Sqrt(sumEtp3)/nModGood3;
314 xnt[index++]=sumtp4/nModGood4;
315 xnt[index++]=TMath::Sqrt(sumEtp4)/nModGood4;
316 xnt[index++]=minTime;
317 xnt[index++]=errMinTime;
318 xnt[index++]=htimT->GetMean();
319 xnt[index++]=htimT->GetMeanError();
320 xnt[index++]=fracExtra;
321 xnt[index++]=errFracExtra;
322 xnt[index++]=hdedxLay3->GetMean();
323 xnt[index++]=hdedxLay3->GetMeanError();
324 xnt[index++]=hdedxLay4->GetMean();
325 xnt[index++]=hdedxLay4->GetMeanError();
326 xnt[index++]=hSigTim0->GetMean();
327 xnt[index++]=hSigTim0->GetMeanError();
328 xnt[index++]=hSigTim5->GetMean();
329 xnt[index++]=hSigTim5->GetMeanError();
330 xnt[index++]=(Float_t)nBelow95;
331 xnt[index++]=(Float_t)nBelow80;
332 xnt[index++]=(Float_t)nBelow60;
333 xnt[index++]=(Float_t)nZeroP;
337 printf("Number of analyzed files = %d\n",nAnalyzedFiles);
339 if(nAnalyzedFiles>0){
340 TFile* outfil=new TFile(outFilNam.Data(),"recreate");
345 MakePlots(outFilNam);
349 void MakePlots(TString ntupleFileName){
350 TFile* fil=new TFile(ntupleFileName.Data(),"read");
352 printf("File with ntuple does not exist\n");
355 TNtuple* ntsdd=(TNtuple*)fil->Get("ntsdd");
358 Float_t meanTrPts3,errmeanTrPts3,meanTrPts4,errmeanTrPts4;
359 Float_t minDrTime,errminDrTime,meanDrTime,errmeanDrTime;
360 Float_t fracTrackWithClu1,fracTrackWithClu2,errfracTrackWithClu1,errfracTrackWithClu2;
361 Float_t fracTrackWithClu3,fracTrackWithClu4,errfracTrackWithClu3,errfracTrackWithClu4;
362 Float_t fracTrackWithClu5,fracTrackWithClu6,errfracTrackWithClu5,errfracTrackWithClu6;
363 Float_t fracExtra,errfracExtra;
364 Float_t meandEdxLay3,errmeandEdxLay3,meandEdxLay4,errmeandEdxLay4;
365 Float_t meandEdxTB0,errmeandEdxTB0,meandEdxTB5,errmeandEdxTB5;
366 Float_t nMod95,nMod80,nMod60,nModEmpty;
368 ntsdd->SetBranchAddress("nrun",&nrun);
369 ntsdd->SetBranchAddress("fracTrackWithClu1",&fracTrackWithClu1);
370 ntsdd->SetBranchAddress("errfracTrackWithClu1",&errfracTrackWithClu1);
371 ntsdd->SetBranchAddress("fracTrackWithClu2",&fracTrackWithClu2);
372 ntsdd->SetBranchAddress("errfracTrackWithClu2",&errfracTrackWithClu2);
373 ntsdd->SetBranchAddress("fracTrackWithClu3",&fracTrackWithClu3);
374 ntsdd->SetBranchAddress("errfracTrackWithClu3",&errfracTrackWithClu3);
375 ntsdd->SetBranchAddress("fracTrackWithClu4",&fracTrackWithClu4);
376 ntsdd->SetBranchAddress("errfracTrackWithClu4",&errfracTrackWithClu4);
377 ntsdd->SetBranchAddress("fracTrackWithClu5",&fracTrackWithClu5);
378 ntsdd->SetBranchAddress("errfracTrackWithClu5",&errfracTrackWithClu5);
379 ntsdd->SetBranchAddress("fracTrackWithClu6",&fracTrackWithClu6);
380 ntsdd->SetBranchAddress("errfracTrackWithClu6",&errfracTrackWithClu6);
381 ntsdd->SetBranchAddress("nMod95",&nMod95);
382 ntsdd->SetBranchAddress("nMod80",&nMod80);
383 ntsdd->SetBranchAddress("nMod60",&nMod60);
384 ntsdd->SetBranchAddress("nModEmpty",&nModEmpty);
386 ntsdd->SetBranchAddress("meanTrPts3",&meanTrPts3);
387 ntsdd->SetBranchAddress("errmeanTrPts3",&errmeanTrPts3);
388 ntsdd->SetBranchAddress("meanTrPts4",&meanTrPts4);
389 ntsdd->SetBranchAddress("errmeanTrPts4",&errmeanTrPts4);
390 ntsdd->SetBranchAddress("minDrTime",&minDrTime);
391 ntsdd->SetBranchAddress("errminDrTime",&errminDrTime);
392 ntsdd->SetBranchAddress("meanDrTime",&meanDrTime);
393 ntsdd->SetBranchAddress("errmeanDrTime",&errmeanDrTime);
394 ntsdd->SetBranchAddress("fracExtra",&fracExtra);
395 ntsdd->SetBranchAddress("errfracExtra",&errfracExtra);
396 ntsdd->SetBranchAddress("meandEdxTB0",&meandEdxTB0);
397 ntsdd->SetBranchAddress("errmeandEdxTB0",&errmeandEdxTB0);
398 ntsdd->SetBranchAddress("meandEdxTB5",&meandEdxTB5);
399 ntsdd->SetBranchAddress("errmeandEdxTB5",&errmeandEdxTB5);
400 ntsdd->SetBranchAddress("meandEdxLay3",&meandEdxLay3);
401 ntsdd->SetBranchAddress("errmeandEdxLay3",&errmeandEdxLay3);
402 ntsdd->SetBranchAddress("meandEdxLay4",&meandEdxLay4);
403 ntsdd->SetBranchAddress("errmeandEdxLay4",&errmeandEdxLay4);
405 TH1F* histotrp3=new TH1F("histotrp3","",(Int_t)ntsdd->GetEntries(),0.,ntsdd->GetEntries());
406 TH1F* histotrp4=new TH1F("histotrp4","",(Int_t)ntsdd->GetEntries(),0.,ntsdd->GetEntries());
407 TH1F* histominTime=new TH1F("histominTime","",(Int_t)ntsdd->GetEntries(),0.,ntsdd->GetEntries());
408 TH1F* histomeanTime=new TH1F("histomeanTime","",(Int_t)ntsdd->GetEntries(),0.,ntsdd->GetEntries());
409 TH1F* histofracExtra=new TH1F("histofracExtra","",(Int_t)ntsdd->GetEntries(),0.,ntsdd->GetEntries());
410 TH1F* histodEdxTB0=new TH1F("histodEdxTB0","",(Int_t)ntsdd->GetEntries(),0.,ntsdd->GetEntries());
411 TH1F* histodEdxTB5=new TH1F("histodEdxTB5","",(Int_t)ntsdd->GetEntries(),0.,ntsdd->GetEntries());
412 TH1F* histodEdxLay3=new TH1F("histodEdxLay3","",(Int_t)ntsdd->GetEntries(),0.,ntsdd->GetEntries());
413 TH1F* histodEdxLay4=new TH1F("histodEdxLay4","",(Int_t)ntsdd->GetEntries(),0.,ntsdd->GetEntries());
414 TH1F* histoTrackClu1=new TH1F("histoTrackClu1","",(Int_t)ntsdd->GetEntries(),0.,ntsdd->GetEntries());
415 TH1F* histoTrackClu2=new TH1F("histoTrackClu2","",(Int_t)ntsdd->GetEntries(),0.,ntsdd->GetEntries());
416 TH1F* histoTrackClu3=new TH1F("histoTrackClu3","",(Int_t)ntsdd->GetEntries(),0.,ntsdd->GetEntries());
417 TH1F* histoTrackClu4=new TH1F("histoTrackClu4","",(Int_t)ntsdd->GetEntries(),0.,ntsdd->GetEntries());
418 TH1F* histoTrackClu5=new TH1F("histoTrackClu5","",(Int_t)ntsdd->GetEntries(),0.,ntsdd->GetEntries());
419 TH1F* histoTrackClu6=new TH1F("histoTrackClu6","",(Int_t)ntsdd->GetEntries(),0.,ntsdd->GetEntries());
421 TH1F* histoNmodEffBelow95=new TH1F("histoNmodEffBelow95","",(Int_t)ntsdd->GetEntries(),0.,ntsdd->GetEntries());
422 TH1F* histoNmodEffBelow80=new TH1F("histoNmodEffBelow80","",(Int_t)ntsdd->GetEntries(),0.,ntsdd->GetEntries());
423 TH1F* histoNmodEffBelow60=new TH1F("histoNmodEffBelow60","",(Int_t)ntsdd->GetEntries(),0.,ntsdd->GetEntries());
424 TH1F* histoNmodEmpty=new TH1F("histoNmodEmpty","",(Int_t)ntsdd->GetEntries(),0.,ntsdd->GetEntries());
426 for(Int_t i=0; i<ntsdd->GetEntries();i++){
428 histoTrackClu1->SetBinContent(i+1,fracTrackWithClu1);
429 histoTrackClu1->SetBinError(i+1,errfracTrackWithClu1);
430 histoTrackClu1->GetXaxis()->SetBinLabel(i+1,Form("%d",(Int_t)nrun));
431 histoTrackClu2->SetBinContent(i+1,fracTrackWithClu2);
432 histoTrackClu2->SetBinError(i+1,errfracTrackWithClu2);
433 histoTrackClu2->GetXaxis()->SetBinLabel(i+1,Form("%d",(Int_t)nrun));
434 histoTrackClu3->SetBinContent(i+1,fracTrackWithClu3);
435 histoTrackClu3->SetBinError(i+1,errfracTrackWithClu3);
436 histoTrackClu3->GetXaxis()->SetBinLabel(i+1,Form("%d",(Int_t)nrun));
437 histoTrackClu4->SetBinContent(i+1,fracTrackWithClu4);
438 histoTrackClu4->SetBinError(i+1,errfracTrackWithClu4);
439 histoTrackClu4->GetXaxis()->SetBinLabel(i+1,Form("%d",(Int_t)nrun));
440 histoTrackClu5->SetBinContent(i+1,fracTrackWithClu5);
441 histoTrackClu5->SetBinError(i+1,errfracTrackWithClu5);
442 histoTrackClu5->GetXaxis()->SetBinLabel(i+1,Form("%d",(Int_t)nrun));
443 histoTrackClu6->SetBinContent(i+1,fracTrackWithClu6);
444 histoTrackClu6->SetBinError(i+1,errfracTrackWithClu6);
445 histoTrackClu6->GetXaxis()->SetBinLabel(i+1,Form("%d",(Int_t)nrun));
446 histominTime->SetBinContent(i+1,minDrTime);
447 histominTime->SetBinError(i+1,errminDrTime);
448 histominTime->GetXaxis()->SetBinLabel(i+1,Form("%d",(Int_t)nrun));
449 histomeanTime->SetBinContent(i+1,meanDrTime);
450 histomeanTime->SetBinError(i+1,errmeanDrTime);
451 histomeanTime->GetXaxis()->SetBinLabel(i+1,Form("%d",(Int_t)nrun));
452 histotrp3->SetBinContent(i+1,meanTrPts3);
453 histotrp3->SetBinError(i+1,errmeanTrPts3);
454 histotrp3->GetXaxis()->SetBinLabel(i+1,Form("%d",(Int_t)nrun));
455 histotrp4->SetBinContent(i+1,meanTrPts4);
456 histotrp4->SetBinError(i+1,errmeanTrPts3);
457 histotrp4->GetXaxis()->SetBinLabel(i+1,Form("%d",(Int_t)nrun));
458 histofracExtra->SetBinContent(i+1,fracExtra);
459 histofracExtra->SetBinError(i+1,errfracExtra);
460 histofracExtra->GetXaxis()->SetBinLabel(i+1,Form("%d",(Int_t)nrun));
461 histodEdxTB0->SetBinContent(i+1,meandEdxTB0);
462 histodEdxTB0->SetBinError(i+1,errmeandEdxTB0);
463 histodEdxTB0->GetXaxis()->SetBinLabel(i+1,Form("%d",(Int_t)nrun));
464 histodEdxTB5->SetBinContent(i+1,meandEdxTB5);
465 histodEdxTB5->SetBinError(i+1,errmeandEdxTB5);
466 histodEdxTB5->GetXaxis()->SetBinLabel(i+1,Form("%d",(Int_t)nrun));
467 histodEdxLay3->SetBinContent(i+1,meandEdxLay3);
468 histodEdxLay3->SetBinError(i+1,errmeandEdxLay3);
469 histodEdxLay3->GetXaxis()->SetBinLabel(i+1,Form("%d",(Int_t)nrun));
470 histodEdxLay4->SetBinContent(i+1,meandEdxLay4);
471 histodEdxLay4->SetBinError(i+1,errmeandEdxLay4);
472 histodEdxLay4->GetXaxis()->SetBinLabel(i+1,Form("%d",(Int_t)nrun));
474 histoNmodEffBelow95->SetBinContent(i+1,nMod95);
475 histoNmodEffBelow95->SetBinError(i+1,0.0000001);
476 histoNmodEffBelow95->GetXaxis()->SetBinLabel(i+1,Form("%d",(Int_t)nrun));
477 histoNmodEffBelow80->SetBinContent(i+1,nMod80);
478 histoNmodEffBelow80->SetBinError(i+1,0.0000001);
479 histoNmodEffBelow80->GetXaxis()->SetBinLabel(i+1,Form("%d",(Int_t)nrun));
480 histoNmodEffBelow60->SetBinContent(i+1,nMod60);
481 histoNmodEffBelow60->SetBinError(i+1,0.0000001);
482 histoNmodEffBelow60->GetXaxis()->SetBinLabel(i+1,Form("%d",(Int_t)nrun));
483 histoNmodEmpty->SetBinContent(i+1,nModEmpty);
484 histoNmodEmpty->SetBinError(i+1,0.000001);
485 histoNmodEmpty->GetXaxis()->SetBinLabel(i+1,Form("%d",(Int_t)nrun));
488 gStyle->SetOptStat(0);
491 TCanvas* c1=new TCanvas("c1","Occupancy");
492 histotrp3->SetLineColor(1);
493 histotrp3->SetMarkerStyle(20);
495 histotrp3->SetMinimum(0.);
496 histotrp4->SetLineColor(2);
497 histotrp4->SetMarkerColor(2);
498 histotrp4->SetMarkerStyle(22);
499 histotrp4->Draw("same");
500 histotrp3->GetYaxis()->SetTitle("Track Point Occupancy");
501 TLegend* leg=new TLegend(0.7,0.15,0.88,0.35);
502 TLegendEntry* ent=leg->AddEntry(histotrp3,"Layer3","PL");
503 ent=leg->AddEntry(histotrp4,"Layer4","PL");
504 ent->SetTextColor(histotrp4->GetMarkerColor());
505 leg->SetFillStyle(0);
509 TCanvas* c2=new TCanvas("c2","DriftTime",600,900);
512 histominTime->Draw();
513 histominTime->SetMinimum(250);
514 histominTime->SetMaximum(1000);
515 histominTime->GetYaxis()->SetTitle("Minimum Drift Time (ns)");
517 histomeanTime->Draw();
518 histomeanTime->GetYaxis()->SetTitle("Average Drift Time (ns)");
521 TCanvas* c3=new TCanvas("c3","ExtraClusters");
522 histofracExtra->Draw();
523 histofracExtra->GetYaxis()->SetTitle("Fraction of Extra Clusters");
527 TCanvas* c4=new TCanvas("c4","Charge");
528 histodEdxTB0->SetLineColor(1);
529 histodEdxTB0->SetMarkerStyle(20);
530 histodEdxTB0->Draw();
531 histodEdxTB0->SetMinimum(0.);
532 histodEdxTB5->SetLineColor(4);
533 histodEdxTB5->SetMarkerColor(4);
534 histodEdxTB5->SetMarkerStyle(23);
535 histodEdxTB5->Draw("same");
536 histodEdxTB0->GetYaxis()->SetTitle("<dE/dx> (keV/300 #mum)");
537 TLegend* leg2=new TLegend(0.6,0.15,0.88,0.35);
538 ent=leg2->AddEntry(histodEdxTB0,"Small drift time","PL");
539 ent=leg2->AddEntry(histodEdxTB5,"Large drift time","PL");
540 ent->SetTextColor(histodEdxTB5->GetMarkerColor());
541 leg2->SetFillStyle(0);
545 TCanvas* c4b=new TCanvas("c4b","Charge per Layer");
546 histodEdxLay3->SetLineColor(1);
547 histodEdxLay3->SetMarkerStyle(20);
548 histodEdxLay3->Draw();
549 histodEdxLay3->SetMinimum(0.);
550 histodEdxLay4->SetLineColor(4);
551 histodEdxLay4->SetMarkerColor(4);
552 histodEdxLay4->SetMarkerStyle(23);
553 histodEdxLay4->Draw("same");
554 histodEdxLay3->GetYaxis()->SetTitle("<dE/dx> (keV/300 #mum)");
555 TLegend* leg2b=new TLegend(0.6,0.15,0.88,0.35);
556 ent=leg2b->AddEntry(histodEdxLay3,"Layer 3","PL");
557 ent=leg2b->AddEntry(histodEdxLay4,"Layer 4","PL");
558 ent->SetTextColor(histodEdxLay4->GetMarkerColor());
559 leg2b->SetFillStyle(0);
563 TCanvas* c5=new TCanvas("c5","TrackWithSDD");
564 histoTrackClu3->Draw();
565 histoTrackClu3->SetLineColor(1);
566 histoTrackClu3->SetMarkerStyle(20);
567 histoTrackClu3->Draw();
568 histoTrackClu3->SetMinimum(0.);
569 histoTrackClu4->SetLineColor(2);
570 histoTrackClu4->SetMarkerColor(2);
571 histoTrackClu4->SetMarkerStyle(22);
572 histoTrackClu4->Draw("same");
573 histoTrackClu1->SetLineColor(kGray+1);
574 histoTrackClu1->SetMarkerColor(kGray+1);
575 histoTrackClu1->SetMarkerStyle(24);
576 histoTrackClu1->Draw("same");
577 histoTrackClu2->SetLineColor(kGray+2);
578 histoTrackClu2->SetMarkerColor(kGray+2);
579 histoTrackClu2->SetMarkerStyle(26);
580 histoTrackClu2->Draw("same");
581 histoTrackClu5->SetLineColor(4);
582 histoTrackClu5->SetMarkerColor(4);
583 histoTrackClu5->SetMarkerStyle(29);
584 histoTrackClu5->Draw("same");
585 histoTrackClu6->SetLineColor(kBlue+1);
586 histoTrackClu6->SetMarkerColor(kBlue+1);
587 histoTrackClu6->SetMarkerStyle(30);
588 histoTrackClu6->Draw("same");
589 histoTrackClu3->GetYaxis()->SetTitle("Fraction of Tracks with Point in SDD Layers");
590 TLegend* leg3=new TLegend(0.7,0.15,0.88,0.35);
591 ent=leg3->AddEntry(histoTrackClu1,"Layer1","PL");
592 ent->SetTextColor(histoTrackClu1->GetMarkerColor());
593 ent=leg3->AddEntry(histoTrackClu2,"Layer2","PL");
594 ent->SetTextColor(histoTrackClu2->GetMarkerColor());
595 ent=leg3->AddEntry(histoTrackClu3,"Layer3","PL");
596 ent->SetTextColor(histoTrackClu3->GetMarkerColor());
597 ent=leg3->AddEntry(histoTrackClu4,"Layer4","PL");
598 ent->SetTextColor(histoTrackClu4->GetMarkerColor());
599 ent=leg3->AddEntry(histoTrackClu5,"Layer5","PL");
600 ent->SetTextColor(histoTrackClu5->GetMarkerColor());
601 ent=leg3->AddEntry(histoTrackClu6,"Layer6","PL");
602 ent->SetTextColor(histoTrackClu6->GetMarkerColor());
604 leg3->SetFillStyle(0);
608 TCanvas* c6=new TCanvas("c6","Modules with low eff",800,1000);
611 histoNmodEffBelow95->SetMinimum(histoNmodEffBelow95->GetMinimum()-2);
612 histoNmodEffBelow95->SetMaximum(histoNmodEffBelow95->GetMaximum()+2);
613 histoNmodEffBelow95->Draw("E");
614 histoNmodEffBelow95->GetYaxis()->SetTitle("N. modules with eff<0.95");
615 histoNmodEffBelow95->GetYaxis()->SetTitleSize(0.075);
616 histoNmodEffBelow95->GetYaxis()->SetTitleOffset(0.5);
618 histoNmodEffBelow80->SetMinimum(histoNmodEffBelow80->GetMinimum()-2);
619 histoNmodEffBelow80->SetMaximum(histoNmodEffBelow80->GetMaximum()+2);
620 histoNmodEffBelow80->Draw("E");
621 histoNmodEffBelow80->GetYaxis()->SetTitle("N. modules with eff<0.80");
622 histoNmodEffBelow80->GetYaxis()->SetTitleSize(0.075);
623 histoNmodEffBelow80->GetYaxis()->SetTitleOffset(0.5);
625 histoNmodEffBelow60->SetMinimum(histoNmodEffBelow60->GetMinimum()-2);
626 histoNmodEffBelow60->SetMaximum(histoNmodEffBelow60->GetMaximum()+2);
627 histoNmodEffBelow60->Draw("E");
628 histoNmodEffBelow60->GetYaxis()->SetTitle("N. modules with eff<0.60");
629 histoNmodEffBelow60->GetYaxis()->SetTitleSize(0.075);
630 histoNmodEffBelow60->GetYaxis()->SetTitleOffset(0.5);
632 histoNmodEmpty->SetMinimum(histoNmodEmpty->GetMinimum()-2);
633 histoNmodEmpty->SetMaximum(histoNmodEmpty->GetMaximum()+2);
634 histoNmodEmpty->Draw("E");
635 histoNmodEmpty->GetYaxis()->SetTitle("N. modules with no points");
636 histoNmodEmpty->GetYaxis()->SetTitleSize(0.075);
637 histoNmodEmpty->GetYaxis()->SetTitleOffset(0.5);
642 Double_t LangausFun(Double_t *x, Double_t *par) {
645 //par[0]=Width (scale) parameter of Landau density
646 //par[1]=Most Probable (MP, location) parameter of Landau density
647 //par[2]=Total area (integral -inf to inf, normalization constant)
648 //par[3]=Width (sigma) of convoluted Gaussian function
650 //In the Landau distribution (represented by the CERNLIB approximation),
651 //the maximum is located at x=-0.22278298 with the location parameter=0.
652 //This shift is corrected within this function, so that the actual
653 //maximum is identical to the MP parameter.
656 Double_t invsq2pi = 0.3989422804014; // (2 pi)^(-1/2)
657 Double_t mpshift = -0.22278298; // Landau maximum location
660 Double_t np = 100.0; // number of convolution steps
661 Double_t sc = 5.0; // convolution extends to +-sc Gaussian sigmas
673 // MP shift correction
674 mpc = par[1] - mpshift * par[0];
676 // Range of convolution integral
677 xlow = x[0] - sc * par[3];
678 xupp = x[0] + sc * par[3];
680 step = (xupp-xlow) / np;
682 // Convolution integral of Landau and Gaussian by sum
683 for(i=1.0; i<=np/2; i++) {
684 xx = xlow + (i-.5) * step;
685 fland = TMath::Landau(xx,mpc,par[0]) / par[0];
686 sum += fland * TMath::Gaus(x[0],xx,par[3]);
688 xx = xupp - (i-.5) * step;
689 fland = TMath::Landau(xx,mpc,par[0]) / par[0];
690 sum += fland * TMath::Gaus(x[0],xx,par[3]);
693 return (par[2] * step * sum * invsq2pi / par[3]);