ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/COMP/CRAB/python/DataDiscovery.py
(Generate patch)

Comparing COMP/CRAB/python/DataDiscovery.py (file contents):
Revision 1.41 by spiga, Sun Feb 21 12:47:19 2010 UTC vs.
Revision 1.46 by spiga, Wed Jun 2 13:55:14 2010 UTC

# Line 103 | Line 103 | class DataDiscovery:
103          self.parent = {}          # DBS output: parents of each file
104          self.lumis = {}           # DBS output: lumis in each file
105          self.lumiMask = None
106 +        self.splitByLumi = False
107  
108      def fetchDBSInfo(self):
109          """
# Line 110 | Line 111 | class DataDiscovery:
111          """
112          ## get DBS URL
113          global_url="http://cmsdbsprod.cern.ch/cms_dbs_prod_global/servlet/DBSServlet"
114 <        caf_url = "http://cmsdbsprod.cern.ch/cms_dbs_caf_analysis_01/servlet/DBSServlet"
114 <        dbs_url_map  =   {'glite':    global_url,
115 <                          'glite_slc5':global_url,\
116 <                          'glitecoll':global_url,\
117 <                          'condor':   global_url,\
118 <                          'condor_g': global_url,\
119 <                          'glidein':  global_url,\
120 <                          'lsf':      global_url,\
121 <                          'caf':      caf_url,\
122 <                          'sge':      global_url,\
123 <                          'arc':      global_url,\
124 <                          'pbs':      global_url
125 <                          }
126 <
127 <        dbs_url_default = dbs_url_map[(common.scheduler.name()).lower()]
128 <        dbs_url=  self.cfg_params.get('CMSSW.dbs_url', dbs_url_default)
114 >        dbs_url=  self.cfg_params.get('CMSSW.dbs_url', global_url)
115          common.logger.info("Accessing DBS at: "+dbs_url)
116  
117          ## check if runs are selected
# Line 133 | Line 119 | class DataDiscovery:
119          if (self.cfg_params.has_key('CMSSW.runselection')):
120              runselection = parseRange2(self.cfg_params['CMSSW.runselection'])
121  
122 <        ## check if lumiMask is set
122 >        ## check if various lumi parameters are set
123          self.lumiMask = self.cfg_params.get('CMSSW.lumi_mask',None)
124 +        self.lumiParams = self.cfg_params.get('CMSSW.total_number_of_lumis',None) or \
125 +                          self.cfg_params.get('CMSSW.lumis_per_job',None)
126 +
127          lumiList = None
128          if self.lumiMask:
129              lumiList = LumiList(filename=self.lumiMask)
130 +        if runselection:
131 +            runList = LumiList(runs = runselection)
132  
133          self.splitByRun = int(self.cfg_params.get('CMSSW.split_by_run', 0))
143
134          common.logger.log(10-1,"runselection is: %s"%runselection)
135 +
136 +        if not self.splitByRun:
137 +            self.splitByLumi = self.lumiMask or self.lumiParams or self.ads
138 +
139          ## service API
140          args = {}
141          args['url']     = dbs_url
# Line 157 | Line 151 | class DataDiscovery:
151          api = DBSAPI.dbsApi.DbsApi(args)
152          self.files = self.queryDbs(api,path=self.datasetPath,runselection=runselection,useParent=useparent)
153  
154 +        # Check to see what the dataset is
155 +        pdsName = self.datasetPath.split("/")[1]
156 +        primDSs = api.listPrimaryDatasets(pdsName)
157 +        dataType = primDSs[0]['Type']
158 +        common.logger.debug("Datatype is %s" % dataType)
159 +        if dataType == 'data' and not (self.splitByRun or self.splitByLumi):
160 +            msg = 'Data must be split by lumi or by run. ' \
161 +                  'Please see crab -help for the correct settings'
162 +            raise  CrabException(msg)
163 +
164 +
165 +
166          anFileBlocks = []
167          if self.skipBlocks: anFileBlocks = readTXTfile(self, fileBlocks_FileName)
168  
# Line 171 | Line 177 | class DataDiscovery:
177                  # asked retry the list of parent for the given child
178                  if useparent==1:
179                      parList = [x['LogicalFileName'] for x in file['ParentList']]
180 <                if self.ads or self.lumiMask:
180 >                if self.splitByLumi:
181                      fileLumis = [ (x['RunNumber'], x['LumiSectionNumber'])
182                                   for x in file['LumiList'] ]
183                  self.parent[filename] = parList
184                  # For LumiMask, intersection of two lists.
185 <                if self.lumiMask:
185 >                if self.lumiMask and runselection:
186 >                    self.lumis[filename] = runList.filterLumis(lumiList.filterLumis(fileLumis))
187 >                elif runselection:
188 >                    self.lumis[filename] = runList.filterLumis(fileLumis)
189 >                elif self.lumiMask:
190                      self.lumis[filename] = lumiList.filterLumis(fileLumis)
191                  else:
192                      self.lumis[filename] = fileLumis
# Line 204 | Line 214 | class DataDiscovery:
214              msg = "No new fileblocks available for dataset: "+str(self.datasetPath)
215              raise  CrabException(msg)
216  
207        saveFblocks=''
208        for block in self.eventsPerBlock.keys() :
209            saveFblocks += str(block)+'\n'
210            common.logger.log(10-1,"DBSInfo: total nevts %i in block %s "%(self.eventsPerBlock[block],block))
211        writeTXTfile(self, fileBlocks_FileName , saveFblocks)
217  
218          if len(self.eventsPerBlock) <= 0:
219              raise NotExistingDatasetError(("\nNo data for %s in DBS\nPlease check"
# Line 219 | Line 224 | class DataDiscovery:
224      def queryDbs(self,api,path=None,runselection=None,useParent=None):
225  
226          allowedRetriveValue = ['retrive_block', 'retrive_run']
227 <        if self.ads or self.lumiMask:
227 >        if self.ads or self.lumiMask or self.lumiParams:
228              allowedRetriveValue.append('retrive_lumi')
229          if useParent == 1: allowedRetriveValue.append('retrive_parent')
230          common.logger.debug("Set of input parameters used for DBS query: %s" % allowedRetriveValue)
231          try:
232 <            if len(runselection) <=0 :
233 <                if useParent==1 or self.splitByRun==1 or self.ads or self.lumiMask:
232 >            if len(runselection) <=0 or self.splitByLumi:
233 >                if useParent==1 or self.splitByRun==1 or self.splitByLumi:
234                      if self.ads:
235                          files = api.listFiles(analysisDataset=path, retriveList=allowedRetriveValue)
236                      else :

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines