#include <TLatex.h>
#include <TFile.h>
#include <TMath.h>
+#include <TNtuple.h>
#include <TGrid.h>
#include <TF1.h>
#include <TLine.h>
void AnalyzeSDDInjectorsAllMod(Char_t *datafil,
Int_t adcfreq=20,
Int_t nDDL=0,
- Int_t firstEv=10,
- Int_t lastEv=15,
+ Int_t firstEv=18,
+ Int_t lastEv=30,
Int_t jpad=20,
- Int_t statuscut=7,
- Int_t dataformat=1){
+ Int_t statuscut=7){
+
const Int_t kTotDDL=24;
const Int_t kModPerDDL=12;
const Int_t kSides=2;
+ Bool_t writtenoutput=kFALSE;
AliITSDDLModuleMapSDD* dmap=new AliITSDDLModuleMapSDD();
- dmap->SetJun08Map();
+ dmap->SetJun09Map();
+ TNtuple* ntsp=new TNtuple("ntsp","","mod:sid:an:stat:vall:errvall:v23:v13:v12:c1:c2:c3");
+ Float_t xnt[12];
TH2F** histo = new TH2F*[kTotDDL*kModPerDDL*kSides];
Int_t nWrittenEv[kTotDDL*kModPerDDL*kSides];
TGraphErrors** gvel = new TGraphErrors*[kTotDDL*kModPerDDL*kSides];
AliITSOnlineSDDInjectors **anal=new AliITSOnlineSDDInjectors*[kTotDDL*kModPerDDL*kSides];
+ AliITSOnlineSDDInjectors **anal23=new AliITSOnlineSDDInjectors*[kTotDDL*kModPerDDL*kSides];
+ AliITSOnlineSDDInjectors **anal13=new AliITSOnlineSDDInjectors*[kTotDDL*kModPerDDL*kSides];
+ AliITSOnlineSDDInjectors **anal12=new AliITSOnlineSDDInjectors*[kTotDDL*kModPerDDL*kSides];
TH1F** hvdriftl=new TH1F*[260];
TH1F** hvdriftr=new TH1F*[260];
Char_t hisnam[20];
for(Int_t isid=0;isid<kSides;isid++){
Int_t index=kSides*(kModPerDDL*iddl+imod)+isid;
sprintf(hisnam,"h%02dc%02ds%d",iddl,imod,isid);
+
histo[index]=new TH2F(hisnam,"",256,-0.5,255.5,256,-0.5,255.5);
anal[index]=new AliITSOnlineSDDInjectors(iddl,imod,isid);
if(adcfreq==40) anal[index]->Set40MHzConfig();
else anal[index]->Set20MHzConfig();
+
+ anal23[index]=new AliITSOnlineSDDInjectors(iddl,imod,isid);
+ if(adcfreq==40) anal23[index]->Set40MHzConfig();
+ else anal23[index]->Set20MHzConfig();
+ anal23[index]->SetUseLine(0,kFALSE);
+
+ anal13[index]=new AliITSOnlineSDDInjectors(iddl,imod,isid);
+ if(adcfreq==40) anal13[index]->Set40MHzConfig();
+ else anal13[index]->Set20MHzConfig();
+ anal13[index]->SetUseLine(1,kFALSE);
+
+ anal12[index]=new AliITSOnlineSDDInjectors(iddl,imod,isid);
+ if(adcfreq==40) anal12[index]->Set40MHzConfig();
+ else anal12[index]->Set20MHzConfig();
+ anal12[index]->SetUseLine(2,kFALSE);
+
nWrittenEv[index]=0;
}
}
gStyle->SetPalette(1);
TCanvas* c1 = new TCanvas("c1","Drift Speed vs. anode",900,900);
Char_t text[50];
+ UInt_t timeSt=0;
Int_t iev=firstEv;
AliRawReader *rd;
c1->Clear();
c1->Divide(4,6,0.001,0.001);
printf("Event # %d\n",iev);
- UInt_t timeSt=rd->GetTimestamp();
+ timeSt=rd->GetTimestamp();
rd->Reset();
for(Int_t iddl=0; iddl<kTotDDL;iddl++){
for(Int_t imod=0; imod<kModPerDDL;imod++){
}
}
- AliITSRawStream* s;
- if(dataformat==0){
- s=new AliITSRawStreamSDD(rd);
- }else{
- s=new AliITSRawStreamSDDCompressed(rd);
- if(dataformat==1) s->SetADCEncoded(kTRUE);
+
+ UChar_t cdhAttr=AliITSRawStreamSDD::ReadBlockAttributes(rd);
+ UInt_t amSamplFreq=AliITSRawStreamSDD::ReadAMSamplFreqFromCDH(cdhAttr);
+ AliITSRawStream* s=AliITSRawStreamSDD::CreateRawStreamSDD(rd,cdhAttr);
+ if(!writtenoutput){
+ printf("Use %s raw stream, sampling frequency %d MHz\n",s->ClassName(),amSamplFreq);
+ writtenoutput=kTRUE;
}
while(s->Next()){
Int_t iDDL=rd->GetDDLID();
for(Int_t isid=0;isid<kSides;isid++){
Int_t index=kSides*(kModPerDDL*iddl+imod)+isid;
anal[index]->AnalyzeEvent(histo[index]);
- anal[index]->WriteToASCII(iev,timeSt,nWrittenEv[index]);
+ anal23[index]->AnalyzeEvent(histo[index]);
+ anal13[index]->AnalyzeEvent(histo[index]);
+ anal12[index]->AnalyzeEvent(histo[index]);
nWrittenEv[index]++;
Int_t iMod=dmap->GetModuleNumber(iddl,imod);
- if(iMod!=-1){
+ if(iMod!=-1){
for(Int_t ipad=0;ipad<33;ipad++){
Int_t st=anal[index]->GetInjPadStatus(ipad);
hanst->Fill(st);
if(isid==0) hpad7l->Fill(ipad);
if(isid==1) hpad7r->Fill(ipad);
}
+ xnt[0]=(Float_t)iMod;
+ xnt[1]=(Float_t)isid;
+ xnt[2]=(Float_t)anal[index]->GetAnodeNumber(ipad);
+ xnt[3]=(Float_t)st;
+ xnt[4]=anal[index]->GetDriftSpeed(ipad);
+ xnt[5]=anal[index]->GetDriftSpeedErr(ipad);
+ xnt[6]=anal23[index]->GetDriftSpeed(ipad);
+ xnt[7]=anal13[index]->GetDriftSpeed(ipad);
+ xnt[8]=anal12[index]->GetDriftSpeed(ipad);
+ xnt[9]=anal[index]->GetCentroid(ipad,0);
+ xnt[10]=anal[index]->GetCentroid(ipad,1);
+ xnt[11]=anal[index]->GetCentroid(ipad,2);
+ ntsp->Fill(xnt);
}
if(anal[index]->GetInjPadStatus(jpad)>=statuscut){
Float_t vel=anal[index]->GetDriftSpeed(jpad);
hpad7l->Scale(nfac);
hpad7r->Scale(nfac);
+ TFile *outfil1=new TFile("DriftSpeedVsAnode.root","recreate");
+ for(Int_t iddl=0; iddl<kTotDDL;iddl++){
+ for(Int_t imod=0; imod<kModPerDDL;imod++){
+ for(Int_t isid=0;isid<kSides;isid++){
+ Int_t index=kSides*(kModPerDDL*iddl+imod)+isid;
+ anal[index]->FitMeanDriftSpeedVsAnode();
+ anal[index]->WriteToASCII(0,timeSt,0);
+ anal[index]->WriteInjectorStatusToASCII();
+ anal[index]->WriteToROOT(outfil1);
+ }
+ }
+ }
+ outfil1->Close();
+
Int_t ipt0=0, ipt1=0;
Float_t Edrift=(1800-45)/291/0.012;
TFile *outfil=new TFile("DriftSpeedHistos.root","recreate");
+ ntsp->Write();
for(Int_t iMod=0; iMod<260; iMod++){
outfil->cd();
- hvdriftl[iMod]->Write();
- hvdriftr[iMod]->Write();
+ // hvdriftl[iMod]->Write();
+ // hvdriftr[iMod]->Write();
Float_t modid=iMod+240;
if(hvdriftl[iMod]->GetEntries()>0){
Float_t avevell=hvdriftl[iMod]->GetMean();
}
-void AnalyzeSDDInjectorsAllMod(Int_t nrun, Int_t n2, Char_t* dir="LHC08d_SDD",
+void AnalyzeSDDInjectorsAllMod(Int_t nrun, Int_t n2, Int_t year=2010, Char_t* dir="LHC10b_SDD",
Int_t adcfreq=20,
Int_t nDDL=0,
- Int_t firstEv=15,
- Int_t lastEv=15,
+ Int_t firstEv=18,
+ Int_t lastEv=25,
Int_t jpad=20,
- Int_t statuscut=7,
- Int_t dataformat=1){
+ Int_t statuscut=7){
TGrid::Connect("alien:",0,0,"t");
Char_t filnam[200];
- sprintf(filnam,"alien:///alice/data/2008/%s/%09d/raw/08%09d%03d.10.root",dir,nrun,nrun,n2);
+ sprintf(filnam,"alien:///alice/data/%d/%s/%09d/raw/%02d%09d%03d.10.root",year,dir,nrun,year-2000,nrun,n2);
printf("Open file %s\n",filnam);
- AnalyzeSDDInjectorsAllMod(filnam,adcfreq,nDDL,firstEv,lastEv,jpad,statuscut,dataformat);
+ AnalyzeSDDInjectorsAllMod(filnam,adcfreq,nDDL,firstEv,lastEv,jpad,statuscut);
}