#include <TMinuit.h>
#include <TH1F.h>
#include <TH2F.h>
+#include <AliSysInfo.h>
#include <TMath.h>
#include <TNtuple.h>
AliTPCCalibTCF::AliTPCCalibTCF() :
TNamed(),
- fGateWidth(100),
+ fGateWidth(80),
fSample(900),
fPulseLength(500),
fLowPulseLim(30),
Int_t ievent=0;
do {
+ AliSysInfo::AddStamp(Form("start_event_%d",ievent), ievent,-1,-1);
printf("Reading next event ... Nr: %d\n",ievent);
- AliTPCRawStream rawStream(rawReader);
+ AliTPCRawStream *rawStream = new AliTPCRawStream(rawReader);
rawReader->Select("TPC");
- ProcessRawEvent(&rawStream, nameFileOut);
+ ProcessRawEvent(rawStream, nameFileOut);
+ delete rawStream;
+ AliSysInfo::AddStamp(Form("end_event_%d",ievent), ievent,-1,-1);
ievent++;
} while (rawReader->NextEvent());
if (rawStream->IsNewRow()){
sector = rawStream->GetSector();
row = rawStream->GetRow();
+ // if (sector!=prevSec) AliSysInfo::AddStamp(Form("sector_%d_row_%d",sector,row), -1,sector,row);
}
Int_t pad = rawStream->GetPad();
continue;
} else {
// still the same pad, save signal to temporary histogram
- if (time<=fSample+fGateWidth && time>fGateWidth) {
+ if ( (time<=fSample+fGateWidth) && (time>=fGateWidth)) {
tempHis->SetBinContent(time,signal);
}
}
Int_t maxpos = tempHis->GetMaximumBin();
Int_t first = (Int_t)TMath::Max(maxpos-10, 0);
- Int_t last = TMath::Min((Int_t)maxpos+fPulseLength-10, fSample);
+ Int_t last = TMath::Min((Int_t)maxpos+fPulseLength-10, fSample+fGateWidth);
// simple baseline substraction ? better one needed ? (pedestalsubstr.?)
// and RMS calculation with timebins before the pulse and at the end of
}
// Decision if found pulse is a proper one according to given tresholds
- if (max>lowLim && max<upLim && !((last-first)<fPulseLength) && rms<fRMSLim && (intHist/intPulse)<fRatioIntLim && binRatio >= 0.1) {
+ if (max>lowLim && max<upLim && !((last-first)<fPulseLength) && rms<fRMSLim && (intHist/intPulse)<fRatioIntLim && (binRatio >= 0.1) ) {
char hname[100];
sprintf(hname,"sec%drow%dpad%d",prevSec,prevRow,prevPad);
if (!his ) { // new entry (pulse in new pad found)
his = new TH1F(hname,hname, fPulseLength+4, 0, fPulseLength+4);
- his->SetBinContent(1,1); // pulse counter (1st pulse)
+ his->SetBinContent(1,1); // pulse counter (1st pulse)
his->SetBinContent(2,prevSec); // sector
his->SetBinContent(3,prevRow); // row
his->SetBinContent(4,prevPad); // pad
for (Int_t ipos=0; ipos<last-first; ipos++){
- Int_t signal = (Int_t)(tempHis->GetBinContent(ipos+first)-baseline);
+ signal = (Int_t)(tempHis->GetBinContent(ipos+first)-baseline);
his->SetBinContent(ipos+5,signal);
}
his->Write(hname);
his->AddBinContent(1,1); // pulse counter for each pad
for (Int_t ipos=0; ipos<last-first; ipos++){
- Int_t signal= (Int_t)(tempHis->GetBinContent(ipos+first)-baseline);
+ signal= (Int_t)(tempHis->GetBinContent(ipos+first)-baseline);
his->AddBinContent(ipos+5,signal);
}
printf("adding ... %s: Signal %d at bin %d \n", hname, max-(Int_t)baseline, maxpos+fGateWidth);
do {
printf("Reading next event ... Nr:%d\n",ievent);
- AliTPCRawStream rawStream(rawReader);
+ AliTPCRawStream *rawStream = new AliTPCRawStream(rawReader);
rawReader->Select("TPC");
ievent++;
- Int_t sector = rawStream.GetSector();
- Int_t row = rawStream.GetRow();
+ Int_t sector = rawStream->GetSector();
+ Int_t row = rawStream->GetRow();
Int_t prevSec = 999999;
Int_t prevRow = 999999;
Int_t prevPad = 999999;
Int_t prevTime = 999999;
- while (rawStream.Next()) {
+ while (rawStream->Next()) {
- if (rawStream.IsNewRow()){
- sector = rawStream.GetSector();
- row = rawStream.GetRow();
+ if (rawStream->IsNewRow()){
+ sector = rawStream->GetSector();
+ row = rawStream->GetRow();
}
- Int_t pad = rawStream.GetPad();
- Int_t time = rawStream.GetTime();
- Int_t signal = rawStream.GetSignal();
+ Int_t pad = rawStream->GetPad();
+ Int_t time = rawStream->GetTime();
+ Int_t signal = rawStream->GetSignal();
- if (!rawStream.IsNewPad()) { // Reading signal from one Pad
+ if (!rawStream->IsNewPad()) { // Reading signal from one Pad
// this pad always gave a useless signal, probably induced by the supply
// voltage of the gate signal (date:2008-Aug-07)
}
if (time>prevTime) {
- // printf("Wrong time: %d %d\n",rawStream.GetTime(),prevTime);
+ // printf("Wrong time: %d %d\n",rawStream->GetTime(),prevTime);
continue;
} else {
// still the same pad, save signal to temporary histogram
Int_t maxpos = tempHis->GetMaximumBin();
Int_t first = (Int_t)TMath::Max(maxpos-10, 0);
- Int_t last = TMath::Min((Int_t)maxpos+fPulseLength-10, fSample);
+ Int_t last = TMath::Min((Int_t)maxpos+fPulseLength-10, fSample+fGateWidth);
// simple baseline substraction ? better one needed ? (pedestalsubstr.?)
// Decision if found pulse is a proper one according to given tresholds
- if (max>lowLim && max<upLim && !((last-first)<fPulseLength) && rms<fRMSLim && intHist/intPulse<fRatioIntLim && binRatio >= 0.1){
+ if (max>lowLim && max<upLim && !((last-first)<fPulseLength) && rms<fRMSLim && intHist/intPulse<fRatioIntLim && (binRatio >= 0.1) ){
// note:
// assuming that lowLim is higher than the pedestal value!
char hname[100];
his->SetBinContent(4,prevPad); // pad
for (Int_t ipos=0; ipos<last-first; ipos++){
- Int_t signal = (Int_t)(tempHis->GetBinContent(ipos+first)-baseline);
+ signal = (Int_t)(tempHis->GetBinContent(ipos+first)-baseline);
his->SetBinContent(ipos+5,signal);
}
printf("Finished to read event ... \n");
-} while (rawReader->NextEvent()); // event loop
+ delete rawStream;
+
+
+ } while (rawReader->NextEvent()); // event loop
printf("Finished to read file - close output file ... \n");
TIter next(fileIn.GetListOfKeys());
TH2F * his2D = new TH2F("his2D","his2D", 250,-250,250,250,-250,250);
+
AliTPCROC * roc = AliTPCROC::Instance();
Int_t nHist=fileIn.GetNkeys();
+ if (!nHist) { return 0; }
+
Int_t iHist = 0;
Float_t xyz[3];
Int_t pad = 0;
while ((key = (TKey *) next())) { // loop over histograms within the file
- iHist+=1;
+ iHist++;
his = (TH1F*)fileIn.Get(key->GetName()); // copy object to memory
npulse = (Int_t)his->GetBinContent(1);
row = (Int_t)his->GetBinContent(3);
pad = (Int_t)his->GetBinContent(4);
- if (side==0 && sec%36>=18) continue;
- if (side>0 && sec%36<18) continue;
+ if ( (side==0) && (sec%36>=18) ) continue;
+ if ( (side>0) && (sec%36<18) ) continue;
- if (row==-1 & pad==-1) { // summed pulses per sector
+ if ( (row==-1) && (pad==-1) ) { // summed pulses per sector
// fill all pad with this values
- for (UInt_t row=0; row<roc->GetNRows(sec); row++) {
- for (UInt_t pad=0; pad<roc->GetNPads(sec,row); pad++) {
- roc->GetPositionGlobal(sec,row,pad,xyz);
+ for (UInt_t rowi=0; rowi<roc->GetNRows(sec); rowi++) {
+ for (UInt_t padi=0; padi<roc->GetNPads(sec,rowi); padi++) {
+ roc->GetPositionGlobal(sec,rowi,padi,xyz);
binx = 1+TMath::Nint((xyz[0]+250.)*0.5);
biny = 1+TMath::Nint((xyz[1]+250.)*0.5);
his2D->SetBinContent(binx,biny,npulse);
}
his2D->SetXTitle("x (cm)");
his2D->SetYTitle("y (cm)");
+ his2D->SetStats(0);
+
+ his2D->DrawCopy("colz");
if (!side) {
gPad->SetTitle("A side");
gPad->SetTitle("C side");
}
- his2D->DrawCopy("colz");
return his2D;
}
//
TFile *file = new TFile(nameFile,"READ");
-
TH1F *his;
TKey *key;
TIter next( file->GetListOfKeys() );
char nameFileOut[100];
sprintf(nameFileOut,"Occup-%s",nameFile);
TFile fileOut(nameFileOut,"RECREATE");
- fileOut.cd();
+ // fileOut.cd();
TNtuple *ntuple = new TNtuple("ntuple","ntuple","x:y:z:npulse");
- // ntuple->SetDirectory(0); // force to be memory resistent
+ // ntuple->SetDirectory(0); // force to be memory resistent
Int_t nHist=file->GetNkeys();
+ if (!nHist) { return; }
Int_t iHist = 0;
+
+ Int_t secWise = 0;
+
while ((key = (TKey *) next())) { // loop over histograms within the file
- iHist+=1;
his = (TH1F*)file->Get(key->GetName()); // copy object to memory
-
+ iHist++;
Int_t npulse = (Int_t)his->GetBinContent(1);
Int_t sec = (Int_t)his->GetBinContent(2);
Int_t row = (Int_t)his->GetBinContent(3);
Int_t pad = (Int_t)his->GetBinContent(4);
- // if (side==0 && sec%36>=18) continue;
- // if (side>0 && sec%36<18) continue;
-
- if (row==-1 & pad==-1) { // summed pulses per sector
+ if ( (row==-1) && (pad==-1) ) { // summed pulses per sector
row = 40; pad = 40; // set to approx middle row for better plot
+ secWise=1;
}
Float_t *pos = new Float_t[3];
}
pos->~Float_t();
}
-
- if (iHist<72) { // pulse per sector
+ if (secWise) { // pulse per sector
ntuple->SetMarkerStyle(8);
ntuple->SetMarkerSize(4);
} else { // pulse per Pad
if (!side) {
sprintf(cSel,"z>0&&npulse>=%d",nPulseMin);
ntuple->Draw("y:x:npulse",cSel,"colz");
- gPad->SetTitle("A side");
} else {
sprintf(cSel,"z<0&&npulse>=%d",nPulseMin);
ntuple->Draw("y:x:npulse",cSel,"colz");
+ }
+
+ if (!side) {
+ gPad->SetTitle("A side");
+ } else {
gPad->SetTitle("C side");
}
+
ntuple->Write();
fileOut.Close();
file->Close();
gStyle->SetLabelOffset(-0.01,"Y");
gStyle->SetLabelOffset(-0.03,"Z");
- gPad->SetPhi(0.1);gPad->SetTheta(90);
-
his2D->GetXaxis()->SetTitle("max. undershot [ADC]");
his2D->GetYaxis()->SetTitle("width Reduction [%]");
his2D->DrawCopy(pOpt);
+
+ gPad->SetPhi(0.1);gPad->SetTheta(90);
his2D->~TH2F();
//
// initialize TMinuit with a maximum of 8 params
- TMinuit *gMinuit = new
- TMinuit(8);
- gMinuit->mncler(); // Reset Minuit's list of paramters
- gMinuit->SetPrintLevel(-1); // No Printout
- gMinuit->SetFCN(AliTPCCalibTCF::FitFcn); // To set the address of the
+ TMinuit *minuitFit = new TMinuit(8);
+ minuitFit->mncler(); // Reset Minuit's list of paramters
+ minuitFit->SetPrintLevel(-1); // No Printout
+ minuitFit->SetFCN(AliTPCCalibTCF::FitFcn); // To set the address of the
// minimization function
- gMinuit->SetObjectFit(dataTuple);
+ minuitFit->SetObjectFit(dataTuple);
Double_t arglist[10];
Int_t ierflg = 0;
arglist[0] = 1;
- gMinuit->mnexcm("SET ERR", arglist ,1,ierflg);
+ minuitFit->mnexcm("SET ERR", arglist ,1,ierflg);
// Set standard starting values and step sizes for each parameter
// upper and lower limit (in a reasonable range) are set to improve
static Double_t min[8] = {100, 3., 0.1, 0.2, 3., 60., 0., 2.0};
static Double_t max[8] = {200, 20., 5., 3., 30., 300., 20., 2.5};
- gMinuit->mnparm(0, "A1", vstart[0], step[0], min[0], max[0], ierflg);
- gMinuit->mnparm(1, "A2", vstart[1], step[1], min[1], max[1], ierflg);
- gMinuit->mnparm(2, "A3", vstart[2], step[2], min[2], max[2], ierflg);
- gMinuit->mnparm(3, "T1", vstart[3], step[3], min[3], max[3], ierflg);
- gMinuit->mnparm(4, "T2", vstart[4], step[4], min[4], max[4], ierflg);
- gMinuit->mnparm(5, "T3", vstart[5], step[5], min[5], max[5], ierflg);
- gMinuit->mnparm(6, "T0", vstart[6], step[6], min[6], max[6], ierflg);
- gMinuit->mnparm(7, "TTP", vstart[7], step[7], min[7], max[7],ierflg);
- gMinuit->FixParameter(7); // 2.24 ... out of pulserRun Fit (->IRF)
+ minuitFit->mnparm(0, "A1", vstart[0], step[0], min[0], max[0], ierflg);
+ minuitFit->mnparm(1, "A2", vstart[1], step[1], min[1], max[1], ierflg);
+ minuitFit->mnparm(2, "A3", vstart[2], step[2], min[2], max[2], ierflg);
+ minuitFit->mnparm(3, "T1", vstart[3], step[3], min[3], max[3], ierflg);
+ minuitFit->mnparm(4, "T2", vstart[4], step[4], min[4], max[4], ierflg);
+ minuitFit->mnparm(5, "T3", vstart[5], step[5], min[5], max[5], ierflg);
+ minuitFit->mnparm(6, "T0", vstart[6], step[6], min[6], max[6], ierflg);
+ minuitFit->mnparm(7, "TTP", vstart[7], step[7], min[7], max[7],ierflg);
+ minuitFit->FixParameter(7); // 2.24 ... out of pulserRun Fit (->IRF)
// Now ready for minimization step
arglist[0] = 2000; // max num of iterations
arglist[1] = 0.1; // tolerance
- gMinuit->mnexcm("MIGRAD", arglist ,2,ierflg);
+ minuitFit->mnexcm("MIGRAD", arglist ,2,ierflg);
Double_t p1 = 0.0 ;
- gMinuit->mnexcm("SET NOW", &p1 , 0, ierflg) ; // No Warnings
+ minuitFit->mnexcm("SET NOW", &p1 , 0, ierflg) ; // No Warnings
if (ierflg == 4) { // Fit failed
for (Int_t i=0;i<3;i++) {
coefP[i] = 0;
coefZ[i] = 0;
}
- gMinuit->~TMinuit();
+ minuitFit->~TMinuit();
return 0;
} else { // Fit successfull
for (Int_t i=0;i<6;i++) {
Double_t err = 0;
Double_t val = 0;
- gMinuit->GetParameter(i,val,err);
+ minuitFit->GetParameter(i,val,err);
fitParam[i] = val;
}
fitParam->~Double_t();
valuePZ->~Double_t();
- gMinuit->~TMinuit();
+ minuitFit->~TMinuit();
return 1;
if (param[3]==param[4]) {param[3]=param[3]+0.0001;}
if (param[5]==param[4]) {param[5]=param[5]+0.0001;}
- if ((param[5]>param[4])&(param[5]>param[3])) {
+ if ((param[5]>param[4])&&(param[5]>param[3])) {
if (param[4]>=param[3]) {
vA1 = param[0]; vA2 = param[1]; vA3 = param[2];
vTT1 = param[3]; vTT2 = param[4]; vTT3 = param[5];
vA1 = param[1]; vA2 = param[0]; vA3 = param[2];
vTT1 = param[4]; vTT2 = param[3]; vTT3 = param[5];
}
- } else if ((param[4]>param[5])&(param[4]>param[3])) {
+ } else if ((param[4]>param[5])&&(param[4]>param[3])) {
if (param[5]>=param[3]) {
vA1 = param[0]; vA2 = param[2]; vA3 = param[1];
vTT1 = param[3]; vTT2 = param[5]; vTT3 = param[4];
vA1 = param[2]; vA2 = param[0]; vA3 = param[1];
vTT1 = param[5]; vTT2 = param[3]; vTT3 = param[4];
}
- } else if ((param[3]>param[4])&(param[3]>param[5])) {
+ } else if ((param[3]>param[4])&&(param[3]>param[5])) {
if (param[5]>=param[4]) {
vA1 = param[1]; vA2 = param[2]; vA3 = param[0];
vTT1 = param[4]; vTT2 = param[5]; vTT3 = param[3];
TKey *key;
// just delete the file entries ...
- TFile fileSum(nameFileSum,"RECREATE");
- fileSum.Close();
+ TFile fileSumD(nameFileSum,"RECREATE");
+ fileSumD.Close();
char nameFileSumSec[100];
printf("Sector file %s found\n",nameFileSumSec);
TIter next(fileSumSec->GetListOfKeys());
- while(key=(TKey*)next()) {
+ while( (key=(TKey*)next()) ) {
const char *hisName = key->GetName();
hisIn=(TH1F*)fileSumSec->Get(hisName);