upgraded calibration
[u/mrichter/AliRoot.git] / HMPID / Hshuttle.C
CommitLineData
abb5f786 1void Hshuttle(Int_t runTime=1500)
43480497 2{
3// this macro is to simulate the functionality of SHUTTLE.
abb5f786 4// Here the list of DCS aliases is created and packed in TMap of structure "alias name" - TObjArray of AliDCSValue; AliDCSValue is a pair value-time stamp
5// currently simulated: freon temperature 2 per radiator (inlet,outlet)
6// methane pressure 1 per chamber
7 gSystem->Load("libTestShuttle.so");
8
9 AliTestShuttle::SetMainCDB(TString("local://$HOME"));
10
43480497 11 TMap *pDcsMap = new TMap; pDcsMap->SetOwner(1); //DCS archive map
abb5f786 12
a0e5c1b9 13 SimPed();
abb5f786 14 SimMap(pDcsMap,runTime);
15 TestShuttle(pDcsMap);
16 TCanvas *c=new TCanvas("cc","ff",600,600);
17 DrawInput(c,pDcsMap);
18 DrawOutput();
19}//Hshuttle()
20//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
a0e5c1b9 21void SimPed()
22{
23 ofstream out;
24 for(Int_t ddl=0;ddl<=13;ddl++){
25 out.open(Form("ped_%02i.txt",ddl));
26 out << 3 <<endl;
27 for(Int_t row=1;row<=24;row++)
28 for(Int_t dil=1;dil<=10;dil++)
29 for(Int_t adr=0;adr<=47;adr++){
30 Float_t mean = 150+200*gRandom->Rndm();
31 Float_t sigma = 1+0.2*gRandom->Rndm();
32 Int_t inhard=((Int_t(mean))<<9)+Int_t(mean+3*sigma);
33 out << Form("%2i %2i %2i %2i %5.2f %5.2f %x\n",ddl,row,dil,adr,mean,sigma,inhard);
34 }
35
36 Printf("file ped %02i created",ddl);
37 out.close();
38 }
39}
40//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
abb5f786 41void SimMap(TMap *pDcsMap,Int_t runTime=1500)
42{
43 Int_t stepTime=100; //time interval between mesuraments
44 Int_t startTime=0;
45
43480497 46
47 for(Int_t iCh=0;iCh<7;iCh++){//chambers loop
abb5f786 48 TObjArray *pP=new TObjArray; pP->SetOwner(1);
49 TObjArray *pHV=new TObjArray; pHV->SetOwner(1);
50 for(Int_t time=0;time<runTime;time+=stepTime) pP->Add(new AliDCSValue((Float_t)1005.0 ,time)); //sample CH4 pressure [mBar]
51 pHV->Add(new AliDCSValue((Float_t)2010.0,time)); //sample chamber HV [V]
a0e5c1b9 52 pDcsMap->Add(new TObjString(Form(AliHMPIDPreprocessor::GetP(),iCh,iCh,iCh)),pP);
53 pDcsMap->Add(new TObjString(Form(AliHMPIDPreprocessor::GetHV(),iCh,iCh,iCh)),pHV);
abb5f786 54
43480497 55 for(Int_t iRad=0;iRad<3;iRad++){//radiators loop
abb5f786 56 TObjArray *pT1=new TObjArray; pT1->SetOwner(1);
57 TObjArray *pT2=new TObjArray; pT2->SetOwner(1);
58 for (Int_t time=0;time<runTime;time+=stepTime) pT1->Add(new AliDCSValue(13,time)); //sample inlet temperature Nmean=1.292 @ 13 degrees
59 for (Int_t time=0;time<runTime;time+=stepTime) pT2->Add(new AliDCSValue(13,time)); //sample outlet temperature
a0e5c1b9 60 pDcsMap->Add(new TObjString(Form(AliHMPIDPreprocessor::GetT1(),iCh,iCh,iRad)) ,pT1);
61 pDcsMap->Add(new TObjString(Form(AliHMPIDPreprocessor::GetT2(),iCh,iCh,iRad)),pT2);
abb5f786 62 }//radiators loop
43480497 63 }//chambers loop
abb5f786 64}//SimMap()
65//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
66void TestShuttle(TMap *pDcsMap)
67{
68 AliTestShuttle* pShuttle = new AliTestShuttle(0,0,1000000);
43480497 69 pShuttle->SetDCSInput(pDcsMap); //DCS map
a0e5c1b9 70 for(Int_t ddl=0;ddl<=13;ddl++) pShuttle->AddInputFile(AliTestShuttle::kDAQ,"HMP","pedestals",Form("DDL%i",ddl),Form("./ped_%02i.txt",ddl));
71 AliPreprocessor* pp = new AliHMPIDPreprocessor(pShuttle); //actual preprocessor is created here
43480497 72 pShuttle->Process(); //run SHUTTLE simulator
73 delete pp;
abb5f786 74}
75//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
76void DrawInput(TCanvas *c,TMap *pDcsMap)
77{
78 c->Divide(3,3);
43480497 79
abb5f786 80 AliDCSValue *pVal; Int_t cnt=0;
81
82 for(Int_t iCh=0;iCh<7;iCh++){//chambers loop
83 if(iCh==6) c->cd(1); if(iCh==5) c->cd(2);
84 if(iCh==4) c->cd(4); if(iCh==3) c->cd(5); if(iCh==2) c->cd(6);
85 if(iCh==1) c->cd(8); if(iCh==0) c->cd(9);
86
a0e5c1b9 87 TObjArray *pHV=(TObjArray*)pDcsMap->GetValue(Form(AliHMPIDPreprocessor::GetHV(),iCh,iCh,iCh,iCh)); //HV
88 TObjArray *pP =(TObjArray*)pDcsMap->GetValue(Form(AliHMPIDPreprocessor::GetP(),iCh,iCh,iCh)); //P
abb5f786 89 TGraph *pGr=new TGraph; pGr->SetMarkerStyle(5);
43480497 90
abb5f786 91 TIter nextp(pP); cnt=0; while((pVal=(AliDCSValue*)nextp())){ pGr->SetPoint(cnt++,pVal->GetTimeStamp(),pVal->GetFloat());}//P
43480497 92
abb5f786 93
94 pGr->Draw("AP");
43480497 95 }
abb5f786 96}
97//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
98void DrawOutput()
99{
100 AliCDBManager::Instance()->SetDefaultStorage("local://$HOME");
a0e5c1b9 101 AliCDBEntry *pQthreEnt =AliCDBManager::Instance()->Get("HMPID/Calib/Qthre",0);
102 AliCDBEntry *pNmeanEnt =AliCDBManager::Instance()->Get("HMPID/Calib/Nmean",0);
103 AliCDBEntry *pSigCutEnt=AliCDBManager::Instance()->Get("HMPID/Calib/SigCut",0);
104 AliCDBEntry *pDaqSigEnt=AliCDBManager::Instance()->Get("HMPID/Calib/DaqSig",0);
abb5f786 105
a0e5c1b9 106 if(!pQthreEnt || ! pNmeanEnt || !pSigCutEnt || !pDaqSigEnt) return;
abb5f786 107
a0e5c1b9 108 TObjArray *pNmean =(TObjArray*)pNmeanEnt ->GetObject();
109 TObjArray *pQthre =(TObjArray*)pQthreEnt ->GetObject();
110 TObjArray *pSigCut=(TObjArray*)pSigCutEnt->GetObject();
111 TObjArray *pDaqSig=(TObjArray*)pDaqSigEnt->GetObject();
112
abb5f786 113 TF1 *pRad0,*pRad1,*pRad2;
114 TCanvas *c2=new TCanvas("c2","Nmean"); c2->Divide(3,3);
115
43480497 116
43480497 117 for(Int_t iCh=0;iCh<7;iCh++){//chambers loop
abb5f786 118 if(iCh==6) c2->cd(1); if(iCh==5) c2->cd(2);
119 if(iCh==4) c2->cd(4); if(iCh==3) c2->cd(5); if(iCh==2) c2->cd(6);
120 if(iCh==1) c2->cd(8); if(iCh==0) c2->cd(9);
121
122 TF1 *pRad0=(TF1*)pNmean->At(iCh*3+0); pRad0->Draw(); pRad0->GetXaxis()->SetTimeDisplay(kTRUE); pRad0->GetYaxis()->SetRangeUser(1.28,1.3);
123 TF1 *pRad1=(TF1*)pNmean->At(iCh*3+1); pRad1->Draw("same");
124 TF1 *pRad2=(TF1*)pNmean->At(iCh*3+2); pRad2->Draw("same");
125 }//chambers loop
126}