10 #define ProofSimpleFile_cxx
29 ProofSimpleFile::ProofSimpleFile()
43 ProofSimpleFile::~ProofSimpleFile()
47 if (fRandom)
delete fRandom;
51 Int_t ProofSimpleFile::CreateHistoArrays()
56 Error(
"CreateHistoArrays",
"fNhist must be positive!");
60 fHistTop =
new TH1F*[fNhist];
61 fHistDir =
new TH1F*[fNhist];
67 void ProofSimpleFile::Begin(TTree * )
73 TString option = GetOption();
77 if (fInput->FindObject(
"ProofSimpleFile_NHist")) {
78 TParameter<Long_t> *p =
79 dynamic_cast<TParameter<Long_t>*
>(fInput->FindObject(
"ProofSimpleFile_NHist"));
80 fNhist = (p) ? (Int_t) p->GetVal() : fNhist;
81 }
else if ((iopt = option.Index(
"nhist=")) != kNPOS) {
83 Ssiz_t from = iopt + strlen(
"nhist=");
84 if (option.Tokenize(s, from,
";") && s.IsDigit()) fNhist = s.Atoi();
89 void ProofSimpleFile::SlaveBegin(TTree * )
95 TString option = GetOption();
99 if (fInput->FindObject(
"ProofSimpleFile_NHist")) {
100 TParameter<Long_t> *p =
101 dynamic_cast<TParameter<Long_t>*
>(fInput->FindObject(
"ProofSimpleFile_NHist"));
102 fNhist = (p) ? (Int_t) p->GetVal() : fNhist;
103 }
else if ((iopt = option.Index(
"nhist=")) != kNPOS) {
105 Ssiz_t from = iopt + strlen(
"nhist=");
106 if (option.Tokenize(s, from,
";") && s.IsDigit()) fNhist = s.Atoi();
110 fProofFile =
new TProofOutputFile(
"SimpleFile.root",
"M");
111 TNamed *out = (TNamed *) fInput->FindObject(
"PROOF_OUTPUTFILE");
112 if (out) fProofFile->SetOutputFileName(out->GetTitle());
113 TDirectory *savedir = gDirectory;
114 fFile = fProofFile->OpenFile(
"RECREATE");
115 if (fFile && fFile->IsZombie()) SafeDelete(fFile);
120 TString amsg = TString::Format(
"ProofSimpleFile::SlaveBegin: could not create '%s':"
121 " instance is invalid!", fProofFile->GetName());
122 Abort(amsg, kAbortProcess);
127 if (CreateHistoArrays() != 0) {
128 Abort(
"ProofSimpleFile::SlaveBegin: could not create histograms", kAbortProcess);
133 if (!(fFileDir = fFile->mkdir(
"blue"))) {
134 Abort(
"ProofSimpleFile::SlaveBegin: could not create directory 'blue' in file!",
140 for (Int_t i=0; i < fNhist; i++) {
141 fHistTop[i] =
new TH1F(Form(
"ht%d",i), Form(
"ht%d",i), 100, -3., 3.);
142 fHistTop[i]->SetFillColor(kRed);
143 fHistTop[i]->SetDirectory(fFile);
144 fHistDir[i] =
new TH1F(Form(
"hd%d",i), Form(
"hd%d",i), 100, -3., 3.);
145 fHistDir[i]->SetFillColor(kBlue);
146 fHistDir[i]->SetDirectory(fFileDir);
150 fRandom =
new TRandom3(0);
154 Bool_t ProofSimpleFile::Process(Long64_t)
174 for (Int_t i=0; i < fNhist; i++) {
175 if (fRandom && fHistTop[i] && fHistDir[i]) {
176 fHistTop[i]->Fill(fRandom->Gaus(0.,1.));
177 fHistDir[i]->Fill(fRandom->Gaus(0.,1.));
185 void ProofSimpleFile::SlaveTerminate()
193 Bool_t cleanup = kTRUE;
194 TDirectory *savedir = gDirectory;
196 for (Int_t i=0; i < fNhist; i++) {
197 if (fHistTop[i] && fHistTop[i]->GetEntries() > 0) {
198 fHistTop[i]->Write();
199 fHistTop[i]->SetDirectory(0);
205 for (Int_t i=0; i < fNhist; i++) {
206 if (fHistDir[i] && fHistDir[i]->GetEntries() > 0) {
207 fHistDir[i]->Write();
208 fHistDir[i]->SetDirectory(0);
212 gDirectory = savedir;
216 Info(
"SlaveTerminate",
"nothing to save: just cleanup everything ...");
217 TUrl uf(*(fFile->GetEndpointUrl()));
219 gSystem->Unlink(uf.GetFile());
220 SafeDelete(fProofFile);
222 Info(
"SlaveTerminate",
"objects saved into '%s%s': sending related TProofOutputFile ...",
223 fProofFile->GetFileName(), fProofFile->GetOptionsAnchor());
225 fOutput->Add(fProofFile);
232 void ProofSimpleFile::Terminate()
240 dynamic_cast<TProofOutputFile*>(fOutput->FindObject(
"SimpleFile.root")))) {
242 TString outputFile(fProofFile->GetOutputFileName());
243 TString outputName(fProofFile->GetName());
244 outputName +=
".root";
245 Printf(
"outputFile: %s", outputFile.Data());
248 if (!(fFile = TFile::Open(outputFile))) {
249 Error(
"Terminate",
"could not open file: %s", outputFile.Data());
254 Error(
"Terminate",
"TProofOutputFile not found");
259 if (CreateHistoArrays() != 0) {
260 Error(
"Terminate",
"could not create histograms");
271 void ProofSimpleFile::PlotHistos(Int_t opt)
277 TCanvas *c1 =
new TCanvas(
"c1",
"ProofSimpleFile top dir canvas",200,10,700,700);
278 Int_t nside = (Int_t)TMath::Sqrt((Float_t)fNhist);
279 nside = (nside*nside < fNhist) ? nside+1 : nside;
280 c1->Divide(nside,nside,0,0);
282 for (Int_t i=0; i < fNhist; i++) {
283 fHistTop[i] = (TH1F *) fFile->Get(TString::Format(
"ht%d",i));
292 }
else if (opt == 1) {
293 TCanvas *c2 =
new TCanvas(
"c2",
"ProofSimpleFile 'blue' sub-dir canvas",400,60,700,700);
294 Int_t nside = (Int_t)TMath::Sqrt((Float_t)fNhist);
295 nside = (nside*nside < fNhist) ? nside+1 : nside;
296 c2->Divide(nside,nside,0,0);
298 if ((fFileDir = (TDirectory *) fFile->Get(
"blue"))) {
299 for (Int_t i=0; i < fNhist; i++) {
300 fHistDir[i] = (TH1F *) fFileDir->Get(TString::Format(
"hd%d",i));
306 Error(
"PlotHistos",
"directory 'blue' not found in output file");
313 Error(
"PlotHistos",
"unknown option: %d", opt);