//____________________________________________________________________________
-AliZDCDigitizer::AliZDCDigitizer()
+AliZDCDigitizer::AliZDCDigitizer() :
+ fIsCalibration(0),
+ fPedData(0),
+ fCalibData(0),
+ fRecParam(0)
{
// Default constructor
//____________________________________________________________________________
AliZDCDigitizer::AliZDCDigitizer(AliRunDigitizer* manager):
- AliDigitizer(manager)
+ AliDigitizer(manager),
+ fIsCalibration(0), //By default the simulation doesn't create calib. data
+ fPedData(GetPedData()),
+ fCalibData(GetCalibData()),
+ fRecParam(GetRecParam())
{
- fIsCalibration=0; //By default the simulation doesn't create calib. data
-// fIsCalibration=1; //To create pedestal calib. data
// Get calibration data
- fPedData = GetPedData();
- fCalibData = GetCalibData();
- fRecParam = GetRecParam();
if(fIsCalibration!=0) printf("\n\t AliZDCDigitizer -> Creating calibration data (pedestals)\n");
}
AliZDCDigitizer::~AliZDCDigitizer()
{
// Destructor
-
+// Not implemented
}
//____________________________________________________________________________
AliZDCDigitizer::AliZDCDigitizer(const AliZDCDigitizer &digitizer):
- AliDigitizer()
+ AliDigitizer(),
+ fIsCalibration(digitizer.fIsCalibration),
+ fPedData(digitizer.fPedData),
+ fCalibData(digitizer.fCalibData),
+ fRecParam(digitizer.fRecParam)
{
// Copy constructor
}
}
for(Int_t i=0; i<2; i++) fADCRes[i] = digitizer.fADCRes[i];
- fIsCalibration = digitizer.fIsCalibration;
- fPedData = digitizer.fPedData;
- fCalibData = digitizer.fCalibData;
- fRecParam = digitizer.fRecParam;
}
treeD->Branch("ZDC", "AliZDCDigit", &pdigit, kBufferSize);
// Create digits
- Int_t sector[2], sectorL[2];
- Int_t digi[2], digiL[2], digioot[2];
- for(sector[0]=1; sector[0]<=3; sector[0]++){
+ Int_t sector[2];
+ Int_t digi[2], digioot[2];
+ for(sector[0]=1; sector[0]<6; sector[0]++){
for(sector[1]=0; sector[1]<5; sector[1]++){
if((sector[0]==3) && ((sector[1]<1) || (sector[1]>2))) continue;
for(Int_t res=0; res<2; res++){
digi[res] = Phe2ADCch(sector[0], sector[1], pm[sector[0]-1][sector[1]], res)
+ Pedestal(sector[0], sector[1], res);
}
- /*printf("\t DIGIT added -> det = %d, quad = %d - digi[0,1] = [%d, %d]\n",
+ /*printf("\t DIGIT added -> det %d quad %d - digi[0,1] = [%d, %d]\n",
sector[0], sector[1], digi[0], digi[1]); // Chiara debugging!
*/
//
new(pdigit) AliZDCDigit(sector, digi);
treeD->Fill();
- //
- // --- Adding digits for 2nd ZDC set (left side w.r.t. IP) ---
- // --- they are copied from right ZDC digits
- if(sector[0]==1 || sector[0]==2){
- sectorL[0] = sector[0]+3;
- sectorL[1] = sector[1];
- for(Int_t res=0; res<2; res++){
- digiL[res] = Phe2ADCch(sectorL[0], sectorL[1], pm[sector[0]-1][sector[1]], res)
- + Pedestal(sectorL[0], sectorL[1], res);
- }
- /*printf("\t DIGIT added -> det = %d, quad = %d - digi[0,1] = [%d, %d]\n",
- sectorL[0], sectorL[1], digiL[0], digiL[1]); // Chiara debugging!
- */
- //
- new(pdigit) AliZDCDigit(sectorL, digiL);
- treeD->Fill();
- }
}
} // Loop over detector
// Adding in-time digits for 2 reference PTM signals (after signal ch.)
Int_t sectorRef[2];
sectorRef[1] = 5;
Int_t sigRef[2];
+ // Reference signal are set to 100 (high gain chain) and 800 (low gain chain)
if(fIsCalibration==0) {sigRef[0]=100; sigRef[1]=800;}
- else {sigRef[0]=0; sigRef[1]=0;}
+ else {sigRef[0]=0; sigRef[1]=0;} // calibration -> simulation of pedestal values
//
for(Int_t iref=0; iref<2; iref++){
sectorRef[0] = 3*iref+1;
}
//
// --- Adding digits for out-of-time channels after signal digits
- for(sector[0]=1; sector[0]<=3; sector[0]++){
+ for(sector[0]=1; sector[0]<6; sector[0]++){
for(sector[1]=0; sector[1]<5; sector[1]++){
if((sector[0]==3) && ((sector[1]<1) || (sector[1]>2))) continue;
for(Int_t res=0; res<2; res++){
//
new(pdigit) AliZDCDigit(sector, digioot);
treeD->Fill();
- //
- if(sector[0]==1 || sector[0]==2){
- sectorL[0] = sector[0]+3;
- sectorL[1] = sector[1];
- for(Int_t res=0; res<2; res++){
- digioot[res] = Pedestal(sectorL[0], sectorL[1], res); // out-of-time ADCs
- }
- /*printf("\t DIGIToot added -> det = %d, quad = %d - digi[0,1] = [%d, %d]\n",
- sectorL[0], sectorL[1], digioot[0], digioot[1]); // Chiara debugging!
- */
- //
- new(pdigit) AliZDCDigit(sectorL, digioot);
- treeD->Fill();
- }
- //
}
}
// Adding out-of-time digits for 2 reference PTM signals (after out-of-time ch.)
*/
new(pdigit) AliZDCDigit(sectorRef, sigRefoot);
treeD->Fill();
-
}
//printf("\t AliZDCDigitizer -> TreeD has %d entries\n",(Int_t) treeD->GetEntries());
freeSpecN = specN-ntot-2*nAlpha;
freeSpecP = specP-ztot-2*nAlpha;
// Removing deuterons
- Int_t ndeu = (Int_t) (frag.DeuteronNumber());
+ Int_t ndeu = (Int_t) (freeSpecN*frag.DeuteronNumber());
freeSpecN -= ndeu;
//
if(freeSpecN<0) freeSpecN=0;
volume[0], volume[1], lightQ, lightC));
//printf("\n Volume = (%d, %d), lightQ = %.0f, lightC = %.0f",
// volume[0], volume[1], lightQ, lightC);
- if(volume[0] < 3) { // ZN or ZP
+ if(volume[0] != 3) { // ZN or ZP
pm[volume[0]-1][0] += lightC;
pm[volume[0]-1][volume[1]] += lightQ;
//printf("\n pm[%d][0] = %.0f, pm[%d][%d] = %.0f\n",(volume[0]-1),pm[volume[0]-1][0],
}
else {
if(volume[1] == 1) pm[2][1] += lightC; // ZEM 1
- else pm[2][2] += lightQ; // ZEM 2
+ else pm[2][2] += lightQ; // ZEM 2
//printf("\n pm[2][1] = %.0f, pm[2][2] = %.0f\n",pm[2][1],pm[2][2]);
}
}
{
// Evaluation of the ADC channel corresponding to the light yield Light
Int_t vADCch = (Int_t) (Light * fPMGain[Det-1][Quad] * fADCRes[Res]);
- //printf("\t Phe2ADCch -> det %d quad %d - phe %.0f ADC %d\n", Det,Quad,Light,ADCch);
+ //printf("\t Phe2ADCch -> det %d quad %d - phe %.0f ADC %d\n", Det,Quad,Light,vADCch);
return vADCch;
}
// Returns a pedestal for detector det, PM quad, channel with res.
//
Float_t pedValue;
-
// Normal run
if(fIsCalibration == 0){
- Float_t meanPed, pedWidth;
- Int_t index=0;
+ Int_t index=0, kNch=24;
if(Quad!=5){
- if(Det==1 || Det==2) index = 10*(Det-1)+Quad+5*Res; // ZN1, ZP1
- else if(Det==3) index = 10*(Det-1)+(Quad-1)+Res; // ZEM
- else if(Det==4 || Det==5) index = 10*(Det-2)+Quad+5*Res+4; // ZN2, ZP2
+ if(Det==1) index = Quad+kNch*Res; // ZNC
+ else if(Det==2) index = (Quad+5)+kNch*Res; // ZPC
+ else if(Det==3) index = (Quad+9)+kNch*Res; // ZEM
+ else if(Det==4) index = (Quad+12)+kNch*Res; // ZNA
+ else if(Det==5) index = (Quad+17)+kNch*Res; // ZPA
}
- else index = 10*(Quad-1)+(Det-1)*1/3+2*Res+4; // Reference PMs
+ else index = (Det-1)/3+22+kNch*Res; // Reference PMs
//
- meanPed = fPedData->GetMeanPed(index);
- pedWidth = fPedData->GetMeanPedWidth(index);
+ Float_t meanPed = fPedData->GetMeanPed(index);
+ Float_t pedWidth = fPedData->GetMeanPedWidth(index);
pedValue = gRandom->Gaus(meanPed,pedWidth);
//
- /*printf("\t Pedestal -> det = %d, quad = %d, res = %d - Ped[%d] = %d\n",
+ /*printf("\t AliZDCDigitizer::Pedestal -> det %d quad %d res %d - Ped[%d] = %d\n",
Det, Quad, Res, index,(Int_t) pedValue); // Chiara debugging!
*/
}