ROOT logo
void EvalAbso()
{
// Material numbers
    enum {kC=6, kAl=9, kFe=10, kCu=11, kW=12, kPb=13,
	  kNiCuW=21, kVacuum=16, kAir=15, kConcrete=17,
	  kPolyCH2=18, kSteel=10, kInsulation=14, kPolyCc=20};	   

    AliABSO *pABSO  = (AliABSO*) gAlice->GetModule("ABSO");

    Int_t nl[2];
    nl[0] = pABSO->NumberOfLayers(0);
    nl[1] = pABSO->NumberOfLayers(1);    
    
    Int_t   mat[2][15],  mat[2][15];
    Float_t zmin[2][15], zmin[2][15], zmax[2][15], zmax[2][15];
    Int_t i, j;

    for (j=0; j<   2; j++) {
	for (i=0; i< nl[j]; i++) {
	    mat[j][i]  = pABSO->MaterialOfLayer(j,i)-1599;
	    zmax[j][i] = pABSO->ZPositionOfLayer(j,i);
	    if (i+1 < nl[j]) zmin[j][i+1] = pABSO->ZPositionOfLayer(j,i);
	}
	zmin[j][0]=0.;
    }
    Float_t l = zmax[0][nl[0]-1];


//

//
// 1. Limiting angular resolution in the Branson formalism
//
    Float_t f0,f1,f2;
    Float_t a, z, dens, radl, absl;
    char  name[21];

    for (j=0; j< 2; j++) {
	printf("\n                        A            Z           ZPos         DZ            dens        radL        absL");
	printf("\n==================================================================================");
	f0=f1=f2=0;
	for (i=0; i< nl[j]; i++) {
	    pABSO->AliGetMaterial(mat[j][i], name, a, z, dens, radl, absl);
	    Float_t dz = zmax[j][i]-zmin[j][i];
	    f0 += dz/radl;
	    f1 += dz/(2.*radl)*(2.*zmin[j][i]+dz);
	    f2 += dz/(3.*radl)*(3.*zmin[j][i]*zmin[j][i]+3.*dz*zmin[j][i]+dz*dz);	
	    printf("\n %3d %14s %12.3f %12.3f %12.3f %12.3f %12.3f %12.3f %12.3f",
		   i+1, name, a, z, (zmax[j][i]+zmin[j][i])/2., dz, dens, radl, absl);
	}
//  
	Float_t deltaThetaB = 0.0136  * TMath::Sqrt(f0-f1*f1/f2);
	Float_t lBranson    = f2/f1;
	printf("\n==================================================================================");
	printf("\n Branson plane:                              %12.3f (cm)", lBranson);
	printf("\n Limiting resolution (Branson)             : %12.3f (mrad)", deltaThetaB*1000.);
    }
//
//  2. Limiting Resolution as a function of thickness of extra Fe
//
    Float_t zmin0[15], zmax0[15];
    Float_t x[100], y[100];

    for (i=0; i< nl[0]; i++) {
	zmin0[i] = zmin[0][i];
	zmax0[i] = zmax[0][i];	
    }
    
    Float_t ds = (zmax[0][3]-zmin[0][2])/100.;
    Int_t j;
    
    for (j=0; j< 100; j++) {
	f0=f1=f2=0;
	Float_t zFe = zmin[0][2]+Float_t(j)*ds;
	zmax0[2]=zFe;
	zmin0[3]=zFe;
	for (i=0; i< nl[0]; i++) {
	    Float_t a, z, dens, radl, absl;
	    pABSO->AliGetMaterial(mat[0][i], name, a, z, dens, radl, absl);
	    Float_t dz = zmax0[i]-zmin0[i];
	    f0 += dz/radl;
	    f1 += dz/(2.*radl)*(2.*zmin0[i]+dz);
	    f2 += dz/(3.*radl)*(3.*zmin0[i]*zmin0[i]+3.*dz*zmin0[i]+dz*dz);	
	}
	Float_t deltaThetaB = 0.0136  * TMath::Sqrt(f0-f1*f1/f2);
	x[j] = zmax[0][3]-zFe;
	y[j] = deltaThetaB*1000.;
    }
    TGraph *sGraph = new TGraph(100, x, y);
    TCanvas *c = new TCanvas("c","  ",400,10,600,700);
    c->Divide(2,2);
    c->cd(1);
    sGraph->Draw("AC");
    c->Update();
//
// 3. Limiting Resolution as a function of density of Carbon
//
    Float_t dRho = (2.5-1.5)/100.;

    for (j=0; j< 100; j++) {
	f0=f1=f2=0;
	Float_t rho = 1.5 + Float_t(j)*dRho;
	for (i=0; i< nl[0]; i++) {
	    Float_t a, z, dens, radl, absl;
	    pABSO->AliGetMaterial(mat[0][i], name, a, z, dens, radl, absl);
	    if (i==1) radl*=1.75/rho;
	    Float_t dz = zmax[0][i]-zmin[0][i];
	    f0 += dz/radl;
	    f1 += dz/(2.*radl)*(2.*zmin[0][i]+dz);
	    f2 += dz/(3.*radl)*(3.*zmin[0][i]*zmin[0][i]+3.*dz*zmin[0][i]+dz*dz);	
	}
	deltaThetaB = 0.0136  * TMath::Sqrt(f0-f1*f1/f2);
	x[j] = rho;
	y[j] = deltaThetaB*1000.;
    }
    TGraph *dGraph = new TGraph(100, x, y);
    c->cd(2);
    dGraph->Draw("AC");
    c->Update();

//
//   4. Energy Loss
//
//
    TCanvas *c1 = new TCanvas("c1","  ",400,10,600,700);
    c1->Divide(2,2);
 
    const Float_t kAvo=0.60221367;

    char* tmp;
    tmp = new char[5];
    strncpy(tmp, "LOSS", 4);
    tmp[4]='\0';

    Int_t ixst;
    Float_t ekin[100], dedx[100], de[100], pcut[100], deRad[100];
    Float_t emin =   2;    
    Float_t emax = 200;
    Float_t eps = (emax-emin)/100.;
//  3 < theta < 9
    for (j=0; j< 100; j++) {
	ekin[j] = emin + Float_t(j)*eps;
	de[j]=0;
	deRad[j]=0;
    }
// all losses    
    for (i=0; i< nl[0]; i++) {
	((TGeant3*) gMC)->Gftmat(pABSO->GetMatId(mat[0][i]), 5, tmp, 100, ekin, dedx, pcut, ixst);
	for (j=0; j< 100; j++) de[j]+=dedx[j]*(zmax[0][i]-zmin[0][i])/1000.;
    }
// radative losses
    for (i=0; i< nl[0]; i++) {
	Float_t a, z, dens, radl, absl;
	pABSO->AliGetMaterial(mat[0][i], name, a, z, dens, radl, absl);
	for (Int_t j=0; j<100; j++) {
	    Float_t nor= kAvo*dens/a*(zmax[0][i]-zmin[0][i]);
	    deRad[j] += (((TGeant3*) gMC)->Gbrelm(z,ekin[j],1.e10))*nor;
	    deRad[j] += (((TGeant3*) gMC)->Gprelm(z,ekin[j],1.e10))*nor;
	}
    }
    
    TH2F *hr = new TH2F("hr1","Several graphs in the same pad",2,0,15,2,0,5);
    hr->SetXTitle("X title");
    hr->SetYTitle("Y title");
    c1->cd(1);
    hr->Draw();

    TGraph *eGraph1  = new TGraph(100, ekin, de);
    TGraph *eGraphR1 = new TGraph(100, ekin, deRad);

    eGraph1 ->Draw("LP");
    eGraphR1->Draw("LP");

    hr = new TH2F("hr2","Several graphs in the same pad",2,15,200,2,0,5);
    c1->cd(2);
    hr->Draw();
    eGraph1 ->Draw("LP");
    eGraphR1->Draw("LP");
    

//  2 < theta < 3
    for (j=0; j< 100; j++) {
	ekin[j] = emin + Float_t(j)*eps;
	de[j]=0;
	deRad[j]=0;
    }
// all losses    
    for (i=0; i< nl[1]; i++) {
	((TGeant3*) gMC)->Gftmat(pABSO->GetMatId(mat[1][i]), 5, tmp, 100, ekin, dedx, pcut, ixst);
	for (j=0; j< 100; j++) de[j]+=dedx[j]*(zmax[1][i]-zmin[1][i])/1000.;
    }
// radative losses
    for (i=0; i< nl[1]; i++) {
	Float_t a, z, dens, radl, absl;
	pABSO->AliGetMaterial(mat[1][i], name, a, z, dens, radl, absl);
	for (Int_t j=0; j<100; j++) {
	    Float_t nor= kAvo*dens/a*(zmax[1][i]-zmin[1][i]);
	    deRad[j] += (((TGeant3*) gMC)->Gbrelm(z,ekin[j],1.e10))*nor;
	    deRad[j] += (((TGeant3*) gMC)->Gprelm(z,ekin[j],1.e10))*nor;
	}
    }

    TH2F *hr2 = new TH2F("hr3","Several graphs in the same pad",2,0,15,2,0,5);
    hr2->SetXTitle("X title");
    hr2->SetYTitle("Y title");
    c1->cd(3);
    hr2->Draw();

    TGraph *eGraph2  = new TGraph(100, ekin, de);
    TGraph *eGraphR2 = new TGraph(100, ekin, deRad);

    eGraph2 ->Draw("LP");
    eGraphR2->Draw("LP");

    hr2 = new TH2F("hr4","Several graphs in the same pad",2,15,200,2,0,5);
    c1->cd(4);
    hr2->Draw();
    eGraph2 ->Draw("LP");
    eGraphR2->Draw("LP");


    c->Update();

}




 EvalAbso.C:1
 EvalAbso.C:2
 EvalAbso.C:3
 EvalAbso.C:4
 EvalAbso.C:5
 EvalAbso.C:6
 EvalAbso.C:7
 EvalAbso.C:8
 EvalAbso.C:9
 EvalAbso.C:10
 EvalAbso.C:11
 EvalAbso.C:12
 EvalAbso.C:13
 EvalAbso.C:14
 EvalAbso.C:15
 EvalAbso.C:16
 EvalAbso.C:17
 EvalAbso.C:18
 EvalAbso.C:19
 EvalAbso.C:20
 EvalAbso.C:21
 EvalAbso.C:22
 EvalAbso.C:23
 EvalAbso.C:24
 EvalAbso.C:25
 EvalAbso.C:26
 EvalAbso.C:27
 EvalAbso.C:28
 EvalAbso.C:29
 EvalAbso.C:30
 EvalAbso.C:31
 EvalAbso.C:32
 EvalAbso.C:33
 EvalAbso.C:34
 EvalAbso.C:35
 EvalAbso.C:36
 EvalAbso.C:37
 EvalAbso.C:38
 EvalAbso.C:39
 EvalAbso.C:40
 EvalAbso.C:41
 EvalAbso.C:42
 EvalAbso.C:43
 EvalAbso.C:44
 EvalAbso.C:45
 EvalAbso.C:46
 EvalAbso.C:47
 EvalAbso.C:48
 EvalAbso.C:49
 EvalAbso.C:50
 EvalAbso.C:51
 EvalAbso.C:52
 EvalAbso.C:53
 EvalAbso.C:54
 EvalAbso.C:55
 EvalAbso.C:56
 EvalAbso.C:57
 EvalAbso.C:58
 EvalAbso.C:59
 EvalAbso.C:60
 EvalAbso.C:61
 EvalAbso.C:62
 EvalAbso.C:63
 EvalAbso.C:64
 EvalAbso.C:65
 EvalAbso.C:66
 EvalAbso.C:67
 EvalAbso.C:68
 EvalAbso.C:69
 EvalAbso.C:70
 EvalAbso.C:71
 EvalAbso.C:72
 EvalAbso.C:73
 EvalAbso.C:74
 EvalAbso.C:75
 EvalAbso.C:76
 EvalAbso.C:77
 EvalAbso.C:78
 EvalAbso.C:79
 EvalAbso.C:80
 EvalAbso.C:81
 EvalAbso.C:82
 EvalAbso.C:83
 EvalAbso.C:84
 EvalAbso.C:85
 EvalAbso.C:86
 EvalAbso.C:87
 EvalAbso.C:88
 EvalAbso.C:89
 EvalAbso.C:90
 EvalAbso.C:91
 EvalAbso.C:92
 EvalAbso.C:93
 EvalAbso.C:94
 EvalAbso.C:95
 EvalAbso.C:96
 EvalAbso.C:97
 EvalAbso.C:98
 EvalAbso.C:99
 EvalAbso.C:100
 EvalAbso.C:101
 EvalAbso.C:102
 EvalAbso.C:103
 EvalAbso.C:104
 EvalAbso.C:105
 EvalAbso.C:106
 EvalAbso.C:107
 EvalAbso.C:108
 EvalAbso.C:109
 EvalAbso.C:110
 EvalAbso.C:111
 EvalAbso.C:112
 EvalAbso.C:113
 EvalAbso.C:114
 EvalAbso.C:115
 EvalAbso.C:116
 EvalAbso.C:117
 EvalAbso.C:118
 EvalAbso.C:119
 EvalAbso.C:120
 EvalAbso.C:121
 EvalAbso.C:122
 EvalAbso.C:123
 EvalAbso.C:124
 EvalAbso.C:125
 EvalAbso.C:126
 EvalAbso.C:127
 EvalAbso.C:128
 EvalAbso.C:129
 EvalAbso.C:130
 EvalAbso.C:131
 EvalAbso.C:132
 EvalAbso.C:133
 EvalAbso.C:134
 EvalAbso.C:135
 EvalAbso.C:136
 EvalAbso.C:137
 EvalAbso.C:138
 EvalAbso.C:139
 EvalAbso.C:140
 EvalAbso.C:141
 EvalAbso.C:142
 EvalAbso.C:143
 EvalAbso.C:144
 EvalAbso.C:145
 EvalAbso.C:146
 EvalAbso.C:147
 EvalAbso.C:148
 EvalAbso.C:149
 EvalAbso.C:150
 EvalAbso.C:151
 EvalAbso.C:152
 EvalAbso.C:153
 EvalAbso.C:154
 EvalAbso.C:155
 EvalAbso.C:156
 EvalAbso.C:157
 EvalAbso.C:158
 EvalAbso.C:159
 EvalAbso.C:160
 EvalAbso.C:161
 EvalAbso.C:162
 EvalAbso.C:163
 EvalAbso.C:164
 EvalAbso.C:165
 EvalAbso.C:166
 EvalAbso.C:167
 EvalAbso.C:168
 EvalAbso.C:169
 EvalAbso.C:170
 EvalAbso.C:171
 EvalAbso.C:172
 EvalAbso.C:173
 EvalAbso.C:174
 EvalAbso.C:175
 EvalAbso.C:176
 EvalAbso.C:177
 EvalAbso.C:178
 EvalAbso.C:179
 EvalAbso.C:180
 EvalAbso.C:181
 EvalAbso.C:182
 EvalAbso.C:183
 EvalAbso.C:184
 EvalAbso.C:185
 EvalAbso.C:186
 EvalAbso.C:187
 EvalAbso.C:188
 EvalAbso.C:189
 EvalAbso.C:190
 EvalAbso.C:191
 EvalAbso.C:192
 EvalAbso.C:193
 EvalAbso.C:194
 EvalAbso.C:195
 EvalAbso.C:196
 EvalAbso.C:197
 EvalAbso.C:198
 EvalAbso.C:199
 EvalAbso.C:200
 EvalAbso.C:201
 EvalAbso.C:202
 EvalAbso.C:203
 EvalAbso.C:204
 EvalAbso.C:205
 EvalAbso.C:206
 EvalAbso.C:207
 EvalAbso.C:208
 EvalAbso.C:209
 EvalAbso.C:210
 EvalAbso.C:211
 EvalAbso.C:212
 EvalAbso.C:213
 EvalAbso.C:214
 EvalAbso.C:215
 EvalAbso.C:216
 EvalAbso.C:217
 EvalAbso.C:218
 EvalAbso.C:219
 EvalAbso.C:220
 EvalAbso.C:221
 EvalAbso.C:222
 EvalAbso.C:223
 EvalAbso.C:224
 EvalAbso.C:225
 EvalAbso.C:226
 EvalAbso.C:227
 EvalAbso.C:228
 EvalAbso.C:229