ROOT logo
AliGenerator*  CreateGenerator();

void fastGenQuarkonia(Int_t nev = 1, char* filename = "galice.root")
{
//  Update data base
    AliPDG::AddParticlesToPdgDataBase();
    
// Create the fast tracker
    AliFastMuonTriggerEff *trigeff = new AliFastMuonTriggerEff();
    AliFastMuonTrackingAcc *acc = new AliFastMuonTrackingAcc();
    AliFastMuonTrackingEff *eff = new AliFastMuonTrackingEff();
    AliFastMuonTrackingRes *res = new AliFastMuonTrackingRes();
    acc->SetBackground(0);
    eff->SetBackground(0);
    res->SetBackground(0);  
    acc->Init(); 
    eff->Init(); 
    res->Init(); 
    AliFastDetector* tracker = new AliFastDetector("Tracker", "Muon Tracker");
    tracker->AddResponse(trigeff);
    tracker->AddResponse(acc);
    tracker->AddResponse(eff);
    tracker->AddResponse(res);
    tracker->Init();
    tracker->Dump();
//  Histos
    TH1F* massHU = new TH1F("massHU", "Mass Spectrum:                ", 500, 5, 15.);
    TH1F* massHS = new TH1F("massHS", "Mass Spectrum Smeared:        ", 500, 5, 15.);
    TH2F* etaH   = new TH2F("etaH",   "eta vs etas        ", 100, 0., 5., 100, 0., 5.);
    TH1F* etadH  = new TH1F("etaH",   "eta vs etas        ", 100, -1., 1.);
//
//                        Construction
//
    AliRunLoader* rl = AliRunLoader::Open("galice.root","FASTRUN","recreate");
    
    rl->SetCompressionLevel(2);
    rl->SetNumberOfEventsPerFile(nev);
    rl->LoadKinematics("RECREATE");
    rl->MakeTree("E");
    gAlice->SetRunLoader(rl);

//  Create stack
    rl->MakeStack();
    AliStack* stack      = rl->Stack();
 
//  Header
    AliHeader* header = rl->GetHeader();
//
//  Create and Initialize Generator
    AliGenerator *gener = CreateGenerator();
    gener->Init();
    gener->SetStack(stack);
    
//
//                        Event Loop
//
    Int_t iev;
     
    for (iev = 0; iev < nev; iev++) {

	printf("\n \n Event number %d \n \n", iev);
	

//  Initialize event
	header->Reset(0,iev);
	rl->SetEventNumber(iev);
	stack->Reset();
	rl->MakeTree("K");
//  Generate event
	gener->Generate();
		
//  Analysis
	Int_t npart = stack->GetNprimary();
	for (Int_t part=0; part<npart; part++) {
	    TParticle *MPart = stack->Particle(part);
	    Int_t mpart  = MPart->GetPdgCode();
	    if (mpart != 553 && mpart != 100553 && mpart != 200553) continue;
	    Int_t ch1 = MPart->GetFirstDaughter();
	    Int_t ch2 = MPart->GetLastDaughter();
	    
	    TParticle *muon1 = stack->Particle(ch1);
	    TParticle *muon2 = stack->Particle(ch2);
	    
	    Float_t theta1 = muon1->Theta();
	    Float_t thetad1 = theta1 * 180./TMath::Pi();
	    Float_t eta1   = muon1->Eta();
	    Float_t pt1    = muon1->Pt();
	    Float_t phi1   = muon1->Phi();
	    Float_t phid1  = phi1 * 180./TMath::Pi() - 180.;
	    Float_t p1     = muon1->P();

	    if (thetad1 > 9. || thetad1 < 2.) continue;

	    Float_t theta2 = muon2->Theta();
	    Float_t thetad2 = theta2 * 180./TMath::Pi();
	    Float_t eta2   = muon2->Eta();
	    Float_t pt2    = muon2->Pt();
	    Float_t phi2   = muon2->Phi();
	    Float_t phid2  = phi2 * 180./TMath::Pi() - 180.;
	    Float_t p2     = muon2->P();


	    if (thetad2 > 9. || thetad2 < 2.) continue;	    
	    
	    Float_t dphi   = phi1 - phi2;
	    Float_t deta   = eta1 - eta2;
	    Float_t m      =  TMath::Sqrt(2. * pt1 * pt2 * (TMath::CosH(deta) - TMath::Cos(dphi)));

	    massHU->Fill(m);
// Smear
	    // the mu+
	    Float_t thetas1, phis1, ps1, thetas2, phis2, ps2, pts1, pts2, etas1, etas2;
	    Float_t trigeffpL, trigeffpH, trigeffnL, trigeffnH, trigeffnA;
	    
	    res->SetCharge(1);
	    eff->SetCharge(1);
	    acc->SetCharge(1);
	    res->Evaluate(p1, thetad1, phid1, ps1, thetas1, phis1);

	    
	    Float_t effp     = eff->Evaluate(pt1, thetad1, phid1);
	    Float_t accp     = acc->Evaluate(pt1, thetad1, phid1);
	    trigeff->Evaluate(1, pt1, thetad1, phid1, trigeffpL, trigeffpH, trigeffnA);
	    thetas1 *= TMath::Pi()/180.;
	    phis1 *= TMath::Pi()/180.;
	    Float_t etas;
	    
	    if (TMath::Tan(thetas1/2.) > 0.) {
		etas  = -TMath::Log(TMath::Tan(thetas1/2.));
		etaH->Fill(etas, eta1);
		etadH->Fill(etas-eta1);
	    }
	    
	    // the mu- 
	    res->SetCharge(-1);
	    acc->SetCharge(-1);
	    eff->SetCharge(-1);
	    res->Evaluate(p2, thetad2, phid2, ps2, thetas2, phis2);
	    Float_t effn     = eff->Evaluate(pt2, thetad2, phid2);
	    Float_t accn     = acc->Evaluate(pt2, thetad2, phid2);
	    trigeff->Evaluate(-1, pt2, thetad2, phid2, trigeffnL, trigeffnH, trigeffnA);
	    thetas2 *= TMath::Pi()/180.;
	    phis2 *= TMath::Pi()/180.;
	    if (TMath::Tan(thetas2/2.) > 0) {
		etas  = -TMath::Log(TMath::Tan(thetas2/2.));
		etaH->Fill(etas, eta2);
		etadH->Fill(etas-eta2);
	    }
	    
	    dphi   = phis1 - phis2;
	    etas1  = - TMath::Log(TMath::Abs(TMath::Tan(thetas1/2.)+1e-4));
	    etas2  = - TMath::Log(TMath::Abs(TMath::Tan(thetas2/2.)+1e-4));	    
	    deta   = etas1 - etas2;
	    pts1   = ps1 * TMath::Sin(thetas1);
	    pts2   = ps2 * TMath::Sin(thetas2);	    
	    
	    m      =  TMath::Sqrt(2. * pts1 * pts2 * (TMath::CosH(deta) - TMath::Cos(dphi)));
	    Float_t wgt = effn * effp * accn * accp * trigeffpH * trigeffnH;
	    printf("Mass %f\n", m);
	    if (pts1 > 0. && pts2 > 0.)
	    massHS->Fill(m, wgt);
	}
	
//  Finish event
//      I/O
//	
	stack->FinishEvent();
	header->SetStack(stack);
	rl->TreeE()->Fill();
	header->SetNprimary(stack->GetNprimary());
	header->SetNtrack(stack->GetNtrack());  
	rl->WriteKinematics("OVERWRITE");
    } // event loop
    TCanvas *c1 = new TCanvas("c1","Canvas 1",400,10,600,700);
    massHU->Draw();
    massHS->Draw("same");

    TCanvas *c2 = new TCanvas("c2","Canvas 2",400,10,600,700);
    etaH->Draw();
    
//
//                         Termination
//  Generator
    gener->FinishRun();
//  Stack
    stack->FinishRun();
//  Write file
    rl->WriteHeader("OVERWRITE");
    gener->Write();
    rl->Write();
}


AliGenerator*  CreateGenerator()
{
    AliGenParam *gener 
	= new AliGenParam(2000, AliGenMUONlib::kUpsilon, "");
        
    gener->SetMomentumRange(0,999);
    gener->SetPtRange(0,100.);
    gener->SetPhiRange(0., 360.);
    gener->SetYRange(2.5,4);
    gener->SetCutOnChild(1);
    gener->SetChildThetaRange(2.0,9.);
    gener->SetForceDecay(kDiMuon);

    AliDecayer *decayer = new AliDecayerPythia();
    decayer->SetForceDecay(kAll);
    decayer->Init();
    gener->SetDecayer(decayer);
    gener->Init();
    
    gener->Draw();
    
    return gener;
}












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