ROOT logo
/////////////////////////////////////////////////////////////////////////
//   This macro is a small example of a ROOT macro
//   illustrating how to read the hits in ACORDE,
//   fill some histograms and store it on a file
//
//   Author:
//
//	Eleazar Cuautle <ecuautle@nucleares.unam.mx>
//
//   Also:
//
//	Mario Rodriguez Cahuantzi <mrodrigu@mail.cern.ch>
//             
/////////////////////////////////////////////////////////////////////////

void TestACORDEHits (const char *filename="galice.root",Int_t numberOfEvents=0){
   // delete existing gAlice
  // Dynamically link some shared libs
  if (gClassTable->GetID("AliRun") < 0) 
    {
      gROOT->LoadMacro("loadlibs.C");
      loadlibs();
    }
  if (gAlice)
    {
      //delete gAlice->GetRunLoader();
      delete gAlice;
      gAlice = 0x0;
    }
  
  AliRunLoader *rl = AliRunLoader::Open("galice.root",
					AliConfig::GetDefaultEventFolderName(),"read");
  if (!rl)
    {
      cerr<<"Can't load RunLoader from file! \n";      return 0x0;
    }
  
  rl->LoadgAlice();
  gAlice = rl->GetAliRun();
  if (!gAlice)
    {
      cerr << " AliRun object not found on file \n";     return 0x0; 
    }
  rl->LoadHeader();
  
  // Get the pointer to the ACORDE detector
  AliLoader *acordel = rl->GetLoader("ACORDELoader");
  AliACORDE *ACORDE = (AliACORDE *) gAlice->GetDetector("ACORDE");
  if (ACORDE == 0x0 || acordel == 0x0) {
    cerr << " Can not find ACORDE or ACORDELoader \n";    return 0x0;  
  }
  //Determine how many events would you like to analyze
  if (numberOfEvents==0) numberOfEvents=(Int_t)(rl->GetNumberOfEvents());
  
  //create histograms

  TH1F	*fACORDEEnergy = new TH1F("fACORDEEnergy","Energy distribution of muons generated by AliGenCosmicParam at z = 900 cms (Just above ACORDE); Energy (GeV)",1200,0,360);
  TH1F	*fACORDEEnergyLoss = new TH1F("fACORDEEnergyLoss","Loss energy distribution  of muons generated by AliGenCosmicParam at z = 900 cms (Just above ACORDE);Energy loss (Gev)",100,0,0.030);
  TH1F	*fACORDEAzimuth = new TH1F("fACORDEAzimuth","Azimuth angle distribution of muons generated by AliGenCosmicParam at z = 900 cms (Just above ACORDE); Azimuth angle",360,-180,180);
  TH1F	*fACORDEPolar = new TH1F("fACORDEPolar","Polar angle distribution  of muons generated by AliGenCosmicParam at z = 900 cms (Just above ACORDE); Polar angle",180,0,180);
  TH2F  *fACORDExz = new TH2F("fACORDExz" ,"Distribution XZ  of muons generated by AliGenCosmicParam at z = 900 cms (Just above ACORDE); X (cms); Z (cms) ",900,-850.,850.,1200,-500.,500.); 
  TH2F  *fACORDEAzimPol =  new TH2F("fACORDEAzimPol" ,"Azimuth vs Polar angle distribution ",360,-180.,180.,180,0.,180.);
  TH1F  *fACORDEPx = new TH1F("fACORDEPx" ,"P_{x} distribution  of muons generated by AliGenCosmicParam at z = 900 cms (Just above ACORDE);GeV/c;dN/dP_{x}",60,-120.,120.);
  TH1F  *fACORDEPy = new TH1F("fACORDEPy" ,"P_{y} distribution  of muons generated by AliGenCosmicParam at z = 900 cms (Just above ACORDE);GeV/c;dN/dP_{y}",60,-120.,120.);
  TH1F  *fACORDEPz = new TH1F("fACORDEPz" ,"P_{z} distribution  of muons generated by AliGenCosmicParam at z = 900 cms (Just above ACORDE);GeV/c;dN/dP_{z}",60,-120.,120.);
  TH1F  *fACORDEPt = new TH1F("fACORDEPt" ,"P_{t} distribution  of muons generated by AliGenCosmicParam at z = 900 cms (Just above ACORDE);GeV/c;dN/dP_{t}",1200,0.,360.);
  TH2F  *fELossAzimuth = new TH2F("fELossAzimuth","Dist. Azimuth Angle VS Energy Loss; Azimuth angle; Energy (GeV)",360,0,350,100,0,0.030); 
  TH2F  *fEnergyAzimuth = new TH2F("fEnergyAzimuth","Dist. Azimuth Angle VS Energy; Azimuth angle; Energy (GeV)",360,0,360,300,0,350); 
  TH2F  *fELossPolar = new TH2F("fELossPolar","Dist. Polar Angle VS Energy Loss; Polar angle; Energy (GeV)",180,0,180,100,0,0.030); 
  TH2F  *fEnergyPolar = new TH2F("fEnergyPolar","Dist. Polar Angle VS Energy; Polar angle; Energy (GeV)",180,0,180,300,0,350); 

 //------------------------------------------------------------------//
  
  for (Int_t ievent=0; ievent<numberOfEvents; ievent++) {
    if ((ievent%10) == 0)  printf ("Processing event %d \n", ievent);
    rl->GetEvent(ievent);
    
    // Get the pointer Hit tree
    acordel->LoadHits();
    TTree *hitTree = acordel->TreeH();
    ACORDE->SetTreeAddress();
    if (!hitTree) {
      cout << " No TreeH found" << endl;      return 0x0; //rc;
    }
    
    rl->LoadKinematics();
    Int_t nTrack = (Int_t) hitTree->GetEntries();
    //    cout <<"<AliACORDEanalyzeHits> Found "<< nTrack <<" primary particles with hits \n";
    
    // Start loop on tracks in the hits containers
    for(Int_t iTrack=0; iTrack<nTrack;iTrack++){
      ACORDE->ResetHits();
      hitTree->GetEvent(iTrack);          
      if(ACORDE) {	 
	for(acordeHit=(AliACORDEhit*)ACORDE->FirstHit(-1);acordeHit;
	    acordeHit=(AliACORDEhit*)ACORDE->NextHit()) {
		fACORDEEnergy->Fill(acordeHit->Energy());
		fACORDEEnergyLoss->Fill(acordeHit->Eloss());
		fACORDEAzimuth->Fill(acordeHit->AzimuthAngle());
		fACORDEPolar->Fill(acordeHit->PolarAngle());
		fACORDExz->Fill(acordeHit->X(),acordeHit->Z());
         	fELossAzimuth->Fill((Float_t)(acordeHit->AzimuthAngle()),(Float_t)(acordeHit->Eloss()));
 		fACORDEPx->Fill( (Float_t)(acordeHit->Px()));
	 	fACORDEPy->Fill( (Float_t)(acordeHit->Py()));
	  	fACORDEPz->Fill( (Float_t)(acordeHit->Pz()));
	 	fACORDEPt->Fill( TMath::Sqrt( (acordeHit->Px())*(acordeHit->Px())+
					     (acordeHit->Py())*(acordeHit->Py())) );
	  	fACORDEAzimPol->Fill( (Float_t)(acordeHit->AzimuthAngle()),
			        (Float_t)(acordeHit->PolarAngle()));
		fEnergyAzimuth->Fill(acordeHit->Energy(),acordeHit->AzimuthAngle());
		fEnergyPolar->Fill(acordeHit->Energy(),acordeHit->PolarAngle());
		fELossPolar->Fill(acordeHit->PolarAngle(),acordeHit->Eloss());
	//cout << "Muon triggered by ACORDE "<<endl;
	//cout << "Energy: "<<acordeHit->Energy()<<" EnergyLoss: "<<acordeHit->Eloss()<<" Polar angle: "<<acordeHit->PolarAngle()<<" Azimuth angle: "<<acordeHit->AzimuthAngle()<<endl;

	} // end for acordeHits
      } // end if ACORDE
    } // end for iTrack  
  }

 // Put the histograms in a TCanvas

	TCanvas *c1 = new TCanvas("c1","ACORDE Hits distribution of muons generated by AliGenCosmicParam at z = 900 cms (Just above ACORDE)");
	c1->Divide(2,1);

	c1->cd(1)->SetLogy();
	fACORDEEnergy->SetMarkerStyle(kFullCircle);
	fACORDEEnergy->SetMarkerSize(0.7);
	fACORDEEnergy->Draw("E");

	c1->cd(2)->SetLogy();
	fACORDEEnergyLoss->SetMarkerStyle(kFullCircle);
	fACORDEEnergyLoss->SetMarkerSize(0.7);
	fACORDEEnergyLoss->Draw("E");
	
	c1->Draw();

	TCanvas *c2 = new TCanvas("c2","ACORDE Hits distribution of muons generated by AliGenCosmicParam at z = 900 cms (Just above ACORDE)");
	c2->Divide(2,2);
	c2->cd(1);
	fACORDEAzimuth->Draw();

	c2->cd(2);
	fACORDEPolar->Draw();

	c2->cd(3);
	gStyle->SetPalette(1);
	fACORDExz->DrawCopy("colz");
	
	c2->cd(4);
	gStyle->SetPalette(1);
	fACORDEAzimPol->DrawCopy("colz");

	c2->Draw();

	TCanvas *c3 = new TCanvas("c3","ACORDE Hits distribution of muons generated by AliGenCosmicParam at z = 900 cms (Just above ACORDE)");
	c3->Divide(2,2);

	c3->cd(1)->SetLogy();
	fACORDEPx->SetMarkerStyle(kFullCircle);
	fACORDEPx->SetMarkerSize(0.7);
	fACORDEPx->Draw("E");

	c3->cd(2)->SetLogy();
	fACORDEPy->SetMarkerStyle(kFullCircle);
	fACORDEPy->SetMarkerSize(0.7);
	fACORDEPy->Draw("E");

	c3->cd(3)->SetLogy();
	fACORDEPz->SetMarkerStyle(kFullCircle);
	fACORDEPz->SetMarkerSize(0.7);
	fACORDEPz->Draw("E");

	c3->cd(4)->SetLogy();
	fACORDEPt->SetMarkerStyle(kFullCircle);
	fACORDEPt->SetMarkerSize(0.7);
	fACORDEPt->Draw("E");

	c3->Draw();

	TCanvas *c4 = new TCanvas("c4","ACORDE Hits distribution of muons generated by AliGenCosmicParam at z = 900 cms (Just above ACORDE)");
	c4->Divide(2,2);

	c4->cd(1);
	gStyle->SetPalette(1);
	fEnergyPolar->DrawCopy("colz");

	c4->cd(2);
	gStyle->SetPalette(1);
	fEnergyAzimuth->DrawCopy("colz");

	c4->cd(3);
	gStyle->SetPalette(1);
	fELossPolar->DrawCopy("colz");

	c4->cd(4);
	gStyle->SetPalette(1);
	fELossAzimuth->DrawCopy("colz");
	
	c4->Draw();


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