StRoot  1
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
runEEmcSlowMaker.C
1 class StChain;
3 
4 class StEEmcDb;
5 class StMuDstMaker;
6 class TChain;
7 class TObjArray;
8 
9 class StEEmcA2EMaker;
10 
11 
12 StEEmcDb *myDb;
13 StMuDstMaker* muMk;
14 StChain *chain=0;
15 TObjArray *HList;
16 
17 StEEmcA2EMaker *mEEbefore;
18 StEEmcA2EMaker *mEEafter;
19 
20 // Comment out the line below to read EEMC data from StEvent (default is MuDst)
21 #define useMuDst
22 
23 int runEEmcSlowMaker( int nEve=2000 ){
24 
25  int firstSec=1;
26  int lastSec=12;
27 
28  Int_t nFiles=10;
29 
30 #ifdef useMuDst
31  char* file="rcf1308_01_2000evts.MuDst.root";
32 #else
33  char* file="rcf1308_01_2000evts.event.root";
34 #endif
35  char* inDir="/star/data47/reco/pp200/pythia6_410/11_15gev/cdf_a/y2006c/gheisha_on/p07ic/";
36 
37 #ifdef useMuDst
38  char *outname="mudst";
39 #else
40  char *outname="stevent";
41 #endif
42  TString fullName=file;
43 
44  gROOT->LoadMacro("$STAR/StRoot/StMuDSTMaker/COMMON/macros/loadSharedLibraries.C");
45  loadSharedLibraries();
46  gROOT->Macro("LoadLogger.C");
47  cout << " loading done " << endl;
48  //gSystem->Load("StDbLib");
49  gSystem->Load("StDbBroker");
50  gSystem->Load("St_db_Maker");
51  gSystem->Load("StEEmcUtil");
52  gSystem->Load("StEEmcDbMaker");
53  gSystem->Load("StEEmcSimulatorMaker");
54  gSystem->Load("StEEmcA2EMaker");
55 
56  // create chain
57  chain = new StChain("StChain");
58 
59  printf("adding MuDst/StEvent from run '%s' ....\n",fullName.Data());
60 
61  // Now we add Makers to the chain...
62 #ifdef useMuDst
63  StMuDstMaker* muMk = new StMuDstMaker(0,0,inDir,fullName,".MuDst.root",nFiles);
64  TChain* tree=muMk->chain(); assert(tree);
65  int nEntries=tree->GetEntries();
66  printf("total eve in chain =%d\n",nEntries);
67 #else
68  StIOMaker* ioMaker = new StIOMaker;
69  ioMaker->SetFile(gSystem->ConcatFileName(inDir, file));
70  ioMaker->SetBranch("*", 0, "0");
71  ioMaker->SetBranch("eventBranch", 0, "r");
72  ioMaker->SetBranch("geantBranch", 0, "r");
73  Int_t nEntries=nEve;
74 #endif
75 
76  St_db_Maker *stDb = new St_db_Maker("StarDb", "MySQL:StarDb");
77  stDb->SetDateTime(20031120,0);
78  stDb->SetFlavor("sim","eemcPMTcal");
79  stDb->SetFlavor("sim","eemcPIXcal");
80  stDb->SetFlavor("sim","eemcPMTped");
81  stDb->SetFlavor("sim","eemcPMTstat");
82  stDb->SetFlavor("sim","eemcPMTname");
83  stDb->SetFlavor("sim","eemcADCconf");
84 
85  new StEEmcDbMaker("eemcDb");
86  HList=new TObjArray;
87 
88  // ADC 2 energy before slow simulator
89  mEEbefore = new StEEmcA2EMaker("before");
90  mEEbefore->database("eemcDb");
91 #ifdef useMuDst
92  mEEbefore->source("MuDst",1);
93 #else
94  mEEbefore->source("StEvent",2);
95 #endif
96 
97 
98 
99  /*
100  * The slow simulator is setup by default with the best
101  * estimates we have for the single p.e. resolution, energy
102  * deposited by a single mip in an smd/pre/postshower layer,
103  * and number of photoelectrons produced per mip. If one
104  * really wants to play with fire, these are documented
105  * in the header file.
106  *
107  */
108  StEEmcSlowMaker *slowSim=new StEEmcSlowMaker();
109  slowSim->setDropBad(0); // 0=no action, 1=drop chn marked bad in db
110  slowSim->setAddPed(0); // 0=no action, 1=ped offset from db
111  slowSim->setSmearPed(0); // 0=no action, 1=gaussian ped, width from db
112  slowSim->setOverwrite(1); // 0=no action, 1=overwrite muDst/StEvent
113 
114 
115 #ifdef useMuDst
116  slowSim->setSource("MuDst");
117 #else
118  slowSim->setSource("StEvent");
119 #endif
120 
122  slowSim->SetHList(HList);
123 
124 
125  // ADC 2 energy after slow simulator
126  mEEafter = new StEEmcA2EMaker("after");
127  mEEafter->database("eemcDb");
128 #ifdef useMuDst
129  mEEafter->source("MuDst",1);
130 #else
131  mEEafter->source("StEvent",2);
132 #endif
133 
134 
135 
136  // some test histograms
137  TH2F *h_compare=new TH2F("h_compare","ADC after slow maker vs before; uncorrected ADC; corrected ADC",512,0.,1024.,512,0.,1024. );
138  TH2F *h_compare_pre1=new TH2F("h_compare_pre1","ADC after slow maker vs before",256,0.,1024.,256,0.,256. );
139  TH2F *h_compare_pre2=new TH2F("h_compare_pre2","ADC after slow maker vs before",256,0.,1024.,256,0.,256. );
140  TH2F *h_testit=new TH2F("h_testit","ADC after-before vs ADC pre1+pre2; pre1+pre2 AD; corrected-uncorrected",256,0.,512.,100,-50.,50.);
141  TH2F *h_perinc=new TH2F("h_perinc","percent increase vs before; ADC [before simu]; % increase",128,0.,1024.,120,-10.,50.);
142  TH2F *h_perincE=new TH2F("h_perincE","percent increase vs original E; Energy [before simu]; % increase",150,0.,30.,120,-10.,50.);
143  TH2F *h_perincEZ=new TH2F("h_perincEZ","percent increase vs original E (zeros supressed); Energy [before simu]; % increase",150,0.,30.,120,-10.,50.);
144 
145 
146 
147 
148 
149  // Put your analysis maker here
150  // StMyAnaMaker *bhla =new StMyAnaMaker;
151 
152  chain->ls(3);
153  chain->Init();
154 
155  StEEmcDb* myDb = (StEEmcDb*)chain->GetDataSet("StEEmcDb");
156  myDb->setSectors(firstSec, lastSec);
157 
158  int eventCounter=0;
159  int stat=0;
160  int t1=time(0);
161  //---------------------------------------------------
162  while ( stat==0 ) {// loop over events
163  if(eventCounter>=nEve) break;
164  eventCounter++;
165  chain->Clear();
166  stat = chain->Make();
167  if(eventCounter%100==0)
168  printf("\n====================%d processing ============\n", eventCounter);
169 
170  for ( Int_t ii=0;ii<mEEafter->numberOfHitTowers(0);ii++ )
171  {
172  StEEmcTower tafter=mEEafter->hittower(ii,0);
173  StEEmcTower tbefore=mEEbefore->tower(tafter.index(),0);
174  StEEmcTower pbefore=mEEbefore->tower(tafter.index(),1);
175  StEEmcTower qbefore=mEEbefore->tower(tafter.index(),1);
176  h_compare->Fill( tbefore.adc(), tafter.adc());
177 
178  h_testit->Fill( pbefore.adc()+pbefore.adc(), tafter.adc()-tbefore.adc() );
179 
180  h_perinc->Fill( tbefore.adc(), 100.0* (tafter.adc()-tbefore.adc() )/tafter.adc() );
181  h_perincE->Fill( tbefore.energy(), 100.0* (tafter.adc()-tbefore.adc() )/tafter.adc() );
182  if ( TMath::Abs(tbefore.adc() - tafter.adc()) >1. )
183  h_perincEZ->Fill( tbefore.energy(), 100.0* (tafter.adc()-tbefore.adc() )/tafter.adc() );
184 
185  }
186 
187 
188  }
189  printf("sorting done, nEve=%d of %d\n",nEve, nEntries);
190  // return;
191  int t2=time(0);
192  if(t2==t1) t2=t1+1;
193  float tMnt=(t2-t1)/60.;
194  float rate=1.*nEve/(t2-t1);
195  printf("sorting done %d of nEve=%d, CPU rate=%.1f Hz, total time %.1f minute(s) \n",eventCounter,nEntries,rate,tMnt);
196 
197  chain->Finish();
198 
199  // return;
200  // save output histograms
201  // HList.ls();
202 
203 
204 
206 #if 1
207  TString out="./";
208  out+=outname;
209  out+=".hist.root";
210  TFile f( out,"recreate");
211  assert(f.IsOpen());
212  printf("%d histos are written to '%s' ...\n",HList->GetEntries(),out.Data());
213  HList->Write();
214  h_compare->Write();
215  h_testit->Write();
216  h_perinc->Write();h_perincE->Write();h_perincEZ->Write();
217  f.Close();
218 #endif
219 
220 }
StEEmcA2EMaker(const Char_t *name="mEEanalysis")
EEmc ADC –&gt; energy maker.
StEEmcTower & hittower(Int_t hit, Int_t layer)
void source(const Char_t *, Int_t=0)
void setAddPed(Bool_t a=true)
Add pedestal offsets from DB.
virtual void Clear(Option_t *option="")
User defined functions.
Definition: StChain.cxx:77
virtual Int_t Finish()
Definition: StChain.cxx:85
Int_t numberOfHitTowers(Int_t layer) const
void index(Int_t i)
Definition: StEEmcTower.cxx:76
virtual void ls(Option_t *option="") const
Definition: TDataSet.cxx:495
Base class for representing tower, preshower and postshower elements.
Definition: StEEmcTower.h:11
void setOverwrite(Bool_t o=true)
Overwrite the muDst values.
virtual Int_t Make()
Definition: StChain.cxx:110
void setDropBad(Bool_t d=true)
Drop bad channels marked as &quot;fail&quot; in DB.
void adc(Float_t a)
Set the pedestal-subtracted ADC for this element.
Definition: StEEmcElement.h:19
void setSmearPed(Bool_t s=true)
Smear the pedestal with sigma from DB.
StEEmcTower & tower(Int_t index, Int_t layer=0)
Slow simulator for EEMC.
void setSource(const Char_t *name)
Set the source of ADC. Can be &quot;MuDst&quot; (default) or &quot;StEvent&quot;.
void energy(Float_t e)
Set the energy (adc-ped+0.5)/gain for this element.
Definition: StEEmcElement.h:21
void database(const Char_t *)
Set the name of the EEMC database, init obtains pointer.
void setSectors(int, int)
limit the range of sectors for speed
Definition: StEEmcDb.cxx:114