/* $Id$ */
+/*
+ Class for creating of the sumable digits and digits from MC data
+ //
+ The input : ideal signals (Hits->Diffusion->Attachment -Ideal signal)
+ The output: raw digits
+
+ Effect implemented:
+ 1. Pad by pad gain map
+ 2. Noise map
+ 3. The dead channels identified - zerro noise for corresponding pads
+ In this case the outpu equal zerro
+
+*/
+
+
+
+
#include <stdlib.h>
#include <TTree.h>
#include <TObjArray.h>
#include <TFile.h>
#include <TDirectory.h>
#include <Riostream.h>
+#include <TParameter.h>
#include "AliTPCDigitizer.h"
char s[100];
char ss[100];
TString optionString = option;
- if (optionString.Data() == "deb") {
+ if (!strcmp(optionString.Data(),"deb")) {
cout<<"AliTPCDigitizer::Exec: called with option deb "<<endl;
fDebug = 3;
}
AliTPC *pTPC = (AliTPC *) gAlice->GetModule("TPC");
AliTPCParam * param = pTPC->GetParam();
- sprintf(s,param->GetTitle());
- sprintf(ss,"75x40_100x60");
+ //sprintf(s,param->GetTitle());
+ snprintf(s,100,param->GetTitle());
+ //sprintf(ss,"75x40_100x60");
+ snprintf(ss,100,"75x40_100x60");
if(strcmp(s,ss)==0){
printf("2 pad-length geom hits with 3 pad-lenght geom digits...\n");
delete param;
param=new AliTPCParamSR();
}
else{
- sprintf(ss,"75x40_100x60_150x60");
+ //sprintf(ss,"75x40_100x60_150x60");
+ snprintf(ss,100,"75x40_100x60_150x60");
if(strcmp(s,ss)!=0) {
printf("No TPC parameters found...\n");
exit(2);
}
}
- pTPC->GenerNoise(500000); //create teble with noise
+ pTPC->GenerNoise(500000); //create table with noise
//
Int_t nInputs = fManager->GetNinputs();
Int_t * masks = new Int_t[nInputs];
for (Int_t i=0; i<nInputs;i++)
masks[i]= fManager->GetMask(i);
Short_t **pdig= new Short_t*[nInputs]; //pointers to the expanded digits array
- Int_t **ptr= new Int_t*[nInputs]; //pointers to teh expanded tracks array
+ Int_t **ptr= new Int_t*[nInputs]; //pointers to the expanded tracks array
Bool_t *active= new Bool_t[nInputs]; //flag for active input segments
-
+ Char_t phname[100];
//create digits array for given sectors
// make indexes
-
+ //
+ //create branch's in TPC treeD
+ orl = AliRunLoader::GetRunLoader(fManager->GetOutputFolderName());
+ ogime = orl->GetLoader("TPCLoader");
+ TTree * tree = ogime->TreeD();
+ AliSimDigits * digrow = new AliSimDigits;
+
+ if (tree == 0x0)
+ {
+ ogime->MakeTree("D");
+ tree = ogime->TreeD();
+ }
+ tree->Branch("Segment","AliSimDigits",&digrow);
+ //
AliSimDigits ** digarr = new AliSimDigits*[nInputs];
for (Int_t i1=0;i1<nInputs; i1++)
{
{
cerr<<"AliTPCDigitizer: Input tree with SDigits not found in"
<<" input "<< i1<<endl;
+ for (Int_t i2=0;i2<i1+1; i2++){
+
+ if(digarr[i2]) delete digarr[i2];
+ }
+ delete [] digarr;
+ delete [] active;
+ delete []masks;
+ delete []pdig;
+ delete []ptr;
return;
}
-
+
+ //sprintf(phname,"lhcphase%d",i1);
+ snprintf(phname,100,"lhcphase%d",i1);
+ TParameter<float> *ph = (TParameter<float>*)treear->GetUserInfo()
+ ->FindObject("lhcphase0");
+ if(!ph){
+ cerr<<"AliTPCDigitizer: LHC phase not found in"
+ <<" input "<< i1<<endl;
+ for (Int_t i2=0;i2<i1+1; i2++){
+ if(digarr[i2]) delete digarr[i2];
+ }
+ delete [] digarr;
+ delete [] active;
+ delete []masks;
+ delete []pdig;
+ delete []ptr;
+ return;
+ }
+ tree->GetUserInfo()->Add(new TParameter<float>(phname,ph->GetVal()));
+ //
if (treear->GetIndex()==0)
treear->BuildIndex("fSegmentID","fSegmentID");
treear->GetBranch("Segment")->SetAddress(&digarr[i1]);
}
- //create branch's in TPC treeD
- AliSimDigits * digrow = new AliSimDigits;
- orl = AliRunLoader::GetRunLoader(fManager->GetOutputFolderName());
- ogime = orl->GetLoader("TPCLoader");
-
- TTree * tree = ogime->TreeD();
- if (tree == 0x0)
- {
- ogime->MakeTree("D");
- tree = ogime->TreeD();
- }
- tree->Branch("Segment","AliSimDigits",&digrow);
+
//
param->SetZeroSup(2);
Int_t zerosup = param->GetZeroSup();
- AliTPCCalPad * gainTPC = AliTPCcalibDB::Instance()->GetPadGainFactor();
+ AliTPCCalPad * gainTPC = AliTPCcalibDB::Instance()->GetDedxGainFactor();
+ AliTPCCalPad * noiseTPC = AliTPCcalibDB::Instance()->GetPadNoise();
//
//Loop over segments of the TPC
continue;
}
AliTPCCalROC * gainROC = gainTPC->GetCalROC(sec); // pad gains per given sector
+ AliTPCCalROC * noiseROC = noiseTPC->GetCalROC(sec); // noise per given sector
digrow->SetID(segmentID);
Int_t nrows = 0;
}
q/=16.; //conversion factor
Float_t gain = gainROC->GetValue(row,elem/nrows); // get gain for given - pad-row pad
- if (gain<0.5){
- printf("problem\n");
- }
+ //if (gain<0.5){
+ //printf("problem\n");
+ //}
q*= gain;
+ Float_t noisePad = noiseROC->GetValue(row,elem/nrows);
// Float_t noise = gRandom->Gaus(0,param->GetNoise()*param->GetNoiseNormFac());
Float_t noise = pTPC->GetNoise();
- q+=noise;
+ q+=noise*noisePad;
q=TMath::Nint(q);
if (q > zerosup)
{
pdig1++;
ptr1++;
}
-
+ //
+ // glitch filter
+ //
+ digrow->GlitchFilter();
+ //
digrow->CompresBuffer(1,zerosup);
digrow->CompresTrackBuffer(1);
tree->Fill();
//output stored in TreeTPCD
TString optionString = option;
- if (optionString.Data() == "deb") {
+ if (!strcmp(optionString.Data(),"deb")) {
cout<<"AliTPCDigitizer::Exec: called with option deb "<<endl;
fDebug = 3;
}
ogime = orl->GetLoader("TPCLoader");
rl = AliRunLoader::GetRunLoader(fManager->GetInputFolderName(0));
- gime = rl->GetLoader("TPCLoader");
-
+ //gime = rl->GetLoader("TPCLoader");
+ rl->GetLoader("TPCLoader");
rl->LoadgAlice();
AliRun* alirun = rl->GetAliRun();
printf("noise %f \n", param->GetNoise()*param->GetNoiseNormFac());
//
Int_t nInputs = fManager->GetNinputs();
+ // stupid protection...
+ if (nInputs <= 0) return;
+ //
Int_t * masks = new Int_t[nInputs];
for (Int_t i=0; i<nInputs;i++)
masks[i]= fManager->GetMask(i);
AliSimDigits ** digarr = new AliSimDigits*[nInputs];
+ for(Int_t ii=0;ii<nInputs;ii++) digarr[ii]=0;
+
for (Int_t i1=0;i1<nInputs; i1++)
{
- digarr[i1]=0;
+ //digarr[i1]=0;
// intree[i1]
rl = AliRunLoader::GetRunLoader(fManager->GetInputFolderName(i1));
gime = rl->GetLoader("TPCLoader");
TTree * treear = gime->TreeS();
- TBranch * br = treear->GetBranch("fSegmentID");
- if (br) br->GetFile()->cd();
+ //
if (!treear) {
- cerr<<" TPC - not existing input = \n"<<i1<<" ";
+ cerr<<" TPC - not existing input = \n"<<i1<<" ";
+ delete [] masks;
+ for(Int_t i=0; i<nInputs; i++) delete digarr[i];
+ delete [] digarr;
+ return;
}
+ //
+ TBranch * br = treear->GetBranch("fSegmentID");
+ if (br) br->GetFile()->cd();
treear->GetBranch("Segment")->SetAddress(&digarr[i1]);
- }
+ }
rl = AliRunLoader::GetRunLoader(fManager->GetInputFolderName(0));
gime = rl->GetLoader("TPCLoader");
Int_t zerosup = param->GetZeroSup();
//Loop over segments of the TPC
- AliTPCCalPad * gainTPC = AliTPCcalibDB::Instance()->GetPadGainFactor();
+ AliTPCCalPad * gainTPC = AliTPCcalibDB::Instance()->GetDedxGainFactor();
+ AliTPCCalPad * noiseTPC = AliTPCcalibDB::Instance()->GetPadNoise();
for (Int_t n=0; n<nentries; n++) {
rl = AliRunLoader::GetRunLoader(fManager->GetInputFolderName(0));
gime = rl->GetLoader("TPCLoader");
}
AliTPCCalROC * gainROC = gainTPC->GetCalROC(sec); // pad gains per given sector
+ AliTPCCalROC * noiseROC = noiseTPC->GetCalROC(sec); // noise per given sector
digrow->SetID(digarr[0]->GetID());
Int_t nrows = digarr[0]->GetNRows();
// Float_t noise = gRandom->Gaus(0,param->GetNoise()*param->GetNoiseNormFac());
Float_t gain = gainROC->GetValue(row,col);
q*= gain;
+ Float_t noisePad = noiseROC->GetValue(row, col);
+
Float_t noise = pTPC->GetNoise();
- q+=noise;
+ q+=noise*noisePad;
+
q=TMath::Nint(q);
if (q > zerosup){
delete digrow;
for (Int_t i1=0;i1<nInputs; i1++) delete digarr[i1];
- delete []masks;
- delete digarr;
+ delete [] masks;
+ delete [] digarr;
}